From 5b89ef972f0f72f4c4130d9bed34ea608b46c130 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 5 Jun 2024 02:27:55 +0530 Subject: [PATCH 001/466] lock option screen added --- mobile/lib/generated/l10n.dart | 50 +++++ .../local_authentication_service.dart | 10 + .../ui/settings/TEMP/lock_screen_option.dart | 115 ++++++++++ .../settings/TEMP/lock_screen_option_pin.dart | 200 ++++++++++++++++++ .../ui/settings/security_section_widget.dart | 2 + 5 files changed, 377 insertions(+) create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option.dart create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 00a00e4c2a..7060b5a2ac 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -60,6 +60,56 @@ class S { ); } + /// `Device Lock` + String get deviceLock { + return Intl.message( + 'Device lock', + name: 'deviceLock', + desc: '', + args: [], + ); + } + + /// `PIN Lock` + String get pinLock { + return Intl.message( + 'PIN lock', + name: 'pinLock', + desc: '', + args: [], + ); + } + + /// `Enter the pin to lock the app` + String get enterThePinToLockTheApp { + return Intl.message( + 'Enter the pin to lock the app', + name: 'enterThePinToLockTheApp', + desc: '', + args: [], + ); + } + + /// `When a pin is set , you need to enter password\n whenever you open the app .` + String get whenPinIsSetYouNeedToEnterPassword { + return Intl.message( + 'When a pin is set , you need to enter password\n whenever you open the app .', + name: 'whenPinIsSetYouNeedToEnterPassword', + desc: '', + args: [], + ); + } + + /// `Enable PIN` + String get enablePin { + return Intl.message( + 'Enable PIN', + name: 'enablePin', + desc: '', + args: [], + ); + } + /// `Welcome back!` String get accountWelcomeBack { return Intl.message( diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 4260977f62..7531088d92 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,6 +3,7 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; +import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import 'package:photos/utils/dialog_util.dart'; @@ -50,6 +51,15 @@ class LocalAuthenticationService { AppLock.of(context)!.setEnabled(shouldEnableLockScreen); await Configuration.instance .setShouldShowLockScreen(shouldEnableLockScreen); + if (shouldEnableLockScreen) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOption(); + }, + ), + ); + } return true; } else { AppLock.of(context)! diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart new file mode 100644 index 0000000000..7eb9f698c4 --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -0,0 +1,115 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/captioned_text_widget.dart"; +import "package:photos/ui/components/divider_widget.dart"; +import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; +import "package:photos/ui/components/title_bar_title_widget.dart"; +import "package:photos/ui/components/title_bar_widget.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; + +class LockScreenOption extends StatelessWidget { + const LockScreenOption({super.key}); + + @override + Widget build(BuildContext context) { + final colorScheme = getEnteColorScheme(context); + return Scaffold( + body: CustomScrollView( + primary: false, + slivers: [ + TitleBarWidget( + flexibleSpaceTitle: TitleBarTitleWidget( + title: S.of(context).lockscreen, + ), + ), + SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Column( + children: [ + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).noDeviceLimit, + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: false, + isBottomBorderRadiusRemoved: true, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + ), + DividerWidget( + dividerType: DividerType.menuNoIcon, + bgColor: colorScheme.fillFaint, + ), + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).deviceLock, + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: true, + isBottomBorderRadiusRemoved: true, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + ), + DividerWidget( + dividerType: DividerType.menuNoIcon, + bgColor: colorScheme.fillFaint, + ), + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).pinLock, + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: true, + isBottomBorderRadiusRemoved: true, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPin(); + }, + ), + ), + ), + DividerWidget( + dividerType: DividerType.menuNoIcon, + bgColor: colorScheme.fillFaint, + ), + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).passwordLock, + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: true, + isBottomBorderRadiusRemoved: false, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + ), + ], + ), + ], + ), + ), + ); + }, + childCount: 1, + ), + ), + ], + ), + ); + } +} diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart new file mode 100644 index 0000000000..81334e9348 --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -0,0 +1,200 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; + +class LockScreenOptionPin extends StatelessWidget { + const LockScreenOptionPin({super.key}); + @override + Widget build(BuildContext context) { + final ValueNotifier isPinEnabled = ValueNotifier(false); + final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + return Scaffold( + body: SafeArea( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + height: 80, + width: 80, + child: IconButtonWidget( + icon: Icons.lock_outline, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + onTap: () {}, + ), + ), + Text( + S.of(context).enterThePinToLockTheApp, + style: textTheme.bodyBold, + ), + if (isPinEnabled.value == false) + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Text( + textAlign: TextAlign.center, + S.of(context).whenPinIsSetYouNeedToEnterPassword, + style: textTheme.smallFaint, + ), + ), + // ValueListenableBuilder( + // valueListenable: isPinEnabled, + // builder: (context, value, _) { + // return Padding( + // padding: const EdgeInsets.all(16.0), + // child: isPinEnabled.value + // ? ButtonWidget( + // labelText: S.of(context).enablePin, + // buttonType: ButtonType.neutral, + // buttonSize: ButtonSize.large, + // shouldStickToDarkTheme: true, + // isInAlert: true, + // ) + // : ButtonWidget( + // labelText: S.of(context).yes, + // buttonType: ButtonType.neutral, + // buttonSize: ButtonSize.large, + // shouldStickToDarkTheme: true, + // isInAlert: true, + // ), + // ); + // }, + // ), + Padding( + padding: const EdgeInsets.all(16.0), + child: isPinEnabled.value + ? ButtonWidget( + labelText: S.of(context).enablePin, + buttonType: ButtonType.neutral, + buttonSize: ButtonSize.large, + shouldStickToDarkTheme: true, + isInAlert: true, + ) + : ButtonWidget( + labelText: S.of(context).yes, + buttonType: ButtonType.neutral, + buttonSize: ButtonSize.large, + shouldStickToDarkTheme: true, + isInAlert: true, + ), + ), + ], + ), + ), + ), + ); + } +} +// import 'package:flutter/material.dart'; +// import 'package:photos/generated/l10n.dart'; +// import 'package:photos/theme/ente_theme.dart'; +// import 'package:photos/ui/components/buttons/button_widget.dart'; +// import 'package:photos/ui/components/buttons/icon_button_widget.dart'; +// import 'package:photos/ui/components/models/button_type.dart'; + +// class LockScreenOptionPin extends StatelessWidget { +// final ValueNotifier isPinEnabled = ValueNotifier(false); + +// @override +// Widget build(BuildContext context) { +// final colorTheme = getEnteColorScheme(context); +// final textTheme = getEnteTextTheme(context); + +// return Scaffold( +// body: SafeArea( +// child: Center( +// child: ValueListenableBuilder( +// valueListenable: isPinEnabled, +// builder: (context, isPinEnabled, _) { +// return Column( +// mainAxisAlignment: MainAxisAlignment.center, +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// SizedBox( +// height: 80, +// width: 80, +// child: IconButtonWidget( +// icon: Icons.lock_outline, +// iconButtonType: IconButtonType.primary, +// iconColor: colorTheme.tabIcon, +// onTap: () {}, +// ), +// ), +// Text( +// isPinEnabled +// ? S.of(context).enterThePinToLockTheApp +// : S.of(context).enterThePinToLockTheApp, +// style: textTheme.bodyBold, +// ), +// if(isPinEnabled == false) + +// Padding( +// padding: const EdgeInsets.symmetric( +// horizontal: 16, +// vertical: 8, +// ), +// child: Text( +// S.of(context).whenPinIsSetYouNeedToEnterPassword, +// textAlign: TextAlign.center, +// style: textTheme.smallFaint, +// ), +// ), +// if (!isPinEnabled) +// Padding( +// padding: const EdgeInsets.all(16.0), +// child: ButtonWidget( +// labelText: S.of(context).enablePin, +// buttonType: ButtonType.neutral, +// buttonSize: ButtonSize.large, +// shouldStickToDarkTheme: true, +// isInAlert: true, +// onTap: () { +// isPinEnabled.value = true; +// return Future.value(); +// }, +// ), +// ), +// if (isPinEnabled) +// Padding( +// padding: const EdgeInsets.all(16.0), +// child: Column( +// children: [ +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceEvenly, +// children: List.generate(4, (index) { +// return Container( +// width: 50, +// height: 50, +// decoration: BoxDecoration( +// border: Border.all(color: colorTheme.tabIcon), +// borderRadius: BorderRadius.circular(8), +// ), +// ); +// }), +// ), +// const SizedBox(height: 20), +// ButtonWidget( +// labelText: S.of(context).yes, +// buttonType: ButtonType.neutral, +// buttonSize: ButtonSize.large, +// shouldStickToDarkTheme: true, +// isInAlert: true, +// ), +// ], +// ), +// ), +// ], +// ); +// }, +// ), +// ), +// ), +// ); +// } +// } diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index eb93d85f62..bad5306942 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -153,6 +153,8 @@ class _SecuritySectionWidgetState extends State { S.of(context).authToChangeLockscreenSetting, S.of(context).lockScreenEnablePreSteps, ); + + ///try here also once about the material page route }, ), ), From 356d119fb95c15fc6a8efcdd0bea94190bc8af3a Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 6 Jun 2024 00:37:19 +0530 Subject: [PATCH 002/466] [mob][photos] password screen added --- mobile/lib/generated/l10n.dart | 30 ++ .../ui/settings/TEMP/lock_screen_option.dart | 8 + .../lock_screen_option_confirm_password.dart | 159 ++++++++++ .../TEMP/lock_screen_option_confirm_pin.dart | 180 +++++++++++ .../TEMP/lock_screen_option_password.dart | 143 +++++++++ .../settings/TEMP/lock_screen_option_pin.dart | 298 +++++++----------- 6 files changed, 640 insertions(+), 178 deletions(-) create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 7060b5a2ac..933d8dcf08 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -90,6 +90,36 @@ class S { ); } + /// `Re-enter to confirm the pin` + String get reEnterToConfirmPin { + return Intl.message( + 'Re-enter to confirm the pin', + name: 'reEnterToConfirmPin', + desc: '', + args: [], + ); + } + + /// `Enter the password to lock the app` + String get enterPasswordToLockApp { + return Intl.message( + 'Enter the password to lock the app', + name: 'enterPasswordToLockApp', + desc: '', + args: [], + ); + } + + /// `Next` + String get next { + return Intl.message( + 'Next', + name: 'next', + desc: '', + args: [], + ); + } + /// `When a pin is set , you need to enter password\n whenever you open the app .` String get whenPinIsSetYouNeedToEnterPassword { return Intl.message( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 7eb9f698c4..7690954a00 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -6,6 +6,7 @@ import "package:photos/ui/components/divider_widget.dart"; import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; class LockScreenOption extends StatelessWidget { @@ -97,6 +98,13 @@ class LockScreenOption extends StatelessWidget { menuItemColor: colorScheme.fillFaint, trailingIconIsMuted: true, trailingIcon: Icons.chevron_right_outlined, + onTap: () => Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPassword(); + }, + ), + ), ), ], ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart new file mode 100644 index 0000000000..b45ef06c19 --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -0,0 +1,159 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/components/dialog_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/components/text_input_widget.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; + +class LockScreenOptionConfirmPassword extends StatefulWidget { + const LockScreenOptionConfirmPassword({super.key, required this.password}); + final String password; + @override + State createState() => + _LockScreenOptionConfirmPasswordState(); +} + +class _LockScreenOptionConfirmPasswordState + extends State { + String confirmPassword = ""; + final _confirmPasswordController = TextEditingController(text: null); + + @override + void dispose() { + super.dispose(); + _confirmPasswordController.dispose(); + } + + @override + void initState() { + super.initState(); + } + + Future _confirmPassword() async { + if (widget.password == confirmPassword) { + await showDialogWidget( + context: context, + title: 'Password has been set', + icon: Icons.lock, + body: 'Hereafter password has been required while opening the app.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => const LockScreenOption(), + ), + ); + } else { + await showDialogWidget( + context: context, + title: 'Password does not match', + icon: Icons.lock, + body: 'Please re-enter the password.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + } + _confirmPasswordController.clear(); + } + + @override + Widget build(BuildContext context) { + final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + return Scaffold( + // resizeToAvoidBottomInset: false, + body: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox( + height: 120, + ), + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, + ), + ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock_outline, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ), + ], + ), + ), + Text( + S.of(context).enterPasswordToLockApp, + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(24)), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextInputWidget( + hintText: S.of(context).confirmPassword, + borderRadius: 2, + isClearable: true, + textCapitalization: TextCapitalization.words, + textEditingController: _confirmPasswordController, + prefixIcon: Icons.lock_outline, + isPasswordInput: true, + onChange: (String p0) { + setState(() { + confirmPassword = p0; + }); + }, + ), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(18.0), + child: ButtonWidget( + labelText: S.of(context).next, + buttonType: confirmPassword.length > 8 + ? ButtonType.primary + : ButtonType.secondary, + buttonSize: ButtonSize.large, + onTap: () => _confirmPassword(), + ), + ), + const Padding(padding: EdgeInsets.only(bottom: 24)), + ], + ), + ), + ); + } +} diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart new file mode 100644 index 0000000000..bcc01bcc8d --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -0,0 +1,180 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/components/dialog_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; +import "package:pinput/pin_put/pin_put.dart"; + +class LockScreenOptionConfirmPin extends StatefulWidget { + const LockScreenOptionConfirmPin({super.key, required this.pin}); + final String pin; + @override + State createState() => + _LockScreenOptionConfirmPinState(); +} + +class _LockScreenOptionConfirmPinState + extends State { + final _confirmPinController = TextEditingController(text: null); + + final _pinPutDecoration = BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ); + @override + void dispose() { + super.dispose(); + _confirmPinController.dispose(); + } + + Future confirmPin() async { + if (widget.pin == _confirmCode) { + await showDialogWidget( + context: context, + title: 'Pin has been set', + icon: Icons.lock, + body: 'Hereafter pin has been required while opening the app.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => const LockScreenOption(), + ), + ); + } else { + await showDialogWidget( + context: context, + title: 'Pin does not match', + icon: Icons.lock, + body: 'Please re-enter the pin.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + } + _confirmPinController.clear(); + } + + String _confirmCode = ""; + + @override + Widget build(BuildContext context) { + final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + return Scaffold( + // resizeToAvoidBottomInset: false, + body: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox( + height: 120, + ), + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _confirmPinController, + builder: (context, value, child) { + return CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: _confirmPinController.text.length / 4, + color: colorTheme.primary400, + strokeWidth: 1.5, + ); + }, + ), + ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock_outline, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ), + ], + ), + ), + Text( + S.of(context).reEnterToConfirmPin, + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(12)), + Padding( + padding: const EdgeInsets.fromLTRB(80, 0, 80, 0), + child: PinPut( + fieldsCount: 4, + controller: _confirmPinController, + submittedFieldDecoration: _pinPutDecoration.copyWith( + borderRadius: BorderRadius.circular(20.0), + ), + selectedFieldDecoration: _pinPutDecoration, + followingFieldDecoration: _pinPutDecoration.copyWith( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), + inputDecoration: const InputDecoration( + focusedBorder: InputBorder.none, + border: InputBorder.none, + counterText: '', + ), + textStyle: textTheme.h3, + obscureText: '*', + onChanged: (String pin) { + setState(() { + _confirmCode = pin; + }); + }, + onSubmit: (value) { + FocusScope.of(context).unfocus(); + }, + ), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(18.0), + child: ButtonWidget( + labelText: S.of(context).confirm, + buttonType: _confirmCode.length == 4 + ? ButtonType.primary + : ButtonType.secondary, + buttonSize: ButtonSize.large, + onTap: () => confirmPin(), + ), + ), + const Padding(padding: EdgeInsets.only(bottom: 24)), + ], + ), + ), + ); + } +} diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart new file mode 100644 index 0000000000..88e440f9f5 --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -0,0 +1,143 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/components/dialog_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/components/text_input_widget.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_password.dart"; + +class LockScreenOptionPassword extends StatefulWidget { + const LockScreenOptionPassword({super.key}); + + @override + State createState() => + _LockScreenOptionPasswordState(); +} + +class _LockScreenOptionPasswordState extends State { + final _passwordController = TextEditingController(text: null); + String password = ""; + @override + void dispose() { + super.dispose(); + _passwordController.dispose(); + } + + @override + void initState() { + super.initState(); + } + + Future _confirmPassword() async { + if (password.length > 8) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => LockScreenOptionConfirmPassword( + password: password, + ), + ), + ); + } else { + await showDialogWidget( + context: context, + title: 'Password must have at least 8 characters', + icon: Icons.lock, + body: 'Please re-enter the password.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + } + } + + @override + Widget build(BuildContext context) { + final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + return Scaffold( + // resizeToAvoidBottomInset: false, + body: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox( + height: 120, + ), + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, + ), + ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock_outline, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ), + ], + ), + ), + Text( + S.of(context).enterPasswordToLockApp, + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(24)), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextInputWidget( + hintText: S.of(context).password, + borderRadius: 2, + isClearable: true, + textCapitalization: TextCapitalization.words, + textEditingController: _passwordController, + prefixIcon: Icons.lock_outline, + isPasswordInput: true, + onChange: (String p0) { + setState(() { + password = p0; + }); + }, + ), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(18.0), + child: ButtonWidget( + labelText: S.of(context).next, + buttonType: password.length > 8 + ? ButtonType.primary + : ButtonType.secondary, + buttonSize: ButtonSize.large, + onTap: () => _confirmPassword(), + ), + ), + const Padding(padding: EdgeInsets.only(bottom: 24)), + ], + ), + ), + ); + } +} diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 81334e9348..980aad80bf 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -4,197 +4,139 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; +import "package:pinput/pin_put/pin_put.dart"; -class LockScreenOptionPin extends StatelessWidget { +class LockScreenOptionPin extends StatefulWidget { const LockScreenOptionPin({super.key}); + + @override + State createState() => _LockScreenOptionPinState(); +} + +class _LockScreenOptionPinState extends State { + final _pinController = TextEditingController(text: null); + final _pinPutDecoration = BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ); + @override + void dispose() { + super.dispose(); + _pinController.dispose(); + } + + String _code = ""; + Future confirmPin(String code) async { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => + LockScreenOptionConfirmPin(pin: code), + ), + ); + } + @override Widget build(BuildContext context) { - final ValueNotifier isPinEnabled = ValueNotifier(false); final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( - body: SafeArea( - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - height: 80, - width: 80, - child: IconButtonWidget( - icon: Icons.lock_outline, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, - onTap: () {}, - ), - ), - Text( - S.of(context).enterThePinToLockTheApp, - style: textTheme.bodyBold, + // resizeToAvoidBottomInset: false, + body: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox( + height: 120, + ), + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _pinController, + builder: (context, value, child) { + return CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: _pinController.text.length / 4, + color: colorTheme.primary400, + strokeWidth: 1.5, + ); + }, + ), + ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock_outline, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ), + ], ), - if (isPinEnabled.value == false) - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Text( - textAlign: TextAlign.center, - S.of(context).whenPinIsSetYouNeedToEnterPassword, - style: textTheme.smallFaint, + ), + Text( + S.of(context).enterThePinToLockTheApp, + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(12)), + Padding( + padding: const EdgeInsets.fromLTRB(80, 0, 80, 0), + child: PinPut( + fieldsCount: 4, + controller: _pinController, + submittedFieldDecoration: _pinPutDecoration.copyWith( + borderRadius: BorderRadius.circular(20.0), + ), + selectedFieldDecoration: _pinPutDecoration, + followingFieldDecoration: _pinPutDecoration.copyWith( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), ), ), - // ValueListenableBuilder( - // valueListenable: isPinEnabled, - // builder: (context, value, _) { - // return Padding( - // padding: const EdgeInsets.all(16.0), - // child: isPinEnabled.value - // ? ButtonWidget( - // labelText: S.of(context).enablePin, - // buttonType: ButtonType.neutral, - // buttonSize: ButtonSize.large, - // shouldStickToDarkTheme: true, - // isInAlert: true, - // ) - // : ButtonWidget( - // labelText: S.of(context).yes, - // buttonType: ButtonType.neutral, - // buttonSize: ButtonSize.large, - // shouldStickToDarkTheme: true, - // isInAlert: true, - // ), - // ); - // }, - // ), - Padding( - padding: const EdgeInsets.all(16.0), - child: isPinEnabled.value - ? ButtonWidget( - labelText: S.of(context).enablePin, - buttonType: ButtonType.neutral, - buttonSize: ButtonSize.large, - shouldStickToDarkTheme: true, - isInAlert: true, - ) - : ButtonWidget( - labelText: S.of(context).yes, - buttonType: ButtonType.neutral, - buttonSize: ButtonSize.large, - shouldStickToDarkTheme: true, - isInAlert: true, - ), + inputDecoration: const InputDecoration( + focusedBorder: InputBorder.none, + border: InputBorder.none, + counterText: '', + ), + textStyle: textTheme.h3, + obscureText: '*', + onChanged: (String pin) { + setState(() { + _code = pin; + }); + }, + onSubmit: (value) { + FocusScope.of(context).unfocus(); + }, + ), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.all(18.0), + child: ButtonWidget( + labelText: 'Next', + buttonType: _code.length == 4 + ? ButtonType.primary + : ButtonType.secondary, + buttonSize: ButtonSize.large, + onTap: () => confirmPin(_code), ), - ], - ), + ), + const Padding(padding: EdgeInsets.only(bottom: 24)), + ], ), ), ); } } -// import 'package:flutter/material.dart'; -// import 'package:photos/generated/l10n.dart'; -// import 'package:photos/theme/ente_theme.dart'; -// import 'package:photos/ui/components/buttons/button_widget.dart'; -// import 'package:photos/ui/components/buttons/icon_button_widget.dart'; -// import 'package:photos/ui/components/models/button_type.dart'; - -// class LockScreenOptionPin extends StatelessWidget { -// final ValueNotifier isPinEnabled = ValueNotifier(false); - -// @override -// Widget build(BuildContext context) { -// final colorTheme = getEnteColorScheme(context); -// final textTheme = getEnteTextTheme(context); - -// return Scaffold( -// body: SafeArea( -// child: Center( -// child: ValueListenableBuilder( -// valueListenable: isPinEnabled, -// builder: (context, isPinEnabled, _) { -// return Column( -// mainAxisAlignment: MainAxisAlignment.center, -// crossAxisAlignment: CrossAxisAlignment.center, -// children: [ -// SizedBox( -// height: 80, -// width: 80, -// child: IconButtonWidget( -// icon: Icons.lock_outline, -// iconButtonType: IconButtonType.primary, -// iconColor: colorTheme.tabIcon, -// onTap: () {}, -// ), -// ), -// Text( -// isPinEnabled -// ? S.of(context).enterThePinToLockTheApp -// : S.of(context).enterThePinToLockTheApp, -// style: textTheme.bodyBold, -// ), -// if(isPinEnabled == false) - -// Padding( -// padding: const EdgeInsets.symmetric( -// horizontal: 16, -// vertical: 8, -// ), -// child: Text( -// S.of(context).whenPinIsSetYouNeedToEnterPassword, -// textAlign: TextAlign.center, -// style: textTheme.smallFaint, -// ), -// ), -// if (!isPinEnabled) -// Padding( -// padding: const EdgeInsets.all(16.0), -// child: ButtonWidget( -// labelText: S.of(context).enablePin, -// buttonType: ButtonType.neutral, -// buttonSize: ButtonSize.large, -// shouldStickToDarkTheme: true, -// isInAlert: true, -// onTap: () { -// isPinEnabled.value = true; -// return Future.value(); -// }, -// ), -// ), -// if (isPinEnabled) -// Padding( -// padding: const EdgeInsets.all(16.0), -// child: Column( -// children: [ -// Row( -// mainAxisAlignment: MainAxisAlignment.spaceEvenly, -// children: List.generate(4, (index) { -// return Container( -// width: 50, -// height: 50, -// decoration: BoxDecoration( -// border: Border.all(color: colorTheme.tabIcon), -// borderRadius: BorderRadius.circular(8), -// ), -// ); -// }), -// ), -// const SizedBox(height: 20), -// ButtonWidget( -// labelText: S.of(context).yes, -// buttonType: ButtonType.neutral, -// buttonSize: ButtonSize.large, -// shouldStickToDarkTheme: true, -// isInAlert: true, -// ), -// ], -// ), -// ), -// ], -// ); -// }, -// ), -// ), -// ), -// ); -// } -// } From 1cd0440453a407752c04c2fe96f81d181ee0ac75 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 7 Jun 2024 01:57:59 +0530 Subject: [PATCH 003/466] [mob][photos] added logic of Pin and Password screen --- mobile/lib/core/configuration.dart | 26 +++++- mobile/lib/generated/l10n.dart | 80 ----------------- .../local_authentication_service.dart | 89 +++++++++++++++++++ .../ui/settings/TEMP/lock_screen_option.dart | 12 +-- .../lock_screen_option_confirm_password.dart | 45 +++++----- .../TEMP/lock_screen_option_confirm_pin.dart | 39 +++++--- .../TEMP/lock_screen_option_password.dart | 62 +++++++------ .../settings/TEMP/lock_screen_option_pin.dart | 59 +++++++++--- .../TEMP/lock_screen_option_pin_setting.dart | 17 ++++ 9 files changed, 270 insertions(+), 159 deletions(-) create mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 92bb31e763..67c7299f0b 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -72,7 +72,8 @@ class Configuration { "has_selected_all_folders_for_backup"; static const anonymousUserIDKey = "anonymous_user_id"; static const endPointKey = "endpoint"; - + static const password = "user_pass"; + static const pin = "user_pin"; static final _logger = Logger("Configuration"); String? _cachedToken; @@ -151,6 +152,29 @@ class Configuration { } } + Future savePin(String userPin) async { + await _preferences.setString(pin, userPin); + await _preferences.remove(password); + } + + Future loadSavedPin() async { + return _preferences.getString(pin); + } + + Future savePassword(String pass) async { + await _preferences.setString(password, pass); + await _preferences.remove(pin); + } + + Future loadSavedPassword() async { + return _preferences.getString(password); + } + + Future removePinAndPassword() async { + await _preferences.remove(pin); + await _preferences.remove(password); + } + // _cleanUpStaleFiles deletes all files in the temp directory that are older // than kTempFolderDeletionTimeBuffer except the the temp encrypted files for upload. // Those file are deleted by file uploader after the upload is complete or those diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 933d8dcf08..00a00e4c2a 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -60,86 +60,6 @@ class S { ); } - /// `Device Lock` - String get deviceLock { - return Intl.message( - 'Device lock', - name: 'deviceLock', - desc: '', - args: [], - ); - } - - /// `PIN Lock` - String get pinLock { - return Intl.message( - 'PIN lock', - name: 'pinLock', - desc: '', - args: [], - ); - } - - /// `Enter the pin to lock the app` - String get enterThePinToLockTheApp { - return Intl.message( - 'Enter the pin to lock the app', - name: 'enterThePinToLockTheApp', - desc: '', - args: [], - ); - } - - /// `Re-enter to confirm the pin` - String get reEnterToConfirmPin { - return Intl.message( - 'Re-enter to confirm the pin', - name: 'reEnterToConfirmPin', - desc: '', - args: [], - ); - } - - /// `Enter the password to lock the app` - String get enterPasswordToLockApp { - return Intl.message( - 'Enter the password to lock the app', - name: 'enterPasswordToLockApp', - desc: '', - args: [], - ); - } - - /// `Next` - String get next { - return Intl.message( - 'Next', - name: 'next', - desc: '', - args: [], - ); - } - - /// `When a pin is set , you need to enter password\n whenever you open the app .` - String get whenPinIsSetYouNeedToEnterPassword { - return Intl.message( - 'When a pin is set , you need to enter password\n whenever you open the app .', - name: 'whenPinIsSetYouNeedToEnterPassword', - desc: '', - args: [], - ); - } - - /// `Enable PIN` - String get enablePin { - return Intl.message( - 'Enable PIN', - name: 'enablePin', - desc: '', - args: [], - ); - } - /// `Welcome back!` String get accountWelcomeBack { return Intl.message( diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 7531088d92..9655d2da1a 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,7 +3,13 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; +import "package:photos/generated/l10n.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/dialog_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; +import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import 'package:photos/utils/dialog_util.dart'; @@ -14,6 +20,8 @@ class LocalAuthenticationService { static final LocalAuthenticationService instance = LocalAuthenticationService._privateConstructor(); + final Configuration _configuration = Configuration.instance; + Future requestLocalAuthentication( BuildContext context, String infoMessage, @@ -41,6 +49,87 @@ class LocalAuthenticationService { String errorDialogContent, [ String errorDialogTitle = "", ]) async { + final String? savedPin = await _configuration.loadSavedPin(); + final String? savedPassword = await _configuration.loadSavedPassword(); + + if (savedPassword != null) { + final result = await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return LockScreenOptionPassword( + isAuthenticating: true, + authPass: savedPassword, + ); + }, + ), + ); + if (result) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOption(); + }, + ), + ); + return true; + } else { + await showDialogWidget( + context: context, + title: 'Password does not match', + icon: Icons.lock, + body: 'Please re-enter the password.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + } + return false; + } else if (savedPin != null) { + final result = await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return LockScreenOptionPin( + isAuthenticating: true, + authPin: savedPin, + ); + }, + ), + ); + if (result) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOption(); + }, + ), + ); + return true; + } else { + await showDialogWidget( + context: context, + title: 'Pin does not match', + icon: Icons.lock, + body: 'Please re-enter the pin.', + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + isInAlert: true, + buttonAction: ButtonAction.first, + ), + ], + ); + } + return false; + } + if (await _isLocalAuthSupportedOnDevice()) { AppLock.of(context)!.disable(); final result = await requestAuthentication( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 7690954a00..be7d5749cf 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -52,8 +52,8 @@ class LockScreenOption extends StatelessWidget { bgColor: colorScheme.fillFaint, ), MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).deviceLock, + captionedTextWidget: const CaptionedTextWidget( + title: 'Device Lock', ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, @@ -67,8 +67,8 @@ class LockScreenOption extends StatelessWidget { bgColor: colorScheme.fillFaint, ), MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).pinLock, + captionedTextWidget: const CaptionedTextWidget( + title: 'PIN lock', ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, @@ -89,8 +89,8 @@ class LockScreenOption extends StatelessWidget { bgColor: colorScheme.fillFaint, ), MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).passwordLock, + captionedTextWidget: const CaptionedTextWidget( + title: 'Password lock', ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index b45ef06c19..55370af64d 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; @@ -6,7 +7,6 @@ import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/text_input_widget.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; class LockScreenOptionConfirmPassword extends StatefulWidget { const LockScreenOptionConfirmPassword({super.key, required this.password}); @@ -18,22 +18,30 @@ class LockScreenOptionConfirmPassword extends StatefulWidget { class _LockScreenOptionConfirmPasswordState extends State { - String confirmPassword = ""; + String _confirmPassword = ""; final _confirmPasswordController = TextEditingController(text: null); + final Configuration _configuration = Configuration.instance; + final _focusNode = FocusNode(); @override - void dispose() { - super.dispose(); - _confirmPasswordController.dispose(); + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await Future.delayed(const Duration(seconds: 1)); + _focusNode.requestFocus(); + }); } @override - void initState() { - super.initState(); + void dispose() { + super.dispose(); + _focusNode.dispose(); + _confirmPasswordController.dispose(); } - Future _confirmPassword() async { - if (widget.password == confirmPassword) { + Future _confirmPasswordMatch() async { + if (widget.password == _confirmPassword) { + await _configuration.savePassword(_confirmPassword); await showDialogWidget( context: context, title: 'Password has been set', @@ -49,11 +57,8 @@ class _LockScreenOptionConfirmPasswordState ), ], ); - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => const LockScreenOption(), - ), - ); + Navigator.of(context).pop(); + Navigator.of(context).pop(); } else { await showDialogWidget( context: context, @@ -79,7 +84,6 @@ class _LockScreenOptionConfirmPasswordState final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( - // resizeToAvoidBottomInset: false, body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -117,7 +121,7 @@ class _LockScreenOptionConfirmPasswordState ), ), Text( - S.of(context).enterPasswordToLockApp, + 'Enter the password to lock the app', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(24)), @@ -126,6 +130,7 @@ class _LockScreenOptionConfirmPasswordState child: TextInputWidget( hintText: S.of(context).confirmPassword, borderRadius: 2, + focusNode: _focusNode, isClearable: true, textCapitalization: TextCapitalization.words, textEditingController: _confirmPasswordController, @@ -133,7 +138,7 @@ class _LockScreenOptionConfirmPasswordState isPasswordInput: true, onChange: (String p0) { setState(() { - confirmPassword = p0; + _confirmPassword = p0; }); }, ), @@ -142,12 +147,12 @@ class _LockScreenOptionConfirmPasswordState Padding( padding: const EdgeInsets.all(18.0), child: ButtonWidget( - labelText: S.of(context).next, - buttonType: confirmPassword.length > 8 + labelText: 'Next', + buttonType: _confirmPassword.length > 3 ? ButtonType.primary : ButtonType.secondary, buttonSize: ButtonSize.large, - onTap: () => _confirmPassword(), + onTap: () => _confirmPasswordMatch(), ), ), const Padding(padding: EdgeInsets.only(bottom: 24)), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index bcc01bcc8d..865cfb459a 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -1,11 +1,11 @@ import "package:flutter/material.dart"; +import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import "package:pinput/pin_put/pin_put.dart"; class LockScreenOptionConfirmPin extends StatefulWidget { @@ -19,19 +19,34 @@ class LockScreenOptionConfirmPin extends StatefulWidget { class _LockScreenOptionConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); + String _confirmPin = ""; + final Configuration _configuration = Configuration.instance; + final _focusNode = FocusNode(); final _pinPutDecoration = BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), ); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await Future.delayed(const Duration(seconds: 1)); + _focusNode.requestFocus(); + }); + } + @override void dispose() { super.dispose(); + _focusNode.dispose(); _confirmPinController.dispose(); } - Future confirmPin() async { - if (widget.pin == _confirmCode) { + Future _confirmPinMatch() async { + if (widget.pin == _confirmPin) { + await _configuration.savePin(_confirmPin); await showDialogWidget( context: context, title: 'Pin has been set', @@ -47,11 +62,8 @@ class _LockScreenOptionConfirmPinState ), ], ); - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => const LockScreenOption(), - ), - ); + Navigator.of(context).pop(); + Navigator.of(context).pop(); } else { await showDialogWidget( context: context, @@ -72,8 +84,6 @@ class _LockScreenOptionConfirmPinState _confirmPinController.clear(); } - String _confirmCode = ""; - @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); @@ -123,7 +133,7 @@ class _LockScreenOptionConfirmPinState ), ), Text( - S.of(context).reEnterToConfirmPin, + 'Re-enter to confirm the pin', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), @@ -132,6 +142,7 @@ class _LockScreenOptionConfirmPinState child: PinPut( fieldsCount: 4, controller: _confirmPinController, + focusNode: _focusNode, submittedFieldDecoration: _pinPutDecoration.copyWith( borderRadius: BorderRadius.circular(20.0), ), @@ -151,7 +162,7 @@ class _LockScreenOptionConfirmPinState obscureText: '*', onChanged: (String pin) { setState(() { - _confirmCode = pin; + _confirmPin = pin; }); }, onSubmit: (value) { @@ -164,11 +175,11 @@ class _LockScreenOptionConfirmPinState padding: const EdgeInsets.all(18.0), child: ButtonWidget( labelText: S.of(context).confirm, - buttonType: _confirmCode.length == 4 + buttonType: _confirmPin.length == 4 ? ButtonType.primary : ButtonType.secondary, buttonSize: ButtonSize.large, - onTap: () => confirmPin(), + onTap: () => _confirmPinMatch(), ), ), const Padding(padding: EdgeInsets.only(bottom: 24)), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 88e440f9f5..ce443a9355 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -3,14 +3,18 @@ import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/dialog_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/text_input_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_password.dart"; class LockScreenOptionPassword extends StatefulWidget { - const LockScreenOptionPassword({super.key}); - + const LockScreenOptionPassword({ + super.key, + this.isAuthenticating = false, + this.authPass, + }); + final bool isAuthenticating; + final String? authPass; @override State createState() => _LockScreenOptionPasswordState(); @@ -19,19 +23,38 @@ class LockScreenOptionPassword extends StatefulWidget { class _LockScreenOptionPasswordState extends State { final _passwordController = TextEditingController(text: null); String password = ""; + final _focusNode = FocusNode(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await Future.delayed(const Duration(seconds: 1)); + _focusNode.requestFocus(); + }); + } + @override void dispose() { super.dispose(); _passwordController.dispose(); + _focusNode.dispose(); } - @override - void initState() { - super.initState(); + Future confirmPasswordAuth(String code) async { + if (widget.authPass == code) { + Navigator.of(context).pop(true); + return true; + } + Navigator.of(context).pop(false); + return false; } Future _confirmPassword() async { - if (password.length > 8) { + if (widget.isAuthenticating) { + await confirmPasswordAuth(password); + return; + } else { await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => LockScreenOptionConfirmPassword( @@ -39,22 +62,6 @@ class _LockScreenOptionPasswordState extends State { ), ), ); - } else { - await showDialogWidget( - context: context, - title: 'Password must have at least 8 characters', - icon: Icons.lock, - body: 'Please re-enter the password.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); } } @@ -63,7 +70,6 @@ class _LockScreenOptionPasswordState extends State { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( - // resizeToAvoidBottomInset: false, body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -101,7 +107,10 @@ class _LockScreenOptionPasswordState extends State { ), ), Text( - S.of(context).enterPasswordToLockApp, + widget.isAuthenticating + ? 'Enter the password to change \nLockscreen settings.' + : 'Enter the password to lock the app', + textAlign: TextAlign.center, style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(24)), @@ -111,6 +120,7 @@ class _LockScreenOptionPasswordState extends State { hintText: S.of(context).password, borderRadius: 2, isClearable: true, + focusNode: _focusNode, textCapitalization: TextCapitalization.words, textEditingController: _passwordController, prefixIcon: Icons.lock_outline, @@ -126,7 +136,7 @@ class _LockScreenOptionPasswordState extends State { Padding( padding: const EdgeInsets.all(18.0), child: ButtonWidget( - labelText: S.of(context).next, + labelText: 'Next', buttonType: password.length > 8 ? ButtonType.primary : ButtonType.secondary, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 980aad80bf..f04579d23a 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -1,5 +1,4 @@ import "package:flutter/material.dart"; -import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; @@ -8,32 +7,65 @@ import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; import "package:pinput/pin_put/pin_put.dart"; class LockScreenOptionPin extends StatefulWidget { - const LockScreenOptionPin({super.key}); + const LockScreenOptionPin({ + super.key, + this.isAuthenticating = false, + this.authPin, + }); + final bool isAuthenticating; + final String? authPin; @override State createState() => _LockScreenOptionPinState(); } class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); + String _code = ""; + final _focusNode = FocusNode(); + final _pinPutDecoration = BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), ); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await Future.delayed(const Duration(seconds: 1)); + _focusNode.requestFocus(); + }); + } + @override void dispose() { super.dispose(); _pinController.dispose(); + _focusNode.dispose(); } - String _code = ""; - Future confirmPin(String code) async { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => - LockScreenOptionConfirmPin(pin: code), - ), - ); + Future confirmPinAuth(String code) async { + if (widget.authPin == code) { + Navigator.of(context).pop(true); + return true; + } + Navigator.of(context).pop(false); + return false; + } + + Future _confirmPin(String code) async { + if (widget.isAuthenticating) { + await confirmPinAuth(code); + return; + } else { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => + LockScreenOptionConfirmPin(pin: code), + ), + ); + } } @override @@ -85,13 +117,16 @@ class _LockScreenOptionPinState extends State { ), ), Text( - S.of(context).enterThePinToLockTheApp, + widget.isAuthenticating + ? 'Enter the pin to change Lockscreen settings.' + : 'Enter the pin to lock the app', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), Padding( padding: const EdgeInsets.fromLTRB(80, 0, 80, 0), child: PinPut( + focusNode: _focusNode, fieldsCount: 4, controller: _pinController, submittedFieldDecoration: _pinPutDecoration.copyWith( @@ -130,7 +165,7 @@ class _LockScreenOptionPinState extends State { ? ButtonType.primary : ButtonType.secondary, buttonSize: ButtonSize.large, - onTap: () => confirmPin(_code), + onTap: () => _confirmPin(_code), ), ), const Padding(padding: EdgeInsets.only(bottom: 24)), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart new file mode 100644 index 0000000000..e5d940d36d --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart @@ -0,0 +1,17 @@ +import "package:flutter/widgets.dart"; + +class LockScreenOptionPinSetting extends StatefulWidget { + const LockScreenOptionPinSetting({super.key}); + + @override + State createState() => + _LockScreenOptionPinSettingState(); +} + +class _LockScreenOptionPinSettingState + extends State { + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} From c1acc3eca1b3357a62336a92856614a700f32ae5 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:14:54 +0530 Subject: [PATCH 004/466] fix(mobile): add ffprobe parser --- mobile/lib/models/channel_layouts.dart | 108 +++ mobile/lib/models/codecs.dart | 16 + mobile/lib/models/ffprobe_keys.dart | 80 ++ mobile/lib/models/ffprobe_props.dart | 390 ++++++++++ mobile/lib/models/language.dart | 722 ++++++++++++++++++ mobile/lib/models/mp4.dart | 97 +++ .../ui/viewer/file/file_details_widget.dart | 48 +- .../file_details/location_tags_widget.dart | 3 +- mobile/lib/utils/ffprobe_util.dart | 143 ++++ mobile/lib/utils/thumbnail_util.dart | 2 +- 10 files changed, 1603 insertions(+), 6 deletions(-) create mode 100644 mobile/lib/models/channel_layouts.dart create mode 100644 mobile/lib/models/codecs.dart create mode 100644 mobile/lib/models/ffprobe_keys.dart create mode 100644 mobile/lib/models/ffprobe_props.dart create mode 100644 mobile/lib/models/language.dart create mode 100644 mobile/lib/models/mp4.dart create mode 100644 mobile/lib/utils/ffprobe_util.dart diff --git a/mobile/lib/models/channel_layouts.dart b/mobile/lib/models/channel_layouts.dart new file mode 100644 index 0000000000..983140d337 --- /dev/null +++ b/mobile/lib/models/channel_layouts.dart @@ -0,0 +1,108 @@ +// channel layout constants from FFmpeg libavutil/channel_layout.h +class ChannelLayouts { + // ignore_for_file: constant_identifier_names + + static const FRONT_LEFT = 0x00000001; + static const FRONT_RIGHT = 0x00000002; + static const FRONT_CENTER = 0x00000004; + static const LOW_FREQUENCY = 0x00000008; + static const BACK_LEFT = 0x00000010; + static const BACK_RIGHT = 0x00000020; + static const FRONT_LEFT_OF_CENTER = 0x00000040; + static const FRONT_RIGHT_OF_CENTER = 0x00000080; + static const BACK_CENTER = 0x00000100; + static const SIDE_LEFT = 0x00000200; + static const SIDE_RIGHT = 0x00000400; + static const TOP_CENTER = 0x00000800; + static const TOP_FRONT_LEFT = 0x00001000; + static const TOP_FRONT_CENTER = 0x00002000; + static const TOP_FRONT_RIGHT = 0x00004000; + static const TOP_BACK_LEFT = 0x00008000; + static const TOP_BACK_CENTER = 0x00010000; + static const TOP_BACK_RIGHT = 0x00020000; + static const STEREO_LEFT = 0x20000000; + static const STEREO_RIGHT = 0x40000000; + + static const WIDE_LEFT = 0x0000000080000000; + static const WIDE_RIGHT = 0x0000000100000000; + static const SURROUND_DIRECT_LEFT = 0x0000000200000000; + static const SURROUND_DIRECT_RIGHT = 0x0000000400000000; + static const LOW_FREQUENCY_2 = 0x0000000800000000; + + static const LAYOUT_NATIVE = 0x8000000000000000; + + static const LAYOUT_MONO = (FRONT_CENTER); + static const LAYOUT_STEREO = (FRONT_LEFT | FRONT_RIGHT); + static const LAYOUT_2POINT1 = (LAYOUT_STEREO | LOW_FREQUENCY); + static const LAYOUT_2_1 = (LAYOUT_STEREO | BACK_CENTER); + static const LAYOUT_SURROUND = (LAYOUT_STEREO | FRONT_CENTER); + static const LAYOUT_3POINT1 = (LAYOUT_SURROUND | LOW_FREQUENCY); + static const LAYOUT_4POINT0 = (LAYOUT_SURROUND | BACK_CENTER); + static const LAYOUT_4POINT1 = (LAYOUT_4POINT0 | LOW_FREQUENCY); + static const LAYOUT_2_2 = (LAYOUT_STEREO | SIDE_LEFT | SIDE_RIGHT); + static const LAYOUT_QUAD = (LAYOUT_STEREO | BACK_LEFT | BACK_RIGHT); + static const LAYOUT_5POINT0 = (LAYOUT_SURROUND | SIDE_LEFT | SIDE_RIGHT); + static const LAYOUT_5POINT1 = (LAYOUT_5POINT0 | LOW_FREQUENCY); + static const LAYOUT_5POINT0_BACK = (LAYOUT_SURROUND | BACK_LEFT | BACK_RIGHT); + static const LAYOUT_5POINT1_BACK = (LAYOUT_5POINT0_BACK | LOW_FREQUENCY); + static const LAYOUT_6POINT0 = (LAYOUT_5POINT0 | BACK_CENTER); + static const LAYOUT_6POINT0_FRONT = + (LAYOUT_2_2 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER); + static const LAYOUT_HEXAGONAL = (LAYOUT_5POINT0_BACK | BACK_CENTER); + static const LAYOUT_6POINT1 = (LAYOUT_5POINT1 | BACK_CENTER); + static const LAYOUT_6POINT1_BACK = (LAYOUT_5POINT1_BACK | BACK_CENTER); + static const LAYOUT_6POINT1_FRONT = (LAYOUT_6POINT0_FRONT | LOW_FREQUENCY); + static const LAYOUT_7POINT0 = (LAYOUT_5POINT0 | BACK_LEFT | BACK_RIGHT); + static const LAYOUT_7POINT0_FRONT = + (LAYOUT_5POINT0 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER); + static const LAYOUT_7POINT1 = (LAYOUT_5POINT1 | BACK_LEFT | BACK_RIGHT); + static const LAYOUT_7POINT1_WIDE = + (LAYOUT_5POINT1 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER); + static const LAYOUT_7POINT1_WIDE_BACK = + (LAYOUT_5POINT1_BACK | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER); + static const LAYOUT_OCTAGONAL = + (LAYOUT_5POINT0 | BACK_LEFT | BACK_CENTER | BACK_RIGHT); + static const LAYOUT_HEXADECAGONAL = (LAYOUT_OCTAGONAL | + WIDE_LEFT | + WIDE_RIGHT | + TOP_BACK_LEFT | + TOP_BACK_RIGHT | + TOP_BACK_CENTER | + TOP_FRONT_CENTER | + TOP_FRONT_LEFT | + TOP_FRONT_RIGHT); + static const LAYOUT_STEREO_DOWNMIX = (STEREO_LEFT | STEREO_RIGHT); + + static const names = { + LAYOUT_NATIVE: 'native', + LAYOUT_MONO: 'mono', + LAYOUT_STEREO: 'stereo 2.0 • FL FR', + LAYOUT_2POINT1: 'stereo 2.1 • FL FR LFE', + LAYOUT_2_1: 'surround 3.0 • FL FR BC', + LAYOUT_SURROUND: 'stereo 3.0 • FL FR FC', + LAYOUT_3POINT1: 'stereo 3.1 • FL FR FC LFE', + LAYOUT_4POINT0: 'surround 4.0 • FL FR FC BC', + LAYOUT_4POINT1: 'surround 4.1 • FL FR FC BC LFE', + LAYOUT_2_2: 'quad (side) • FL FR SL SR', + LAYOUT_QUAD: 'quad (back) • FL FR BL BR', + LAYOUT_5POINT0: '5.0 (side) • FL FR FC SL SR', + LAYOUT_5POINT1: '5.1 (side) • FL FR FC SL SR LFE', + LAYOUT_5POINT0_BACK: '5.0 (back) • FL FR FC BL BR', + LAYOUT_5POINT1_BACK: '5.1 (back) • FL FR FC BL BR LFE', + LAYOUT_6POINT0: '6.0 (side) • FL FR FC SL SR BC', + LAYOUT_6POINT0_FRONT: '6.0 (front) • FL FR FLC FRC SL SR', + LAYOUT_HEXAGONAL: 'hexagonal • FL FR FC BL BR BC', + LAYOUT_6POINT1: '6.1 (side) • FL FR FC SL SR BC LFE', + LAYOUT_6POINT1_BACK: '6.1 (back) • FL FR FC BL BR BC LFE', + LAYOUT_6POINT1_FRONT: '6.1 (front) • FL FR FLC FRC SL SR LFE', + LAYOUT_7POINT0: 'surround 7.0 • FL FR FC SL SR BL BR', + LAYOUT_7POINT0_FRONT: 'wide 7.0 • FL FR FC FLC FRC SL SR', + LAYOUT_7POINT1: 'surround 7.1 • FL FR FC SL SR BL BR LFE', + LAYOUT_7POINT1_WIDE: 'wide 7.1 • FL FR FC FLC FRC SL SR LFE', + LAYOUT_7POINT1_WIDE_BACK: 'wide 7.1 (back) • FL FR FC FLC FRC BL BR LFE', + LAYOUT_OCTAGONAL: 'octagonal • FL FR FC SL SR BL BR BC', + LAYOUT_HEXADECAGONAL: + 'hexadecagonal • FL FR FC WL WR TFL TFR TFC SL SR BL BR BC TBL TBR TBC', + LAYOUT_STEREO_DOWNMIX: 'stereo downmix', + }; +} diff --git a/mobile/lib/models/codecs.dart b/mobile/lib/models/codecs.dart new file mode 100644 index 0000000000..aa29d560b0 --- /dev/null +++ b/mobile/lib/models/codecs.dart @@ -0,0 +1,16 @@ +class Codecs { + static const aac = 'aac'; + static const ac3 = 'ac3'; + static const eac3 = 'eac3'; + static const h264 = 'h264'; + static const hevc = 'hevc'; + static const matroska = 'matroska'; + static const mpeg4 = 'mpeg4'; + static const mpts = 'mpegts'; + static const opus = 'opus'; + static const pgs = 'hdmv_pgs_subtitle'; + static const subrip = 'subrip'; + static const theora = 'theora'; + static const vorbis = 'vorbis'; + static const webm = 'webm'; +} diff --git a/mobile/lib/models/ffprobe_keys.dart b/mobile/lib/models/ffprobe_keys.dart new file mode 100644 index 0000000000..826f2814e9 --- /dev/null +++ b/mobile/lib/models/ffprobe_keys.dart @@ -0,0 +1,80 @@ +class FFProbeKeys { + static const androidCaptureFramerate = 'com.android.capture.fps'; + static const androidManufacturer = 'com.android.manufacturer'; + static const androidModel = 'com.android.model'; + static const androidVersion = 'com.android.version'; + static const avgFrameRate = 'avg_frame_rate'; + static const bps = 'bps'; + static const bitrate = 'bitrate'; + static const bitsPerRawSample = 'bits_per_raw_sample'; + static const byteCount = 'number_of_bytes'; + static const channelLayout = 'channel_layout'; + static const chromaLocation = 'chroma_location'; + static const codecName = 'codec_name'; + static const codecPixelFormat = 'codec_pixel_format'; + static const codecProfileId = 'codec_profile_id'; + static const codedHeight = 'coded_height'; + static const codecLevel = 'codec_level'; + static const codedWidth = 'coded_width'; + static const colorPrimaries = 'color_primaries'; + static const colorRange = 'color_range'; + static const colorSpace = 'color_space'; + static const colorTransfer = 'color_transfer'; + static const compatibleBrands = 'compatible_brands'; + static const creationTime = 'creation_time'; + static const dar = 'display_aspect_ratio'; + static const date = 'date'; + static const disposition = 'disposition'; + static const duration = 'duration'; + static const durationMicros = 'duration_us'; + static const encoder = 'encoder'; + static const extraDataSize = 'extradata_size'; + static const fieldOrder = 'field_order'; + static const filename = 'filename'; + static const fpsDen = 'fps_den'; + static const fpsNum = 'fps_num'; + static const frameCount = 'number_of_frames'; + static const handlerName = 'handler_name'; + static const hasBFrames = 'has_b_frames'; + static const height = 'height'; + static const index = 'index'; + static const language = 'language'; + static const location = 'location'; + static const majorBrand = 'major_brand'; + static const mediaFormat = 'format'; + static const mediaType = 'media_type'; + static const minorVersion = 'minor_version'; + static const nalLengthSize = 'nal_length_size'; + static const quicktimeLocationAccuracyHorizontal = + 'com.apple.quicktime.location.accuracy.horizontal'; + static const rFrameRate = 'r_frame_rate'; + static const rotate = 'rotate'; + static const sampleFormat = 'sample_fmt'; + static const sampleRate = 'sample_rate'; + static const sar = 'sample_aspect_ratio'; + static const sarDen = 'sar_den'; + static const sourceOshash = 'source_oshash'; + static const startMicros = 'start_us'; + static const startPts = 'start_pts'; + static const startTime = 'start_time'; + static const statisticsWritingApp = '_statistics_writing_app'; + static const statisticsWritingDateUtc = '_statistics_writing_date_utc'; + static const segmentCount = 'segment_count'; + static const streamType = 'type'; + static const title = 'title'; + static const timeBase = 'time_base'; + static const track = 'track'; + static const vendorId = 'vendor_id'; + static const width = 'width'; + static const xiaomiSlowMoment = 'com.xiaomi.slow_moment'; +} + +class MediaStreamTypes { + static const attachment = 'attachment'; + static const audio = 'audio'; + static const metadata = 'metadata'; + static const subtitle = 'subtitle'; + static const timedText = 'timedtext'; + static const unknown = 'unknown'; + static const video = 'video'; +} diff --git a/mobile/lib/models/ffprobe_props.dart b/mobile/lib/models/ffprobe_props.dart new file mode 100644 index 0000000000..05f383e107 --- /dev/null +++ b/mobile/lib/models/ffprobe_props.dart @@ -0,0 +1,390 @@ +import "package:collection/collection.dart"; +import "package:intl/intl.dart"; +import "package:photos/models/channel_layouts.dart"; +import "package:photos/models/codecs.dart"; +import "package:photos/models/ffprobe_keys.dart"; +import "package:photos/models/language.dart"; +import "package:photos/models/location/location.dart"; +import "package:photos/models/mp4.dart"; + +class FFProbeProps { + final double? captureFps; + final String? androidManufacturer; + final String? androidModel; + final String? androidVersion; + final String? bitRate; + final String? bitsPerRawSample; + final String? byteCount; + final String? channelLayout; + final String? chromaLocation; + final String? codecName; + final String? codecPixelFormat; + final int? codedHeight; + final int? codedWidth; + final String? colorPrimaries; + final String? colorRange; + final String? colorSpace; + final String? colorTransfer; + final String? colorProfile; + final String? compatibleBrands; + final String? creationTime; + final String? displayAspectRatio; + final DateTime? date; + final String? duration; + final String? durationMicros; + final String? extraDataSize; + final String? fieldOrder; + final String? fpsDen; + final int? frameCount; + final String? handlerName; + final bool? hasBFrames; + final int? height; + final String? language; + final Location? location; + final String? majorBrand; + final String? mediaFormat; + final String? mediaType; + final String? minorVersion; + final String? nalLengthSize; + final String? quicktimeLocationAccuracyHorizontal; + final int? rFrameRate; + final String? rotate; + final String? sampleFormat; + final String? sampleRate; + final String? sampleAspectRatio; + final String? sarDen; + final int? segmentCount; + final String? sourceOshash; + final String? startMicros; + final String? startPts; + final String? startTime; + final String? statisticsWritingApp; + final String? statisticsWritingDateUtc; + final String? timeBase; + final String? track; + final String? vendorId; + final int? width; + final String? xiaomiSlowMoment; + + FFProbeProps({ + required this.captureFps, + required this.androidManufacturer, + required this.androidModel, + required this.androidVersion, + required this.bitRate, + required this.bitsPerRawSample, + required this.byteCount, + required this.channelLayout, + required this.chromaLocation, + required this.codecName, + required this.codecPixelFormat, + required this.codedHeight, + required this.codedWidth, + required this.colorPrimaries, + required this.colorRange, + required this.colorSpace, + required this.colorTransfer, + required this.colorProfile, + required this.compatibleBrands, + required this.creationTime, + required this.displayAspectRatio, + required this.date, + required this.duration, + required this.durationMicros, + required this.extraDataSize, + required this.fieldOrder, + required this.fpsDen, + required this.frameCount, + required this.handlerName, + required this.hasBFrames, + required this.height, + required this.language, + required this.location, + required this.majorBrand, + required this.mediaFormat, + required this.mediaType, + required this.minorVersion, + required this.nalLengthSize, + required this.quicktimeLocationAccuracyHorizontal, + required this.rFrameRate, + required this.rotate, + required this.sampleFormat, + required this.sampleRate, + required this.sampleAspectRatio, + required this.sarDen, + required this.segmentCount, + required this.sourceOshash, + required this.startMicros, + required this.startPts, + required this.startTime, + required this.statisticsWritingApp, + required this.statisticsWritingDateUtc, + required this.timeBase, + required this.track, + required this.vendorId, + required this.width, + required this.xiaomiSlowMoment, + }); + + factory FFProbeProps.fromJson(Map? json) { + return FFProbeProps( + captureFps: + double.tryParse(json?[FFProbeKeys.androidCaptureFramerate] ?? ""), + androidManufacturer: json?[FFProbeKeys.androidManufacturer], + androidModel: json?[FFProbeKeys.androidModel], + androidVersion: json?[FFProbeKeys.androidVersion], + bitRate: _formatMetric( + json?[FFProbeKeys.bitrate] ?? json?[FFProbeKeys.bps], + 'b/s', + ), + bitsPerRawSample: json?[FFProbeKeys.bitsPerRawSample], + byteCount: _formatFilesize(json?[FFProbeKeys.byteCount]), + channelLayout: _formatChannelLayout(json?[FFProbeKeys.channelLayout]), + chromaLocation: json?[FFProbeKeys.chromaLocation], + codecName: _formatCodecName(json?[FFProbeKeys.codecName]), + codecPixelFormat: + (json?[FFProbeKeys.codecPixelFormat] as String?)?.toUpperCase(), + codedHeight: int.tryParse(json?[FFProbeKeys.codedHeight] ?? ""), + codedWidth: int.tryParse(json?[FFProbeKeys.codedWidth] ?? ""), + colorPrimaries: + (json?[FFProbeKeys.colorPrimaries] as String?)?.toUpperCase(), + colorRange: (json?[FFProbeKeys.colorRange] as String?)?.toUpperCase(), + colorSpace: (json?[FFProbeKeys.colorSpace] as String?)?.toUpperCase(), + colorTransfer: + (json?[FFProbeKeys.colorTransfer] as String?)?.toUpperCase(), + colorProfile: json?[FFProbeKeys.colorTransfer], + compatibleBrands: json?[FFProbeKeys.compatibleBrands], + creationTime: _formatDate(json?[FFProbeKeys.creationTime] ?? ""), + displayAspectRatio: json?[FFProbeKeys.dar], + date: DateTime.tryParse(json?[FFProbeKeys.date] ?? ""), + duration: _formatDuration(json?[FFProbeKeys.durationMicros]), + durationMicros: formatPreciseDuration( + Duration( + microseconds: + int.tryParse(json?[FFProbeKeys.durationMicros] ?? "") ?? 0, + ), + ), + extraDataSize: json?[FFProbeKeys.extraDataSize], + fieldOrder: json?[FFProbeKeys.fieldOrder], + fpsDen: json?[FFProbeKeys.fpsDen], + frameCount: int.tryParse(json?[FFProbeKeys.frameCount] ?? ""), + handlerName: json?[FFProbeKeys.handlerName], + hasBFrames: json?[FFProbeKeys.hasBFrames], + height: int.tryParse(json?[FFProbeKeys.height] ?? ""), + language: json?[FFProbeKeys.language], + location: _formatLocation(json?[FFProbeKeys.location]), + majorBrand: json?[FFProbeKeys.majorBrand], + mediaFormat: json?[FFProbeKeys.mediaFormat], + mediaType: json?[FFProbeKeys.mediaType], + minorVersion: json?[FFProbeKeys.minorVersion], + nalLengthSize: json?[FFProbeKeys.nalLengthSize], + quicktimeLocationAccuracyHorizontal: + json?[FFProbeKeys.quicktimeLocationAccuracyHorizontal], + rFrameRate: int.tryParse(json?[FFProbeKeys.rFrameRate] ?? ""), + rotate: json?[FFProbeKeys.rotate], + sampleFormat: json?[FFProbeKeys.sampleFormat], + sampleRate: json?[FFProbeKeys.sampleRate], + sampleAspectRatio: json?[FFProbeKeys.sar], + sarDen: json?[FFProbeKeys.sarDen], + segmentCount: int.tryParse(json?[FFProbeKeys.segmentCount] ?? ""), + sourceOshash: json?[FFProbeKeys.sourceOshash], + startMicros: json?[FFProbeKeys.startMicros], + startPts: json?[FFProbeKeys.startPts], + startTime: _formatDuration(json?[FFProbeKeys.startTime]), + statisticsWritingApp: json?[FFProbeKeys.statisticsWritingApp], + statisticsWritingDateUtc: json?[FFProbeKeys.statisticsWritingDateUtc], + timeBase: json?[FFProbeKeys.timeBase], + track: json?[FFProbeKeys.title], + vendorId: json?[FFProbeKeys.vendorId], + width: int.tryParse(json?[FFProbeKeys.width] ?? ""), + xiaomiSlowMoment: json?[FFProbeKeys.xiaomiSlowMoment], + ); + } + + static String _formatBrand(String value) => Mp4.brands[value] ?? value; + + static String _formatChannelLayout(dynamic value) { + if (value is int) { + return ChannelLayouts.names[value] ?? 'unknown ($value)'; + } + return '$value'; + } + + static final Map _codecNames = { + Codecs.ac3: 'AC-3', + Codecs.eac3: 'E-AC-3', + Codecs.h264: 'AVC (H.264)', + Codecs.hevc: 'HEVC (H.265)', + Codecs.matroska: 'Matroska', + Codecs.mpeg4: 'MPEG-4 Visual', + Codecs.mpts: 'MPEG-TS', + Codecs.opus: 'Opus', + Codecs.pgs: 'PGS', + Codecs.subrip: 'SubRip', + Codecs.theora: 'Theora', + Codecs.vorbis: 'Vorbis', + Codecs.webm: 'WebM', + }; + + static String? _formatCodecName(String? value) => + value == null || value == "none" + ? null + : _codecNames[value] ?? value.toUpperCase().replaceAll('_', ' '); + + // input example: '2021-04-12T09:14:37.000000Z' + static String? _formatDate(String value) { + final date = DateTime.tryParse(value); + if (date == null) return value; + final epoch = DateTime.fromMillisecondsSinceEpoch(0, isUtc: true); + if (date == epoch) return null; + return date.toIso8601String(); + } + + // input example: '00:00:05.408000000' or '5.408000' + static Duration? _parseDuration(String? value) { + if (value == null) return null; + + var match = _durationHmsmPattern.firstMatch(value); + if (match != null) { + final h = int.tryParse(match.group(1)!); + final m = int.tryParse(match.group(2)!); + final s = int.tryParse(match.group(3)!); + final millis = double.tryParse(match.group(4)!); + if (h != null && m != null && s != null && millis != null) { + return Duration( + hours: h, + minutes: m, + seconds: s, + milliseconds: (millis * 1000).toInt(), + ); + } + } + + match = _durationSmPattern.firstMatch(value); + if (match != null) { + final s = int.tryParse(match.group(1)!); + final millis = double.tryParse(match.group(2)!); + if (s != null && millis != null) { + return Duration( + seconds: s, + milliseconds: (millis * 1000).toInt(), + ); + } + } + + return null; + } + + // input example: '00:00:05.408000000' or '5.408000' + static String? _formatDuration(String? value) { + if (value == null) return null; + final duration = _parseDuration(value); + return duration != null ? formatPreciseDuration(duration) : value; + } + + static String? _formatFilesize(dynamic value) { + if (value == null) return null; + final size = value is int ? value : int.tryParse(value); + const String asciiLocale = 'en_US'; + return size != null ? formatFileSize(asciiLocale, size) : value; + } + + static String _formatLanguage(String value) { + final language = Language.living639_2 + .firstWhereOrNull((language) => language.iso639_2 == value); + return language?.native ?? value; + } + + static final _durationHmsmPattern = RegExp(r'(\d+):(\d+):(\d+)(.\d+)'); + static final _durationSmPattern = RegExp(r'(\d+)(.\d+)'); + static final _locationPattern = RegExp(r'([+-][.0-9]+)'); + + // format ISO 6709 input, e.g. '+37.5090+127.0243/' (Samsung), '+51.3328-000.7053+113.474/' (Apple) + static Location? _formatLocation(String? value) { + if (value == null) return null; + final matches = _locationPattern.allMatches(value); + if (matches.isNotEmpty) { + final coordinates = + matches.map((m) => double.tryParse(m.group(0)!)).toList(); + if (coordinates.every((c) => c == 0)) return null; + try { + return Location( + latitude: coordinates[0], + longitude: coordinates[1], + ); + } catch (e) { + return null; + } + } + return null; + } + + static String? _formatMetric(dynamic size, String unit, {int round = 2}) { + if (size == null) return null; + if (size is String) { + final parsed = int.tryParse(size); + if (parsed == null) return size; + size = parsed; + } + + const divider = 1000; + if (size < divider) return '$size $unit'; + if (size < divider * divider) { + return '${(size / divider).toStringAsFixed(round)} K$unit'; + } + return '${(size / divider / divider).toStringAsFixed(round)} M$unit'; + } +} + +String formatDay(DateTime date, String locale) => + DateFormat.yMMMd(locale).format(date); + +String formatTime(DateTime date, String locale, bool use24hour) => + (use24hour ? DateFormat.Hm(locale) : DateFormat.jm(locale)).format(date); + +String formatDateTime(DateTime date, String locale, bool use24hour) => [ + formatDay(date, locale), + formatTime(date, locale, use24hour), + ].join(" "); + +String formatFriendlyDuration(Duration d) { + final seconds = (d.inSeconds.remainder(Duration.secondsPerMinute)) + .toString() + .padLeft(2, '0'); + if (d.inHours == 0) return '${d.inMinutes}:$seconds'; + + final minutes = (d.inMinutes.remainder(Duration.minutesPerHour)) + .toString() + .padLeft(2, '0'); + return '${d.inHours}:$minutes:$seconds'; +} + +String? formatPreciseDuration(Duration d) { + if (d.inSeconds == 0) return null; + final millis = + ((d.inMicroseconds / 1000.0).round() % 1000).toString().padLeft(3, '0'); + final seconds = (d.inSeconds.remainder(Duration.secondsPerMinute)) + .toString() + .padLeft(2, '0'); + final minutes = (d.inMinutes.remainder(Duration.minutesPerHour)) + .toString() + .padLeft(2, '0'); + final hours = (d.inHours).toString().padLeft(2, '0'); + return '$hours:$minutes:$seconds.$millis'; +} + +const kilo = 1024; +const mega = kilo * kilo; +const giga = mega * kilo; +const tera = giga * kilo; + +String formatFileSize(String locale, int size, {int round = 2}) { + if (size < kilo) return '$size B'; + + final compactFormatter = + NumberFormat('0${round > 0 ? '.${'0' * round}' : ''}', locale); + if (size < mega) return '${compactFormatter.format(size / kilo)} KB'; + if (size < giga) return '${compactFormatter.format(size / mega)} MB'; + if (size < tera) return '${compactFormatter.format(size / giga)} GB'; + return '${compactFormatter.format(size / tera)} TB'; +} diff --git a/mobile/lib/models/language.dart b/mobile/lib/models/language.dart new file mode 100644 index 0000000000..c49930124c --- /dev/null +++ b/mobile/lib/models/language.dart @@ -0,0 +1,722 @@ +class Language { + final String iso639_2, name; + final String? native; + + const Language({ + required this.iso639_2, + required this.name, + this.native, + }); + + // subset of ISO 639-2 codes for living languages (including macrolanguages, excluding constructed and collective ones) + // synonyms for terminology and bibliographic applications (ISO 639-2/T and ISO 639-2/B) are separate entries + // some entries have been simplified to keep only one name for one code + static const living639_2 = [ + Language( + iso639_2: 'aar', + name: 'Afar', + native: 'Qafaraf; ’Afar Af; Afaraf; Qafar af', + ), + Language( + iso639_2: 'abk', + name: 'Abkhazian', + native: 'Аҧсуа бызшәа Aƥsua bızšwa; Аҧсшәа Aƥsua', + ), + Language(iso639_2: 'ace', name: 'Achinese', native: 'بهسا اچيه'), + Language(iso639_2: 'ach', name: 'Acoli', native: 'Lwo'), + Language(iso639_2: 'ada', name: 'Adangme', native: 'Dangme'), + Language( + iso639_2: 'ady', + name: 'Adyghe; Adygei', + native: 'Адыгабзэ; Кӏахыбзэ', + ), + Language(iso639_2: 'afr', name: 'Afrikaans', native: 'Afrikaans'), + Language(iso639_2: 'ain', name: 'Ainu', native: 'アイヌ・イタㇰ Ainu-itak'), + Language(iso639_2: 'aka', name: 'Akan', native: 'Akan'), + Language( + iso639_2: 'ale', + name: 'Aleut', + native: 'Уна́ӈам тунуу́; Унаӈан умсуу', + ), + Language(iso639_2: 'alt', name: 'Southern Altai', native: 'Алтай тили'), + Language(iso639_2: 'amh', name: 'Amharic', native: 'አማርኛ Amârıñâ'), + Language(iso639_2: 'anp', name: 'Angika'), + Language(iso639_2: 'ara', name: 'Arabic', native: 'العربية'), + Language(iso639_2: 'arg', name: 'Aragonese', native: 'aragonés'), + Language(iso639_2: 'arn', name: 'Mapudungun; Mapuche'), + Language(iso639_2: 'arp', name: 'Arapaho', native: 'Hinónoʼeitíít'), + Language(iso639_2: 'arw', name: 'Arawak', native: 'Lokono'), + Language(iso639_2: 'asm', name: 'Assamese', native: 'অসমীয়া'), + Language(iso639_2: 'ast', name: 'Asturian', native: 'asturianu'), + Language( + iso639_2: 'ava', + name: 'Avaric', + native: 'Магӏарул мацӏ; Авар мацӏ', + ), + Language(iso639_2: 'awa', name: 'Awadhi', native: 'अवधी'), + Language(iso639_2: 'aym', name: 'Aymara', native: 'Aymar aru'), + Language( + iso639_2: 'aze', + name: 'Azerbaijani', + native: 'Azərbaycan dili; آذربایجان دیلی; Азәрбајҹан дили', + ), + Language( + iso639_2: 'bak', + name: 'Bashkir', + native: 'Башҡорт теле; Başqort tele', + ), + Language(iso639_2: 'bal', name: 'Baluchi', native: 'بلوچی'), + Language(iso639_2: 'bam', name: 'Bambara', native: 'ߓߊߡߊߣߊߣߞߊߣ'), + Language( + iso639_2: 'ban', + name: 'Balinese', + native: 'ᬪᬵᬱᬩᬮᬶ; ᬩᬲᬩᬮᬶ; Basa Bali', + ), + Language(iso639_2: 'bas', name: 'Basa', native: 'Mbene; Ɓasaá'), + Language(iso639_2: 'bej', name: 'Beja; Bedawiyet', native: 'Bidhaawyeet'), + Language( + iso639_2: 'bel', + name: 'Belarusian', + native: 'Беларуская мова Belaruskaâ mova', + ), + Language(iso639_2: 'bem', name: 'Bemba', native: 'Chibemba'), + Language(iso639_2: 'ben', name: 'Bengali', native: 'বাংলা Bāŋlā'), + Language(iso639_2: 'bho', name: 'Bhojpuri', native: 'भोजपुरी'), + Language(iso639_2: 'bik', name: 'Bikol'), + Language(iso639_2: 'bin', name: 'Bini; Edo', native: 'Ẹ̀dó'), + Language(iso639_2: 'bis', name: 'Bislama'), + Language(iso639_2: 'bla', name: 'Siksika', native: 'ᓱᖽᐧᖿ'), + Language(iso639_2: 'bod', name: 'Tibetan', native: 'བོད་སྐད་; ལྷ་སའི་སྐད་'), + Language(iso639_2: 'tib', name: 'Tibetan', native: 'བོད་སྐད་; ལྷ་སའི་སྐད་'), + Language(iso639_2: 'bos', name: 'Bosnian', native: 'bosanski'), + Language(iso639_2: 'bra', name: 'Braj'), + Language(iso639_2: 'bre', name: 'Breton', native: 'Brezhoneg'), + Language(iso639_2: 'bua', name: 'Buriat', native: 'буряад хэлэн'), + Language(iso639_2: 'bug', name: 'Buginese', native: 'ᨅᨔ ᨕᨘᨁᨗ'), + Language(iso639_2: 'bul', name: 'Bulgarian', native: 'български'), + Language(iso639_2: 'byn', name: 'Blin; Bilin', native: 'ብሊና; ብሊን'), + Language(iso639_2: 'cad', name: 'Caddo', native: 'Hasí:nay'), + Language(iso639_2: 'car', name: 'Galibi Carib', native: 'Kari\'nja'), + Language(iso639_2: 'cat', name: 'Catalan', native: 'català'), + Language(iso639_2: 'ceb', name: 'Cebuano', native: 'Sinugbuanong Binisayâ'), + Language(iso639_2: 'ces', name: 'Czech', native: 'čeština'), + Language(iso639_2: 'cze', name: 'Czech', native: 'čeština'), + Language(iso639_2: 'cha', name: 'Chamorro', native: 'Finu\' Chamoru'), + Language( + iso639_2: 'che', + name: 'Chechen', + native: 'Нохчийн мотт; نَاخچیین موٓتت; ნახჩიე მუოთთ', + ), + Language(iso639_2: 'chk', name: 'Chuukese'), + Language(iso639_2: 'chm', name: 'Mari', native: 'марий йылме'), + Language( + iso639_2: 'chn', + name: 'Chinook jargon', + native: 'chinuk wawa; wawa; chinook lelang; lelang', + ), + Language(iso639_2: 'cho', name: 'Choctaw', native: 'Chahta\''), + Language( + iso639_2: 'chp', + name: 'Chipewyan; Dene Suline', + native: 'ᑌᓀᓱᒼᕄᓀ (Dënesųłiné)', + ), + Language( + iso639_2: 'chr', + name: 'Cherokee', + native: 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ Tsalagi gawonihisdi', + ), + Language(iso639_2: 'chv', name: 'Chuvash', native: 'Чӑвашла'), + Language(iso639_2: 'chy', name: 'Cheyenne', native: 'Tsėhésenėstsestȯtse'), + Language( + iso639_2: 'cnr', + name: 'Montenegrin', + native: 'crnogorski / црногорски', + ), + Language(iso639_2: 'cor', name: 'Cornish', native: 'Kernowek'), + Language(iso639_2: 'cos', name: 'Corsican', native: 'Corsu; Lingua corsa'), + Language(iso639_2: 'cre', name: 'Cree'), + Language( + iso639_2: 'crh', + name: 'Crimean Tatar; Crimean Turkish', + native: 'Къырымтатарджа; Къырымтатар тили; Ҡырымтатарҗа; Ҡырымтатар тили', + ), + Language(iso639_2: 'csb', name: 'Kashubian', native: 'Kaszëbsczi jãzëk'), + Language(iso639_2: 'cym', name: 'Welsh', native: 'Cymraeg; y Gymraeg'), + Language(iso639_2: 'wel', name: 'Welsh', native: 'Cymraeg; y Gymraeg'), + Language( + iso639_2: 'dak', + name: 'Dakota', + native: 'Dakhótiyapi; Dakȟótiyapi', + ), + Language(iso639_2: 'dan', name: 'Danish', native: 'dansk'), + Language(iso639_2: 'dar', name: 'Dargwa', native: 'дарган мез'), + Language(iso639_2: 'del', name: 'Delaware'), + Language(iso639_2: 'den', name: 'Slave (Athapascan)', native: 'Dene K\'e'), + Language(iso639_2: 'deu', name: 'German', native: 'Deutsch'), + Language(iso639_2: 'ger', name: 'German', native: 'Deutsch'), + Language(iso639_2: 'dgr', name: 'Dogrib'), + Language(iso639_2: 'din', name: 'Dinka', native: 'Thuɔŋjäŋ'), + Language( + iso639_2: 'div', + name: 'Divehi; Dhivehi; Maldivian', + native: 'ދިވެހި; ދިވެހިބަސް Divehi', + ), + Language( + iso639_2: 'doi', + name: 'Dogri', + native: '𑠖𑠵𑠌𑠤𑠮; डोगरी; ڈوگرى', + ), + Language( + iso639_2: 'dsb', + name: 'Lower Sorbian', + native: 'Dolnoserbski; Dolnoserbšćina', + ), + Language(iso639_2: 'dua', name: 'Duala'), + Language(iso639_2: 'dyu', name: 'Dyula', native: 'Julakan'), + Language(iso639_2: 'dzo', name: 'Dzongkha', native: 'རྫོང་ཁ་ Ĵoŋkha'), + Language(iso639_2: 'efi', name: 'Efik'), + Language(iso639_2: 'eka', name: 'Ekajuk'), + Language(iso639_2: 'ell', name: 'Greek', native: 'Ελληνικά'), + Language(iso639_2: 'gre', name: 'Greek', native: 'Ελληνικά'), + Language(iso639_2: 'eng', name: 'English', native: 'English'), + Language(iso639_2: 'est', name: 'Estonian', native: 'eesti'), + Language(iso639_2: 'eus', name: 'Basque', native: 'euskara'), + Language(iso639_2: 'baq', name: 'Basque', native: 'euskara'), + Language(iso639_2: 'ewe', name: 'Ewe', native: 'Èʋegbe'), + Language(iso639_2: 'ewo', name: 'Ewondo'), + Language(iso639_2: 'fan', name: 'Fang'), + Language(iso639_2: 'fao', name: 'Faroese', native: 'føroyskt'), + Language(iso639_2: 'fas', name: 'Persian', native: 'فارسی'), + Language(iso639_2: 'per', name: 'Persian', native: 'فارسی'), + Language(iso639_2: 'fat', name: 'Fanti', native: 'Mfantse; Fante; Fanti'), + Language(iso639_2: 'fij', name: 'Fijian', native: 'Na Vosa Vakaviti'), + Language( + iso639_2: 'fil', + name: 'Filipino; Pilipino', + native: 'Wikang Filipino', + ), + Language(iso639_2: 'fin', name: 'Finnish', native: 'suomi'), + Language(iso639_2: 'fon', name: 'Fon', native: 'Fon gbè'), + Language(iso639_2: 'fra', name: 'French', native: 'français'), + Language(iso639_2: 'fre', name: 'French', native: 'français'), + Language( + iso639_2: 'frr', + name: 'Northern Frisian', + native: 'Frasch; Fresk; Freesk; Friisk', + ), + Language( + iso639_2: 'frs', + name: 'East Frisian Low Saxon', + native: 'Oostfreesk; Plattdüütsk', + ), + Language(iso639_2: 'fry', name: 'Western Frisian', native: 'Frysk'), + Language(iso639_2: 'ful', name: 'Fulah', native: 'Fulfulde; Pulaar; Pular'), + Language(iso639_2: 'fur', name: 'Friulian', native: 'Furlan'), + Language(iso639_2: 'gaa', name: 'Ga', native: 'Gã'), + Language(iso639_2: 'gay', name: 'Gayo', native: 'Basa Gayo'), + Language(iso639_2: 'gba', name: 'Gbaya'), + Language(iso639_2: 'gil', name: 'Gilbertese', native: 'Taetae ni Kiribati'), + Language( + iso639_2: 'gla', + name: 'Gaelic; Scottish Gaelic', + native: 'Gàidhlig', + ), + Language(iso639_2: 'gle', name: 'Irish', native: 'Gaeilge'), + Language(iso639_2: 'glg', name: 'Galician', native: 'galego'), + Language(iso639_2: 'glv', name: 'Manx', native: 'Gaelg; Gailck'), + Language(iso639_2: 'gon', name: 'Gondi'), + Language(iso639_2: 'gor', name: 'Gorontalo', native: 'Bahasa Hulontalo'), + Language(iso639_2: 'grb', name: 'Grebo'), + Language(iso639_2: 'grn', name: 'Guarani', native: 'Avañe\'ẽ'), + Language( + iso639_2: 'gsw', + name: 'Swiss German; Alemannic; Alsatian', + native: 'Schwiizerdütsch', + ), + Language(iso639_2: 'guj', name: 'Gujarati', native: 'ગુજરાતી Gujarātī'), + Language(iso639_2: 'gwi', name: 'Gwich\'in', native: 'Dinjii Zhu’ Ginjik'), + Language( + iso639_2: 'hai', + name: 'Haida', + native: 'X̱aat Kíl; X̱aadas Kíl; X̱aayda Kil; Xaad kil', + ), + Language( + iso639_2: 'hat', + name: 'Haitian; Haitian Creole', + native: 'kreyòl ayisyen', + ), + Language(iso639_2: 'hau', name: 'Hausa', native: 'Harshen Hausa; هَرْشَن'), + Language(iso639_2: 'haw', name: 'Hawaiian', native: 'ʻŌlelo Hawaiʻi'), + Language(iso639_2: 'heb', name: 'Hebrew', native: 'עברית'), + Language(iso639_2: 'her', name: 'Herero', native: 'Otjiherero'), + Language(iso639_2: 'hil', name: 'Hiligaynon', native: 'Ilonggo'), + Language(iso639_2: 'hin', name: 'Hindi', native: 'हिन्दी Hindī'), + Language( + iso639_2: 'hmn', + name: 'Hmong; Mong', + native: 'lus Hmoob; lug Moob; lol Hmongb; 𖬇𖬰𖬞 𖬌𖬣𖬵', + ), + Language(iso639_2: 'hmo', name: 'Hiri Motu'), + Language(iso639_2: 'hrv', name: 'Croatian', native: 'hrvatski'), + Language(iso639_2: 'hsb', name: 'Upper Sorbian', native: 'hornjoserbšćina'), + Language(iso639_2: 'hun', name: 'Hungarian', native: 'magyar'), + Language(iso639_2: 'hup', name: 'Hupa', native: 'Na:tinixwe Mixine:whe\''), + Language(iso639_2: 'hye', name: 'Armenian', native: 'Հայերէն; Հայերեն'), + Language(iso639_2: 'arm', name: 'Armenian', native: 'Հայերէն; Հայերեն'), + Language(iso639_2: 'iba', name: 'Iban', native: 'Jaku Iban'), + Language(iso639_2: 'ibo', name: 'Igbo', native: 'Asụsụ Igbo'), + Language(iso639_2: 'iii', name: 'Sichuan Yi; Nuosu', native: 'ꆈꌠꉙ'), + Language(iso639_2: 'iku', name: 'Inuktitut', native: 'ᐃᓄᒃᑎᑐᑦ'), + Language( + iso639_2: 'ilo', + name: 'Iloko', + native: 'Pagsasao nga Ilokano; Ilokano', + ), + Language(iso639_2: 'ind', name: 'Indonesian', native: 'Bahasa Indonesia'), + Language(iso639_2: 'inh', name: 'Ingush', native: 'ГӀалгӀай мотт'), + Language(iso639_2: 'ipk', name: 'Inupiaq', native: 'Iñupiaq'), + Language(iso639_2: 'isl', name: 'Icelandic', native: 'íslenska'), + Language(iso639_2: 'ice', name: 'Icelandic', native: 'íslenska'), + Language(iso639_2: 'ita', name: 'Italian', native: 'italiano'), + Language(iso639_2: 'jav', name: 'Javanese', native: 'ꦧꦱꦗꦮ / Basa Jawa'), + Language(iso639_2: 'jpn', name: 'Japanese', native: '日本語'), + Language(iso639_2: 'jpr', name: 'Judeo-Persian', native: 'Dzhidi'), + Language( + iso639_2: 'jrb', + name: 'Judeo-Arabic', + native: 'عربية يهودية / ערבית יהודית', + ), + Language( + iso639_2: 'kaa', + name: 'Kara-Kalpak', + native: 'Qaraqalpaq tili; Қарақалпақ тили', + ), + Language( + iso639_2: 'kab', + name: 'Kabyle', + native: 'Tamaziɣt Taqbaylit; Tazwawt', + ), + Language(iso639_2: 'kac', name: 'Kachin; Jingpho', native: 'Jingpho'), + Language(iso639_2: 'kal', name: 'Kalaallisut; Greenlandic'), + Language(iso639_2: 'kam', name: 'Kamba'), + Language(iso639_2: 'kan', name: 'Kannada', native: 'ಕನ್ನಡ Kannađa'), + Language(iso639_2: 'kas', name: 'Kashmiri', native: 'कॉशुर / كأشُر'), + Language(iso639_2: 'kat', name: 'Georgian', native: 'ქართული'), + Language(iso639_2: 'geo', name: 'Georgian', native: 'ქართული'), + Language(iso639_2: 'kau', name: 'Kanuri'), + Language( + iso639_2: 'kaz', + name: 'Kazakh', + native: 'қазақ тілі qazaq tili; қазақша qazaqşa', + ), + Language( + iso639_2: 'kbd', + name: 'Kabardian', + native: 'Адыгэбзэ (Къэбэрдейбзэ) Adıgăbză (Qăbărdeĭbză)', + ), + Language(iso639_2: 'kha', name: 'Khasi', native: 'কা কতিয়েন খাশি'), + Language( + iso639_2: 'khm', + name: 'Central Khmer', + native: 'ភាសាខ្មែរ Phiəsaakhmær', + ), + Language(iso639_2: 'kik', name: 'Kikuyu; Gikuyu', native: 'Gĩkũyũ'), + Language(iso639_2: 'kin', name: 'Kinyarwanda', native: 'Ikinyarwanda'), + Language( + iso639_2: 'kir', + name: 'Kirghiz; Kyrgyz', + native: 'кыргызча kırgızça; кыргыз тили kırgız tili', + ), + Language(iso639_2: 'kmb', name: 'Kimbundu'), + Language(iso639_2: 'kok', name: 'Konkani', native: 'कोंकणी'), + Language(iso639_2: 'kom', name: 'Komi', native: 'Коми кыв'), + Language(iso639_2: 'kon', name: 'Kongo'), + Language(iso639_2: 'kor', name: 'Korean', native: '한국어'), + Language(iso639_2: 'kos', name: 'Kosraean'), + Language(iso639_2: 'kpe', name: 'Kpelle', native: 'Kpɛlɛwoo'), + Language( + iso639_2: 'krc', + name: 'Karachay-Balkar', + native: 'Къарачай-Малкъар тил; Таулу тил', + ), + Language( + iso639_2: 'krl', + name: 'Karelian', + native: 'karjal; kariela; karjala', + ), + Language(iso639_2: 'kru', name: 'Kurukh', native: 'कुड़ुख़'), + Language(iso639_2: 'kua', name: 'Kuanyama; Kwanyama'), + Language(iso639_2: 'kum', name: 'Kumyk', native: 'къумукъ тил/qumuq til'), + Language(iso639_2: 'kur', name: 'Kurdish', native: 'kurdî / کوردی'), + Language(iso639_2: 'kut', name: 'Kutenai'), + Language(iso639_2: 'lad', name: 'Ladino', native: 'Judeo-español'), + Language(iso639_2: 'lah', name: 'Lahnda', native: 'بھارت کا'), + Language(iso639_2: 'lam', name: 'Lamba'), + Language(iso639_2: 'lao', name: 'Lao', native: 'ພາສາລາວ Phasalaw'), + Language(iso639_2: 'lav', name: 'Latvian', native: 'latviešu'), + Language(iso639_2: 'lez', name: 'Lezghian', native: 'Лезги чӏал'), + Language( + iso639_2: 'lim', + name: 'Limburgan; Limburger; Limburgish', + native: 'Lèmburgs', + ), + Language(iso639_2: 'lin', name: 'Lingala'), + Language(iso639_2: 'lit', name: 'Lithuanian', native: 'lietuvių'), + Language(iso639_2: 'lol', name: 'Mongo', native: 'Lomongo'), + Language(iso639_2: 'loz', name: 'Lozi'), + Language( + iso639_2: 'ltz', + name: 'Luxembourgish; Letzeburgesch', + native: 'Lëtzebuergesch', + ), + Language(iso639_2: 'lua', name: 'Luba-Lulua', native: 'Tshiluba'), + Language(iso639_2: 'lub', name: 'Luba-Katanga', native: 'Kiluba'), + Language(iso639_2: 'lug', name: 'Ganda', native: 'Luganda'), + Language(iso639_2: 'lun', name: 'Lunda', native: 'Chilunda'), + Language( + iso639_2: 'luo', + name: 'Luo (Kenya and Tanzania)', + native: 'Dholuo', + ), + Language(iso639_2: 'lus', name: 'Lushai', native: 'Mizo ṭawng'), + Language(iso639_2: 'mad', name: 'Madurese', native: 'Madhura'), + Language(iso639_2: 'mag', name: 'Magahi', native: 'मगही'), + Language(iso639_2: 'mah', name: 'Marshallese', native: 'Kajin M̧ajeļ'), + Language(iso639_2: 'mai', name: 'Maithili', native: 'मैथिली; মৈথিলী'), + Language( + iso639_2: 'mak', + name: 'Makasar', + native: 'Basa Mangkasara\' / ᨅᨔ ᨆᨀᨔᨑ', + ), + Language(iso639_2: 'mal', name: 'Malayalam', native: 'മലയാളം'), + Language(iso639_2: 'man', name: 'Mandingo', native: 'Mandi\'nka kango'), + Language(iso639_2: 'mar', name: 'Marathi', native: 'मराठी Marāţhī'), + Language(iso639_2: 'mas', name: 'Masai', native: 'ɔl'), + Language(iso639_2: 'mdf', name: 'Moksha', native: 'мокшень кяль'), + Language(iso639_2: 'mdr', name: 'Mandar'), + Language(iso639_2: 'men', name: 'Mende', native: 'Mɛnde yia'), + Language(iso639_2: 'mic', name: 'Mi\'kmaq; Micmac', native: 'Míkmawísimk'), + Language(iso639_2: 'min', name: 'Minangkabau', native: 'Baso Minang'), + Language(iso639_2: 'mkd', name: 'Macedonian', native: 'македонски'), + Language(iso639_2: 'mac', name: 'Macedonian', native: 'македонски'), + Language(iso639_2: 'mlg', name: 'Malagasy'), + Language(iso639_2: 'mlt', name: 'Maltese', native: 'Malti'), + Language( + iso639_2: 'mnc', + name: 'Manchu', + native: 'ᠮᠠᠨᠵᡠ ᡤᡳᠰᡠᠨ Manju gisun', + ), + Language(iso639_2: 'mni', name: 'Manipuri'), + Language(iso639_2: 'moh', name: 'Mohawk', native: 'Kanien’kéha'), + Language( + iso639_2: 'mon', + name: 'Mongolian', + native: 'монгол хэл mongol xel; ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ', + ), + Language(iso639_2: 'mos', name: 'Mossi', native: 'Mooré'), + Language(iso639_2: 'mri', name: 'Māori', native: 'Te Reo Māori'), + Language(iso639_2: 'mao', name: 'Māori', native: 'Te Reo Māori'), + Language(iso639_2: 'msa', name: 'Malay', native: 'Bahasa Melayu'), + Language(iso639_2: 'may', name: 'Malay', native: 'Bahasa Melayu'), + Language(iso639_2: 'mus', name: 'Creek', native: 'Mvskoke'), + Language( + iso639_2: 'mwl', + name: 'Mirandese', + native: 'mirandés; lhéngua mirandesa', + ), + Language(iso639_2: 'mwr', name: 'Marwari', native: 'मारवाड़ी'), + Language(iso639_2: 'mya', name: 'Burmese', native: 'မြန်မာစာ; မြန်မာစကား'), + Language(iso639_2: 'bur', name: 'Burmese', native: 'မြန်မာစာ; မြန်မာစကား'), + Language(iso639_2: 'myv', name: 'Erzya', native: 'эрзянь кель'), + Language(iso639_2: 'nap', name: 'Neapolitan', native: 'napulitano'), + Language(iso639_2: 'nau', name: 'Nauru', native: 'dorerin Naoero'), + Language( + iso639_2: 'nav', + name: 'Navajo; Navaho', + native: 'Diné bizaad; Naabeehó bizaad', + ), + Language( + iso639_2: 'nbl', + name: 'Ndebele, South; South Ndebele', + native: 'isiNdebele seSewula', + ), + Language( + iso639_2: 'nde', + name: 'Ndebele, North; North Ndebele', + native: 'siNdebele saseNyakatho', + ), + Language(iso639_2: 'ndo', name: 'Ndonga', native: 'ndonga'), + Language( + iso639_2: 'nds', + name: 'Low German; Low Saxon; German, Low; Saxon, Low', + native: 'Plattdütsch; Plattdüütsch', + ), + Language( + iso639_2: 'nep', + name: 'Nepali', + native: 'नेपाली भाषा Nepālī bhāśā', + ), + Language( + iso639_2: 'new', + name: 'Nepal Bhasa; Newari', + native: 'नेपाल भाषा; नेवाः भाय्', + ), + Language(iso639_2: 'nia', name: 'Nias', native: 'Li Niha'), + Language(iso639_2: 'niu', name: 'Niuean', native: 'ko e vagahau Niuē'), + Language(iso639_2: 'nld', name: 'Dutch', native: 'Nederlands'), + Language(iso639_2: 'dut', name: 'Dutch', native: 'Nederlands'), + Language(iso639_2: 'nno', name: 'Nynorsk', native: 'nynorsk'), + Language(iso639_2: 'nob', name: 'Bokmål', native: 'bokmål'), + Language(iso639_2: 'nog', name: 'Nogai', native: 'Ногай тили'), + Language(iso639_2: 'nor', name: 'Norwegian', native: 'Norsk'), + Language(iso639_2: 'nqo', name: 'N\'Ko'), + Language( + iso639_2: 'nso', + name: 'Pedi; Sepedi; Northern Sotho', + native: 'Sesotho sa Leboa', + ), + Language( + iso639_2: 'nya', + name: 'Chichewa; Chewa; Nyanja', + native: 'Chichewa; Chinyanja', + ), + Language(iso639_2: 'nym', name: 'Nyamwezi'), + Language(iso639_2: 'nyn', name: 'Nyankole'), + Language(iso639_2: 'nyo', name: 'Nyoro', native: 'Runyoro'), + Language(iso639_2: 'nzi', name: 'Nzima'), + Language( + iso639_2: 'oci', + name: 'Occitan (post 1500)', + native: 'occitan; lenga d\'òc', + ), + Language(iso639_2: 'oji', name: 'Ojibwa'), + Language(iso639_2: 'ori', name: 'Oriya', native: 'ଓଡ଼ିଆ'), + Language(iso639_2: 'orm', name: 'Oromo', native: 'Afaan Oromoo'), + Language( + iso639_2: 'osa', + name: 'Osage', + native: 'Wazhazhe ie / 𐓏𐓘𐓻𐓘𐓻𐓟 𐒻𐓟', + ), + Language( + iso639_2: 'oss', + name: 'Ossetian; Ossetic', + native: 'Ирон æвзаг Iron ævzag', + ), + Language(iso639_2: 'pag', name: 'Pangasinan', native: 'Salitan Pangasinan'), + Language( + iso639_2: 'pam', + name: 'Pampanga; Kapampangan', + native: 'Amánung Kapampangan; Amánung Sísuan', + ), + Language( + iso639_2: 'pan', + name: 'Panjabi; Punjabi', + native: 'ਪੰਜਾਬੀ / پنجابی Pãjābī', + ), + Language(iso639_2: 'pap', name: 'Papiamento', native: 'Papiamentu'), + Language(iso639_2: 'pau', name: 'Palauan', native: 'a tekoi er a Belau'), + Language(iso639_2: 'pol', name: 'Polish', native: 'polski'), + Language(iso639_2: 'pon', name: 'Pohnpeian'), + Language(iso639_2: 'por', name: 'Portuguese', native: 'português'), + Language(iso639_2: 'pus', name: 'Pushto; Pashto', native: 'پښتو Pax̌tow'), + Language( + iso639_2: 'que', + name: 'Quechua', + native: 'Runa simi; kichwa simi; Nuna shimi', + ), + Language(iso639_2: 'raj', name: 'Rajasthani', native: 'राजस्थानी'), + Language(iso639_2: 'rap', name: 'Rapanui', native: 'Vananga rapa nui'), + Language( + iso639_2: 'rar', + name: 'Rarotongan; Cook Islands Māori', + native: 'Māori Kūki \'Āirani', + ), + Language( + iso639_2: 'roh', + name: 'Romansh', + native: 'Rumantsch; Rumàntsch; Romauntsch; Romontsch', + ), + Language(iso639_2: 'rom', name: 'Romany', native: 'romani čhib'), + Language(iso639_2: 'ron', name: 'Romanian', native: 'română'), + Language(iso639_2: 'rum', name: 'Romanian', native: 'română'), + Language(iso639_2: 'run', name: 'Rundi', native: 'Ikirundi'), + Language( + iso639_2: 'rup', + name: 'Aromanian; Arumanian; Macedo-Romanian', + native: 'armãneashce; armãneashti; rrãmãneshti', + ), + Language(iso639_2: 'rus', name: 'Russian', native: 'русский'), + Language(iso639_2: 'sad', name: 'Sandawe', native: 'Sandaweeki'), + Language(iso639_2: 'sag', name: 'Sango', native: 'yângâ tî sängö'), + Language(iso639_2: 'sah', name: 'Yakut', native: 'Сахалыы'), + Language(iso639_2: 'sas', name: 'Sasak'), + Language(iso639_2: 'sat', name: 'Santali', native: 'ᱥᱟᱱᱛᱟᱲᱤ'), + Language(iso639_2: 'scn', name: 'Sicilian', native: 'Sicilianu'), + Language(iso639_2: 'sco', name: 'Scots', native: 'Braid Scots; Lallans'), + Language(iso639_2: 'sel', name: 'Selkup'), + Language(iso639_2: 'shn', name: 'Shan', native: 'ၵႂၢမ်းတႆးယႂ်'), + Language(iso639_2: 'sid', name: 'Sidamo', native: 'Sidaamu Afoo'), + Language( + iso639_2: 'sin', + name: 'Sinhala; Sinhalese', + native: 'සිංහල Sĩhala', + ), + Language(iso639_2: 'slk', name: 'Slovak', native: 'slovenčina'), + Language(iso639_2: 'slo', name: 'Slovak', native: 'slovenčina'), + Language(iso639_2: 'slv', name: 'Slovenian', native: 'slovenščina'), + Language( + iso639_2: 'sma', + name: 'Southern Sami', + native: 'Åarjelsaemien gïele', + ), + Language(iso639_2: 'sme', name: 'Northern Sami', native: 'davvisámegiella'), + Language(iso639_2: 'smj', name: 'Lule Sami', native: 'julevsámegiella'), + Language(iso639_2: 'smn', name: 'Inari Sami', native: 'anarâškielâ'), + Language(iso639_2: 'smo', name: 'Samoan', native: 'Gagana faʻa Sāmoa'), + Language(iso639_2: 'sms', name: 'Skolt Sami', native: 'sääʹmǩiõll'), + Language(iso639_2: 'sna', name: 'Shona', native: 'chiShona'), + Language(iso639_2: 'snd', name: 'Sindhi', native: 'سنڌي / सिन्धी / ਸਿੰਧੀ'), + Language(iso639_2: 'snk', name: 'Soninke', native: 'Sooninkanxanne'), + Language(iso639_2: 'som', name: 'Somali', native: 'af Soomaali'), + Language( + iso639_2: 'sot', + name: 'Sotho, Southern', + native: 'Sesotho [southern]', + ), + Language(iso639_2: 'spa', name: 'Spanish', native: 'español'), + Language(iso639_2: 'sqi', name: 'Albanian', native: 'Shqip'), + Language(iso639_2: 'alb', name: 'Albanian', native: 'Shqip'), + Language( + iso639_2: 'srd', + name: 'Sardinian', + native: 'sardu; limba sarda; lingua sarda', + ), + Language(iso639_2: 'srn', name: 'Sranan Tongo'), + Language(iso639_2: 'srp', name: 'Serbian', native: 'српски / srpski'), + Language(iso639_2: 'srr', name: 'Serer', native: 'Seereer'), + Language(iso639_2: 'ssw', name: 'Swati', native: 'siSwati'), + Language(iso639_2: 'suk', name: 'Sukuma', native: 'Kɪsukuma'), + Language( + iso639_2: 'sun', + name: 'Sundanese', + native: 'ᮘᮞ ᮞᮥᮔ᮪ᮓ / Basa Sunda', + ), + Language(iso639_2: 'sus', name: 'Susu', native: 'Sosoxui'), + Language(iso639_2: 'swa', name: 'Swahili', native: 'Kiswahili'), + Language(iso639_2: 'swe', name: 'Swedish', native: 'svenska'), + Language( + iso639_2: 'syr', + name: 'Syriac', + native: 'ܠܫܢܐ ܣܘܪܝܝܐ Lešānā Suryāyā', + ), + Language( + iso639_2: 'tah', + name: 'Tahitian', + native: 'Reo Tahiti; Reo Mā\'ohi', + ), + Language(iso639_2: 'tam', name: 'Tamil', native: 'தமிழ் Tamił'), + Language( + iso639_2: 'tat', + name: 'Tatar', + native: 'татар теле / tatar tele / تاتار', + ), + Language(iso639_2: 'tel', name: 'Telugu', native: 'తెలుగు Telugu'), + Language(iso639_2: 'tem', name: 'Timne', native: 'KʌThemnɛ'), + Language(iso639_2: 'ter', name: 'Tereno', native: 'Terêna'), + Language(iso639_2: 'tet', name: 'Tetum', native: 'Lia-Tetun'), + Language(iso639_2: 'tgk', name: 'Tajik', native: 'тоҷикӣ toçikī'), + Language(iso639_2: 'tgl', name: 'Tagalog', native: 'Wikang Tagalog'), + Language(iso639_2: 'tha', name: 'Thai', native: 'ไทย'), + Language(iso639_2: 'tig', name: 'Tigre', native: 'ትግረ; ትግሬ; ኻሳ; ትግራይት'), + Language(iso639_2: 'tir', name: 'Tigrinya', native: 'ትግርኛ'), + Language(iso639_2: 'tiv', name: 'Tiv'), + Language(iso639_2: 'tkl', name: 'Tokelau'), + Language(iso639_2: 'tli', name: 'Tlingit', native: 'Lingít'), + Language(iso639_2: 'tmh', name: 'Tamashek'), + Language(iso639_2: 'tog', name: 'Tonga (Nyasa)', native: 'chiTonga'), + Language( + iso639_2: 'ton', + name: 'Tonga (Tonga Islands)', + native: 'lea faka-Tonga', + ), + Language(iso639_2: 'tpi', name: 'Tok Pisin'), + Language(iso639_2: 'tsi', name: 'Tsimshian'), + Language(iso639_2: 'tsn', name: 'Tswana', native: 'Setswana'), + Language(iso639_2: 'tso', name: 'Tsonga', native: 'Xitsonga'), + Language( + iso639_2: 'tuk', + name: 'Turkmen', + native: + 'Türkmençe / Түркменче / تورکمن تیلی تورکمنچ; türkmen dili / түркмен дили', + ), + Language(iso639_2: 'tum', name: 'Tumbuka', native: 'chiTumbuka'), + Language(iso639_2: 'tur', name: 'Turkish', native: 'Türkçe'), + Language( + iso639_2: 'tvl', + name: 'Tuvalu', + native: 'Te Ggana Tuuvalu; Te Gagana Tuuvalu', + ), + Language(iso639_2: 'twi', name: 'Twi'), + Language(iso639_2: 'tyv', name: 'Tuvinian', native: 'тыва дыл'), + Language(iso639_2: 'udm', name: 'Udmurt', native: 'удмурт кыл'), + Language( + iso639_2: 'uig', + name: 'Uighur; Uyghur', + native: 'ئۇيغۇرچە  ; ئۇيغۇر تىلى', + ), + Language(iso639_2: 'ukr', name: 'Ukrainian', native: 'українська'), + Language(iso639_2: 'umb', name: 'Umbundu', native: 'Úmbúndú'), + Language(iso639_2: 'urd', name: 'Urdu', native: 'اُردُو Urduw'), + Language( + iso639_2: 'uzb', + name: 'Uzbek', + native: + 'Oʻzbekcha / Ózbekça / ўзбекча / ئوزبېچه; oʻzbek tili / ўзбек тили / ئوبېک تیلی', + ), + Language(iso639_2: 'vai', name: 'Vai', native: 'ꕙꔤ'), + Language(iso639_2: 'ven', name: 'Venda', native: 'Tshivenḓa'), + Language(iso639_2: 'vie', name: 'Vietnamese', native: 'Tiếng Việt'), + Language(iso639_2: 'vot', name: 'Votic', native: 'vađđa ceeli'), + Language(iso639_2: 'wal', name: 'Wolaitta; Wolaytta'), + Language( + iso639_2: 'war', + name: 'Waray', + native: + 'Winaray; Samareño; Lineyte-Samarnon; Binisayâ nga Winaray; Binisayâ nga Samar-Leyte; “Binisayâ nga Waray”', + ), + Language(iso639_2: 'was', name: 'Washo', native: 'wá:šiw ʔítlu'), + Language(iso639_2: 'wln', name: 'Walloon', native: 'Walon'), + Language(iso639_2: 'wol', name: 'Wolof'), + Language( + iso639_2: 'xal', + name: 'Kalmyk; Oirat', + native: 'Хальмг келн / Xaľmg keln', + ), + Language(iso639_2: 'xho', name: 'Xhosa', native: 'isiXhosa'), + Language(iso639_2: 'yao', name: 'Yao'), + Language(iso639_2: 'yap', name: 'Yapese'), + Language( + iso639_2: 'yid', + name: 'Yiddish', + native: 'ייִדיש; יידיש; אידיש Yidiš', + ), + Language(iso639_2: 'yor', name: 'Yoruba', native: 'èdè Yorùbá'), + Language(iso639_2: 'zap', name: 'Zapotec', native: 'Diidxazá'), + Language(iso639_2: 'zen', name: 'Zenaga', native: 'Tuḍḍungiyya'), + Language( + iso639_2: 'zgh', + name: 'Standard Moroccan Tamazight', + native: 'ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ', + ), + Language(iso639_2: 'zha', name: 'Zhuang; Chuang', native: 'Vahcuengh / 話僮'), + Language(iso639_2: 'zho', name: 'Chinese', native: '中文'), + Language(iso639_2: 'chi', name: 'Chinese', native: '中文'), + Language(iso639_2: 'zul', name: 'Zulu', native: 'isiZulu'), + Language(iso639_2: 'zun', name: 'Zuni', native: 'Shiwi\'ma'), + Language( + iso639_2: 'zza', + name: 'Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki', + native: 'kirmanckî; dimilkî; kirdkî; zazakî', + ), + ]; +} diff --git a/mobile/lib/models/mp4.dart b/mobile/lib/models/mp4.dart new file mode 100644 index 0000000000..704dc3ba4d --- /dev/null +++ b/mobile/lib/models/mp4.dart @@ -0,0 +1,97 @@ +class Mp4 { + // adapted from `metadata-extractor` + static final brands = { + '3g2a': '3GPP2 Media compliant with 3GPP2 C.S0050-0 V1.0', + '3g2b': '3GPP2 Media compliant with 3GPP2 C.S0050-A V1.0.0', + '3g2c': '3GPP2 Media compliant with 3GPP2 C.S0050-B v1.0', + '3ge6': '3GPP Release 6 MBMS Extended Presentations', + '3ge7': '3GPP Release 7 MBMS Extended Presentations', + '3gg6': '3GPP Release 6 General Profile', + '3gp1': '3GPP Media Release 1', + '3gp2': '3GPP Media Release 2', + '3gp3': '3GPP Media Release 3', + '3gp4': '3GPP Media Release 4', + '3gp5': '3GPP Media Release 5', + '3gp6': '3GPP Media Release 6', + '3gs7': '3GPP Media Release 7', + 'avc1': 'MP4 Base w/ AVC ext', + 'CAEP': 'Canon Digital Camera', + 'caqv': 'Casio Digital Camera', + 'CDes': 'Convergent Design', + 'da0a': 'DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG images', + 'da0b': + 'DMB MAF, extending DA0A, with 3GPP timed text, DID, TVA, REL, IPMP', + 'da1a': 'DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images', + 'da1b': + 'DMB MAF, extending da1a, with 3GPP timed text, DID, TVA, REL, IPMP', + 'da2a': 'DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG images', + 'da2b': + 'DMB MAF, extending da2a, with 3GPP timed text, DID, TVA, REL, IPMP', + 'da3a': 'DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images', + 'da3b': + 'DMB MAF, extending da3a w/ BIFS, 3GPP timed text, DID, TVA, REL, IPMP', + 'dmb1': + 'DMB MAF supporting all the components defined in the specification', + 'dmpf': 'Digital Media Project', + 'drc1': 'Dirac (wavelet compression), encapsulated in ISO base media (MP4)', + 'dv1a': 'DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG images, TS', + 'dv1b': + 'DMB MAF, extending dv1a, with 3GPP timed text, DID, TVA, REL, IPMP', + 'dv2a': + 'DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG images, TS', + 'dv2b': + 'DMB MAF, extending dv2a, with 3GPP timed text, DID, TVA, REL, IPMP', + 'dv3a': 'DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG images, TS', + 'dv3b': + 'DMB MAF, extending dv3a, with 3GPP timed text, DID, TVA, REL, IPMP', + 'dvr1': 'DVB over RTP', + 'dvt1': 'DVB over MPEG-2 Transport Stream', + 'F4V ': 'Video for Adobe Flash Player 9+', + 'F4P ': 'Protected Video for Adobe Flash Player 9+', + 'F4A ': 'Audio for Adobe Flash Player 9+', + 'F4B ': 'Audio Book for Adobe Flash Player 9+', + 'isc2': 'ISMACryp 2.0 Encrypted File', + 'iso2': 'MP4 Base Media v2', + 'isom': 'MP4 Base Media v1', + 'JP2 ': 'JPEG 2000 Image', + 'jpm ': 'JPEG 2000 Compound Image', + 'jpx ': 'JPEG 2000 w/ extensions', + 'KDDI': '3GPP2 EZmovie for KDDI 3G cellphones', + 'M4A ': 'Apple iTunes AAC-LC Audio', + 'M4B ': 'Apple iTunes AAC-LC Audio Book', + 'M4P ': 'Apple iTunes AAC-LC AES Protected Audio', + 'M4V ': 'Apple iTunes Video', + 'M4VH': 'Apple TV', + 'M4VP': 'Apple iPhone', + 'mj2s': 'Motion JPEG 2000 Simple Profile', + 'mjp2': 'Motion JPEG 2000 General Profile', + 'mmp4': 'MPEG-4/3GPP Mobile Profile', + 'mp21': 'MPEG-21', + 'mp41': 'MP4 v1', + 'mp42': 'MP4 v2', + 'mp71': 'MP4 w/ MPEG-7 Metadata', + 'MPPI': 'Photo Player, MAF', + 'mqt ': 'Sony / Mobile QuickTime', + 'MSNV': 'MPEG-4 for SonyPSP', + 'NDAS': 'MP4 v2 Nero Digital AAC Audio', + 'NDSC': 'MPEG-4 Nero Cinema Profile', + 'NDSH': 'MPEG-4 Nero HDTV Profile', + 'NDSM': 'MPEG-4 Nero Mobile Profile', + 'NDSP': 'MPEG-4 Nero Portable Profile', + 'NDSS': 'MPEG-4 Nero Standard Profile', + 'NDXC': 'H.264/MPEG-4 AVC Nero Cinema Profile', + 'NDXH': 'H.264/MPEG-4 AVC Nero HDTV Profile', + 'NDXM': 'H.264/MPEG-4 AVC Nero Mobile Profile', + 'NDXP': 'H.264/MPEG-4 AVC Nero Portable Profile', + 'NDXS': 'H.264/MPEG-4 AVC Nero Standard Profile', + 'odcf': 'OMA DCF DRM Format 2.0', + 'opf2': 'OMA PDCF DRM Format 2.1', + 'opx2': 'OMA PDCF DRM + XBS extensions', + 'pana': 'Panasonic Digital Camera', + 'qt ': 'Apple QuickTime', + 'ROSS': 'Ross Video', + 'sdv ': 'SD Memory Card Video', + 'ssc1': 'Samsung stereoscopic, single stream', + 'ssc2': 'Samsung stereoscopic, dual stream', + }; +} diff --git a/mobile/lib/ui/viewer/file/file_details_widget.dart b/mobile/lib/ui/viewer/file/file_details_widget.dart index 2423ee77c8..af15de5f19 100644 --- a/mobile/lib/ui/viewer/file/file_details_widget.dart +++ b/mobile/lib/ui/viewer/file/file_details_widget.dart @@ -1,6 +1,7 @@ -import "dart:async" show StreamSubscription; +import "dart:io"; import "package:exif/exif.dart"; +import "package:ffmpeg_kit_flutter_min/ffprobe_kit.dart"; import "package:flutter/material.dart"; import "package:logging/logging.dart"; import "package:photos/core/configuration.dart"; @@ -9,6 +10,7 @@ import "package:photos/events/people_changed_event.dart"; import "package:photos/generated/l10n.dart"; import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/file_type.dart'; +import "package:photos/models/location/location.dart"; import "package:photos/models/metadata/file_magic.dart"; import "package:photos/services/file_magic_service.dart"; import 'package:photos/theme/ente_theme.dart'; @@ -25,6 +27,8 @@ import "package:photos/ui/viewer/file_details/faces_item_widget.dart"; import "package:photos/ui/viewer/file_details/file_properties_item_widget.dart"; import "package:photos/ui/viewer/file_details/location_tags_widget.dart"; import "package:photos/utils/exif_util.dart"; +import "package:photos/utils/ffprobe_util.dart"; +import "package:photos/utils/file_util.dart"; import "package:photos/utils/local_settings.dart"; class FileDetailsWidget extends StatefulWidget { @@ -55,6 +59,9 @@ class _FileDetailsWidgetState extends State { "longRef": null, }; + int? creationTime; + Location? location; + late final StreamSubscription _peopleChangedEvent; bool _isImage = false; @@ -92,6 +99,8 @@ class _FileDetailsWidgetState extends State { _exifData["exposureTime"] != null || _exifData["ISO"] != null; }); + } else { + getMediaInfo(); } getExif(widget.file).then((exif) { _exifNotifier.value = exif; @@ -100,6 +109,32 @@ class _FileDetailsWidgetState extends State { super.initState(); } + Future getMediaInfo() async { + final File? originFile = await getFile(widget.file, isOrigin: true); + if (originFile == null) return; + final session = await FFprobeKit.getMediaInformation(originFile.path); + final mediaInfo = session.getMediaInformation(); + + if (mediaInfo == null) { + final failStackTrace = await session.getFailStackTrace(); + final output = await session.getOutput(); + _logger.severe( + 'failed to get video metadata failStackTrace=$failStackTrace, output=$output', + ); + return; + } + final properties = await FFProbeUtil.getProperties(mediaInfo); + + location = properties.location; + if (location != null) { + hasLocationData.value = true; + } + creationTime = DateTime.tryParse(properties.creationTime ?? "") + ?.microsecondsSinceEpoch; + + setState(() {}); + } + @override void dispose() { _exifNotifier.dispose(); @@ -128,7 +163,12 @@ class _FileDetailsWidgetState extends State { ), ); fileDetailsTiles.addAll([ - CreationTimeItem(file, _currentUserID), + CreationTimeItem( + file.copyWith( + creationTime: creationTime, + ), + _currentUserID, + ), const FileDetailsDivider(), ValueListenableBuilder( valueListenable: _exifNotifier, @@ -165,7 +205,9 @@ class _FileDetailsWidgetState extends State { ? Column( children: [ LocationTagsWidget( - widget.file, + widget.file.copyWith( + location: location, + ), ), const FileDetailsDivider(), ], diff --git a/mobile/lib/ui/viewer/file_details/location_tags_widget.dart b/mobile/lib/ui/viewer/file_details/location_tags_widget.dart index 731c7b89cf..3544eeb127 100644 --- a/mobile/lib/ui/viewer/file_details/location_tags_widget.dart +++ b/mobile/lib/ui/viewer/file_details/location_tags_widget.dart @@ -5,7 +5,6 @@ import "package:flutter/material.dart"; import "package:flutter_animate/flutter_animate.dart"; import "package:flutter_map/flutter_map.dart"; import "package:latlong2/latlong.dart"; - import "package:photos/core/event_bus.dart"; import "package:photos/events/location_tag_updated_event.dart"; import "package:photos/generated/l10n.dart"; @@ -22,13 +21,13 @@ import "package:photos/ui/map/image_marker.dart"; import "package:photos/ui/map/map_screen.dart"; import "package:photos/ui/map/map_view.dart"; import "package:photos/ui/map/tile/layers.dart"; - import 'package:photos/ui/viewer/location/add_location_sheet.dart'; import "package:photos/ui/viewer/location/location_screen.dart"; import "package:photos/utils/navigation_util.dart"; class LocationTagsWidget extends StatefulWidget { final EnteFile file; + const LocationTagsWidget(this.file, {super.key}); @override diff --git a/mobile/lib/utils/ffprobe_util.dart b/mobile/lib/utils/ffprobe_util.dart new file mode 100644 index 0000000000..2df0be755f --- /dev/null +++ b/mobile/lib/utils/ffprobe_util.dart @@ -0,0 +1,143 @@ +import "package:ffmpeg_kit_flutter_min/media_information.dart"; +import "package:logging/logging.dart"; +import "package:photos/models/ffprobe_keys.dart"; +import "package:photos/models/ffprobe_props.dart"; + +class FFProbeUtil { + static final _logger = Logger('FFProbeUtil'); + static const chaptersKey = 'chapters'; + static const formatKey = 'format'; + static const streamsKey = 'streams'; + + static Future getProperties( + MediaInformation mediaInformation, + ) async { + final properties = await _getMetadata(mediaInformation); + + try { + return FFProbeProps.fromJson(properties); + } catch (e, stackTrace) { + _logger.severe( + "Error parsing FFProbe properties: $properties", + e, + stackTrace, + ); + rethrow; + } + } + + static Future _getMetadata(MediaInformation information) async { + final props = information.getAllProperties(); + if (props == null) return {}; + + final chapters = props[chaptersKey]; + if (chapters is List) { + if (chapters.isEmpty) { + props.remove(chaptersKey); + } + } + + final format = props.remove(formatKey); + if (format is Map) { + format.remove(FFProbeKeys.filename); + format.remove('size'); + _normalizeGroup(format); + props.addAll(format); + } + + final streams = props[streamsKey]; + if (streams is List) { + streams.forEach((stream) { + if (stream is Map) { + _normalizeGroup(stream); + + final fps = stream[FFProbeKeys.avgFrameRate]; + if (fps is String) { + final parts = fps.split('/'); + if (parts.length == 2) { + final num = int.tryParse(parts[0]); + final den = int.tryParse(parts[1]); + if (num != null && den != null) { + if (den > 0) { + stream[FFProbeKeys.fpsNum] = num; + stream[FFProbeKeys.fpsDen] = den; + } + stream.remove(FFProbeKeys.avgFrameRate); + } + } + } + + final disposition = stream[FFProbeKeys.disposition]; + if (disposition is Map) { + disposition.removeWhere((key, value) => value == 0); + stream[FFProbeKeys.disposition] = disposition.keys.join(', '); + } + + final idValue = stream['id']; + if (idValue is String) { + final id = int.tryParse(idValue); + if (id != null) { + stream[FFProbeKeys.index] = id - 1; + stream.remove('id'); + } + } + + if (stream[FFProbeKeys.streamType] == 'data') { + stream[FFProbeKeys.streamType] = MediaStreamTypes.metadata; + } + } + }); + } + return props; + } + + static void _normalizeGroup(Map stream) { + void replaceKey(k1, k2) { + final v = stream.remove(k1); + if (v != null) { + stream[k2] = v; + } + } + + replaceKey('bit_rate', FFProbeKeys.bitrate); + replaceKey('codec_type', FFProbeKeys.streamType); + replaceKey('format_name', FFProbeKeys.mediaFormat); + replaceKey('level', FFProbeKeys.codecLevel); + replaceKey('nb_frames', FFProbeKeys.frameCount); + replaceKey('pix_fmt', FFProbeKeys.codecPixelFormat); + replaceKey('profile', FFProbeKeys.codecProfileId); + + final tags = stream.remove('tags'); + if (tags is Map) { + stream.addAll(tags); + } + + { + FFProbeKeys.codecProfileId, + FFProbeKeys.rFrameRate, + 'bits_per_sample', + 'closed_captions', + 'codec_long_name', + 'film_grain', + 'has_b_frames', + 'start_pts', + 'start_time', + 'vendor_id', + }.forEach((key) { + final value = stream[key]; + switch (value) { + case final num v: + if (v == 0) { + stream.remove(key); + } + case final String v: + if (double.tryParse(v) == 0 || + v == '0/0' || + v == 'unknown' || + v == '[0][0][0][0]') { + stream.remove(key); + } + } + }); + } +} diff --git a/mobile/lib/utils/thumbnail_util.dart b/mobile/lib/utils/thumbnail_util.dart index 052f499ff2..f7856e81be 100644 --- a/mobile/lib/utils/thumbnail_util.dart +++ b/mobile/lib/utils/thumbnail_util.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:collection'; import 'dart:io'; -import 'dart:typed_data'; import 'package:dio/dio.dart'; +import "package:flutter/foundation.dart"; import 'package:logging/logging.dart'; import 'package:photo_manager/photo_manager.dart'; import 'package:photos/core/cache/thumbnail_in_memory_cache.dart'; From d41a8d7a11e063c167f00c5c5f2474566e2f711c Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:42:13 +0530 Subject: [PATCH 005/466] fix(mobile): revert intl_en.arb change --- mobile/lib/generated/l10n.dart | 20 ++++++++++---------- mobile/lib/l10n/intl_en.arb | 10 ---------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 8669484d7c..be7be80008 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -8774,16 +8774,6 @@ class S { ); } - /// `Saving Edits!` - String get savingEdits { - return Intl.message( - 'Saving Edits!', - name: 'savingEdits', - desc: '', - args: [], - ); - } - /// `Auto pair` String get autoPair { return Intl.message( @@ -8843,6 +8833,16 @@ class S { args: [], ); } + + /// `Saving Edits!` + String get savingEdits { + return Intl.message( + 'Saving Edits!', + name: 'savingEdits', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index 5d889a5123..c00777aa4f 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1234,21 +1234,11 @@ "castIPMismatchTitle": "Failed to cast album", "castIPMismatchBody": "Please make sure you are on the same network as the TV.", "pairingComplete": "Pairing complete", -<<<<<<< HEAD -======= - "savingEdits": "Saving Edits!", ->>>>>>> mobile-videoeditor "autoPair": "Auto pair", "pairWithPin": "Pair with PIN", "faceRecognition": "Face recognition", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", -<<<<<<< HEAD "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready.", "savingEdits": "Saving Edits!" } -======= - "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready." -} - ->>>>>>> mobile-videoeditor From f34d2afcedd2a05c21ee1820f68fcd32dfa53c04 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:42:54 +0530 Subject: [PATCH 006/466] fix(mobile): revert intl_en.arb change --- mobile/lib/generated/l10n.dart | 20 ++++++++++---------- mobile/lib/l10n/intl_en.arb | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index be7be80008..a327ac09f8 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -8784,6 +8784,16 @@ class S { ); } + /// `Saving Edits!` + String get savingEdits { + return Intl.message( + 'Saving Edits!', + name: 'savingEdits', + desc: '', + args: [], + ); + } + /// `Pair with PIN` String get pairWithPin { return Intl.message( @@ -8833,16 +8843,6 @@ class S { args: [], ); } - - /// `Saving Edits!` - String get savingEdits { - return Intl.message( - 'Saving Edits!', - name: 'savingEdits', - desc: '', - args: [], - ); - } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index c00777aa4f..f58e630264 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1235,10 +1235,10 @@ "castIPMismatchBody": "Please make sure you are on the same network as the TV.", "pairingComplete": "Pairing complete", "autoPair": "Auto pair", + "savingEdits": "Saving Edits!", "pairWithPin": "Pair with PIN", "faceRecognition": "Face recognition", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready.", - "savingEdits": "Saving Edits!" + "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready." } From 6de7b840ae218c136b61ff8d32190f06f2e651b2 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:43:43 +0530 Subject: [PATCH 007/466] fix(mobile): revert intl_en.arb change (again) --- mobile/lib/generated/l10n.dart | 16 ++++++++-------- mobile/lib/l10n/intl_en.arb | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index a327ac09f8..8669484d7c 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -8774,21 +8774,21 @@ class S { ); } - /// `Auto pair` - String get autoPair { + /// `Saving Edits!` + String get savingEdits { return Intl.message( - 'Auto pair', - name: 'autoPair', + 'Saving Edits!', + name: 'savingEdits', desc: '', args: [], ); } - /// `Saving Edits!` - String get savingEdits { + /// `Auto pair` + String get autoPair { return Intl.message( - 'Saving Edits!', - name: 'savingEdits', + 'Auto pair', + name: 'autoPair', desc: '', args: [], ); diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index f58e630264..3e48bdb455 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1234,11 +1234,11 @@ "castIPMismatchTitle": "Failed to cast album", "castIPMismatchBody": "Please make sure you are on the same network as the TV.", "pairingComplete": "Pairing complete", - "autoPair": "Auto pair", "savingEdits": "Saving Edits!", + "autoPair": "Auto pair", "pairWithPin": "Pair with PIN", "faceRecognition": "Face recognition", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready." -} +} \ No newline at end of file From 4a9c09e8965b10f7c350459c2de74d4679d135ca Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:44:06 +0530 Subject: [PATCH 008/466] fix(mobile): revert intl_en.arb change (again) --- mobile/lib/l10n/intl_en.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index 3e48bdb455..1ea3f1c555 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1241,4 +1241,4 @@ "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready." -} \ No newline at end of file +} From cd8709be9d8920ca099a212741d09daa2ea7c5d9 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:45:04 +0530 Subject: [PATCH 009/466] chore(mobile): import dart async for StreamSubscription --- mobile/lib/ui/viewer/file/file_details_widget.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile/lib/ui/viewer/file/file_details_widget.dart b/mobile/lib/ui/viewer/file/file_details_widget.dart index af15de5f19..810f5a075d 100644 --- a/mobile/lib/ui/viewer/file/file_details_widget.dart +++ b/mobile/lib/ui/viewer/file/file_details_widget.dart @@ -1,3 +1,4 @@ +import "dart:async"; import "dart:io"; import "package:exif/exif.dart"; From 5dd42b5a07a7a3173c1b021c26caafd1dfedce49 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:46:03 +0530 Subject: [PATCH 010/466] chore(mobile): import dart typed_dart instead of flutter foundation --- mobile/lib/utils/thumbnail_util.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/utils/thumbnail_util.dart b/mobile/lib/utils/thumbnail_util.dart index f7856e81be..cd67345659 100644 --- a/mobile/lib/utils/thumbnail_util.dart +++ b/mobile/lib/utils/thumbnail_util.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:collection'; import 'dart:io'; +import "dart:typed_data"; import 'package:dio/dio.dart'; -import "package:flutter/foundation.dart"; import 'package:logging/logging.dart'; import 'package:photo_manager/photo_manager.dart'; import 'package:photos/core/cache/thumbnail_in_memory_cache.dart'; From d694f2796baa1f72491ebfff39b7a08e282e94aa Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Sat, 8 Jun 2024 01:48:36 +0530 Subject: [PATCH 011/466] chore(mobile): move models to ffmpeg folder --- mobile/lib/models/{ => ffmpeg}/channel_layouts.dart | 0 mobile/lib/models/{ => ffmpeg}/codecs.dart | 0 mobile/lib/models/{ => ffmpeg}/ffprobe_keys.dart | 0 mobile/lib/models/{ => ffmpeg}/ffprobe_props.dart | 10 +++++----- mobile/lib/models/{ => ffmpeg}/language.dart | 0 mobile/lib/models/{ => ffmpeg}/mp4.dart | 0 mobile/lib/utils/ffprobe_util.dart | 4 ++-- 7 files changed, 7 insertions(+), 7 deletions(-) rename mobile/lib/models/{ => ffmpeg}/channel_layouts.dart (100%) rename mobile/lib/models/{ => ffmpeg}/codecs.dart (100%) rename mobile/lib/models/{ => ffmpeg}/ffprobe_keys.dart (100%) rename mobile/lib/models/{ => ffmpeg}/ffprobe_props.dart (98%) rename mobile/lib/models/{ => ffmpeg}/language.dart (100%) rename mobile/lib/models/{ => ffmpeg}/mp4.dart (100%) diff --git a/mobile/lib/models/channel_layouts.dart b/mobile/lib/models/ffmpeg/channel_layouts.dart similarity index 100% rename from mobile/lib/models/channel_layouts.dart rename to mobile/lib/models/ffmpeg/channel_layouts.dart diff --git a/mobile/lib/models/codecs.dart b/mobile/lib/models/ffmpeg/codecs.dart similarity index 100% rename from mobile/lib/models/codecs.dart rename to mobile/lib/models/ffmpeg/codecs.dart diff --git a/mobile/lib/models/ffprobe_keys.dart b/mobile/lib/models/ffmpeg/ffprobe_keys.dart similarity index 100% rename from mobile/lib/models/ffprobe_keys.dart rename to mobile/lib/models/ffmpeg/ffprobe_keys.dart diff --git a/mobile/lib/models/ffprobe_props.dart b/mobile/lib/models/ffmpeg/ffprobe_props.dart similarity index 98% rename from mobile/lib/models/ffprobe_props.dart rename to mobile/lib/models/ffmpeg/ffprobe_props.dart index 05f383e107..ba031d530e 100644 --- a/mobile/lib/models/ffprobe_props.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_props.dart @@ -1,11 +1,11 @@ import "package:collection/collection.dart"; import "package:intl/intl.dart"; -import "package:photos/models/channel_layouts.dart"; -import "package:photos/models/codecs.dart"; -import "package:photos/models/ffprobe_keys.dart"; -import "package:photos/models/language.dart"; +import "package:photos/models/ffmpeg/channel_layouts.dart"; +import "package:photos/models/ffmpeg/codecs.dart"; +import "package:photos/models/ffmpeg/ffprobe_keys.dart"; +import "package:photos/models/ffmpeg/language.dart"; +import "package:photos/models/ffmpeg/mp4.dart"; import "package:photos/models/location/location.dart"; -import "package:photos/models/mp4.dart"; class FFProbeProps { final double? captureFps; diff --git a/mobile/lib/models/language.dart b/mobile/lib/models/ffmpeg/language.dart similarity index 100% rename from mobile/lib/models/language.dart rename to mobile/lib/models/ffmpeg/language.dart diff --git a/mobile/lib/models/mp4.dart b/mobile/lib/models/ffmpeg/mp4.dart similarity index 100% rename from mobile/lib/models/mp4.dart rename to mobile/lib/models/ffmpeg/mp4.dart diff --git a/mobile/lib/utils/ffprobe_util.dart b/mobile/lib/utils/ffprobe_util.dart index 2df0be755f..28a6c9cdc1 100644 --- a/mobile/lib/utils/ffprobe_util.dart +++ b/mobile/lib/utils/ffprobe_util.dart @@ -1,7 +1,7 @@ import "package:ffmpeg_kit_flutter_min/media_information.dart"; import "package:logging/logging.dart"; -import "package:photos/models/ffprobe_keys.dart"; -import "package:photos/models/ffprobe_props.dart"; +import "package:photos/models/ffmpeg/ffprobe_keys.dart"; +import "package:photos/models/ffmpeg/ffprobe_props.dart"; class FFProbeUtil { static final _logger = Logger('FFProbeUtil'); From 53b1dc9b674a2c893d864954eb90075fedcf615c Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Sun, 9 Jun 2024 00:41:32 +0530 Subject: [PATCH 012/466] [mob][photos] function of the lockscreen completed --- mobile/lib/core/configuration.dart | 8 + .../local_authentication_service.dart | 53 ++-- .../ui/settings/TEMP/lock_screen_option.dart | 229 +++++++++++++----- .../lock_screen_option_confirm_password.dart | 24 +- .../TEMP/lock_screen_option_password.dart | 3 +- .../settings/TEMP/lock_screen_option_pin.dart | 1 + .../TEMP/lock_screen_option_pin_setting.dart | 17 -- .../ui/settings/security_section_widget.dart | 47 ++-- 8 files changed, 235 insertions(+), 147 deletions(-) delete mode 100644 mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 67c7299f0b..99df803869 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -175,6 +175,14 @@ class Configuration { await _preferences.remove(password); } + bool isPinSet() { + return _preferences.containsKey(pin); + } + + bool isPasswordSet() { + return _preferences.containsKey(password); + } + // _cleanUpStaleFiles deletes all files in the temp directory that are older // than kTempFolderDeletionTimeBuffer except the the temp encrypted files for upload. // Those file are deleted by file uploader after the upload is complete or those diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 9655d2da1a..0747048494 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -7,7 +7,6 @@ import "package:photos/generated/l10n.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; @@ -42,13 +41,7 @@ class LocalAuthenticationService { return true; } - Future requestLocalAuthForLockScreen( - BuildContext context, - bool shouldEnableLockScreen, - String infoMessage, - String errorDialogContent, [ - String errorDialogTitle = "", - ]) async { + Future requestEnteAuthForLockScreen(BuildContext context) async { final String? savedPin = await _configuration.loadSavedPin(); final String? savedPassword = await _configuration.loadSavedPassword(); @@ -64,13 +57,6 @@ class LocalAuthenticationService { ), ); if (result) { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOption(); - }, - ), - ); return true; } else { await showDialogWidget( @@ -88,9 +74,10 @@ class LocalAuthenticationService { ), ], ); + return false; } - return false; - } else if (savedPin != null) { + } + if (savedPin != null) { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { @@ -102,13 +89,6 @@ class LocalAuthenticationService { ), ); if (result) { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOption(); - }, - ), - ); return true; } else { await showDialogWidget( @@ -126,9 +106,22 @@ class LocalAuthenticationService { ), ], ); + return false; } - return false; } + return false; + } + + Future requestLocalAuthForLockScreen( + BuildContext context, + bool shouldEnableLockScreen, + String infoMessage, + String errorDialogContent, [ + String errorDialogTitle = "", + ]) async { + // if (await requestEnteAuthForLockScreen(context)) { + // return true; + // } if (await _isLocalAuthSupportedOnDevice()) { AppLock.of(context)!.disable(); @@ -140,15 +133,7 @@ class LocalAuthenticationService { AppLock.of(context)!.setEnabled(shouldEnableLockScreen); await Configuration.instance .setShouldShowLockScreen(shouldEnableLockScreen); - if (shouldEnableLockScreen) { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOption(); - }, - ), - ); - } + return true; } else { AppLock.of(context)! diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index be7d5749cf..863ecdfaaf 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -1,17 +1,38 @@ import "package:flutter/material.dart"; +import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; +import "package:photos/services/local_authentication_service.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/captioned_text_widget.dart"; import "package:photos/ui/components/divider_widget.dart"; import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; +import "package:photos/ui/components/toggle_switch_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; -class LockScreenOption extends StatelessWidget { +class LockScreenOption extends StatefulWidget { const LockScreenOption({super.key}); + @override + State createState() => _LockScreenOptionState(); +} + +class _LockScreenOptionState extends State { + final Configuration _configuration = Configuration.instance; + bool? appLock; + bool isPinEnabled = false; + bool isPasswordEnabled = false; + + @override + void initState() { + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + appLock = isPinEnabled || isPasswordEnabled; + super.initState(); + } + @override Widget build(BuildContext context) { final colorScheme = getEnteColorScheme(context); @@ -19,9 +40,9 @@ class LockScreenOption extends StatelessWidget { body: CustomScrollView( primary: false, slivers: [ - TitleBarWidget( + const TitleBarWidget( flexibleSpaceTitle: TitleBarTitleWidget( - title: S.of(context).lockscreen, + title: 'App lock', ), ), SliverList( @@ -36,78 +57,156 @@ class LockScreenOption extends StatelessWidget { children: [ Column( children: [ - MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).noDeviceLimit, - ), - alignCaptionedTextToLeft: true, - isTopBorderRadiusRemoved: false, - isBottomBorderRadiusRemoved: true, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, - ), - DividerWidget( - dividerType: DividerType.menuNoIcon, - bgColor: colorScheme.fillFaint, - ), - MenuItemWidget( - captionedTextWidget: const CaptionedTextWidget( - title: 'Device Lock', - ), - alignCaptionedTextToLeft: true, - isTopBorderRadiusRemoved: true, - isBottomBorderRadiusRemoved: true, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, - ), - DividerWidget( - dividerType: DividerType.menuNoIcon, - bgColor: colorScheme.fillFaint, - ), MenuItemWidget( captionedTextWidget: const CaptionedTextWidget( - title: 'PIN lock', + title: 'App lock', ), alignCaptionedTextToLeft: true, - isTopBorderRadiusRemoved: true, - isBottomBorderRadiusRemoved: true, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOptionPin(); - }, - ), - ), - ), - DividerWidget( - dividerType: DividerType.menuNoIcon, - bgColor: colorScheme.fillFaint, - ), - MenuItemWidget( - captionedTextWidget: const CaptionedTextWidget( - title: 'Password lock', - ), - alignCaptionedTextToLeft: true, - isTopBorderRadiusRemoved: true, + isTopBorderRadiusRemoved: false, isBottomBorderRadiusRemoved: false, menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOptionPassword(); - }, - ), + trailingWidget: ToggleSwitchWidget( + value: () => appLock!, + onChanged: () async { + bool result; + if ((isPinEnabled || isPasswordEnabled) && + appLock == true) { + result = await LocalAuthenticationService + .instance + .requestEnteAuthForLockScreen(context); + await _configuration.removePinAndPassword(); + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + } + // else if ((isPasswordEnabled || + // isPinEnabled) && + // appLock == false) { + // await _configuration.removePinAndPassword(); + // result = true; + // } + else { + result = await LocalAuthenticationService + .instance + .requestLocalAuthForLockScreen( + context, + !_configuration.shouldShowLockScreen(), + S + .of(context) + .authToChangeLockscreenSetting, + S.of(context).lockScreenEnablePreSteps, + ); + await _configuration.removePinAndPassword(); + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + } + setState(() { + if (result) { + appLock = !appLock!; + } + }); + }, ), ), ], ), + appLock! + ? Column( + children: [ + const SizedBox( + height: 24, + ), + MenuItemWidget( + captionedTextWidget: + const CaptionedTextWidget( + title: 'Device Lock', + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: false, + isBottomBorderRadiusRemoved: true, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + onTap: () async { + setState(() { + _configuration.removePinAndPassword(); + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = + _configuration.isPinSet(); + }); + }, + ), + DividerWidget( + dividerType: DividerType.menuNoIcon, + bgColor: colorScheme.fillFaint, + ), + MenuItemWidget( + captionedTextWidget: + const CaptionedTextWidget( + title: 'PIN lock', + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: true, + isBottomBorderRadiusRemoved: true, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + onTap: () async { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPin(); + }, + ), + ); + setState(() { + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = + _configuration.isPinSet(); + appLock = + isPinEnabled || isPasswordEnabled; + }); + }, + ), + DividerWidget( + dividerType: DividerType.menuNoIcon, + bgColor: colorScheme.fillFaint, + ), + MenuItemWidget( + captionedTextWidget: + const CaptionedTextWidget( + title: 'Password lock', + ), + alignCaptionedTextToLeft: true, + isTopBorderRadiusRemoved: true, + isBottomBorderRadiusRemoved: false, + menuItemColor: colorScheme.fillFaint, + trailingIconIsMuted: true, + trailingIcon: Icons.chevron_right_outlined, + onTap: () async { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPassword(); + }, + ), + ); + setState(() { + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = + _configuration.isPinSet(); + appLock = + isPinEnabled || isPasswordEnabled; + }); + }, + ), + ], + ) + : Container(), ], ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 55370af64d..8e66baf67d 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -9,8 +9,12 @@ import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/text_input_widget.dart"; class LockScreenOptionConfirmPassword extends StatefulWidget { - const LockScreenOptionConfirmPassword({super.key, required this.password}); + const LockScreenOptionConfirmPassword({ + super.key, + required this.password, + }); final String password; + @override State createState() => _LockScreenOptionConfirmPasswordState(); @@ -18,7 +22,6 @@ class LockScreenOptionConfirmPassword extends StatefulWidget { class _LockScreenOptionConfirmPasswordState extends State { - String _confirmPassword = ""; final _confirmPasswordController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); @@ -34,14 +37,14 @@ class _LockScreenOptionConfirmPasswordState @override void dispose() { - super.dispose(); _focusNode.dispose(); - _confirmPasswordController.dispose(); + // print("CONFIRM DISPOSE"); + super.dispose(); } Future _confirmPasswordMatch() async { - if (widget.password == _confirmPassword) { - await _configuration.savePassword(_confirmPassword); + if (widget.password == _confirmPasswordController.text) { + await _configuration.savePassword(_confirmPasswordController.text); await showDialogWidget( context: context, title: 'Password has been set', @@ -136,11 +139,6 @@ class _LockScreenOptionConfirmPasswordState textEditingController: _confirmPasswordController, prefixIcon: Icons.lock_outline, isPasswordInput: true, - onChange: (String p0) { - setState(() { - _confirmPassword = p0; - }); - }, ), ), const Spacer(), @@ -148,9 +146,7 @@ class _LockScreenOptionConfirmPasswordState padding: const EdgeInsets.all(18.0), child: ButtonWidget( labelText: 'Next', - buttonType: _confirmPassword.length > 3 - ? ButtonType.primary - : ButtonType.secondary, + buttonType: ButtonType.secondary, buttonSize: ButtonSize.large, onTap: () => _confirmPasswordMatch(), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index ce443a9355..f1552fcda6 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -37,8 +37,9 @@ class _LockScreenOptionPasswordState extends State { @override void dispose() { super.dispose(); - _passwordController.dispose(); + // _passwordController.dispose(); _focusNode.dispose(); + // print("DISPOSE"); } Future confirmPasswordAuth(String code) async { diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index f04579d23a..f4b87b4488 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -43,6 +43,7 @@ class _LockScreenOptionPinState extends State { super.dispose(); _pinController.dispose(); _focusNode.dispose(); + print("PIN"); } Future confirmPinAuth(String code) async { diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart deleted file mode 100644 index e5d940d36d..0000000000 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin_setting.dart +++ /dev/null @@ -1,17 +0,0 @@ -import "package:flutter/widgets.dart"; - -class LockScreenOptionPinSetting extends StatefulWidget { - const LockScreenOptionPinSetting({super.key}); - - @override - State createState() => - _LockScreenOptionPinSettingState(); -} - -class _LockScreenOptionPinSettingState - extends State { - @override - Widget build(BuildContext context) { - return const Placeholder(); - } -} diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index bad5306942..35e1d3fb72 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -21,6 +21,7 @@ import 'package:photos/ui/components/captioned_text_widget.dart'; import 'package:photos/ui/components/expandable_menu_item_widget.dart'; import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; import 'package:photos/ui/components/toggle_switch_widget.dart'; +import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import 'package:photos/ui/settings/common_settings.dart'; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/dialog_util.dart"; @@ -140,24 +141,38 @@ class _SecuritySectionWidgetState extends State { } children.addAll([ MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).lockscreen, - ), - trailingWidget: ToggleSwitchWidget( - value: () => _config.shouldShowLockScreen(), - onChanged: () async { - await LocalAuthenticationService.instance - .requestLocalAuthForLockScreen( - context, - !_config.shouldShowLockScreen(), - S.of(context).authToChangeLockscreenSetting, - S.of(context).lockScreenEnablePreSteps, - ); - - ///try here also once about the material page route - }, + captionedTextWidget: const CaptionedTextWidget( + title: 'App lock', ), + onTap: () async { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOption(); + }, + ), + ); + }, ), + // MenuItemWidget( + // captionedTextWidget: const CaptionedTextWidget( + // title: 'App lock', + // ), + // trailingWidget: ToggleSwitchWidget( + // value: () => _config.shouldShowLockScreen(), + // onChanged: () async { + // await LocalAuthenticationService.instance + // .requestLocalAuthForLockScreen( + // context, + // !_config.shouldShowLockScreen(), + // S.of(context).authToChangeLockscreenSetting, + // S.of(context).lockScreenEnablePreSteps, + // ); + + // ///try here also once about the material page route + // }, + // ), + // ), sectionOptionSpacing, MenuItemWidget( captionedTextWidget: CaptionedTextWidget( From d94fe56318ab13588e87caf2a7240db3f14f2a2e Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Mon, 10 Jun 2024 15:19:09 +0530 Subject: [PATCH 013/466] [mob][photos] update the UI acc. to the new figma design --- .../local_authentication_service.dart | 4 - .../ui/settings/TEMP/lock_screen_option.dart | 75 ++++++++++++------- .../lock_screen_option_confirm_password.dart | 23 ++++-- .../TEMP/lock_screen_option_confirm_pin.dart | 35 +++++---- .../TEMP/lock_screen_option_password.dart | 35 ++++----- .../settings/TEMP/lock_screen_option_pin.dart | 42 ++++------- 6 files changed, 119 insertions(+), 95 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 0747048494..3ff5d381d6 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -119,10 +119,6 @@ class LocalAuthenticationService { String errorDialogContent, [ String errorDialogTitle = "", ]) async { - // if (await requestEnteAuthForLockScreen(context)) { - // return true; - // } - if (await _isLocalAuthSupportedOnDevice()) { AppLock.of(context)!.disable(); final result = await requestAuthentication( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 863ecdfaaf..6e9aec8e62 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -35,7 +35,8 @@ class _LockScreenOptionState extends State { @override Widget build(BuildContext context) { - final colorScheme = getEnteColorScheme(context); + final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); return Scaffold( body: CustomScrollView( primary: false, @@ -64,7 +65,7 @@ class _LockScreenOptionState extends State { alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: false, isBottomBorderRadiusRemoved: false, - menuItemColor: colorScheme.fillFaint, + menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( value: () => appLock!, onChanged: () async { @@ -78,14 +79,7 @@ class _LockScreenOptionState extends State { isPasswordEnabled = _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); - } - // else if ((isPasswordEnabled || - // isPinEnabled) && - // appLock == false) { - // await _configuration.removePinAndPassword(); - // result = true; - // } - else { + } else { result = await LocalAuthenticationService .instance .requestLocalAuthForLockScreen( @@ -104,11 +98,23 @@ class _LockScreenOptionState extends State { setState(() { if (result) { appLock = !appLock!; + } else { + appLock = appLock; } }); }, ), ), + const Padding( + padding: EdgeInsets.only(top: 16), + ), + appLock! + ? Container() + : Text( + 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', + style: textTheme.smallFaint, + textAlign: TextAlign.center, + ), ], ), appLock! @@ -125,9 +131,12 @@ class _LockScreenOptionState extends State { alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: false, isBottomBorderRadiusRemoved: true, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, + menuItemColor: colorTheme.fillFaint, + trailingIcon: + !(isPasswordEnabled || isPinEnabled) + ? Icons.check + : null, + trailingIconColor: colorTheme.tabIcon, onTap: () async { setState(() { _configuration.removePinAndPassword(); @@ -140,7 +149,7 @@ class _LockScreenOptionState extends State { ), DividerWidget( dividerType: DividerType.menuNoIcon, - bgColor: colorScheme.fillFaint, + bgColor: colorTheme.fillFaint, ), MenuItemWidget( captionedTextWidget: @@ -150,11 +159,13 @@ class _LockScreenOptionState extends State { alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, isBottomBorderRadiusRemoved: true, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, + menuItemColor: colorTheme.fillFaint, + trailingIcon: + isPinEnabled ? Icons.check : null, + trailingIconColor: colorTheme.tabIcon, onTap: () async { - await Navigator.of(context).push( + final bool result = + await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { return const LockScreenOptionPin(); @@ -166,14 +177,18 @@ class _LockScreenOptionState extends State { _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); - appLock = - isPinEnabled || isPasswordEnabled; + if (result == false) { + appLock = appLock; + } else { + appLock = + isPinEnabled || isPasswordEnabled; + } }); }, ), DividerWidget( dividerType: DividerType.menuNoIcon, - bgColor: colorScheme.fillFaint, + bgColor: colorTheme.fillFaint, ), MenuItemWidget( captionedTextWidget: @@ -183,11 +198,13 @@ class _LockScreenOptionState extends State { alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, isBottomBorderRadiusRemoved: false, - menuItemColor: colorScheme.fillFaint, - trailingIconIsMuted: true, - trailingIcon: Icons.chevron_right_outlined, + menuItemColor: colorTheme.fillFaint, + trailingIcon: + isPasswordEnabled ? Icons.check : null, + trailingIconColor: colorTheme.tabIcon, onTap: () async { - await Navigator.of(context).push( + final bool result = + await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { return const LockScreenOptionPassword(); @@ -199,8 +216,12 @@ class _LockScreenOptionState extends State { _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); - appLock = - isPinEnabled || isPasswordEnabled; + if (result == false) { + appLock = appLock; + } else { + appLock = + isPinEnabled || isPasswordEnabled; + } }); }, ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 8e66baf67d..ce6b7696e7 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -38,7 +38,6 @@ class _LockScreenOptionConfirmPasswordState @override void dispose() { _focusNode.dispose(); - // print("CONFIRM DISPOSE"); super.dispose(); } @@ -60,8 +59,8 @@ class _LockScreenOptionConfirmPasswordState ), ], ); - Navigator.of(context).pop(); - Navigator.of(context).pop(); + Navigator.of(context).pop(true); + Navigator.of(context).pop(true); } else { await showDialogWidget( context: context, @@ -87,12 +86,24 @@ class _LockScreenOptionConfirmPasswordState final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( + appBar: AppBar( + elevation: 0, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(); + }, + icon: Icon( + Icons.arrow_back, + color: colorTheme.tabIcon, + ), + ), + ), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox( - height: 120, + height: 60, ), SizedBox( height: 120, @@ -124,7 +135,7 @@ class _LockScreenOptionConfirmPasswordState ), ), Text( - 'Enter the password to lock the app', + 'Re-enter Password', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(24)), @@ -145,7 +156,7 @@ class _LockScreenOptionConfirmPasswordState Padding( padding: const EdgeInsets.all(18.0), child: ButtonWidget( - labelText: 'Next', + labelText: S.of(context).confirm, buttonType: ButtonType.secondary, buttonSize: ButtonSize.large, onTap: () => _confirmPasswordMatch(), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 865cfb459a..d348468ea0 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -19,7 +19,6 @@ class LockScreenOptionConfirmPin extends StatefulWidget { class _LockScreenOptionConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); - String _confirmPin = ""; final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); @@ -45,8 +44,8 @@ class _LockScreenOptionConfirmPinState } Future _confirmPinMatch() async { - if (widget.pin == _confirmPin) { - await _configuration.savePin(_confirmPin); + if (widget.pin == _confirmPinController.text) { + await _configuration.savePin(_confirmPinController.text); await showDialogWidget( context: context, title: 'Pin has been set', @@ -62,8 +61,8 @@ class _LockScreenOptionConfirmPinState ), ], ); - Navigator.of(context).pop(); - Navigator.of(context).pop(); + Navigator.of(context).pop(true); + Navigator.of(context).pop(true); } else { await showDialogWidget( context: context, @@ -89,13 +88,24 @@ class _LockScreenOptionConfirmPinState final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( - // resizeToAvoidBottomInset: false, + resizeToAvoidBottomInset: false, + appBar: AppBar( + elevation: 0, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(false); + }, + icon: Icon( + Icons.arrow_back, + color: colorTheme.tabIcon, + ), + ), + ), body: Center( child: Column( - crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox( - height: 120, + height: 60, ), SizedBox( height: 120, @@ -133,7 +143,7 @@ class _LockScreenOptionConfirmPinState ), ), Text( - 'Re-enter to confirm the pin', + 'Re-enter PIN', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), @@ -160,11 +170,6 @@ class _LockScreenOptionConfirmPinState ), textStyle: textTheme.h3, obscureText: '*', - onChanged: (String pin) { - setState(() { - _confirmPin = pin; - }); - }, onSubmit: (value) { FocusScope.of(context).unfocus(); }, @@ -175,7 +180,7 @@ class _LockScreenOptionConfirmPinState padding: const EdgeInsets.all(18.0), child: ButtonWidget( labelText: S.of(context).confirm, - buttonType: _confirmPin.length == 4 + buttonType: _confirmPinController.text.length == 4 ? ButtonType.primary : ButtonType.secondary, buttonSize: ButtonSize.large, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index f1552fcda6..7f5b6be781 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -22,7 +22,6 @@ class LockScreenOptionPassword extends StatefulWidget { class _LockScreenOptionPasswordState extends State { final _passwordController = TextEditingController(text: null); - String password = ""; final _focusNode = FocusNode(); @override @@ -37,9 +36,7 @@ class _LockScreenOptionPasswordState extends State { @override void dispose() { super.dispose(); - // _passwordController.dispose(); _focusNode.dispose(); - // print("DISPOSE"); } Future confirmPasswordAuth(String code) async { @@ -53,16 +50,17 @@ class _LockScreenOptionPasswordState extends State { Future _confirmPassword() async { if (widget.isAuthenticating) { - await confirmPasswordAuth(password); + await confirmPasswordAuth(_passwordController.text); return; } else { await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => LockScreenOptionConfirmPassword( - password: password, + password: _passwordController.text, ), ), ); + _passwordController.clear(); } } @@ -71,12 +69,24 @@ class _LockScreenOptionPasswordState extends State { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( + appBar: AppBar( + elevation: 0, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(false); + }, + icon: Icon( + Icons.arrow_back, + color: colorTheme.tabIcon, + ), + ), + ), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox( - height: 120, + height: 60, ), SizedBox( height: 120, @@ -108,9 +118,7 @@ class _LockScreenOptionPasswordState extends State { ), ), Text( - widget.isAuthenticating - ? 'Enter the password to change \nLockscreen settings.' - : 'Enter the password to lock the app', + widget.isAuthenticating ? 'Enter Password' : 'Set new Password', textAlign: TextAlign.center, style: textTheme.bodyBold, ), @@ -126,11 +134,6 @@ class _LockScreenOptionPasswordState extends State { textEditingController: _passwordController, prefixIcon: Icons.lock_outline, isPasswordInput: true, - onChange: (String p0) { - setState(() { - password = p0; - }); - }, ), ), const Spacer(), @@ -138,9 +141,7 @@ class _LockScreenOptionPasswordState extends State { padding: const EdgeInsets.all(18.0), child: ButtonWidget( labelText: 'Next', - buttonType: password.length > 8 - ? ButtonType.primary - : ButtonType.secondary, + buttonType: ButtonType.secondary, buttonSize: ButtonSize.large, onTap: () => _confirmPassword(), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index f4b87b4488..14a7d87740 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -1,8 +1,6 @@ import "package:flutter/material.dart"; import "package:photos/theme/ente_theme.dart"; -import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; import "package:pinput/pin_put/pin_put.dart"; @@ -21,7 +19,6 @@ class LockScreenOptionPin extends StatefulWidget { class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); - String _code = ""; final _focusNode = FocusNode(); final _pinPutDecoration = BoxDecoration( @@ -43,7 +40,6 @@ class _LockScreenOptionPinState extends State { super.dispose(); _pinController.dispose(); _focusNode.dispose(); - print("PIN"); } Future confirmPinAuth(String code) async { @@ -66,6 +62,7 @@ class _LockScreenOptionPinState extends State { LockScreenOptionConfirmPin(pin: code), ), ); + _pinController.clear(); } } @@ -74,13 +71,25 @@ class _LockScreenOptionPinState extends State { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( + appBar: AppBar( + elevation: 0, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(false); + }, + icon: Icon( + Icons.arrow_back, + color: colorTheme.tabIcon, + ), + ), + ), // resizeToAvoidBottomInset: false, body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox( - height: 120, + height: 60, ), SizedBox( height: 120, @@ -118,9 +127,7 @@ class _LockScreenOptionPinState extends State { ), ), Text( - widget.isAuthenticating - ? 'Enter the pin to change Lockscreen settings.' - : 'Enter the pin to lock the app', + widget.isAuthenticating ? 'Enter PIN' : 'Set new PIN', style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), @@ -147,29 +154,12 @@ class _LockScreenOptionPinState extends State { ), textStyle: textTheme.h3, obscureText: '*', - onChanged: (String pin) { - setState(() { - _code = pin; - }); - }, onSubmit: (value) { FocusScope.of(context).unfocus(); + _confirmPin(_pinController.text); }, ), ), - const Spacer(), - Padding( - padding: const EdgeInsets.all(18.0), - child: ButtonWidget( - labelText: 'Next', - buttonType: _code.length == 4 - ? ButtonType.primary - : ButtonType.secondary, - buttonSize: ButtonSize.large, - onTap: () => _confirmPin(_code), - ), - ), - const Padding(padding: EdgeInsets.only(bottom: 24)), ], ), ), From d3c7ba6874469fe5443de9b7bffaec559d5a63d0 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Mon, 10 Jun 2024 18:06:24 +0530 Subject: [PATCH 014/466] [mob][photos] added the dynamicFAV and made seprate function for each type of lock --- .../ui/settings/TEMP/lock_screen_option.dart | 167 +++++++++--------- .../lock_screen_option_confirm_password.dart | 34 ++-- .../TEMP/lock_screen_option_confirm_pin.dart | 37 ++-- .../TEMP/lock_screen_option_password.dart | 36 ++-- .../settings/TEMP/lock_screen_option_pin.dart | 1 - 5 files changed, 148 insertions(+), 127 deletions(-) diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 6e9aec8e62..7cd7450b2f 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -33,6 +33,81 @@ class _LockScreenOptionState extends State { super.initState(); } + Future _deviceLock() async { + await _configuration.removePinAndPassword(); + setState(() { + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + }); + } + + Future _pinLock() async { + final bool result = await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPin(); + }, + ), + ); + setState(() { + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + if (result == false) { + appLock = appLock; + } else { + appLock = isPinEnabled || isPasswordEnabled; + } + }); + } + + Future _passwordLock() async { + final bool result = await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptionPassword(); + }, + ), + ); + setState(() { + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + if (result == false) { + appLock = appLock; + } else { + appLock = isPinEnabled || isPasswordEnabled; + } + }); + } + + Future _onToggleSwitch() async { + bool result; + if ((isPinEnabled || isPasswordEnabled) && appLock == true) { + result = await LocalAuthenticationService.instance + .requestEnteAuthForLockScreen(context); + await _configuration.removePinAndPassword(); + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + } else { + result = await LocalAuthenticationService.instance + .requestLocalAuthForLockScreen( + context, + !_configuration.shouldShowLockScreen(), + S.of(context).authToChangeLockscreenSetting, + S.of(context).lockScreenEnablePreSteps, + ); + await _configuration.removePinAndPassword(); + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + } + setState(() { + if (result) { + appLock = !appLock!; + } else { + appLock = appLock; + } + }); + } + @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); @@ -68,41 +143,7 @@ class _LockScreenOptionState extends State { menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( value: () => appLock!, - onChanged: () async { - bool result; - if ((isPinEnabled || isPasswordEnabled) && - appLock == true) { - result = await LocalAuthenticationService - .instance - .requestEnteAuthForLockScreen(context); - await _configuration.removePinAndPassword(); - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); - } else { - result = await LocalAuthenticationService - .instance - .requestLocalAuthForLockScreen( - context, - !_configuration.shouldShowLockScreen(), - S - .of(context) - .authToChangeLockscreenSetting, - S.of(context).lockScreenEnablePreSteps, - ); - await _configuration.removePinAndPassword(); - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); - } - setState(() { - if (result) { - appLock = !appLock!; - } else { - appLock = appLock; - } - }); - }, + onChanged: () => _onToggleSwitch(), ), ), const Padding( @@ -137,15 +178,7 @@ class _LockScreenOptionState extends State { ? Icons.check : null, trailingIconColor: colorTheme.tabIcon, - onTap: () async { - setState(() { - _configuration.removePinAndPassword(); - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = - _configuration.isPinSet(); - }); - }, + onTap: () => _deviceLock(), ), DividerWidget( dividerType: DividerType.menuNoIcon, @@ -163,28 +196,7 @@ class _LockScreenOptionState extends State { trailingIcon: isPinEnabled ? Icons.check : null, trailingIconColor: colorTheme.tabIcon, - onTap: () async { - final bool result = - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOptionPin(); - }, - ), - ); - setState(() { - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = - _configuration.isPinSet(); - if (result == false) { - appLock = appLock; - } else { - appLock = - isPinEnabled || isPasswordEnabled; - } - }); - }, + onTap: () => _pinLock(), ), DividerWidget( dividerType: DividerType.menuNoIcon, @@ -202,28 +214,7 @@ class _LockScreenOptionState extends State { trailingIcon: isPasswordEnabled ? Icons.check : null, trailingIconColor: colorTheme.tabIcon, - onTap: () async { - final bool result = - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOptionPassword(); - }, - ), - ); - setState(() { - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = - _configuration.isPinSet(); - if (result == false) { - appLock = appLock; - } else { - appLock = - isPinEnabled || isPasswordEnabled; - } - }); - }, + onTap: () => _passwordLock(), ), ], ) diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index ce6b7696e7..564b453144 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -2,6 +2,7 @@ import "package:flutter/material.dart"; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; @@ -85,7 +86,18 @@ class _LockScreenOptionConfirmPasswordState Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); + final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; + + FloatingActionButtonLocation? fabLocation() { + if (isKeypadOpen) { + return null; + } else { + return FloatingActionButtonLocation.centerFloat; + } + } + return Scaffold( + resizeToAvoidBottomInset: isKeypadOpen, appBar: AppBar( elevation: 0, leading: IconButton( @@ -98,6 +110,17 @@ class _LockScreenOptionConfirmPasswordState ), ), ), + floatingActionButton: DynamicFAB( + isKeypadOpen: isKeypadOpen, + buttonText: S.of(context).confirm, + isFormValid: _confirmPasswordController.text.isNotEmpty, + onPressedFunction: () async { + await _confirmPasswordMatch(); + FocusScope.of(context).unfocus(); + }, + ), + floatingActionButtonLocation: fabLocation(), + floatingActionButtonAnimator: NoScalingAnimation(), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -152,17 +175,6 @@ class _LockScreenOptionConfirmPasswordState isPasswordInput: true, ), ), - const Spacer(), - Padding( - padding: const EdgeInsets.all(18.0), - child: ButtonWidget( - labelText: S.of(context).confirm, - buttonType: ButtonType.secondary, - buttonSize: ButtonSize.large, - onTap: () => _confirmPasswordMatch(), - ), - ), - const Padding(padding: EdgeInsets.only(bottom: 24)), ], ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index d348468ea0..fe7f965932 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -2,6 +2,7 @@ import "package:flutter/material.dart"; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; @@ -87,8 +88,18 @@ class _LockScreenOptionConfirmPinState Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); + final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; + + FloatingActionButtonLocation? fabLocation() { + if (isKeypadOpen) { + return null; + } else { + return FloatingActionButtonLocation.centerFloat; + } + } + return Scaffold( - resizeToAvoidBottomInset: false, + resizeToAvoidBottomInset: isKeypadOpen, appBar: AppBar( elevation: 0, leading: IconButton( @@ -101,6 +112,17 @@ class _LockScreenOptionConfirmPinState ), ), ), + floatingActionButton: DynamicFAB( + isKeypadOpen: isKeypadOpen, + buttonText: S.of(context).confirm, + isFormValid: _confirmPinController.text.isNotEmpty, + onPressedFunction: () async { + await _confirmPinMatch(); + FocusScope.of(context).unfocus(); + }, + ), + floatingActionButtonLocation: fabLocation(), + floatingActionButtonAnimator: NoScalingAnimation(), body: Center( child: Column( children: [ @@ -175,19 +197,6 @@ class _LockScreenOptionConfirmPinState }, ), ), - const Spacer(), - Padding( - padding: const EdgeInsets.all(18.0), - child: ButtonWidget( - labelText: S.of(context).confirm, - buttonType: _confirmPinController.text.length == 4 - ? ButtonType.primary - : ButtonType.secondary, - buttonSize: ButtonSize.large, - onTap: () => _confirmPinMatch(), - ), - ), - const Padding(padding: EdgeInsets.only(bottom: 24)), ], ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 7f5b6be781..cd3408476c 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -1,9 +1,8 @@ import "package:flutter/material.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; -import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/text_input_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_password.dart"; @@ -68,7 +67,18 @@ class _LockScreenOptionPasswordState extends State { Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); + final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; + + FloatingActionButtonLocation? fabLocation() { + if (isKeypadOpen) { + return null; + } else { + return FloatingActionButtonLocation.centerFloat; + } + } + return Scaffold( + resizeToAvoidBottomInset: isKeypadOpen, appBar: AppBar( elevation: 0, leading: IconButton( @@ -81,6 +91,17 @@ class _LockScreenOptionPasswordState extends State { ), ), ), + floatingActionButton: DynamicFAB( + isKeypadOpen: isKeypadOpen, + buttonText: S.of(context).ok, + isFormValid: _passwordController.text.isNotEmpty, + onPressedFunction: () async { + await _confirmPassword(); + FocusScope.of(context).unfocus(); + }, + ), + floatingActionButtonLocation: fabLocation(), + floatingActionButtonAnimator: NoScalingAnimation(), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -136,17 +157,6 @@ class _LockScreenOptionPasswordState extends State { isPasswordInput: true, ), ), - const Spacer(), - Padding( - padding: const EdgeInsets.all(18.0), - child: ButtonWidget( - labelText: 'Next', - buttonType: ButtonType.secondary, - buttonSize: ButtonSize.large, - onTap: () => _confirmPassword(), - ), - ), - const Padding(padding: EdgeInsets.only(bottom: 24)), ], ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 14a7d87740..b806b5dff7 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -83,7 +83,6 @@ class _LockScreenOptionPinState extends State { ), ), ), - // resizeToAvoidBottomInset: false, body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, From 11da0704c635b59b7802057887589e327201c44a Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 11 Jun 2024 18:17:25 +0530 Subject: [PATCH 015/466] [mob][photos] show lock when app starts & authenticate to change lock settings --- .../local_authentication_service.dart | 38 ---------- .../ui/settings/TEMP/lock_screen_option.dart | 76 +++++++++++-------- .../lock_screen_option_confirm_password.dart | 61 +++++---------- .../TEMP/lock_screen_option_confirm_pin.dart | 36 +-------- .../TEMP/lock_screen_option_password.dart | 24 ++++-- .../ui/settings/security_section_widget.dart | 20 +++-- mobile/lib/utils/auth_util.dart | 63 ++++++++------- 7 files changed, 131 insertions(+), 187 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 3ff5d381d6..75925aa7b6 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,10 +3,6 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; -import "package:photos/generated/l10n.dart"; -import "package:photos/ui/components/buttons/button_widget.dart"; -import "package:photos/ui/components/dialog_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; @@ -58,23 +54,6 @@ class LocalAuthenticationService { ); if (result) { return true; - } else { - await showDialogWidget( - context: context, - title: 'Password does not match', - icon: Icons.lock, - body: 'Please re-enter the password.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); - return false; } } if (savedPin != null) { @@ -90,23 +69,6 @@ class LocalAuthenticationService { ); if (result) { return true; - } else { - await showDialogWidget( - context: context, - title: 'Pin does not match', - icon: Icons.lock, - body: 'Please re-enter the pin.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); - return false; } } return false; diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 7cd7450b2f..5b7f151a58 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -1,7 +1,5 @@ import "package:flutter/material.dart"; import "package:photos/core/configuration.dart"; -import "package:photos/generated/l10n.dart"; -import "package:photos/services/local_authentication_service.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/captioned_text_widget.dart"; import "package:photos/ui/components/divider_widget.dart"; @@ -29,7 +27,9 @@ class _LockScreenOptionState extends State { void initState() { isPasswordEnabled = _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); - appLock = isPinEnabled || isPasswordEnabled; + appLock = isPinEnabled || + isPasswordEnabled || + !_configuration.shouldShowLockScreen(); super.initState(); } @@ -79,34 +79,38 @@ class _LockScreenOptionState extends State { }); } - Future _onToggleSwitch() async { - bool result; - if ((isPinEnabled || isPasswordEnabled) && appLock == true) { - result = await LocalAuthenticationService.instance - .requestEnteAuthForLockScreen(context); - await _configuration.removePinAndPassword(); - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); - } else { - result = await LocalAuthenticationService.instance - .requestLocalAuthForLockScreen( - context, - !_configuration.shouldShowLockScreen(), - S.of(context).authToChangeLockscreenSetting, - S.of(context).lockScreenEnablePreSteps, - ); - await _configuration.removePinAndPassword(); - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); - } - setState(() { - if (result) { - appLock = !appLock!; - } else { - appLock = appLock; - } - }); - } + // Future _onToggleSwitch() async { + // bool result; + // if ((isPinEnabled || isPasswordEnabled) && appLock == true) { + // // result = await LocalAuthenticationService.instance + // // .requestEnteAuthForLockScreen(context); + // result = await requestAuthentication( + // context, + // S.of(context).authToChangeLockscreenSetting, + // ); + // await _configuration.removePinAndPassword(); + // isPasswordEnabled = _configuration.isPasswordSet(); + // isPinEnabled = _configuration.isPinSet(); + // } else { + // result = await LocalAuthenticationService.instance + // .requestLocalAuthForLockScreen( + // context, + // !_configuration.shouldShowLockScreen(), + // S.of(context).authToChangeLockscreenSetting, + // S.of(context).lockScreenEnablePreSteps, + // ); + // await _configuration.removePinAndPassword(); + // isPasswordEnabled = _configuration.isPasswordSet(); + // isPinEnabled = _configuration.isPinSet(); + // } + // setState(() { + // if (result) { + // appLock = !appLock!; + // } else { + // appLock = appLock; + // } + // }); + // } @override Widget build(BuildContext context) { @@ -143,7 +147,15 @@ class _LockScreenOptionState extends State { menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( value: () => appLock!, - onChanged: () => _onToggleSwitch(), + onChanged: () async { + setState(() { + _configuration.removePinAndPassword(); + isPasswordEnabled = + _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + appLock = !appLock!; + }); + }, ), ), const Padding( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 564b453144..468751fcb1 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -3,10 +3,7 @@ import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; -import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/dialog_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/components/text_input_widget.dart"; class LockScreenOptionConfirmPassword extends StatefulWidget { @@ -26,6 +23,7 @@ class _LockScreenOptionConfirmPasswordState final _confirmPasswordController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); + final _isFormValid = ValueNotifier(false); @override void initState() { @@ -38,46 +36,16 @@ class _LockScreenOptionConfirmPasswordState @override void dispose() { - _focusNode.dispose(); super.dispose(); + _focusNode.dispose(); } Future _confirmPasswordMatch() async { if (widget.password == _confirmPasswordController.text) { await _configuration.savePassword(_confirmPasswordController.text); - await showDialogWidget( - context: context, - title: 'Password has been set', - icon: Icons.lock, - body: 'Hereafter password has been required while opening the app.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); + Navigator.of(context).pop(true); Navigator.of(context).pop(true); - } else { - await showDialogWidget( - context: context, - title: 'Password does not match', - icon: Icons.lock, - body: 'Please re-enter the password.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); } _confirmPasswordController.clear(); } @@ -110,13 +78,18 @@ class _LockScreenOptionConfirmPasswordState ), ), ), - floatingActionButton: DynamicFAB( - isKeypadOpen: isKeypadOpen, - buttonText: S.of(context).confirm, - isFormValid: _confirmPasswordController.text.isNotEmpty, - onPressedFunction: () async { - await _confirmPasswordMatch(); - FocusScope.of(context).unfocus(); + floatingActionButton: ValueListenableBuilder( + valueListenable: _isFormValid, + builder: (context, isFormValid, child) { + return DynamicFAB( + isKeypadOpen: isKeypadOpen, + buttonText: S.of(context).confirm, + isFormValid: isFormValid, + onPressedFunction: () async { + await _confirmPasswordMatch(); + FocusScope.of(context).unfocus(); + }, + ); }, ), floatingActionButtonLocation: fabLocation(), @@ -173,6 +146,10 @@ class _LockScreenOptionConfirmPasswordState textEditingController: _confirmPasswordController, prefixIcon: Icons.lock_outline, isPasswordInput: true, + onChange: (p0) { + _isFormValid.value = + _confirmPasswordController.text.isNotEmpty; + }, ), ), ], diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index fe7f965932..4c386ecb29 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -3,10 +3,7 @@ import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; -import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/dialog_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import "package:pinput/pin_put/pin_put.dart"; class LockScreenOptionConfirmPin extends StatefulWidget { @@ -22,7 +19,6 @@ class _LockScreenOptionConfirmPinState final _confirmPinController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); - final _pinPutDecoration = BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -47,39 +43,9 @@ class _LockScreenOptionConfirmPinState Future _confirmPinMatch() async { if (widget.pin == _confirmPinController.text) { await _configuration.savePin(_confirmPinController.text); - await showDialogWidget( - context: context, - title: 'Pin has been set', - icon: Icons.lock, - body: 'Hereafter pin has been required while opening the app.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); + Navigator.of(context).pop(true); Navigator.of(context).pop(true); - } else { - await showDialogWidget( - context: context, - title: 'Pin does not match', - icon: Icons.lock, - body: 'Please re-enter the pin.', - isDismissible: true, - buttons: [ - ButtonWidget( - buttonType: ButtonType.secondary, - labelText: S.of(context).ok, - isInAlert: true, - buttonAction: ButtonAction.first, - ), - ], - ); } _confirmPinController.clear(); } diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index cd3408476c..a1af2e87a0 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -22,6 +22,7 @@ class LockScreenOptionPassword extends StatefulWidget { class _LockScreenOptionPasswordState extends State { final _passwordController = TextEditingController(text: null); final _focusNode = FocusNode(); + final _isFormValid = ValueNotifier(false); @override void initState() { @@ -36,6 +37,7 @@ class _LockScreenOptionPasswordState extends State { void dispose() { super.dispose(); _focusNode.dispose(); + _isFormValid.dispose(); } Future confirmPasswordAuth(String code) async { @@ -91,13 +93,18 @@ class _LockScreenOptionPasswordState extends State { ), ), ), - floatingActionButton: DynamicFAB( - isKeypadOpen: isKeypadOpen, - buttonText: S.of(context).ok, - isFormValid: _passwordController.text.isNotEmpty, - onPressedFunction: () async { - await _confirmPassword(); - FocusScope.of(context).unfocus(); + floatingActionButton: ValueListenableBuilder( + valueListenable: _isFormValid, + builder: (context, isFormValid, child) { + return DynamicFAB( + isKeypadOpen: isKeypadOpen, + buttonText: S.of(context).ok, + isFormValid: isFormValid, + onPressedFunction: () async { + await _confirmPassword(); + FocusScope.of(context).unfocus(); + }, + ); }, ), floatingActionButtonLocation: fabLocation(), @@ -155,6 +162,9 @@ class _LockScreenOptionPasswordState extends State { textEditingController: _passwordController, prefixIcon: Icons.lock_outline, isPasswordInput: true, + onChange: (p0) { + _isFormValid.value = _passwordController.text.isNotEmpty; + }, ), ), ], diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 35e1d3fb72..3ddea3e47d 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -23,6 +23,7 @@ import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; import 'package:photos/ui/components/toggle_switch_widget.dart'; import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import 'package:photos/ui/settings/common_settings.dart'; +import "package:photos/utils/auth_util.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/navigation_util.dart"; @@ -145,13 +146,20 @@ class _SecuritySectionWidgetState extends State { title: 'App lock', ), onTap: () async { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOption(); - }, - ), + final bool result = await requestAuthentication( + context, + S.of(context).authToChangeLockscreenSetting, ); + + if (result) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOption(); + }, + ), + ); + } }, ), // MenuItemWidget( diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 33e523a0c1..7d2b344b1c 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -3,36 +3,45 @@ import 'package:local_auth/local_auth.dart'; import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_ios/local_auth_ios.dart'; import 'package:logging/logging.dart'; +import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; +import "package:photos/services/local_authentication_service.dart"; Future requestAuthentication(BuildContext context, String reason) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); - - return await LocalAuthentication().authenticate( - localizedReason: reason, - authMessages: [ - AndroidAuthMessages( - biometricHint: S.of(context).androidBiometricHint, - biometricNotRecognized: S.of(context).androidBiometricNotRecognized, - biometricRequiredTitle: S.of(context).androidBiometricRequiredTitle, - biometricSuccess: S.of(context).androidBiometricSuccess, - cancelButton: S.of(context).androidCancelButton, - deviceCredentialsRequiredTitle: - S.of(context).androidDeviceCredentialsRequiredTitle, - deviceCredentialsSetupDescription: - S.of(context).androidDeviceCredentialsSetupDescription, - goToSettingsButton: S.of(context).goToSettings, - goToSettingsDescription: S.of(context).androidGoToSettingsDescription, - signInTitle: S.of(context).androidSignInTitle, - ), - IOSAuthMessages( - goToSettingsButton: S.of(context).goToSettings, - goToSettingsDescription: S.of(context).goToSettings, - lockOut: S.of(context).iOSLockOut, - // cancelButton default value is "Ok" - cancelButton: S.of(context).iOSOkButton, - ), - ], - ); + final Configuration configuration = Configuration.instance; + final String? savedPin = await configuration.loadSavedPin(); + final String? savedPassword = await configuration.loadSavedPassword(); + if (savedPassword != null || savedPin != null) { + return await LocalAuthenticationService.instance + .requestEnteAuthForLockScreen(context); + } else { + return await LocalAuthentication().authenticate( + localizedReason: reason, + authMessages: [ + AndroidAuthMessages( + biometricHint: S.of(context).androidBiometricHint, + biometricNotRecognized: S.of(context).androidBiometricNotRecognized, + biometricRequiredTitle: S.of(context).androidBiometricRequiredTitle, + biometricSuccess: S.of(context).androidBiometricSuccess, + cancelButton: S.of(context).androidCancelButton, + deviceCredentialsRequiredTitle: + S.of(context).androidDeviceCredentialsRequiredTitle, + deviceCredentialsSetupDescription: + S.of(context).androidDeviceCredentialsSetupDescription, + goToSettingsButton: S.of(context).goToSettings, + goToSettingsDescription: S.of(context).androidGoToSettingsDescription, + signInTitle: S.of(context).androidSignInTitle, + ), + IOSAuthMessages( + goToSettingsButton: S.of(context).goToSettings, + goToSettingsDescription: S.of(context).goToSettings, + lockOut: S.of(context).iOSLockOut, + // cancelButton default value is "Ok" + cancelButton: S.of(context).iOSOkButton, + ), + ], + ); + } } From b20e8a5d17b2925f7b5d71e375b6d74e7adf623c Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 13 Jun 2024 01:21:06 +0530 Subject: [PATCH 016/466] [mob][photos] upgraded Pinput pakage and Added custom password input widget --- mobile/lib/core/configuration.dart | 8 +- .../local_authentication_service.dart | 4 +- .../two_factor_authentication_page.dart | 53 +++++++---- .../lib/ui/account/two_factor_setup_page.dart | 47 +++++----- .../ui/settings/TEMP/lock_screen_option.dart | 64 +++++-------- .../lock_screen_option_confirm_password.dart | 3 +- .../TEMP/lock_screen_option_confirm_pin.dart | 71 +++++++++----- .../TEMP/lock_screen_option_password.dart | 1 + .../settings/TEMP/lock_screen_option_pin.dart | 86 ++++++++++------- .../settings/TEMP/password_input_widget.dart | 92 +++++++++++++++++++ mobile/lib/utils/auth_util.dart | 4 +- mobile/pubspec.lock | 16 +++- mobile/pubspec.yaml | 2 +- 13 files changed, 298 insertions(+), 153 deletions(-) create mode 100644 mobile/lib/ui/settings/TEMP/password_input_widget.dart diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 99df803869..1a3ca413c8 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -152,21 +152,21 @@ class Configuration { } } - Future savePin(String userPin) async { + Future setPin(String userPin) async { await _preferences.setString(pin, userPin); await _preferences.remove(password); } - Future loadSavedPin() async { + Future getPin() async { return _preferences.getString(pin); } - Future savePassword(String pass) async { + Future setPassword(String pass) async { await _preferences.setString(password, pass); await _preferences.remove(pin); } - Future loadSavedPassword() async { + Future getPassword() async { return _preferences.getString(password); } diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 75925aa7b6..c057724ff1 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -38,8 +38,8 @@ class LocalAuthenticationService { } Future requestEnteAuthForLockScreen(BuildContext context) async { - final String? savedPin = await _configuration.loadSavedPin(); - final String? savedPassword = await _configuration.loadSavedPassword(); + final String? savedPin = await _configuration.getPin(); + final String? savedPassword = await _configuration.getPassword(); if (savedPassword != null) { final result = await Navigator.of(context).push( diff --git a/mobile/lib/ui/account/two_factor_authentication_page.dart b/mobile/lib/ui/account/two_factor_authentication_page.dart index 8dd71d0441..0a45c2c0fc 100644 --- a/mobile/lib/ui/account/two_factor_authentication_page.dart +++ b/mobile/lib/ui/account/two_factor_authentication_page.dart @@ -4,7 +4,7 @@ import "package:photos/generated/l10n.dart"; import "package:photos/models/account/two_factor.dart"; import 'package:photos/services/user_service.dart'; import 'package:photos/ui/lifecycle_event_handler.dart'; -import 'package:pinput/pin_put/pin_put.dart'; +import "package:pinput/pinput.dart"; class TwoFactorAuthenticationPage extends StatefulWidget { final String sessionID; @@ -20,9 +20,14 @@ class TwoFactorAuthenticationPage extends StatefulWidget { class _TwoFactorAuthenticationPageState extends State { final _pinController = TextEditingController(); - final _pinPutDecoration = BoxDecoration( - border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), - borderRadius: BorderRadius.circular(15.0), + + final _pinPutDecoration = PinTheme( + height: 48, + width: 48, + decoration: BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ), ); String _code = ""; late LifecycleEventHandler _lifecycleEventHandler; @@ -78,9 +83,9 @@ class _TwoFactorAuthenticationPageState const Padding(padding: EdgeInsets.all(32)), Padding( padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), - child: PinPut( - fieldsCount: 6, - onSubmit: (String code) { + child: Pinput( + length: 6, + onCompleted: (String code) { _verifyTwoFactorCode(code); }, onChanged: (String pin) { @@ -88,23 +93,33 @@ class _TwoFactorAuthenticationPageState _code = pin; }); }, + autofocus: true, controller: _pinController, - submittedFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(20.0), + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), ), - selectedFieldDecoration: _pinPutDecoration, - followingFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(5.0), - border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), ), ), - inputDecoration: const InputDecoration( - focusedBorder: InputBorder.none, - border: InputBorder.none, - counterText: '', + focusedPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), ), - autofocus: true, ), ), const Padding(padding: EdgeInsets.all(24)), diff --git a/mobile/lib/ui/account/two_factor_setup_page.dart b/mobile/lib/ui/account/two_factor_setup_page.dart index 13e8a2eadc..b146898433 100644 --- a/mobile/lib/ui/account/two_factor_setup_page.dart +++ b/mobile/lib/ui/account/two_factor_setup_page.dart @@ -1,7 +1,6 @@ import 'dart:async'; -import 'dart:ui'; -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; import 'package:flutter/services.dart'; import 'package:photos/core/configuration.dart'; import 'package:photos/ente_theme_data.dart'; @@ -12,7 +11,7 @@ import 'package:photos/ui/lifecycle_event_handler.dart'; import 'package:photos/utils/crypto_util.dart'; import 'package:photos/utils/navigation_util.dart'; import 'package:photos/utils/toast_util.dart'; -import 'package:pinput/pin_put/pin_put.dart'; +import "package:pinput/pinput.dart"; class TwoFactorSetupPage extends StatefulWidget { final String secretCode; @@ -34,9 +33,13 @@ class _TwoFactorSetupPageState extends State with SingleTickerProviderStateMixin { late TabController _tabController; final _pinController = TextEditingController(); - final _pinPutDecoration = BoxDecoration( - border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), - borderRadius: BorderRadius.circular(15.0), + final _pinPutDecoration = PinTheme( + height: 48, + width: 48, + decoration: BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ), ); String _code = ""; late ImageProvider _imageProvider; @@ -219,9 +222,9 @@ class _TwoFactorSetupPageState extends State const Padding(padding: EdgeInsets.all(16)), Padding( padding: const EdgeInsets.fromLTRB(40, 0, 40, 0), - child: PinPut( - fieldsCount: 6, - onSubmit: (String code) { + child: Pinput( + length: 6, + onCompleted: (String code) { _enableTwoFactor(code); }, onChanged: (String pin) { @@ -230,20 +233,22 @@ class _TwoFactorSetupPageState extends State }); }, controller: _pinController, - submittedFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(20.0), - ), - selectedFieldDecoration: _pinPutDecoration, - followingFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(5.0), - border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + submittedPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), ), ), - inputDecoration: const InputDecoration( - focusedBorder: InputBorder.none, - border: InputBorder.none, - counterText: '', + defaultPinTheme: _pinPutDecoration, + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), ), ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 5b7f151a58..8388ce17d3 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -9,6 +9,7 @@ import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/components/toggle_switch_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; +import "package:photos/ui/tools/app_lock.dart"; class LockScreenOption extends StatefulWidget { const LockScreenOption({super.key}); @@ -29,7 +30,7 @@ class _LockScreenOptionState extends State { isPinEnabled = _configuration.isPinSet(); appLock = isPinEnabled || isPasswordEnabled || - !_configuration.shouldShowLockScreen(); + _configuration.shouldShowLockScreen(); super.initState(); } @@ -55,7 +56,9 @@ class _LockScreenOptionState extends State { if (result == false) { appLock = appLock; } else { - appLock = isPinEnabled || isPasswordEnabled; + appLock = isPinEnabled || + isPasswordEnabled || + _configuration.shouldShowLockScreen(); } }); } @@ -79,38 +82,21 @@ class _LockScreenOptionState extends State { }); } - // Future _onToggleSwitch() async { - // bool result; - // if ((isPinEnabled || isPasswordEnabled) && appLock == true) { - // // result = await LocalAuthenticationService.instance - // // .requestEnteAuthForLockScreen(context); - // result = await requestAuthentication( - // context, - // S.of(context).authToChangeLockscreenSetting, - // ); - // await _configuration.removePinAndPassword(); - // isPasswordEnabled = _configuration.isPasswordSet(); - // isPinEnabled = _configuration.isPinSet(); - // } else { - // result = await LocalAuthenticationService.instance - // .requestLocalAuthForLockScreen( - // context, - // !_configuration.shouldShowLockScreen(), - // S.of(context).authToChangeLockscreenSetting, - // S.of(context).lockScreenEnablePreSteps, - // ); - // await _configuration.removePinAndPassword(); - // isPasswordEnabled = _configuration.isPasswordSet(); - // isPinEnabled = _configuration.isPinSet(); - // } - // setState(() { - // if (result) { - // appLock = !appLock!; - // } else { - // appLock = appLock; - // } - // }); - // } + Future _onToggleSwitch() async { + if (appLock == false && !(isPasswordEnabled || isPinEnabled)) { + AppLock.of(context)!.setEnabled(!appLock!); + await Configuration.instance.setShouldShowLockScreen(!appLock!); + } else { + AppLock.of(context)!.setEnabled(!appLock!); + await Configuration.instance.setShouldShowLockScreen(!appLock!); + } + setState(() { + _configuration.removePinAndPassword(); + isPasswordEnabled = _configuration.isPasswordSet(); + isPinEnabled = _configuration.isPinSet(); + appLock = !appLock!; + }); + } @override Widget build(BuildContext context) { @@ -147,15 +133,7 @@ class _LockScreenOptionState extends State { menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( value: () => appLock!, - onChanged: () async { - setState(() { - _configuration.removePinAndPassword(); - isPasswordEnabled = - _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); - appLock = !appLock!; - }); - }, + onChanged: () => _onToggleSwitch(), ), ), const Padding( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 468751fcb1..819c369982 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -42,7 +42,7 @@ class _LockScreenOptionConfirmPasswordState Future _confirmPasswordMatch() async { if (widget.password == _confirmPasswordController.text) { - await _configuration.savePassword(_confirmPasswordController.text); + await _configuration.setPassword(_confirmPasswordController.text); Navigator.of(context).pop(true); Navigator.of(context).pop(true); @@ -70,6 +70,7 @@ class _LockScreenOptionConfirmPasswordState elevation: 0, leading: IconButton( onPressed: () { + FocusScope.of(context).unfocus(); Navigator.of(context).pop(); }, icon: Icon( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 4c386ecb29..3f8b015f10 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -4,7 +4,7 @@ import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:pinput/pin_put/pin_put.dart"; +import "package:pinput/pinput.dart"; class LockScreenOptionConfirmPin extends StatefulWidget { const LockScreenOptionConfirmPin({super.key, required this.pin}); @@ -19,11 +19,14 @@ class _LockScreenOptionConfirmPinState final _confirmPinController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); - final _pinPutDecoration = BoxDecoration( - border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), - borderRadius: BorderRadius.circular(15.0), + final _pinPutDecoration = PinTheme( + height: 50, + width: 50, + decoration: BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ), ); - @override void initState() { super.initState(); @@ -42,12 +45,14 @@ class _LockScreenOptionConfirmPinState Future _confirmPinMatch() async { if (widget.pin == _confirmPinController.text) { - await _configuration.savePin(_confirmPinController.text); + await _configuration.setPin(_confirmPinController.text); Navigator.of(context).pop(true); Navigator.of(context).pop(true); + return; + } else { + _confirmPinController.clear(); } - _confirmPinController.clear(); } @override @@ -70,6 +75,7 @@ class _LockScreenOptionConfirmPinState elevation: 0, leading: IconButton( onPressed: () { + FocusScope.of(context).unfocus(); Navigator.of(context).pop(false); }, icon: Icon( @@ -136,29 +142,46 @@ class _LockScreenOptionConfirmPinState ), const Padding(padding: EdgeInsets.all(12)), Padding( - padding: const EdgeInsets.fromLTRB(80, 0, 80, 0), - child: PinPut( - fieldsCount: 4, + padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), + child: Pinput( + length: 4, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, controller: _confirmPinController, focusNode: _focusNode, - submittedFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(20.0), + submittedPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), ), - selectedFieldDecoration: _pinPutDecoration, - followingFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(5.0), - border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + defaultPinTheme: _pinPutDecoration, + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), ), ), - inputDecoration: const InputDecoration( - focusedBorder: InputBorder.none, - border: InputBorder.none, - counterText: '', + errorPinTheme: _pinPutDecoration.copyWith( + textStyle: TextStyle(color: colorTheme.warning400), ), - textStyle: textTheme.h3, - obscureText: '*', - onSubmit: (value) { + errorText: '', + focusedPinTheme: _pinPutDecoration, + obscureText: true, + obscuringCharacter: '*', + validator: (value) { + if (value == widget.pin) { + return null; + } else { + return 'PIN does not match'; + } + }, + onSubmitted: (value) { + _confirmPinMatch(); FocusScope.of(context).unfocus(); }, ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index a1af2e87a0..abf3afbdbf 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -85,6 +85,7 @@ class _LockScreenOptionPasswordState extends State { elevation: 0, leading: IconButton( onPressed: () { + FocusScope.of(context).unfocus(); Navigator.of(context).pop(false); }, icon: Icon( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index b806b5dff7..a327b77ba2 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -2,7 +2,7 @@ import "package:flutter/material.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; -import "package:pinput/pin_put/pin_put.dart"; +import 'package:pinput/pinput.dart'; class LockScreenOptionPin extends StatefulWidget { const LockScreenOptionPin({ @@ -21,11 +21,6 @@ class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); final _focusNode = FocusNode(); - final _pinPutDecoration = BoxDecoration( - border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), - borderRadius: BorderRadius.circular(15.0), - ); - @override void initState() { super.initState(); @@ -66,6 +61,14 @@ class _LockScreenOptionPinState extends State { } } + final _pinPutDecoration = PinTheme( + height: 50, + width: 50, + decoration: BoxDecoration( + border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), + borderRadius: BorderRadius.circular(15.0), + ), + ); @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); @@ -75,6 +78,7 @@ class _LockScreenOptionPinState extends State { elevation: 0, leading: IconButton( onPressed: () { + FocusScope.of(context).unfocus(); Navigator.of(context).pop(false); }, icon: Icon( @@ -130,34 +134,52 @@ class _LockScreenOptionPinState extends State { style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), - Padding( - padding: const EdgeInsets.fromLTRB(80, 0, 80, 0), - child: PinPut( - focusNode: _focusNode, - fieldsCount: 4, - controller: _pinController, - submittedFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(20.0), - ), - selectedFieldDecoration: _pinPutDecoration, - followingFieldDecoration: _pinPutDecoration.copyWith( - borderRadius: BorderRadius.circular(5.0), - border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + Column( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), + child: Pinput( + length: 4, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + focusNode: _focusNode, + controller: _pinController, + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), + ), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: const Color.fromRGBO(45, 194, 98, 0.5), + ), + ), + ), + focusedPinTheme: _pinPutDecoration, + errorPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + border: Border.all( + color: colorTheme.warning400, + ), + ), + ), + autofocus: true, + errorText: '*', + obscureText: true, + obscuringCharacter: '*', + onCompleted: (value) { + FocusScope.of(context).unfocus(); + _confirmPin(_pinController.text); + }, ), ), - inputDecoration: const InputDecoration( - focusedBorder: InputBorder.none, - border: InputBorder.none, - counterText: '', - ), - textStyle: textTheme.h3, - obscureText: '*', - onSubmit: (value) { - FocusScope.of(context).unfocus(); - _confirmPin(_pinController.text); - }, - ), + ], ), ], ), diff --git a/mobile/lib/ui/settings/TEMP/password_input_widget.dart b/mobile/lib/ui/settings/TEMP/password_input_widget.dart new file mode 100644 index 0000000000..dc9e7a0f5e --- /dev/null +++ b/mobile/lib/ui/settings/TEMP/password_input_widget.dart @@ -0,0 +1,92 @@ +import "package:flutter/material.dart"; +import "package:flutter/services.dart"; +import "package:photos/models/execution_states.dart"; +import "package:photos/models/typedefs.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/utils/debouncer.dart"; + +class PasswordInputWidget extends StatefulWidget { + final String? label; + final String? message; + final String? hintText; + final IconData? prefixIcon; + final String? initialValue; + final Alignment? alignMessage; + final bool? autoFocus; + final int? maxLength; + final double borderRadius; + + final ValueNotifier? submitNotifier; + + final FutureVoidCallbackParamStr? onSubmit; + final VoidCallbackParamStr? onChange; + final bool isPasswordInput; + + final FocusNode? focusNode; + final TextEditingController? textEditingController; + final TextInputType? textInputType; + final List? textInputFormatter; + const PasswordInputWidget({ + Key? key, + this.label, + this.message, + this.hintText, + this.prefixIcon, + this.initialValue, + this.alignMessage, + this.autoFocus, + this.maxLength, + this.borderRadius = 10.0, + this.submitNotifier, + this.onSubmit, + this.onChange, + required this.isPasswordInput, + this.focusNode, + this.textEditingController, + this.textInputType, + this.textInputFormatter, + }) : super(key: key); + + @override + State createState() => _PasswordInputWidgetState(); +} + +class _PasswordInputWidgetState extends State { + ExecutionState executionState = ExecutionState.idle; + late final TextEditingController _textController; + final _debouncer = Debouncer(const Duration(milliseconds: 300)); + late final ValueNotifier _obscureTextNotifier; + + @override + void initState() { + super.initState(); + // widget.submitNotifier?.addListener(_onSubmit); + // widget.cancelNotifier?.addListener(_onCancel); + _textController = widget.textEditingController ?? TextEditingController(); + + // _setInitialValue(); + + if (widget.onChange != null) { + _textController.addListener(() { + widget.onChange!.call(_textController.text); + }); + } + _obscureTextNotifier = ValueNotifier(widget.isPasswordInput); + // _obscureTextNotifier.addListener(_safeRefresh); + + // if (widget.isEmptyNotifier != null) { + // _textController.addListener(() { + // widget.isEmptyNotifier!.value = _textController.text.isEmpty; + // }); + // } + } + + @override + Widget build(BuildContext context) { + final colorScheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + var textInputChildren = []; + + return const Placeholder(); + } +} diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 7d2b344b1c..7d1ad0d6fc 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -11,8 +11,8 @@ Future requestAuthentication(BuildContext context, String reason) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); final Configuration configuration = Configuration.instance; - final String? savedPin = await configuration.loadSavedPin(); - final String? savedPassword = await configuration.loadSavedPassword(); + final String? savedPin = await configuration.getPin(); + final String? savedPassword = await configuration.getPassword(); if (savedPassword != null || savedPin != null) { return await LocalAuthenticationService.instance .requestEnteAuthForLockScreen(context); diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index e2408583c4..f016369881 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1699,10 +1699,10 @@ packages: dependency: "direct main" description: name: pinput - sha256: "27eb69042f75755bdb6544f6e79a50a6ed09d6e97e2d75c8421744df1e392949" + sha256: "543da5bfdefd9e06914a12100f8c9156f84cef3efc14bca507c49e966c5b813b" url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "2.3.0" platform: dependency: transitive description: @@ -2020,6 +2020,14 @@ packages: description: flutter source: sdk version: "0.0.99" + smart_auth: + dependency: transitive + description: + name: smart_auth + sha256: a25229b38c02f733d0a4e98d941b42bed91a976cb589e934895e60ccfa674cf6 + url: "https://pub.dev" + source: hosted + version: "1.1.1" source_gen: dependency: transitive description: @@ -2304,10 +2312,10 @@ packages: dependency: transitive description: name: universal_platform - sha256: d315be0f6641898b280ffa34e2ddb14f3d12b1a37882557869646e0cc363d0cc + sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" url: "https://pub.dev" source: hosted - version: "1.0.0+1" + version: "1.1.0" uri_parser: dependency: transitive description: diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 273ff1fd9b..bd09e55a50 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -134,7 +134,7 @@ dependencies: permission_handler: ^11.0.1 photo_manager: ^3.0.0 photo_view: ^0.14.0 - pinput: ^1.2.2 + pinput: ^2.0.2 pointycastle: ^3.7.3 pool: ^1.5.1 protobuf: ^3.1.0 From a135f467751e8c64dc665be696018a6b4c012ab1 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 14 Jun 2024 11:48:15 +0530 Subject: [PATCH 017/466] [mob][photos] Added Haptic feedback to pin/password input --- .../ui/settings/TEMP/lock_screen_option.dart | 2 +- .../lock_screen_option_confirm_password.dart | 11 ++- .../TEMP/lock_screen_option_confirm_pin.dart | 23 +++-- .../TEMP/lock_screen_option_password.dart | 6 +- .../settings/TEMP/lock_screen_option_pin.dart | 27 ++++-- .../settings/TEMP/password_input_widget.dart | 92 ------------------- .../ui/settings/security_section_widget.dart | 20 ---- 7 files changed, 47 insertions(+), 134 deletions(-) delete mode 100644 mobile/lib/ui/settings/TEMP/password_input_widget.dart diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 8388ce17d3..154194b36c 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -90,8 +90,8 @@ class _LockScreenOptionState extends State { AppLock.of(context)!.setEnabled(!appLock!); await Configuration.instance.setShouldShowLockScreen(!appLock!); } + await _configuration.removePinAndPassword(); setState(() { - _configuration.removePinAndPassword(); isPasswordEnabled = _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); appLock = !appLock!; diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 819c369982..476eba19d2 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; @@ -25,6 +26,7 @@ class _LockScreenOptionConfirmPasswordState final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); + final _submitNotifier = ValueNotifier(false); @override void initState() { super.initState(); @@ -36,8 +38,9 @@ class _LockScreenOptionConfirmPasswordState @override void dispose() { - super.dispose(); + _submitNotifier.dispose(); _focusNode.dispose(); + super.dispose(); } Future _confirmPasswordMatch() async { @@ -46,7 +49,9 @@ class _LockScreenOptionConfirmPasswordState Navigator.of(context).pop(true); Navigator.of(context).pop(true); + return; } + await HapticFeedback.vibrate(); _confirmPasswordController.clear(); } @@ -140,16 +145,14 @@ class _LockScreenOptionConfirmPasswordState padding: const EdgeInsets.symmetric(horizontal: 16), child: TextInputWidget( hintText: S.of(context).confirmPassword, - borderRadius: 2, focusNode: _focusNode, - isClearable: true, textCapitalization: TextCapitalization.words, textEditingController: _confirmPasswordController, - prefixIcon: Icons.lock_outline, isPasswordInput: true, onChange: (p0) { _isFormValid.value = _confirmPasswordController.text.isNotEmpty; + _submitNotifier.value = !_submitNotifier.value; }, ), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 3f8b015f10..66fa8059a7 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; @@ -50,9 +51,9 @@ class _LockScreenOptionConfirmPinState Navigator.of(context).pop(true); Navigator.of(context).pop(true); return; - } else { - _confirmPinController.clear(); } + await HapticFeedback.vibrate(); + _confirmPinController.clear(); } @override @@ -149,28 +150,36 @@ class _LockScreenOptionConfirmPinState crossAxisAlignment: CrossAxisAlignment.center, controller: _confirmPinController, focusNode: _focusNode, + defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + color: colorTheme.fillBase, ), ), ), - defaultPinTheme: _pinPutDecoration, followingPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + color: colorTheme.fillMuted, ), ), ), + focusedPinTheme: _pinPutDecoration, errorPinTheme: _pinPutDecoration.copyWith( - textStyle: TextStyle(color: colorTheme.warning400), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), + border: Border.all( + color: colorTheme.fillBase, + ), + ), + textStyle: + textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), errorText: '', - focusedPinTheme: _pinPutDecoration, obscureText: true, obscuringCharacter: '*', validator: (value) { diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index abf3afbdbf..75811312b4 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; @@ -45,6 +46,8 @@ class _LockScreenOptionPasswordState extends State { Navigator.of(context).pop(true); return true; } + await HapticFeedback.vibrate(); + Navigator.of(context).pop(false); return false; } @@ -156,12 +159,9 @@ class _LockScreenOptionPasswordState extends State { padding: const EdgeInsets.symmetric(horizontal: 16), child: TextInputWidget( hintText: S.of(context).password, - borderRadius: 2, - isClearable: true, focusNode: _focusNode, textCapitalization: TextCapitalization.words, textEditingController: _passwordController, - prefixIcon: Icons.lock_outline, isPasswordInput: true, onChange: (p0) { _isFormValid.value = _passwordController.text.isNotEmpty; diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index a327b77ba2..950474d4fe 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; @@ -42,7 +43,7 @@ class _LockScreenOptionPinState extends State { Navigator.of(context).pop(true); return true; } - Navigator.of(context).pop(false); + await HapticFeedback.vibrate(); return false; } @@ -62,8 +63,8 @@ class _LockScreenOptionPinState extends State { } final _pinPutDecoration = PinTheme( - height: 50, - width: 50, + height: 48, + width: 48, decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -146,10 +147,11 @@ class _LockScreenOptionPinState extends State { controller: _pinController, defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + color: colorTheme.fillBase, ), ), ), @@ -157,20 +159,31 @@ class _LockScreenOptionPinState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), border: Border.all( - color: const Color.fromRGBO(45, 194, 98, 0.5), + color: colorTheme.fillMuted, ), ), ), focusedPinTheme: _pinPutDecoration, errorPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.0), border: Border.all( - color: colorTheme.warning400, + color: colorTheme.fillBase, ), ), + textStyle: textTheme.h3Bold + .copyWith(color: colorTheme.warning400), ), + validator: widget.isAuthenticating + ? (value) { + if (widget.authPin == value) { + return null; + } + return 'Invalid PIN'; + } + : null, autofocus: true, - errorText: '*', + errorText: '', obscureText: true, obscuringCharacter: '*', onCompleted: (value) { diff --git a/mobile/lib/ui/settings/TEMP/password_input_widget.dart b/mobile/lib/ui/settings/TEMP/password_input_widget.dart deleted file mode 100644 index dc9e7a0f5e..0000000000 --- a/mobile/lib/ui/settings/TEMP/password_input_widget.dart +++ /dev/null @@ -1,92 +0,0 @@ -import "package:flutter/material.dart"; -import "package:flutter/services.dart"; -import "package:photos/models/execution_states.dart"; -import "package:photos/models/typedefs.dart"; -import "package:photos/theme/ente_theme.dart"; -import "package:photos/utils/debouncer.dart"; - -class PasswordInputWidget extends StatefulWidget { - final String? label; - final String? message; - final String? hintText; - final IconData? prefixIcon; - final String? initialValue; - final Alignment? alignMessage; - final bool? autoFocus; - final int? maxLength; - final double borderRadius; - - final ValueNotifier? submitNotifier; - - final FutureVoidCallbackParamStr? onSubmit; - final VoidCallbackParamStr? onChange; - final bool isPasswordInput; - - final FocusNode? focusNode; - final TextEditingController? textEditingController; - final TextInputType? textInputType; - final List? textInputFormatter; - const PasswordInputWidget({ - Key? key, - this.label, - this.message, - this.hintText, - this.prefixIcon, - this.initialValue, - this.alignMessage, - this.autoFocus, - this.maxLength, - this.borderRadius = 10.0, - this.submitNotifier, - this.onSubmit, - this.onChange, - required this.isPasswordInput, - this.focusNode, - this.textEditingController, - this.textInputType, - this.textInputFormatter, - }) : super(key: key); - - @override - State createState() => _PasswordInputWidgetState(); -} - -class _PasswordInputWidgetState extends State { - ExecutionState executionState = ExecutionState.idle; - late final TextEditingController _textController; - final _debouncer = Debouncer(const Duration(milliseconds: 300)); - late final ValueNotifier _obscureTextNotifier; - - @override - void initState() { - super.initState(); - // widget.submitNotifier?.addListener(_onSubmit); - // widget.cancelNotifier?.addListener(_onCancel); - _textController = widget.textEditingController ?? TextEditingController(); - - // _setInitialValue(); - - if (widget.onChange != null) { - _textController.addListener(() { - widget.onChange!.call(_textController.text); - }); - } - _obscureTextNotifier = ValueNotifier(widget.isPasswordInput); - // _obscureTextNotifier.addListener(_safeRefresh); - - // if (widget.isEmptyNotifier != null) { - // _textController.addListener(() { - // widget.isEmptyNotifier!.value = _textController.text.isEmpty; - // }); - // } - } - - @override - Widget build(BuildContext context) { - final colorScheme = getEnteColorScheme(context); - final textTheme = getEnteTextTheme(context); - var textInputChildren = []; - - return const Placeholder(); - } -} diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 3ddea3e47d..bce32312cd 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -150,7 +150,6 @@ class _SecuritySectionWidgetState extends State { context, S.of(context).authToChangeLockscreenSetting, ); - if (result) { await Navigator.of(context).push( MaterialPageRoute( @@ -162,25 +161,6 @@ class _SecuritySectionWidgetState extends State { } }, ), - // MenuItemWidget( - // captionedTextWidget: const CaptionedTextWidget( - // title: 'App lock', - // ), - // trailingWidget: ToggleSwitchWidget( - // value: () => _config.shouldShowLockScreen(), - // onChanged: () async { - // await LocalAuthenticationService.instance - // .requestLocalAuthForLockScreen( - // context, - // !_config.shouldShowLockScreen(), - // S.of(context).authToChangeLockscreenSetting, - // S.of(context).lockScreenEnablePreSteps, - // ); - - // ///try here also once about the material page route - // }, - // ), - // ), sectionOptionSpacing, MenuItemWidget( captionedTextWidget: CaptionedTextWidget( From b63bd89512449a6342bb02044120d2e668f13bff Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 14 Jun 2024 15:28:53 +0530 Subject: [PATCH 018/466] [mob][photos] Show password wrong state in TextInputField --- .../lib/ui/components/text_input_widget.dart | 28 +++++++++++++++++-- .../lock_screen_option_confirm_password.dart | 11 ++++---- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index 8edb66ab8f..132af62606 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -7,6 +7,8 @@ import 'package:photos/ui/common/loading_widget.dart'; import 'package:photos/utils/debouncer.dart'; import 'package:photos/utils/separators_util.dart'; +///To show wrong password state, throw an exception with the message +///"Incorrect password" in onSubmit. class TextInputWidget extends StatefulWidget { final String? label; final String? message; @@ -19,7 +21,7 @@ class TextInputWidget extends StatefulWidget { final double borderRadius; ///TextInputWidget will listen to this notifier and executes onSubmit when - ///notified. + ///notified. Value of this notifier is irrelevant. final ValueNotifier? submitNotifier; ///TextInputWidget will listen to this notifier and clears and unfocuses the @@ -87,6 +89,7 @@ class _TextInputWidgetState extends State { ///This is to pass if the TextInputWidget is in a dialog and an error is ///thrown in executing onSubmit by passing it as arg in Navigator.pop() Exception? _exception; + bool _incorrectPassword = false; @override void initState() { @@ -168,7 +171,11 @@ class _TextInputWidgetState extends State { borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: colorScheme.strokeFaint), + borderSide: BorderSide( + color: _incorrectPassword + ? const Color.fromRGBO(245, 42, 42, 1) + : colorScheme.strokeFaint, + ), borderRadius: BorderRadius.circular(8), ), suffixIcon: Padding( @@ -263,6 +270,9 @@ class _TextInputWidgetState extends State { executionState = ExecutionState.error; _debouncer.cancelDebounce(); _exception = e as Exception; + if (e.toString().contains("Incorrect password")) { + _surfaceWrongPasswordState(); + } if (!widget.popNavAfterSubmission) { rethrow; } @@ -381,6 +391,20 @@ class _TextInputWidgetState extends State { return formattedValue; } + + void _surfaceWrongPasswordState() { + setState(() { + _incorrectPassword = true; + HapticFeedback.vibrate(); + Future.delayed(const Duration(seconds: 1), () { + if (mounted) { + setState(() { + _incorrectPassword = false; + }); + } + }); + }); + } } //todo: Add clear and custom icon for suffic icon diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 476eba19d2..9dc51e0746 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -51,8 +51,7 @@ class _LockScreenOptionConfirmPasswordState Navigator.of(context).pop(true); return; } - await HapticFeedback.vibrate(); - _confirmPasswordController.clear(); + throw Exception("Incorrect password"); } @override @@ -92,8 +91,7 @@ class _LockScreenOptionConfirmPasswordState buttonText: S.of(context).confirm, isFormValid: isFormValid, onPressedFunction: () async { - await _confirmPasswordMatch(); - FocusScope.of(context).unfocus(); + _submitNotifier.value = !_submitNotifier.value; }, ); }, @@ -152,8 +150,11 @@ class _LockScreenOptionConfirmPasswordState onChange: (p0) { _isFormValid.value = _confirmPasswordController.text.isNotEmpty; - _submitNotifier.value = !_submitNotifier.value; }, + onSubmit: (p0) { + return _confirmPasswordMatch(); + }, + submitNotifier: _submitNotifier, ), ), ], From c6d9b7d8751a8e6a3b07782af0c3cccc02b5b683 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 14 Jun 2024 15:31:05 +0530 Subject: [PATCH 019/466] [mob][photos] Log from TextInputWidge when password is wrong --- mobile/lib/ui/components/text_input_widget.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index 132af62606..32ce462238 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import "package:logging/logging.dart"; import 'package:photos/models/execution_states.dart'; import 'package:photos/models/typedefs.dart'; import 'package:photos/theme/ente_theme.dart'; @@ -81,6 +82,7 @@ class TextInputWidget extends StatefulWidget { } class _TextInputWidgetState extends State { + final _logger = Logger("TextInputWidget"); ExecutionState executionState = ExecutionState.idle; late final TextEditingController _textController; final _debouncer = Debouncer(const Duration(milliseconds: 300)); @@ -271,6 +273,7 @@ class _TextInputWidgetState extends State { _debouncer.cancelDebounce(); _exception = e as Exception; if (e.toString().contains("Incorrect password")) { + _logger.warning("Incorrect password"); _surfaceWrongPasswordState(); } if (!widget.popNavAfterSubmission) { From 89e7cfb35718d89f83c21b4824f0baf8f8422bdb Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Sat, 15 Jun 2024 15:17:28 +0530 Subject: [PATCH 020/466] [mob][photos] Add Animation to the lock icon & errorBorder on wrong password --- .../two_factor_authentication_page.dart | 8 ++--- .../lib/ui/account/two_factor_setup_page.dart | 8 ++--- .../lock_screen_option_confirm_password.dart | 7 ++-- .../TEMP/lock_screen_option_confirm_pin.dart | 29 ++++++++++------ .../TEMP/lock_screen_option_password.dart | 23 +++++++------ .../settings/TEMP/lock_screen_option_pin.dart | 34 ++++++++++++------- 6 files changed, 66 insertions(+), 43 deletions(-) diff --git a/mobile/lib/ui/account/two_factor_authentication_page.dart b/mobile/lib/ui/account/two_factor_authentication_page.dart index 0a45c2c0fc..530db1ddad 100644 --- a/mobile/lib/ui/account/two_factor_authentication_page.dart +++ b/mobile/lib/ui/account/two_factor_authentication_page.dart @@ -22,8 +22,8 @@ class _TwoFactorAuthenticationPageState final _pinController = TextEditingController(); final _pinPutDecoration = PinTheme( - height: 48, - width: 48, + height: 45, + width: 45, decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -106,7 +106,7 @@ class _TwoFactorAuthenticationPageState ), followingPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: const Color.fromRGBO(45, 194, 98, 0.5), ), @@ -114,7 +114,7 @@ class _TwoFactorAuthenticationPageState ), focusedPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20.0), + borderRadius: BorderRadius.circular(15.0), border: Border.all( color: const Color.fromRGBO(45, 194, 98, 0.5), ), diff --git a/mobile/lib/ui/account/two_factor_setup_page.dart b/mobile/lib/ui/account/two_factor_setup_page.dart index b146898433..ac8c8eba0a 100644 --- a/mobile/lib/ui/account/two_factor_setup_page.dart +++ b/mobile/lib/ui/account/two_factor_setup_page.dart @@ -34,8 +34,8 @@ class _TwoFactorSetupPageState extends State late TabController _tabController; final _pinController = TextEditingController(); final _pinPutDecoration = PinTheme( - height: 48, - width: 48, + height: 45, + width: 45, decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -235,7 +235,7 @@ class _TwoFactorSetupPageState extends State controller: _pinController, submittedPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: const Color.fromRGBO(45, 194, 98, 0.5), ), @@ -244,7 +244,7 @@ class _TwoFactorSetupPageState extends State defaultPinTheme: _pinPutDecoration, followingPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: const Color.fromRGBO(45, 194, 98, 0.5), ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 9dc51e0746..6bc2fdd6c0 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -31,7 +31,7 @@ class _LockScreenOptionConfirmPasswordState void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -51,6 +51,7 @@ class _LockScreenOptionConfirmPasswordState Navigator.of(context).pop(true); return; } + _confirmPasswordController.clear(); throw Exception("Incorrect password"); } @@ -126,7 +127,7 @@ class _LockScreenOptionConfirmPasswordState alignment: Alignment.center, child: IconButtonWidget( size: 30, - icon: Icons.lock_outline, + icon: Icons.lock, iconButtonType: IconButtonType.primary, iconColor: colorTheme.tabIcon, ), @@ -144,7 +145,7 @@ class _LockScreenOptionConfirmPasswordState child: TextInputWidget( hintText: S.of(context).confirmPassword, focusNode: _focusNode, - textCapitalization: TextCapitalization.words, + textCapitalization: TextCapitalization.none, textEditingController: _confirmPasswordController, isPasswordInput: true, onChange: (p0) { diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 66fa8059a7..dbb6dca217 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -32,7 +32,7 @@ class _LockScreenOptionConfirmPinState void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -115,11 +115,20 @@ class _LockScreenOptionConfirmPinState child: ValueListenableBuilder( valueListenable: _confirmPinController, builder: (context, value, child) { - return CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: _confirmPinController.text.length / 4, - color: colorTheme.primary400, - strokeWidth: 1.5, + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _confirmPinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), ); }, ), @@ -129,7 +138,7 @@ class _LockScreenOptionConfirmPinState alignment: Alignment.center, child: IconButtonWidget( size: 30, - icon: Icons.lock_outline, + icon: Icons.lock, iconButtonType: IconButtonType.primary, iconColor: colorTheme.tabIcon, ), @@ -154,7 +163,7 @@ class _LockScreenOptionConfirmPinState submittedPinTheme: _pinPutDecoration.copyWith( textStyle: textTheme.h3Bold, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillBase, ), @@ -162,7 +171,7 @@ class _LockScreenOptionConfirmPinState ), followingPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillMuted, ), @@ -171,7 +180,7 @@ class _LockScreenOptionConfirmPinState focusedPinTheme: _pinPutDecoration, errorPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillBase, ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 75811312b4..1a7b0a0dc3 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -24,12 +24,12 @@ class _LockScreenOptionPasswordState extends State { final _passwordController = TextEditingController(text: null); final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); - + final _submitNotifier = ValueNotifier(false); @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -37,6 +37,7 @@ class _LockScreenOptionPasswordState extends State { @override void dispose() { super.dispose(); + _submitNotifier.dispose(); _focusNode.dispose(); _isFormValid.dispose(); } @@ -45,11 +46,10 @@ class _LockScreenOptionPasswordState extends State { if (widget.authPass == code) { Navigator.of(context).pop(true); return true; + } else { + await HapticFeedback.vibrate(); + throw Exception("Incorrect password"); } - await HapticFeedback.vibrate(); - - Navigator.of(context).pop(false); - return false; } Future _confirmPassword() async { @@ -105,8 +105,7 @@ class _LockScreenOptionPasswordState extends State { buttonText: S.of(context).ok, isFormValid: isFormValid, onPressedFunction: () async { - await _confirmPassword(); - FocusScope.of(context).unfocus(); + _submitNotifier.value = !_submitNotifier.value; }, ); }, @@ -141,7 +140,7 @@ class _LockScreenOptionPasswordState extends State { alignment: Alignment.center, child: IconButtonWidget( size: 30, - icon: Icons.lock_outline, + icon: Icons.lock, iconButtonType: IconButtonType.primary, iconColor: colorTheme.tabIcon, ), @@ -160,12 +159,16 @@ class _LockScreenOptionPasswordState extends State { child: TextInputWidget( hintText: S.of(context).password, focusNode: _focusNode, - textCapitalization: TextCapitalization.words, + textCapitalization: TextCapitalization.none, textEditingController: _passwordController, isPasswordInput: true, onChange: (p0) { _isFormValid.value = _passwordController.text.isNotEmpty; }, + onSubmit: (p0) { + return _confirmPassword(); + }, + submitNotifier: _submitNotifier, ), ), ], diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 950474d4fe..9d653608c5 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -26,7 +26,7 @@ class _LockScreenOptionPinState extends State { void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -108,11 +108,20 @@ class _LockScreenOptionPinState extends State { child: ValueListenableBuilder( valueListenable: _pinController, builder: (context, value, child) { - return CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: _pinController.text.length / 4, - color: colorTheme.primary400, - strokeWidth: 1.5, + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _pinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), ); }, ), @@ -122,7 +131,7 @@ class _LockScreenOptionPinState extends State { alignment: Alignment.center, child: IconButtonWidget( size: 30, - icon: Icons.lock_outline, + icon: Icons.lock, iconButtonType: IconButtonType.primary, iconColor: colorTheme.tabIcon, ), @@ -149,7 +158,7 @@ class _LockScreenOptionPinState extends State { submittedPinTheme: _pinPutDecoration.copyWith( textStyle: textTheme.h3Bold, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillBase, ), @@ -157,7 +166,7 @@ class _LockScreenOptionPinState extends State { ), followingPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillMuted, ), @@ -166,7 +175,7 @@ class _LockScreenOptionPinState extends State { focusedPinTheme: _pinPutDecoration, errorPinTheme: _pinPutDecoration.copyWith( decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5.0), + borderRadius: BorderRadius.circular(10.0), border: Border.all( color: colorTheme.fillBase, ), @@ -186,9 +195,10 @@ class _LockScreenOptionPinState extends State { errorText: '', obscureText: true, obscuringCharacter: '*', - onCompleted: (value) { + onCompleted: (value) async { FocusScope.of(context).unfocus(); - _confirmPin(_pinController.text); + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPin(_pinController.text); }, ), ), From aeb3e2be24c359bf018675f41dd197078c5862cc Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 18 Jun 2024 13:37:32 +0530 Subject: [PATCH 021/466] [mob][photos] implemeted custom keyboard --- .../lib/ui/components/text_input_widget.dart | 4 +- .../ui/settings/TEMP/lock_screen_option.dart | 14 +- .../lock_screen_option_confirm_password.dart | 4 +- .../TEMP/lock_screen_option_confirm_pin.dart | 246 +++++++++++++++--- .../TEMP/lock_screen_option_password.dart | 2 +- .../settings/TEMP/lock_screen_option_pin.dart | 218 +++++++++++++++- .../ui/settings/security_section_widget.dart | 2 + 7 files changed, 435 insertions(+), 55 deletions(-) diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index 32ce462238..ca548595d8 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -46,6 +46,7 @@ class TextInputWidget extends StatefulWidget { final ValueNotifier? isEmptyNotifier; final List? textInputFormatter; final TextInputType? textInputType; + final bool? fillColor; const TextInputWidget({ this.onSubmit, this.onChange, @@ -74,6 +75,7 @@ class TextInputWidget extends StatefulWidget { this.isEmptyNotifier, this.textInputFormatter, this.textInputType, + this.fillColor = true, super.key, }); @@ -161,7 +163,7 @@ class _TextInputWidgetState extends State { decoration: InputDecoration( hintText: widget.hintText, hintStyle: textTheme.body.copyWith(color: colorScheme.textMuted), - filled: true, + filled: widget.fillColor, fillColor: colorScheme.fillFaint, contentPadding: const EdgeInsets.fromLTRB( 12, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 154194b36c..805f1207b6 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -141,10 +141,16 @@ class _LockScreenOptionState extends State { ), appLock! ? Container() - : Text( - 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', - style: textTheme.smallFaint, - textAlign: TextAlign.center, + : Padding( + padding: const EdgeInsets.only( + left: 14, + right: 12, + ), + child: Text( + 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', + style: textTheme.miniFaint, + textAlign: TextAlign.left, + ), ), ], ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 6bc2fdd6c0..622700064c 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -31,7 +31,6 @@ class _LockScreenOptionConfirmPasswordState void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -51,7 +50,7 @@ class _LockScreenOptionConfirmPasswordState Navigator.of(context).pop(true); return; } - _confirmPasswordController.clear(); + await HapticFeedback.vibrate(); throw Exception("Incorrect password"); } @@ -145,6 +144,7 @@ class _LockScreenOptionConfirmPasswordState child: TextInputWidget( hintText: S.of(context).confirmPassword, focusNode: _focusNode, + fillColor: false, textCapitalization: TextCapitalization.none, textEditingController: _confirmPasswordController, isPasswordInput: true, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index dbb6dca217..80fefe4c41 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -1,9 +1,7 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; import "package:photos/core/configuration.dart"; -import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; -import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:pinput/pinput.dart"; @@ -19,10 +17,10 @@ class _LockScreenOptionConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; - final _focusNode = FocusNode(); + Key _pinputKey = UniqueKey(); final _pinPutDecoration = PinTheme( - height: 50, - width: 50, + height: 48, + width: 48, decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -31,19 +29,29 @@ class _LockScreenOptionConfirmPinState @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(milliseconds: 500)); - _focusNode.requestFocus(); - }); } @override void dispose() { super.dispose(); - _focusNode.dispose(); _confirmPinController.dispose(); } + String _pin = ""; + + void onClick(String number) { + _pin += number; + _confirmPinController.text = _pin; + } + + void removeNum() { + if (_pin.isNotEmpty) { + _pin = _pin.substring(0, _pin.length - 1); + _confirmPinController.text = _pin; + } + return; + } + Future _confirmPinMatch() async { if (widget.pin == _confirmPinController.text) { await _configuration.setPin(_confirmPinController.text); @@ -54,29 +62,20 @@ class _LockScreenOptionConfirmPinState } await HapticFeedback.vibrate(); _confirmPinController.clear(); + _pin = ""; + _pinputKey = UniqueKey(); } @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); - final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; - - FloatingActionButtonLocation? fabLocation() { - if (isKeypadOpen) { - return null; - } else { - return FloatingActionButtonLocation.centerFloat; - } - } return Scaffold( - resizeToAvoidBottomInset: isKeypadOpen, appBar: AppBar( elevation: 0, leading: IconButton( onPressed: () { - FocusScope.of(context).unfocus(); Navigator.of(context).pop(false); }, icon: Icon( @@ -85,17 +84,6 @@ class _LockScreenOptionConfirmPinState ), ), ), - floatingActionButton: DynamicFAB( - isKeypadOpen: isKeypadOpen, - buttonText: S.of(context).confirm, - isFormValid: _confirmPinController.text.isNotEmpty, - onPressedFunction: () async { - await _confirmPinMatch(); - FocusScope.of(context).unfocus(); - }, - ), - floatingActionButtonLocation: fabLocation(), - floatingActionButtonAnimator: NoScalingAnimation(), body: Center( child: Column( children: [ @@ -154,11 +142,12 @@ class _LockScreenOptionConfirmPinState Padding( padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), child: Pinput( + key: _pinputKey, length: 4, + useNativeKeyboard: false, mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, controller: _confirmPinController, - focusNode: _focusNode, defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( textStyle: textTheme.h3Bold, @@ -195,18 +184,203 @@ class _LockScreenOptionConfirmPinState if (value == widget.pin) { return null; } else { + value = null; return 'PIN does not match'; } }, - onSubmitted: (value) { - _confirmPinMatch(); - FocusScope.of(context).unfocus(); + onCompleted: (value) async { + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPinMatch(); }, ), ), + const Spacer(), + Container( + padding: const EdgeInsets.all(2), + color: colorTheme.strokeFainter, + child: Column( + children: [ + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: '', + number: '1', + onTap: () { + onClick('1'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "ABC", + number: '2', + onTap: () { + onClick('2'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "DEF", + number: '3', + onTap: () { + onClick('3'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '4', + text: "GHI", + onTap: () { + onClick('4'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '5', + text: 'JKL', + onTap: () { + onClick('5'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '6', + text: 'MNO', + onTap: () { + onClick('6'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '7', + text: 'PQRS', + onTap: () { + onClick('7'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '8', + text: 'TUV', + onTap: () { + onClick('8'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '9', + text: 'WXYZ', + onTap: () { + onClick('9'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + muteButton: true, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '0', + text: '', + onTap: () { + onClick('0'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + icons: const Icon(Icons.backspace_outlined), + onTap: () { + removeNum(); + }, + ), + ], + ), + ], + ), + ), ], ), ), ); } + + Widget buttonWidget({ + colorTheme, + textTheme, + text, + number, + muteButton = false, + icons, + onTap, + }) { + return Expanded( + child: GestureDetector( + onTap: onTap, + child: Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(6), + color: muteButton + ? colorTheme.fillFaintPressed + : icons == null + ? colorTheme.backgroundElevated2 + : null, + ), + child: Center( + child: muteButton + ? Container() + : icons != null + ? Container( + child: icons, + ) + : Container( + padding: const EdgeInsets.all(4), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + number, + style: textTheme.h3, + ), + Text( + text, + style: textTheme.small, + ), + ], + ), + ), + ), + ), + ), + ); + } } diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 1a7b0a0dc3..1447189e1c 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -29,7 +29,6 @@ class _LockScreenOptionPasswordState extends State { void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(milliseconds: 500)); _focusNode.requestFocus(); }); } @@ -159,6 +158,7 @@ class _LockScreenOptionPasswordState extends State { child: TextInputWidget( hintText: S.of(context).password, focusNode: _focusNode, + fillColor: false, textCapitalization: TextCapitalization.none, textEditingController: _passwordController, isPasswordInput: true, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 9d653608c5..7e204383b3 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -20,22 +20,31 @@ class LockScreenOptionPin extends StatefulWidget { class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); - final _focusNode = FocusNode(); - + Key _pinputKey = UniqueKey(); @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await Future.delayed(const Duration(milliseconds: 500)); - _focusNode.requestFocus(); - }); } @override void dispose() { super.dispose(); _pinController.dispose(); - _focusNode.dispose(); + } + + String _pin = ""; + + void onClick(String number) { + _pin += number; + _pinController.text = _pin; + } + + void removeNum() { + if (_pin.isNotEmpty) { + _pin = _pin.substring(0, _pin.length - 1); + _pinController.text = _pin; + } + return; } Future confirmPinAuth(String code) async { @@ -43,6 +52,9 @@ class _LockScreenOptionPinState extends State { Navigator.of(context).pop(true); return true; } + _pinController.clear(); + _pin = ""; + _pinputKey = UniqueKey(); await HapticFeedback.vibrate(); return false; } @@ -59,6 +71,7 @@ class _LockScreenOptionPinState extends State { ), ); _pinController.clear(); + _pin = ""; } } @@ -70,6 +83,7 @@ class _LockScreenOptionPinState extends State { borderRadius: BorderRadius.circular(15.0), ), ); + @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); @@ -79,7 +93,6 @@ class _LockScreenOptionPinState extends State { elevation: 0, leading: IconButton( onPressed: () { - FocusScope.of(context).unfocus(); Navigator.of(context).pop(false); }, icon: Icon( @@ -149,10 +162,11 @@ class _LockScreenOptionPinState extends State { Padding( padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), child: Pinput( + key: _pinputKey, length: 4, mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, - focusNode: _focusNode, + useNativeKeyboard: false, controller: _pinController, defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( @@ -191,12 +205,10 @@ class _LockScreenOptionPinState extends State { return 'Invalid PIN'; } : null, - autofocus: true, errorText: '', obscureText: true, obscuringCharacter: '*', onCompleted: (value) async { - FocusScope.of(context).unfocus(); await Future.delayed(const Duration(milliseconds: 250)); await _confirmPin(_pinController.text); }, @@ -204,9 +216,193 @@ class _LockScreenOptionPinState extends State { ), ], ), + const Spacer(), + Container( + padding: const EdgeInsets.all(2), + color: colorTheme.strokeFainter, + child: Column( + children: [ + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: '', + number: '1', + onTap: () { + onClick('1'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "ABC", + number: '2', + onTap: () { + onClick('2'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "DEF", + number: '3', + onTap: () { + onClick('3'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '4', + text: "GHI", + onTap: () { + onClick('4'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '5', + text: 'JKL', + onTap: () { + onClick('5'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '6', + text: 'MNO', + onTap: () { + onClick('6'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '7', + text: 'PQRS', + onTap: () { + onClick('7'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '8', + text: 'TUV', + onTap: () { + onClick('8'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '9', + text: 'WXYZ', + onTap: () { + onClick('9'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + muteButton: true, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '0', + text: '', + onTap: () { + onClick('0'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + icons: const Icon(Icons.backspace_outlined), + onTap: () { + removeNum(); + }, + ), + ], + ), + ], + ), + ), ], ), ), ); } + + Widget buttonWidget({ + colorTheme, + textTheme, + text, + number, + muteButton = false, + icons, + onTap, + }) { + return Expanded( + child: GestureDetector( + onTap: onTap, + child: Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(6), + color: muteButton + ? colorTheme.fillFaintPressed + : icons == null + ? colorTheme.backgroundElevated2 + : null, + ), + child: Center( + child: muteButton + ? Container() + : icons != null + ? Container( + child: icons, + ) + : Container( + padding: const EdgeInsets.all(4), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + number, + style: textTheme.h3, + ), + Text( + text, + style: textTheme.small, + ), + ], + ), + ), + ), + ), + ), + ); + } } diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 67f281f435..478f1b2df9 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -143,6 +143,8 @@ class _SecuritySectionWidgetState extends State { captionedTextWidget: const CaptionedTextWidget( title: 'App lock', ), + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, onTap: () async { final bool result = await requestAuthentication( context, From 1d9f4e27c7d43463432f001dced95177eff5b39d Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 18 Jun 2024 18:59:01 +0530 Subject: [PATCH 022/466] [mob][photos] changes to the Pinput container --- .../local_authentication_service.dart | 11 +- .../lib/ui/components/text_input_widget.dart | 6 +- .../ui/settings/TEMP/lock_screen_option.dart | 20 +- .../lock_screen_option_confirm_password.dart | 6 +- .../TEMP/lock_screen_option_confirm_pin.dart | 133 +++--- .../TEMP/lock_screen_option_password.dart | 4 +- .../settings/TEMP/lock_screen_option_pin.dart | 384 +++++++++--------- mobile/lib/utils/auth_util.dart | 2 +- 8 files changed, 267 insertions(+), 299 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index c057724ff1..badf20775f 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -15,8 +15,6 @@ class LocalAuthenticationService { static final LocalAuthenticationService instance = LocalAuthenticationService._privateConstructor(); - final Configuration _configuration = Configuration.instance; - Future requestLocalAuthentication( BuildContext context, String infoMessage, @@ -37,10 +35,11 @@ class LocalAuthenticationService { return true; } - Future requestEnteAuthForLockScreen(BuildContext context) async { - final String? savedPin = await _configuration.getPin(); - final String? savedPassword = await _configuration.getPassword(); - + Future requestEnteAuthForLockScreen( + BuildContext context, + String? savedPin, + String? savedPassword, + ) async { if (savedPassword != null) { final result = await Navigator.of(context).push( MaterialPageRoute( diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index ca548595d8..48ef8c2325 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -46,7 +46,7 @@ class TextInputWidget extends StatefulWidget { final ValueNotifier? isEmptyNotifier; final List? textInputFormatter; final TextInputType? textInputType; - final bool? fillColor; + final bool? enableFillColor; const TextInputWidget({ this.onSubmit, this.onChange, @@ -75,7 +75,7 @@ class TextInputWidget extends StatefulWidget { this.isEmptyNotifier, this.textInputFormatter, this.textInputType, - this.fillColor = true, + this.enableFillColor = true, super.key, }); @@ -163,7 +163,7 @@ class _TextInputWidgetState extends State { decoration: InputDecoration( hintText: widget.hintText, hintStyle: textTheme.body.copyWith(color: colorScheme.textMuted), - filled: widget.fillColor, + filled: widget.enableFillColor, fillColor: colorScheme.fillFaint, contentPadding: const EdgeInsets.fromLTRB( 12, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 805f1207b6..9007266ff4 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -20,18 +20,18 @@ class LockScreenOption extends StatefulWidget { class _LockScreenOptionState extends State { final Configuration _configuration = Configuration.instance; - bool? appLock; + late bool appLock; bool isPinEnabled = false; bool isPasswordEnabled = false; @override void initState() { + super.initState(); isPasswordEnabled = _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); appLock = isPinEnabled || isPasswordEnabled || _configuration.shouldShowLockScreen(); - super.initState(); } Future _deviceLock() async { @@ -84,17 +84,17 @@ class _LockScreenOptionState extends State { Future _onToggleSwitch() async { if (appLock == false && !(isPasswordEnabled || isPinEnabled)) { - AppLock.of(context)!.setEnabled(!appLock!); - await Configuration.instance.setShouldShowLockScreen(!appLock!); + AppLock.of(context)!.setEnabled(!appLock); + await Configuration.instance.setShouldShowLockScreen(!appLock); } else { - AppLock.of(context)!.setEnabled(!appLock!); - await Configuration.instance.setShouldShowLockScreen(!appLock!); + AppLock.of(context)!.setEnabled(!appLock); + await Configuration.instance.setShouldShowLockScreen(!appLock); } await _configuration.removePinAndPassword(); setState(() { isPasswordEnabled = _configuration.isPasswordSet(); isPinEnabled = _configuration.isPinSet(); - appLock = !appLock!; + appLock = !appLock; }); } @@ -132,14 +132,14 @@ class _LockScreenOptionState extends State { isBottomBorderRadiusRemoved: false, menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( - value: () => appLock!, + value: () => appLock, onChanged: () => _onToggleSwitch(), ), ), const Padding( padding: EdgeInsets.only(top: 16), ), - appLock! + appLock ? Container() : Padding( padding: const EdgeInsets.only( @@ -154,7 +154,7 @@ class _LockScreenOptionState extends State { ), ], ), - appLock! + appLock ? Column( children: [ const SizedBox( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 622700064c..e86b362c8d 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -25,7 +25,6 @@ class _LockScreenOptionConfirmPasswordState final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); - final _submitNotifier = ValueNotifier(false); @override void initState() { @@ -39,6 +38,7 @@ class _LockScreenOptionConfirmPasswordState void dispose() { _submitNotifier.dispose(); _focusNode.dispose(); + _isFormValid.dispose(); super.dispose(); } @@ -58,7 +58,7 @@ class _LockScreenOptionConfirmPasswordState Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); - final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; + final isKeypadOpen = MediaQuery.viewInsetsOf(context).bottom > 100; FloatingActionButtonLocation? fabLocation() { if (isKeypadOpen) { @@ -144,7 +144,7 @@ class _LockScreenOptionConfirmPasswordState child: TextInputWidget( hintText: S.of(context).confirmPassword, focusNode: _focusNode, - fillColor: false, + enableFillColor: false, textCapitalization: TextCapitalization.none, textEditingController: _confirmPasswordController, isPasswordInput: true, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 80fefe4c41..2a24ffbe07 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -17,7 +17,6 @@ class _LockScreenOptionConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; - Key _pinputKey = UniqueKey(); final _pinPutDecoration = PinTheme( height: 48, width: 48, @@ -26,10 +25,6 @@ class _LockScreenOptionConfirmPinState borderRadius: BorderRadius.circular(15.0), ), ); - @override - void initState() { - super.initState(); - } @override void dispose() { @@ -37,17 +32,15 @@ class _LockScreenOptionConfirmPinState _confirmPinController.dispose(); } - String _pin = ""; - - void onClick(String number) { - _pin += number; - _confirmPinController.text = _pin; + void _onKeyTap(String number) { + _confirmPinController.text += number; + return; } - void removeNum() { - if (_pin.isNotEmpty) { - _pin = _pin.substring(0, _pin.length - 1); - _confirmPinController.text = _pin; + void _onBackspace() { + if (_confirmPinController.text.isNotEmpty) { + _confirmPinController.text = _confirmPinController.text + .substring(0, _confirmPinController.text.length - 1); } return; } @@ -62,8 +55,6 @@ class _LockScreenOptionConfirmPinState } await HapticFeedback.vibrate(); _confirmPinController.clear(); - _pin = ""; - _pinputKey = UniqueKey(); } @override @@ -139,60 +130,54 @@ class _LockScreenOptionConfirmPinState style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), - Padding( - padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), - child: Pinput( - key: _pinputKey, - length: 4, - useNativeKeyboard: false, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - controller: _confirmPinController, - defaultPinTheme: _pinPutDecoration, - submittedPinTheme: _pinPutDecoration.copyWith( - textStyle: textTheme.h3Bold, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + Pinput( + length: 4, + useNativeKeyboard: false, + controller: _confirmPinController, + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), ), - followingPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillMuted, - ), + ), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillMuted, ), ), - focusedPinTheme: _pinPutDecoration, - errorPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + ), + focusedPinTheme: _pinPutDecoration, + errorPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), - textStyle: - textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - errorText: '', - obscureText: true, - obscuringCharacter: '*', - validator: (value) { - if (value == widget.pin) { - return null; - } else { - value = null; - return 'PIN does not match'; - } - }, - onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); - await _confirmPinMatch(); - }, + textStyle: + textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), + errorText: '', + obscureText: true, + obscuringCharacter: '*', + validator: (value) { + if (value == widget.pin) { + return null; + } else { + value = null; + return 'PIN does not match'; + } + }, + onCompleted: (value) async { + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPinMatch(); + }, ), const Spacer(), Container( @@ -208,7 +193,7 @@ class _LockScreenOptionConfirmPinState text: '', number: '1', onTap: () { - onClick('1'); + _onKeyTap('1'); }, ), buttonWidget( @@ -217,7 +202,7 @@ class _LockScreenOptionConfirmPinState text: "ABC", number: '2', onTap: () { - onClick('2'); + _onKeyTap('2'); }, ), buttonWidget( @@ -226,7 +211,7 @@ class _LockScreenOptionConfirmPinState text: "DEF", number: '3', onTap: () { - onClick('3'); + _onKeyTap('3'); }, ), ], @@ -239,7 +224,7 @@ class _LockScreenOptionConfirmPinState number: '4', text: "GHI", onTap: () { - onClick('4'); + _onKeyTap('4'); }, ), buttonWidget( @@ -248,7 +233,7 @@ class _LockScreenOptionConfirmPinState number: '5', text: 'JKL', onTap: () { - onClick('5'); + _onKeyTap('5'); }, ), buttonWidget( @@ -257,7 +242,7 @@ class _LockScreenOptionConfirmPinState number: '6', text: 'MNO', onTap: () { - onClick('6'); + _onKeyTap('6'); }, ), ], @@ -270,7 +255,7 @@ class _LockScreenOptionConfirmPinState number: '7', text: 'PQRS', onTap: () { - onClick('7'); + _onKeyTap('7'); }, ), buttonWidget( @@ -279,7 +264,7 @@ class _LockScreenOptionConfirmPinState number: '8', text: 'TUV', onTap: () { - onClick('8'); + _onKeyTap('8'); }, ), buttonWidget( @@ -288,7 +273,7 @@ class _LockScreenOptionConfirmPinState number: '9', text: 'WXYZ', onTap: () { - onClick('9'); + _onKeyTap('9'); }, ), ], @@ -308,7 +293,7 @@ class _LockScreenOptionConfirmPinState number: '0', text: '', onTap: () { - onClick('0'); + _onKeyTap('0'); }, ), buttonWidget( @@ -318,7 +303,7 @@ class _LockScreenOptionConfirmPinState text: '', icons: const Icon(Icons.backspace_outlined), onTap: () { - removeNum(); + _onBackspace(); }, ), ], diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 1447189e1c..87e92e82d2 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -71,7 +71,7 @@ class _LockScreenOptionPasswordState extends State { Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); - final isKeypadOpen = MediaQuery.of(context).viewInsets.bottom > 100; + final isKeypadOpen = MediaQuery.viewInsetsOf(context).bottom > 100; FloatingActionButtonLocation? fabLocation() { if (isKeypadOpen) { @@ -158,7 +158,7 @@ class _LockScreenOptionPasswordState extends State { child: TextInputWidget( hintText: S.of(context).password, focusNode: _focusNode, - fillColor: false, + enableFillColor: false, textCapitalization: TextCapitalization.none, textEditingController: _passwordController, isPasswordInput: true, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 7e204383b3..1add61527c 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -20,11 +20,6 @@ class LockScreenOptionPin extends StatefulWidget { class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); - Key _pinputKey = UniqueKey(); - @override - void initState() { - super.initState(); - } @override void dispose() { @@ -32,17 +27,15 @@ class _LockScreenOptionPinState extends State { _pinController.dispose(); } - String _pin = ""; - - void onClick(String number) { - _pin += number; - _pinController.text = _pin; + void _onKeyTap(String number) { + _pinController.text += number; + return; } - void removeNum() { - if (_pin.isNotEmpty) { - _pin = _pin.substring(0, _pin.length - 1); - _pinController.text = _pin; + void _onBackspace() { + if (_pinController.text.isNotEmpty) { + _pinController.text = + _pinController.text.substring(0, _pinController.text.length - 1); } return; } @@ -53,8 +46,6 @@ class _LockScreenOptionPinState extends State { return true; } _pinController.clear(); - _pin = ""; - _pinputKey = UniqueKey(); await HapticFeedback.vibrate(); return false; } @@ -71,7 +62,6 @@ class _LockScreenOptionPinState extends State { ), ); _pinController.clear(); - _pin = ""; } } @@ -104,6 +94,8 @@ class _LockScreenOptionPinState extends State { body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, + // mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, children: [ const SizedBox( height: 60, @@ -157,195 +149,187 @@ class _LockScreenOptionPinState extends State { style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), - Column( - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(70, 0, 70, 0), - child: Pinput( - key: _pinputKey, - length: 4, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - useNativeKeyboard: false, - controller: _pinController, - defaultPinTheme: _pinPutDecoration, - submittedPinTheme: _pinPutDecoration.copyWith( - textStyle: textTheme.h3Bold, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, + Pinput( + length: 4, + useNativeKeyboard: false, + controller: _pinController, + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, + ), + ), + ), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillMuted, + ), + ), + ), + focusedPinTheme: _pinPutDecoration, + errorPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, + ), + ), + textStyle: + textTheme.h3Bold.copyWith(color: colorTheme.warning400), + ), + validator: widget.isAuthenticating + ? (value) { + if (widget.authPin == value) { + return null; + } + return 'Invalid PIN'; + } + : null, + errorText: '', + obscureText: true, + obscuringCharacter: '*', + onCompleted: (value) async { + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPin(_pinController.text); + }, + ), + const Spacer(), + SafeArea( + child: Container( + padding: const EdgeInsets.all(2), + color: colorTheme.strokeFainter, + child: Column( + children: [ + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: '', + number: '1', + onTap: () { + _onKeyTap('1'); + }, ), - ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "ABC", + number: '2', + onTap: () { + _onKeyTap('2'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "DEF", + number: '3', + onTap: () { + _onKeyTap('3'); + }, + ), + ], ), - followingPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillMuted, + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '4', + text: "GHI", + onTap: () { + _onKeyTap('4'); + }, ), - ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '5', + text: 'JKL', + onTap: () { + _onKeyTap('5'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '6', + text: 'MNO', + onTap: () { + _onKeyTap('6'); + }, + ), + ], ), - focusedPinTheme: _pinPutDecoration, - errorPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '7', + text: 'PQRS', + onTap: () { + _onKeyTap('7'); + }, ), - ), - textStyle: textTheme.h3Bold - .copyWith(color: colorTheme.warning400), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '8', + text: 'TUV', + onTap: () { + _onKeyTap('8'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '9', + text: 'WXYZ', + onTap: () { + _onKeyTap('9'); + }, + ), + ], ), - validator: widget.isAuthenticating - ? (value) { - if (widget.authPin == value) { - return null; - } - return 'Invalid PIN'; - } - : null, - errorText: '', - obscureText: true, - obscuringCharacter: '*', - onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); - await _confirmPin(_pinController.text); - }, - ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + muteButton: true, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '0', + text: '', + onTap: () { + _onKeyTap('0'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + icons: const Icon(Icons.backspace_outlined), + onTap: () { + _onBackspace(); + }, + ), + ], + ), + ], ), - ], - ), - const Spacer(), - Container( - padding: const EdgeInsets.all(2), - color: colorTheme.strokeFainter, - child: Column( - children: [ - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: '', - number: '1', - onTap: () { - onClick('1'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "ABC", - number: '2', - onTap: () { - onClick('2'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "DEF", - number: '3', - onTap: () { - onClick('3'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '4', - text: "GHI", - onTap: () { - onClick('4'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '5', - text: 'JKL', - onTap: () { - onClick('5'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '6', - text: 'MNO', - onTap: () { - onClick('6'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '7', - text: 'PQRS', - onTap: () { - onClick('7'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '8', - text: 'TUV', - onTap: () { - onClick('8'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '9', - text: 'WXYZ', - onTap: () { - onClick('9'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - muteButton: true, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '0', - text: '', - onTap: () { - onClick('0'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - icons: const Icon(Icons.backspace_outlined), - onTap: () { - removeNum(); - }, - ), - ], - ), - ], ), ), ], @@ -395,7 +379,7 @@ class _LockScreenOptionPinState extends State { ), Text( text, - style: textTheme.small, + style: textTheme.miniBold, ), ], ), diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 7d1ad0d6fc..ea86e72da2 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -15,7 +15,7 @@ Future requestAuthentication(BuildContext context, String reason) async { final String? savedPassword = await configuration.getPassword(); if (savedPassword != null || savedPin != null) { return await LocalAuthenticationService.instance - .requestEnteAuthForLockScreen(context); + .requestEnteAuthForLockScreen(context, savedPin, savedPassword); } else { return await LocalAuthentication().authenticate( localizedReason: reason, From 39d232a937ba6853205aca9c540afa4ffae7cfea Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 19 Jun 2024 18:26:36 +0530 Subject: [PATCH 023/466] [mob][photos] landscape mode keyboard configured --- .../lock_screen_option_confirm_password.dart | 112 ++--- .../TEMP/lock_screen_option_confirm_pin.dart | 468 ++++++++--------- .../TEMP/lock_screen_option_password.dart | 112 ++--- .../settings/TEMP/lock_screen_option_pin.dart | 473 +++++++++--------- 4 files changed, 601 insertions(+), 564 deletions(-) diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index e86b362c8d..915152b576 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -98,67 +98,67 @@ class _LockScreenOptionConfirmPasswordState ), floatingActionButtonLocation: fabLocation(), floatingActionButtonAnimator: NoScalingAnimation(), - body: Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox( - height: 60, - ), - SizedBox( - height: 120, - width: 120, - child: Stack( - children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: 1, - strokeWidth: 1.5, + body: SingleChildScrollView( + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, + ), ), ), - ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ), - ), - ], + ], + ), + ), + Text( + 'Re-enter Password', + style: textTheme.bodyBold, ), - ), - Text( - 'Re-enter Password', - style: textTheme.bodyBold, - ), - const Padding(padding: EdgeInsets.all(24)), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: TextInputWidget( - hintText: S.of(context).confirmPassword, - focusNode: _focusNode, - enableFillColor: false, - textCapitalization: TextCapitalization.none, - textEditingController: _confirmPasswordController, - isPasswordInput: true, - onChange: (p0) { - _isFormValid.value = - _confirmPasswordController.text.isNotEmpty; - }, - onSubmit: (p0) { - return _confirmPasswordMatch(); - }, - submitNotifier: _submitNotifier, + const Padding(padding: EdgeInsets.all(12)), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextInputWidget( + hintText: S.of(context).confirmPassword, + focusNode: _focusNode, + enableFillColor: false, + textCapitalization: TextCapitalization.none, + textEditingController: _confirmPasswordController, + isPasswordInput: true, + onChange: (p0) { + _isFormValid.value = + _confirmPasswordController.text.isNotEmpty; + }, + onSubmit: (p0) { + return _confirmPasswordMatch(); + }, + submitNotifier: _submitNotifier, + ), ), - ), - ], + const Padding(padding: EdgeInsets.all(12)), + ], + ), ), ), ); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 2a24ffbe07..38be79bb83 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -1,7 +1,9 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; import "package:photos/core/configuration.dart"; +import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:pinput/pinput.dart"; @@ -61,7 +63,6 @@ class _LockScreenOptionConfirmPinState Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); - return Scaffold( appBar: AppBar( elevation: 0, @@ -75,241 +76,258 @@ class _LockScreenOptionConfirmPinState ), ), ), - body: Center( - child: Column( - children: [ - const SizedBox( - height: 60, - ), - SizedBox( - height: 120, - width: 120, - child: Stack( - children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: ValueListenableBuilder( - valueListenable: _confirmPinController, - builder: (context, value, child) { - return TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: _confirmPinController.text.length / 4, - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 250), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, - ), - ); - }, - ), + body: OrientationBuilder( + builder: (context, orientation) { + return orientation == Orientation.portrait + ? _getBody(colorTheme, textTheme, isPortrait: true) + : SingleChildScrollView( + child: _getBody(colorTheme, textTheme, isPortrait: false), + ); + }, + ), + ); + } + + Widget _getBody(colorTheme, textTheme, {required bool isPortrait}) { + return Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _confirmPinController, + builder: (context, value, child) { + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _confirmPinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), + ); + }, ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, - ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, ), - ], - ), - ), - Text( - 'Re-enter PIN', - style: textTheme.bodyBold, + ), + ], ), - const Padding(padding: EdgeInsets.all(12)), - Pinput( - length: 4, - useNativeKeyboard: false, - controller: _confirmPinController, - defaultPinTheme: _pinPutDecoration, - submittedPinTheme: _pinPutDecoration.copyWith( - textStyle: textTheme.h3Bold, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + ), + Text( + 'Re-enter PIN', + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(12)), + Pinput( + length: 4, + controller: _confirmPinController, + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), ), - followingPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillMuted, - ), + ), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillMuted, ), ), - focusedPinTheme: _pinPutDecoration, - errorPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + ), + focusedPinTheme: _pinPutDecoration, + errorPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), - textStyle: - textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - errorText: '', - obscureText: true, - obscuringCharacter: '*', - validator: (value) { - if (value == widget.pin) { - return null; - } else { - value = null; - return 'PIN does not match'; - } - }, - onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); - await _confirmPinMatch(); - }, + textStyle: + textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - const Spacer(), - Container( - padding: const EdgeInsets.all(2), - color: colorTheme.strokeFainter, - child: Column( - children: [ - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: '', - number: '1', - onTap: () { - _onKeyTap('1'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "ABC", - number: '2', - onTap: () { - _onKeyTap('2'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "DEF", - number: '3', - onTap: () { - _onKeyTap('3'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '4', - text: "GHI", - onTap: () { - _onKeyTap('4'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '5', - text: 'JKL', - onTap: () { - _onKeyTap('5'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '6', - text: 'MNO', - onTap: () { - _onKeyTap('6'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '7', - text: 'PQRS', - onTap: () { - _onKeyTap('7'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '8', - text: 'TUV', - onTap: () { - _onKeyTap('8'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '9', - text: 'WXYZ', - onTap: () { - _onKeyTap('9'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - muteButton: true, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '0', - text: '', - onTap: () { - _onKeyTap('0'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - icons: const Icon(Icons.backspace_outlined), - onTap: () { - _onBackspace(); - }, - ), - ], - ), - ], - ), + errorText: '', + obscureText: true, + obscuringCharacter: '*', + validator: (value) { + if (value == widget.pin) { + return null; + } else { + value = null; + return 'PIN does not match'; + } + }, + onCompleted: (value) async { + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPinMatch(); + }, + ), + isPortrait + ? const Spacer() + : const Padding(padding: EdgeInsets.all(12)), + customKeyPad(colorTheme, textTheme), + ], + ), + ); + } + + Widget customKeyPad(EnteColorScheme colorTheme, EnteTextTheme textTheme) { + return SafeArea( + child: Container( + padding: const EdgeInsets.all(2), + color: colorTheme.strokeFainter, + child: Column( + children: [ + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: '', + number: '1', + onTap: () { + _onKeyTap('1'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "ABC", + number: '2', + onTap: () { + _onKeyTap('2'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "DEF", + number: '3', + onTap: () { + _onKeyTap('3'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '4', + text: "GHI", + onTap: () { + _onKeyTap('4'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '5', + text: 'JKL', + onTap: () { + _onKeyTap('5'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '6', + text: 'MNO', + onTap: () { + _onKeyTap('6'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '7', + text: 'PQRS', + onTap: () { + _onKeyTap('7'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '8', + text: 'TUV', + onTap: () { + _onKeyTap('8'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '9', + text: 'WXYZ', + onTap: () { + _onKeyTap('9'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + muteButton: true, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '0', + text: '', + onTap: () { + _onKeyTap('0'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + icons: const Icon(Icons.backspace_outlined), + onTap: () { + _onBackspace(); + }, + ), + ], ), ], ), diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 87e92e82d2..298998f7aa 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -111,67 +111,67 @@ class _LockScreenOptionPasswordState extends State { ), floatingActionButtonLocation: fabLocation(), floatingActionButtonAnimator: NoScalingAnimation(), - body: Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox( - height: 60, - ), - SizedBox( - height: 120, - width: 120, - child: Stack( - children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: 1, - strokeWidth: 1.5, + body: SingleChildScrollView( + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, + ), ), ), - ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ), - ), - ], + ], + ), + ), + Text( + widget.isAuthenticating ? 'Enter Password' : 'Set new Password', + textAlign: TextAlign.center, + style: textTheme.bodyBold, ), - ), - Text( - widget.isAuthenticating ? 'Enter Password' : 'Set new Password', - textAlign: TextAlign.center, - style: textTheme.bodyBold, - ), - const Padding(padding: EdgeInsets.all(24)), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: TextInputWidget( - hintText: S.of(context).password, - focusNode: _focusNode, - enableFillColor: false, - textCapitalization: TextCapitalization.none, - textEditingController: _passwordController, - isPasswordInput: true, - onChange: (p0) { - _isFormValid.value = _passwordController.text.isNotEmpty; - }, - onSubmit: (p0) { - return _confirmPassword(); - }, - submitNotifier: _submitNotifier, + const Padding(padding: EdgeInsets.all(12)), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: TextInputWidget( + hintText: S.of(context).password, + focusNode: _focusNode, + enableFillColor: false, + textCapitalization: TextCapitalization.none, + textEditingController: _passwordController, + isPasswordInput: true, + onChange: (p0) { + _isFormValid.value = _passwordController.text.isNotEmpty; + }, + onSubmit: (p0) { + return _confirmPassword(); + }, + submitNotifier: _submitNotifier, + ), ), - ), - ], + const Padding(padding: EdgeInsets.all(12)), + ], + ), ), ), ); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index 1add61527c..f7956b7efc 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -1,6 +1,8 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; +import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; import 'package:pinput/pinput.dart'; @@ -91,246 +93,263 @@ class _LockScreenOptionPinState extends State { ), ), ), - body: Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - // mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - const SizedBox( - height: 60, - ), - SizedBox( - height: 120, - width: 120, - child: Stack( - children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: ValueListenableBuilder( - valueListenable: _pinController, - builder: (context, value, child) { - return TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: _pinController.text.length / 4, - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 250), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, - ), - ); - }, - ), + body: OrientationBuilder( + builder: (context, orientation) { + return orientation == Orientation.portrait + ? _getBody(colorTheme, textTheme, isPortrait: true) + : SingleChildScrollView( + child: _getBody(colorTheme, textTheme, isPortrait: false), + ); + }, + ), + ); + } + + Widget _getBody( + EnteColorScheme colorTheme, + EnteTextTheme textTheme, { + required bool isPortrait, + }) { + return Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _pinController, + builder: (context, value, child) { + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _pinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), + ); + }, ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, - ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, ), - ], - ), - ), - Text( - widget.isAuthenticating ? 'Enter PIN' : 'Set new PIN', - style: textTheme.bodyBold, + ), + ], ), - const Padding(padding: EdgeInsets.all(12)), - Pinput( - length: 4, - useNativeKeyboard: false, - controller: _pinController, - defaultPinTheme: _pinPutDecoration, - submittedPinTheme: _pinPutDecoration.copyWith( - textStyle: textTheme.h3Bold, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + ), + Text( + widget.isAuthenticating ? 'Enter PIN' : 'Set new PIN', + style: textTheme.bodyBold, + ), + const Padding(padding: EdgeInsets.all(12)), + Pinput( + length: 4, + useNativeKeyboard: false, + controller: _pinController, + defaultPinTheme: _pinPutDecoration, + submittedPinTheme: _pinPutDecoration.copyWith( + textStyle: textTheme.h3Bold, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), ), - followingPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillMuted, - ), + ), + followingPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillMuted, ), ), - focusedPinTheme: _pinPutDecoration, - errorPinTheme: _pinPutDecoration.copyWith( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - border: Border.all( - color: colorTheme.fillBase, - ), + ), + focusedPinTheme: _pinPutDecoration, + errorPinTheme: _pinPutDecoration.copyWith( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + border: Border.all( + color: colorTheme.fillBase, ), - textStyle: - textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - validator: widget.isAuthenticating - ? (value) { - if (widget.authPin == value) { - return null; - } - return 'Invalid PIN'; + textStyle: + textTheme.h3Bold.copyWith(color: colorTheme.warning400), + ), + validator: widget.isAuthenticating + ? (value) { + if (widget.authPin == value) { + return null; } - : null, - errorText: '', - obscureText: true, - obscuringCharacter: '*', - onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); - await _confirmPin(_pinController.text); - }, + return 'Invalid PIN'; + } + : null, + errorText: '', + obscureText: true, + obscuringCharacter: '*', + onCompleted: (value) async { + await Future.delayed(const Duration(milliseconds: 250)); + await _confirmPin(_pinController.text); + }, + ), + isPortrait + ? const Spacer() + : const Padding(padding: EdgeInsets.all(12)), + customKeyPad(colorTheme, textTheme), + ], + ), + ); + } + + Widget customKeyPad(EnteColorScheme colorTheme, EnteTextTheme textTheme) { + return SafeArea( + child: Container( + padding: const EdgeInsets.all(2), + color: colorTheme.strokeFainter, + child: Column( + children: [ + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: '', + number: '1', + onTap: () { + _onKeyTap('1'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "ABC", + number: '2', + onTap: () { + _onKeyTap('2'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + text: "DEF", + number: '3', + onTap: () { + _onKeyTap('3'); + }, + ), + ], ), - const Spacer(), - SafeArea( - child: Container( - padding: const EdgeInsets.all(2), - color: colorTheme.strokeFainter, - child: Column( - children: [ - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: '', - number: '1', - onTap: () { - _onKeyTap('1'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "ABC", - number: '2', - onTap: () { - _onKeyTap('2'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "DEF", - number: '3', - onTap: () { - _onKeyTap('3'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '4', - text: "GHI", - onTap: () { - _onKeyTap('4'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '5', - text: 'JKL', - onTap: () { - _onKeyTap('5'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '6', - text: 'MNO', - onTap: () { - _onKeyTap('6'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '7', - text: 'PQRS', - onTap: () { - _onKeyTap('7'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '8', - text: 'TUV', - onTap: () { - _onKeyTap('8'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '9', - text: 'WXYZ', - onTap: () { - _onKeyTap('9'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - muteButton: true, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '0', - text: '', - onTap: () { - _onKeyTap('0'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - icons: const Icon(Icons.backspace_outlined), - onTap: () { - _onBackspace(); - }, - ), - ], - ), - ], + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '4', + text: "GHI", + onTap: () { + _onKeyTap('4'); + }, ), - ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '5', + text: 'JKL', + onTap: () { + _onKeyTap('5'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '6', + text: 'MNO', + onTap: () { + _onKeyTap('6'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '7', + text: 'PQRS', + onTap: () { + _onKeyTap('7'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '8', + text: 'TUV', + onTap: () { + _onKeyTap('8'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '9', + text: 'WXYZ', + onTap: () { + _onKeyTap('9'); + }, + ), + ], + ), + Row( + children: [ + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + muteButton: true, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '0', + text: '', + onTap: () { + _onKeyTap('0'); + }, + ), + buttonWidget( + colorTheme: colorTheme, + textTheme: textTheme, + number: '', + text: '', + icons: const Icon(Icons.backspace_outlined), + onTap: () { + _onBackspace(); + }, + ), + ], ), ], ), From fc7e7f4c8843bbaf0bd21b19e173771471e6ac8e Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 20 Jun 2024 12:57:14 +0530 Subject: [PATCH 024/466] [mob][photos] resolved PR comments --- mobile/lib/ui/components/text_input_widget.dart | 2 +- mobile/lib/ui/settings/TEMP/lock_screen_option.dart | 9 ++------- .../TEMP/lock_screen_option_confirm_password.dart | 1 + .../ui/settings/TEMP/lock_screen_option_password.dart | 1 + 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index 48ef8c2325..d97334585e 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -46,7 +46,7 @@ class TextInputWidget extends StatefulWidget { final ValueNotifier? isEmptyNotifier; final List? textInputFormatter; final TextInputType? textInputType; - final bool? enableFillColor; + final bool enableFillColor; const TextInputWidget({ this.onSubmit, this.onChange, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 9007266ff4..7ae211ce14 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -83,13 +83,8 @@ class _LockScreenOptionState extends State { } Future _onToggleSwitch() async { - if (appLock == false && !(isPasswordEnabled || isPinEnabled)) { - AppLock.of(context)!.setEnabled(!appLock); - await Configuration.instance.setShouldShowLockScreen(!appLock); - } else { - AppLock.of(context)!.setEnabled(!appLock); - await Configuration.instance.setShouldShowLockScreen(!appLock); - } + AppLock.of(context)!.setEnabled(!appLock); + await Configuration.instance.setShouldShowLockScreen(!appLock); await _configuration.removePinAndPassword(); setState(() { isPasswordEnabled = _configuration.isPasswordSet(); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart index 915152b576..ee59de455a 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart @@ -21,6 +21,7 @@ class LockScreenOptionConfirmPassword extends StatefulWidget { class _LockScreenOptionConfirmPasswordState extends State { + /// _confirmPasswordController is disposed by the [TextInputWidget] final _confirmPasswordController = TextEditingController(text: null); final Configuration _configuration = Configuration.instance; final _focusNode = FocusNode(); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index 298998f7aa..cd86f75101 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -21,6 +21,7 @@ class LockScreenOptionPassword extends StatefulWidget { } class _LockScreenOptionPasswordState extends State { + /// _passwordController is disposed by the [TextInputWidget] final _passwordController = TextEditingController(text: null); final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); From 3fe0faff6ad63675f372d872b207965d9d104e7b Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 21 Jun 2024 18:03:39 +0530 Subject: [PATCH 025/466] [mob][photos] Implement hashing and salting for storing custom PIN/password in secure storage --- mobile/lib/core/configuration.dart | 69 +++++++++++++++---- .../ui/settings/TEMP/lock_screen_option.dart | 30 ++++---- .../TEMP/lock_screen_option_confirm_pin.dart | 5 +- .../TEMP/lock_screen_option_password.dart | 18 ++++- .../settings/TEMP/lock_screen_option_pin.dart | 36 +++++++--- 5 files changed, 119 insertions(+), 39 deletions(-) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 1a3ca413c8..2be3b0fb53 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -5,6 +5,7 @@ import "dart:io"; import 'package:bip39/bip39.dart' as bip39; import "package:flutter/services.dart"; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import "package:flutter_sodium/flutter_sodium.dart"; import 'package:logging/logging.dart'; import 'package:path_provider/path_provider.dart'; import 'package:photos/core/constants.dart'; @@ -74,6 +75,7 @@ class Configuration { static const endPointKey = "endpoint"; static const password = "user_pass"; static const pin = "user_pin"; + static const saltKey = "user_salt"; static final _logger = Logger("Configuration"); String? _cachedToken; @@ -152,35 +154,78 @@ class Configuration { } } + static Uint8List generateSalt() { + return Sodium.randombytesBuf(Sodium.cryptoPwhashSaltbytes); + } + Future setPin(String userPin) async { - await _preferences.setString(pin, userPin); - await _preferences.remove(password); + await _secureStorage.delete(key: saltKey); + + final salt = generateSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(userPin), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + final String saltPin = base64Encode(salt); + final String hashedPin = base64Encode(hash); + + await _secureStorage.write(key: saltKey, value: saltPin); + await _secureStorage.write(key: pin, value: hashedPin); + await _secureStorage.delete(key: password); + + return; + } + + Future getSalt() async { + final String? salt = await _secureStorage.read(key: saltKey); + if (salt == null) return null; + return base64Decode(salt); } Future getPin() async { - return _preferences.getString(pin); + return _secureStorage.read(key: pin); } Future setPassword(String pass) async { - await _preferences.setString(password, pass); - await _preferences.remove(pin); + await _secureStorage.delete(key: saltKey); + + final salt = generateSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(pass), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + final String saltPassword = base64Encode(salt); + final String hashPassword = base64Encode(hash); + + await _secureStorage.write(key: saltKey, value: saltPassword); + await _secureStorage.write(key: password, value: hashPassword); + await _secureStorage.delete(key: pin); + + return; } Future getPassword() async { - return _preferences.getString(password); + return _secureStorage.read(key: password); } Future removePinAndPassword() async { - await _preferences.remove(pin); - await _preferences.remove(password); + await _secureStorage.delete(key: saltKey); + await _secureStorage.delete(key: pin); + await _secureStorage.delete(key: password); } - bool isPinSet() { - return _preferences.containsKey(pin); + Future isPinSet() async { + return await _secureStorage.containsKey(key: pin); } - bool isPasswordSet() { - return _preferences.containsKey(password); + Future isPasswordSet() async { + return await _secureStorage.containsKey(key: password); } // _cleanUpStaleFiles deletes all files in the temp directory that are older diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart index 7ae211ce14..fa6827956b 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option.dart @@ -27,21 +27,26 @@ class _LockScreenOptionState extends State { @override void initState() { super.initState(); - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); + _initializeSettings(); appLock = isPinEnabled || isPasswordEnabled || _configuration.shouldShowLockScreen(); } - Future _deviceLock() async { - await _configuration.removePinAndPassword(); + Future _initializeSettings() async { + final bool passwordEnabled = await _configuration.isPasswordSet(); + final bool pinEnabled = await _configuration.isPinSet(); setState(() { - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); + isPasswordEnabled = passwordEnabled; + isPinEnabled = pinEnabled; }); } + Future _deviceLock() async { + await _configuration.removePinAndPassword(); + await _initializeSettings(); + } + Future _pinLock() async { final bool result = await Navigator.of(context).push( MaterialPageRoute( @@ -51,8 +56,7 @@ class _LockScreenOptionState extends State { ), ); setState(() { - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); + _initializeSettings(); if (result == false) { appLock = appLock; } else { @@ -72,12 +76,13 @@ class _LockScreenOptionState extends State { ), ); setState(() { - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); + _initializeSettings(); if (result == false) { appLock = appLock; } else { - appLock = isPinEnabled || isPasswordEnabled; + appLock = isPinEnabled || + isPasswordEnabled || + _configuration.shouldShowLockScreen(); } }); } @@ -87,8 +92,7 @@ class _LockScreenOptionState extends State { await Configuration.instance.setShouldShowLockScreen(!appLock); await _configuration.removePinAndPassword(); setState(() { - isPasswordEnabled = _configuration.isPasswordSet(); - isPinEnabled = _configuration.isPinSet(); + _initializeSettings(); appLock = !appLock; }); } diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart index 38be79bb83..149cb54d66 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart @@ -144,6 +144,7 @@ class _LockScreenOptionConfirmPinState const Padding(padding: EdgeInsets.all(12)), Pinput( length: 4, + pinputAutovalidateMode: PinputAutovalidateMode.onSubmit, controller: _confirmPinController, defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( @@ -180,10 +181,8 @@ class _LockScreenOptionConfirmPinState validator: (value) { if (value == widget.pin) { return null; - } else { - value = null; - return 'PIN does not match'; } + return 'PIN does not match'; }, onCompleted: (value) async { await Future.delayed(const Duration(milliseconds: 250)); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart index cd86f75101..d4c1c59cfb 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart @@ -1,11 +1,16 @@ +import "dart:convert"; + import "package:flutter/material.dart"; import "package:flutter/services.dart"; +import "package:flutter_sodium/flutter_sodium.dart"; +import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_password.dart"; +import "package:photos/utils/crypto_util.dart"; class LockScreenOptionPassword extends StatefulWidget { const LockScreenOptionPassword({ @@ -26,6 +31,8 @@ class _LockScreenOptionPasswordState extends State { final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); final _submitNotifier = ValueNotifier(false); + Configuration configuration = Configuration.instance; + late String hashedPassword; @override void initState() { super.initState(); @@ -43,7 +50,16 @@ class _LockScreenOptionPasswordState extends State { } Future confirmPasswordAuth(String code) async { - if (widget.authPass == code) { + final Uint8List? salt = await configuration.getSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(code), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + hashedPassword = base64Encode(hash); + if (widget.authPass == hashedPassword) { Navigator.of(context).pop(true); return true; } else { diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart index f7956b7efc..bbc467f721 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart @@ -1,10 +1,15 @@ +import "dart:convert"; + import "package:flutter/material.dart"; import "package:flutter/services.dart"; +import "package:flutter_sodium/flutter_sodium.dart"; +import "package:photos/core/configuration.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; +import "package:photos/utils/crypto_util.dart"; import 'package:pinput/pinput.dart'; class LockScreenOptionPin extends StatefulWidget { @@ -22,7 +27,8 @@ class LockScreenOptionPin extends StatefulWidget { class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); - + Configuration configuration = Configuration.instance; + late String hashedPin; @override void dispose() { super.dispose(); @@ -43,10 +49,20 @@ class _LockScreenOptionPinState extends State { } Future confirmPinAuth(String code) async { - if (widget.authPin == code) { + final Uint8List? salt = await configuration.getSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(code), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + hashedPin = base64Encode(hash); + if (widget.authPin == hashedPin) { Navigator.of(context).pop(true); return true; } + _pinController.clear(); await HapticFeedback.vibrate(); return false; @@ -196,14 +212,14 @@ class _LockScreenOptionPinState extends State { textStyle: textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - validator: widget.isAuthenticating - ? (value) { - if (widget.authPin == value) { - return null; - } - return 'Invalid PIN'; - } - : null, + // validator: widget.isAuthenticating + // ? (value) { + // if (widget.authPin == hashedPin) { + // return null; + // } + // return 'Invalid PIN'; + // } + // : null, errorText: '', obscureText: true, obscuringCharacter: '*', From 73a53994f32d5fda113c93fa9b977a77edd5d9d3 Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Tue, 25 Jun 2024 12:37:35 +0530 Subject: [PATCH 026/466] chore(mobile): add adapted from header in relevant files --- mobile/lib/models/ffmpeg/channel_layouts.dart | 2 ++ mobile/lib/models/ffmpeg/codecs.dart | 2 ++ mobile/lib/models/ffmpeg/ffprobe_keys.dart | 2 ++ mobile/lib/models/ffmpeg/ffprobe_props.dart | 2 ++ mobile/lib/models/ffmpeg/language.dart | 2 ++ mobile/lib/models/ffmpeg/mp4.dart | 2 ++ mobile/lib/utils/ffprobe_util.dart | 2 ++ 7 files changed, 14 insertions(+) diff --git a/mobile/lib/models/ffmpeg/channel_layouts.dart b/mobile/lib/models/ffmpeg/channel_layouts.dart index 983140d337..b419ba9b29 100644 --- a/mobile/lib/models/ffmpeg/channel_layouts.dart +++ b/mobile/lib/models/ffmpeg/channel_layouts.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves/blob/51a593e0fcfafe02dc4701fb1791935294aac933/lib/model/video/channel_layouts.dart + // channel layout constants from FFmpeg libavutil/channel_layout.h class ChannelLayouts { // ignore_for_file: constant_identifier_names diff --git a/mobile/lib/models/ffmpeg/codecs.dart b/mobile/lib/models/ffmpeg/codecs.dart index aa29d560b0..0ce51bac7b 100644 --- a/mobile/lib/models/ffmpeg/codecs.dart +++ b/mobile/lib/models/ffmpeg/codecs.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves/blob/4a0009f4f0b63f2c4478e2531be8046c3b2e3320/lib/model/video/codecs.dart + class Codecs { static const aac = 'aac'; static const ac3 = 'ac3'; diff --git a/mobile/lib/models/ffmpeg/ffprobe_keys.dart b/mobile/lib/models/ffmpeg/ffprobe_keys.dart index 826f2814e9..99befc1858 100644 --- a/mobile/lib/models/ffmpeg/ffprobe_keys.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_keys.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves/blob/4a0009f4f0b63f2c4478e2531be8046c3b2e3320/plugins/aves_model/lib/src/video/keys.dart + class FFProbeKeys { static const androidCaptureFramerate = 'com.android.capture.fps'; static const androidManufacturer = 'com.android.manufacturer'; diff --git a/mobile/lib/models/ffmpeg/ffprobe_props.dart b/mobile/lib/models/ffmpeg/ffprobe_props.dart index ba031d530e..abbc56d41b 100644 --- a/mobile/lib/models/ffmpeg/ffprobe_props.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_props.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves + import "package:collection/collection.dart"; import "package:intl/intl.dart"; import "package:photos/models/ffmpeg/channel_layouts.dart"; diff --git a/mobile/lib/models/ffmpeg/language.dart b/mobile/lib/models/ffmpeg/language.dart index c49930124c..519efe4588 100644 --- a/mobile/lib/models/ffmpeg/language.dart +++ b/mobile/lib/models/ffmpeg/language.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves/blob/4a0009f4f0b63f2c4478e2531be8046c3b2e3320/lib/widgets/settings/language/language.dart + class Language { final String iso639_2, name; final String? native; diff --git a/mobile/lib/models/ffmpeg/mp4.dart b/mobile/lib/models/ffmpeg/mp4.dart index 704dc3ba4d..1322a2acb9 100644 --- a/mobile/lib/models/ffmpeg/mp4.dart +++ b/mobile/lib/models/ffmpeg/mp4.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves/blob/4a0009f4f0b63f2c4478e2531be8046c3b2e3320/lib/ref/mp4.dart + class Mp4 { // adapted from `metadata-extractor` static final brands = { diff --git a/mobile/lib/utils/ffprobe_util.dart b/mobile/lib/utils/ffprobe_util.dart index 28a6c9cdc1..a4fea7cfff 100644 --- a/mobile/lib/utils/ffprobe_util.dart +++ b/mobile/lib/utils/ffprobe_util.dart @@ -1,3 +1,5 @@ +// Adapted from: https://github.com/deckerst/aves + import "package:ffmpeg_kit_flutter_min/media_information.dart"; import "package:logging/logging.dart"; import "package:photos/models/ffmpeg/ffprobe_keys.dart"; From 59b132edf886f62e92bca3d6467fe59bb670e1f2 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 26 Jun 2024 14:02:27 +0530 Subject: [PATCH 027/466] [mob][photos] moved funtions to lockscreen_setting.dart from configuration.dart --- mobile/lib/core/configuration.dart | 96 +++---------------- mobile/lib/main.dart | 9 +- .../local_authentication_service.dart | 12 +-- .../lock_screen_option.dart | 30 +++--- .../lock_screen_option_confirm_password.dart | 7 +- .../lock_screen_option_confirm_pin.dart | 7 +- .../lock_screen_option_password.dart | 9 +- .../lock_screen_option_pin.dart | 9 +- .../ui/settings/security_section_widget.dart | 2 +- mobile/lib/utils/auth_util.dart | 9 +- mobile/lib/utils/lockscreen_setting.dart | 96 +++++++++++++++++++ 11 files changed, 161 insertions(+), 125 deletions(-) rename mobile/lib/ui/settings/{TEMP => lockscreen}/lock_screen_option.dart (91%) rename mobile/lib/ui/settings/{TEMP => lockscreen}/lock_screen_option_confirm_password.dart (96%) rename mobile/lib/ui/settings/{TEMP => lockscreen}/lock_screen_option_confirm_pin.dart (98%) rename mobile/lib/ui/settings/{TEMP => lockscreen}/lock_screen_option_password.dart (95%) rename mobile/lib/ui/settings/{TEMP => lockscreen}/lock_screen_option_pin.dart (97%) create mode 100644 mobile/lib/utils/lockscreen_setting.dart diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 2be3b0fb53..571a9d0f19 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -5,7 +5,6 @@ import "dart:io"; import 'package:bip39/bip39.dart' as bip39; import "package:flutter/services.dart"; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import "package:flutter_sodium/flutter_sodium.dart"; import 'package:logging/logging.dart'; import 'package:path_provider/path_provider.dart'; import 'package:photos/core/constants.dart'; @@ -35,6 +34,7 @@ import 'package:photos/services/search_service.dart'; import 'package:photos/services/sync_service.dart'; import 'package:photos/utils/crypto_util.dart'; import 'package:photos/utils/file_uploader.dart'; +import "package:photos/utils/lockscreen_setting.dart"; import 'package:photos/utils/validator_util.dart'; import "package:photos/utils/wakelock_util.dart"; import 'package:shared_preferences/shared_preferences.dart'; @@ -60,7 +60,7 @@ class Configuration { // keyShouldKeepDeviceAwake is used to determine whether the device screen // should be kept on while the app is in foreground. static const keyShouldKeepDeviceAwake = "should_keep_device_awake"; - static const keyShouldShowLockScreen = "should_show_lock_screen"; + static const keyShowSystemLockScreen = "should_show_lock_screen"; static const keyHasSelectedAnyBackupFolder = "has_selected_any_folder_for_backup"; static const lastTempFolderClearTimeKey = "last_temp_folder_clear_time"; @@ -86,7 +86,7 @@ class Configuration { late FlutterSecureStorage _secureStorage; late String _tempDocumentsDirPath; late String _thumbnailCacheDirectory; - + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; // 6th July 22: Remove this after 3 months. Hopefully, active users // will migrate to newer version of the app, where shared media is stored // on appSupport directory which OS won't clean up automatically @@ -154,80 +154,6 @@ class Configuration { } } - static Uint8List generateSalt() { - return Sodium.randombytesBuf(Sodium.cryptoPwhashSaltbytes); - } - - Future setPin(String userPin) async { - await _secureStorage.delete(key: saltKey); - - final salt = generateSalt(); - final hash = cryptoPwHash({ - "password": utf8.encode(userPin), - "salt": salt, - "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, - "memLimit": Sodium.cryptoPwhashMemlimitInteractive, - }); - - final String saltPin = base64Encode(salt); - final String hashedPin = base64Encode(hash); - - await _secureStorage.write(key: saltKey, value: saltPin); - await _secureStorage.write(key: pin, value: hashedPin); - await _secureStorage.delete(key: password); - - return; - } - - Future getSalt() async { - final String? salt = await _secureStorage.read(key: saltKey); - if (salt == null) return null; - return base64Decode(salt); - } - - Future getPin() async { - return _secureStorage.read(key: pin); - } - - Future setPassword(String pass) async { - await _secureStorage.delete(key: saltKey); - - final salt = generateSalt(); - final hash = cryptoPwHash({ - "password": utf8.encode(pass), - "salt": salt, - "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, - "memLimit": Sodium.cryptoPwhashMemlimitInteractive, - }); - - final String saltPassword = base64Encode(salt); - final String hashPassword = base64Encode(hash); - - await _secureStorage.write(key: saltKey, value: saltPassword); - await _secureStorage.write(key: password, value: hashPassword); - await _secureStorage.delete(key: pin); - - return; - } - - Future getPassword() async { - return _secureStorage.read(key: password); - } - - Future removePinAndPassword() async { - await _secureStorage.delete(key: saltKey); - await _secureStorage.delete(key: pin); - await _secureStorage.delete(key: password); - } - - Future isPinSet() async { - return await _secureStorage.containsKey(key: pin); - } - - Future isPasswordSet() async { - return await _secureStorage.containsKey(key: password); - } - // _cleanUpStaleFiles deletes all files in the temp directory that are older // than kTempFolderDeletionTimeBuffer except the the temp encrypted files for upload. // Those file are deleted by file uploader after the upload is complete or those @@ -697,16 +623,22 @@ class Configuration { } } - bool shouldShowLockScreen() { - if (_preferences.containsKey(keyShouldShowLockScreen)) { - return _preferences.getBool(keyShouldShowLockScreen)!; + Future shouldShowLockScreen() async { + final bool isPin = await _lockscreenSetting.isPinSet(); + final bool isPass = await _lockscreenSetting.isPasswordSet(); + return isPin || isPass || shouldShowSystemLockScreen(); + } + + bool shouldShowSystemLockScreen() { + if (_preferences.containsKey(keyShowSystemLockScreen)) { + return _preferences.getBool(keyShowSystemLockScreen)!; } else { return false; } } - Future setShouldShowLockScreen(bool value) { - return _preferences.setBool(keyShouldShowLockScreen, value); + Future setSystemLockScreen(bool value) { + return _preferences.setBool(keyShowSystemLockScreen, value); } void setVolatilePassword(String volatilePassword) { diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index f180f2bfff..70a53224d9 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -9,6 +9,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import "package:flutter/rendering.dart"; import "package:flutter_displaymode/flutter_displaymode.dart"; +import "package:flutter_secure_storage/flutter_secure_storage.dart"; import 'package:logging/logging.dart'; import "package:media_kit/media_kit.dart"; import 'package:path_provider/path_provider.dart'; @@ -53,6 +54,7 @@ import 'package:photos/utils/crypto_util.dart'; import "package:photos/utils/email_util.dart"; import 'package:photos/utils/file_uploader.dart'; import 'package:photos/utils/local_settings.dart'; +import "package:photos/utils/lockscreen_setting.dart"; import 'package:shared_preferences/shared_preferences.dart'; final _logger = Logger("main"); @@ -94,7 +96,7 @@ Future _runInForeground(AdaptiveThemeMode? savedThemeMode) async { builder: (args) => EnteApp(_runBackgroundTask, _killBGTask, locale, savedThemeMode), lockScreen: const LockScreen(), - enabled: Configuration.instance.shouldShowLockScreen(), + enabled: await Configuration.instance.shouldShowLockScreen(), locale: locale, lightTheme: lightThemeData, darkTheme: darkThemeData, @@ -195,7 +197,7 @@ Future _init(bool isBackground, {String via = ''}) async { _isProcessRunning = true; _logger.info("Initializing... inBG =$isBackground via: $via"); final SharedPreferences preferences = await SharedPreferences.getInstance(); - + const secureStorage = FlutterSecureStorage(); await _logFGHeartBeatInfo(); _logger.info("_logFGHeartBeatInfo done"); unawaited(_scheduleHeartBeat(preferences, isBackground)); @@ -209,6 +211,9 @@ Future _init(bool isBackground, {String via = ''}) async { Computer.shared().turnOn(workersCount: 4).ignore(); CryptoUtil.init(); + _logger.info("Lockscreen init"); + LockscreenSetting.instance.init(secureStorage); + _logger.info("Configuration init"); await Configuration.instance.init(); _logger.info("Configuration done"); diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index badf20775f..490b2b5dcc 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,8 +3,8 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; -import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_password.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import 'package:photos/utils/dialog_util.dart'; @@ -23,7 +23,7 @@ class LocalAuthenticationService { AppLock.of(context)!.setEnabled(false); final result = await requestAuthentication(context, infoMessage); AppLock.of(context)!.setEnabled( - Configuration.instance.shouldShowLockScreen(), + await Configuration.instance.shouldShowLockScreen(), ); if (!result) { showToast(context, infoMessage); @@ -88,13 +88,13 @@ class LocalAuthenticationService { ); if (result) { AppLock.of(context)!.setEnabled(shouldEnableLockScreen); - await Configuration.instance - .setShouldShowLockScreen(shouldEnableLockScreen); + await Configuration.instance + .setSystemLockScreen(shouldEnableLockScreen); return true; } else { AppLock.of(context)! - .setEnabled(Configuration.instance.shouldShowLockScreen()); + .setEnabled(await Configuration.instance.shouldShowLockScreen()); } } else { unawaited( diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart similarity index 91% rename from mobile/lib/ui/settings/TEMP/lock_screen_option.dart rename to mobile/lib/ui/settings/lockscreen/lock_screen_option.dart index fa6827956b..59725f2fc6 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart @@ -7,9 +7,10 @@ import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/components/toggle_switch_widget.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option_password.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option_pin.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_password.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_pin.dart"; import "package:photos/ui/tools/app_lock.dart"; +import "package:photos/utils/lockscreen_setting.dart"; class LockScreenOption extends StatefulWidget { const LockScreenOption({super.key}); @@ -20,6 +21,7 @@ class LockScreenOption extends StatefulWidget { class _LockScreenOptionState extends State { final Configuration _configuration = Configuration.instance; + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; late bool appLock; bool isPinEnabled = false; bool isPasswordEnabled = false; @@ -30,12 +32,12 @@ class _LockScreenOptionState extends State { _initializeSettings(); appLock = isPinEnabled || isPasswordEnabled || - _configuration.shouldShowLockScreen(); + _configuration.shouldShowSystemLockScreen(); } Future _initializeSettings() async { - final bool passwordEnabled = await _configuration.isPasswordSet(); - final bool pinEnabled = await _configuration.isPinSet(); + final bool passwordEnabled = await _lockscreenSetting.isPasswordSet(); + final bool pinEnabled = await _lockscreenSetting.isPinSet(); setState(() { isPasswordEnabled = passwordEnabled; isPinEnabled = pinEnabled; @@ -43,7 +45,7 @@ class _LockScreenOptionState extends State { } Future _deviceLock() async { - await _configuration.removePinAndPassword(); + await _lockscreenSetting.removePinAndPassword(); await _initializeSettings(); } @@ -57,12 +59,10 @@ class _LockScreenOptionState extends State { ); setState(() { _initializeSettings(); - if (result == false) { - appLock = appLock; - } else { + if (result) { appLock = isPinEnabled || isPasswordEnabled || - _configuration.shouldShowLockScreen(); + _configuration.shouldShowSystemLockScreen(); } }); } @@ -77,20 +77,18 @@ class _LockScreenOptionState extends State { ); setState(() { _initializeSettings(); - if (result == false) { - appLock = appLock; - } else { + if (result) { appLock = isPinEnabled || isPasswordEnabled || - _configuration.shouldShowLockScreen(); + _configuration.shouldShowSystemLockScreen(); } }); } Future _onToggleSwitch() async { AppLock.of(context)!.setEnabled(!appLock); - await Configuration.instance.setShouldShowLockScreen(!appLock); - await _configuration.removePinAndPassword(); + await _configuration.setSystemLockScreen(!appLock); + await _lockscreenSetting.removePinAndPassword(); setState(() { _initializeSettings(); appLock = !appLock; diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart similarity index 96% rename from mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart rename to mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart index ee59de455a..3b3840bd31 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart @@ -1,11 +1,11 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; -import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; +import "package:photos/utils/lockscreen_setting.dart"; class LockScreenOptionConfirmPassword extends StatefulWidget { const LockScreenOptionConfirmPassword({ @@ -23,7 +23,8 @@ class _LockScreenOptionConfirmPasswordState extends State { /// _confirmPasswordController is disposed by the [TextInputWidget] final _confirmPasswordController = TextEditingController(text: null); - final Configuration _configuration = Configuration.instance; + + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); final _submitNotifier = ValueNotifier(false); @@ -45,7 +46,7 @@ class _LockScreenOptionConfirmPasswordState Future _confirmPasswordMatch() async { if (widget.password == _confirmPasswordController.text) { - await _configuration.setPassword(_confirmPasswordController.text); + await _lockscreenSetting.setPassword(_confirmPasswordController.text); Navigator.of(context).pop(true); Navigator.of(context).pop(true); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart similarity index 98% rename from mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart rename to mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart index 149cb54d66..2f8e9a20a2 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart @@ -1,10 +1,10 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; -import "package:photos/core/configuration.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/utils/lockscreen_setting.dart"; import "package:pinput/pinput.dart"; class LockScreenOptionConfirmPin extends StatefulWidget { @@ -18,7 +18,8 @@ class LockScreenOptionConfirmPin extends StatefulWidget { class _LockScreenOptionConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); - final Configuration _configuration = Configuration.instance; + + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; final _pinPutDecoration = PinTheme( height: 48, width: 48, @@ -49,7 +50,7 @@ class _LockScreenOptionConfirmPinState Future _confirmPinMatch() async { if (widget.pin == _confirmPinController.text) { - await _configuration.setPin(_confirmPinController.text); + await _lockscreenSetting.setPin(_confirmPinController.text); Navigator.of(context).pop(true); Navigator.of(context).pop(true); diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart similarity index 95% rename from mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart rename to mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart index d4c1c59cfb..5831a65337 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart @@ -3,14 +3,14 @@ import "dart:convert"; import "package:flutter/material.dart"; import "package:flutter/services.dart"; import "package:flutter_sodium/flutter_sodium.dart"; -import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_password.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_confirm_password.dart"; import "package:photos/utils/crypto_util.dart"; +import "package:photos/utils/lockscreen_setting.dart"; class LockScreenOptionPassword extends StatefulWidget { const LockScreenOptionPassword({ @@ -31,7 +31,8 @@ class _LockScreenOptionPasswordState extends State { final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); final _submitNotifier = ValueNotifier(false); - Configuration configuration = Configuration.instance; + + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; late String hashedPassword; @override void initState() { @@ -50,7 +51,7 @@ class _LockScreenOptionPasswordState extends State { } Future confirmPasswordAuth(String code) async { - final Uint8List? salt = await configuration.getSalt(); + final Uint8List? salt = await _lockscreenSetting.getSalt(); final hash = cryptoPwHash({ "password": utf8.encode(code), "salt": salt, diff --git a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart similarity index 97% rename from mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart rename to mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart index bbc467f721..7f574dae1e 100644 --- a/mobile/lib/ui/settings/TEMP/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart @@ -3,13 +3,13 @@ import "dart:convert"; import "package:flutter/material.dart"; import "package:flutter/services.dart"; import "package:flutter_sodium/flutter_sodium.dart"; -import "package:photos/core/configuration.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/settings/TEMP/lock_screen_option_confirm_pin.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart"; import "package:photos/utils/crypto_util.dart"; +import "package:photos/utils/lockscreen_setting.dart"; import 'package:pinput/pinput.dart'; class LockScreenOptionPin extends StatefulWidget { @@ -27,7 +27,8 @@ class LockScreenOptionPin extends StatefulWidget { class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); - Configuration configuration = Configuration.instance; + + final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; late String hashedPin; @override void dispose() { @@ -49,7 +50,7 @@ class _LockScreenOptionPinState extends State { } Future confirmPinAuth(String code) async { - final Uint8List? salt = await configuration.getSalt(); + final Uint8List? salt = await _lockscreenSetting.getSalt(); final hash = cryptoPwHash({ "password": utf8.encode(code), "salt": salt, diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 478f1b2df9..a9e89c10c7 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -20,8 +20,8 @@ import 'package:photos/ui/components/captioned_text_widget.dart'; import 'package:photos/ui/components/expandable_menu_item_widget.dart'; import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; import 'package:photos/ui/components/toggle_switch_widget.dart'; -import "package:photos/ui/settings/TEMP/lock_screen_option.dart"; import 'package:photos/ui/settings/common_settings.dart'; +import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; import "package:photos/utils/auth_util.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/dialog_util.dart"; diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index ea86e72da2..b105376f7a 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -3,16 +3,17 @@ import 'package:local_auth/local_auth.dart'; import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_ios/local_auth_ios.dart'; import 'package:logging/logging.dart'; -import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/services/local_authentication_service.dart"; +import "package:photos/utils/lockscreen_setting.dart"; Future requestAuthentication(BuildContext context, String reason) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); - final Configuration configuration = Configuration.instance; - final String? savedPin = await configuration.getPin(); - final String? savedPassword = await configuration.getPassword(); + + final LockscreenSetting lockscreenSetting = LockscreenSetting.instance; + final String? savedPin = await lockscreenSetting.getPin(); + final String? savedPassword = await lockscreenSetting.getPassword(); if (savedPassword != null || savedPin != null) { return await LocalAuthenticationService.instance .requestEnteAuthForLockScreen(context, savedPin, savedPassword); diff --git a/mobile/lib/utils/lockscreen_setting.dart b/mobile/lib/utils/lockscreen_setting.dart new file mode 100644 index 0000000000..fc5e435700 --- /dev/null +++ b/mobile/lib/utils/lockscreen_setting.dart @@ -0,0 +1,96 @@ +import "dart:convert"; + +import "package:flutter/foundation.dart"; +import "package:flutter_secure_storage/flutter_secure_storage.dart"; +import "package:flutter_sodium/flutter_sodium.dart"; +import "package:photos/utils/crypto_util.dart"; + +class LockscreenSetting { + LockscreenSetting._privateConstructor(); + + static final LockscreenSetting instance = + LockscreenSetting._privateConstructor(); + static const password = "user_pass"; + static const pin = "user_pin"; + static const saltKey = "user_salt"; + + late FlutterSecureStorage _secureStorage; + + void init(FlutterSecureStorage secureStorage) { + _secureStorage = secureStorage; + } + + static Uint8List generateSalt() { + return Sodium.randombytesBuf(Sodium.cryptoPwhashSaltbytes); + } + + Future setPin(String userPin) async { + await _secureStorage.delete(key: saltKey); + + final salt = generateSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(userPin), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + final String saltPin = base64Encode(salt); + final String hashedPin = base64Encode(hash); + + await _secureStorage.write(key: saltKey, value: saltPin); + await _secureStorage.write(key: pin, value: hashedPin); + await _secureStorage.delete(key: password); + + return; + } + + Future getSalt() async { + final String? salt = await _secureStorage.read(key: saltKey); + if (salt == null) return null; + return base64Decode(salt); + } + + Future getPin() async { + return _secureStorage.read(key: pin); + } + + Future setPassword(String pass) async { + await _secureStorage.delete(key: saltKey); + + final salt = generateSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(pass), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + final String saltPassword = base64Encode(salt); + final String hashPassword = base64Encode(hash); + + await _secureStorage.write(key: saltKey, value: saltPassword); + await _secureStorage.write(key: password, value: hashPassword); + await _secureStorage.delete(key: pin); + + return; + } + + Future getPassword() async { + return _secureStorage.read(key: password); + } + + Future removePinAndPassword() async { + await _secureStorage.delete(key: saltKey); + await _secureStorage.delete(key: pin); + await _secureStorage.delete(key: password); + } + + Future isPinSet() async { + return await _secureStorage.containsKey(key: pin); + } + + Future isPasswordSet() async { + return await _secureStorage.containsKey(key: password); + } +} From 1d5366c6b60d9055619ff388a03fbac136215244 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 27 Jun 2024 10:05:43 +0530 Subject: [PATCH 028/466] [mob][photos] upgrade photo_manager --- mobile/pubspec.lock | 4 ++-- mobile/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 9beaf2f2f3..bd536e27a7 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1803,10 +1803,10 @@ packages: dependency: "direct main" description: name: photo_manager - sha256: df594f989f0c31cdb3ed48f3d49cb9ffadf11cc3700d2c3460b1912c93432621 + sha256: "68d6099d07ce5033170f8368af8128a4555cf1d590a97242f83669552de989b1" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.2.0" photo_manager_image_provider: dependency: transitive description: diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index ce76349f15..58116972ce 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -136,7 +136,7 @@ dependencies: path_provider: ^2.1.1 pedantic: ^1.9.2 permission_handler: ^11.0.1 - photo_manager: ^3.0.0 + photo_manager: ^3.2.0 photo_view: ^0.14.0 pinput: ^1.2.2 pointycastle: ^3.7.3 From 20c33fd00be835c074520f43d0c6c5c875bbadad Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 27 Jun 2024 12:50:39 +0530 Subject: [PATCH 029/466] [mob][photos] Workaround for visibility icon disappearing when password is wrong in lock screen password --- .../settings/lockscreen/lock_screen_option_confirm_password.dart | 1 + .../lib/ui/settings/lockscreen/lock_screen_option_password.dart | 1 + 2 files changed, 2 insertions(+) diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart index 3b3840bd31..2cb22dac92 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart @@ -148,6 +148,7 @@ class _LockScreenOptionConfirmPasswordState textCapitalization: TextCapitalization.none, textEditingController: _confirmPasswordController, isPasswordInput: true, + shouldSurfaceExecutionStates: false, onChange: (p0) { _isFormValid.value = _confirmPasswordController.text.isNotEmpty; diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart index 5831a65337..95bcf1759a 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart @@ -178,6 +178,7 @@ class _LockScreenOptionPasswordState extends State { textCapitalization: TextCapitalization.none, textEditingController: _passwordController, isPasswordInput: true, + shouldSurfaceExecutionStates: false, onChange: (p0) { _isFormValid.value = _passwordController.text.isNotEmpty; }, From 6f952724001d499d9aee5d7f4f84c90d660b91b1 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 27 Jun 2024 12:54:26 +0530 Subject: [PATCH 030/466] [mob][photos] Deprecate isPasswordInput in TextInputWidget, since the widget is becoming bloated and hard to maintain. Will be create a separate PasswordInputWidget instead in future --- mobile/lib/ui/components/text_input_widget.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mobile/lib/ui/components/text_input_widget.dart b/mobile/lib/ui/components/text_input_widget.dart index d97334585e..0d4fd7aeca 100644 --- a/mobile/lib/ui/components/text_input_widget.dart +++ b/mobile/lib/ui/components/text_input_widget.dart @@ -35,6 +35,9 @@ class TextInputWidget extends StatefulWidget { final bool popNavAfterSubmission; final bool shouldSurfaceExecutionStates; final TextCapitalization? textCapitalization; + @Deprecated( + "Do not use this widget for password input. Create a separate PasswordInputWidget. This widget is becoming bloated and hard to maintain, so will create a PasswordInputWidget and remove this field from this widget in future", + ) final bool isPasswordInput; ///Clear comes in the form of a suffix icon. It is unrelated to onCancel. From bdbed2aa17f4fabbd357df05cf6eb851f69950a2 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Thu, 27 Jun 2024 13:33:40 +0530 Subject: [PATCH 031/466] [mob][photos] Show errorText with border on invalid Pin --- .../lockscreen/lock_screen_option.dart | 30 +++++++---------- .../lock_screen_option_password.dart | 2 ++ .../lockscreen/lock_screen_option_pin.dart | 32 ++++++++++--------- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart index 59725f2fc6..d7d9c31f99 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart @@ -134,29 +134,13 @@ class _LockScreenOptionState extends State { ), ), const Padding( - padding: EdgeInsets.only(top: 16), + padding: EdgeInsets.only(top: 24), ), - appLock - ? Container() - : Padding( - padding: const EdgeInsets.only( - left: 14, - right: 12, - ), - child: Text( - 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', - style: textTheme.miniFaint, - textAlign: TextAlign.left, - ), - ), ], ), appLock ? Column( children: [ - const SizedBox( - height: 24, - ), MenuItemWidget( captionedTextWidget: const CaptionedTextWidget( @@ -211,7 +195,17 @@ class _LockScreenOptionState extends State { ), ], ) - : Container(), + : Padding( + padding: const EdgeInsets.only( + left: 14, + right: 12, + ), + child: Text( + 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', + style: textTheme.miniFaint, + textAlign: TextAlign.left, + ), + ), ], ), ), diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart index 5831a65337..d9f03c9be0 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart @@ -18,6 +18,8 @@ class LockScreenOptionPassword extends StatefulWidget { this.isAuthenticating = false, this.authPass, }); + + /// If [isAuthenticating] is true then we are authenticating the user final bool isAuthenticating; final String? authPass; @override diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart index 7f574dae1e..e64e52f284 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart @@ -19,6 +19,7 @@ class LockScreenOptionPin extends StatefulWidget { this.authPin, }); + /// If [isAuthenticating] is true then we are authenticating the user final bool isAuthenticating; final String? authPin; @override @@ -29,7 +30,9 @@ class _LockScreenOptionPinState extends State { final _pinController = TextEditingController(text: null); final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; - late String hashedPin; + late String enteredHashedPin; + bool isPinValid = false; + @override void dispose() { super.dispose(); @@ -58,14 +61,20 @@ class _LockScreenOptionPinState extends State { "memLimit": Sodium.cryptoPwhashMemlimitInteractive, }); - hashedPin = base64Encode(hash); - if (widget.authPin == hashedPin) { + enteredHashedPin = base64Encode(hash); + if (widget.authPin == enteredHashedPin) { Navigator.of(context).pop(true); return true; } - - _pinController.clear(); + setState(() { + isPinValid = true; + }); await HapticFeedback.vibrate(); + await Future.delayed(const Duration(milliseconds: 75)); + _pinController.clear(); + setState(() { + isPinValid = false; + }); return false; } @@ -207,23 +216,16 @@ class _LockScreenOptionPinState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), border: Border.all( - color: colorTheme.fillBase, + color: colorTheme.warning400, ), ), textStyle: textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), - // validator: widget.isAuthenticating - // ? (value) { - // if (widget.authPin == hashedPin) { - // return null; - // } - // return 'Invalid PIN'; - // } - // : null, - errorText: '', + forceErrorState: isPinValid, obscureText: true, obscuringCharacter: '*', + errorText: '', onCompleted: (value) async { await Future.delayed(const Duration(milliseconds: 250)); await _confirmPin(_pinController.text); From 6bf00c40a0748695767a35b21d51540416476028 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 28 Jun 2024 15:55:46 +0530 Subject: [PATCH 032/466] [mob][photos] Fix: Intermittent disappearance of favorite album on 'On Ente' section Quite possible the on ente section is built before favorites service is finished initialising which is causing this issue. Reloading after init is compelte should fix this bug --- .../favorites_service_init_complete_event.dart | 3 +++ mobile/lib/services/favorites_service.dart | 2 ++ mobile/lib/ui/tabs/user_collections_tab.dart | 12 +++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 mobile/lib/events/favorites_service_init_complete_event.dart diff --git a/mobile/lib/events/favorites_service_init_complete_event.dart b/mobile/lib/events/favorites_service_init_complete_event.dart new file mode 100644 index 0000000000..e9a404bffa --- /dev/null +++ b/mobile/lib/events/favorites_service_init_complete_event.dart @@ -0,0 +1,3 @@ +import "package:photos/events/event.dart"; + +class FavoritesServiceInitCompleteEvent extends Event {} diff --git a/mobile/lib/services/favorites_service.dart b/mobile/lib/services/favorites_service.dart index 2f64e63d41..42a1252cf6 100644 --- a/mobile/lib/services/favorites_service.dart +++ b/mobile/lib/services/favorites_service.dart @@ -7,6 +7,7 @@ import 'package:photos/core/configuration.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/db/files_db.dart'; import 'package:photos/events/collection_updated_event.dart'; +import "package:photos/events/favorites_service_init_complete_event.dart"; import 'package:photos/events/files_updated_event.dart'; import 'package:photos/models/api/collection/create_request.dart'; import 'package:photos/models/collection/collection.dart'; @@ -52,6 +53,7 @@ class FavoritesService { } }); await _warmUpCache(); + Bus.instance.fire(FavoritesServiceInitCompleteEvent()); } void dispose() { diff --git a/mobile/lib/ui/tabs/user_collections_tab.dart b/mobile/lib/ui/tabs/user_collections_tab.dart index 93e5b19822..b3d1a64327 100644 --- a/mobile/lib/ui/tabs/user_collections_tab.dart +++ b/mobile/lib/ui/tabs/user_collections_tab.dart @@ -5,6 +5,7 @@ import 'package:logging/logging.dart'; import "package:photos/core/configuration.dart"; import 'package:photos/core/event_bus.dart'; import 'package:photos/events/collection_updated_event.dart'; +import "package:photos/events/favorites_service_init_complete_event.dart"; import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/events/user_logged_out_event.dart'; import "package:photos/generated/l10n.dart"; @@ -43,6 +44,9 @@ class _UserCollectionsTabState extends State late StreamSubscription _collectionUpdatesSubscription; late StreamSubscription _loggedOutEvent; + late StreamSubscription + _favoritesServiceInitCompleteEvent; + AlbumSortKey? sortKey; String _loadReason = "init"; final _scrollController = ScrollController(); @@ -54,6 +58,7 @@ class _UserCollectionsTabState extends State static const int _kOnEnteItemLimitCount = 10; @override void initState() { + super.initState(); _localFilesSubscription = Bus.instance.on().listen((event) { _debouncer.run(() async { @@ -76,8 +81,12 @@ class _UserCollectionsTabState extends State _loadReason = event.reason; setState(() {}); }); + _favoritesServiceInitCompleteEvent = + Bus.instance.on().listen((event) { + _loadReason = event.reason; + setState(() {}); + }); sortKey = LocalSettings.instance.albumSortKey(); - super.initState(); } @override @@ -285,6 +294,7 @@ class _UserCollectionsTabState extends State _localFilesSubscription.cancel(); _collectionUpdatesSubscription.cancel(); _loggedOutEvent.cancel(); + _favoritesServiceInitCompleteEvent.cancel(); _scrollController.dispose(); _debouncer.cancelDebounce(); super.dispose(); From 0a4abada00e1f24e7c45a5fd239a135af64e29c1 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 28 Jun 2024 16:38:48 +0530 Subject: [PATCH 033/466] [mob][photos] add debouncer to reloading user collections tab on FavoritesServiceInitCompleteEvent --- mobile/lib/ui/tabs/user_collections_tab.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mobile/lib/ui/tabs/user_collections_tab.dart b/mobile/lib/ui/tabs/user_collections_tab.dart index b3d1a64327..20a012d0c2 100644 --- a/mobile/lib/ui/tabs/user_collections_tab.dart +++ b/mobile/lib/ui/tabs/user_collections_tab.dart @@ -83,8 +83,10 @@ class _UserCollectionsTabState extends State }); _favoritesServiceInitCompleteEvent = Bus.instance.on().listen((event) { - _loadReason = event.reason; - setState(() {}); + _debouncer.run(() async { + _loadReason = event.reason; + setState(() {}); + }); }); sortKey = LocalSettings.instance.albumSortKey(); } From 094d4053fb170fd7113ce132a5cfe24024e89900 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 28 Jun 2024 18:50:58 +0530 Subject: [PATCH 034/466] [mob][photos] unselect all selected items on system back navigation --- mobile/lib/ui/tabs/home_widget.dart | 10 +++++++--- .../actions/file_selection_overlay_bar.dart | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/mobile/lib/ui/tabs/home_widget.dart b/mobile/lib/ui/tabs/home_widget.dart index ddad5073b0..3c902ceb1a 100644 --- a/mobile/lib/ui/tabs/home_widget.dart +++ b/mobile/lib/ui/tabs/home_widget.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:io'; +import "dart:io"; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; @@ -7,9 +7,9 @@ import 'package:flutter/services.dart'; import "package:flutter_animate/flutter_animate.dart"; import "package:flutter_local_notifications/flutter_local_notifications.dart"; import 'package:logging/logging.dart'; -import 'package:media_extension/media_extension_action_types.dart'; +import "package:media_extension/media_extension_action_types.dart"; import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; -import 'package:move_to_background/move_to_background.dart'; +import "package:move_to_background/move_to_background.dart"; import 'package:photos/core/configuration.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/ente_theme_data.dart'; @@ -320,6 +320,10 @@ class _HomeWidgetState extends State { onPopInvoked: (didPop) async { if (didPop) return; if (_selectedTabIndex == 0) { + if (_selectedFiles.files.isNotEmpty) { + _selectedFiles.clearAll(); + return; + } if (isSettingsOpen) { Navigator.pop(context); } else if (Platform.isAndroid && action == IntentAction.main) { diff --git a/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart b/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart index 608286809c..86d162e316 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart @@ -54,6 +54,23 @@ class _FileSelectionOverlayBarState extends State { '$runtimeType building with ${widget.selectedFiles.files.length}', ); + return widget.galleryType == GalleryType.homepage + ? _body() + : PopScope( + canPop: false, + onPopInvoked: (didPop) { + if (!didPop) { + if (widget.selectedFiles.files.isEmpty) { + Navigator.of(context).pop(); + } + widget.selectedFiles.clearAll(); + } + }, + child: _body(), + ); + } + + Widget _body() { return ValueListenableBuilder( valueListenable: _hasSelectedFilesNotifier, builder: (context, value, child) { From 6f0a36acde9c5e31878ac6ed69fc3c2ca6c2e7ed Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 28 Jun 2024 22:13:13 +0530 Subject: [PATCH 035/466] Inline --- .../CollectionListBar/CollectionCard.tsx | 25 +++++++++++++++++-- .../photos/src/components/TruncateText.tsx | 23 ----------------- 2 files changed, 23 insertions(+), 25 deletions(-) delete mode 100644 web/apps/photos/src/components/TruncateText.tsx diff --git a/web/apps/photos/src/components/Collections/CollectionListBar/CollectionCard.tsx b/web/apps/photos/src/components/Collections/CollectionListBar/CollectionCard.tsx index a88534fef4..9cb8de3124 100644 --- a/web/apps/photos/src/components/Collections/CollectionListBar/CollectionCard.tsx +++ b/web/apps/photos/src/components/Collections/CollectionListBar/CollectionCard.tsx @@ -3,8 +3,8 @@ import Favorite from "@mui/icons-material/FavoriteRounded"; import LinkIcon from "@mui/icons-material/Link"; import PeopleIcon from "@mui/icons-material/People"; import PushPin from "@mui/icons-material/PushPin"; -import { Box } from "@mui/material"; -import TruncateText from "components/TruncateText"; +import { Box, Typography, styled } from "@mui/material"; +import Tooltip from "@mui/material/Tooltip"; import { CollectionSummaryType } from "constants/collection"; import { CollectionSummary } from "types/collection"; import CollectionCard from "../CollectionCard"; @@ -78,3 +78,24 @@ function CollectionCardIcon({ collectionType }) { } export default CollectionListBarCard; + +const TruncateText = ({ text }) => { + return ( + + + + {text} + + + + ); +}; + +const Ellipse = styled(Typography)` + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; //number of lines to show + line-clamp: 2; + -webkit-box-orient: vertical; +`; diff --git a/web/apps/photos/src/components/TruncateText.tsx b/web/apps/photos/src/components/TruncateText.tsx deleted file mode 100644 index 3d34972157..0000000000 --- a/web/apps/photos/src/components/TruncateText.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Box, styled, Typography } from "@mui/material"; -import Tooltip from "@mui/material/Tooltip"; - -const Ellipse = styled(Typography)` - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; //number of lines to show - line-clamp: 2; - -webkit-box-orient: vertical; -`; - -export default function TruncateText({ text }) { - return ( - - - - {text} - - - - ); -} From f167839ddc1eec70ca10667fa3ba7e1f2c346cf4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 28 Jun 2024 22:15:36 +0530 Subject: [PATCH 036/466] Fix overflowing file name on download success notification Ellipse text in notifications. This wasn't happening earlier if the file name was long, without spaces to act as breaks. --- .../photos/src/components/Notification.tsx | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/web/apps/photos/src/components/Notification.tsx b/web/apps/photos/src/components/Notification.tsx index f1e996b3c8..0ade15c750 100644 --- a/web/apps/photos/src/components/Notification.tsx +++ b/web/apps/photos/src/components/Notification.tsx @@ -7,6 +7,7 @@ import { SxProps, Theme, Typography, + styled, type ButtonProps, } from "@mui/material"; import { NotificationAttributes } from "types/Notification"; @@ -72,6 +73,7 @@ export default function Notification({ spacing={2} direction="row" alignItems={"center"} + width={"100%"} > {attributes.startIcon ?? } @@ -82,26 +84,29 @@ export default function Notification({ spacing={0.5} flex={1} textAlign="left" + // This is necessary to trigger the ellipsizing of the + // text in children. + overflow="hidden" > {attributes.subtext && ( - + {attributes.subtext} - + )} {attributes.message && ( - + {attributes.message} - + )} {attributes.title && ( - + {attributes.title} - + )} {attributes.caption && ( - + {attributes.caption} - + )} @@ -122,3 +127,9 @@ export default function Notification({ ); } + +const EllipsizedTypography = styled(Typography)` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +`; From c9eaa2df1297ab7e6b545b999a811d5addbb4c4e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 08:03:36 +0530 Subject: [PATCH 037/466] Fix --- .../components/Collections/CollectionShare/emailShare/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index e4bce9a93a..9d2444e8aa 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -64,7 +64,7 @@ export default function EmailShare({ onClick={openManageEmailShare} label={ collection.sharees.length === 1 - ? t(collection.sharees[0]?.email) + ? collection.sharees[0]?.email : null } endIcon={} From 58127591d05dbb2b41dff570d3e3430a9f1b5fa6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 08:08:55 +0530 Subject: [PATCH 038/466] Mark as pending translation --- .../components/Upload/UploadTypeSelector.tsx | 13 +++++++------ web/packages/next/i18n.ts | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx index 027f6bd8c1..5e524fe8b3 100644 --- a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx +++ b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx @@ -1,4 +1,5 @@ import { FocusVisibleButton } from "@/new/photos/components/FocusVisibleButton"; +import { pt } from "@/next/i18n"; import DialogTitleWithCloseButton, { DialogTitleWithCloseButtonSm, dialogCloseHandler, @@ -202,7 +203,6 @@ const TakeoutOptions: React.FC> = ({ onSelect, onClose, }) => { - // TODO(MR): Move these to localized strings when finalized. return ( <> @@ -218,7 +218,7 @@ const TakeoutOptions: React.FC> = ({ disableRipple onClick={() => onSelect("folders")} > - {t("Select folder")} + {pt("Select folder")} > = ({ disableRipple onClick={() => onSelect("zips")} > - {t("Select zips")} + {pt("Select zips")} > = ({ fullWidth disableRipple > - {t("FAQ")} + {pt("FAQ")} - Unzip all zips into the same folder and upload that. Or - upload the zips directly. See FAQ for details. + {pt( + "Unzip all zips into the same folder and upload that. Or upload the zips directly. See FAQ for details.", + )} diff --git a/web/packages/next/i18n.ts b/web/packages/next/i18n.ts index da63bc8c51..046dcd5c11 100644 --- a/web/packages/next/i18n.ts +++ b/web/packages/next/i18n.ts @@ -262,6 +262,21 @@ export const setLocaleInUse = async (locale: SupportedLocale) => { return i18n.changeLanguage(locale); }; +/** + * A no-op marker for strings that, for various reasons, pending addition to the + * translation dataset. + * + * This function does nothing, it just returns back the passed it string + * verbatim. It is only kept as a way for us to keep track of strings which + * we've not yet added to the list of strings that should be translated (e.g. + * perhaps we're awaiting feedback on the copy). + * + * It is the sibling of the {@link t} function provided by i18next. + * + * See also: {@link ut}. + */ +export const pt = (s: string) => s; + /** * A no-op marker for strings that, for various reasons, are not translated. * @@ -270,6 +285,8 @@ export const setLocaleInUse = async (locale: SupportedLocale) => { * not translated (and for some reason, are currently not meant to be), but * still are user visible. * - * It is the sibling of the {@link t} function provided by i18next. + * It is the sibling of the {@link t} function provided by i18next. See also + * + * See also: {@link pt}. */ export const ut = (s: string) => s; From 730ca2119ccf65779ccd414428ea910737ede94c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 08:09:24 +0530 Subject: [PATCH 039/466] Fix typo --- web/apps/photos/src/services/export/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index 38f73a4240..754c3dc980 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -1329,7 +1329,7 @@ const readOnDiskFileExportRecordIDs = async ( * * @param allFiles The list of files to export. * - * @param exportRecord The export record containing bookeeping for the export. + * @param exportRecord The export record containing bookkeeping for the export. * * @paramd diskFileRecordIDs (Optional) The export record IDs of files from * amongst {@link allFiles} that already exist on disk. If provided (e.g. when From ee3ddad4d1794c1634678f07a4eec565474cd630 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 08:10:54 +0530 Subject: [PATCH 040/466] Fix --- web/packages/next/i18n.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/next/i18n.ts b/web/packages/next/i18n.ts index 046dcd5c11..cec28add94 100644 --- a/web/packages/next/i18n.ts +++ b/web/packages/next/i18n.ts @@ -285,7 +285,7 @@ export const pt = (s: string) => s; * not translated (and for some reason, are currently not meant to be), but * still are user visible. * - * It is the sibling of the {@link t} function provided by i18next. See also + * It is the sibling of the {@link t} function provided by i18next. * * See also: {@link pt}. */ From 5da4028ebfba3e60b7f92bc2efee47a7c4a17f64 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 08:31:28 +0530 Subject: [PATCH 041/466] [desktop] Speed up reconciliation by doing an upfront directory listing --- desktop/src/main/ipc.ts | 10 ++++---- desktop/src/main/services/fs.ts | 15 ++++++++++++ desktop/src/main/services/watch.ts | 16 ------------- desktop/src/preload.ts | 6 ++--- .../photos/src/components/WatchFolder.tsx | 2 +- web/apps/photos/src/services/export/index.ts | 15 ++++++++++-- web/apps/photos/src/services/watch.ts | 2 +- web/packages/next/types/ipc.ts | 24 +++++++++---------- 8 files changed, 50 insertions(+), 40 deletions(-) diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index 55f5f8530e..d6672fa3ab 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -31,6 +31,7 @@ import { import { ffmpegExec } from "./services/ffmpeg"; import { fsExists, + fsFindFiles, fsIsDir, fsMkdirIfNeeded, fsReadTextFile, @@ -63,7 +64,6 @@ import { } from "./services/upload"; import { watchAdd, - watchFindFiles, watchGet, watchRemove, watchUpdateIgnoredFiles, @@ -154,6 +154,10 @@ export const attachIPCHandlers = () => { ipcMain.handle("fsIsDir", (_, dirPath: string) => fsIsDir(dirPath)); + ipcMain.handle("fsFindFiles", (_, folderPath: string) => + fsFindFiles(folderPath), + ); + // - Conversion ipcMain.handle("convertToJPEG", (_, imageData: Uint8Array) => @@ -262,10 +266,6 @@ export const attachFSWatchIPCHandlers = (watcher: FSWatcher) => { (_, ignoredFiles: FolderWatch["ignoredFiles"], folderPath: string) => watchUpdateIgnoredFiles(ignoredFiles, folderPath), ); - - ipcMain.handle("watchFindFiles", (_, folderPath: string) => - watchFindFiles(folderPath), - ); }; /** diff --git a/desktop/src/main/services/fs.ts b/desktop/src/main/services/fs.ts index 4570a4a33a..a909ebf493 100644 --- a/desktop/src/main/services/fs.ts +++ b/desktop/src/main/services/fs.ts @@ -4,6 +4,7 @@ import { existsSync } from "node:fs"; import fs from "node:fs/promises"; +import path from "node:path"; export const fsExists = (path: string) => existsSync(path); @@ -28,3 +29,17 @@ export const fsIsDir = async (dirPath: string) => { const stat = await fs.stat(dirPath); return stat.isDirectory(); }; + +export const fsFindFiles = async (dirPath: string) => { + const items = await fs.readdir(dirPath, { withFileTypes: true }); + let paths: string[] = []; + for (const item of items) { + const itemPath = path.posix.join(dirPath, item.name); + if (item.isFile()) { + paths.push(itemPath); + } else if (item.isDirectory()) { + paths = [...paths, ...(await fsFindFiles(itemPath))]; + } + } + return paths; +}; diff --git a/desktop/src/main/services/watch.ts b/desktop/src/main/services/watch.ts index a65fade8f5..6f198c513b 100644 --- a/desktop/src/main/services/watch.ts +++ b/desktop/src/main/services/watch.ts @@ -1,7 +1,5 @@ import chokidar, { type FSWatcher } from "chokidar"; import { BrowserWindow } from "electron/main"; -import fs from "node:fs/promises"; -import path from "node:path"; import { FolderWatch, type CollectionMapping } from "../../types/ipc"; import log from "../log"; import { watchStore } from "../stores/watch"; @@ -143,20 +141,6 @@ export const watchUpdateIgnoredFiles = ( ); }; -export const watchFindFiles = async (dirPath: string) => { - const items = await fs.readdir(dirPath, { withFileTypes: true }); - let paths: string[] = []; - for (const item of items) { - const itemPath = path.posix.join(dirPath, item.name); - if (item.isFile()) { - paths.push(itemPath); - } else if (item.isDirectory()) { - paths = [...paths, ...(await watchFindFiles(itemPath))]; - } - } - return paths; -}; - /** * Stop watching all existing folder watches and remove any callbacks. * diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 50fb8b15c7..29bf9c0946 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -216,8 +216,8 @@ const watchOnRemoveDir = (f: (path: string, watch: FolderWatch) => void) => { ); }; -const watchFindFiles = (folderPath: string) => - ipcRenderer.invoke("watchFindFiles", folderPath); +const fsFindFiles = (folderPath: string) => + ipcRenderer.invoke("fsFindFiles", folderPath); const watchRemoveListeners = () => { ipcRenderer.removeAllListeners("watchAddFile"); @@ -340,6 +340,7 @@ contextBridge.exposeInMainWorld("electron", { readTextFile: fsReadTextFile, writeFile: fsWriteFile, isDir: fsIsDir, + findFiles: fsFindFiles, }, // - Conversion @@ -366,7 +367,6 @@ contextBridge.exposeInMainWorld("electron", { onAddFile: watchOnAddFile, onRemoveFile: watchOnRemoveFile, onRemoveDir: watchOnRemoveDir, - findFiles: watchFindFiles, }, // - Upload diff --git a/web/apps/photos/src/components/WatchFolder.tsx b/web/apps/photos/src/components/WatchFolder.tsx index e99fbb0073..b5bd80e2c8 100644 --- a/web/apps/photos/src/components/WatchFolder.tsx +++ b/web/apps/photos/src/components/WatchFolder.tsx @@ -82,7 +82,7 @@ export const WatchFolder: React.FC = ({ open, onClose }) => { }; const selectCollectionMappingAndAddWatch = async (path: string) => { - const filePaths = await ensureElectron().watch.findFiles(path); + const filePaths = await ensureElectron().fs.findFiles(path); if (areAllInSameDirectory(filePaths)) { addWatch(path, "root"); } else { diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index 754c3dc980..f63760464a 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -1283,6 +1283,17 @@ const readOnDiskFileExportRecordIDs = async ( const result = new Set(); if (!(await fs.exists(exportDir))) return result; + // Both the paths involved are guaranteed to use POSIX separators and thus + // can directly be compared. + // + // - `exportDir` traces its origin to `electron.selectDirectory()`, which + // returns POSIX paths. Down below we use it as the base directory when + // construction paths for the items to export. + // + // - `findFiles` is also guaranteed to return POSIX paths. + // + const ls = new Set(await ensureElectron().fs.findFiles(exportDir)); + const fileExportNames = exportRecord.fileExportNames ?? {}; for (const file of files) { @@ -1309,11 +1320,11 @@ const readOnDiskFileExportRecordIDs = async ( } const filePath = `${collectionExportPath}/${fileName}`; - if (await fs.exists(filePath)) { + if (ls.has(filePath)) { // Also check that the sibling part exists (if any). if (fileName2) { const filePath2 = `${collectionExportPath}/${fileName2}`; - if (await fs.exists(filePath2)) result.add(recordID); + if (ls.has(filePath2)) result.add(recordID); } else { result.add(recordID); } diff --git a/web/apps/photos/src/services/watch.ts b/web/apps/photos/src/services/watch.ts index e9f7f33005..597bbe29cc 100644 --- a/web/apps/photos/src/services/watch.ts +++ b/web/apps/photos/src/services/watch.ts @@ -561,7 +561,7 @@ const deduceEvents = async (watches: FolderWatch[]): Promise => { for (const watch of watches) { const folderPath = watch.folderPath; - const filePaths = await electron.watch.findFiles(folderPath); + const filePaths = await electron.fs.findFiles(folderPath); // Files that are on disk but not yet synced. for (const filePath of pathsToUpload(filePaths, watch)) diff --git a/web/packages/next/types/ipc.ts b/web/packages/next/types/ipc.ts index 21246ea660..4f68d50d73 100644 --- a/web/packages/next/types/ipc.ts +++ b/web/packages/next/types/ipc.ts @@ -234,6 +234,18 @@ export interface Electron { * directory. */ isDir: (dirPath: string) => Promise; + + /** + * Return the paths of all the files under the given folder. + * + * This function walks the directory tree starting at {@link folderPath} + * and returns a list of the absolute paths of all the files that exist + * therein. It will recursively traverse into nested directories, and + * return the absolute paths of the files there too. + * + * The returned paths are guaranteed to use POSIX separators ('/'). + */ + findFiles: (folderPath: string) => Promise; }; // - Conversion @@ -479,18 +491,6 @@ export interface Electron { * The path is guaranteed to use POSIX separators ('/'). */ onRemoveDir: (f: (path: string, watch: FolderWatch) => void) => void; - - /** - * Return the paths of all the files under the given folder. - * - * This function walks the directory tree starting at {@link folderPath} - * and returns a list of the absolute paths of all the files that exist - * therein. It will recursively traverse into nested directories, and - * return the absolute paths of the files there too. - * - * The returned paths are guaranteed to use POSIX separators ('/'). - */ - findFiles: (folderPath: string) => Promise; }; // - Upload From 51eec12af5a26c6983154db59b12fdfe28d6e6b7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 09:13:14 +0530 Subject: [PATCH 042/466] Avoid JSON parsing, and even when we have to, don't do it twice --- web/apps/photos/src/services/export/index.ts | 31 +++++++++----------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index f63760464a..4afe2e7bcc 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -1309,24 +1309,21 @@ const readOnDiskFileExportRecordIDs = async ( const exportName = fileExportNames[recordID]; if (!exportName) continue; - let fileName: string; - let fileName2: string | undefined; // Live photos have 2 parts - if (isLivePhotoExportName(exportName)) { - const { image, video } = parseLivePhotoExportName(exportName); - fileName = image; - fileName2 = video; + if (ls.has(`${collectionExportPath}/${exportName}`)) { + result.add(recordID); } else { - fileName = exportName; - } - - const filePath = `${collectionExportPath}/${fileName}`; - if (ls.has(filePath)) { - // Also check that the sibling part exists (if any). - if (fileName2) { - const filePath2 = `${collectionExportPath}/${fileName2}`; - if (ls.has(filePath2)) result.add(recordID); - } else { - result.add(recordID); + // It might be a live photo - these store a JSON string instead of + // the file's name as the exportName. + try { + const { image, video } = parseLivePhotoExportName(exportName); + if ( + ls.has(`${collectionExportPath}/${image}`) && + ls.has(`${collectionExportPath}/${video}`) + ) { + result.add(recordID); + } + } catch { + /* Not an error, the file just might not exist on disk yet */ } } } From 0943d1db8cf6a012389148892f0a6a2c693f28ae Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 18:22:54 +0530 Subject: [PATCH 043/466] wip doc --- web/packages/new/photos/services/embedding.ts | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 9492a47e11..219747e826 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -1,9 +1,9 @@ import { authenticatedRequestHeaders } from "@/next/http"; import { apiURL } from "@/next/origins"; import { nullToUndefined } from "@/utils/transform"; -// import ComlinkCryptoWorker from "@ente/shared/crypto"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; import { z } from "zod"; -// import { getAllLocalFiles } from "./files"; +import { getAllLocalFiles } from "./files"; /** * The embeddings that we (the current client) knows how to handle. @@ -74,15 +74,47 @@ type RemoteEmbedding = z.infer; /** * Ask remote for what all changes have happened to the face embeddings that it - * knows about since the last time we synced. Then update our local state to - * reflect those changes. + * knows about since the last time we synced. Update our local state to reflect + * those changes. * * It takes no parameters since it saves the last sync time in local storage. + * + * Precondition: This function should be called only after we have synced files + * with remote (See: [Note: Ignoring embeddings for unknown files]). */ export const syncRemoteFaceEmbeddings = async () => { let sinceTime = faceEmbeddingSyncTime(); - // const cryptoWorker = await ComlinkCryptoWorker.getInstance(); - // const files = await getAllLocalFiles(); + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const localFiles = await getAllLocalFiles(); + const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); + + const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { + const file = localFilesByID.get(remoteEmbedding.fileID) + // [Note: Ignoring embeddings for unknown files] + // + // We need the file to decrypt the embedding. This is easily ensured by + // running the embedding sync after we have synced our local files with + // remote. + // + // Still, it might happen that we come across an embedding for which we + // don't have the corresponding file locally. We can put them in two + // buckets: + // + // 1. Known case: In rare cases we might get a diff entry for an + // embedding corresponding to a file which has been deleted (but + // whose embedding is enqueued for deletion). Client should expect + // such a scenario, but all they have to do is just ignore such + // embeddings. + // + // 2. Other unknown cases: Even if somehow we end up with an embedding + // for a existent file which we don't have locally, it is fine + // because the current client will just regenerate the embedding if + // the file really exists and gets locally found later. There would + // be a bit of duplicate work, but that's fine as long as there + // isn't a systematic scenario where this happens. + if (!file) return undefined; + + } // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. @@ -96,7 +128,7 @@ export const syncRemoteFaceEmbeddings = async () => { ); if (remoteEmbeddings.length == 0) break; // const _embeddings = Promise.all( - // remoteEmbeddings.map(decryptFaceEmbedding), + // remoteEmbeddings.map(decryptEmbedding), // ); sinceTime = remoteEmbeddings.reduce( (max, { updatedAt }) => Math.max(max, updatedAt), @@ -106,7 +138,7 @@ export const syncRemoteFaceEmbeddings = async () => { } }; -// const decryptFaceEmbedding = async (remoteEmbedding: RemoteEmbedding) => { +const decryptFaceEmbedding = async (remoteEmbedding: RemoteEmbedding) => { // const fileKey = fileIdToKeyMap.get(embedding.fileID); // if (!fileKey) { // throw Error(CustomError.FILE_NOT_FOUND); From c4b93019d540dc4decc68c6e53465113a05dd34b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 18:37:59 +0530 Subject: [PATCH 044/466] doc 2 --- web/packages/new/photos/services/embedding.ts | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 219747e826..5ec03a7319 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -172,7 +172,39 @@ const saveFaceEmbeddingSyncTime = (t: number) => // } -/** The maximum number of items to fetch in a single GET /embeddings/diff */ +/** + * The maximum number of items to fetch in a single GET /embeddings/diff + * + * [Note: Limit of returned items in /diff requests] + * + * The various GET /diff API methods, which tell the client what all has changed + * since a timestamp (provided by the client) take a limit parameter. + * + * These diff API calls return all items whose updated at is greater + * (non-inclusive) than the timestamp we provide. So there is no mechanism for + * pagination of items which have the same exact updated at. Conceptually, it + * may happen that there are more items than the limit we've provided. + * + * The behaviour of this limit is different for file diff and embeddings diff. + * + * - For file diff, the limit is advisory, and remote may return less, equal + * or more items than the provided limit. The scenario where it returns more + * is when more files than the limit have the same updated at. Theoretically + * it would make the diff response unbounded, however in practice file + * modifications themselves are all batched. Even if the user selects all + * the files in their library and updates them all in one go in the UI, + * their client app must use batched API calls to make those updates, and + * each of those batches would get distinct updated at. + * + * - For embeddings diff, there are no bulk updates and this limit is enforced + * as a maximum. While theoretically it is possible for an arbitrary number + * of files to have the same updated at, in practice it is not possible with + * the current set of APIs where clients PUT individual embeddings (the + * updated at is a server timestamp). And even if somehow a large number of + * files get the same updated at and thus get truncated in the response, it + * won't lead to any data loss, the client which requested that particular + * truncated diff will just regenerate them. + */ const diffLimit = 500; /** @@ -188,6 +220,8 @@ const diffLimit = 500; * * @returns an array of {@link RemoteEmbedding}. The returned array is limited * to a maximum count of {@link diffLimit}. + * + * > See [Note: Limit of returned items in /diff requests]. */ const getEmbeddingsDiff = async ( model: EmbeddingModel, From d5d7efd657c715be8d42c0a6e26807ef95bcdbae Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:03:54 +0530 Subject: [PATCH 045/466] doc 3 --- web/packages/new/photos/services/embedding.ts | 5 ++--- web/packages/shared/crypto/internal/crypto.worker.ts | 1 + web/packages/shared/crypto/internal/libsodium.ts | 8 ++++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 5ec03a7319..5b422eaff1 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -73,9 +73,8 @@ const RemoteEmbedding = z.object({ type RemoteEmbedding = z.infer; /** - * Ask remote for what all changes have happened to the face embeddings that it - * knows about since the last time we synced. Update our local state to reflect - * those changes. + * Fetch new or updated face embeddings with the server and save them locally. + * Also prune local embeddings for any files no longer exist locally. * * It takes no parameters since it saves the last sync time in local storage. * diff --git a/web/packages/shared/crypto/internal/crypto.worker.ts b/web/packages/shared/crypto/internal/crypto.worker.ts index ef4f6a062e..e709aa74d6 100644 --- a/web/packages/shared/crypto/internal/crypto.worker.ts +++ b/web/packages/shared/crypto/internal/crypto.worker.ts @@ -4,6 +4,7 @@ import type { StateAddress } from "libsodium-wrappers"; const textDecoder = new TextDecoder(); const textEncoder = new TextEncoder(); + export class DedicatedCryptoWorker { async decryptMetadata( encryptedMetadata: string, diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 56094c9b2d..9906c1a858 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -1,3 +1,11 @@ +/** + * @file A thin-ish layer over the actual libsodium APIs, to make them more + * palatable to the rest of our Javascript code. + * + * All functions are stateless, async, and safe to use in Web Workers. + * + * Docs for the JS library: https://github.com/jedisct1/libsodium.js + */ import { mergeUint8Arrays } from "@/utils/array"; import { CustomError } from "@ente/shared/error"; import sodium, { type StateAddress } from "libsodium-wrappers"; From 2f7923b097af3652803a8397fdb4a21db9b3bd06 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:04:56 +0530 Subject: [PATCH 046/466] Rearrange --- .../shared/crypto/internal/libsodium.ts | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 9906c1a858..8c64bc4b0d 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -12,6 +12,91 @@ import sodium, { type StateAddress } from "libsodium-wrappers"; import { ENCRYPTION_CHUNK_SIZE } from "../constants"; import type { B64EncryptionResult } from "../types"; +export async function fromB64(input: string) { + await sodium.ready; + return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); +} + +export async function toB64(input: Uint8Array) { + await sodium.ready; + return sodium.to_base64(input, sodium.base64_variants.ORIGINAL); +} + +/** Convert a {@link Uint8Array} to a URL safe Base64 encoded string. */ +export const toB64URLSafe = async (input: Uint8Array) => { + await sodium.ready; + return sodium.to_base64(input, sodium.base64_variants.URLSAFE); +}; + +/** + * Convert a {@link Uint8Array} to a URL safe Base64 encoded string. + * + * This differs from {@link toB64URLSafe} in that it does not append any + * trailing padding character(s) "=" to make the resultant string's length be an + * integer multiple of 4. + * + * - In some contexts, for example when serializing WebAuthn binary for + * transmission over the network, this is the required / recommended + * approach. + * + * - In other cases, for example when trying to pass an arbitrary JSON string + * via a URL parameter, this is also convenient so that we do not have to + * deal with any ambiguity surrounding the "=" which is also the query + * parameter key value separator. + */ +export const toB64URLSafeNoPadding = async (input: Uint8Array) => { + await sodium.ready; + return sodium.to_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); +}; + +/** + * Convert a Base64 encoded string to a {@link Uint8Array}. + * + * This is the converse of {@link toB64URLSafeNoPadding}, and does not expect + * its input string's length to be a an integer multiple of 4. + */ +export const fromB64URLSafeNoPadding = async (input: string) => { + await sodium.ready; + return sodium.from_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); +}; + +/** + * Variant of {@link toB64URLSafeNoPadding} that works with {@link strings}. See also + * its sibling method {@link fromB64URLSafeNoPaddingString}. + */ +export const toB64URLSafeNoPaddingString = async (input: string) => { + await sodium.ready; + return toB64URLSafeNoPadding(sodium.from_string(input)); +}; + +/** + * Variant of {@link fromB64URLSafeNoPadding} that works with {@link strings}. See also + * its sibling method {@link toB64URLSafeNoPaddingString}. + */ +export const fromB64URLSafeNoPaddingString = async (input: string) => { + await sodium.ready; + return sodium.to_string(await fromB64URLSafeNoPadding(input)); +}; + +export async function fromUTF8(input: string) { + await sodium.ready; + return sodium.from_string(input); +} + +export async function toUTF8(input: string) { + await sodium.ready; + return sodium.to_string(await fromB64(input)); +} +export async function toHex(input: string) { + await sodium.ready; + return sodium.to_hex(await fromB64(input)); +} + +export async function fromHex(input: string) { + await sodium.ready; + return await toB64(sodium.from_hex(input)); +} + export async function decryptChaChaOneShot( data: Uint8Array, header: Uint8Array, @@ -396,88 +481,3 @@ export async function generateSubKey( ), ); } - -export async function fromB64(input: string) { - await sodium.ready; - return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); -} - -export async function toB64(input: Uint8Array) { - await sodium.ready; - return sodium.to_base64(input, sodium.base64_variants.ORIGINAL); -} - -/** Convert a {@link Uint8Array} to a URL safe Base64 encoded string. */ -export const toB64URLSafe = async (input: Uint8Array) => { - await sodium.ready; - return sodium.to_base64(input, sodium.base64_variants.URLSAFE); -}; - -/** - * Convert a {@link Uint8Array} to a URL safe Base64 encoded string. - * - * This differs from {@link toB64URLSafe} in that it does not append any - * trailing padding character(s) "=" to make the resultant string's length be an - * integer multiple of 4. - * - * - In some contexts, for example when serializing WebAuthn binary for - * transmission over the network, this is the required / recommended - * approach. - * - * - In other cases, for example when trying to pass an arbitrary JSON string - * via a URL parameter, this is also convenient so that we do not have to - * deal with any ambiguity surrounding the "=" which is also the query - * parameter key value separator. - */ -export const toB64URLSafeNoPadding = async (input: Uint8Array) => { - await sodium.ready; - return sodium.to_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); -}; - -/** - * Convert a Base64 encoded string to a {@link Uint8Array}. - * - * This is the converse of {@link toB64URLSafeNoPadding}, and does not expect - * its input string's length to be a an integer multiple of 4. - */ -export const fromB64URLSafeNoPadding = async (input: string) => { - await sodium.ready; - return sodium.from_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); -}; - -/** - * Variant of {@link toB64URLSafeNoPadding} that works with {@link strings}. See also - * its sibling method {@link fromB64URLSafeNoPaddingString}. - */ -export const toB64URLSafeNoPaddingString = async (input: string) => { - await sodium.ready; - return toB64URLSafeNoPadding(sodium.from_string(input)); -}; - -/** - * Variant of {@link fromB64URLSafeNoPadding} that works with {@link strings}. See also - * its sibling method {@link toB64URLSafeNoPaddingString}. - */ -export const fromB64URLSafeNoPaddingString = async (input: string) => { - await sodium.ready; - return sodium.to_string(await fromB64URLSafeNoPadding(input)); -}; - -export async function fromUTF8(input: string) { - await sodium.ready; - return sodium.from_string(input); -} - -export async function toUTF8(input: string) { - await sodium.ready; - return sodium.to_string(await fromB64(input)); -} -export async function toHex(input: string) { - await sodium.ready; - return sodium.to_hex(await fromB64(input)); -} - -export async function fromHex(input: string) { - await sodium.ready; - return await toB64(sodium.from_hex(input)); -} From 1496b60895d70a3312af611e6d336d77544617d3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:07:48 +0530 Subject: [PATCH 047/466] Inline --- web/apps/photos/src/services/upload/uploadService.ts | 2 +- web/packages/shared/crypto/constants.ts | 1 - web/packages/shared/crypto/internal/libsodium.ts | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 web/packages/shared/crypto/constants.ts diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index 66c0dcf8da..b18e0c4781 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -16,7 +16,7 @@ import { basename } from "@/next/file"; import log from "@/next/log"; import { CustomErrorMessage } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; -import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/constants"; +import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/internal/libsodium"; import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; import type { B64EncryptionResult } from "@ente/shared/crypto/types"; import { CustomError, handleUploadError } from "@ente/shared/error"; diff --git a/web/packages/shared/crypto/constants.ts b/web/packages/shared/crypto/constants.ts deleted file mode 100644 index 9226ed8744..0000000000 --- a/web/packages/shared/crypto/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024; diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 8c64bc4b0d..4337a0fb12 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -9,7 +9,6 @@ import { mergeUint8Arrays } from "@/utils/array"; import { CustomError } from "@ente/shared/error"; import sodium, { type StateAddress } from "libsodium-wrappers"; -import { ENCRYPTION_CHUNK_SIZE } from "../constants"; import type { B64EncryptionResult } from "../types"; export async function fromB64(input: string) { @@ -115,6 +114,8 @@ export async function decryptChaChaOneShot( return pullResult.message; } +export const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024; + export const decryptChaCha = async ( data: Uint8Array, header: Uint8Array, From a9e0aa13ff95fa1d644ee79d18c250bb03fb8c39 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:09:35 +0530 Subject: [PATCH 048/466] Inline --- web/apps/photos/src/services/upload/uploadService.ts | 4 ++-- web/packages/accounts/api/user.ts | 2 +- web/packages/accounts/pages/credentials.tsx | 2 +- web/packages/accounts/pages/two-factor/recover.tsx | 2 +- web/packages/shared/crypto/internal/libsodium.ts | 8 +++++++- web/packages/shared/crypto/types.ts | 5 ----- web/packages/shared/user/index.ts | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) delete mode 100644 web/packages/shared/crypto/types.ts diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index b18e0c4781..c50407eb94 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -16,9 +16,9 @@ import { basename } from "@/next/file"; import log from "@/next/log"; import { CustomErrorMessage } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; -import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/internal/libsodium"; import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; -import type { B64EncryptionResult } from "@ente/shared/crypto/types"; +import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; +import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/internal/libsodium"; import { CustomError, handleUploadError } from "@ente/shared/error"; import type { Remote } from "comlink"; import { diff --git a/web/packages/accounts/api/user.ts b/web/packages/accounts/api/user.ts index 131ae73ef7..9269fe2e17 100644 --- a/web/packages/accounts/api/user.ts +++ b/web/packages/accounts/api/user.ts @@ -7,7 +7,7 @@ import type { TwoFactorVerificationResponse, UserVerificationResponse, } from "@ente/accounts/types/user"; -import type { B64EncryptionResult } from "@ente/shared/crypto/types"; +import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { ApiError, CustomError } from "@ente/shared/error"; import HTTPService from "@ente/shared/network/HTTPService"; import { getToken } from "@ente/shared/storage/localStorage/helpers"; diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index 60a2611e7e..39e1c5135a 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -20,7 +20,7 @@ import { generateLoginSubKey, saveKeyInSessionStore, } from "@ente/shared/crypto/helpers"; -import type { B64EncryptionResult } from "@ente/shared/crypto/types"; +import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { CustomError } from "@ente/shared/error"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; import { diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index 22608c607f..e52f90c633 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -18,7 +18,7 @@ import SingleInputForm, { } from "@ente/shared/components/SingleInputForm"; import { SUPPORT_EMAIL } from "@ente/shared/constants/urls"; import ComlinkCryptoWorker from "@ente/shared/crypto"; -import type { B64EncryptionResult } from "@ente/shared/crypto/types"; +import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { ApiError } from "@ente/shared/error"; import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; import { Link } from "@mui/material"; diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 4337a0fb12..aa02772e52 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -9,7 +9,6 @@ import { mergeUint8Arrays } from "@/utils/array"; import { CustomError } from "@ente/shared/error"; import sodium, { type StateAddress } from "libsodium-wrappers"; -import type { B64EncryptionResult } from "../types"; export async function fromB64(input: string) { await sodium.ready; @@ -275,6 +274,13 @@ export async function encryptFileChunk( return pushResult; } + +export interface B64EncryptionResult { + encryptedData: string; + key: string; + nonce: string; +} + export async function encryptToB64(data: string, key: string) { await sodium.ready; const encrypted = await encrypt(await fromB64(data), await fromB64(key)); diff --git a/web/packages/shared/crypto/types.ts b/web/packages/shared/crypto/types.ts deleted file mode 100644 index e591820f08..0000000000 --- a/web/packages/shared/crypto/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface B64EncryptionResult { - encryptedData: string; - key: string; - nonce: string; -} diff --git a/web/packages/shared/user/index.ts b/web/packages/shared/user/index.ts index ba80411f6a..f66a62b4f6 100644 --- a/web/packages/shared/user/index.ts +++ b/web/packages/shared/user/index.ts @@ -1,5 +1,5 @@ import ComlinkCryptoWorker from "@ente/shared/crypto"; -import type { B64EncryptionResult } from "@ente/shared/crypto/types"; +import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { CustomError } from "@ente/shared/error"; import { getKey, SESSION_KEYS } from "@ente/shared/storage/sessionStorage"; From d6f30546b93c4872526b8c6f02f4ee846c81e291 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:11:58 +0530 Subject: [PATCH 049/466] Rearrange --- .../shared/crypto/internal/libsodium.ts | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index aa02772e52..704914b17d 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -95,91 +95,6 @@ export async function fromHex(input: string) { return await toB64(sodium.from_hex(input)); } -export async function decryptChaChaOneShot( - data: Uint8Array, - header: Uint8Array, - key: string, -) { - await sodium.ready; - const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( - header, - await fromB64(key), - ); - const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( - pullState, - data, - null, - ); - return pullResult.message; -} - -export const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024; - -export const decryptChaCha = async ( - data: Uint8Array, - header: Uint8Array, - key: string, -) => { - await sodium.ready; - const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( - header, - await fromB64(key), - ); - const decryptionChunkSize = - ENCRYPTION_CHUNK_SIZE + - sodium.crypto_secretstream_xchacha20poly1305_ABYTES; - let bytesRead = 0; - const decryptedChunks = []; - let tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; - while (tag !== sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL) { - let chunkSize = decryptionChunkSize; - if (bytesRead + chunkSize > data.length) { - chunkSize = data.length - bytesRead; - } - const buffer = data.slice(bytesRead, bytesRead + chunkSize); - const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( - pullState, - buffer, - ); - if (!pullResult.message) { - throw new Error(CustomError.PROCESSING_FAILED); - } - decryptedChunks.push(pullResult.message); - tag = pullResult.tag; - bytesRead += chunkSize; - } - return mergeUint8Arrays(decryptedChunks); -}; - -export async function initChunkDecryption(header: Uint8Array, key: Uint8Array) { - await sodium.ready; - const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( - header, - key, - ); - const decryptionChunkSize = - ENCRYPTION_CHUNK_SIZE + - sodium.crypto_secretstream_xchacha20poly1305_ABYTES; - const tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; - return { pullState, decryptionChunkSize, tag }; -} - -export async function decryptFileChunk( - data: Uint8Array, - pullState: StateAddress, -) { - await sodium.ready; - const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( - pullState, - data, - ); - if (!pullResult.message) { - throw new Error(CustomError.PROCESSING_FAILED); - } - const newTag = pullResult.tag; - return { decryptedData: pullResult.message, newTag }; -} - export async function encryptChaChaOneShot(data: Uint8Array, key: string) { await sodium.ready; @@ -203,6 +118,8 @@ export async function encryptChaChaOneShot(data: Uint8Array, key: string) { }; } +export const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024; + export const encryptChaCha = async (data: Uint8Array) => { await sodium.ready; @@ -275,6 +192,89 @@ export async function encryptFileChunk( return pushResult; } +export async function decryptChaChaOneShot( + data: Uint8Array, + header: Uint8Array, + key: string, +) { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + await fromB64(key), + ); + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + data, + null, + ); + return pullResult.message; +} + +export const decryptChaCha = async ( + data: Uint8Array, + header: Uint8Array, + key: string, +) => { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + await fromB64(key), + ); + const decryptionChunkSize = + ENCRYPTION_CHUNK_SIZE + + sodium.crypto_secretstream_xchacha20poly1305_ABYTES; + let bytesRead = 0; + const decryptedChunks = []; + let tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + while (tag !== sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL) { + let chunkSize = decryptionChunkSize; + if (bytesRead + chunkSize > data.length) { + chunkSize = data.length - bytesRead; + } + const buffer = data.slice(bytesRead, bytesRead + chunkSize); + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + buffer, + ); + if (!pullResult.message) { + throw new Error(CustomError.PROCESSING_FAILED); + } + decryptedChunks.push(pullResult.message); + tag = pullResult.tag; + bytesRead += chunkSize; + } + return mergeUint8Arrays(decryptedChunks); +}; + +export async function initChunkDecryption(header: Uint8Array, key: Uint8Array) { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + key, + ); + const decryptionChunkSize = + ENCRYPTION_CHUNK_SIZE + + sodium.crypto_secretstream_xchacha20poly1305_ABYTES; + const tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + return { pullState, decryptionChunkSize, tag }; +} + +export async function decryptFileChunk( + data: Uint8Array, + pullState: StateAddress, +) { + await sodium.ready; + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + data, + ); + if (!pullResult.message) { + throw new Error(CustomError.PROCESSING_FAILED); + } + const newTag = pullResult.tag; + return { decryptedData: pullResult.message, newTag }; +} + export interface B64EncryptionResult { encryptedData: string; key: string; From 90cffef7bedd3b9633f0b18cd0d0f3e3dea85784 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:15:09 +0530 Subject: [PATCH 050/466] Doc --- web/packages/shared/crypto/internal/libsodium.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 704914b17d..847b81424e 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -15,12 +15,17 @@ export async function fromB64(input: string) { return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); } -export async function toB64(input: Uint8Array) { +/** + * Convert a {@link Uint8Array} to a Base64 encoded string. + * + * See also {@link toB64URLSafe} and {@link toB64URLSafeNoPadding}. + */ +export const toB64 = async (input: Uint8Array) => { await sodium.ready; return sodium.to_base64(input, sodium.base64_variants.ORIGINAL); -} +}; -/** Convert a {@link Uint8Array} to a URL safe Base64 encoded string. */ +/** Convert a {@link Uint8Array} to a **URL safe** Base64 encoded string. */ export const toB64URLSafe = async (input: Uint8Array) => { await sodium.ready; return sodium.to_base64(input, sodium.base64_variants.URLSAFE); From 660f6c645b1bcd3b02585b74e34f9951669e13c9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:15:45 +0530 Subject: [PATCH 051/466] Rearrange --- web/packages/shared/crypto/internal/libsodium.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 847b81424e..413d21aca1 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -10,11 +10,6 @@ import { mergeUint8Arrays } from "@/utils/array"; import { CustomError } from "@ente/shared/error"; import sodium, { type StateAddress } from "libsodium-wrappers"; -export async function fromB64(input: string) { - await sodium.ready; - return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); -} - /** * Convert a {@link Uint8Array} to a Base64 encoded string. * @@ -25,7 +20,9 @@ export const toB64 = async (input: Uint8Array) => { return sodium.to_base64(input, sodium.base64_variants.ORIGINAL); }; -/** Convert a {@link Uint8Array} to a **URL safe** Base64 encoded string. */ +/** + * Convert a {@link Uint8Array} to a **URL safe** Base64 encoded string. + */ export const toB64URLSafe = async (input: Uint8Array) => { await sodium.ready; return sodium.to_base64(input, sodium.base64_variants.URLSAFE); @@ -52,6 +49,11 @@ export const toB64URLSafeNoPadding = async (input: Uint8Array) => { return sodium.to_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); }; +export async function fromB64(input: string) { + await sodium.ready; + return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); +} + /** * Convert a Base64 encoded string to a {@link Uint8Array}. * From 27c6474f06eaac338ddcef4f13e3850eddc91def Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:21:22 +0530 Subject: [PATCH 052/466] Doc all --- .../shared/crypto/internal/libsodium.ts | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts index 413d21aca1..857c826d5a 100644 --- a/web/packages/shared/crypto/internal/libsodium.ts +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -21,7 +21,19 @@ export const toB64 = async (input: Uint8Array) => { }; /** - * Convert a {@link Uint8Array} to a **URL safe** Base64 encoded string. + * Convert a Base64 encoded string to a {@link Uint8Array}. + * + * This is the converse of {@link toBase64}. + */ +export const fromB64 = async (input: string) => { + await sodium.ready; + return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); +}; + +/** + * Convert a {@link Uint8Array} to a URL-safe Base64 encoded string. + * + * See also {@link toB64URLSafe} and {@link toB64URLSafeNoPadding}. */ export const toB64URLSafe = async (input: Uint8Array) => { await sodium.ready; @@ -29,7 +41,7 @@ export const toB64URLSafe = async (input: Uint8Array) => { }; /** - * Convert a {@link Uint8Array} to a URL safe Base64 encoded string. + * Convert a {@link Uint8Array} to a unpadded URL-safe Base64 encoded string. * * This differs from {@link toB64URLSafe} in that it does not append any * trailing padding character(s) "=" to make the resultant string's length be an @@ -49,13 +61,8 @@ export const toB64URLSafeNoPadding = async (input: Uint8Array) => { return sodium.to_base64(input, sodium.base64_variants.URLSAFE_NO_PADDING); }; -export async function fromB64(input: string) { - await sodium.ready; - return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); -} - /** - * Convert a Base64 encoded string to a {@link Uint8Array}. + * Convert a unpadded URL-safe Base64 encoded string to a {@link Uint8Array}. * * This is the converse of {@link toB64URLSafeNoPadding}, and does not expect * its input string's length to be a an integer multiple of 4. @@ -66,8 +73,8 @@ export const fromB64URLSafeNoPadding = async (input: string) => { }; /** - * Variant of {@link toB64URLSafeNoPadding} that works with {@link strings}. See also - * its sibling method {@link fromB64URLSafeNoPaddingString}. + * Variant of {@link toB64URLSafeNoPadding} that works with {@link string} + * inputs. See also its sibling method {@link fromB64URLSafeNoPaddingString}. */ export const toB64URLSafeNoPaddingString = async (input: string) => { await sodium.ready; @@ -92,6 +99,7 @@ export async function toUTF8(input: string) { await sodium.ready; return sodium.to_string(await fromB64(input)); } + export async function toHex(input: string) { await sodium.ready; return sodium.to_hex(await fromB64(input)); From 45a103f66a53f8e10569e06e6c1fd8f75a1fac9c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:37:19 +0530 Subject: [PATCH 053/466] New layer --- web/packages/new/common/crypto/ente.ts | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 web/packages/new/common/crypto/ente.ts diff --git a/web/packages/new/common/crypto/ente.ts b/web/packages/new/common/crypto/ente.ts new file mode 100644 index 0000000000..292029dd13 --- /dev/null +++ b/web/packages/new/common/crypto/ente.ts @@ -0,0 +1,37 @@ +/** + * @file Higher level functions that use the ontology of Ente's types + * + * These are thin wrappers over the (thin-) wrappers in internal/libsodium.ts. + * The main difference is that they don't name things in terms of the crypto + * algorithms, but rather by the specific Ente specific tasks we are trying to + * do. + */ +import * as libsodium from "@ente/shared/crypto/internal/libsodium"; + +/** + * Decrypt the metadata associated with a file using the file's key. + * + * @param encryptedMetadataB64 The Base64 encoded string containing the + * encrypted data. + * + * @param headerB64 The Base64 encoded string containing the decryption header + * produced during encryption. + * + * @param keyB64 The Base64 encoded string containing the encryption key (which + * is the file's key). + * + * @returns The decrypted utf-8 string. + */ +export const decryptFileMetadata = async ( + encryptedMetadataB64: string, + decryptionHeaderB64: string, + keyB64: string, +) => { + const metadataBytes = await libsodium.decryptChaChaOneShot( + await libsodium.fromB64(encryptedMetadataB64), + await libsodium.fromB64(decryptionHeaderB64), + keyB64, + ); + const textDecoder = new TextDecoder(); + return textDecoder.decode(metadataBytes); +}; From 593ece76819960191e96253ec5156a28e4aeaeef Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 19:52:57 +0530 Subject: [PATCH 054/466] Compile --- web/packages/new/common/crypto/ente.ts | 6 ++--- web/packages/new/photos/services/embedding.ts | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/web/packages/new/common/crypto/ente.ts b/web/packages/new/common/crypto/ente.ts index 292029dd13..4995942a87 100644 --- a/web/packages/new/common/crypto/ente.ts +++ b/web/packages/new/common/crypto/ente.ts @@ -9,7 +9,7 @@ import * as libsodium from "@ente/shared/crypto/internal/libsodium"; /** - * Decrypt the metadata associated with a file using the file's key. + * Decrypt arbitrary metadata associated with a file using the its's key. * * @param encryptedMetadataB64 The Base64 encoded string containing the * encrypted data. @@ -17,8 +17,8 @@ import * as libsodium from "@ente/shared/crypto/internal/libsodium"; * @param headerB64 The Base64 encoded string containing the decryption header * produced during encryption. * - * @param keyB64 The Base64 encoded string containing the encryption key (which - * is the file's key). + * @param keyB64 The Base64 encoded string containing the encryption key + * (this'll generally be the file's key). * * @returns The decrypted utf-8 string. */ diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 5b422eaff1..977d396e20 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -1,8 +1,9 @@ import { authenticatedRequestHeaders } from "@/next/http"; import { apiURL } from "@/next/origins"; +import log from "@/next/log"; import { nullToUndefined } from "@/utils/transform"; -import ComlinkCryptoWorker from "@ente/shared/crypto"; import { z } from "zod"; +import { decryptFileMetadata } from "../../common/crypto/ente"; import { getAllLocalFiles } from "./files"; /** @@ -83,12 +84,11 @@ type RemoteEmbedding = z.infer; */ export const syncRemoteFaceEmbeddings = async () => { let sinceTime = faceEmbeddingSyncTime(); - const cryptoWorker = await ComlinkCryptoWorker.getInstance(); const localFiles = await getAllLocalFiles(); const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { - const file = localFilesByID.get(remoteEmbedding.fileID) + const file = localFilesByID.get(remoteEmbedding.fileID); // [Note: Ignoring embeddings for unknown files] // // We need the file to decrypt the embedding. This is easily ensured by @@ -112,8 +112,18 @@ export const syncRemoteFaceEmbeddings = async () => { // be a bit of duplicate work, but that's fine as long as there // isn't a systematic scenario where this happens. if (!file) return undefined; - - } + try { + const decryptedString = await decryptFileMetadata( + remoteEmbedding.encryptedEmbedding, + remoteEmbedding.decryptionHeader, + file.key, + ); + return decryptedString; + } catch (e) { + log.warn("Ignoring unparseable embedding", e); + return undefined; + } + }; // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. @@ -126,9 +136,7 @@ export const syncRemoteFaceEmbeddings = async () => { sinceTime, ); if (remoteEmbeddings.length == 0) break; - // const _embeddings = Promise.all( - // remoteEmbeddings.map(decryptEmbedding), - // ); + void (await Promise.all(remoteEmbeddings.map(decryptEmbedding))); sinceTime = remoteEmbeddings.reduce( (max, { updatedAt }) => Math.max(max, updatedAt), sinceTime, @@ -137,7 +145,7 @@ export const syncRemoteFaceEmbeddings = async () => { } }; -const decryptFaceEmbedding = async (remoteEmbedding: RemoteEmbedding) => { +// const decryptFaceEmbedding = async (remoteEmbedding: RemoteEmbedding) => { // const fileKey = fileIdToKeyMap.get(embedding.fileID); // if (!fileKey) { // throw Error(CustomError.FILE_NOT_FOUND); From 61d35159fa2d3c1592b663f4c684f37c6429030a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 20:23:12 +0530 Subject: [PATCH 055/466] Dup --- web/packages/new/photos/services/embedding.ts | 71 ++++++++++++++++++- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 977d396e20..ef01b81b35 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -175,9 +175,74 @@ const faceEmbeddingSyncTime = () => const saveFaceEmbeddingSyncTime = (t: number) => localStorage.setItem("faceEmbeddingSyncTime", `${t}`); -// const getFaceEmbeddings = async () => { - -// } +/** + * Zod schemas for the {@link FaceIndex} types. + * + * [Note: Duplicated between Zod schemas and TS type] + * + * Usually we define a Zod schema, and then infer the corresponding TypeScript + * type for it using `z.infer`. This works great except now the docstrings don't + * show up: The doc strings get added to the Zod schema, but usually the code + * using the parsed data will reference the TypeScript type, and the docstrings + * added to the fields in the Zod schema won't show up. + * + * We usually live with this infelicity, since the alternative is code + * duplication: Define the TypeScript type (putting the docstrings therein) + * _and_ also a corresponding Zod schema. The duplication happens because it is + * not possible to go the other way (TS type => Zod schema). + * + * However, in some cases having when the TypeScript type under consideration is + * used pervasely in our code, having a standalone TypeScript type with attached + * docstrings, is worth the code duplication. + * + * Note that this'll just be syntactic duplication - if the two definitions get + * out of sync in the shape of the types they represent, the TypeScript compiler + * will flag it for us. + */ +const FaceIndex = z + .object({ + fileID: z.number(), + width: z.number(), + height: z.number(), + faceEmbedding: z + .object({ + version: z.number(), + client: z.string(), + faces: z.array( + z + .object({ + faceID: z.string(), + detection: z + .object({ + box: z + .object({ + x: z.number(), + y: z.number(), + width: z.number(), + height: z.number(), + }) + .passthrough(), + landmarks: z.array( + z + .object({ + x: z.number(), + y: z.number(), + }) + .passthrough(), + ), + }) + .passthrough(), + score: z.number(), + blur: z.number(), + embedding: z.array(z.number()), + }) + .passthrough(), + ), + }) + .passthrough(), + }) + // Retain fields we might not (currently) understand. + .passthrough(); /** * The maximum number of items to fetch in a single GET /embeddings/diff From 67d9e650ba83aba75acc6f04c0174c18b87261ef Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 26 Jun 2024 20:59:20 +0530 Subject: [PATCH 056/466] Include files from trash --- web/apps/photos/src/pages/gallery/index.tsx | 9 ++-- .../photos/src/pages/shared-albums/index.tsx | 8 +--- .../photos/src/services/embeddingService.ts | 6 ++- web/apps/photos/src/services/export/index.ts | 7 +--- .../photos/src/services/export/migration.ts | 7 +--- web/apps/photos/src/services/fileService.ts | 8 +--- .../src/services/publicCollectionService.ts | 3 +- web/apps/photos/src/services/trashService.ts | 33 ++++----------- web/apps/photos/src/types/trash/index.ts | 16 -------- web/apps/photos/src/utils/file/index.ts | 40 +----------------- web/packages/new/photos/services/embedding.ts | 8 +++- web/packages/new/photos/services/files.ts | 41 ++++++++++++++++++- web/packages/new/photos/types/file.ts | 15 +++++++ web/packages/new/photos/utils/file.ts | 30 ++++++++++++++ 14 files changed, 120 insertions(+), 111 deletions(-) delete mode 100644 web/apps/photos/src/types/trash/index.ts create mode 100644 web/packages/new/photos/utils/file.ts diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx index 360100c01c..a5c180c3aa 100644 --- a/web/apps/photos/src/pages/gallery/index.tsx +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -1,8 +1,12 @@ import { WhatsNew } from "@/new/photos/components/WhatsNew"; import { shouldShowWhatsNew } from "@/new/photos/services/changelog"; import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; -import { getLocalFiles } from "@/new/photos/services/files"; +import { + getLocalFiles, + getLocalTrashedFiles, +} from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; +import { mergeMetadata } from "@/new/photos/utils/file"; import log from "@/next/log"; import { CenteredFlex } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; @@ -94,7 +98,7 @@ import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; import { syncFiles } from "services/fileService"; import locationSearchService from "services/locationSearchService"; -import { getLocalTrashedFiles, syncTrash } from "services/trashService"; +import { syncTrash } from "services/trashService"; import uploadManager from "services/upload/uploadManager"; import { isTokenValid, syncMapEnabled } from "services/userService"; import { Collection, CollectionSummaries } from "types/collection"; @@ -125,7 +129,6 @@ import { getSelectedFiles, getUniqueFiles, handleFileOps, - mergeMetadata, sortFiles, } from "utils/file"; import { isArchivedFile } from "utils/magicMetadata"; diff --git a/web/apps/photos/src/pages/shared-albums/index.tsx b/web/apps/photos/src/pages/shared-albums/index.tsx index 2976ed1e88..4e479457b1 100644 --- a/web/apps/photos/src/pages/shared-albums/index.tsx +++ b/web/apps/photos/src/pages/shared-albums/index.tsx @@ -1,4 +1,5 @@ import { EnteFile } from "@/new/photos/types/file"; +import { mergeMetadata } from "@/new/photos/utils/file"; import log from "@/next/log"; import { CenteredFlex, @@ -65,12 +66,7 @@ import { SetFilesDownloadProgressAttributesCreator, } from "types/gallery"; import { downloadCollectionFiles, isHiddenCollection } from "utils/collection"; -import { - downloadSelectedFiles, - getSelectedFiles, - mergeMetadata, - sortFiles, -} from "utils/file"; +import { downloadSelectedFiles, getSelectedFiles, sortFiles } from "utils/file"; import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; export default function PublicCollectionGallery() { diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts index 4aa6c39878..859557cbc9 100644 --- a/web/apps/photos/src/services/embeddingService.ts +++ b/web/apps/photos/src/services/embeddingService.ts @@ -1,5 +1,8 @@ import type { EmbeddingModel } from "@/new/photos/services/embedding"; -import { getAllLocalFiles } from "@/new/photos/services/files"; +import { + getAllLocalFiles, + getLocalTrashedFiles, +} from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { inWorker } from "@/next/env"; import log from "@/next/log"; @@ -18,7 +21,6 @@ import type { } from "types/embedding"; import { getLocalCollections } from "./collectionService"; import type { FaceIndex } from "./face/types"; -import { getLocalTrashedFiles } from "./trashService"; type FileML = FaceIndex & { updatedAt: number; diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index 4afe2e7bcc..df7d23eddf 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -3,6 +3,7 @@ import { decodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; +import { mergeMetadata } from "@/new/photos/utils/file"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { wait } from "@/utils/promise"; @@ -29,11 +30,7 @@ import { getCollectionUserFacingName, getNonEmptyPersonalCollections, } from "utils/collection"; -import { - getPersonalFiles, - getUpdatedEXIFFileForDownload, - mergeMetadata, -} from "utils/file"; +import { getPersonalFiles, getUpdatedEXIFFileForDownload } from "utils/file"; import { safeDirectoryName, safeFileName } from "utils/native-fs"; import { writeStream } from "utils/native-stream"; import { getAllLocalCollections } from "../collectionService"; diff --git a/web/apps/photos/src/services/export/migration.ts b/web/apps/photos/src/services/export/migration.ts index f452a52642..75ab0e2f11 100644 --- a/web/apps/photos/src/services/export/migration.ts +++ b/web/apps/photos/src/services/export/migration.ts @@ -2,6 +2,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; +import { mergeMetadata } from "@/new/photos/utils/file"; import { ensureElectron } from "@/next/electron"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; @@ -22,11 +23,7 @@ import { FileExportNames, } from "types/export"; import { getNonEmptyPersonalCollections } from "utils/collection"; -import { - getIDBasedSortedFiles, - getPersonalFiles, - mergeMetadata, -} from "utils/file"; +import { getIDBasedSortedFiles, getPersonalFiles } from "utils/file"; import { safeDirectoryName, safeFileName, diff --git a/web/apps/photos/src/services/fileService.ts b/web/apps/photos/src/services/fileService.ts index 968fdf4df0..14ad8ddfaa 100644 --- a/web/apps/photos/src/services/fileService.ts +++ b/web/apps/photos/src/services/fileService.ts @@ -7,6 +7,7 @@ import { TrashRequest, } from "@/new/photos/types/file"; import { BulkUpdateMagicMetadataRequest } from "@/new/photos/types/magicMetadata"; +import { mergeMetadata } from "@/new/photos/utils/file"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import ComlinkCryptoWorker from "@ente/shared/crypto"; @@ -16,12 +17,7 @@ import { REQUEST_BATCH_SIZE } from "constants/api"; import { Collection } from "types/collection"; import { SetFiles } from "types/gallery"; import { batch } from "utils/common"; -import { - decryptFile, - getLatestVersionFiles, - mergeMetadata, - sortFiles, -} from "utils/file"; +import { decryptFile, getLatestVersionFiles, sortFiles } from "utils/file"; import { getCollectionLastSyncTime, setCollectionLastSyncTime, diff --git a/web/apps/photos/src/services/publicCollectionService.ts b/web/apps/photos/src/services/publicCollectionService.ts index 0528094d3f..e680f6c490 100644 --- a/web/apps/photos/src/services/publicCollectionService.ts +++ b/web/apps/photos/src/services/publicCollectionService.ts @@ -1,4 +1,5 @@ import { EncryptedEnteFile, EnteFile } from "@/new/photos/types/file"; +import { mergeMetadata } from "@/new/photos/utils/file"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import ComlinkCryptoWorker from "@ente/shared/crypto"; @@ -7,7 +8,7 @@ import HTTPService from "@ente/shared/network/HTTPService"; import localForage from "@ente/shared/storage/localForage"; import { Collection, CollectionPublicMagicMetadata } from "types/collection"; import { LocalSavedPublicCollectionFiles } from "types/publicCollection"; -import { decryptFile, mergeMetadata, sortFiles } from "utils/file"; +import { decryptFile, sortFiles } from "utils/file"; const PUBLIC_COLLECTION_FILES_TABLE = "public-collection-files"; const PUBLIC_COLLECTIONS_TABLE = "public-collections"; diff --git a/web/apps/photos/src/services/trashService.ts b/web/apps/photos/src/services/trashService.ts index b4920ed1ea..b3762be3bf 100644 --- a/web/apps/photos/src/services/trashService.ts +++ b/web/apps/photos/src/services/trashService.ts @@ -1,4 +1,9 @@ -import { EnteFile } from "@/new/photos/types/file"; +import { + getLocalTrash, + getTrashedFiles, + TRASH, +} from "@/new/photos/services/files"; +import { EncryptedTrashItem, Trash } from "@/new/photos/types/file"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import HTTPService from "@ente/shared/network/HTTPService"; @@ -6,23 +11,12 @@ import localForage from "@ente/shared/storage/localForage"; import { getToken } from "@ente/shared/storage/localStorage/helpers"; import { Collection } from "types/collection"; import { SetFiles } from "types/gallery"; -import { EncryptedTrashItem, Trash } from "types/trash"; -import { decryptFile, mergeMetadata, sortTrashFiles } from "utils/file"; +import { decryptFile } from "utils/file"; import { getCollection } from "./collectionService"; -const TRASH = "file-trash"; const TRASH_TIME = "trash-time"; const DELETED_COLLECTION = "deleted-collection"; -async function getLocalTrash() { - const trash = (await localForage.getItem(TRASH)) || []; - return trash; -} - -export async function getLocalTrashedFiles() { - return getTrashedFiles(await getLocalTrash()); -} - export async function getLocalDeletedCollections() { const trashedCollections: Array = (await localForage.getItem(DELETED_COLLECTION)) || []; @@ -136,19 +130,6 @@ export const updateTrash = async ( return currentTrash; }; -export function getTrashedFiles(trash: Trash): EnteFile[] { - return sortTrashFiles( - mergeMetadata( - trash.map((trashedFile) => ({ - ...trashedFile.file, - updationTime: trashedFile.updatedAt, - deleteBy: trashedFile.deleteBy, - isTrashed: true, - })), - ), - ); -} - export const emptyTrash = async () => { try { const token = getToken(); diff --git a/web/apps/photos/src/types/trash/index.ts b/web/apps/photos/src/types/trash/index.ts deleted file mode 100644 index df786029a1..0000000000 --- a/web/apps/photos/src/types/trash/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { EncryptedEnteFile, EnteFile } from "@/new/photos/types/file"; - -export interface TrashItem extends Omit { - file: EnteFile; -} - -export interface EncryptedTrashItem { - file: EncryptedEnteFile; - isDeleted: boolean; - isRestored: boolean; - deleteBy: number; - createdAt: number; - updatedAt: number; -} - -export type Trash = TrashItem[]; diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts index a6793a3386..f9bb04b94c 100644 --- a/web/apps/photos/src/utils/file/index.ts +++ b/web/apps/photos/src/utils/file/index.ts @@ -12,6 +12,7 @@ import { FileWithUpdatedMagicMetadata, } from "@/new/photos/types/file"; import { VISIBILITY_STATE } from "@/new/photos/types/magicMetadata"; +import { mergeMetadata } from "@/new/photos/utils/file"; import { lowercaseExtension } from "@/next/file"; import log from "@/next/log"; import { CustomErrorMessage, type Electron } from "@/next/types/ipc"; @@ -197,20 +198,6 @@ export function sortFiles(files: EnteFile[], sortAsc = false) { }); } -export function sortTrashFiles(files: EnteFile[]) { - return files.sort((a, b) => { - if (a.deleteBy === b.deleteBy) { - if (a.metadata.creationTime === b.metadata.creationTime) { - return ( - b.metadata.modificationTime - a.metadata.modificationTime - ); - } - return b.metadata.creationTime - a.metadata.creationTime; - } - return a.deleteBy - b.deleteBy; - }); -} - export async function decryptFile( file: EncryptedEnteFile, collectionKey: string, @@ -432,31 +419,6 @@ export function isSharedFile(user: User, file: EnteFile) { return file.ownerID !== user.id; } -/** - * [Note: File name for local EnteFile objects] - * - * The title property in a file's metadata is the original file's name. The - * metadata of a file cannot be edited. So if later on the file's name is - * changed, then the edit is stored in the `editedName` property of the public - * metadata of the file. - * - * This function merges these edits onto the file object that we use locally. - * Effectively, post this step, the file's metadata.title can be used in lieu of - * its filename. - */ -export function mergeMetadata(files: EnteFile[]): EnteFile[] { - return files.map((file) => { - if (file.pubMagicMetadata?.data.editedTime) { - file.metadata.creationTime = file.pubMagicMetadata.data.editedTime; - } - if (file.pubMagicMetadata?.data.editedName) { - file.metadata.title = file.pubMagicMetadata.data.editedName; - } - - return file; - }); -} - export function updateExistingFilePubMetadata( existingFile: EnteFile, updatedFile: EnteFile, diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index ef01b81b35..a8c37ade97 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -1,3 +1,4 @@ +import { getLocalTrashedFiles } from "@/new/photos/services/files"; import { authenticatedRequestHeaders } from "@/next/http"; import { apiURL } from "@/next/origins"; import log from "@/next/log"; @@ -84,7 +85,11 @@ type RemoteEmbedding = z.infer; */ export const syncRemoteFaceEmbeddings = async () => { let sinceTime = faceEmbeddingSyncTime(); - const localFiles = await getAllLocalFiles(); + // Include files from trash, otherwise they'll get unnecessarily reindexed + // if the user restores them from trash before permanent deletion. + const localFiles = (await getAllLocalFiles()).concat( + await getLocalTrashedFiles(), + ); const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { @@ -199,6 +204,7 @@ const saveFaceEmbeddingSyncTime = (t: number) => * out of sync in the shape of the types they represent, the TypeScript compiler * will flag it for us. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars const FaceIndex = z .object({ fileID: z.number(), diff --git a/web/packages/new/photos/services/files.ts b/web/packages/new/photos/services/files.ts index d5a17b4e72..ddb24488df 100644 --- a/web/packages/new/photos/services/files.ts +++ b/web/packages/new/photos/services/files.ts @@ -1,7 +1,8 @@ -import { type EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { Events, eventBus } from "@ente/shared/events"; import localForage from "@ente/shared/storage/localForage"; +import { type EnteFile, type Trash } from "../types/file"; +import { mergeMetadata } from "../utils/file"; const FILES_TABLE = "files"; const HIDDEN_FILES_TABLE = "hidden-files"; @@ -36,3 +37,41 @@ export const setLocalFiles = async ( log.error("Failed to save files", e); } }; + +export const TRASH = "file-trash"; + +export async function getLocalTrash() { + const trash = (await localForage.getItem(TRASH)) ?? []; + return trash; +} + +export async function getLocalTrashedFiles() { + return getTrashedFiles(await getLocalTrash()); +} + +export function getTrashedFiles(trash: Trash): EnteFile[] { + return sortTrashFiles( + mergeMetadata( + trash.map((trashedFile) => ({ + ...trashedFile.file, + updationTime: trashedFile.updatedAt, + deleteBy: trashedFile.deleteBy, + isTrashed: true, + })), + ), + ); +} + +const sortTrashFiles = (files: EnteFile[]) => { + return files.sort((a, b) => { + if (a.deleteBy === b.deleteBy) { + if (a.metadata.creationTime === b.metadata.creationTime) { + return ( + b.metadata.modificationTime - a.metadata.modificationTime + ); + } + return b.metadata.creationTime - a.metadata.creationTime; + } + return (a.deleteBy ?? 0) - (b.deleteBy ?? 0); + }); +}; diff --git a/web/packages/new/photos/types/file.ts b/web/packages/new/photos/types/file.ts index 1993ff9e8b..e76e527393 100644 --- a/web/packages/new/photos/types/file.ts +++ b/web/packages/new/photos/types/file.ts @@ -126,3 +126,18 @@ export interface FilePublicMagicMetadataProps { export type FilePublicMagicMetadata = MagicMetadataCore; + +export interface TrashItem extends Omit { + file: EnteFile; +} + +export interface EncryptedTrashItem { + file: EncryptedEnteFile; + isDeleted: boolean; + isRestored: boolean; + deleteBy: number; + createdAt: number; + updatedAt: number; +} + +export type Trash = TrashItem[]; diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts new file mode 100644 index 0000000000..d5d2892254 --- /dev/null +++ b/web/packages/new/photos/utils/file.ts @@ -0,0 +1,30 @@ +import type { EnteFile } from "../types/file"; + +/** + * [Note: File name for local EnteFile objects] + * + * The title property in a file's metadata is the original file's name. The + * metadata of a file cannot be edited. So if later on the file's name is + * changed, then the edit is stored in the `editedName` property of the public + * metadata of the file. + * + * This function merges these edits onto the file object that we use locally. + * Effectively, post this step, the file's metadata.title can be used in lieu of + * its filename. + */ +export function mergeMetadata(files: EnteFile[]): EnteFile[] { + return files.map((file) => { + // TODO: Until the types reflect reality + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (file.pubMagicMetadata?.data.editedTime) { + file.metadata.creationTime = file.pubMagicMetadata.data.editedTime; + } + // TODO: Until the types reflect reality + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (file.pubMagicMetadata?.data.editedName) { + file.metadata.title = file.pubMagicMetadata.data.editedName; + } + + return file; + }); +} From a119d544af3e94f00517a5c563607f660eb5c3b0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 09:25:48 +0530 Subject: [PATCH 057/466] prune prep --- web/apps/photos/src/services/face/indexer.ts | 12 ++++++------ web/apps/photos/src/services/face/indexer.worker.ts | 8 ++++---- web/apps/photos/src/services/logout.ts | 2 +- web/packages/new/photos/services/embedding.ts | 6 +++++- .../src => packages/new/photos}/services/face/db.ts | 0 .../new/photos}/services/face/types.ts | 0 6 files changed, 16 insertions(+), 12 deletions(-) rename web/{apps/photos/src => packages/new/photos}/services/face/db.ts (100%) rename web/{apps/photos/src => packages/new/photos}/services/face/types.ts (100%) diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/apps/photos/src/services/face/indexer.ts index c6cdc3295a..0f78c20e2e 100644 --- a/web/apps/photos/src/services/face/indexer.ts +++ b/web/apps/photos/src/services/face/indexer.ts @@ -1,3 +1,9 @@ +import { + faceIndex, + indexableFileIDs, + indexedAndIndexableCounts, + syncWithLocalFiles, +} from "@/new/photos/services/face/db"; import { isBetaUser, isInternalUser, @@ -7,12 +13,6 @@ import type { EnteFile } from "@/new/photos/types/file"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; import type { Remote } from "comlink"; -import { - faceIndex, - indexableFileIDs, - indexedAndIndexableCounts, - syncWithLocalFiles, -} from "./db"; import type { FaceIndexerWorker } from "./indexer.worker"; /** diff --git a/web/apps/photos/src/services/face/indexer.worker.ts b/web/apps/photos/src/services/face/indexer.worker.ts index a31db7550d..27608a31c8 100644 --- a/web/apps/photos/src/services/face/indexer.worker.ts +++ b/web/apps/photos/src/services/face/indexer.worker.ts @@ -1,11 +1,11 @@ -import type { EnteFile } from "@/new/photos/types/file"; -import log from "@/next/log"; -import { fileLogID } from "utils/file"; import { closeFaceDBConnectionsIfNeeded, markIndexingFailed, saveFaceIndex, -} from "./db"; +} from "@/new/photos/services/face/db"; +import type { EnteFile } from "@/new/photos/types/file"; +import log from "@/next/log"; +import { fileLogID } from "utils/file"; import { indexFaces } from "./f-index"; import { putFaceIndex } from "./remote"; import type { FaceIndex } from "./types"; diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 6d335e83df..1a6c5547e8 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,10 +1,10 @@ +import { clearFaceData } from "@/new/photos/services/face/db"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import log from "@/next/log"; import { accountLogout } from "@ente/accounts/services/logout"; import { clipService } from "services/clip-service"; import DownloadManager from "./download"; import exportService from "./export"; -import { clearFaceData } from "./face/db"; import mlWorkManager from "./face/mlWorkManager"; /** diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index a8c37ade97..38793680ed 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -84,7 +84,6 @@ type RemoteEmbedding = z.infer; * with remote (See: [Note: Ignoring embeddings for unknown files]). */ export const syncRemoteFaceEmbeddings = async () => { - let sinceTime = faceEmbeddingSyncTime(); // Include files from trash, otherwise they'll get unnecessarily reindexed // if the user restores them from trash before permanent deletion. const localFiles = (await getAllLocalFiles()).concat( @@ -92,6 +91,9 @@ export const syncRemoteFaceEmbeddings = async () => { ); const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); + // Delete embeddings for files which are no longer present locally. + // pruneFaceEmbeddings(localFilesByID); + const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { const file = localFilesByID.get(remoteEmbedding.fileID); // [Note: Ignoring embeddings for unknown files] @@ -130,6 +132,8 @@ export const syncRemoteFaceEmbeddings = async () => { } }; + let sinceTime = faceEmbeddingSyncTime(); + // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. // https://github.com/eslint/eslint/pull/18286 diff --git a/web/apps/photos/src/services/face/db.ts b/web/packages/new/photos/services/face/db.ts similarity index 100% rename from web/apps/photos/src/services/face/db.ts rename to web/packages/new/photos/services/face/db.ts diff --git a/web/apps/photos/src/services/face/types.ts b/web/packages/new/photos/services/face/types.ts similarity index 100% rename from web/apps/photos/src/services/face/types.ts rename to web/packages/new/photos/services/face/types.ts From 53452344f3b6845554135435a6944607d9833f69 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 09:28:31 +0530 Subject: [PATCH 058/466] Lints --- web/packages/new/photos/services/face/db.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/face/db.ts b/web/packages/new/photos/services/face/db.ts index 2a75ab7ec4..bd8255f40f 100644 --- a/web/packages/new/photos/services/face/db.ts +++ b/web/packages/new/photos/services/face/db.ts @@ -170,7 +170,7 @@ export const saveFaceIndex = async (faceIndex: FaceIndex) => { const tx = db.transaction(["face-index", "file-status"], "readwrite"); const indexStore = tx.objectStore("face-index"); const statusStore = tx.objectStore("file-status"); - return Promise.all([ + await Promise.all([ indexStore.put(faceIndex), statusStore.put({ fileID: faceIndex.fileID, @@ -178,7 +178,7 @@ export const saveFaceIndex = async (faceIndex: FaceIndex) => { failureCount: 0, }), tx.done, - ]).then(() => {} /* convert result to void */); + ]); }; /** @@ -242,7 +242,7 @@ export const syncWithLocalFiles = async (localFileIDs: number[]) => { const newFileIDs = localFileIDs.filter((id) => !fdb.has(id)); const removedFileIDs = fdbFileIDs.filter((id) => !local.has(id)); - return Promise.all( + await Promise.all( [ newFileIDs.map((id) => tx.objectStore("file-status").put({ @@ -257,7 +257,7 @@ export const syncWithLocalFiles = async (localFileIDs: number[]) => { removedFileIDs.map((id) => tx.objectStore("face-index").delete(id)), tx.done, ].flat(), - ).then(() => {} /* convert result to void */); + ); }; /** From b63a15a5212c1488837f9adf5dab8a7e0c186830 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 09:59:54 +0530 Subject: [PATCH 059/466] Move trash handling to existing sync --- web/apps/photos/src/services/face/indexer.ts | 20 +++++-- .../machineLearning/machineLearningService.ts | 4 +- web/packages/new/photos/services/embedding.ts | 10 ++-- web/packages/new/photos/services/face/db.ts | 54 ++++++++++++++----- 4 files changed, 60 insertions(+), 28 deletions(-) diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/apps/photos/src/services/face/indexer.ts index 0f78c20e2e..74e700a3f0 100644 --- a/web/apps/photos/src/services/face/indexer.ts +++ b/web/apps/photos/src/services/face/indexer.ts @@ -2,13 +2,16 @@ import { faceIndex, indexableFileIDs, indexedAndIndexableCounts, - syncWithLocalFiles, + syncAssumingLocalFileIDs, } from "@/new/photos/services/face/db"; import { isBetaUser, isInternalUser, } from "@/new/photos/services/feature-flags"; -import { getAllLocalFiles } from "@/new/photos/services/files"; +import { + getAllLocalFiles, + getLocalTrashedFiles, +} from "@/new/photos/services/files"; import type { EnteFile } from "@/new/photos/types/file"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; @@ -229,13 +232,13 @@ export const setIsFaceIndexingEnabled = async (enabled: boolean) => { * about. Then return the next {@link count} files that still need to be * indexed. * - * For more specifics of what a "sync" entails, see {@link syncWithLocalFiles}. + * For specifics of what a "sync" entails, see {@link syncAssumingLocalFileIDs}. * * @param userID Sync only files owned by a {@link userID} with the face DB. * * @param count Limit the resulting list of indexable files to {@link count}. */ -export const syncAndGetFilesToIndex = async ( +export const syncWithLocalFilesAndGetFilesToIndex = async ( userID: number, count: number, ): Promise => { @@ -246,7 +249,14 @@ export const syncAndGetFilesToIndex = async ( localFiles.filter(isIndexable).map((f) => [f.id, f]), ); - await syncWithLocalFiles([...localFilesByID.keys()]); + const localFilesInTrashIDs = (await getLocalTrashedFiles()).map( + (f) => f.id, + ); + + await syncAssumingLocalFileIDs( + [...localFilesByID.keys()], + localFilesInTrashIDs, + ); const fileIDsToIndex = await indexableFileIDs(count); return fileIDsToIndex.map((id) => ensure(localFilesByID.get(id))); diff --git a/web/apps/photos/src/services/machineLearning/machineLearningService.ts b/web/apps/photos/src/services/machineLearning/machineLearningService.ts index 7dbadf9186..be182219a8 100644 --- a/web/apps/photos/src/services/machineLearning/machineLearningService.ts +++ b/web/apps/photos/src/services/machineLearning/machineLearningService.ts @@ -2,7 +2,7 @@ import { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; -import { syncAndGetFilesToIndex } from "services/face/indexer"; +import { syncWithLocalFilesAndGetFilesToIndex } from "services/face/indexer"; import { FaceIndexerWorker } from "services/face/indexer.worker"; const batchSize = 200; @@ -56,7 +56,7 @@ class MachineLearningService { const syncContext = await this.getSyncContext(token, userID, userAgent); - syncContext.outOfSyncFiles = await syncAndGetFilesToIndex( + syncContext.outOfSyncFiles = await syncWithLocalFilesAndGetFilesToIndex( userID, batchSize, ); diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 38793680ed..3c2df24ec3 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -75,13 +75,12 @@ const RemoteEmbedding = z.object({ type RemoteEmbedding = z.infer; /** - * Fetch new or updated face embeddings with the server and save them locally. - * Also prune local embeddings for any files no longer exist locally. + * Fetch new or updated face embeddings from remote and save them locally. * * It takes no parameters since it saves the last sync time in local storage. * - * Precondition: This function should be called only after we have synced files - * with remote (See: [Note: Ignoring embeddings for unknown files]). + * This function should be called only after we have synced files with remote. + * See: [Note: Ignoring embeddings for unknown files]. */ export const syncRemoteFaceEmbeddings = async () => { // Include files from trash, otherwise they'll get unnecessarily reindexed @@ -91,9 +90,6 @@ export const syncRemoteFaceEmbeddings = async () => { ); const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); - // Delete embeddings for files which are no longer present locally. - // pruneFaceEmbeddings(localFilesByID); - const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { const file = localFilesByID.get(remoteEmbedding.fileID); // [Note: Ignoring embeddings for unknown files] diff --git a/web/packages/new/photos/services/face/db.ts b/web/packages/new/photos/services/face/db.ts index bd8255f40f..5a86605a45 100644 --- a/web/packages/new/photos/services/face/db.ts +++ b/web/packages/new/photos/services/face/db.ts @@ -217,30 +217,54 @@ export const addFileEntry = async (fileID: number) => { * Sync entries in the face DB to align with the state of local files outside * face DB. * - * @param localFileIDs Local {@link EnteFile}s, keyed by their IDs. These are - * all the files that the client is aware of, filtered to only keep the files - * that the user owns and the formats that can be indexed by our current face - * indexing pipeline. + * @param localFileIDs IDs of all the files that the client is aware of filtered + * to only keep the files that the user owns and the formats that can be indexed + * by our current face indexing pipeline. * - * This function syncs the state of file entries in face DB to the state of file - * entries stored otherwise by the client locally. + * @param localFilesInTrashIDs IDs of all the files in trash. * - * - Files (identified by their ID) that are present locally but are not yet in - * face DB get a fresh entry in face DB (and are marked as indexable). + * This function then updates the state of file entries in face DB to the be in + * "sync" with these provided local file IDS. * - * - Files that are not present locally but still exist in face DB are removed - * from face DB (including its face index, if any). + * - Files that are present locally but are not yet in face DB get a fresh entry + * in face DB (and are marked as indexable). + * + * - Files that are not present locally (nor are in trash) but still exist in + * face DB are removed from face DB (including their face index, if any). + * + * - Files that are not present locally but are in the trash are retained in + * face DB if their status is "indexed" (otherwise they too are removed). This + * is prevent churn (re-indexing) if the user moves some files to trash but + * then later restores them before they get permanently deleted. */ -export const syncWithLocalFiles = async (localFileIDs: number[]) => { +export const syncAssumingLocalFileIDs = async ( + localFileIDs: number[], + localFilesInTrashIDs: number[], +) => { const db = await faceDB(); const tx = db.transaction(["face-index", "file-status"], "readwrite"); const fdbFileIDs = await tx.objectStore("file-status").getAllKeys(); + const fdbIndexedFileIDs = await tx + .objectStore("file-status") + .getAllKeys(IDBKeyRange.only("indexed")); const local = new Set(localFileIDs); + const localTrash = new Set(localFilesInTrashIDs); const fdb = new Set(fdbFileIDs); + const fdbIndexed = new Set(fdbIndexedFileIDs); const newFileIDs = localFileIDs.filter((id) => !fdb.has(id)); - const removedFileIDs = fdbFileIDs.filter((id) => !local.has(id)); + const fileIDsToRemove = fdbFileIDs.filter((id) => { + if (local.has(id)) return false; // Still exists + if (localTrash.has(id)) { + // Exists in trash + if (fdbIndexed.has(id)) { + // But is already indexed, so let it be. + return false; + } + } + return true; // Remove + }); await Promise.all( [ @@ -251,10 +275,12 @@ export const syncWithLocalFiles = async (localFileIDs: number[]) => { failureCount: 0, }), ), - removedFileIDs.map((id) => + fileIDsToRemove.map((id) => tx.objectStore("file-status").delete(id), ), - removedFileIDs.map((id) => tx.objectStore("face-index").delete(id)), + fileIDsToRemove.map((id) => + tx.objectStore("face-index").delete(id), + ), tx.done, ].flat(), ); From 36d8c2a42717fd579c581e70b94ce99316395923 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 10:05:18 +0530 Subject: [PATCH 060/466] Specific-er than sync --- web/packages/new/photos/services/embedding.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 3c2df24ec3..a74209837d 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -82,7 +82,7 @@ type RemoteEmbedding = z.infer; * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. */ -export const syncRemoteFaceEmbeddings = async () => { +export const pullRemoteFaceEmbeddings = async () => { // Include files from trash, otherwise they'll get unnecessarily reindexed // if the user restores them from trash before permanent deletion. const localFiles = (await getAllLocalFiles()).concat( From dc5b0b4393bbbe6cfaa89ed129fce4349557598c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 10:32:38 +0530 Subject: [PATCH 061/466] Save --- web/packages/new/photos/services/embedding.ts | 97 ++++++++----------- 1 file changed, 38 insertions(+), 59 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index a74209837d..77b0e3dbc1 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -5,6 +5,7 @@ import log from "@/next/log"; import { nullToUndefined } from "@/utils/transform"; import { z } from "zod"; import { decryptFileMetadata } from "../../common/crypto/ente"; +import { saveFaceIndex } from "./face/db"; import { getAllLocalFiles } from "./files"; /** @@ -88,46 +89,29 @@ export const pullRemoteFaceEmbeddings = async () => { const localFiles = (await getAllLocalFiles()).concat( await getLocalTrashedFiles(), ); + // [Note: Ignoring embeddings for unknown files] + // + // We need the file to decrypt the embedding. This is easily ensured by + // running the embedding sync after we have synced our local files with + // remote. + // + // Still, it might happen that we come across an embedding for which we + // don't have the corresponding file locally. We can put them in two + // buckets: + // + // 1. Known case: In rare cases we might get a diff entry for an embedding + // corresponding to a file which has been deleted (but whose embedding + // is enqueued for deletion). Client should expect such a scenario, but + // all they have to do is just ignore such embeddings. + // + // 2. Other unknown cases: Even if somehow we end up with an embedding for + // a existent file which we don't have locally, it is fine because the + // current client will just regenerate the embedding if the file really + // exists and gets locally found later. There would be a bit of + // duplicate work, but that's fine as long as there isn't a systematic + // scenario where this happens. const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); - const decryptEmbedding = async (remoteEmbedding: RemoteEmbedding) => { - const file = localFilesByID.get(remoteEmbedding.fileID); - // [Note: Ignoring embeddings for unknown files] - // - // We need the file to decrypt the embedding. This is easily ensured by - // running the embedding sync after we have synced our local files with - // remote. - // - // Still, it might happen that we come across an embedding for which we - // don't have the corresponding file locally. We can put them in two - // buckets: - // - // 1. Known case: In rare cases we might get a diff entry for an - // embedding corresponding to a file which has been deleted (but - // whose embedding is enqueued for deletion). Client should expect - // such a scenario, but all they have to do is just ignore such - // embeddings. - // - // 2. Other unknown cases: Even if somehow we end up with an embedding - // for a existent file which we don't have locally, it is fine - // because the current client will just regenerate the embedding if - // the file really exists and gets locally found later. There would - // be a bit of duplicate work, but that's fine as long as there - // isn't a systematic scenario where this happens. - if (!file) return undefined; - try { - const decryptedString = await decryptFileMetadata( - remoteEmbedding.encryptedEmbedding, - remoteEmbedding.decryptionHeader, - file.key, - ); - return decryptedString; - } catch (e) { - log.warn("Ignoring unparseable embedding", e); - return undefined; - } - }; - let sinceTime = faceEmbeddingSyncTime(); // TODO: eslint has fixed this spurious warning, but we're not on the latest @@ -141,31 +125,26 @@ export const pullRemoteFaceEmbeddings = async () => { sinceTime, ); if (remoteEmbeddings.length == 0) break; - void (await Promise.all(remoteEmbeddings.map(decryptEmbedding))); - sinceTime = remoteEmbeddings.reduce( - (max, { updatedAt }) => Math.max(max, updatedAt), - sinceTime, - ); + for (const remoteEmbedding of remoteEmbeddings) { + sinceTime = Math.max(sinceTime, remoteEmbedding.updatedAt); + try { + const file = localFilesByID.get(remoteEmbedding.fileID); + if (!file) continue; + const jsonString = await decryptFileMetadata( + remoteEmbedding.encryptedEmbedding, + remoteEmbedding.decryptionHeader, + file.key, + ); + const faceIndex = FaceIndex.parse(JSON.parse(jsonString)); + await saveFaceIndex(faceIndex); + } catch (e) { + log.warn("Ignoring unparseable embedding", e); + } + } saveFaceEmbeddingSyncTime(sinceTime); } }; -// const decryptFaceEmbedding = async (remoteEmbedding: RemoteEmbedding) => { -// const fileKey = fileIdToKeyMap.get(embedding.fileID); -// if (!fileKey) { -// throw Error(CustomError.FILE_NOT_FOUND); -// } -// const decryptedData = await worker.decryptMetadata( -// embedding.encryptedEmbedding, -// embedding.decryptionHeader, -// fileIdToKeyMap.get(embedding.fileID), -// ); -// return { -// ...decryptedData, -// updatedAt: embedding.updatedAt, -// } as unknown as FileML; -// }; - /** * The updatedAt of the most recent face {@link RemoteEmbedding} we've retrieved * and saved from remote, or 0. From 84a03dafe35ccf0083fff05c338bc36eb6ca2b76 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 10:41:56 +0530 Subject: [PATCH 062/466] Isolate what changes --- .../photos/src/services/embeddingService.ts | 2 +- web/packages/new/photos/services/embedding.ts | 38 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts index 859557cbc9..b255086607 100644 --- a/web/apps/photos/src/services/embeddingService.ts +++ b/web/apps/photos/src/services/embeddingService.ts @@ -1,4 +1,5 @@ import type { EmbeddingModel } from "@/new/photos/services/embedding"; +import type { FaceIndex } from "@/new/photos/services/face/types"; import { getAllLocalFiles, getLocalTrashedFiles, @@ -20,7 +21,6 @@ import type { PutEmbeddingRequest, } from "types/embedding"; import { getLocalCollections } from "./collectionService"; -import type { FaceIndex } from "./face/types"; type FileML = FaceIndex & { updatedAt: number; diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 77b0e3dbc1..c7f30afd8d 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -84,6 +84,10 @@ type RemoteEmbedding = z.infer; * See: [Note: Ignoring embeddings for unknown files]. */ export const pullRemoteFaceEmbeddings = async () => { + const model: EmbeddingModel = "file-ml-clip-face"; + const saveEmbedding = (jsonString: string) => + saveFaceIndex(FaceIndex.parse(JSON.parse(jsonString))); + // Include files from trash, otherwise they'll get unnecessarily reindexed // if the user restores them from trash before permanent deletion. const localFiles = (await getAllLocalFiles()).concat( @@ -112,18 +116,14 @@ export const pullRemoteFaceEmbeddings = async () => { // scenario where this happens. const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); - let sinceTime = faceEmbeddingSyncTime(); - + let sinceTime = embeddingSyncTime(model); // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. // https://github.com/eslint/eslint/pull/18286 /* eslint-disable no-constant-condition */ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { - const remoteEmbeddings = await getEmbeddingsDiff( - "file-ml-clip-face", - sinceTime, - ); + const remoteEmbeddings = await getEmbeddingsDiff(model, sinceTime); if (remoteEmbeddings.length == 0) break; for (const remoteEmbedding of remoteEmbeddings) { sinceTime = Math.max(sinceTime, remoteEmbedding.updatedAt); @@ -135,29 +135,30 @@ export const pullRemoteFaceEmbeddings = async () => { remoteEmbedding.decryptionHeader, file.key, ); - const faceIndex = FaceIndex.parse(JSON.parse(jsonString)); - await saveFaceIndex(faceIndex); + await saveEmbedding(jsonString); } catch (e) { - log.warn("Ignoring unparseable embedding", e); + log.warn(`Ignoring unparseable ${model} embedding`, e); } } - saveFaceEmbeddingSyncTime(sinceTime); + saveEmbeddingSyncTime(sinceTime, model); } }; /** - * The updatedAt of the most recent face {@link RemoteEmbedding} we've retrieved - * and saved from remote, or 0. + * The updatedAt of the most recent {@link RemoteEmbedding} for {@link model} + * we've retrieved from remote. + * + * Returns 0 if there is no such embedding. * * This value is persisted to local storage. To update it, use - * {@link saveFaceEmbeddingSyncMarker}. + * {@link saveEmbeddingSyncTime}. */ -const faceEmbeddingSyncTime = () => - parseInt(localStorage.getItem("faceEmbeddingSyncTime") ?? "0"); +const embeddingSyncTime = (model: EmbeddingModel) => + parseInt(localStorage.getItem("embeddingSyncTime:" + model) ?? "0"); -/** Sibling of {@link faceEmbeddingSyncMarker}. */ -const saveFaceEmbeddingSyncTime = (t: number) => - localStorage.setItem("faceEmbeddingSyncTime", `${t}`); +/** Sibling of {@link embeddingSyncTime}. */ +const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => + localStorage.setItem("embeddingSyncTime:" + model, `${t}`); /** * Zod schemas for the {@link FaceIndex} types. @@ -183,7 +184,6 @@ const saveFaceEmbeddingSyncTime = (t: number) => * out of sync in the shape of the types they represent, the TypeScript compiler * will flag it for us. */ -// eslint-disable-next-line @typescript-eslint/no-unused-vars const FaceIndex = z .object({ fileID: z.number(), From ddf18bd0368bd26174a7051c0de49ea39a0cad61 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 11:21:52 +0530 Subject: [PATCH 063/466] Handle versioning --- web/apps/photos/src/services/face/crop.ts | 2 +- web/apps/photos/src/services/face/f-index.ts | 10 ++++- web/apps/photos/src/services/face/index.ts | 0 .../src/services/face/indexer.worker.ts | 2 +- web/apps/photos/src/services/face/remote.ts | 2 +- web/packages/new/photos/services/embedding.ts | 43 ++++++++++++------- .../new/photos/services/face/types.ts | 5 +++ 7 files changed, 44 insertions(+), 20 deletions(-) delete mode 100644 web/apps/photos/src/services/face/index.ts diff --git a/web/apps/photos/src/services/face/crop.ts b/web/apps/photos/src/services/face/crop.ts index ff1d6026af..ae5d44f104 100644 --- a/web/apps/photos/src/services/face/crop.ts +++ b/web/apps/photos/src/services/face/crop.ts @@ -1,6 +1,6 @@ +import type { Box } from "@/new/photos/services/face/types"; import { blobCache } from "@/next/blob-cache"; import type { FaceAlignment } from "./f-index"; -import type { Box } from "./types"; export const saveFaceCrop = async ( imageBitmap: ImageBitmap, diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/apps/photos/src/services/face/f-index.ts index 584b733148..cf41623e94 100644 --- a/web/apps/photos/src/services/face/f-index.ts +++ b/web/apps/photos/src/services/face/f-index.ts @@ -1,5 +1,12 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import type { + Box, + Dimensions, + Face, + Point, +} from "@/new/photos/services/face/types"; +import { faceIndexingVersion } from "@/new/photos/services/face/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; @@ -21,7 +28,6 @@ import { pixelRGBBilinear, warpAffineFloat32List, } from "./image"; -import type { Box, Dimensions, Face, Point } from "./types"; /** * Index faces in the given file. @@ -64,7 +70,7 @@ export const indexFaces = async ( width, height, faceEmbedding: { - version: 1, + version: faceIndexingVersion, client: userAgent, faces: await indexFacesInBitmap(fileID, imageBitmap), }, diff --git a/web/apps/photos/src/services/face/index.ts b/web/apps/photos/src/services/face/index.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web/apps/photos/src/services/face/indexer.worker.ts b/web/apps/photos/src/services/face/indexer.worker.ts index 27608a31c8..9df8a455ef 100644 --- a/web/apps/photos/src/services/face/indexer.worker.ts +++ b/web/apps/photos/src/services/face/indexer.worker.ts @@ -3,12 +3,12 @@ import { markIndexingFailed, saveFaceIndex, } from "@/new/photos/services/face/db"; +import type { FaceIndex } from "@/new/photos/services/face/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { fileLogID } from "utils/file"; import { indexFaces } from "./f-index"; import { putFaceIndex } from "./remote"; -import type { FaceIndex } from "./types"; /** * Index faces in a file, save the persist the results locally, and put them on diff --git a/web/apps/photos/src/services/face/remote.ts b/web/apps/photos/src/services/face/remote.ts index 2c4209ac28..daf177a0e4 100644 --- a/web/apps/photos/src/services/face/remote.ts +++ b/web/apps/photos/src/services/face/remote.ts @@ -1,8 +1,8 @@ +import type { FaceIndex } from "@/new/photos/services/face/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import { putEmbedding } from "services/embeddingService"; -import type { FaceIndex } from "./types"; export const putFaceIndex = async ( enteFile: EnteFile, diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index c7f30afd8d..83d3b6d71a 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -1,11 +1,11 @@ import { getLocalTrashedFiles } from "@/new/photos/services/files"; import { authenticatedRequestHeaders } from "@/next/http"; -import { apiURL } from "@/next/origins"; import log from "@/next/log"; -import { nullToUndefined } from "@/utils/transform"; +import { apiURL } from "@/next/origins"; import { z } from "zod"; import { decryptFileMetadata } from "../../common/crypto/ente"; import { saveFaceIndex } from "./face/db"; +import { faceIndexingVersion, type FaceIndex } from "./face/types"; import { getAllLocalFiles } from "./files"; /** @@ -22,17 +22,19 @@ import { getAllLocalFiles } from "./files"; * * [Note: Handling versioning of embeddings] * - * The embeddings themselves have a version included in them, so it is possible + * The embeddings themselves have a version embedded in them, so it is possible * for us to make backward compatible updates to the indexing process on newer - * clients. + * clients (There is a top level version field too but that is not used. * * If we bump the version of same model (say when indexing on a newer client), * the assumption will be that older client will be able to consume the - * response. Say if we improve blur detection, older client should just consume - * the newer version and not try to index the file locally. + * response. e.g. Say if we improve blur detection, older client should just + * consume embeddings with a newer version and not try to index the file again + * locally. * - * If you get version that is older, client should discard and try to index - * locally (if needed) and also put the newer version it has on remote. + * If we get an embedding with version that is older than the version the client + * supports, then the client should ignore it. This way, the file will get + * reindexed locally an embedding with a newer version will get put to remote. * * In the case where the changes are not backward compatible and can only be * consumed by clients with the relevant scaffolding, then we change this @@ -65,12 +67,6 @@ const RemoteEmbedding = z.object({ decryptionHeader: z.string(), /** Last time (epoch ms) this embedding was updated. */ updatedAt: z.number(), - /** - * The version for the embedding. Optional. - * - * See: [Note: Handling versioning of embeddings] - */ - version: z.number().nullish().transform(nullToUndefined), }); type RemoteEmbedding = z.infer; @@ -86,7 +82,7 @@ type RemoteEmbedding = z.infer; export const pullRemoteFaceEmbeddings = async () => { const model: EmbeddingModel = "file-ml-clip-face"; const saveEmbedding = (jsonString: string) => - saveFaceIndex(FaceIndex.parse(JSON.parse(jsonString))); + saveFaceIndexIfNewer(FaceIndex.parse(JSON.parse(jsonString))); // Include files from trash, otherwise they'll get unnecessarily reindexed // if the user restores them from trash before permanent deletion. @@ -160,6 +156,23 @@ const embeddingSyncTime = (model: EmbeddingModel) => const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => localStorage.setItem("embeddingSyncTime:" + model, `${t}`); +/** + * Save the given {@link faceIndex} locally if it is newer than the one we have. + * + * This is a variant of {@link saveFaceIndex} that performs version checking as + * described in [Note: Handling versioning of embeddings]. + */ +export const saveFaceIndexIfNewer = async (index: FaceIndex) => { + const version = index.faceEmbedding.version; + if (version <= faceIndexingVersion) { + log.info( + `Ignoring remote face index with version ${version} not newer than what our indexer supports (${faceIndexingVersion})`, + ); + return; + } + return saveFaceIndex(index); +}; + /** * Zod schemas for the {@link FaceIndex} types. * diff --git a/web/packages/new/photos/services/face/types.ts b/web/packages/new/photos/services/face/types.ts index a1db97a9af..44c78cc838 100644 --- a/web/packages/new/photos/services/face/types.ts +++ b/web/packages/new/photos/services/face/types.ts @@ -1,3 +1,8 @@ +/** The face indexing version supported by the current client. */ +// TODO: This belongs better to f-index.ts, but that file's in a different +// package currently, move it there once these two files are together again. +export const faceIndexingVersion = 1; + /** * The faces in a file (and an embedding for each of them). * From 7d8ade7fe41e82df288fe60e845196ef1b43e733 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 11:31:42 +0530 Subject: [PATCH 064/466] Extract --- web/packages/new/photos/services/embedding.ts | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 83d3b6d71a..603b14767b 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -72,18 +72,25 @@ const RemoteEmbedding = z.object({ type RemoteEmbedding = z.infer; /** - * Fetch new or updated face embeddings from remote and save them locally. + * Fetch new or updated embeddings from remote and save them locally. * - * It takes no parameters since it saves the last sync time in local storage. + * @param model The {@link EmbeddingModel} for which to pull embeddings. For + * each model, this function maintains the last sync time in local storage so + * subsequent fetches only pull what's new. + * + * @param save A function that is called to save the embedding. The save process + * can be model specific, so this provides us a hook to reuse the surrounding + * pull mechanisms while varying the save itself. This function will be passed + * the decrypted embedding string. If it throws, then we'll log about but + * otherwise ignore the embedding under consideration. * * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. */ -export const pullRemoteFaceEmbeddings = async () => { - const model: EmbeddingModel = "file-ml-clip-face"; - const saveEmbedding = (jsonString: string) => - saveFaceIndexIfNewer(FaceIndex.parse(JSON.parse(jsonString))); - +export const pullEmbeddings = async ( + model: EmbeddingModel, + save: (decryptedEmbedding: string) => Promise, +) => { // Include files from trash, otherwise they'll get unnecessarily reindexed // if the user restores them from trash before permanent deletion. const localFiles = (await getAllLocalFiles()).concat( @@ -119,6 +126,7 @@ export const pullRemoteFaceEmbeddings = async () => { /* eslint-disable no-constant-condition */ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { + let c = 0; const remoteEmbeddings = await getEmbeddingsDiff(model, sinceTime); if (remoteEmbeddings.length == 0) break; for (const remoteEmbedding of remoteEmbeddings) { @@ -126,17 +134,20 @@ export const pullRemoteFaceEmbeddings = async () => { try { const file = localFilesByID.get(remoteEmbedding.fileID); if (!file) continue; - const jsonString = await decryptFileMetadata( - remoteEmbedding.encryptedEmbedding, - remoteEmbedding.decryptionHeader, - file.key, + await save( + await decryptFileMetadata( + remoteEmbedding.encryptedEmbedding, + remoteEmbedding.decryptionHeader, + file.key, + ), ); - await saveEmbedding(jsonString); + c++; } catch (e) { log.warn(`Ignoring unparseable ${model} embedding`, e); } } saveEmbeddingSyncTime(sinceTime, model); + log.info(`Fetched ${c} ${model} embeddings`); } }; @@ -156,6 +167,19 @@ const embeddingSyncTime = (model: EmbeddingModel) => const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => localStorage.setItem("embeddingSyncTime:" + model, `${t}`); +/** + * Fetch new or updated face embeddings from remote and save them locally. + * + * It takes no parameters since it saves the last sync time in local storage. + * + * This function should be called only after we have synced files with remote. + * See: [Note: Ignoring embeddings for unknown files]. + */ +export const pullFaceEmbeddings = () => + pullEmbeddings("file-ml-clip-face", (jsonString: string) => + saveFaceIndexIfNewer(FaceIndex.parse(JSON.parse(jsonString))), + ); + /** * Save the given {@link faceIndex} locally if it is newer than the one we have. * From ea7619d40520b330fb8281fb8c61aa74d64b8d61 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 11:51:39 +0530 Subject: [PATCH 065/466] Potential entry point --- web/packages/new/photos/services/embedding.ts | 2 +- .../new/photos/services/face/worker.ts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 web/packages/new/photos/services/face/worker.ts diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 603b14767b..b7fe375975 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -87,7 +87,7 @@ type RemoteEmbedding = z.infer; * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. */ -export const pullEmbeddings = async ( +const pullEmbeddings = async ( model: EmbeddingModel, save: (decryptedEmbedding: string) => Promise, ) => { diff --git a/web/packages/new/photos/services/face/worker.ts b/web/packages/new/photos/services/face/worker.ts new file mode 100644 index 0000000000..0902bed53b --- /dev/null +++ b/web/packages/new/photos/services/face/worker.ts @@ -0,0 +1,22 @@ +import { pullFaceEmbeddings } from "../embedding"; + +/** + * Run operations related to face indexing and search in a Web Worker. + * + * This is a normal class that is however exposed (via comlink) as a proxy + * running inside a Web Worker. This way, we do not bother the main thread with + * tasks that might degrade interactivity. + */ +export class FaceWorker { + private isSyncing = false; + + /** + * Pull embeddings from remote, and start backfilling if needed. + */ + async sync() { + if (this.isSyncing) return; + this.isSyncing = true; + await pullFaceEmbeddings(); + this.isSyncing = false; + } +} From dd3243492a701495d3204595f436b7ac20728f06 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 12:40:48 +0530 Subject: [PATCH 066/466] Use module state --- .../new/photos/services/face/index.ts | 36 +++++++++++++++++++ web/packages/next/worker/comlink-worker.ts | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 web/packages/new/photos/services/face/index.ts diff --git a/web/packages/new/photos/services/face/index.ts b/web/packages/new/photos/services/face/index.ts new file mode 100644 index 0000000000..50560db93c --- /dev/null +++ b/web/packages/new/photos/services/face/index.ts @@ -0,0 +1,36 @@ +/** + * @file Main thread interface to {@link FaceWorker}. + */ + +import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { FaceWorker } from "./worker"; + +/** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ +let _comlinkWorker: ComlinkWorker | undefined; + +/** Lazily created, cached, instance of {@link FaceWorker}. */ +export const faceWorker = async () => { + let comlinkWorker = _comlinkWorker; + if (!comlinkWorker) _comlinkWorker = comlinkWorker = createComlinkWorker(); + return await comlinkWorker.remote; +}; + +const createComlinkWorker = () => + new ComlinkWorker( + "face", + new Worker(new URL("worker.ts", import.meta.url)), + ); + +/** + * Terminate {@link faceWorker} (if any). + * + * This is useful during logout to immediately stop any background face related + * operations that are in-flight for the current user. After the user logs in + * again, a new {@link faceWorker} will be created on demand. + */ +export const terminateFaceWorker = () => { + if (_comlinkWorker) { + _comlinkWorker.terminate(); + _comlinkWorker = undefined; + } +}; diff --git a/web/packages/next/worker/comlink-worker.ts b/web/packages/next/worker/comlink-worker.ts index a546409839..1a6645d334 100644 --- a/web/packages/next/worker/comlink-worker.ts +++ b/web/packages/next/worker/comlink-worker.ts @@ -25,7 +25,7 @@ export class ComlinkWorker InstanceType> { public terminate() { this.worker.terminate(); - log.debug(() => `Terminated ${this.name}`); + log.debug(() => `Terminated web worker ${this.name}`); } } From 7d46de139e0a57849b7a37e5402f87d554b439f5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 13:16:09 +0530 Subject: [PATCH 067/466] Logout --- web/apps/photos/src/services/logout.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 1a6c5547e8..266247ca98 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,3 +1,4 @@ +import { terminateFaceWorker } from "@/new/photos/services/face"; import { clearFaceData } from "@/new/photos/services/face/db"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import log from "@/next/log"; @@ -41,6 +42,12 @@ export const photosLogout = async () => { ignoreError("CLIP", e); } + try { + terminateFaceWorker(); + } catch (e) { + ignoreError("face", e); + } + const electron = globalThis.electron; if (electron) { try { From 90c15774d7d21f4b0b6e6ce39d18884047a617ee Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 13:28:35 +0530 Subject: [PATCH 068/466] Extract --- web/apps/photos/src/pages/gallery/index.tsx | 20 +++----------- web/apps/photos/src/services/sync.ts | 30 +++++++++++++++++++++ 2 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 web/apps/photos/src/services/sync.ts diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx index a5c180c3aa..8bac954cbb 100644 --- a/web/apps/photos/src/pages/gallery/index.tsx +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -1,6 +1,5 @@ import { WhatsNew } from "@/new/photos/components/WhatsNew"; import { shouldShowWhatsNew } from "@/new/photos/services/changelog"; -import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; import { getLocalFiles, getLocalTrashedFiles, @@ -94,13 +93,12 @@ import { getSectionSummaries, } from "services/collectionService"; import downloadManager from "services/download"; -import { syncCLIPEmbeddings } from "services/embeddingService"; -import { syncEntities } from "services/entityService"; import { syncFiles } from "services/fileService"; import locationSearchService from "services/locationSearchService"; +import { sync } from "services/sync"; import { syncTrash } from "services/trashService"; import uploadManager from "services/upload/uploadManager"; -import { isTokenValid, syncMapEnabled } from "services/userService"; +import { isTokenValid } from "services/userService"; import { Collection, CollectionSummaries } from "types/collection"; import { GalleryContextType, @@ -720,19 +718,7 @@ export default function Gallery() { await syncFiles("normal", normalCollections, setFiles); await syncFiles("hidden", hiddenCollections, setHiddenFiles); await syncTrash(collections, setTrashedFiles); - await syncEntities(); - await syncMapEnabled(); - fetchAndSaveFeatureFlagsIfNeeded(); - const electron = globalThis.electron; - if (electron) { - await syncCLIPEmbeddings(); - // TODO-ML(MR): Disable fetch until we start storing it in the - // same place as the local ones. - // if (isFaceIndexingEnabled()) await syncFaceEmbeddings(); - } - if (clipService.isPlatformSupported()) { - void clipService.scheduleImageEmbeddingExtraction(); - } + await sync(); } catch (e) { switch (e.message) { case CustomError.SESSION_EXPIRED: diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts new file mode 100644 index 0000000000..19f5812834 --- /dev/null +++ b/web/apps/photos/src/services/sync.ts @@ -0,0 +1,30 @@ +import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; +import { clipService } from "services/clip-service"; +import { syncCLIPEmbeddings } from "services/embeddingService"; +import { syncEntities } from "services/entityService"; +import { syncMapEnabled } from "services/userService"; + +/** + * Perform a soft "refresh" by making various API calls to fetch state from + * remote, using it to update our local state, and triggering periodic jobs that + * depend on the local state. + */ +export const sync = async () => { + // TODO: This is called after we've synced the local files DBs with remote. + // That code belongs here, but currently that state is persisted in the top + // level gallery React component. + + await syncEntities(); + await syncMapEnabled(); + fetchAndSaveFeatureFlagsIfNeeded(); + const electron = globalThis.electron; + if (electron) { + await syncCLIPEmbeddings(); + // TODO-ML(MR): Disable fetch until we start storing it in the + // same place as the local ones. + // if (isFaceIndexingEnabled()) await syncFaceEmbeddings(); + } + if (clipService.isPlatformSupported()) { + void clipService.scheduleImageEmbeddingExtraction(); + } +}; From 57a587301bc1e5cce1070228ddcdd905223a8218 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 13:35:06 +0530 Subject: [PATCH 069/466] Hook back into the app --- web/apps/photos/src/pages/_app.tsx | 4 ++-- web/apps/photos/src/services/face/indexer.ts | 13 ++++++------- web/apps/photos/src/services/searchService.ts | 4 +--- web/apps/photos/src/services/sync.ts | 6 +++--- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 1cdcb6b3b8..a012881fb9 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -202,7 +202,7 @@ export default function App({ Component, pageProps }: AppProps) { } const loadMlSearchState = async () => { try { - const enabled = await isFaceIndexingEnabled(); + const enabled = isFaceIndexingEnabled(); setMlSearchEnabled(enabled); mlWorkManager.setMlSearchEnabled(enabled); } catch (e) { @@ -302,7 +302,7 @@ export default function App({ Component, pageProps }: AppProps) { const showNavBar = (show: boolean) => setShowNavBar(show); const updateMlSearchEnabled = async (enabled: boolean) => { try { - await setIsFaceIndexingEnabled(enabled); + setIsFaceIndexingEnabled(enabled); setMlSearchEnabled(enabled); mlWorkManager.setMlSearchEnabled(enabled); } catch (e) { diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/apps/photos/src/services/face/indexer.ts index 74e700a3f0..820b9c4519 100644 --- a/web/apps/photos/src/services/face/indexer.ts +++ b/web/apps/photos/src/services/face/indexer.ts @@ -215,17 +215,16 @@ export const canEnableFaceIndexing = async () => * on any client. This {@link isFaceIndexingEnabled} property, on the other * hand, denotes whether or not indexing is enabled on the current client. */ -export const isFaceIndexingEnabled = async () => { - return localStorage.getItem("faceIndexingEnabled") == "1"; -}; +export const isFaceIndexingEnabled = () => + localStorage.getItem("faceIndexingEnabled") == "1"; /** * Update the (locally stored) value of {@link isFaceIndexingEnabled}. */ -export const setIsFaceIndexingEnabled = async (enabled: boolean) => { - if (enabled) localStorage.setItem("faceIndexingEnabled", "1"); - else localStorage.removeItem("faceIndexingEnabled"); -}; +export const setIsFaceIndexingEnabled = (enabled: boolean) => + enabled + ? localStorage.setItem("faceIndexingEnabled", "1") + : localStorage.removeItem("faceIndexingEnabled"); /** * Sync face DB with the local (and potentially indexable) files that we know diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 9fe1580e55..5247ef61e4 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -32,9 +32,7 @@ export const getDefaultOptions = async () => { return [ // TODO-ML(MR): Skip this for now if indexing is disabled (eventually // the indexing status should not be tied to results). - ...((await isFaceIndexingEnabled()) - ? [await getIndexStatusSuggestion()] - : []), + ...(isFaceIndexingEnabled() ? [await getIndexStatusSuggestion()] : []), ...(await convertSuggestionsToOptions(await getAllPeopleSuggestion())), ].filter((t) => !!t); }; diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index 19f5812834..05481d9597 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,8 +1,10 @@ +import { faceWorker } from "@/new/photos/services/face"; import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; import { clipService } from "services/clip-service"; import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; import { syncMapEnabled } from "services/userService"; +import { isFaceIndexingEnabled } from "./face/indexer"; /** * Perform a soft "refresh" by making various API calls to fetch state from @@ -20,9 +22,7 @@ export const sync = async () => { const electron = globalThis.electron; if (electron) { await syncCLIPEmbeddings(); - // TODO-ML(MR): Disable fetch until we start storing it in the - // same place as the local ones. - // if (isFaceIndexingEnabled()) await syncFaceEmbeddings(); + if (isFaceIndexingEnabled()) await (await faceWorker()).sync(); } if (clipService.isPlatformSupported()) { void clipService.scheduleImageEmbeddingExtraction(); From 266796f6194d3adee62877726104e42246f8e6dd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 10:52:34 +0530 Subject: [PATCH 070/466] wa --- web/packages/new/photos/services/embedding.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index b7fe375975..ec4b84bf7f 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -177,6 +177,10 @@ const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => */ export const pullFaceEmbeddings = () => pullEmbeddings("file-ml-clip-face", (jsonString: string) => + // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: There is no error here, but this file is imported by + // one of our packages that doesn't have strict mode enabled yet, + // causing a spurious error to be emitted in that context. saveFaceIndexIfNewer(FaceIndex.parse(JSON.parse(jsonString))), ); From 4d41f2d64c432ec88d388413f9b224011a0da3ca Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:15:43 +0530 Subject: [PATCH 071/466] Remove unused --- web/packages/shared/storage/localStorage/helpers.ts | 8 -------- web/packages/shared/storage/localStorage/index.ts | 1 - 2 files changed, 9 deletions(-) diff --git a/web/packages/shared/storage/localStorage/helpers.ts b/web/packages/shared/storage/localStorage/helpers.ts index 95ae280e37..390ea93d92 100644 --- a/web/packages/shared/storage/localStorage/helpers.ts +++ b/web/packages/shared/storage/localStorage/helpers.ts @@ -21,14 +21,6 @@ export function setJustSignedUp(status: boolean) { setData(LS_KEYS.JUST_SIGNED_UP, { status }); } -export function getLivePhotoInfoShownCount() { - return getData(LS_KEYS.LIVE_PHOTO_INFO_SHOWN_COUNT)?.count ?? 0; -} - -export function setLivePhotoInfoShownCount(count: boolean) { - setData(LS_KEYS.LIVE_PHOTO_INFO_SHOWN_COUNT, { count }); -} - export function getLocalMapEnabled(): boolean { return getData(LS_KEYS.MAP_ENABLED)?.value ?? false; } diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index 3df5caf973..c95fa01bf7 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -12,7 +12,6 @@ export enum LS_KEYS { SHOW_BACK_BUTTON = "showBackButton", EXPORT = "export", THUMBNAIL_FIX_STATE = "thumbnailFixState", - LIVE_PHOTO_INFO_SHOWN_COUNT = "livePhotoInfoShownCount", // LOGS = "logs", USER_DETAILS = "userDetails", COLLECTION_SORT_BY = "collectionSortBy", From ea51cdfc7744ead266eb19173053eb3c2b8ead52 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:17:31 +0530 Subject: [PATCH 072/466] Remove unused --- web/packages/shared/storage/localStorage/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index c95fa01bf7..5a22e9db21 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -2,7 +2,6 @@ import log from "@/next/log"; export enum LS_KEYS { USER = "user", - SESSION = "session", KEY_ATTRIBUTES = "keyAttributes", ORIGINAL_KEY_ATTRIBUTES = "originalKeyAttributes", SUBSCRIPTION = "subscription", @@ -11,12 +10,10 @@ export enum LS_KEYS { JUST_SIGNED_UP = "justSignedUp", SHOW_BACK_BUTTON = "showBackButton", EXPORT = "export", - THUMBNAIL_FIX_STATE = "thumbnailFixState", // LOGS = "logs", USER_DETAILS = "userDetails", COLLECTION_SORT_BY = "collectionSortBy", THEME = "theme", - WAIT_TIME = "waitTime", // Moved to the new wrapper @/next/local-storage // LOCALE = 'locale', MAP_ENABLED = "mapEnabled", From 66cb95e32cfca5ff5f70e8b1c140b8db79557b40 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:31:43 +0530 Subject: [PATCH 073/466] Fix hanging paren --- web/packages/new/photos/services/embedding.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index ec4b84bf7f..2d6e939b5f 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -24,7 +24,7 @@ import { getAllLocalFiles } from "./files"; * * The embeddings themselves have a version embedded in them, so it is possible * for us to make backward compatible updates to the indexing process on newer - * clients (There is a top level version field too but that is not used. + * clients (There is also a top level version field too but that is not used). * * If we bump the version of same model (say when indexing on a newer client), * the assumption will be that older client will be able to consume the From bb37630bae05a4285b6a62114d21dca39e0bc34e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:32:21 +0530 Subject: [PATCH 074/466] Nicer --- web/packages/new/photos/services/embedding.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 2d6e939b5f..82de19ec9d 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -126,9 +126,9 @@ const pullEmbeddings = async ( /* eslint-disable no-constant-condition */ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { - let c = 0; const remoteEmbeddings = await getEmbeddingsDiff(model, sinceTime); if (remoteEmbeddings.length == 0) break; + let count = 0; for (const remoteEmbedding of remoteEmbeddings) { sinceTime = Math.max(sinceTime, remoteEmbedding.updatedAt); try { @@ -141,13 +141,13 @@ const pullEmbeddings = async ( file.key, ), ); - c++; + count++; } catch (e) { log.warn(`Ignoring unparseable ${model} embedding`, e); } } saveEmbeddingSyncTime(sinceTime, model); - log.info(`Fetched ${c} ${model} embeddings`); + log.info(`Fetched ${count} ${model} embeddings`); } }; From 8b16b4632f35fa601b52c4af75ca6811a617bd6e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:34:50 +0530 Subject: [PATCH 075/466] Renames --- web/apps/photos/src/services/face/indexer.ts | 12 ++++----- web/packages/new/photos/services/face/db.ts | 26 +++++++++----------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/apps/photos/src/services/face/indexer.ts index 820b9c4519..a7dfe319b9 100644 --- a/web/apps/photos/src/services/face/indexer.ts +++ b/web/apps/photos/src/services/face/indexer.ts @@ -2,7 +2,7 @@ import { faceIndex, indexableFileIDs, indexedAndIndexableCounts, - syncAssumingLocalFileIDs, + updateAssumingLocalFiles, } from "@/new/photos/services/face/db"; import { isBetaUser, @@ -231,7 +231,7 @@ export const setIsFaceIndexingEnabled = (enabled: boolean) => * about. Then return the next {@link count} files that still need to be * indexed. * - * For specifics of what a "sync" entails, see {@link syncAssumingLocalFileIDs}. + * For specifics of what a "sync" entails, see {@link updateAssumingLocalFiles}. * * @param userID Sync only files owned by a {@link userID} with the face DB. * @@ -248,13 +248,11 @@ export const syncWithLocalFilesAndGetFilesToIndex = async ( localFiles.filter(isIndexable).map((f) => [f.id, f]), ); - const localFilesInTrashIDs = (await getLocalTrashedFiles()).map( - (f) => f.id, - ); + const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); - await syncAssumingLocalFileIDs( + await updateAssumingLocalFiles( [...localFilesByID.keys()], - localFilesInTrashIDs, + localTrashFileIDs, ); const fileIDsToIndex = await indexableFileIDs(count); diff --git a/web/packages/new/photos/services/face/db.ts b/web/packages/new/photos/services/face/db.ts index 5a86605a45..4e3eb74dab 100644 --- a/web/packages/new/photos/services/face/db.ts +++ b/web/packages/new/photos/services/face/db.ts @@ -214,17 +214,17 @@ export const addFileEntry = async (fileID: number) => { }; /** - * Sync entries in the face DB to align with the state of local files outside + * Update entries in the face DB to align with the state of local files outside * face DB. * * @param localFileIDs IDs of all the files that the client is aware of filtered * to only keep the files that the user owns and the formats that can be indexed * by our current face indexing pipeline. * - * @param localFilesInTrashIDs IDs of all the files in trash. + * @param localTrashFilesIDs IDs of all the files in trash. * * This function then updates the state of file entries in face DB to the be in - * "sync" with these provided local file IDS. + * sync with these provided local file IDS. * * - Files that are present locally but are not yet in face DB get a fresh entry * in face DB (and are marked as indexable). @@ -237,9 +237,9 @@ export const addFileEntry = async (fileID: number) => { * is prevent churn (re-indexing) if the user moves some files to trash but * then later restores them before they get permanently deleted. */ -export const syncAssumingLocalFileIDs = async ( +export const updateAssumingLocalFiles = async ( localFileIDs: number[], - localFilesInTrashIDs: number[], + localTrashFilesIDs: number[], ) => { const db = await faceDB(); const tx = db.transaction(["face-index", "file-status"], "readwrite"); @@ -249,21 +249,21 @@ export const syncAssumingLocalFileIDs = async ( .getAllKeys(IDBKeyRange.only("indexed")); const local = new Set(localFileIDs); - const localTrash = new Set(localFilesInTrashIDs); + const localTrash = new Set(localTrashFilesIDs); const fdb = new Set(fdbFileIDs); const fdbIndexed = new Set(fdbIndexedFileIDs); const newFileIDs = localFileIDs.filter((id) => !fdb.has(id)); - const fileIDsToRemove = fdbFileIDs.filter((id) => { - if (local.has(id)) return false; // Still exists + const removedFileIDs = fdbFileIDs.filter((id) => { + if (local.has(id)) return false; // Still exists. if (localTrash.has(id)) { - // Exists in trash + // Exists in trash. if (fdbIndexed.has(id)) { // But is already indexed, so let it be. return false; } } - return true; // Remove + return true; // Remove. }); await Promise.all( @@ -275,12 +275,10 @@ export const syncAssumingLocalFileIDs = async ( failureCount: 0, }), ), - fileIDsToRemove.map((id) => + removedFileIDs.map((id) => tx.objectStore("file-status").delete(id), ), - fileIDsToRemove.map((id) => - tx.objectStore("face-index").delete(id), - ), + removedFileIDs.map((id) => tx.objectStore("face-index").delete(id)), tx.done, ].flat(), ); From ad2dabcc962c98a2b87cb78658159523ca1c82ff Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 11:43:15 +0530 Subject: [PATCH 076/466] Fix again --- web/packages/next/origins.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/packages/next/origins.ts b/web/packages/next/origins.ts index 8200df95a3..13937f42c0 100644 --- a/web/packages/next/origins.ts +++ b/web/packages/next/origins.ts @@ -1,4 +1,5 @@ import { getKV, setKV } from "@/next/kv"; +import { inWorker } from "./env"; /** * Return the origin (scheme, host, port triple) that should be used for making @@ -36,7 +37,7 @@ export const apiURL = async (path: string) => (await apiOrigin()) + path; */ export const customAPIOrigin = async () => { let origin = await getKV("apiOrigin"); - if (!origin) { + if (!origin && !inWorker()) { // TODO: Migration of apiOrigin from local storage to indexed DB // Remove me after a bit (27 June 2024). const legacyOrigin = localStorage.getItem("apiOrigin"); From 3c86a9bc0652b29dc9dde910181683ef0b960413 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Sat, 29 Jun 2024 14:19:47 +0530 Subject: [PATCH 077/466] [mob][photos] Added time delay for invalid attempts --- mobile/lib/main.dart | 2 +- .../local_authentication_service.dart | 15 ++- .../lockscreen/lock_screen_option.dart | 8 +- ....dart => lockscreen_confirm_password.dart} | 11 +- ...m_pin.dart => lockscreen_confirm_pin.dart} | 10 +- ...password.dart => lockscreen_password.dart} | 35 +++-- ...en_option_pin.dart => lockscreen_pin.dart} | 56 +++++--- mobile/lib/ui/tools/lock_screen.dart | 121 ++++++++++++++---- mobile/lib/utils/auth_util.dart | 13 +- mobile/lib/utils/lockscreen_setting.dart | 24 +++- 10 files changed, 217 insertions(+), 78 deletions(-) rename mobile/lib/ui/settings/lockscreen/{lock_screen_option_confirm_password.dart => lockscreen_confirm_password.dart} (94%) rename mobile/lib/ui/settings/lockscreen/{lock_screen_option_confirm_pin.dart => lockscreen_confirm_pin.dart} (97%) rename mobile/lib/ui/settings/lockscreen/{lock_screen_option_password.dart => lockscreen_password.dart} (84%) rename mobile/lib/ui/settings/lockscreen/{lock_screen_option_pin.dart => lockscreen_pin.dart} (90%) diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 70a53224d9..ec49a844c5 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -212,7 +212,7 @@ Future _init(bool isBackground, {String via = ''}) async { CryptoUtil.init(); _logger.info("Lockscreen init"); - LockscreenSetting.instance.init(secureStorage); + LockscreenSetting.instance.init(secureStorage, preferences); _logger.info("Configuration init"); await Configuration.instance.init(); diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 490b2b5dcc..73cc0e3701 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,8 +3,8 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; -import "package:photos/ui/settings/lockscreen/lock_screen_option_password.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option_pin.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_password.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import 'package:photos/utils/dialog_util.dart'; @@ -38,14 +38,16 @@ class LocalAuthenticationService { Future requestEnteAuthForLockScreen( BuildContext context, String? savedPin, - String? savedPassword, - ) async { + String? savedPassword, { + bool isLockscreenAuth = false, + }) async { if (savedPassword != null) { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { - return LockScreenOptionPassword( + return LockScreenPassword( isAuthenticating: true, + isLockscreenAuth: isLockscreenAuth, authPass: savedPassword, ); }, @@ -59,8 +61,9 @@ class LocalAuthenticationService { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { - return LockScreenOptionPin( + return LockScreenPin( isAuthenticating: true, + isLockscreenAuth: isLockscreenAuth, authPin: savedPin, ); }, diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart index d7d9c31f99..57e5529297 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart +++ b/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart @@ -7,8 +7,8 @@ import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/components/toggle_switch_widget.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option_password.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option_pin.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_password.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_pin.dart"; import "package:photos/ui/tools/app_lock.dart"; import "package:photos/utils/lockscreen_setting.dart"; @@ -53,7 +53,7 @@ class _LockScreenOptionState extends State { final bool result = await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { - return const LockScreenOptionPin(); + return const LockScreenPin(); }, ), ); @@ -71,7 +71,7 @@ class _LockScreenOptionState extends State { final bool result = await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { - return const LockScreenOptionPassword(); + return const LockScreenPassword(); }, ), ); diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart similarity index 94% rename from mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart rename to mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart index 2cb22dac92..1ab2861c57 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart @@ -7,20 +7,19 @@ import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; import "package:photos/utils/lockscreen_setting.dart"; -class LockScreenOptionConfirmPassword extends StatefulWidget { - const LockScreenOptionConfirmPassword({ +class LockScreenConfirmPassword extends StatefulWidget { + const LockScreenConfirmPassword({ super.key, required this.password, }); final String password; @override - State createState() => - _LockScreenOptionConfirmPasswordState(); + State createState() => + _LockScreenConfirmPasswordState(); } -class _LockScreenOptionConfirmPasswordState - extends State { +class _LockScreenConfirmPasswordState extends State { /// _confirmPasswordController is disposed by the [TextInputWidget] final _confirmPasswordController = TextEditingController(text: null); diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart similarity index 97% rename from mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart rename to mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart index 2f8e9a20a2..138fbd2808 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart @@ -7,16 +7,14 @@ import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/utils/lockscreen_setting.dart"; import "package:pinput/pinput.dart"; -class LockScreenOptionConfirmPin extends StatefulWidget { - const LockScreenOptionConfirmPin({super.key, required this.pin}); +class LockScreenConfirmPin extends StatefulWidget { + const LockScreenConfirmPin({super.key, required this.pin}); final String pin; @override - State createState() => - _LockScreenOptionConfirmPinState(); + State createState() => _LockScreenConfirmPinState(); } -class _LockScreenOptionConfirmPinState - extends State { +class _LockScreenConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart similarity index 84% rename from mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart rename to mobile/lib/ui/settings/lockscreen/lockscreen_password.dart index 396db510ca..f9ca2f7d05 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart @@ -8,37 +8,41 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option_confirm_password.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_confirm_password.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/lockscreen_setting.dart"; -class LockScreenOptionPassword extends StatefulWidget { - const LockScreenOptionPassword({ +class LockScreenPassword extends StatefulWidget { + const LockScreenPassword({ super.key, this.isAuthenticating = false, + this.isLockscreenAuth = false, this.authPass, }); - /// If [isAuthenticating] is true then we are authenticating the user + /// If [isLockscreenAuth] is true then we are authenticating the user at Lock screen + /// If [isAuthenticating] is true then we are authenticating the user at Setting screen final bool isAuthenticating; + final bool isLockscreenAuth; final String? authPass; @override - State createState() => - _LockScreenOptionPasswordState(); + State createState() => _LockScreenPasswordState(); } -class _LockScreenOptionPasswordState extends State { +class _LockScreenPasswordState extends State { /// _passwordController is disposed by the [TextInputWidget] final _passwordController = TextEditingController(text: null); final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); final _submitNotifier = ValueNotifier(false); + int invalidAttemptsCount = 0; final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; - late String hashedPassword; + late String enteredHashedPassword; @override void initState() { super.initState(); + invalidAttemptsCount = _lockscreenSetting.getInvalidAttemptCount(); WidgetsBinding.instance.addPostFrameCallback((_) async { _focusNode.requestFocus(); }); @@ -61,11 +65,20 @@ class _LockScreenOptionPasswordState extends State { "memLimit": Sodium.cryptoPwhashMemlimitInteractive, }); - hashedPassword = base64Encode(hash); - if (widget.authPass == hashedPassword) { + enteredHashedPassword = base64Encode(hash); + if (widget.authPass == enteredHashedPassword) { + await _lockscreenSetting.setInvalidAttemptCount(0); Navigator.of(context).pop(true); return true; } else { + if (widget.isLockscreenAuth) { + invalidAttemptsCount++; + if (invalidAttemptsCount > 4) { + await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); + Navigator.of(context).pop(false); + } + } + await HapticFeedback.vibrate(); throw Exception("Incorrect password"); } @@ -78,7 +91,7 @@ class _LockScreenOptionPasswordState extends State { } else { await Navigator.of(context).push( MaterialPageRoute( - builder: (BuildContext context) => LockScreenOptionConfirmPassword( + builder: (BuildContext context) => LockScreenConfirmPassword( password: _passwordController.text, ), ), diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart similarity index 90% rename from mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart rename to mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart index e64e52f284..a64936ee89 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart @@ -7,31 +7,41 @@ import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option_confirm_pin.dart"; +import "package:photos/ui/settings/lockscreen/lockscreen_confirm_pin.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/lockscreen_setting.dart"; import 'package:pinput/pinput.dart'; -class LockScreenOptionPin extends StatefulWidget { - const LockScreenOptionPin({ +class LockScreenPin extends StatefulWidget { + const LockScreenPin({ super.key, this.isAuthenticating = false, + this.isLockscreenAuth = false, this.authPin, }); - /// If [isAuthenticating] is true then we are authenticating the user + /// If [isLockscreenAuth] is true then we are authenticating the user at the Lock screen + /// If [isAuthenticating] is true then we are authenticating the user at the Setting screen final bool isAuthenticating; + final bool isLockscreenAuth; final String? authPin; @override - State createState() => _LockScreenOptionPinState(); + State createState() => _LockScreenPinState(); } -class _LockScreenOptionPinState extends State { +class _LockScreenPinState extends State { final _pinController = TextEditingController(text: null); final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; late String enteredHashedPin; bool isPinValid = false; + int invalidAttemptsCount = 0; + + @override + void initState() { + super.initState(); + invalidAttemptsCount = _lockscreenSetting.getInvalidAttemptCount(); + } @override void dispose() { @@ -63,19 +73,30 @@ class _LockScreenOptionPinState extends State { enteredHashedPin = base64Encode(hash); if (widget.authPin == enteredHashedPin) { + invalidAttemptsCount = 0; + await _lockscreenSetting.setInvalidAttemptCount(0); Navigator.of(context).pop(true); return true; + } else { + setState(() { + isPinValid = true; + }); + await HapticFeedback.vibrate(); + await Future.delayed(const Duration(milliseconds: 75)); + _pinController.clear(); + setState(() { + isPinValid = false; + }); + + if (widget.isLockscreenAuth) { + invalidAttemptsCount++; + if (invalidAttemptsCount > 4) { + await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); + Navigator.of(context).pop(false); + } + } + return false; } - setState(() { - isPinValid = true; - }); - await HapticFeedback.vibrate(); - await Future.delayed(const Duration(milliseconds: 75)); - _pinController.clear(); - setState(() { - isPinValid = false; - }); - return false; } Future _confirmPin(String code) async { @@ -85,8 +106,7 @@ class _LockScreenOptionPinState extends State { } else { await Navigator.of(context).push( MaterialPageRoute( - builder: (BuildContext context) => - LockScreenOptionConfirmPin(pin: code), + builder: (BuildContext context) => LockScreenConfirmPin(pin: code), ), ); _pinController.clear(); diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index f5f0696a3c..91e2bbfd4d 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -1,4 +1,6 @@ +import "dart:async"; import "dart:io"; +import "dart:math"; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; @@ -6,6 +8,7 @@ import "package:photos/l10n/l10n.dart"; import 'package:photos/ui/common/gradient_button.dart'; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; +import "package:photos/utils/lockscreen_setting.dart"; class LockScreen extends StatefulWidget { const LockScreen({Key? key}) : super(key: key); @@ -20,11 +23,17 @@ class _LockScreenState extends State with WidgetsBindingObserver { bool _hasPlacedAppInBackground = false; bool _hasAuthenticationFailed = false; int? lastAuthenticatingTime; + bool isTimerRunning = false; + int lockedTime = 0; + int invalidAttemptCount = 0; + int remainingTime = 0; + final _lockscreenSetting = LockscreenSetting.instance; @override void initState() { _logger.info("initiatingState"); super.initState(); + invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount(); WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { if (isNonMobileIOSDevice()) { @@ -53,11 +62,14 @@ class _LockScreenState extends State with WidgetsBindingObserver { SizedBox( width: 180, child: GradientButton( - text: context.l10n.unlock, + text: isTimerRunning + ? formatTime(remainingTime) + : context.l10n.unlock, iconData: Icons.lock_open_outlined, onTap: () async { - // ignore: unawaited_futures - _showLockScreen(source: "tapUnlock"); + if (!isTimerRunning) { + await _showLockScreen(source: "tapUnlock"); + } }, ), ), @@ -78,32 +90,38 @@ class _LockScreenState extends State with WidgetsBindingObserver { } @override - void didChangeAppLifecycleState(AppLifecycleState state) { + Future didChangeAppLifecycleState(AppLifecycleState state) async { _logger.info(state.toString()); if (state == AppLifecycleState.resumed && !_isShowingLockScreen) { - // This is triggered either when the lock screen is dismissed or when - // the app is brought to foreground _hasPlacedAppInBackground = false; final bool didAuthInLast5Seconds = lastAuthenticatingTime != null && DateTime.now().millisecondsSinceEpoch - lastAuthenticatingTime! < 5000; + if (!_hasAuthenticationFailed && !didAuthInLast5Seconds) { - // Show the lock screen again only if the app is resuming from the - // background, and not when the lock screen was explicitly dismissed - Future.delayed( - Duration.zero, - () => _showLockScreen(source: "lifeCycle"), - ); + if (_lockscreenSetting.getlastInvalidAttemptTime() > + DateTime.now().millisecondsSinceEpoch && + !_isShowingLockScreen) { + final int time = (_lockscreenSetting.getlastInvalidAttemptTime() - + DateTime.now().millisecondsSinceEpoch) ~/ + 1000; + + Future.delayed( + Duration.zero, + () { + startLockTimer(time); + _showLockScreen(source: "lifeCycle"); + }, + ); + } } else { - _hasAuthenticationFailed = false; // Reset failure state + _hasAuthenticationFailed = false; } } else if (state == AppLifecycleState.paused || state == AppLifecycleState.inactive) { - // This is triggered either when the lock screen pops up or when - // the app is pushed to background if (!_isShowingLockScreen) { _hasPlacedAppInBackground = true; - _hasAuthenticationFailed = false; // reset failure state + _hasAuthenticationFailed = false; } } } @@ -115,24 +133,83 @@ class _LockScreenState extends State with WidgetsBindingObserver { super.dispose(); } + Future startLockTimer(int time) async { + if (isTimerRunning) { + return; + } + + setState(() { + isTimerRunning = true; + remainingTime = time; + }); + + while (remainingTime > 0) { + await Future.delayed(const Duration(seconds: 1)); + setState(() { + remainingTime--; + }); + } + + setState(() { + isTimerRunning = false; + }); + } + + String formatTime(int seconds) { + final int hours = seconds ~/ 3600; + final int minutes = (seconds % 3600) ~/ 60; + final int remainingSeconds = seconds % 60; + + if (hours > 0) { + return "$hours hr $minutes min"; + } else if (minutes > 0) { + return "$minutes min $remainingSeconds sec"; + } else { + return "$remainingSeconds sec"; + } + } + Future _showLockScreen({String source = ''}) async { final int id = DateTime.now().millisecondsSinceEpoch; _logger.info("Showing lock screen $source $id"); try { + if (id < _lockscreenSetting.getlastInvalidAttemptTime() && + !_isShowingLockScreen) { + final int time = + (_lockscreenSetting.getlastInvalidAttemptTime() - id) ~/ 1000; + + await startLockTimer(time); + } _isShowingLockScreen = true; - final result = await requestAuthentication( - context, - context.l10n.authToViewYourMemories, - ); + final result = isTimerRunning + ? false + : await requestAuthentication( + context, + context.l10n.authToViewYourMemories, + isLockscreenAuth: true, + ); _logger.finest("LockScreen Result $result $id"); _isShowingLockScreen = false; if (result) { lastAuthenticatingTime = DateTime.now().millisecondsSinceEpoch; AppLock.of(context)!.didUnlock(); + await _lockscreenSetting.setInvalidAttemptCount(0); + setState(() { + lockedTime = 15; + isTimerRunning = false; + }); } else { if (!_hasPlacedAppInBackground) { - // Treat this as a failure only if user did not explicitly - // put the app in background + if (_lockscreenSetting.getInvalidAttemptCount() > 4 && + invalidAttemptCount != + _lockscreenSetting.getInvalidAttemptCount()) { + invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount(); + lockedTime = pow(2, invalidAttemptCount - 5).toInt() * 30; + await _lockscreenSetting.setLastInvalidAttemptTime( + DateTime.now().millisecondsSinceEpoch + lockedTime * 1000, + ); + await startLockTimer(lockedTime); + } _hasAuthenticationFailed = true; _logger.info("Authentication failed"); } diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index b105376f7a..0fa14db811 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -7,7 +7,11 @@ import "package:photos/generated/l10n.dart"; import "package:photos/services/local_authentication_service.dart"; import "package:photos/utils/lockscreen_setting.dart"; -Future requestAuthentication(BuildContext context, String reason) async { +Future requestAuthentication( + BuildContext context, + String reason, { + bool isLockscreenAuth = false, +}) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); @@ -16,7 +20,12 @@ Future requestAuthentication(BuildContext context, String reason) async { final String? savedPassword = await lockscreenSetting.getPassword(); if (savedPassword != null || savedPin != null) { return await LocalAuthenticationService.instance - .requestEnteAuthForLockScreen(context, savedPin, savedPassword); + .requestEnteAuthForLockScreen( + context, + savedPin, + savedPassword, + isLockscreenAuth: isLockscreenAuth, + ); } else { return await LocalAuthentication().authenticate( localizedReason: reason, diff --git a/mobile/lib/utils/lockscreen_setting.dart b/mobile/lib/utils/lockscreen_setting.dart index fc5e435700..988ac3624a 100644 --- a/mobile/lib/utils/lockscreen_setting.dart +++ b/mobile/lib/utils/lockscreen_setting.dart @@ -4,6 +4,7 @@ import "package:flutter/foundation.dart"; import "package:flutter_secure_storage/flutter_secure_storage.dart"; import "package:flutter_sodium/flutter_sodium.dart"; import "package:photos/utils/crypto_util.dart"; +import "package:shared_preferences/shared_preferences.dart"; class LockscreenSetting { LockscreenSetting._privateConstructor(); @@ -13,11 +14,30 @@ class LockscreenSetting { static const password = "user_pass"; static const pin = "user_pin"; static const saltKey = "user_salt"; - + static const keyInvalidAttempts = "invalid_attempts"; + static const lastInvalidAttemptTime = "last_invalid_attempt_time"; late FlutterSecureStorage _secureStorage; + late SharedPreferences _preferences; - void init(FlutterSecureStorage secureStorage) { + void init(FlutterSecureStorage secureStorage, SharedPreferences prefs) async { _secureStorage = secureStorage; + _preferences = prefs; + } + + Future setLastInvalidAttemptTime(int time) async { + await _preferences.setInt(lastInvalidAttemptTime, time); + } + + int getlastInvalidAttemptTime() { + return _preferences.getInt(lastInvalidAttemptTime) ?? 0; + } + + int getInvalidAttemptCount() { + return _preferences.getInt(keyInvalidAttempts) ?? 0; + } + + Future setInvalidAttemptCount(int count) async { + await _preferences.setInt(keyInvalidAttempts, count); } static Uint8List generateSalt() { From f7b7bae0af42e7782ddd6223f2411557532f687a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 21:19:46 +0530 Subject: [PATCH 078/466] The plan But will Windows play along... --- web/packages/next/next.config.base.js | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/web/packages/next/next.config.base.js b/web/packages/next/next.config.base.js index 812ed7618d..ce1005e11b 100644 --- a/web/packages/next/next.config.base.js +++ b/web/packages/next/next.config.base.js @@ -12,6 +12,7 @@ const cp = require("child_process"); const os = require("os"); +const path = require("path"); /** * Return the current commit ID if we're running inside a git repository. @@ -39,6 +40,30 @@ const gitSHA = () => { return result ? result : undefined; }; +/** + * The name of the Ente app we're building. + * + * This is taken from the name of the directory which we're building. e.g. `yarn + * dev:auth` will cause yarn to be invoked in `web/apps/auth`, and so this will + * be set to `auth`. + * + * In our runtime code, all references to `process.env.appName` will be + * statically replaced by this value at build time. + */ +const appName = path.basename(process.cwd()); + +/** + * "1" if we're building our desktop app. + * + * The _ENTE_IS_DESKTOP environment variable will be set by the yarn script that + * builds the web app for embedding in the desktop app. Whenever it is set, we + * set this value to "1". + * + * In our runtime code, all references to `process.env.isDesktop` will be + * statically replaced by this value at build time. + */ +const isDesktop = process.env._ENTE_IS_DESKTOP ? "1" : ""; + /** * Configuration for the Next.js build * @@ -57,9 +82,11 @@ const nextConfig = { // available as `process.env.VAR_NAME` to our code. env: { GIT_SHA: gitSHA(), + appName, + isDesktop, }, - // Customize the webpack configuration used by Next.js + // Customize the webpack configuration used by Next.js. webpack: (config, { isServer }) => { // https://dev.to/marcinwosinek/how-to-add-resolve-fallback-to-webpack-5-in-nextjs-10-i6j if (!isServer) { From 3ddd5bff2dd60928c34524e0225bbf2aba7ff737 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 29 Jun 2024 21:42:48 +0530 Subject: [PATCH 079/466] Add cross-env (shx doesn't allow this) https://github.com/shelljs/shx/issues/127 --- desktop/docs/dependencies.md | 12 ++++++++---- desktop/package.json | 5 +++-- desktop/yarn.lock | 7 +++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 31ac013199..097442e557 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -83,13 +83,17 @@ are similar to that in the web code. Some extra ones specific to the code here are: -- [shx](https://github.com/shelljs/shx) for providing a portable way to use - Unix commands in our `package.json` scripts. This allows us to use the same - commands (like `ln`) across different platforms like Linux and Windows. - - [@tsconfig/recommended](https://github.com/tsconfig/bases) gives us a base tsconfig for the Node.js version that our current Electron version uses. +- [shx](https://github.com/shelljs/shx) provides us a portable way to use Unix + commands in our `package.json` scripts. This allows us to use the same + commands (like `ln`) across both POSIX platforms (Linux, macOS) and Windows. + +- [cross-env](https://github.com/kentcdodds/cross-env) is similar to shx, but + for allowing us to set environment variables in a way that also works on + Windows. + ## Functionality ### Format conversion diff --git a/desktop/package.json b/desktop/package.json index 286a0a9f91..9d07e637d0 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -10,12 +10,12 @@ "build": "yarn build-renderer && yarn build-main", "build-main": "tsc && electron-builder", "build-main:quick": "tsc && electron-builder --dir --config.compression=store --config.mac.identity=null", - "build-renderer": "cd ../web && yarn install && yarn build:photos && cd ../desktop && shx rm -f out && shx ln -sf ../web/apps/photos/out out", + "build-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn build:photos && cd ../desktop && shx rm -f out && shx ln -sf ../web/apps/photos/out out\"", "build:ci": "yarn build-renderer && tsc", "build:quick": "yarn build-renderer && yarn build-main:quick", "dev": "concurrently --kill-others --success first --names 'main,rndr' \"yarn dev-main\" \"yarn dev-renderer\"", "dev-main": "tsc && electron .", - "dev-renderer": "cd ../web && yarn install && yarn dev:photos", + "dev-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn dev:photos\"", "postinstall": "electron-builder install-app-deps", "lint": "yarn prettier --check --log-level warn . && yarn eslint && yarn tsc", "lint-fix": "yarn prettier --write --log-level warn . && yarn eslint && yarn tsc" @@ -46,6 +46,7 @@ "@types/eslint__js": "^8.42.3", "@types/ffmpeg-static": "^3.0", "concurrently": "^8", + "cross-env": "^7.0.3", "electron": "^30", "electron-builder": "25.0.0-alpha.8", "eslint": "^9.4.0", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index b8143820e3..feb368df7d 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -1067,6 +1067,13 @@ crc@^3.8.0: dependencies: buffer "^5.1.0" +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" From bd627a6e54cc98d60480bc3840c3d0ae30a782d4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 07:34:15 +0530 Subject: [PATCH 080/466] Case --- web/packages/next/log-web.ts | 2 +- web/packages/next/next.config.base.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index 5b809875c1..bf24741b09 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -11,7 +11,7 @@ import type { AppName } from "./types/app"; * @param userId The uid for the currently logged in user, if any. */ export const logStartupBanner = (appName: AppName, userId?: number) => { - const sha = process.env.GIT_SHA; + const sha = process.env.gitSHA; const buildId = isDevBuild ? "dev " : sha ? `git ${sha} ` : ""; log.info(`Starting ente-${appName}-web ${buildId}uid ${userId ?? 0}`); }; diff --git a/web/packages/next/next.config.base.js b/web/packages/next/next.config.base.js index ce1005e11b..b658089e11 100644 --- a/web/packages/next/next.config.base.js +++ b/web/packages/next/next.config.base.js @@ -17,7 +17,7 @@ const path = require("path"); /** * Return the current commit ID if we're running inside a git repository. */ -const gitSHA = () => { +const gitSHA = (() => { // Allow the command to fail. gitSHA will be an empty string in such cases. // This allows us to run the build even when we're outside of a git context. // @@ -38,7 +38,7 @@ const gitSHA = () => { // Convert empty strings (e.g. when the `|| true` part of the above execSync // comes into play) to undefined. return result ? result : undefined; -}; +})(); /** * The name of the Ente app we're building. @@ -79,9 +79,9 @@ const nextConfig = { transpilePackages: ["@/next", "@/utils", "@/new"], // Add environment variables to the JavaScript bundle. They will be - // available as `process.env.VAR_NAME` to our code. + // available as `process.env.varName` to our code. env: { - GIT_SHA: gitSHA(), + gitSHA, appName, isDesktop, }, From d09a7b290bbd863f2ae49c11216387d6e4d6694c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 07:55:24 +0530 Subject: [PATCH 081/466] New constant --- web/packages/next/log-web.ts | 10 +++++++++- web/packages/next/types/app.ts | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index bf24741b09..e0fb39e265 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -1,6 +1,6 @@ import { isDevBuild } from "@/next/env"; import log from "@/next/log"; -import type { AppName } from "./types/app"; +import { appNames, type AppName } from "./types/app"; /** * Log a standard startup banner. @@ -11,6 +11,14 @@ import type { AppName } from "./types/app"; * @param userId The uid for the currently logged in user, if any. */ export const logStartupBanner = (appName: AppName, userId?: number) => { + // Log a warning if appName isn't what it claims to be. See the + // documentation of `appName` for why this is needed. + if (!appNames.includes(appName)) { + log.warn( + `App name ${appName} is not one of the known app names: ${JSON.stringify(appNames)}`, + ); + } + const sha = process.env.gitSHA; const buildId = isDevBuild ? "dev " : sha ? `git ${sha} ` : ""; log.info(`Starting ente-${appName}-web ${buildId}uid ${userId ?? 0}`); diff --git a/web/packages/next/types/app.ts b/web/packages/next/types/app.ts index 6ca14398ad..79d70be7d0 100644 --- a/web/packages/next/types/app.ts +++ b/web/packages/next/types/app.ts @@ -1,10 +1,28 @@ import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; +export const appNames = ["accounts", "auth", "photos"] as const; + /** * Arbitrary names that we used as keys for indexing various constants * corresponding to our apps that rely on this package. */ -export type AppName = "accounts" | "auth" | "photos"; +export type AppName = (typeof appNames)[number]; + +/** + * The name of the Ente app which we're currently running as. + * + * Parts of our code are shared across apps. Some parts of them also run in + * non-main thread execution contexts like web workers. So there isn't always an + * easy way to figure out what the current app is. + * + * To solve this, we inject the app name during the build process. This is + * available to all our code (shared packages, web workers). + * + * This constant employs an `as` cast to avoid incurring a dynamic check, and as + * such may be incorrect (e.g. when a new app gets added). So apps should + * dynamically validate and log it once somewhere during init. + */ +export const appName: AppName = process.env.appName as AppName; /** * Static title for the app. From 8fbc7b393745a8ea9fc29c7cf5908d7eaf098b04 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 07:57:23 +0530 Subject: [PATCH 082/466] Case --- web/apps/auth/src/pages/_app.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 4 ++-- web/packages/next/log-web.ts | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index a46f2f867c..98e9295320 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -82,8 +82,8 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); - const userId = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(appName, userId); + const userID = (getData(LS_KEYS.USER) as User)?.id; + logStartupBanner(appName, userID); logUnhandledErrorsAndRejections(true); setAppNameForAuthenticatedRequests(appName); HTTPService.setHeaders({ diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index a012881fb9..69302f8def 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -148,8 +148,8 @@ export default function App({ Component, pageProps }: AppProps) { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); - const userId = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(appName, userId); + const userID = (getData(LS_KEYS.USER) as User)?.id; + logStartupBanner(appName, userID); logUnhandledErrorsAndRejections(true); setAppNameForAuthenticatedRequests(appName); HTTPService.setHeaders({ diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index e0fb39e265..c419d206b6 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -8,9 +8,9 @@ import { appNames, type AppName } from "./types/app"; * This helps us identify app starts and other environment details in the logs. * * @param appName The {@link AppName} of the app that is starting. - * @param userId The uid for the currently logged in user, if any. + * @param userID The uid for the currently logged in user, if any. */ -export const logStartupBanner = (appName: AppName, userId?: number) => { +export const logStartupBanner = (appName: AppName, userID?: number) => { // Log a warning if appName isn't what it claims to be. See the // documentation of `appName` for why this is needed. if (!appNames.includes(appName)) { @@ -20,8 +20,8 @@ export const logStartupBanner = (appName: AppName, userId?: number) => { } const sha = process.env.gitSHA; - const buildId = isDevBuild ? "dev " : sha ? `git ${sha} ` : ""; - log.info(`Starting ente-${appName}-web ${buildId}uid ${userId ?? 0}`); + const buildID = isDevBuild ? "dev " : sha ? `git ${sha} ` : ""; + log.info(`Starting ente-${appName}-web ${buildID}uid ${userID ?? 0}`); }; /** From 9973e5c7016c1f009e380da897334f2fd8400ac2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 08:07:12 +0530 Subject: [PATCH 083/466] Test --- web/packages/next/log-web.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index c419d206b6..043d342cab 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -1,6 +1,6 @@ import { isDevBuild } from "@/next/env"; import log from "@/next/log"; -import { appNames, type AppName } from "./types/app"; +import { appName, appNames, type AppName } from "./types/app"; /** * Log a standard startup banner. @@ -10,12 +10,12 @@ import { appNames, type AppName } from "./types/app"; * @param appName The {@link AppName} of the app that is starting. * @param userID The uid for the currently logged in user, if any. */ -export const logStartupBanner = (appName: AppName, userID?: number) => { +export const logStartupBanner = (_: AppName, userID?: number) => { // Log a warning if appName isn't what it claims to be. See the // documentation of `appName` for why this is needed. if (!appNames.includes(appName)) { log.warn( - `App name ${appName} is not one of the known app names: ${JSON.stringify(appNames)}`, + `App name "${appName}" is not one of the known app names: ${JSON.stringify(appNames)}`, ); } From f11960981a1fbfc8afd9a33b0d6eff00ef223352 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 17:40:56 +0530 Subject: [PATCH 084/466] Use static app name --- web/apps/accounts/src/pages/_app.tsx | 7 ++----- web/apps/auth/src/pages/_app.tsx | 10 +++------- web/apps/photos/src/pages/_app.tsx | 10 ++++------ web/apps/photos/src/pages/index.tsx | 6 +++--- web/packages/accounts/api/user.ts | 4 ++-- web/packages/accounts/components/Login.tsx | 8 +++----- web/packages/accounts/components/SignUp.tsx | 8 +++----- web/packages/accounts/pages/change-email.tsx | 15 ++++----------- web/packages/accounts/pages/change-password.tsx | 6 ++---- web/packages/accounts/pages/credentials.tsx | 6 +++--- web/packages/accounts/pages/generate.tsx | 6 +++--- web/packages/accounts/pages/recover.tsx | 13 ++++++------- .../accounts/pages/two-factor/setup.tsx | 6 ++---- web/packages/accounts/pages/verify.tsx | 12 ++++++------ web/packages/accounts/services/passkey.ts | 10 ++-------- web/packages/accounts/services/redirect.ts | 17 ++++++----------- web/packages/next/log-web.ts | 5 ++--- web/packages/next/types/app.ts | 13 +++++++------ 18 files changed, 63 insertions(+), 99 deletions(-) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index af73ad8c61..b22a8e5533 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -1,7 +1,7 @@ import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; -import { appTitle, type AppName } from "@/next/types/app"; +import { staticAppTitle } from "@/next/types/app"; import { PAGES } from "@ente/accounts/constants/pages"; import { accountLogout } from "@ente/accounts/services/logout"; import { Overlay } from "@ente/shared/components/Container"; @@ -24,8 +24,6 @@ import React, { useCallback, useEffect, useState } from "react"; import "styles/global.css"; const App: React.FC = ({ Component, pageProps }) => { - const appName: AppName = "accounts"; - const [isI18nReady, setIsI18nReady] = useState(false); const [showNavbar, setShowNavbar] = useState(false); @@ -61,7 +59,6 @@ const App: React.FC = ({ Component, pageProps }) => { }, [router]); const appContext = { - appName, logout, showNavBar: setShowNavbar, isMobile, @@ -70,7 +67,7 @@ const App: React.FC = ({ Component, pageProps }) => { const title = isI18nReady ? t("title", { context: "accounts" }) - : appTitle[appName]; + : staticAppTitle; return ( <> diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index 98e9295320..a8063a44ea 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -6,9 +6,9 @@ import { logUnhandledErrorsAndRejections, } from "@/next/log-web"; import { + appName, appTitle, clientPackageName, - type AppName, type BaseAppContextT, } from "@/next/types/app"; import { ensure } from "@/utils/ensure"; @@ -59,8 +59,6 @@ export const AppContext = createContext(undefined); export const useAppContext = () => ensure(useContext(AppContext)); const App: React.FC = ({ Component, pageProps }) => { - const appName: AppName = "auth"; - const router = useRouter(); const [isI18nReady, setIsI18nReady] = useState(false); const [loading, setLoading] = useState(false); @@ -83,7 +81,7 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); const userID = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(appName, userID); + logStartupBanner(userID); logUnhandledErrorsAndRejections(true); setAppNameForAuthenticatedRequests(appName); HTTPService.setHeaders({ @@ -159,9 +157,7 @@ const App: React.FC = ({ Component, pageProps }) => { somethingWentWrong, }; - const title = isI18nReady - ? t("title", { context: "auth" }) - : appTitle[appName]; + const title = isI18nReady ? t("title", { context: "auth" }) : staticAppTitle; return ( <> diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 69302f8def..301797b3f8 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -7,9 +7,9 @@ import { logUnhandledErrorsAndRejections, } from "@/next/log-web"; import { - appTitle, + appName, clientPackageName, - type AppName, + staticAppTitle, type BaseAppContextT, } from "@/next/types/app"; import { AppUpdate } from "@/next/types/ipc"; @@ -109,8 +109,6 @@ export const AppContext = createContext(undefined); export const useAppContext = () => ensure(useContext(AppContext)); export default function App({ Component, pageProps }: AppProps) { - const appName: AppName = "photos"; - const router = useRouter(); const [isI18nReady, setIsI18nReady] = useState(false); const [loading, setLoading] = useState(false); @@ -149,7 +147,7 @@ export default function App({ Component, pageProps }: AppProps) { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); const userID = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(appName, userID); + logStartupBanner(userID); logUnhandledErrorsAndRejections(true); setAppNameForAuthenticatedRequests(appName); HTTPService.setHeaders({ @@ -374,7 +372,7 @@ export default function App({ Component, pageProps }: AppProps) { const title = isI18nReady ? t("title", { context: "photos" }) - : appTitle[appName]; + : staticAppTitle; return ( <> diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index 197906cdbd..3cef94767e 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -27,7 +27,7 @@ import { Trans } from "react-i18next"; import { useAppContext } from "./_app"; export default function LandingPage() { - const { appName, showNavBar, setDialogMessage } = useAppContext(); + const { showNavBar, setDialogMessage } = useAppContext(); const [loading, setLoading] = useState(true); const [showLogin, setShowLogin] = useState(true); @@ -145,9 +145,9 @@ export default function LandingPage() { {showLogin ? ( - + ) : ( - + )} diff --git a/web/packages/accounts/api/user.ts b/web/packages/accounts/api/user.ts index 9269fe2e17..5ed4005cfc 100644 --- a/web/packages/accounts/api/user.ts +++ b/web/packages/accounts/api/user.ts @@ -1,5 +1,5 @@ import { apiURL } from "@/next/origins"; -import type { AppName } from "@/next/types/app"; +import { appName } from "@/next/types/app"; import type { RecoveryKey, TwoFactorRecoveryResponse, @@ -14,7 +14,7 @@ import { getToken } from "@ente/shared/storage/localStorage/helpers"; import type { KeyAttributes } from "@ente/shared/user/types"; import { HttpStatusCode } from "axios"; -export const sendOtt = async (appName: AppName, email: string) => { +export const sendOtt = async (email: string) => { return HTTPService.post(await apiURL("/users/ott"), { email, client: appName == "auth" ? "totp" : "web", diff --git a/web/packages/accounts/components/Login.tsx b/web/packages/accounts/components/Login.tsx index 8d31b2bc4b..d02e7bf44c 100644 --- a/web/packages/accounts/components/Login.tsx +++ b/web/packages/accounts/components/Login.tsx @@ -1,5 +1,4 @@ import log from "@/next/log"; -import type { AppName } from "@/next/types/app"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; import LinkButton from "@ente/shared/components/LinkButton"; @@ -16,12 +15,11 @@ import { PAGES } from "../constants/pages"; interface LoginProps { signUp: () => void; - appName: AppName; /** Reactive value of {@link customAPIHost}. */ host: string | undefined; } -export function Login({ appName, signUp, host }: LoginProps) { +export const Login: React.FC = ({ signUp, host }) => { const router = useRouter(); const loginUser: SingleInputFormProps["callback"] = async ( @@ -33,7 +31,7 @@ export function Login({ appName, signUp, host }: LoginProps) { const srpAttributes = await getSRPAttributes(email); log.debug(() => ` srpAttributes: ${JSON.stringify(srpAttributes)}`); if (!srpAttributes || srpAttributes.isEmailMFAEnabled) { - await sendOtt(appName, email); + await sendOtt(email); router.push(PAGES.VERIFY); } else { setData(LS_KEYS.SRP_ATTRIBUTES, srpAttributes); @@ -79,4 +77,4 @@ export function Login({ appName, signUp, host }: LoginProps) { ); -} +}; diff --git a/web/packages/accounts/components/SignUp.tsx b/web/packages/accounts/components/SignUp.tsx index 7d021812d9..0c36df4df8 100644 --- a/web/packages/accounts/components/SignUp.tsx +++ b/web/packages/accounts/components/SignUp.tsx @@ -1,5 +1,4 @@ import log from "@/next/log"; -import type { AppName } from "@/next/types/app"; import { sendOtt } from "@ente/accounts/api/user"; import { PasswordStrengthHint } from "@ente/accounts/components/PasswordStrength"; import { PAGES } from "@ente/accounts/constants/pages"; @@ -53,12 +52,11 @@ interface FormValues { interface SignUpProps { router: NextRouter; login: () => void; - appName: AppName; /** Reactive value of {@link customAPIHost}. */ host: string | undefined; } -export function SignUp({ router, appName, login, host }: SignUpProps) { +export const SignUp: React.FC = ({ router, login, host }) => { const [acceptTerms, setAcceptTerms] = useState(false); const [loading, setLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); @@ -86,7 +84,7 @@ export function SignUp({ router, appName, login, host }: SignUpProps) { try { setData(LS_KEYS.USER, { email }); setLocalReferralSource(referral); - await sendOtt(appName, email); + await sendOtt(email); } catch (e) { const message = e instanceof Error ? e.message : ""; setFieldError("confirm", `${t("UNKNOWN_ERROR")} ${message}`); @@ -329,4 +327,4 @@ export function SignUp({ router, appName, login, host }: SignUpProps) { ); -} +}; diff --git a/web/packages/accounts/pages/change-email.tsx b/web/packages/accounts/pages/change-email.tsx index d318fd81e6..e2e77382a9 100644 --- a/web/packages/accounts/pages/change-email.tsx +++ b/web/packages/accounts/pages/change-email.tsx @@ -1,4 +1,3 @@ -import type { AppName } from "@/next/types/app"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; import { changeEmail, sendOTTForEmailChange } from "@ente/accounts/api/user"; @@ -20,9 +19,7 @@ import * as Yup from "yup"; import { appHomeRoute } from "../services/redirect"; import type { PageProps } from "../types/page"; -const Page: React.FC = ({ appContext }) => { - const { appName } = appContext; - +const Page: React.FC = () => { const router = useRouter(); useEffect(() => { @@ -36,7 +33,7 @@ const Page: React.FC = ({ appContext }) => { {t("CHANGE_EMAIL")} - + ); @@ -49,11 +46,7 @@ interface formValues { ott?: string; } -interface ChangeEmailFormProps { - appName: AppName; -} - -const ChangeEmailForm: React.FC = ({ appName }) => { +const ChangeEmailForm: React.FC = () => { const [loading, setLoading] = useState(false); const [ottInputVisible, setShowOttInputVisibility] = useState(false); const [email, setEmail] = useState(null); @@ -101,7 +94,7 @@ const ChangeEmailForm: React.FC = ({ appName }) => { } }; - const goToApp = () => router.push(appHomeRoute(appName)); + const goToApp = () => router.push(appHomeRoute); return ( diff --git a/web/packages/accounts/pages/change-password.tsx b/web/packages/accounts/pages/change-password.tsx index 9f5ff006f7..2a28be7fce 100644 --- a/web/packages/accounts/pages/change-password.tsx +++ b/web/packages/accounts/pages/change-password.tsx @@ -39,9 +39,7 @@ import { useEffect, useState } from "react"; import { appHomeRoute } from "../services/redirect"; import type { PageProps } from "../types/page"; -const Page: React.FC = ({ appContext }) => { - const { appName } = appContext; - +const Page: React.FC = () => { const [token, setToken] = useState(); const [user, setUser] = useState(); @@ -137,7 +135,7 @@ const Page: React.FC = ({ appContext }) => { const redirectToAppHome = () => { setData(LS_KEYS.SHOW_BACK_BUTTON, { value: true }); - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); }; // TODO: Handle the case where user is not loaded yet. diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index 39e1c5135a..f24fbf1550 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -62,7 +62,7 @@ import type { PageProps } from "../types/page"; import type { SRPAttributes } from "../types/srp"; const Page: React.FC = ({ appContext }) => { - const { appName, logout, setDialogBoxAttributesV2 } = appContext; + const { logout, setDialogBoxAttributesV2 } = appContext; const [srpAttributes, setSrpAttributes] = useState(); const [keyAttributes, setKeyAttributes] = useState(); @@ -138,7 +138,7 @@ const Page: React.FC = ({ appContext }) => { } const token = getToken(); if (key && token) { - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); return; } const kekEncryptedAttributes: B64EncryptionResult = getKey( @@ -315,7 +315,7 @@ const Page: React.FC = ({ appContext }) => { } const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL); InMemoryStore.delete(MS_KEYS.REDIRECT_URL); - router.push(redirectURL ?? appHomeRoute(appName)); + router.push(redirectURL ?? appHomeRoute); } catch (e) { log.error("useMasterPassword failed", e); } diff --git a/web/packages/accounts/pages/generate.tsx b/web/packages/accounts/pages/generate.tsx index ff4085b67d..c5e1ef7e62 100644 --- a/web/packages/accounts/pages/generate.tsx +++ b/web/packages/accounts/pages/generate.tsx @@ -32,7 +32,7 @@ import { appHomeRoute } from "../services/redirect"; import type { PageProps } from "../types/page"; const Page: React.FC = ({ appContext }) => { - const { appName, logout } = appContext; + const { logout } = appContext; const [token, setToken] = useState(); const [user, setUser] = useState(); @@ -56,7 +56,7 @@ const Page: React.FC = ({ appContext }) => { setRecoveryModalView(true); setLoading(false); } else { - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); } } else if (keyAttributes?.encryptedKey) { router.push(PAGES.CREDENTIALS); @@ -106,7 +106,7 @@ const Page: React.FC = ({ appContext }) => { show={recoverModalView} onHide={() => { setRecoveryModalView(false); - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); }} /* TODO: Why is this error being ignored */ somethingWentWrong={() => {}} diff --git a/web/packages/accounts/pages/recover.tsx b/web/packages/accounts/pages/recover.tsx index b6120697d9..19b8499290 100644 --- a/web/packages/accounts/pages/recover.tsx +++ b/web/packages/accounts/pages/recover.tsx @@ -30,7 +30,7 @@ const bip39 = require("bip39"); bip39.setDefaultWordlist("english"); const Page: React.FC = ({ appContext }) => { - const { appName } = appContext; + const { showNavBar, setDialogBoxAttributesV2 } = appContext; const [keyAttributes, setKeyAttributes] = useState< KeyAttributes | undefined @@ -47,7 +47,7 @@ const Page: React.FC = ({ appContext }) => { return; } if (!user?.encryptedToken && !user?.token) { - sendOtt(appName, user.email); + sendOtt(user.email); InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.RECOVER); router.push(PAGES.VERIFY); return; @@ -55,11 +55,11 @@ const Page: React.FC = ({ appContext }) => { if (!keyAttributes) { router.push(PAGES.GENERATE); } else if (key) { - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); } else { setKeyAttributes(keyAttributes); } - appContext.showNavBar(true); + showNavBar(true); }, []); const recover: SingleInputFormProps["callback"] = async ( @@ -98,13 +98,12 @@ const Page: React.FC = ({ appContext }) => { } }; - const showNoRecoveryKeyMessage = () => { - appContext.setDialogBoxAttributesV2({ + const showNoRecoveryKeyMessage = () => + setDialogBoxAttributesV2({ title: t("SORRY"), close: {}, content: t("NO_RECOVERY_KEY_MESSAGE"), }); - }; return ( diff --git a/web/packages/accounts/pages/two-factor/setup.tsx b/web/packages/accounts/pages/two-factor/setup.tsx index 6bb8613a5c..b65faaee12 100644 --- a/web/packages/accounts/pages/two-factor/setup.tsx +++ b/web/packages/accounts/pages/two-factor/setup.tsx @@ -23,9 +23,7 @@ export enum SetupMode { MANUAL_CODE, } -const Page: React.FC = ({ appContext }) => { - const { appName } = appContext; - +const Page: React.FC = () => { const [twoFactorSecret, setTwoFactorSecret] = useState< TwoFactorSecret | undefined >(); @@ -60,7 +58,7 @@ const Page: React.FC = ({ appContext }) => { ...getData(LS_KEYS.USER), isTwoFactorEnabled: true, }); - router.push(appHomeRoute(appName)); + router.push(appHomeRoute); }; return ( diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 9f84964904..7b5ac424e7 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -39,7 +39,7 @@ import type { PageProps } from "../types/page"; import type { SRPSetupAttributes } from "../types/srp"; const Page: React.FC = ({ appContext }) => { - const { appName, logout } = appContext; + const { logout } = appContext; const [email, setEmail] = useState(""); const [resend, setResend] = useState(0); @@ -95,11 +95,11 @@ const Page: React.FC = ({ appContext }) => { }); // TODO: This is not the first login though if they already have // 2FA. Does this flag mean first login on this device? + // + // Update: This flag causes the interactive encryption key to be + // generated, so it has a functional impact we need. setIsFirstLogin(true); - const url = passkeyVerificationRedirectURL( - appName, - passkeySessionID, - ); + const url = passkeyVerificationRedirectURL(passkeySessionID); setPasskeyVerificationData({ passkeySessionID, url }); openPasskeyVerificationURL({ passkeySessionID, url }); } else if (twoFactorSessionID) { @@ -161,7 +161,7 @@ const Page: React.FC = ({ appContext }) => { const resendEmail = async () => { setResend(1); - await sendOtt(appName, email); + await sendOtt(email); setResend(2); setTimeout(() => setResend(0), 3000); }; diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index 772b463772..2b3837ba4f 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -1,8 +1,7 @@ import { clientPackageHeaderIfPresent } from "@/next/http"; import log from "@/next/log"; import { accountsAppOrigin, apiURL } from "@/next/origins"; -import type { AppName } from "@/next/types/app"; -import { clientPackageName } from "@/next/types/app"; +import { appName, clientPackageName } from "@/next/types/app"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; import ComlinkCryptoWorker from "@ente/shared/crypto"; @@ -24,15 +23,10 @@ import { getToken } from "@ente/shared/storage/localStorage/helpers"; * On successful verification, the accounts app will redirect back to our * `/passkeys/finish` page. * - * @param appName The {@link AppName} of the app which is calling this function. - * * @param passkeySessionID An identifier provided by museum for this passkey * verification session. */ -export const passkeyVerificationRedirectURL = ( - appName: AppName, - passkeySessionID: string, -) => { +export const passkeyVerificationRedirectURL = (passkeySessionID: string) => { const clientPackage = clientPackageName(appName); // Using `window.location.origin` will work both when we're running in a web // browser, and in our desktop app. See: [Note: Using deeplinks to navigate diff --git a/web/packages/accounts/services/redirect.ts b/web/packages/accounts/services/redirect.ts index b4b0322335..bee96ae423 100644 --- a/web/packages/accounts/services/redirect.ts +++ b/web/packages/accounts/services/redirect.ts @@ -1,4 +1,4 @@ -import type { AppName } from "@/next/types/app"; +import { appName } from "@/next/types/app"; import { AUTH_PAGES, PHOTOS_PAGES } from "@ente/shared/constants/pages"; /** @@ -6,13 +6,8 @@ import { AUTH_PAGES, PHOTOS_PAGES } from "@ente/shared/constants/pages"; * * This is where we redirect to after successful authentication. */ -export const appHomeRoute = (appName: AppName): string => { - switch (appName) { - case "accounts": - return "/passkeys"; - case "auth": - return AUTH_PAGES.AUTH; - case "photos": - return PHOTOS_PAGES.GALLERY; - } -}; +export const appHomeRoute = { + accounts: "/passkeys", + auth: AUTH_PAGES.AUTH, + photos: PHOTOS_PAGES.GALLERY, +}[appName]; diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index 043d342cab..54e2dd4b78 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -1,16 +1,15 @@ import { isDevBuild } from "@/next/env"; import log from "@/next/log"; -import { appName, appNames, type AppName } from "./types/app"; +import { appName, appNames } from "./types/app"; /** * Log a standard startup banner. * * This helps us identify app starts and other environment details in the logs. * - * @param appName The {@link AppName} of the app that is starting. * @param userID The uid for the currently logged in user, if any. */ -export const logStartupBanner = (_: AppName, userID?: number) => { +export const logStartupBanner = (userID?: number) => { // Log a warning if appName isn't what it claims to be. See the // documentation of `appName` for why this is needed. if (!appNames.includes(appName)) { diff --git a/web/packages/next/types/app.ts b/web/packages/next/types/app.ts index 79d70be7d0..dec4e5e510 100644 --- a/web/packages/next/types/app.ts +++ b/web/packages/next/types/app.ts @@ -9,7 +9,10 @@ export const appNames = ["accounts", "auth", "photos"] as const; export type AppName = (typeof appNames)[number]; /** - * The name of the Ente app which we're currently running as. + * The unique key for the app. + * + * This is the name of the Ente app which we're currently running as. It is used + * as a key for various properties that are different across apps. * * Parts of our code are shared across apps. Some parts of them also run in * non-main thread execution contexts like web workers. So there isn't always an @@ -25,15 +28,15 @@ export type AppName = (typeof appNames)[number]; export const appName: AppName = process.env.appName as AppName; /** - * Static title for the app. + * Static (English) title for the app. * * This is shown until we have the localized version. */ -export const appTitle: Record = { +export const staticAppTitle = { accounts: "Ente Accounts", auth: "Ente Auth", photos: "Ente Photos", -}; +}[appName]; /** * Client "package names" for each of our apps. @@ -67,8 +70,6 @@ export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; * listed in {@link AppName}. */ export interface BaseAppContextT { - /** The unique key for the app. */ - appName: AppName; /** Perform the (possibly app specific) logout sequence. */ logout: () => void; /** Show or hide the app's navigation bar. */ From 54c54d50c6cec1d86f613d2d2bfb9ea29d841809 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 17:46:13 +0530 Subject: [PATCH 085/466] Static pkg name --- web/apps/accounts/src/services/passkey.ts | 10 ++-- web/apps/auth/src/pages/_app.tsx | 14 ++--- web/apps/photos/src/pages/_app.tsx | 8 +-- web/packages/accounts/services/logout.ts | 6 --- web/packages/accounts/services/passkey.ts | 4 +- web/packages/next/http.ts | 62 +++++------------------ web/packages/next/types/app.ts | 32 ++++++------ 7 files changed, 40 insertions(+), 96 deletions(-) diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index b8c1ec3e56..c729a2b3c7 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -22,12 +22,10 @@ export const isWebAuthnSupported = () => !!navigator.credentials; */ const accountsAuthenticatedRequestHeaders = ( token: string, -): Record => { - return { - "X-Auth-Token": token, - "X-Client-Package": clientPackageName("accounts"), - }; -}; +): Record => ({ + "X-Auth-Token": token, + "X-Client-Package": clientPackageName, +}); const Passkey = z.object({ /** A unique ID for the passkey */ diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index a8063a44ea..4c24613308 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -1,14 +1,12 @@ import { CustomHead } from "@/next/components/Head"; -import { setAppNameForAuthenticatedRequests } from "@/next/http"; import { setupI18n } from "@/next/i18n"; import { logStartupBanner, logUnhandledErrorsAndRejections, } from "@/next/log-web"; import { - appName, - appTitle, clientPackageName, + staticAppTitle, type BaseAppContextT, } from "@/next/types/app"; import { ensure } from "@/utils/ensure"; @@ -82,11 +80,8 @@ const App: React.FC = ({ Component, pageProps }) => { void setupI18n().finally(() => setIsI18nReady(true)); const userID = (getData(LS_KEYS.USER) as User)?.id; logStartupBanner(userID); + HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); - setAppNameForAuthenticatedRequests(appName); - HTTPService.setHeaders({ - "X-Client-Package": clientPackageName(appName), - }); return () => logUnhandledErrorsAndRejections(false); }, []); @@ -145,7 +140,6 @@ const App: React.FC = ({ Component, pageProps }) => { }; const appContext = { - appName, logout, showNavBar, isMobile, @@ -157,7 +151,9 @@ const App: React.FC = ({ Component, pageProps }) => { somethingWentWrong, }; - const title = isI18nReady ? t("title", { context: "auth" }) : staticAppTitle; + const title = isI18nReady + ? t("title", { context: "auth" }) + : staticAppTitle; return ( <> diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 301797b3f8..4cba5e1845 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,5 +1,4 @@ import { CustomHead } from "@/next/components/Head"; -import { setAppNameForAuthenticatedRequests } from "@/next/http"; import { setupI18n } from "@/next/i18n"; import log from "@/next/log"; import { @@ -7,7 +6,6 @@ import { logUnhandledErrorsAndRejections, } from "@/next/log-web"; import { - appName, clientPackageName, staticAppTitle, type BaseAppContextT, @@ -148,11 +146,8 @@ export default function App({ Component, pageProps }: AppProps) { void setupI18n().finally(() => setIsI18nReady(true)); const userID = (getData(LS_KEYS.USER) as User)?.id; logStartupBanner(userID); + HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); - setAppNameForAuthenticatedRequests(appName); - HTTPService.setHeaders({ - "X-Client-Package": clientPackageName(appName), - }); return () => logUnhandledErrorsAndRejections(false); }, []); @@ -345,7 +340,6 @@ export default function App({ Component, pageProps }: AppProps) { }; const appContext = { - appName, showNavBar, mlSearchEnabled, updateMlSearchEnabled, diff --git a/web/packages/accounts/services/logout.ts b/web/packages/accounts/services/logout.ts index 079366524e..21999e2bb8 100644 --- a/web/packages/accounts/services/logout.ts +++ b/web/packages/accounts/services/logout.ts @@ -1,5 +1,4 @@ import { clearBlobCaches } from "@/next/blob-cache"; -import { clearHTTPState } from "@/next/http"; import { clearKVDB } from "@/next/kv"; import log from "@/next/log"; import InMemoryStore from "@ente/shared/storage/InMemoryStore"; @@ -52,11 +51,6 @@ export const accountLogout = async () => { } catch (e) { ignoreError("Blob cache", e); } - try { - clearHTTPState(); - } catch (e) { - ignoreError("HTTP", e); - } try { await clearKVDB(); } catch (e) { diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index 2b3837ba4f..d507c01c68 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -1,4 +1,4 @@ -import { clientPackageHeaderIfPresent } from "@/next/http"; +import { clientPackageHeader } from "@/next/http"; import log from "@/next/log"; import { accountsAppOrigin, apiURL } from "@/next/origins"; import { appName, clientPackageName } from "@/next/types/app"; @@ -231,7 +231,7 @@ export const checkPasskeyVerificationStatus = async ( const url = await apiURL("/users/two-factor/passkeys/get-token"); const params = new URLSearchParams({ sessionID }); const res = await fetch(`${url}?${params.toString()}`, { - headers: clientPackageHeaderIfPresent(), + headers: clientPackageHeader(), }); if (!res.ok) { if (res.status == 404 || res.status == 410) diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index bf64a9b3a8..5fb8e3fe68 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -1,60 +1,22 @@ import { ensureAuthToken } from "./local-user"; -import { clientPackageName, type AppName } from "./types/app"; - -/** - * Value for the the "X-Client-Package" header in authenticated requests. - */ -let _clientPackage: string | undefined; - -/** - * Remember that we should include the client package corresponding to the given - * {@link appName} as the "X-Client-Package" header in authenticated requests. - * - * This state is persisted in memory, and can be cleared using - * {@link clearHTTPState}. - * - * @param appName The {@link AppName} of the current app. - */ -export const setAppNameForAuthenticatedRequests = (appName: AppName) => { - _clientPackage = clientPackageName(appName); -}; - -/** - * Variant of {@link setAppNameForAuthenticatedRequests} that sets directly sets - * the client package to the provided string. - */ -export const setClientPackageForAuthenticatedRequests = (p: string) => { - _clientPackage = p; -}; - -/** - * Forget the effects of a previous {@link setAppNameForAuthenticatedRequests} - * or {@link setClientPackageForAuthenticatedRequests}. - */ -export const clearHTTPState = () => { - _clientPackage = undefined; -}; +import { clientPackageName } from "./types/app"; /** * Return headers that should be passed alongwith (almost) all authenticated * `fetch` calls that we make to our API servers. * - * This uses in-memory state (See {@link clearHTTPState}). + * - The auth token + * - The client package name. */ -export const authenticatedRequestHeaders = (): Record => { - const headers: Record = { - "X-Auth-Token": ensureAuthToken(), - }; - if (_clientPackage) headers["X-Client-Package"] = _clientPackage; - return headers; -}; +export const authenticatedRequestHeaders = (): Record => ({ + "X-Auth-Token": ensureAuthToken(), + "X-Client-Package": clientPackageName, +}); /** - * Return a headers object with "X-Client-Package" header if we have the client - * package value available to us from local storage. + * Return a headers object with "X-Client-Package" header set to the client + * package name of the current app. */ -export const clientPackageHeaderIfPresent = (): Record => { - const headers: Record = {}; - if (_clientPackage) headers["X-Client-Package"] = _clientPackage; - return headers; -}; +export const clientPackageHeader = (): Record => ({ + "X-Client-Package": clientPackageName, +}); diff --git a/web/packages/next/types/app.ts b/web/packages/next/types/app.ts index dec4e5e510..ff9a211b9e 100644 --- a/web/packages/next/types/app.ts +++ b/web/packages/next/types/app.ts @@ -38,32 +38,32 @@ export const staticAppTitle = { photos: "Ente Photos", }[appName]; +export const _clientPackageName: Record = { + accounts: "io.ente.accounts.web", + auth: "io.ente.auth.web", + photos: "io.ente.photos.web", +}; + +/** Client package name for the Photos desktop app */ +export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; + /** - * Client "package names" for each of our apps. + * Client "package names" for our app. * - * These are used as the identifier in the user agent strings that we send to - * our own servers. + * The package name is used as the (a) "X-Client-Package" header in API + * requests, and (b) as the identifier in inline user agent strings in payloads. * * In cases where this code works for both a web and a desktop app for the same - * app (currently only photos), return the platform specific package name. + * app (currently only photos), this will be the platform specific package name. */ -export const clientPackageName = (appName: AppName): string => { - if (globalThis.electron) { +export const clientPackageName = (() => { + if (process.env.isDesktop) { if (appName != "photos") throw new Error(`Unsupported desktop appName ${appName}`); return clientPackageNamePhotosDesktop; } return _clientPackageName[appName]; -}; - -export const _clientPackageName: Record = { - accounts: "io.ente.accounts.web", - auth: "io.ente.auth.web", - photos: "io.ente.photos.web", -}; - -/** Client package name for the Photos desktop app */ -export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; +})(); /** * Properties guaranteed to be present in the AppContext types for apps that are From 284799bc7ae1ce6183710f79c3f29a406a8b80fd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 17:53:21 +0530 Subject: [PATCH 086/466] Second pass --- web/packages/accounts/pages/credentials.tsx | 6 ++---- web/packages/accounts/pages/login.tsx | 4 ++-- web/packages/accounts/pages/signup.tsx | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index f24fbf1550..ab885729fd 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -231,10 +231,8 @@ const Page: React.FC = ({ appContext }) => { isTwoFactorPasskeysEnabled: true, }); InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.ROOT); - const url = passkeyVerificationRedirectURL( - appName, - passkeySessionID, - ); + const url = + passkeyVerificationRedirectURL(passkeySessionID); setPasskeyVerificationData({ passkeySessionID, url }); openPasskeyVerificationURL({ passkeySessionID, url }); throw Error(CustomError.TWO_FACTOR_ENABLED); diff --git a/web/packages/accounts/pages/login.tsx b/web/packages/accounts/pages/login.tsx index 170a190c9b..3acc87dc2c 100644 --- a/web/packages/accounts/pages/login.tsx +++ b/web/packages/accounts/pages/login.tsx @@ -10,7 +10,7 @@ import { PAGES } from "../constants/pages"; import type { PageProps } from "../types/page"; const Page: React.FC = ({ appContext }) => { - const { appName, showNavBar } = appContext; + const { showNavBar } = appContext; const [loading, setLoading] = useState(true); const [host, setHost] = useState(); @@ -38,7 +38,7 @@ const Page: React.FC = ({ appContext }) => { ) : ( - + ); diff --git a/web/packages/accounts/pages/signup.tsx b/web/packages/accounts/pages/signup.tsx index 72fde8ba74..09efff25bf 100644 --- a/web/packages/accounts/pages/signup.tsx +++ b/web/packages/accounts/pages/signup.tsx @@ -10,7 +10,7 @@ import { SignUp } from "../components/SignUp"; import type { PageProps } from "../types/page"; const Page: React.FC = ({ appContext }) => { - const { appName } = appContext; + const { showNavBar } = appContext; const [loading, setLoading] = useState(true); const [host, setHost] = useState(); @@ -24,7 +24,7 @@ const Page: React.FC = ({ appContext }) => { router.push(PAGES.VERIFY); } setLoading(false); - appContext.showNavBar(true); + showNavBar(true); }, []); const login = () => { @@ -37,7 +37,7 @@ const Page: React.FC = ({ appContext }) => { ) : ( - + )} From 6f073b007b03a83bac3bb6dd53124a02bddde553 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 17:58:22 +0530 Subject: [PATCH 087/466] isDesktop --- web/packages/accounts/services/passkey.ts | 6 +++--- web/packages/next/types/app.ts | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index d507c01c68..c13fe11c7c 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -1,7 +1,7 @@ import { clientPackageHeader } from "@/next/http"; import log from "@/next/log"; import { accountsAppOrigin, apiURL } from "@/next/origins"; -import { appName, clientPackageName } from "@/next/types/app"; +import { clientPackageName, isDesktop } from "@/next/types/app"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; import ComlinkCryptoWorker from "@ente/shared/crypto"; @@ -27,13 +27,13 @@ import { getToken } from "@ente/shared/storage/localStorage/helpers"; * verification session. */ export const passkeyVerificationRedirectURL = (passkeySessionID: string) => { - const clientPackage = clientPackageName(appName); + const clientPackage = clientPackageName; // Using `window.location.origin` will work both when we're running in a web // browser, and in our desktop app. See: [Note: Using deeplinks to navigate // in desktop app] const redirect = `${window.location.origin}/passkeys/finish`; // See: [Note: Conditional passkey recover option on accounts] - const recoverOption: Record = globalThis.electron + const recoverOption: Record = isDesktop ? {} : { recover: `${window.location.origin}/passkeys/recover` }; const params = new URLSearchParams({ diff --git a/web/packages/next/types/app.ts b/web/packages/next/types/app.ts index ff9a211b9e..a66edbc8ef 100644 --- a/web/packages/next/types/app.ts +++ b/web/packages/next/types/app.ts @@ -27,6 +27,15 @@ export type AppName = (typeof appNames)[number]; */ export const appName: AppName = process.env.appName as AppName; +/** + * True if we're running in our desktop app. + * + * This is similar to checking for `globalThis.electron`, however the advantage + * of this check is that it will also work inside web workers (whose globalThis + * won't have an electron object defined). + */ +export const isDesktop = process.env.isDesktop == "1"; + /** * Static (English) title for the app. * @@ -57,7 +66,7 @@ export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; * app (currently only photos), this will be the platform specific package name. */ export const clientPackageName = (() => { - if (process.env.isDesktop) { + if (isDesktop) { if (appName != "photos") throw new Error(`Unsupported desktop appName ${appName}`); return clientPackageNamePhotosDesktop; From 67e054a26ddf42237d13671a2de0e60a5e0d075c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 17:58:52 +0530 Subject: [PATCH 088/466] Continue second pass --- web/packages/accounts/services/passkey.ts | 2 -- web/packages/next/{types => }/app.ts | 12 +++++------- web/packages/next/http.ts | 2 +- web/packages/next/log-web.ts | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) rename web/packages/next/{types => }/app.ts (93%) diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index c13fe11c7c..c6f144b786 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -94,8 +94,6 @@ export const openPasskeyVerificationURL = ({ /** * Open a new window showing a page on the Ente accounts app where the user can * see and their manage their passkeys. - * - * @param appName The {@link AppName} of the app which is calling this function. */ export const openAccountsManagePasskeysPage = async () => { // Check if the user has passkey recovery enabled diff --git a/web/packages/next/types/app.ts b/web/packages/next/app.ts similarity index 93% rename from web/packages/next/types/app.ts rename to web/packages/next/app.ts index a66edbc8ef..6220e691a9 100644 --- a/web/packages/next/types/app.ts +++ b/web/packages/next/app.ts @@ -47,12 +47,6 @@ export const staticAppTitle = { photos: "Ente Photos", }[appName]; -export const _clientPackageName: Record = { - accounts: "io.ente.accounts.web", - auth: "io.ente.auth.web", - photos: "io.ente.photos.web", -}; - /** Client package name for the Photos desktop app */ export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; @@ -71,7 +65,11 @@ export const clientPackageName = (() => { throw new Error(`Unsupported desktop appName ${appName}`); return clientPackageNamePhotosDesktop; } - return _clientPackageName[appName]; + return { + accounts: "io.ente.accounts.web", + auth: "io.ente.auth.web", + photos: "io.ente.photos.web", + }[appName]; })(); /** diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 5fb8e3fe68..fca7bbfc6b 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -1,5 +1,5 @@ +import { clientPackageName } from "./app"; import { ensureAuthToken } from "./local-user"; -import { clientPackageName } from "./types/app"; /** * Return headers that should be passed alongwith (almost) all authenticated diff --git a/web/packages/next/log-web.ts b/web/packages/next/log-web.ts index 54e2dd4b78..fb8364eac0 100644 --- a/web/packages/next/log-web.ts +++ b/web/packages/next/log-web.ts @@ -1,6 +1,6 @@ import { isDevBuild } from "@/next/env"; import log from "@/next/log"; -import { appName, appNames } from "./types/app"; +import { appName, appNames } from "./app"; /** * Log a standard startup banner. From 4a14017cff68a051ba79df2e8fad31f737b1030b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 18:14:23 +0530 Subject: [PATCH 089/466] cast --- web/apps/accounts/src/components/context.ts | 2 +- web/apps/accounts/src/pages/_app.tsx | 2 +- web/apps/accounts/src/services/passkey.ts | 2 +- web/apps/auth/src/pages/_app.tsx | 7 ++----- web/apps/cast/src/pages/_app.tsx | 2 +- web/packages/accounts/services/redirect.ts | 5 +++-- web/packages/next/app.ts | 4 +++- web/packages/next/types/context.ts | 14 ++++++++++++++ 8 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 web/packages/next/types/context.ts diff --git a/web/apps/accounts/src/components/context.ts b/web/apps/accounts/src/components/context.ts index d6a2755e41..3189659b03 100644 --- a/web/apps/accounts/src/components/context.ts +++ b/web/apps/accounts/src/components/context.ts @@ -1,4 +1,4 @@ -import type { BaseAppContextT } from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { createContext, useContext } from "react"; diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index b22a8e5533..158b1a3b34 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -1,7 +1,7 @@ +import { staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; -import { staticAppTitle } from "@/next/types/app"; import { PAGES } from "@ente/accounts/constants/pages"; import { accountLogout } from "@ente/accounts/services/logout"; import { Overlay } from "@ente/shared/components/Container"; diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index c729a2b3c7..fdb87df4e4 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -1,6 +1,6 @@ +import { clientPackageName } from "@/next/app"; import { isDevBuild } from "@/next/env"; import { apiURL } from "@/next/origins"; -import { clientPackageName } from "@/next/types/app"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; import { nullToUndefined } from "@/utils/transform"; diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index 4c24613308..a18bb5c130 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -1,14 +1,11 @@ +import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; import { logStartupBanner, logUnhandledErrorsAndRejections, } from "@/next/log-web"; -import { - clientPackageName, - staticAppTitle, - type BaseAppContextT, -} from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { accountLogout } from "@ente/accounts/services/logout"; import { Overlay } from "@ente/shared/components/Container"; diff --git a/web/apps/cast/src/pages/_app.tsx b/web/apps/cast/src/pages/_app.tsx index df51320dcb..5ae3158587 100644 --- a/web/apps/cast/src/pages/_app.tsx +++ b/web/apps/cast/src/pages/_app.tsx @@ -1,7 +1,7 @@ import { CustomHead } from "@/next/components/Head"; import { disableDiskLogs } from "@/next/log"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; -import { appTitle } from "@/next/types/app"; +import { appTitle } from "@/next/app"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { CssBaseline, ThemeProvider } from "@mui/material"; diff --git a/web/packages/accounts/services/redirect.ts b/web/packages/accounts/services/redirect.ts index bee96ae423..2a4aaad867 100644 --- a/web/packages/accounts/services/redirect.ts +++ b/web/packages/accounts/services/redirect.ts @@ -1,4 +1,4 @@ -import { appName } from "@/next/types/app"; +import { appName } from "@/next/app"; import { AUTH_PAGES, PHOTOS_PAGES } from "@ente/shared/constants/pages"; /** @@ -6,8 +6,9 @@ import { AUTH_PAGES, PHOTOS_PAGES } from "@ente/shared/constants/pages"; * * This is where we redirect to after successful authentication. */ -export const appHomeRoute = { +export const appHomeRoute: string = { accounts: "/passkeys", auth: AUTH_PAGES.AUTH, + cast: "/", photos: PHOTOS_PAGES.GALLERY, }[appName]; diff --git a/web/packages/next/app.ts b/web/packages/next/app.ts index 6220e691a9..e5b8415768 100644 --- a/web/packages/next/app.ts +++ b/web/packages/next/app.ts @@ -1,6 +1,6 @@ import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; -export const appNames = ["accounts", "auth", "photos"] as const; +export const appNames = ["accounts", "auth", "cast", "photos"] as const; /** * Arbitrary names that we used as keys for indexing various constants @@ -44,6 +44,7 @@ export const isDesktop = process.env.isDesktop == "1"; export const staticAppTitle = { accounts: "Ente Accounts", auth: "Ente Auth", + cast: "Ente Photos", photos: "Ente Photos", }[appName]; @@ -68,6 +69,7 @@ export const clientPackageName = (() => { return { accounts: "io.ente.accounts.web", auth: "io.ente.auth.web", + cast: "io.ente.cast.web", photos: "io.ente.photos.web", }[appName]; })(); diff --git a/web/packages/next/types/context.ts b/web/packages/next/types/context.ts new file mode 100644 index 0000000000..59d3724ff2 --- /dev/null +++ b/web/packages/next/types/context.ts @@ -0,0 +1,14 @@ +import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; + +/** + * Properties guaranteed to be present in the AppContext types for apps that are + * listed in {@link AppName}. + */ +export interface BaseAppContextT { + /** Perform the (possibly app specific) logout sequence. */ + logout: () => void; + /** Show or hide the app's navigation bar. */ + showNavBar: (show: boolean) => void; + isMobile: boolean; + setDialogBoxAttributesV2: (attrs: DialogBoxAttributesV2) => void; +} From 776915e65955850660002b4ea4eb9df1212e03a9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 18:16:11 +0530 Subject: [PATCH 090/466] Continue painting --- web/apps/cast/src/pages/_app.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 7 ++----- web/apps/photos/src/services/face/mlWorkManager.ts | 2 +- web/packages/accounts/api/user.ts | 2 +- web/packages/accounts/pages/two-factor/recover.tsx | 2 +- web/packages/accounts/services/passkey.ts | 2 +- web/packages/accounts/services/redirect.ts | 2 +- web/packages/accounts/types/page.ts | 2 +- web/packages/shared/components/LoginComponents.tsx | 2 +- 9 files changed, 11 insertions(+), 14 deletions(-) diff --git a/web/apps/cast/src/pages/_app.tsx b/web/apps/cast/src/pages/_app.tsx index 5ae3158587..ecb3166969 100644 --- a/web/apps/cast/src/pages/_app.tsx +++ b/web/apps/cast/src/pages/_app.tsx @@ -1,7 +1,7 @@ +import { staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { disableDiskLogs } from "@/next/log"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; -import { appTitle } from "@/next/app"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { CssBaseline, ThemeProvider } from "@mui/material"; @@ -19,7 +19,7 @@ const App: React.FC = ({ Component, pageProps }) => { return ( <> - + diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 4cba5e1845..c90c4092de 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,3 +1,4 @@ +import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; import log from "@/next/log"; @@ -5,11 +6,7 @@ import { logStartupBanner, logUnhandledErrorsAndRejections, } from "@/next/log-web"; -import { - clientPackageName, - staticAppTitle, - type BaseAppContextT, -} from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; import { AppUpdate } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; import { Overlay } from "@ente/shared/components/Container"; diff --git a/web/apps/photos/src/services/face/mlWorkManager.ts b/web/apps/photos/src/services/face/mlWorkManager.ts index d1d1dcbad8..8a555e82bd 100644 --- a/web/apps/photos/src/services/face/mlWorkManager.ts +++ b/web/apps/photos/src/services/face/mlWorkManager.ts @@ -1,8 +1,8 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; +import { clientPackageNamePhotosDesktop } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; -import { clientPackageNamePhotosDesktop } from "@/next/types/app"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { eventBus, Events } from "@ente/shared/events"; import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; diff --git a/web/packages/accounts/api/user.ts b/web/packages/accounts/api/user.ts index 5ed4005cfc..7b2bb56f6f 100644 --- a/web/packages/accounts/api/user.ts +++ b/web/packages/accounts/api/user.ts @@ -1,5 +1,5 @@ +import { appName } from "@/next/app"; import { apiURL } from "@/next/origins"; -import { appName } from "@/next/types/app"; import type { RecoveryKey, TwoFactorRecoveryResponse, diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index e52f90c633..6175b305b0 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -1,5 +1,5 @@ import log from "@/next/log"; -import type { BaseAppContextT } from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { recoverTwoFactor, diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index c6f144b786..ad094cef18 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -1,7 +1,7 @@ +import { clientPackageName, isDesktop } from "@/next/app"; import { clientPackageHeader } from "@/next/http"; import log from "@/next/log"; import { accountsAppOrigin, apiURL } from "@/next/origins"; -import { clientPackageName, isDesktop } from "@/next/types/app"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; import ComlinkCryptoWorker from "@ente/shared/crypto"; diff --git a/web/packages/accounts/services/redirect.ts b/web/packages/accounts/services/redirect.ts index 2a4aaad867..88e4b78677 100644 --- a/web/packages/accounts/services/redirect.ts +++ b/web/packages/accounts/services/redirect.ts @@ -9,6 +9,6 @@ import { AUTH_PAGES, PHOTOS_PAGES } from "@ente/shared/constants/pages"; export const appHomeRoute: string = { accounts: "/passkeys", auth: AUTH_PAGES.AUTH, - cast: "/", + cast: "/" /* The cast app doesn't use this, this is an arbitrary value. */, photos: PHOTOS_PAGES.GALLERY, }[appName]; diff --git a/web/packages/accounts/types/page.ts b/web/packages/accounts/types/page.ts index 490967ae35..c673f8a47e 100644 --- a/web/packages/accounts/types/page.ts +++ b/web/packages/accounts/types/page.ts @@ -1,4 +1,4 @@ -import type { BaseAppContextT } from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; /** * The default type for pages exposed by this package. diff --git a/web/packages/shared/components/LoginComponents.tsx b/web/packages/shared/components/LoginComponents.tsx index 46cdc102da..3f47225cd9 100644 --- a/web/packages/shared/components/LoginComponents.tsx +++ b/web/packages/shared/components/LoginComponents.tsx @@ -1,6 +1,6 @@ import log from "@/next/log"; import { customAPIHost } from "@/next/origins"; -import type { BaseAppContextT } from "@/next/types/app"; +import type { BaseAppContextT } from "@/next/types/context"; import { checkPasskeyVerificationStatus, passkeySessionExpiredErrorMessage, From 45093fcc0c3487d5c3079126425026c9be1f7fa8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 18:44:25 +0530 Subject: [PATCH 091/466] Inline --- web/apps/photos/src/services/face/mlWorkManager.ts | 12 ++++-------- web/packages/next/app.ts | 5 +---- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/web/apps/photos/src/services/face/mlWorkManager.ts b/web/apps/photos/src/services/face/mlWorkManager.ts index 8a555e82bd..4476437ee1 100644 --- a/web/apps/photos/src/services/face/mlWorkManager.ts +++ b/web/apps/photos/src/services/face/mlWorkManager.ts @@ -1,10 +1,10 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; -import { clientPackageNamePhotosDesktop } from "@/next/app"; +import { clientPackageName } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; -import { eventBus, Events } from "@ente/shared/events"; +import { Events, eventBus } from "@ente/shared/events"; import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; import debounce from "debounce"; import PQueue from "p-queue"; @@ -348,9 +348,5 @@ export function logQueueStats(queue: PQueue, name: string) { ); } -const getUserAgent = async () => { - const electron = ensureElectron(); - const name = clientPackageNamePhotosDesktop; - const version = await electron.appVersion(); - return `${name}/${version}`; -}; +const getUserAgent = async () => + `${clientPackageName}/${await ensureElectron().appVersion()}`; diff --git a/web/packages/next/app.ts b/web/packages/next/app.ts index e5b8415768..ae055db4a1 100644 --- a/web/packages/next/app.ts +++ b/web/packages/next/app.ts @@ -48,9 +48,6 @@ export const staticAppTitle = { photos: "Ente Photos", }[appName]; -/** Client package name for the Photos desktop app */ -export const clientPackageNamePhotosDesktop = "io.ente.photos.desktop"; - /** * Client "package names" for our app. * @@ -64,7 +61,7 @@ export const clientPackageName = (() => { if (isDesktop) { if (appName != "photos") throw new Error(`Unsupported desktop appName ${appName}`); - return clientPackageNamePhotosDesktop; + return "io.ente.photos.desktop"; } return { accounts: "io.ente.accounts.web", From ca0fa88bb56245103cbac32836c5a63035b45804 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sun, 30 Jun 2024 18:56:39 +0530 Subject: [PATCH 092/466] Incl x-c-p in all API fetches --- web/apps/accounts/src/services/passkey.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index fdb87df4e4..ce25d05ed3 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -1,5 +1,6 @@ import { clientPackageName } from "@/next/app"; import { isDevBuild } from "@/next/env"; +import { clientPackageHeader } from "@/next/http"; import { apiURL } from "@/next/origins"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; @@ -415,6 +416,7 @@ export const beginPasskeyAuthentication = async ( const url = await apiURL("/users/two-factor/passkeys/begin"); const res = await fetch(url, { method: "POST", + headers: clientPackageHeader(), body: JSON.stringify({ sessionID: passkeySessionID }), }); if (!res.ok) { @@ -506,6 +508,8 @@ export const finishPasskeyAuthentication = async ({ const res = await fetch(`${url}?${params.toString()}`, { method: "POST", headers: { + // Note: Unlike the other requests, this is the clientPackage of the + // _requesting_ app, not the accounts app. "X-Client-Package": clientPackage, }, body: JSON.stringify({ From 26c1dda600e7d119fbbe8ce4d6a3f92c813452e7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:42:11 +0530 Subject: [PATCH 093/466] [infra] Change prometheus scrape interval to 60s (the default) --- infra/services/prometheus/prometheus.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/infra/services/prometheus/prometheus.yml b/infra/services/prometheus/prometheus.yml index 81d1e3d84a..dbd319a347 100644 --- a/infra/services/prometheus/prometheus.yml +++ b/infra/services/prometheus/prometheus.yml @@ -1,8 +1,5 @@ # https://prometheus.io/docs/prometheus/latest/configuration/ -global: - scrape_interval: 30s # Default is 1m - scrape_configs: - job_name: museum static_configs: From bbc44d6ac1cabed300bb889161a699a41dbf4039 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:03:07 +0530 Subject: [PATCH 094/466] [desktop] Use clip-bpe-js as the Tokenizer Replace the inlined code with the library. Tested by comparing the produced embeddings on a few sample prompts (were exactly the same). --- desktop/package.json | 1 + desktop/src/main/services/ml-clip.ts | 2 +- desktop/src/thirdparty/clip-bpe-ts/LICENSE | 21 - desktop/src/thirdparty/clip-bpe-ts/README.md | 40 -- .../clip-bpe-ts/bpe_simple_vocab_16e6.ts | 4 - desktop/src/thirdparty/clip-bpe-ts/mod.ts | 470 ------------------ desktop/src/types/clip-bpe-js.ts | 11 + desktop/yarn.lock | 5 + 8 files changed, 18 insertions(+), 536 deletions(-) delete mode 100644 desktop/src/thirdparty/clip-bpe-ts/LICENSE delete mode 100644 desktop/src/thirdparty/clip-bpe-ts/README.md delete mode 100644 desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts delete mode 100644 desktop/src/thirdparty/clip-bpe-ts/mod.ts create mode 100644 desktop/src/types/clip-bpe-js.ts diff --git a/desktop/package.json b/desktop/package.json index 9d07e637d0..7f8b7d666e 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -27,6 +27,7 @@ "any-shell-escape": "^0.1", "auto-launch": "^5.0", "chokidar": "^3.6", + "clip-bpe-js": "^0.0.6", "compare-versions": "^6.1", "electron-log": "^5.1", "electron-store": "^8.2", diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index cea1574e0d..6719e191c4 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -5,10 +5,10 @@ * * @see `web/apps/photos/src/services/clip-service.ts` for more details. */ +import Tokenizer from "clip-bpe-js"; import jpeg from "jpeg-js"; import fs from "node:fs/promises"; import * as ort from "onnxruntime-node"; -import Tokenizer from "../../thirdparty/clip-bpe-ts/mod"; import log from "../log"; import { writeStream } from "../stream"; import { ensure, wait } from "../utils/common"; diff --git a/desktop/src/thirdparty/clip-bpe-ts/LICENSE b/desktop/src/thirdparty/clip-bpe-ts/LICENSE deleted file mode 100644 index ce3d8d37d6..0000000000 --- a/desktop/src/thirdparty/clip-bpe-ts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 josephrocca - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/desktop/src/thirdparty/clip-bpe-ts/README.md b/desktop/src/thirdparty/clip-bpe-ts/README.md deleted file mode 100644 index 48b4c94239..0000000000 --- a/desktop/src/thirdparty/clip-bpe-ts/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# CLIP Byte Pair Encoding JavaScript Port - -A JavaScript port of -[OpenAI's CLIP byte-pair-encoding tokenizer](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py). - -```js -import Tokenizer from "https://deno.land/x/clip_bpe@v0.0.6/mod.js"; -let t = new Tokenizer(); - -t.encode("hello"); // [3306] -t.encode("magnificent"); // [10724] -t.encode("magnificently"); // [9725, 2922] -t.decode(t.encode("HELLO")); // "hello " -t.decode(t.encode("abc123")); // "abc 1 2 3 " -t.decode(st.encode("let's see here")); // "let 's see here " -t.encode("hello world!"); // [3306, 1002, 256] - -// to encode for CLIP (trims to maximum of 77 tokens and adds start and end token, and pads with zeros if less than 77 tokens): -t.encodeForCLIP("hello world!"); // [49406,3306,1002,256,49407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] -``` - -This encoder/decoder behaves differently to the the GPT-2/3 tokenizer -(JavaScript version of that -[here](https://github.com/latitudegames/GPT-3-Encoder)). For example, it doesn't -preserve capital letters, as shown above. - -The -[Python version](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py) -of this tokenizer uses the `ftfy` module to clean up the text before encoding -it. I didn't include that module by default because currently the only version -available in JavaScript is -[this one](https://github.com/josephrocca/ftfy-pyodide), which requires -importing a full Python runtime as a WebAssembly module. If you want the `ftfy` -cleaning, just import it and clean your text with it before passing it to the -`.encode()` method. - -# License - -To the extent that there is any original work in this repo, it is MIT Licensed, -just like [openai/CLIP](https://github.com/openai/CLIP). diff --git a/desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts b/desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts deleted file mode 100644 index a4d58b3b1d..0000000000 --- a/desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts +++ /dev/null @@ -1,4 +0,0 @@ -const obj = { - text: 'bpe_simple_vocab_16e6.txt#version: 0.2\ni n\nt h\na n\nr e\na r\ne r\nth e\nin g\no u\no n\ns t\no r\ne n\no n\na l\na t\ne r\ni t\ni n\nt o\nr o\ni s\nl e\ni c\na t\nan d\ne d\no f\nc h\no r\ne s\ni l\ne l\ns t\na c\no m\na m\nl o\na n\na y\ns h\nr i\nl i\nt i\nf or\nn e\nð Ł\nr a\nh a\nd e\no l\nv e\ns i\nu r\na l\ns e\n\' s\nu n\nd i\nb e\nl a\nw h\no o\nd ay\ne n\nm a\nn o\nl e\nt o\nou r\ni r\ng h\nw it\ni t\ny o\na s\ns p\nth is\nt s\nat i\nyo u\nwit h\na d\ni s\na b\nl y\nw e\nth e\nt e\na s\na g\nv i\np p\ns u\nh o\nm y\n. .\nb u\nc om\ns e\ner s\nm e\nm e\nal l\nc on\nm o\nk e\ng e\nou t\nen t\nc o\nf e\nv er\na r\nf ro\na u\np o\nc e\ngh t\nar e\ns s\nfro m\nc h\nt r\nou n\non e\nb y\nd o\nt h\nw or\ner e\nk e\np ro\nf or\nd s\nb o\nt a\nw e\ng o\nh e\nt er\nin g\nd e\nb e\nati on\nm or\na y\ne x\nil l\np e\nk s\ns c\nl u\nf u\nq u\nv er\nðŁ ĺ\nj u\nm u\nat e\nan d\nv e\nk ing\nm ar\no p\nh i\n.. .\np re\na d\nr u\nth at\nj o\no f\nc e\nne w\na m\na p\ng re\ns s\nd u\nno w\ny e\nt ing\ny our\nit y\nn i\nc i\np ar\ng u\nf i\na f\np er\nt er\nu p\ns o\ng i\non s\ng r\ng e\nb r\np l\n\' t\nm i\nin e\nwe e\nb i\nu s\nsh o\nha ve\nto day\na v\nm an\nen t\nac k\nur e\nou r\nâ Ģ\nc u\nl d\nlo o\ni m\nic e\ns om\nf in\nre d\nre n\noo d\nw as\nti on\np i\ni r\nth er\nt y\np h\nar d\ne c\n! !\nm on\nmor e\nw ill\nt ra\nc an\nc ol\np u\nt e\nw n\nm b\ns o\nit i\nju st\nn ing\nh ere\nt u\np a\np r\nbu t\nwh at\nal ly\nf ir\nm in\nc a\nan t\ns a\nt ed\ne v\nm ent\nf a\nge t\nam e\nab out\ng ra\nno t\nha pp\nay s\nm an\nh is\nti me\nli ke\ng h\nha s\nth an\nlo ve\nar t\nst e\nd ing\nh e\nc re\nw s\nw at\nd er\nit e\ns er\nac e\nag e\nen d\nst r\na w\nst or\nr e\nc ar\nel l\nal l\np s\nf ri\np ho\np or\nd o\na k\nw i\nf re\nwh o\nsh i\nb oo\ns on\nel l\nwh en\nil l\nho w\ngre at\nw in\ne l\nb l\ns si\nal i\nsom e\nðŁ Ĵ\nt on\nd er\nle s\np la\nï ¸\ne d\ns ch\nh u\non g\nd on\nk i\ns h\nan n\nc or\n. .\noun d\na z\nin e\nar y\nfu l\nst u\nou ld\nst i\ng o\nse e\nab le\nar s\nl l\nm is\nb er\nc k\nw a\nen ts\nn o\nsi g\nf e\nfir st\ne t\nsp e\nac k\ni f\nou s\n\' m\nst er\na pp\nan g\nan ce\nan s\ng ood\nb re\ne ver\nthe y\nt ic\ncom e\nof f\nb ack\nas e\ning s\nol d\ni ght\nf o\nh er\nhapp y\np ic\nit s\nv ing\nu s\nm at\nh om\nd y\ne m\ns k\ny ing\nthe ir\nle d\nr y\nu l\nh ar\nc k\nt on\non al\nh el\nr ic\nb ir\nvi e\nw ay\nt ri\nd a\np le\nb ro\nst o\noo l\nni ght\ntr u\nb a\nre ad\nre s\nye ar\nf r\nt or\nal s\nc oun\nc la\nt ure\nv el\nat ed\nle c\nen d\nth ing\nv o\nic i\nbe st\nc an\nwor k\nla st\naf ter\nen ce\np ri\np e\ne s\ni l\nâĢ ¦\nd re\ny s\no ver\ni es\nðŁ ij\ncom m\nt w\nin k\ns un\nc l\nli fe\nt t\na ch\nl and\ns y\nt re\nt al\np ol\ns m\ndu c\ns al\nf t\n\' re\nch e\nw ar\nt ur\nati ons\nac h\nm s\nil e\np m\nou gh\nat e\nst ar\nwee k\n! !!\nc lu\nth ere\nn er\nt om\ns el\nï¸ ı\nwor ld\nv es\nc am\ngo t\nin ter\nof f\nu m\nton ight\no ther\nh ou\nloo k\nj e\ni d\nsi on\nbe au\nat t\nel i\nor t\nre c\nf f\nst er\nsu pp\ng en\nbe en\nil y\nte am\nm m\ni c\npe op\nit t\nat s\non ly\nmb er\nen g\nb ri\nm p\nk now\nb ur\nb ar\nin s\nlo w\nsh e\nro w\nâ Ŀ\nt ro\npeop le\nvi a\nlo w\nag a\nbe t\nx t\nf ac\nch ar\ne ar\nw al\ns en\nf am\nb le\nn ati\nis h\nn or\ng ame\nli ve\ns co\nle y\nd on\nic k\nb all\nver y\nthe se\np an\ni a\nat ing\nc r\na re\ng ir\nma ke\nst re\nsho w\n. "\nf l\nu p\nd r\nthan ks\nil li\nw om\nst s\ni g\ns ur\never y\nc ur\nvie w\nle t\nin to\nmo st\nn a\nin di\ng ar\nha d\ns ou\nv ed\nan t\niti on\nma de\nf ol\nun i\nit ed\nðŁ ı\nic al\nth r\nread y\nch ec\nd ra\nk es\nboo k\ne p\nsi c\nmor ning\nne ws\nc au\nc t\nw ell\nan c\npho to\nth an\nor s\nbir th\ng g\nou t\nne xt\nsom e\nen ing\nstor y\nch ri\ndo wn\nhom e\nf fe\nfre e\nd a\nb or\nf il\nci al\nthan k\nsi de\nle ar\nqu e\nl ine\nt en\nat es\nye ars\nm y\npho to\nbeau ti\nri ght\nn u\nfor m\nshi p\nb an\nth er\nd ays\ng am\nas on\ng y\nðŁ İ\nbirth day\nse t\nic k\ne t\nst ill\ncom ing\nta ke\nðŁ ĩ\nb b\ns ol\ns on\nd en\ne p\nmu sic\nthe m\nde n\nwh y\nf oo\nc ra\nam az\nw n\nh ol\nt ting\nw r\nu e\nma g\nc ro\nl an\nc lo\nb ra\na k\ns ing\nc al\nre ad\n\' ve\njo h\nb ab\nd ri\nb lo\nbi g\ner ic\nin t\nt or\ntr y\nl a\nle g\nhou se\nm ic\nv al\nbeauti ful\nl itt\nchec k\nne w\nver s\ns w\nar i\npla y\nh er\nâĢ ĵ\nw in\nm a\ncon gr\nsch ool\nf un\n. @\nhe al\nic h\nd el\nwh ere\nl on\nke t\ntw o\nmu ch\nwat ch\nv en\nd ed\na st\nk ed\nb as\ngo ing\nm p\ne ver\nw ays\nro o\nde sig\nl y\ns ed\nto p\nl in\nch an\nto o\nit ing\nd ent\ngh ts\nt y\nsp o\nne ed\nb lu\nin st\nbe ing\nâĿ ¤\nw el\nl s\nhi m\nm ay\nst ing\nn a\nel y\nlitt le\ng a\nn at\ntom or\nm c\nh on\nw ant\na ir\npi c\nam eric\np er\nle ss\nwee k\nve l\na h\nc ap\nch am\ng er\nti m\ntomor row\nne ss\nst ate\nh al\nser v\nz e\no s\np at\nv is\nex c\ns in\nf f\nc ity\nc en\nan y\nb el\nsu mm\nt in\nw ould\nloo king\nk o\nce le\nfam ily\nm er\npo w\nhel p\nbu s\nc o\nc le\nsel f\nen s\nic s\nth o\nan i\nch o\nle ad\nb s\nt wee\nth ink\nfor e\nch il\nvi de\ndi d\nal e\nch i\nv il\nen ds\nw ing\np as\n\' ll\nv ol\ns a\ng s\nman y\nj ec\nbe fore\ngra ph\nn y\nur ing\nw il\nd d\nbu il\nf av\nst ed\ntr an\nl ing\nou d\nd ge\nfi el\nnati onal\nst a\nc er\nw ere\nin a\nse ason\nc ou\nn ed\namaz ing\nti ons\ncele br\nn s\na th\nhe ad\ns day\nd ar\nlo c\nv in\nan other\ng oo\ns at\nn y\njo in\npre s\ns es\ns ing\nan a\nin ing\n.. ..\nc our\nï¸ ı\nac t\ncau se\nli ght\nam s\nt a\nb al\nf c\nhi gh\noff ici\nt t\nchri st\nd ic\nd ay\nra l\nh or\n: )\nvi si\nn am\no b\nma s\ngh t\nre ally\nt un\nfin d\nthr ough\npor t\nu t\nti ve\nst y\nn e\nor e\nðŁĺ Ĥ\nsupp ort\nne ver\nev en\nðŁ Ķ\nh a\ny a\nl d\nu k\nr an\nj am\nwi th\nme di\nd es\nne y\nch ing\nal e\nh y\nk in\n! !\nd y\npl ace\nal so\nb le\nwh ich\nbl ack\nb li\ns ay\npar k\npl ay\nir e\nvide o\nweek end\na il\nke y\np t\nw ard\nfri day\nd in\nine ss\ng ro\nb en\nal ways\nt ball\nag o\nm il\nc y\npro duc\ndi sc\nun der\nple ase\nsp or\nfu ll\ne y\nðŁ Ļ\nis e\niti es\nc at\nk no\nu se\nfo re\nk er\nar t\nhi gh\nop en\ns an\ne f\nour s\nsh ed\nst ri\nd ro\naga in\ni m\nðŁ ĵ\nen jo\nfu n\nge tting\np en\ng er\nc li\nan y\never y\ne u\nwom en\nâ ľ\ne st\nc ould\nr y\n" @\nth ou\nsh a\ncomm un\nb er\nd ents\ndi s\nwh ile\naw ay\ndi o\nh am\ng la\nd ate\nk a\nmis s\nun ch\nw on\nin f\nroo m\ng a\nre al\nex per\ndi rec\nsh ould\nsp r\ng ol\nl ong\nbet ter\nor i\ne y\ni ence\nil s\nz z\nh an\nf ound\nv s\nâ Ļ\npo st\nti c\npar t\nm en\nren ce\nce ss\nv ic\ns il\nsho p\nðŁĺ Ĥ\nf ood\nv al\nsti c\ny ou\ns ays\ne lec\nst ar\no c\nl and\ni d\nc tion\nfiel d\ns of\nst art\nwat er\nfri ends\non es\nðŁ Į\nf la\nf ar\nwh ite\npar ty\nin st\ngr ou\nt v\nevery one\nm ent\nj a\nch a\npr in\nan ts\nd uring\nl at\nl ar\nwe st\nth en\nk a\ny oun\nin sp\nin te\nwe en\nvisi t\naga inst\nre le\nhe ad\nc es\nto wn\nloo ks\nth re\nre gi\nren t\npro jec\ngir l\nse ar\nw o\nm om\nc ar\nh un\npu bli\nd i\np le\nc all\nc ri\nu m\nfor d\nper fe\nfri end\nh ard\nssi on\nte st\npla ying\nar ound\nbe cause\nke ts\nme et\nsat ur\nar ti\nwor k\nj un\nv en\nr un\nme mber\npor t\nsu per\nt wit\ns am\nel s\nt ly\nad v\nati ve\nat h\ns ure\nav ail\nla r\ns qu\nar ds\nev ent\nm en\nl l\no ver\nlo gy\nit al\ntim es\nm al\nb ack\nc oo\nma king\nst ru\nâ ģ\nit u\nsh ar\ng an\nc as\ns n\nsumm er\npic ture\nf an\nh in\nchrist mas\nc y\npr oud\ncham pi\ndesig n\npp ing\nho pe\nc a\navail able\nma y\nwe d\nphoto graph\nspe cial\nsal e\nsto p\ner y\na we\nal ity\nhi story\nam a\npre si\nb ru\nwor king\nd one\nd r\nk en\nfe at\nw ood\nate st\nsun day\nmo vi\nvel y\ns le\nf ace\nsp ec\nstu dents\nb y\nha m\nsp on\nbus iness\nd at\ni e\ni p\nso ci\ng lo\nh and\nre cor\nr s\nme e\nke ep\np ur\nheal th\nsh e\ncom ple\ngo d\nda vi\ncol lec\nli st\nr a\nclu b\nt ers\nin clu\nth ings\npl an\nâ ĺ\njoh n\nsh ing\nat ul\nso on\nblu e\ng or\nsatur day\nw on\ncongr atul\nse e\nâĿ¤ ï¸ı\ntho se\nðŁĺ į\nfin al\nd ou\nit h\no wn\nro ad\nt our\na st\nindi a\nti l\nn d\nf er\nfav or\nsu l\nlear n\nfir e\nju st\ngrou p\na h\nr ac\nbo dy\nu r\nc are\nà ¸\np lo\no h\npo s\ngi ve\nte ch\nsu b\nc ent\ner ing\ny m\nil ity\nf ic\nlon don\nv ir\ngu ys\nb a\nðŁ ¤\nbab y\nsc re\nðŁĺ į\ntru mp\nun der\nchan ge\ni an\ncol le\nss es\nl er\nss ed\nn ice\nann oun\npow er\ns ar\na king\nmin i\ns li\ns wee\nk ar\nfu l\nc ru\nac tion\na ther\n) .\nst and\nde vel\na a\ng an\nle ft\nlo l\nre l\ntran s\nm ents\nin t\ne f\nman ag\ndi g\ngen er\ndo wn\np au\nti v\nk u\nth ur\nk en\nst on\nf ans\ntal k\ntwee t\nt oo\nsty le\npro te\nse con\nfr on\nawe some\ng l\np al\nne t\ns or\nla u\ng on\nsin ce\nt ty\nser ies\nme mor\nb eli\nfil m\ndi d\ndi es\no t\ncongratul ations\np ra\ne ve\nw oo\noffici al\nsu c\nin cre\nb on\npar t\npp ed\ncla ss\nsi ve\nbo y\ncu l\nperfe ct\nt ou\nd am\nwel come\nfoo tball\nh i\np ap\nwa it\nad a\ncongr ats\nyoun g\nexc ited\nre ce\nj an\nv a\nre d\nst ra\nmedi a\n\' d\ndo es\nle t\nmu l\nill s\ngre en\nm el\nto ge\nfu ture\nye ster\nvers ity\nfor m\nta in\ni de\nch es\nki ds\nqu i\nha ha\nde ta\nbi g\nfavor ite\ngir ls\ncon tin\ndo m\nsear ch\nu al\na ir\nd ers\nmon th\nc er\nyester day\ncommun ity\nad e\ndo g\nvil le\nic es\nd eli\nsy ste\nru n\nis m\nhe art\nc up\nen ti\nfe w\npresi dent\ne ds\nun til\nfe sti\no k\nf lo\nsa id\nol e\nme d\ntra vel\n £\nph one\ntoge ther\nfa st\nlo t\ngam es\nsh ir\nbet ween\ny es\nth ers\ndo ing\nm ac\nat or\nb and\nfol low\nprojec t\ndevel op\ndi ffe\ncon fe\nspe ci\nca st\ny s\nbo ard\nr d\ni al\nsh oo\nr am\nha ving\nsh are\nfol low\non e\nn ame\nm r\npu t\ndisc u\nor y\nc ame\nou s\ns ite\ntwit ter\nt b\nt it\nfin ally\nz ed\nsu per\ncom pan\nus ing\nall s\nli st\nr is\nsho t\ng al\nt ar\nde l\njoh n\nâĢ Ķ\nsome thing\nra m\ninte re\nwh e\nb it\nðŁ į\nstre et\noun d\na i\ntic kets\nmovi e\nre al\nk y\nta king\no pp\nc c\nl am\nm oun\nin ve\nbl ack\nus ed\non line\ny or\nloc al\ngu e\nc ks\no w\nge st\nbo ys\nilli on\ncon t\nre ci\nin ed\neu ro\nno w\nse en\np h\nte ach\nde f\nsou th\nsu ch\naw ard\nmu st\nis su\nca re\nfe el\np lu\nl atest\nspor ts\nwe b\nte x\ne ment\ns k\nfi c\nw an\nte ch\no t\nbo x\nn er\nfre e\nt al\na sh\nc ase\nho t\nwon der\nmee ting\ner a\nch all\nðŁ IJ\njo b\nil i\nc ool\nj our\nth s\nm o\nf el\ndi e\nmic ha\ne le\nte am\nserv ice\nst and\nma kes\np ing\near ly\ncom es\ne k\nho li\nv ers\nag ue\ns au\nthre e\nmon day\nfa shi\nsome one\nth ro\nse a\nb ad\nsupp or\ntur n\nur y\nm ing\nphotograph y\nn ic\nmar k\npre tty\nss ing\nwat ching\nme mb\nar ri\ncoun ty\nbe ach\nfr an\ncen ter\npol ice\nb at\npubli c\nt an\npre ss\ns af\ns y\nge ts\nro y\nn ers\ny our\nbu y\nst ers\nsho w\nas ed\nchil dre\naf ric\nin es\nsp ace\nsc ri\nh all\npa in\nar ing\nhom e\nm ur\nheal th\nch ed\ns and\nrece i\ngu y\ne a\nameric an\nre si\nchildre n\n- -\ni ri\ning ton\ncoun try\nro ss\nle n\nann a\nboo ks\nb c\ne ce\nd om\nlo vely\nk h\npe t\ng y\ng ri\nst age\noff ice\nro ck\nm on\nb ay\nt able\nsu n\nm ed\nth in\nl or\nf low\n( @\nuni versity\nstor e\nfron t\ngoo d\nz a\nvo te\nnor th\nhe y\nan im\nor der\nmi d\nwith out\na de\nre member\nmar ket\n? ?\nmu s\ntra ining\ne duc\nbu t\nco ver\nst an\nsc en\nb la\nbre ak\nl ou\ns ame\ng old\na in\no s\nbo th\nl it\nver n\na i\nal bu\np a\nenjo y\nbe g\nell ing\nthur sday\ninf o\ns an\nameric a\nha ir\nte l\nmar ch\ncon cer\ncolle ge\nconfe rence\nap p\nh our\nch ang\nâ ļ\ns our\nol s\nwe ather\nw ar\np hi\nfesti val\nsecon d\ncu te\npr ac\nen er\nstr y\nle a\npol it\ns av\nse n\no w\nm i\nne ar\nou ght\nz e\nco ffe\nw illi\nd an\nse y\ndavi d\ne se\nf an\nde ci\nthe at\nno v\nati on\ntr ac\nsc i\nre view\nc el\ne m\nu n\nju ly\nor ig\nti on\nd ru\nform er\nst ay\naf ter\nin v\ntoo k\ndat a\nb al\ntu es\nd an\nev ening\nðŁĺĤ ðŁĺĤ\nd ol\nu res\npro vi\nt s\ne st\nsig n\nj ac\nu k\ns ong\nye t\nbo w\nin du\nj ap\nh oo\npo int\nany one\nz y\ni st\nh ur\nit al\nbuil ding\nwom an\nch ur\nj er\nper for\nco ach\nle ague\nce ss\nne t\ni mag\nnati on\nbr it\nqu e\naw ards\nag es\nwor ks\nc ed\nman ce\nl ate\nig n\nmon ey\ntru e\ni i\nt ell\npl ac\np ac\nas y\nwor ld\nbe hin\nim port\nread ing\ngra m\ngi ving\nme t\nh it\nfor ward\nst om\npres ent\njun e\nso cial\nno on\nmar t\nhal f\ns we\ngo vern\nk er\ndeta ils\nli sh\n_ _\nac y\nsi a\nber t\nf all\n! !!!\n) ,\nth i\nd iti\nsp ort\nk ing\nf it\nst af\nc at\nmu se\ncen tr\ny er\ncon tro\nb loo\nwal k\nac tu\ndid n\nli m\nlear ning\nre search\nwed ne\nau th\nh ours\nk y\nf ar\nh en\n.. ..\nit ch\nri l\nstr ong\nsk y\nque sti\njam es\nr on\nd g\nf ur\nc in\ndo es\napp ro\nmar ke\ntu res\nful ly\nch at\nbehin d\nte m\nfin i\nmis sion\nb att\nfe el\nhe av\nevery thing\nb ar\nw ish\npre mi\ni ma\nexper ience\ne ach\nre port\nswee t\ntic s\nspr ing\nre spon\nsyste m\nvic tor\nl in\nsa w\nal ready\ngh ter\nf le\nã ĥ\nbr ing\nalbu m\n- -\nell s\nst an\nto m\ninter national\nw ent\nan ni\nmat ch\npp er\nst one\nsm all\nra in\nfashi on\nare a\nv an\nag ram\nk o\nthou ght\nwor th\nv an\nm er\ncoffe e\nit es\ng n\narti st\nc on\nar ch\nc ir\nse cre\ngr ound\nis o\nh and\nco m\nbri dge\nh s\nx i\nl ink\npu l\nsp l\nr ace\nf li\nri ver\ng as\ndi sco\nd al\nplay er\nf it\nphoto s\nit y\no k\nj or\ntr a\nap ril\nad s\na di\nsol u\nbeau ty\ndo or\nme ss\nup date\nali a\nsch o\nen ed\nmom ent\nsco t\nsc ience\ni or\nti es\nac ross\nous ly\nsh es\ndoes n\np age\nwat er\nm illion\ncla ssi\nl ic\nca st\nform ation\nmicha el\nell o\ns mo\nin ts\nvi sion\nop ening\nld n\nau str\ntues day\nwin ner\npo ssi\nr ound\nshir t\ndi t\nb o\nu es\nil led\nal ong\ntri p\nstar ting\nim pro\nk an\nper son\nno t\nre co\nne eds\nc le\nli e\nre st\nr ing\nwin ter\nsi mp\nmo m\nbe er\nfac e\ntor s\nus a\ncollec tion\nge or\nse ssion\ntr ying\nla s\nla ke\nj en\norig in\nstu dent\nse cur\nv in\npic s\nex pe\ncom p\ngon na\ne qu\nb ad\nle y\na u\nmemb ers\nbre ak\nw all\ngi c\ndin ner\nbu l\ninsp ir\nr i\nmin d\nic a\nwin ning\ntal king\nt ren\ns is\nt en\nwonder ful\ns now\nhe ar\nth om\nno thing\ngu i\nst in\nblo g\nfe st\nb un\nle e\nwar ds\nch ance\ndre ss\nre n\npau l\np es\ntech no\nru ssi\nc ard\ne ast\nmar i\nw ine\nt i\nla w\nstr ic\nk i\nap e\nau gu\npro fe\nas h\ncour se\nma il\nren tly\nd un\nm un\nlo ve\nis land\ndri ve\ns l\nend ed\nma in\nlo st\nnat ure\nâĿ¤ ï¸ı\nch ic\nre por\np in\npr o\nst ation\nce p\nta kes\ncompan y\ngo es\non d\nma ch\nra dio\nd ad\nro ck\nj a\np ay\nchampi on\ne e\nin de\ntt a\nati c\nt ab\nbeli eve\nener gy\nz i\nt at\nwor d\non ce\nre sul\ny l\nand re\nan o\ninst agram\nclo se\nt am\ncu stom\nw a\ncon om\nsho ws\nli fe\nk in\nro b\nt age\nn ation\nal most\nlist en\nsa ve\nre li\nac e\nmar y\ntre e\nfor get\nj ack\nwa iting\ndirec tor\nh ill\nbor n\nte mp\nf l\nst e\non a\nsing le\nwedne sday\nun ited\nin o\n@ _\nne l\ncelebr ate\nen ding\nde al\nj i\ncan ada\nhu ge\ntr ack\nâĢ ¢\nf y\nfan ta\nan g\nyor k\nrele ase\np un\nep iso\nwor ds\nt our\np ack\ni gh\nclassi c\nperfor mance\nke t\nafter noon\nrecor d\nwin s\npro ble\nâĿ ¤\nf our\nb ed\nban k\nd ance\ns la\ncal led\nmi ght\na p\npa st\nðŁ ļ\ndiffe rent\nit e\ngi ft\nssi ve\nchur ch\nc us\npro gram\nho tel\nic e\nma d\nsecur ity\nen ge\nd c\nen ough\nst a\ne ty\nde ad\ng un\nhe ar\nm ir\nhu man\ngre ss\noun ds\npi ece\nbre aking\ngar den\nfi ght\nvie ws\nf ish\nstar ted\nrun ning\ngre en\nser i\ns m\nas k\nd or\nde ath\ne conom\ner i\nir d\ns er\nl unch\nâģ ¦\nbo x\nnat u\nba se\nb an\nf al\nglo bal\nwil d\nwo w\nout side\nmo ve\nle ad\nan al\nmuse um\non g\nha w\npow er\nthan k\nb ac\nchar ac\ncam pa\ndig ital\nr o\nop er\nde v\nw ol\np ati\nf a\nm ale\npap er\nill ing\nc s\nâ ĥ\neduc ation\nta ken\ne ffe\nm ou\ns ad\n" .\nbas ed\nstaf f\ninclu ding\nli ving\na c\nch ina\nmo b\nstor m\nlu ck\nph il\no o\ny n\ntra vel\nk el\nti al\npr ice\nboo k\nimport ant\nbi o\np ool\nny c\nf ab\nlo ad\n? !\nchall enge\ncr y\nser ve\nwe ar\nbu s\nta in\nnu mber\nro r\nk at\ni z\nth ough\nho sp\nm m\nfa ir\nut es\nho t\npo p\nfi ed\ncam p\ndevelop ment\nli br\nc ali\nem s\nâģ¦ @\nb ol\nis ed\nstand ing\nmo del\nit a\ng le\nbro wn\nima ge\nve red\nfor ce\no il\npar tic\nsh u\nda ily\nla w\nse c\ncla ss\ncam p\nholi day\ncl in\nk ers\npres ent\ngam e\nincre di\ner ship\ninter view\nb ill\ndu e\nand y\nab o\nin nov\nke y\nac ade\np il\nmo der\nst ars\nbr and\nf er\nwee ks\ncon si\npr e\nsa fe\nwr it\ndi um\nla unch\nmarke ting\nann ual\nas si\ncour t\nla dy\nc ted\nand a\nin side\nchil d\nopp or\nsm ith\ncentr e\ngu e\nâģ ©\nf ren\nst y\nfor t\nent ly\nis n\nke ep\nto ber\non y\nbo y\nal d\ncol la\nde mo\nle vel\ncom pet\nad o\nb our\nfanta stic\nm ate\ns u\nsou th\noppor tun\nvers ary\nlat er\nbu d\nface book\nla un\nster n\np it\n! "\nma j\ngr am\ntb t\nfi re\nhapp y\na ks\nwh ole\nactu ally\nill er\nell a\nlo ts\nal ex\nan ge\nlan ds\nðŁĺ Ń\nen ter\nr ou\nepiso de\np ed\nin ten\nsh ire\nwh o\npl an\nh o\nca ke\nwe st\nmag az\nfre sh\nc c\nn ar\nch ris\nwr iting\nw er\nn om\nl o\nmi dd\ndre am\no l\nti onal\nde b\n> >\nbe come\ns i\ngr and\nall ing\nhi stor\nri de\ni red\nsaf e\nque en\nci l\nin tro\nvi l\nd ani\n.. .\nar tic\nst at\nsh ort\nor ing\nsel fi\nmis si\ndo c\nb it\ng all\nb om\ni re\nse lec\nd ition\nðŁĶ ¥\nfri end\nbe at\ngh ting\nðŁĺ Ĭ\npe ace\nex hi\nant a\nab ility\nil lu\nj on\nqu ality\ntri bu\nm es\nplay ers\nfa ir\ncu t\nc ab\nsuc cess\nb i\nsu s\npro mo\nsch e\nan ge\nic o\ncomm it\ncat ch\nill a\nkin d\nfeel ing\nqu o\ns ay\nanni versary\nspo t\nmo ther\nan e\np end\nyour self\nop s\napp le\nmin utes\np o\ngr and\nri es\nha ha\ncare er\ned ition\nde c\nric k\nam i\nconcer t\niti ve\nge ous\nd ly\nt te\nadv ent\ni g\nli ghts\nak er\nsk y\nâĥ £\nr ay\nfini shed\nw ay\ns d\nac coun\nðŁĴ ķ\nck y\nch el\nlit er\npain ting\nlo s\nst un\ntechno logy\nn as\nma r\nb il\nafric a\nki e\ney es\ngol f\nplu s\nni a\nit ec\nserv ices\nwed ding\nkno wn\nte le\n.. ...\nstar ts\npa ren\nw ants\nati onal\nmon ths\nwin do\nfav our\ner t\nmagaz ine\nex clu\nre ve\nb c\norigin al\ne ss\nn al\nan ti\nst ro\nt ice\nstu dy\nà ¤\nv ac\nnation al\nfi ve\nra in\nve ment\nu te\nver se\nem er\nar my\npossi ble\ngue ss\nval ley\nther n\ncro w\nm r\ncol or\non to\npic k\ncle ar\ndar k\nt ac\nwan ted\nit ting\ncan cer\ngovern ment\ndi e\nri se\nz ing\ncol d\nf oun\nstu dio\nstr ation\nbro ther\na head\nsh el\nmic ro\nic ally\nd au\nsig ned\nvi ol\na x\nas se\ni o\nw re\nspl ay\nch ick\naugu st\npl at\nti ps\nsp i\nhu man\ne asy\nlo gi\nmi ke\ngro w\nag re\nw w\nsh ad\nmo tiv\nwi de\ntur ns\nom g\nv ar\nde fin\nsu g\nj im\nðŁĶ ¥\nt d\ncampa ign\nnam ed\nre tweet\nco p\nt v\nle av\nk is\ndou ble\ns mar\nissu e\nvil la\nin formation\nli es\nsto ck\nn t\ndi stric\nsh or\nmi x\ner o\nse p\nme x\nsee ing\nli ve\nre min\nco de\ng ur\ns c\nwil d\nl un\nh ood\nspo t\nfa ther\nfore ver\nup d\ntra f\nf ly\nne ed\ngra du\ntra in\nma ke\ns ab\nbe y\nsi ze\nlead er\ntal ks\ne u\nlo g\nfo x\ngor geous\nle ss\nle ts\nsur pri\nmy self\nno te\nli ves\nf ru\nlo ved\nse ver\nde m\nj i\nso c\nh old\ndo gs\nn i\nâ ŀ\nlea ve\nair port\nben ef\nex pl\nshi ps\ncomple te\nach i\ngre at\nvin tage\nj ack\nro c\nwoo d\npri v\noff er\ney e\nver sion\nte a\nco ach\noff ic\nw ell\ng en\ns at\nh h\nyou th\no x\n? "\nm t\nmi x\ng g\nd le\nnatu ral\nbuil d\nbreak fast\nthin king\ntheat re\nmo on\nber g\ngo als\ngeor ge\nen e\nexc ell\nil ing\ntun e\ny ed\ng ate\nm it\nnet work\njo e\nh ello\nf b\ntu be\nwe aring\nath le\nstru c\nhar d\ngla ss\ng ers\nthro w\ng es\nb t\nindu stry\nmanag ement\nali st\ngo al\nstre am\ny el\na vi\nici ous\no thers\ns ki\nchri sti\nbir d\ne sc\nm in\ntr o\nl t\nj an\nim p\nri ghts\nsh a\nor gan\ncent ral\nar a\nro ll\nfavour ite\nche ster\nel se\np ay\ncar s\nm ine\nste p\nprac tice\nmaj or\nh ang\nðŁĺ ĺ\nn on\nv ari\neng ine\nvol un\ndi a\ni led\narch itec\np ink\nd s\nth y\nwa sh\nweb site\nba g\ncontro l\nel li\nf ra\nan sw\nd ence\ny u\nr on\nol a\ng in\ndr in\nli c\ncou ple\nsp ar\ng on\ncre ate\nc t\ncelebr ating\nde ep\ne at\nte e\nvo ice\ndro p\nvis it\nat ors\nsta dium\nf t\nw is\nro l\ngra de\nfam il\npo ints\nre pre\nw as\ntraf fic\njap an\nor g\nhon or\ntex as\nman u\nâĻ ¥\nsafe ty\nre r\nb ag\nem plo\nrele ased\nre gu\nak a\nn av\nro le\nsen ior\nspec t\ncro ss\nlin es\nbe st\np ack\ns in\nti e\nmis sing\nsun set\nli ber\nis ing\nj ay\nsk i\nchampion ship\nac tiv\nla dies\nplay ed\ny y\npu bl\nal o\npri de\ns r\npa ki\nlu x\nsur vi\nck ed\ne ts\ncho col\naustr alia\npar is\nmi les\nh at\nment al\nal a\nme an\nmob ile\nen a\nin si\nf ound\nchi ef\nt ag\nincredi ble\nre turn\nà ©\ngoo gle\nfren ch\ncre w\nhal lo\nali an\nj az\nch er\nsil ver\nnor th\neng lish\nbase ball\nc af\nlim ited\nfollow ing\napp reci\near th\nk ir\nve mber\nw ed\np tion\ng ed\noc tober\nfl ori\nc r\nen cy\nga ve\nlor d\nstu ff\nber ry\npo st\nsm ile\nbro ad\nst ate\ngg er\nme ans\nic y\ngu n\ny o\nma ster\nbur g\nhan ds\nni e\n/ /\nuni on\nbrit ish\nbig gest\ndistric t\nam ing\nh il\no ce\nper son\npas s\nen vir\nscho ols\narri ved\nanc es\ninsp ired\nex pla\nbe n\nlibr ary\nbo tt\nam p\nste ph\ncont act\nb ang\nm s\ncali for\nt old\nbatt le\nb b\nchic ago\nâľ ¨\nstr ate\nsh i\nde ce\n- )\nad d\nla b\nj ones\nleg end\ncast le\ning er\nst ance\nbe l\nur a\nre fu\nlead ers\npo t\nse x\nh ic\nartic le\nki d\nfr ance\nx x\nex e\ngui de\nvolun te\npr int\nal i\nce o\ntwee ts\nw x\nscen e\nvol u\nant i\nh an\nas soci\nshar ing\nro se\nmini ster\nsh er\nin ste\ncle an\ndemo cr\npo ster\nsk in\np sy\npro per\ncra zy\ni am\no re\nin i\nany thing\npo d\nmo ving\ncl ick\nex plo\ncom b\ncra ft\nf i\nbloo d\nis ra\npubl ic\nd ent\nol ym\neng land\na si\nch er\nfac t\nenvir on\nhar ry\ng one\nme dic\nenjo ying\njust ice\nj r\nindi an\nwi fe\ns ound\nt es\ndra wing\np al\nide a\ncr it\nju li\nil er\nwar m\ncl ar\nthou ghts\ndef en\ncoun cil\nintro duc\ndi ed\njan u\nan i\ns end\nli er\nm l\nintere sting\ntra de\nwin d\nb ay\ns ac\nanc y\nsour ce\nb es\norg ani\nar ly\nlar ge\nff ici\nta g\nu t\nde sp\no es\ntit le\nsy m\npic tures\nop en\nwom en\nsho wing\nri a\nle ast\nlead ership\ncur rent\nelec tr\nval ent\nlist ening\nc key\ngener al\nde ser\ndu ce\n; )\nc ent\nðŁĺį ðŁĺį\nsco tt\npo or\nselfi e\nev ents\ni on\nwr ong\nde v\nh ill\nsep te\ncul ture\nl ine\nsor ry\ns ent\nsi ster\nce pt\nk ri\nno vember\nar i\nannoun ce\nz ation\nbr an\ng ent\nd u\nl en\nper s\nf m\nmart in\no p\ne mb\nom e\nmidd le\nsuc cess\npe ter\njanu ary\nf lu\nrac ing\nd av\nbi ke\nðŁı »\npe t\nshoo t\nprofe ssi\nfeat uring\nsepte mber\nnow playing\nsta ur\nz a\non ic\nqu ick\nbas ke\nspe aking\nmil it\nz er\nchick en\nb ell\ns ad\nco ast\nlo ving\ny ers\nd j\npan el\nver age\ns wit\nic ks\nb ou\ncalifor nia\ns am\nparen ts\ner o\nk illed\nph ys\njo bs\nmi gr\nan th\ne mo\nhallo ween\nand er\nc m\ncompet ition\ne ag\ns ket\nsp ir\nmay be\nexclu sive\napp e\njour ney\nscre en\nfor d\ni o\nh ate\nu g\nsou l\nher o\nsoci ety\nsy n\ngu it\nn h\nd j\nas es\nim pre\nti me\nsal es\nd d\nf ts\nsumm it\nstun ning\nom s\ntur ned\ncle an\nsof t\nbe at\nre staur\nde red\nen ces\nma gic\ndi o\nsh ine\ngu est\nhealth y\nexhi b\nstor ies\npo pu\nn is\nel a\nbel ow\nfun ny\nresul ts\ns ne\ncur rently\nar d\ndown load\nf light\nm al\nf ine\np ad\nch u\nent ed\nh at\nðŁij ı\nste ve\nj o\nmar k\nr at\nb all\np c\np on\nb by\no li\nar ts\nas ure\nbow l\natt ack\nmi c\nde ar\nran ge\nen ter\nchocol ate\nbr illi\nac cess\n, "\n? ??\nch ap\ncon st\nt n\nmat ter\nblu e\ngall ery\nem p\nwork shop\nlead ing\ny ours\nbaske tball\nw anna\nth u\n_ _\nmar ri\nsle ep\nbi a\nch e\nma d\nimp act\no wn\nsi r\nchan nel\neuro pe\ne sp\nk itch\nhosp ital\nw ra\nroy al\nf s\nne u\nqu ar\nne y\nac ks\nch ase\npp y\nst al\nat ely\nti m\ndece mber\nr are\nper form\ncre am\nwe ight\nch oo\nni ght\nha ven\nfr anc\nkh an\nbuil t\nhel ping\ntru st\nty pe\ngol den\nta x\ns now\ns wi\ndi sa\nquesti ons\nve y\nli ght\nc n\ncl oud\nthom as\nag ed\nsh ou\nte ams\ngr an\nre ason\na a\nyou tube\nv p\npi zz\nmanag er\nbur y\ncre dit\ntre at\nma x\ni k\nma in\ng ing\nde ad\npro bab\nye ah\nã Ĥ\nbr and\nso li\npl ant\nta yl\ngir l\nðŁĺ Ń\nnam ent\nau to\nmess age\nko re\nn ur\nter r\nag u\nma p\nsen ting\nlo ves\ngi ves\ng ab\nz en\nro bert\ncon fir\nw ars\no m\nsta in\ncam era\nand er\nwon der\na b\nca p\ns old\nsu it\nwal king\ncontin ue\neffe c\ndau ghter\nd anc\ncha in\nmul ti\nki d\ny an\nchampi on\nv o\nta ins\nho st\nmin i\nmis sed\nre sc\nly n\nfin ish\ndel icious\ns as\ntayl or\ni b\npro mis\nproduc ts\nmoun tain\nflori da\nregi ster\ntre at\nrec ent\nfe male\nboo th\nmat t\nve hic\ns op\nmo tor\nsuppor ting\nphi c\nex tre\ndr ink\nlan e\nth ird\np s\ncon stru\nce re\nfar m\nðŁİ ī\ntu red\nðŁij ī\nc ats\na j\ngi e\nshoo ting\nas ked\npaki stan\nam e\nm b\ng il\nleg al\nsqu are\nin vol\ndra w\noo oo\n!! !!\nopportun ity\np y\ne i\nb ts\nteach er\ncharac ter\njohn son\nbr on\nly wood\nch ine\nc ing\nc ine\nd ge\ngam ing\nrussi a\nci a\nquo te\nric h\ngo v\nflow ers\nsp iri\nst in\ngrow th\nðŁı ¼\ncomm er\nj uni\nmu m\nr an\ns na\na ren\nc b\nac tor\ncol or\nsi t\npa ir\nch i\nbo w\nacade my\nhel d\nr ang\nme tal\ny l\nac tive\nprobab ly\nt ch\nneed ed\nspe e\ncho ice\nital y\nry an\nðŁĩ º\nflow er\nv it\nm n\nfound ation\nb ak\nsi ons\nne igh\nf loo\nhe ard\nre mo\nfre sh\ning ing\nre f\nto wn\ncl ou\nje sus\nspiri t\ncou ldn\nz es\nðŁĴ Ļ\nwilli ams\npro ce\nmoder n\npro cess\nsho es\ncre ated\ntri c\nissu es\nann e\natt en\nde but\nh r\nn it\nsti g\na po\ne ps\nz u\nã Ģ\nsi x\ncar ds\nlan gu\nfam ous\ntour nament\nse l\ne bay\ny n\nst on\nk ick\nannoun ced\nk am\nvo c\nbrilli ant\nhou se\nche ese\nwar ri\nmus ic\nho ckey\nðŁĺĤ ðŁĺĤ\nsk ills\nau tom\nsmar t\nmed ical\nmon y\ne x\ngu ar\ngi ve\npers onal\nven tion\nal li\npre ss\nflo or\nm c\nvictor y\nhi m\nsimp le\nth or\nðŁĩº ðŁĩ\nta il\nlu cky\nale x\nqu ite\nbo t\nssi ons\nchall eng\nc ann\namaz on\nh ell\nb ought\n) :\ned y\nsecre t\nproduc tion\ninde pend\nde fe\nad ded\np r\np ag\nbe d\ngre atest\nwith in\nj ay\nðŁ ¥\nire land\nre ly\ns d\nte xt\ndri ving\npro gram\nspe ed\ncol um\nstr on\nà ©\nfore st\nâ ĸ\nmach ine\nco in\nsc ar\noun t\nbi e\n¡ ï¸ı\npor tra\ncomm on\nwre st\nrecei ved\nkno w\ninve st\npl ans\nac cor\nad op\nter y\nre ali\np p\nk al\nart work\nme an\ngo d\ninste ad\nan ci\nmotiv ation\nas ing\ninspir ation\nup coming\npolit ical\neuro pe\nm ers\nheav y\nðŁij į\nfe bru\nscot land\nou gh\nb t\nbo ss\nsche du\nspe ak\nn ick\nu red\nin o\ne k\nri sk\ntor y\npres ents\nb on\nru g\nst ates\nexhib ition\nil o\nm ill\nbr ought\n: -)\ntou ri\ncom e\noffici ally\nchampi ons\ndo ors\nre p\npo se\nex tra\nk ings\nsoc cer\nsqu ad\napp lic\nat a\nsome times\nt ari\nexcell ent\nðŁĺ ĺ\nstra ight\ncar ol\nri p\nâĢ į\ngra phic\nm ol\nelec tion\nfebru ary\nas ons\nl i\ndi r\nm t\nn ick\nu su\nm rs\ncom ics\ninst itu\ncor por\nv i\nðŁĻ ı\ntu ral\ndi se\nac ci\nwe are\nam ong\nsho pping\nt ill\nwh at\ncha ir\nsp an\nchine se\ninnov ation\njo y\nk it\ncent ury\nob ama\nph ili\nf c\nre ach\nc iti\nul ous\nn on\nd ang\nhapp ening\nbur n\np el\nor ange\nd v\nk ick\ncla im\ning ham\nph y\nno v\npod cast\nwh i\nni ghts\near lier\nbe ar\nla h\nexc iting\nor a\ngi ven\ns lo\nmemor ies\ncontin ues\nproduc t\ngh o\nc d\nkno ws\nðŁİ ī\npubli shed\ndiscu ss\ny ard\ni phone\ntri es\nw all\nfe b\nare n\ntru th\nwin ners\ntu re\nditi onal\nmilit ary\nproble m\nm and\ndo g\nlo ss\nc ric\ncan adi\nve ter\nvilla ge\n" ,\ny r\nun g\ndon ald\nag ing\nbir ds\nsci enti\nle s\nth is\nregi on\ntic al\nitt en\nil a\nðŁĺ İ\nd ad\ndi am\nabo ve\nst ren\nli t\np ir\nla b\nfo cus\nbus y\nd ur\napp ly\ns ma\nauth or\nac i\nexe cu\ndom in\nre la\njack son\nat o\nwash ington\nðŁĻ Į\nk ill\npopu lar\nce ment\nro ad\ne ating\nloc ation\nv ent\nar re\nn an\ncu sto\nadvent ure\nor din\nspor t\nul t\nlo ck\nquesti on\ndri ver\nland sc\non i\nk ins\np d\njor dan\nte red\nk k\na f\nchil d\ns p\njust in\nen i\ns elling\nz o\nwh it\nbo ston\npartic ip\nsig ning\nhapp ened\nhe at\nm am\ndre ams\nlo ws\ngra ph\nthe day\nhead ing\nbr o\nble ssed\nvi c\nve gas\nh d\nin ning\nro man\nand ro\nden ti\nu se\nc it\npro gress\nwrit er\nbo b\nff s\ngro wing\nb ly\naw are\nex am\nsp ent\nbe t\nsc ore\nbey ond\ndo cu\nad el\ns f\ncou ra\ncolla bor\nin c\npriv ate\nbo at\n* *\nz one\np ha\nb ill\nto tal\nplan ning\nto wards\nplac es\npre view\ncre ative\ndam n\nide as\nse ems\npo ten\nsay ing\ndi splay\ns w\na qu\nlou is\nby e\nli l\ne mail\nwe stern\nger many\nell er\nre s\nf ant\nment ary\nde als\nric hard\njer sey\nstren g\nra d\npizz a\nmon d\nw are\nl ac\ng i\nar chi\nc d\nyel low\nrec ently\nre ach\nà ¹\nkitch en\ndesig ned\ntr y\ng al\nrestaur ant\nat ure\nw w\nj as\nl ma\nðŁij Į\npa in\nav o\nmin ute\nsch ol\nther ap\ntic ket\nd ry\njap an\nditi ons\nter ri\nsel ves\nhapp en\nt up\nma g\ncop y\nsh er\nfree dom\nf ile\nspeci ally\ntor onto\nlo ad\ng ary\nre y\nansw er\nlo y\ncau ght\npri ze\nu ne\nfic ation\nni ger\nsy d\ntou ch\nfeat ure\njaz z\nrecor ds\nhim self\ndi sh\nro ber\nspot ted\nma ster\nwa ve\nfin als\nbu ll\nfor um\nal d\nre comm\nch a\na e\nd oo\ninst ru\ntru ly\nl g\nin k\nbro thers\nde st\nj im\nm it\nclo sed\nis on\ntri ed\ns anta\naf fe\nw an\nhor se\ng row\ncamp us\nrel ation\nnati ve\njour n\ngo v\no ct\nk it\nb ound\npart ner\nre ma\ncrow d\n! )\nc alls\nra il\nqu ali\nsolu tion\ncon test\ncon vers\nsn ap\nb ase\nin iti\nta x\ny e\nent repre\nit or\nconstru ction\nfoo d\npresent ed\nn ings\ncli mate\nk m\nmo del\nb j\nblo ck\npresent ation\ndre am\nfi x\nc alling\nbus ine\ncon gress\nunder stand\nwe b\nval ue\nï¸ı âĥ£\nmex ico\nit ely\nki m\nchar ity\nref lec\nbl an\nfl ying\nanal y\nfamil ies\nb and\nreci pe\ncelebr ation\nac cep\nar y\nto t\ng b\nintere sted\ncap tain\nâĻ ¥\nti p\nab sol\nbra z\ninve stig\no logy\nde c\ntru ck\nver ing\nc lear\ndon t\ngo tta\nad vis\nbeg ins\nma ss\nde scri\nblo ck\nk im\ndavi d\nson gs\nmemor ial\nfeat ures\nsu stain\n\' .\ngra b\njo se\nv a\ncon serv\nse ts\nman chester\nfi ghting\nde gre\nag a\nin d\nsle ep\npos ition\nha ir\nsig ns\npol icy\nit o\nal ert\nst am\nsp end\nw y\nabsol ut\nd m\nanim al\nmy ster\nsuccess ful\nproble ms\nro bo\nk ay\ngar den\np d\nmay or\nd ale\nt ol\noff ers\nvis iting\nfriend ly\ntre es\noffic er\naccoun t\nke vin\nðŁij į\ngi ant\ncontin u\ncon su\ntr act\nn fl\nðŁĺ Ĭ\nh q\nb ility\na ar\ndis ney\nte en\non ed\nwh ite\ntra iler\nde dic\nal one\nabsolut ely\ndig ital\nwilli am\nin ation\ns wa\ne e\nenti re\nger man\nro ll\nh its\nco st\nst ay\nth a\nali ve\naccor ding\nco t\nliter ally\nher it\nre ti\nhaha ha\nexper i\nli kes\ng t\nste el\n__ __\nch air\nchristi an\nto wer\ndiffe rence\nm d\ntre ss\nmi d\nprin ce\nafric an\nfe der\nfoo t\ncar ri\nser ved\nr ice\nsh all\nfeat ured\nck er\nrec ru\npo e\nsen se\nni fic\ncom edy\ncont ent\nf at\npo sted\ncon tribu\ntim ate\nli ver\nmb le\ninter net\nag e\neurope an\ncl ing\ngla d\nff ic\nsc o\nak es\nel le\nter min\nton y\np ale\ncol our\nseri ous\npat ri\nmovi es\nb m\nprofessi onal\nad o\nal u\nbr inging\nf alls\nisra el\nter m\nlangu age\nbro ok\nman n\ncommun ic\ncan not\nac ti\np he\ny an\nentrepre ne\ntur key\nlog ical\nlon g\nar m\nur s\nwork ers\ning ly\ngg s\nri c\ntu al\nrecei ve\nop ens\nge ar\nsoci al\nfe et\nc king\nad ver\nfin an\nfe els\nsp la\nh r\nea ster\nbra in\nã ģ\nfi g\nle dge\nne arly\nprote ct\nma ssive\ne th\naw a\nðŁĺ ģ\ny rs\naware ness\ndefin itely\nk n\nimag ine\nk u\nsyste ms\nðŁij ı\nf as\nli k\nprovi de\nam o\ndisco ver\ninf lu\nma ker\ng az\nfit ness\nstre et\ner s\nte d\nw c\nys is\npos itive\nhel ped\nque st\nandre w\nbra d\nb in\nhang ing\nl ing\nbri ght\nse ction\nma ss\nðŁĻ Į\nfollow ers\nho sting\ntem por\nfla g\na ve\nlet ter\nk ur\nre qui\nof ten\ncry p\nsu ff\nâļ ½\nrussi an\ntreat ment\nal le\nha y\nl an\nkeep ing\nhol y\npower ful\npre dic\nfun d\ne specially\nwindo w\nje wel\nil y\nðŁĴ ľ\ngener ation\napp a\nseri ously\no d\nðŁĺĤðŁĺĤ ðŁĺĤ\ncer ti\niri sh\nðŁij Į\nmi ami\nbe th\nv ity\nse cu\nche f\ncri me\ngraph y\nma x\narti sts\nre volu\ngu ard\nspee ch\nu c\nupd ates\nfac es\nst ant\nchang ed\nrepor ts\nlow er\npe ar\nn c\nk il\nloo ked\nspe aker\ns f\nre spect\nok ay\noce an\ns itting\narchitec ture\ntra il\nse at\ni ra\nle g\njapan ese\nd am\nu lar\nsw im\npolit ics\nfinan cial\nol d\nmou th\nat temp\nde stin\nfi shing\natten tion\nme m\nchang es\ndeci ded\nreli gi\ng in\nc av\nz z\nad am\nma c\nwr ite\nbeg in\nsc ul\nal ter\nis s\nath on\nimag es\nm oo\njo ined\nðŁĺ ī\nâŀ ¡ï¸ı\npas sed\nmu sli\nh ir\nlar gest\ncam er\ncom ic\ngh ted\nrug by\nbur gh\ngg ing\nte sting\npre par\nlau gh\nal ed\nimpro ve\nbeli ev\nadv ice\nsha res\nhe art\ntur ning\ns b\nt el\ncaf e\nn es\ndani el\npat ter\nt z\nse tt\npar k\nc and\nst ick\nhapp ens\nbri an\nne west\ne pic\nad or\nki es\nwar ning\nanim als\ncusto m\nar c\ndi an\ngol d\ncor e\nt f\nc ity\npan ts\nre ality\ncon fi\nin ju\nfo x\ngu il\nk new\nâĺ º\ncor rec\nitu de\nd den\n. #\nre duc\npas s\nf on\ny a\now ner\nre turns\nn c\ne ast\nap ol\nin sur\nth o\nsi m\njuni or\nbe e\nang el\natt le\nelec tric\nhor ror\ncra sh\ne ye\npat h\nsou thern\nemplo ye\nge o\nt an\nha z\nr ally\nðŁı »\nproper ty\nwas n\nenjo yed\ngre y\ng as\nbre w\nnor thern\nhol ding\ng p\nta ke\nch art\nly n\ndr ama\nz o\npa id\nthrow back\ncu p\ndiscu ssion\ndown town\nw ill\nle w\nb is\nt ary\nbre ad\nup on\nr ate\nteach ers\nit ation\nanc ed\ncy cle\nchoo se\nd c\nir an\nco w\nda ve\nra ise\nprin cess\nfa ith\n- >\nindu stri\nsp ain\nguit ar\nfac ts\nm n\nsp en\ncour te\ngo tt\nprojec ts\nau di\no sc\npe ter\ns and\nintere st\nhapp iness\nven ue\nsol di\nsurpri se\npoten tial\nper io\ncustom er\ni i\ng ni\nmanu fac\ne co\nbro ken\nsing er\nvel s\nwal es\nhu s\nin j\nf our\ntal ent\nd ying\nmat the\nfil m\njo ining\ns ell\nj ar\nlma o\nsur ger\nbb c\nsour ces\nau stin\nni k\nchar les\nf am\nprin ci\nange l\ncas h\nlo t\no red\npla ys\npl ate\ndon e\nmemor y\nbr ings\nn ba\nsolu tions\nteach ing\ngr ace\ncir cu\nhel ps\nfoun der\nmar y\nexpl ore\nde cor\npar ts\nch o\ninte gr\nha u\nis es\npu tting\nin er\nr it\nv y\nmic hel\nblu es\nevery day\nfor ms\nbi o\nye ar\np in\nt ter\nspr ing\n) )\npo t\nal ing\nperform ing\nsh an\nplan et\nmus ical\nhead s\nit alian\nstru gg\nâĢį âĻ\nw ings\npu mp\nh h\ntr ou\na id\npri me\near th\npa int\nmon t\nam y\nbb c\nfab ulous\nfru it\nandro id\nbour ne\ncere mony\nenti al\n? ?\ndeb ate\non ing\ndra ft\nsol ar\nt x\nj am\ncor n\n!! !!!\nbro o\nmil k\npo sed\no hi\nmo vement\nb ren\npart ner\np g\net te\nar ies\nsh out\nn g\nleav ing\nt ells\nsen s\nta ste\nkel ly\nwor l\ngy m\nric h\ne gy\npi d\nma s\nâ Ĥ\ncourte sy\nfran k\nincre ase\nwr itten\npp ers\nre l\nha i\ns as\ns ound\ntt i\nw ich\nri ver\n.. ."\na g\nfel low\nro me\nsm all\ngen cy\nic an\nlux ury\npro of\nme t\nwild life\nmom ents\nra ther\ncor ner\ncom pe\ncanadi an\nlik ely\ntherap y\nli am\neconom ic\nindi e\nrou te\nfi ght\nho pe\nse tting\nant ly\ncro ss\nfant asy\nde e\nsket ch\ncomp li\nym i\nru les\nengine ering\nfig ure\nro w\n. ,\nf w\nsyd ney\nw ou\nt ation\ndre w\nus es\nthe re\nsp read\nstruc ture\npat rick\nappa rently\nro s\nh ills\nw we\nann y\ncom mission\ndi v\nf ying\ncon sul\nanal ysis\nex i\nten nis\nvehic le\nðŁĺŃ ðŁĺŃ\nas s\nhigh ly\nop ened\nb ann\nðŁĴ Ļ\nmp h\nwi shing\nv or\nfi f\ngive away\nr r\nra y\nje ss\ng at\nic ymi\nx it\nhigh est\nyor k\npi e\ninvol ved\nhigh er\nri e\nmal ay\nint elli\ndesp ite\nche e\nsar ah\nbe an\nreco gni\nar sen\ntal ented\npas sion\nic h\nab c\nlead s\ndise ase\nv is\nse c\npre senting\nm illi\nhol e\nsho ts\nde part\nsurger y\ngov t\nb in\ndu al\ne vi\nlon ger\nev ol\nscre en\nportra it\net c\nlo se\nch at\np en\np i\nom a\ns ick\ner c\ncompan ies\nen try\nplan e\ngr y\nven e\nliver pool\npremi ere\nsha red\na red\nfil ms\nir a\nholi days\ncric ket\nici an\nv ing\n. )\nul timate\ndi vision\ncon duc\nse pt\nfor ces\nmon t\ns mart\ndisa pp\nsun shine\nin d\nb less\nma de\ncol ors\nfran k\nir on\nbott le\ns go\nm ood\nj ason\ner ic\nbir th\nte en\nrespon se\ntar get\nstate ment\nfe ar\nth el\nal um\nar ab\nbl in\ndirec tion\nste ps\ner ial\nwor ked\nat l\nðŁĴ ķ\nfel t\npol i\nscen es\nhom es\nb ell\ne at\nate ful\nt in\nl ace\nfol ks\np se\nan n\nwis dom\nfa v\nbut ter\ns r\nare as\nsm oo\nbi z\ndg es\napp o\nmo re\nthe m\neffe ct\nwindo ws\nsun ny\ncap ital\ntot ally\nc ities\ngr ant\nmb ers\ns low\nau tu\nil ities\nw ro\nri sing\nst ics\nviol ence\ni gh\nqu ot\nh it\nt c\nherit age\nbu ff\nne s\nz ar\nden tial\nex ac\ned ge\nde ep\naren a\nbe came\nbenef its\nmar ks\nmb er\na z\nam es\npre ci\ndra gon\nre g\nd ings\ndo s\nðŁĴ ª\nn el\ns ity\nme al\ndi st\nleg end\npur chase\npic al\nst ick\nf at\ndu ba\nprofe ss\ncar to\npro f\ncoun tries\nrespon si\nse qu\nfa b\ntribu te\nhon ored\nprac tic\npur ple\nan ton\npa red\nt ough\nsumm er\nenviron ment\ns ons\nðŁĻ ı\nm ps\ngi es\nher oes\nt elling\nhen ry\nf en\nknow ledge\nĢ ï¸ı\nf r\nne g\nu re\nac king\nhear ts\ns oo\nhol lywood\nju mp\nsau ce\nschedu le\ntur n\nyo ga\ncre ating\nc ket\ncre ek\nâ Ń\ncustom ers\nma dri\ngu l\nasse mb\nmoun t\nc ell\nto p\nst al\ndav is\nt wi\nsig n\npremi er\niti ons\nhe aring\nun k\npati ents\napp ear\nheav en\nal ty\ndoc tor\na e\nplat form\nje ff\nðŁĵ ·\nregi onal\nbi d\nbox ing\nex ten\nor ity\na w\nw ise\nil le\nsever al\nbi e\ns itu\nsy ria\nâľ ħ\nremin der\nenter tain\nli on\npart ners\nin n\nph ar\nf au\npl s\nexpe cted\nsug ar\ndeci sion\ns b\nch ron\nassoci ation\nleav es\nvis ited\nsh ap\nðŁĴ ĸ\nfur ther\nh ann\nw i\nrun s\nl er\nfun ding\nfil led\n.. ....\ntin y\nhan g\nor g\nco ol\nse min\nðŁı Ĩ\nspon s\nnav y\nsa int\ndru g\nd al\nr oun\nco vered\ntra ditional\ninvest ment\nde te\nal ism\nf low\nn is\nsun rise\nfe at\nf ted\nwe ird\nje re\nve gan\nmedic ine\nan o\nac cu\ndeli very\ntemp le\nchang ing\nwil son\nphili pp\nre fe\nn d\nis er\ng ay\nr and\nati ves\nt ely\np and\nintelli g\ng are\nam bas\nde mon\ncommit tee\nstrate gy\nrefu ge\nbud get\nprote c\npi er\nex press\nnom in\neconom y\nal low\nic on\ngal ax\no h\nindi vi\ndem and\nvir gin\nlu ke\nali sts\nman i\ns mi\nju dge\nent y\nmic hi\nresul t\nam ed\nspe aks\n\' ,\nhou ston\nsh in\nb ing\nfl y\nch em\nau to\nv as\nge t\nar m\nthank s\nd in\ngan g\nx x\nsi on\nloc ated\np l\njo sh\nin fo\njo ins\nadver ti\not d\nel d\nsi e\nre asons\nv ent\nðŁĩºðŁĩ ¸\nâ ł\nconvers ation\nstu di\nðŁĶ¥ ðŁĶ¥\ngo s\ns ounds\nun it\nmu sc\nge l\nack ed\npac i\nco s\nde re\nu u\na o\nla m\ninspir ing\nar ms\ntw are\nmat ters\nad dic\ndu de\nex t\ncri sis\nb ath\nme et\nsing h\nexpe ct\ndel hi\nresc ue\nwor st\nau g\nshi pping\nser ving\nst o\ndar k\nac es\nhistor ic\nlandsc ape\ndesig ner\nb illion\ngr ateful\nwa ke\ne ve\nm iller\nhou sing\ndy nam\nis co\nbe ha\nsh op\npr ou\ne as\na sia\ne ding\nk on\ndepart ment\naw ar\nmar ine\nin ci\nphotograph er\nta pe\nlo go\nr ings\nd it\n-- --\nvin yl\nw c\nvo ting\nse ven\nambas sad\ndal las\nt u\ncom ment\nk ra\nb les\nw ag\nu d\nau dio\nstri ke\noffici al\no ts\nme tho\nto ols\nra di\nal an\nhun t\nwat ched\na ke\nfa ke\ndrin king\nmer ry\nm l\nb day\nri o\nni ke\nc ant\nre pe\nco stu\nmur der\nak ers\nch ers\nou ts\nbeg inning\nso s\nad es\nn in\nnot es\nwro te\nsol o\nc i\nli ghting\nur ban\nbre xit\natt end\nshir ts\npla yo\nac tress\npl ic\nstand ard\nquot es\npar ade\nanci ent\n ©\ntur ing\nre e\npri mary\nfla sh\nciti z\nmat es\nste in\nz i\nclin ton\nsk in\ngen e\nhu m\ng ar\nt le\ny i\nfo cu\nde an\npl ants\ncy ber\nb u\nom e\nho p\nad dress\nti x\ngi fts\nrelation ship\nsub scri\nfe ed\nexac tly\nhaw ks\nex o\nstre ss\ns n\narre sted\nan e\nsof tware\nz ero\nthe me\nmu mb\nim migr\nmi a\nmake up\nple asure\nuni vers\nhar b\neng ine\nap er\nr in\nbr a\ninstitu te\nle ather\nal th\nsing ing\nco s\ngh ty\nme as\nst ic\nsi de\ninsur ance\nco t\npit ch\nmoun tains\ncri min\nsu pre\nvalent ine\nat er\nwou ldn\nsc ale\nrel ated\nre gar\nstar tup\npack ed\nmi ke\nweek ly\np ts\ncoun t\nha r\ngott en\nmin d\nber lin\ncon ditions\nswit ch\ncor n\nsa ve\ng li\nemer gency\ntun ed\nsto ck\ndiscu ssing\nevery body\ns day\nwhe ther\nwrest ling\nec es\ngen der\nch en\nðŁij Ģ\nmadri d\nmar athon\ne gg\ni er\nth x\nas king\nkore a\nwol f\nay a\ng m\ng au\nat ory\nv r\ngra ss\nk illing\nb ble\nur o\nun i\ne th\nsh ore\nth en\nre ale\nbot tom\nex erc\nk ar\nor ies\nad ri\nsan ds\nse x\n. \'\nvolunte ers\nper form\npar liam\ninclu de\ndeli ghted\nexecu tive\nfu el\nkis s\nã ħ\nchar ge\nh u\nca kes\nve t\ng lu\nagre e\npr ices\nn au\nh l\ng ru\nra j\nstreng th\nb ic\nsp ending\nal es\nav en\nb last\n: (\nyo f\nnor mal\nsi x\nqu ick\nse a\nd aw\nmee ts\nlo vers\nupd ated\npo tat\ncomple ted\ncoo k\nopportun ities\np ure\norgan ic\ntem per\nc am\navo id\npar king\nduba i\nand o\ndi stri\nto y\ncomple tely\ndon ald\ntri al\nbas s\nb oun\nback ground\nv as\nmar vel\nlu m\nru s\nt ool\ncom missi\nthrow back\nfin ding\nis lam\n! ?\nst op\ne vil\nor al\nresi dents\ni denti\no ak\nðŁİ ¶\nl il\nspan ish\nchap ter\nsto pped\ndirec t\nho sted\npic ked\nlab our\nlew is\ndefen se\nà ®\nhealth care\nwh is\nmat h\npe ak\nra ised\nfi x\nbu ll\nth ir\nchel sea\nfol k\ntr e\ncan di\npau l\nei ther\nad am\npoe try\njewel ry\nðŁ ¦\npr ay\nØ §\ng c\no z\nwi shes\nfore ign\nsun g\nlear ned\nen e\nn ing\nmicha el\nillu stration\nlegend ary\nw av\nb au\nðŁļ ¨\ncal end\nstre ets\nâ Ĩ\nmon ster\nbu ck\ng r\nscho ol\nba th\nwa ste\nne ck\nha wa\nbe ach\nre plac\njec t\non er\nfac tory\ncoun t\nðŁĵ ¸\nmor gan\nder ing\nse an\nsteph en\nde p\nno vel\nvide os\nic al\npress ure\narsen al\nex pre\nir s\ntren ding\nss a\nfla sh\nre sear\nthr ough\nprofess or\nscul p\nto s\ngg ed\nmm a\nbe e\na pe\nhun ter\nam i\nhe i\npla stic\nbu cks\nuni verse\nle gen\nniger ia\nple ased\nri s\nthin ks\nautu mn\ni ds\nd is\nanth ony\nðŁı ½\nak ed\ngla sses\nfin ance\nz er\nk as\ncon tract\nnu mbers\nsh aw\npartner ship\nt il\nlaun ched\ns al\nvictor ia\ntheat er\nusu al\nnam es\nperio d\neli za\ni th\nbar cel\nro cks\nbag s\nmat e\ndistri bu\nj on\ndi ffic\nali zed\ncur ren\nsco red\nb ha\ndu blin\nro se\nin ted\nsoli d\nbeha vi\nwal ker\nsimp ly\ngarden s\nhead ed\nin i\nohi o\nwe ap\nf o\ngl en\ne state\nran dom\nth under\nthr u\nk ill\njac ket\nit i\nentertain ment\nthanks giving\nent al\nen coura\nel o\na ther\ntan k\nhigh lights\nf ting\nru le\nmodel s\nbor der\nbj p\nhus band\nin done\nken ya\nbe ars\nal o\nn inten\npi x\nstr o\nor ders\nsal ad\nro ads\nn or\nl ation\nsop hi\nðŁı ¼\npi eces\nb one\nmin s\ninclu des\nnu tr\nphi l\ns ent\nfun dra\nga in\nbor ough\nn ad\nmon day\nactiv ity\nit ems\nbe coming\nken ne\nde tro\ncar di\ngue sts\nu x\nworld wide\nsever e\nnew s\nthank ful\nfic tion\nve ge\nm all\nsi an\ner al\ninj ury\nle e\nmen u\ndanc ing\nscot ti\nexam ple\n( #\nna i\nstudi os\nba i\nðŁĴ Ľ\nj av\ndiam ond\nvin ce\nric k\nprote ction\nlin col\ncham ps\nappro ach\nd ar\nm ile\nclou ds\nje ff\nin fin\nl ers\np les\npe ace\ngo p\nâĻ ¡\ntech n\nstr a\na verage\nef fort\nintroduc ing\ndi versity\naustr alian\nam p\nboo st\ns ke\npati ent\nappreci ate\nici ans\npu r\nf ell\nwoo ds\nillu str\nðŁ ĸ\nag ency\nac tions\nbrit ain\nunder way\nse attle\nel and\nag o\nf ill\nstre aming\npro test\nchalleng es\nky o\net sy\ncoo king\nexper t\nru ss\nrain bow\ncommer cial\nsp in\nbe ats\nc ry\nval u\nel i\nth row\ngr ams\nle vels\nmichi gan\nc ad\nador able\nconst itu\nw s\npu b\nmid night\nth at\nnet fli\nbraz il\ndie go\nregu lar\njo y\nâĤ ¬\nli qu\nea stern\nk ni\nfl at\nn p\nbro wn\nw er\nse y\ntt ers\nac ting\nv anc\ncy cling\nprogram me\nra w\ncomple x\ntat too\nthrowback thursday\nse ssions\nro oms\nsi ght\nspeci es\nbom b\nlau gh\nke eps\nmo on\noffic ers\ncon ver\nt r\nha sh\nt ack\nri ous\nad ap\na j\nreco gn\nex po\nsug ge\nconfir med\nrol ling\ndre ssing\nic t\nfri day\nph ones\nri dge\ncon cept\nro y\nke ys\nef for\nc ate\nk ne\nev en\nl ay\ncommun ities\nmo d\nn az\nevery where\nal ab\nbit coin\nban ks\nout door\nfeder al\nsto res\nh p\nc al\nm ely\nsig nific\nbe ar\nre public\nclo ser\nal lah\npic k\nx d\npal ace\nch ill\nb am\ner ous\nun a\nal len\nout standing\nolym pic\nsupp ly\nfi gu\nv au\nl p\nchar lie\nun es\n> >>\nlegen ds\nici al\nco ast\nbenef it\nmul ti\nf its\nfar mers\nam ount\nsi sters\nhar ve\nhon ey\nque en\nb ers\npl ann\nâŃ IJ\nm u\nbarcel ona\nal ber\nstat us\nre main\nex tra\nc andy\nvi ous\nâľ Į\no v\nwarri ors\n-- >\nju mp\nam ar\nx mas\nstu dies\ni ors\nk or\ndon ate\npre p\nfi sh\nim a\npain ted\nad mini\nco splay\nspor ts\ndro ps\nfi ghter\nevi dence\nðŁĴ ª\nla ke\nro b\ncine ma\npro file\nà ±\nstan ds\nleg acy\nsh ape\nro of\nci vil\ni ans\nsy l\nsh am\nvo ted\nre tail\nph illi\nli sted\ndu ty\nn b\nth es\nf are\nau ction\nffici al\nstor ms\nd p\nl oun\nsh ops\nal y\nani me\nmulti ple\nðŁĺį ðŁĺį\npsy cho\nje an\nap art\ncandi date\ngg y\ncon f\njose ph\nw ick\nme at\nfr ame\nc l\nfor got\nph y\nf ing\nli ed\nre p\nse ed\nf all\nu fc\nnu t\nlin d\nmo de\nfiel ds\nen ce\ns ley\nðŁ¤ Ķ\nch ill\nfollow ed\nannoun ces\ncor ru\ntro phy\nthem selves\nac le\nal du\nk ong\nl on\ns v\nbro ke\nander son\nta i\nstor y\ntempor ary\nactiv ities\nk ati\nari z\ncry stal\nspo ke\nextre mely\ntra ding\nðŁĴ ļ\nà ¼\nin ch\ned in\nout fit\nequ ip\nma di\nform ed\nbe ef\npo p\nti ger\nthis day\nti red\nneigh b\nre tro\nis a\nun t\nt as\nkan sas\nde st\nsecon ds\nta y\nhur ric\no u\ngalax y\ndad dy\nbro w\nbur ger\nen ced\nde sk\nac cur\nsecre tary\nel ite\nk ab\nch in\ntouri sm\nbud dy\nici de\ndre ssed\nu d\nvac ation\nche ers\ncom for\ncharac ters\nj et\nbu ying\nl ins\nn ap\nreale state\nli e\naf c\ni ii\nf ame\nn r\nb at\nag ent\nma kers\nâĢ ¼\nsec tor\nop ti\nle on\ndi et\npra yer\nhi p\nmi r\nle x\nbr y\nan a\npas sing\nw en\nreco very\nak i\npo pul\nres ort\nmar ia\nstu ck\nread s\nti er\nperfe c\nnetfli x\np oo\ncham p\no c\nre duce\nwe red\ncomm ents\ncla im\nacci dent\ns ag\nh ack\nsal t\nkin da\nk iller\ni os\nz y\nex change\nlec ture\neng er\nic king\nt au\nreve als\npri son\nz om\ngh an\nu l\njour nal\ni ot\ntr in\njon a\ngovern or\ncap e\nquar ter\nspec tive\nimpre ssive\nbab ies\nt x\nm ill\no y\nhar ri\njo int\nsu e\ncollabor ation\ntren d\nrevolu tion\nre new\nalum ni\nge tt\nsh ell\nsun day\nent u\nni c\ndonald trump\nblock chain\npaci fic\nexpla ins\nsp y\nad voc\npar adi\nto f\nstar ring\np av\nfe ed\nbr ac\nsmo ke\nham p\ny am\nto kyo\nsi mon\nd h\ne ffici\nphys ical\nn j\nell i\ns low\ngradu ate\nameric ans\nti fy\nf red\nap ore\nfin ds\nrob in\nwe t\nnot ice\nse mi\nun ve\nk om\npil ot\nscre ening\nda ily\nðŁĴ Ĺ\nroy al\nsp a\nvo tes\nn ag\nwh ate\natt ending\nexper im\nad dition\nk ate\nsto l\nm ali\nfoo t\nchri st\nch an\nde e\nlic en\nglo bal\nmo ore\nti a\nbri gh\nmyster y\ny ay\nâĿ¤ï¸ı âĿ¤ï¸ı\ncre ati\nme chan\nclo ck\ndi c\nâĢ Ķ\npp er\nal ph\nthrough out\nal low\nre sources\nselec tion\nham il\nbb q\naa aa\nvirgin ia\ndis ney\nen g\nso red\ndrin ks\nf ancy\nconsi der\nend a\njan e\nhand made\ndu l\non tari\ni us\ns ville\ncolor ado\nwhate ver\nwhe el\npromis e\nne ver\ndesig ns\nab ly\nsex ual\nvanc ou\nat i\ncon vention\ncul tural\nsing apore\npro mo\nload ed\ngla sgo\npp l\nn oo\nke e\nste m\nmen tion\ni do\ncru ise\nri ding\nbe comes\nbe y\nâļ½ ï¸ı\ntw in\ndedic ated\nna sh\nde si\nwork out\njen ni\ni v\ngrou ps\nrela x\npho eni\nli ft\nmix ed\nm ck\np c\nmu st\nme tro\nci es\ny ar\na im\nang er\ni e\nrec y\nmarri ed\ndro pped\neng ag\nle st\nambassad or\nop h\nde s\nw ick\nassi stant\nnat ur\nfa il\nl td\nshor t\nk ap\nsha w\nbi gger\nrema ins\ncrit ical\nsur vey\nco verage\ner son\nwin d\nn b\nbil ly\nlet es\nac ts\njim my\nat lan\nal and\nt c\nimport ance\ndam age\nf g\nstor age\ntw t\nbon d\nbal ance\ncr ying\npu ppy\nvo te\npu sh\nðŁĴ ľ\npol y\nme l\nlon don\nterr ori\neffec tive\ncorpor ate\natl anta\njac o\nnas a\ngre ek\nsen ate\ni sh\nev a\nintellig ence\neffor ts\nal co\nk un\nh all\ndi ag\nclaim s\nfir st\nh b\nba e\nv ul\npu ll\n °\nse par\nspe ed\nvic ti\non thisday\naudi ence\nr ates\nte ach\nfil ming\nbu sh\nson g\ny um\nbr un\nra ine\naw a\npar ks\nð Ŀ\nra bb\nra ch\nra id\nreach ed\nra il\nmo ves\nselec ted\nfr i\nra ising\nom y\nst ones\nsu k\nfranc isco\ncas es\ncap it\ncon fu\nw tf\npo ke\nequip ment\ngre g\ness ential\noff ering\nne x\npi es\nbe c\ncre ation\nchair man\ncro wn\nw al\njohn ny\nshi ft\nne ck\nban g\nbir d\nðŁĺ ı\ndu ck\nre serve\nde pu\nma sters\nover all\nno tic\nju ice\nsne ak\nche er\ncla sses\neag les\nn ca\ncar pet\nci vil\ncoach es\nhar ris\nu ps\nb alls\ndec or\nmar tin\nro s\nv ice\nannoun cement\nwho se\nti gers\nste red\nc ts\ndr am\nste el\nyoun g\ninst all\nsupp o\nrecor ding\nde ck\nse ats\nl der\nang le\nbo t\nsty les\nelec tions\nfor tun\nn ab\nbut ter\nari an\nka sh\nin ner\nou red\nbe ast\nwe i\nic onic\nexper ts\nne cess\nb eng\njam es\nli a\ngre ece\nðŁĵ ·\nðŁĺ ģ\ngood bye\nm itch\ntw ice\nmumb ai\nste am\nru sh\nmed al\nne tt\nfashi on\nt ar\nr s\nsav ing\nric ul\nl m\nsleep ing\nbrook lyn\nmis s\nsen ding\ndisco vered\nsp here\nof theday\nk icks\nmissi ons\nw right\ner n\nght ly\ni ous\nmel bourne\nstar tu\nmo ved\ncar ry\nd ak\nag ues\nbel gi\ne ma\nway ne\ndo t\ner ie\npe l\nit unes\nmatthe w\nno body\nest ab\ncal m\nwin ds\nlu c\nprep are\ntren ds\nexerc ise\nadv ant\nðŁĴ ¯\nathle tics\napp s\nc tions\nadv ance\nlaun ches\nlitt le\nreal donaldtrump\neliza beth\ncarol ina\nhu b\nhi dden\nn w\nus er\npol l\ngreat er\nmo st\nf ed\np at\nlife style\ns ati\nsco res\nmarri age\nl r\naven ue\nde serve\nri f\nðŁ Ĺ\nwat ch\nchampion ships\ngr ay\nen ni\ncot ton\ng om\nwhe re\npack age\nsu m\nab solu\nnew ly\nfoo ds\nty ler\nassemb ly\nmusli m\nban k\nre memb\nop tions\nproduc er\nland o\nfun ds\nu pper\nshad ow\npro gre\nco p\ning e\nleg s\ndetro it\nhill ary\njo se\ngi ants\nsou p\nsustain able\nt us\nclo thes\nroc king\nn z\nmin ne\nmat eri\nbru ce\near t\nca sting\nindepend ent\nthou sands\nta h\nde cl\nveter ans\nli ons\nwra p\nâĢ ¦\nde ss\nbl ing\nst ine\ne ggs\no on\nclo sing\nz ay\nat t\nbac on\nfa il\nariz ona\nde pre\ngho st\nnew sp\nw ers\nvi p\nli ked\nid ent\nvolunte er\nad ult\npu pp\ncir cle\nmat erial\ndegre e\ngro wn\nboo m\ncalend ar\nsu r\nvie wing\nath letes\nch and\nre ll\nasi an\nen tr\nvol ley\nvicti ms\nbo dy\nm ama\ntrans fer\nge ek\nin dic\nsav ed\nma i\ng ent\nit s\nloun ge\nk ol\nthe ory\nsitu ation\nis lands\nar th\nz oo\nfloo d\nvi ously\nshow ed\nparliam ent\nch ev\nel ine\nat trac\nab ad\nta il\nh rs\nlu s\npor tu\ngor y\nprovi des\nto ys\nde ath\nin fe\nan ce\ng le\nli am\nlo ver\nhu d\ndv d\nreve aled\ng w\nre ment\nca the\nl ying\nra dio\nder by\nstor s\nche mi\nhosp it\nâľ ¨\n\' :\nilo ve\nle mon\nre public\ns ni\nne ss\ndo or\nre action\npre gn\nfla v\nschol ar\nspo tify\nis ation\nvis ual\naw are\nspon sored\njo ke\nless ons\nleg is\nlo ck\nsi mil\nðŁĺ ĭ\nkin d\nla y\nma h\nho ping\nvancou ver\nas er\nclean ing\ngal a\nthre at\nla p\nach e\nro mance\nex pen\nre post\nz am\ne pi\nmir ror\no ak\nad ul\nbat man\ns lu\nl c\nvie wed\nre views\nd ates\nindone sia\nacti vi\noff en\nlea f\ni si\nag ricul\ncostu me\ns ites\nspir itu\nappear ance\nir y\nst air\napplic ation\nspec tac\nic ity\nski es\nhand le\npun k\nparadi se\nt n\nde al\nprovi ding\ndo c\nrecei ving\nbre w\nmicro soft\nà ¶\nfer r\nme tro\nth ail\ny um\ncar ter\nà ¡\ngent le\nbre aks\ncoo per\nshow case\ncu tting\negy pt\nbab y\nsemin ar\ngl ori\nss on\nfa ve\nre hear\nlo tte\nla dy\nal as\npre p\ndeli vered\nnu clear\nir o\nengag ement\nat ta\ncon ven\nz an\ngl ory\nhol ds\nbusine sses\nstr ange\nsch e\nit self\ngra d\nmar kets\nf alling\nst ats\nge on\nbu dd\nli s\nshe et\nthi si\nco lo\ndeser t\nregi stration\nig n\nexpla in\ninter ior\nla ws\nwrit ers\nspr ings\nk r\nfri ed\nblo om\ninf ra\na o\ncre d\npa st\nline up\nbo o\nbre a\nboo ts\ncelebr ity\natt acks\nbro ok\nev es\nex cu\ncher ry\noo p\nfas cin\nboy friend\nse as\nn ine\neffec ts\npo wered\nk ha\nðŁĺ Ģ\nsh out\ncon dition\ni j\nher o\nenter pri\nwin ter\napplic ations\nsho e\ng el\nbatt le\npro grams\nw art\nðŁĴ ¥\nra p\nho l\ndang erous\ndi a\ncoun ter\nric s\ni or\nk night\nco at\nemo tional\nat ures\nd as\nwhe el\nfore cast\ntran sport\nglasgo w\nking dom\nprepar ing\nim medi\nff in\nawar ded\nprin ting\nro man\nfight ers\nany more\nbel t\np ine\nwin e\nx i\nemploye es\nlogi es\nal led\nde mo\nbirth day\nange les\nlo g\ndri vers\nneck lace\nk ath\ns it\nathle te\nef s\ns burg\npur pose\nresi stance\nrele ases\nt is\nvari ous\ndeli ver\nch al\ns anc\nopp o\ncra w\nneu ro\ndr a\nsuppor ters\nsna p\ndiffic ult\nswe ar\nlogi st\npa th\nattemp t\nà ¥\nswim ming\nste ve\nhur t\ninclu ded\nb ap\nwa re\nðŁĴ ĭ\nend ers\nja ke\nle eds\ncli mb\nl b\nim ple\nli sa\nclo thing\nðŁĺ İ\nd t\ncom pla\nsw ing\nstra w\nv als\nk le\nus ers\nstor m\ncu ts\nontari o\np an\nhand some\ni ow\nar gu\nchec king\nscotti sh\nĶ ï¸ı\nsi er\nem ma\npo d\npatter n\nde sh\nen h\ned ward\nt ing\nk h\nhal f\nlincol n\nmo ther\nal leg\nr c\nvolley ball\nd n\ng ay\nall y\nle ton\ngro ve\nl oud\nadv anced\nre spec\ncli ent\nsupre me\nthail and\nho w\ngi g\nto i\ndo t\ndol lar\nðŁij ĩ\np it\nr b\nh n\nproduc ed\ngg ers\nâĨ Ĵ\nml b\ncan vas\nfin eart\nus d\nin the\np son\nactu al\ns l\nt b\nip ad\nen sure\nu mb\nw d\nsk a\nmar s\nk end\nf eli\nth ing\ncount down\nabsolu te\nr out\ndra l\np y\ninju red\nmin t\nhun ting\nmm er\ns age\nli gh\nac ity\nex pan\nmur ray\nar o\nsec ure\nfour th\neag le\nreli ef\nst akes\nindustri al\nclar k\nunder standing\nsee m\npl enty\nsil ver\ncla u\nthre at\nsa il\npro duce\nab str\nis is\nb r\neng ers\nwor ry\nbie ber\ns j\njust in\nreali ze\nky le\nesp n\nfil ter\ns ch\nty pes\ngame dev\nd ing\ntwit ter\nsoldi ers\np om\ncar bon\ny ards\nchild hood\nri ed\nke l\nele ph\nt ons\nkey note\nqui et\nwi re\npo sting\nis sa\nrepre senting\nbac ks\nalex ander\ncelebr ates\nta ining\n| |\nch or\nesc ape\npe ek\nti ves\nfiel d\nssi e\nim pac\nspons or\nr c\nwe dd\ncann ab\nsi des\ntrac ks\ncom par\ncon trac\ntechn ical\nbi ble\nexpl oring\nsh are\ntra v\nn ate\nill o\nsc ru\nm ingham\ngun s\nof the\nsh ame\nse es\nca tho\nac cess\nce l\nrepor ted\n »\nmari o\np ad\nhope fully\nou se\ny on\ndisapp o\nol o\np itt\npa c\nga p\ncru sh\ns g\nk le\nge m\nemp ire\ndir ty\na is\navi ation\nze aland\nfac ing\nhigh way\nd anny\nspi der\not ta\nðŁĺ Ħ\nw y\ncol ours\nin fl\nco sts\nolym pics\nau s\nh m\nho ward\npas ses\nlau ren\nmu sh\nop in\nr ho\ndisc ount\noper ation\nem ily\nmm m\ncham ber\nd il\nto yo\nshi p\nsam u\npic tured\nun ic\npo l\nkeep er\ncarto on\nst en\nig nor\nn ations\nn l\nta sting\ndeta il\noffici als\nmo tor\nfranc is\ned itor\nðŁij ĩ\npe ts\nrang ers\nt g\nr n\nw ri\nnic hol\ni se\nspo ts\nani e\nchec k\ntri ple\nku mar\nspe akers\nic ing\npre pared\nab use\nfriend ship\nmon th\nswi m\nair e\nsc ent\nhamil ton\nindi an\nj es\nyum my\nte ars\nda wn\ni zed\nworl ds\nðŁ ķ\nb illi\nst one\nn hs\nba sic\np or\nst le\nir on\nol der\ncle vel\ne ing\nðŁĺįðŁĺį ðŁĺį\nprin ts\nfir m\nair craft\nfin est\ndevel op\naar on\nt z\ngra ham\nown ers\nfo li\nless on\nqu es\nbab e\ncra ft\nph en\nju n\nbir mingham\nv ine\nll er\ni an\nfineart america\nevol u\nst ab\nim per\nwar d\ncom ic\nwi z\ninv ited\ndu ke\nmat ch\npor ts\nro ger\ndiag no\nke pt\nte st\nvis u\nr hy\nso c\nto x\nb aker\nsur face\nco vers\nman s\nb its\nx box\nff le\nn an\ngar d\nh art\nwat ers\nv illa\nre tro\nlight ning\ncatho lic\ndemocr acy\nneigh bor\npen n\ncr an\njona than\nla ura\nvi bes\nsu b\ncoach ing\nclear ly\nuk raine\nbra ve\ncommit ment\nt all\nmar t\nra p\nmo di\nsco tt\nbro s\nshow er\nðŁı ¾\nâĺº ï¸ı\ncou sin\nappro ach\nbr e\ncom pos\nhil ari\nphil ly\ng ad\nquick ly\nri an\nt m\nvir tual\nhou ses\nk t\nphoeni x\nw ire\nff y\nb unch\nanc ing\ntal e\nsnap chat\nstar ter\nh t\nk icking\nap art\nth y\n) !\nblo gger\nit z\ncom fort\nang els\nw ash\n" :\nar gent\nre quest\nhon est\nmi ghty\nbo bby\nk g\nro l\nthou se\nex po\nh c\ntab les\nmag ical\npo sts\nde m\nn w\nor lando\nab er\n* **\nðŁĺ ľ\nenviron mental\ntrans formation\nmi le\nw ic\nhir ing\nma ine\nbo ar\nr ying\nti s\nnit ure\ntwee ted\nanton io\nopin ion\nfin ale\ndi y\nf is\nth in\ntrou ble\nle go\nfi les\nqu art\nsp a\ncurren cy\ncli mate\nfan art\nrail way\nsp ace\nban ds\ndani el\nmo tion\nl eng\nhol der\noc cu\nmar ie\ncathe dral\nbu zz\nbi es\nnas car\nbm w\nbat tery\nchar lotte\ndoc tor\nzz le\nse ven\nin san\nd dy\nst en\nlab or\nthr illed\nse ren\ndocu mentary\nwav es\ncer tain\ncan did\nallow ed\nninten do\nstar wars\nta p\nhome made\nd les\nther ing\nbre e\nemp ty\npi ano\npos iti\ncoun try\npor k\npu ts\nper ry\nm atic\nspot light\nti st\nor ities\nwe alth\nc p\nbar bar\ncommit ted\nas sau\npro fit\ne ight\nhu l\nfini shing\nrun ner\nss o\ninsp ec\nchar ged\nchrist op\nlo sing\nco al\nho o\nele v\nde le\nmo ham\ndon ation\nc able\nclin ic\nj in\nmanag ed\nter ing\nâ ¬\nur ban\ndepu ty\nbb er\nbur n\nacade mic\no tt\nsta ke\nit er\nsto wn\nack er\nadvent ures\nad ams\ngre g\npro m\nvo l\nac qu\ncon gre\npa int\ncitiz ens\nc all\naf ford\nv c\nas ks\nthe tic\nindepend ence\nâ Ľ\nh itting\nbl on\nfu ture\nâ ı\nin no\ngen e\nbo ards\ndi stance\nse t\nre mem\nth al\npre vent\nl ang\nob jec\nsu sp\nmat t\nin duc\nbor o\npi one\nre di\nvir tu\nprin ted\nsco pe\nshar k\nsuc ce\na stron\nil legal\nj ag\nc ting\nine e\nat o\nrob in\nnutr ition\nb f\ndu tch\nb n\nfur niture\nfor gotten\nat ar\nru p\nhy per\nbran ch\ncommunic ation\ndegre es\non ia\nun cle\npromo te\nor che\nwi i\nj s\nbut ton\nma jor\nc bs\nbri stol\npremi um\nordin ary\ne dit\nm g\nwe ed\nst even\n: \'\ngu s\nte s\ncap tured\ndru gs\ndo w\nwr ites\nbi shop\nwhe els\nali zation\ndisco very\nw r\nrach el\nne il\nhy dr\ncu test\nentreprene ur\nkore an\nore gon\nul ty\nperfec tly\nsuppor ted\nhistor ical\nt wins\nell y\nwe l\nde vil\nin come\nscienti sts\nde leg\nh en\non i\nic ed\ngi o\ncur ry\nreve al\ne g\nbuff alo\nn ol\nop era\ncamer on\nhaha haha\nj ab\ngradu ation\ncra ig\nr al\ni f\norgani zation\nle ge\ng ang\nsu d\nedin burgh\nl ack\nfli es\ng ate\nthr ones\nq b\nthe real\ne leg\npp in\nc les\njam ie\ntn am\ncryp to\nou l\np ages\na se\nroo ts\nstu pid\na did\nboo t\nprote in\ns ap\nsi um\nsu s\nend or\nfun ction\ndon t\nen na\nch y\nsqu e\nwor ker\nm tv\ne a\nk an\nðŁĴ ļ\nmu s\nprofessi on\nt to\noper ations\nal lo\nc tor\ninv ite\nsc and\nou th\nz im\nlin ks\ncli ents\nsam sung\ndiscu sses\nn ell\nul tra\nsome where\nste wart\nine t\nde z\nb out\nfac tor\nti an\ntr ans\njere my\nd b\nðŁĩ ¬\nor n\ndevelop ing\nspo l\ncoo per\nma u\nrememb ering\ntre k\nfamil y\nsen iors\nfo ster\natt ended\nw ing\ntrans form\nele mentary\nhor iz\nli sting\nmalay sia\nit ch\nwarri or\nphilipp ines\nruss ell\nm end\niniti ative\ncre ep\nto ps\nbr iti\na ur\nshar p\nadverti sing\nug ly\nachi ev\nmateri als\nbu g\ndev ice\nbon us\nfac ility\ncol e\nnh l\ny as\nplann ed\npol e\nexcell ence\ntr ick\ncon fl\nr p\nachi eve\nlo an\nswa g\njess ica\nho we\np our\nsc u\nz oo\nr ated\ndre sses\nre bel\nmex ican\nco ordin\nme ss\natlan tic\nt l\nosc ar\nwal ks\nphar mac\ninvestig ation\n... #\ncc i\neas ily\nmonday motivation\ny ment\nau ti\nfor ced\nar med\ncolle agues\npap ers\npro per\nsha ke\nbu c\nle an\nexhi bit\ne vement\nco tt\nbi z\nsp er\nk ent\nsw an\n/ @\ngirl friend\nhaw k\nâĺ Ģï¸ı\nmon o\nðŁĴ Ľ\nstat ue\nðŁĺ ³\nra s\nte eth\npreci ous\nt ile\np am\nswi ft\nv ali\nno se\ndr unk\nexperi ences\ncome back\ngen ius\nwor se\nsh ef\nra d\ned it\nhon our\nau spol\nlar ry\nh ire\ngor don\nachi evement\n.... ....\nsu icide\nalter native\nsu p\nsur roun\nsha ke\nke ith\npe pper\ntur k\ncrimin al\nbe ck\nsu m\nw alls\ncn n\nan tic\nof fe\ncol li\nwin es\nhigh light\nhawa ii\nemb ar\nl fc\nðŁĩ ®\nm v\n> >\nat mo\nwor d\ncar l\nshout out\nbre wing\nì Ŀ\ndo f\ns ic\nhot test\ncol on\nhh h\nshu t\nlow ing\nvolu me\napart ment\nagre ement\nde stro\nwe e\nreligi ous\niow a\nro d\nland ing\nre present\nðŁĵ· :\nla s\nusu ally\nh l\nc ac\nsal v\nal ong\nlaugh ing\nbe ans\nremin ds\npha se\nsome body\nma sk\nran ked\ndest roy\nsc i\nâĢ¼ ï¸ı\ngab ri\nle o\nro a\nfa iled\nsi l\nrefuge es\nre vi\nr ing\nber ries\ncoo kies\ny y\nconserv ation\nsh ab\nhuman s\nde termin\na in\nni all\nas su\nmb a\nfro m\nextre me\nvic es\ncommer ce\nght ful\nor dered\nsuppor ts\nre cap\nv or\ndro pping\ncorrec t\npay ing\nmean ing\nn j\nqui z\n" #\nbusine ss\nðŁĩ® ðŁĩ\nindi gen\ndu st\nbox es\nbl ind\nx xx\nzz y\nðŁĩ¬ ðŁĩ\nss els\ns ant\ndd le\nhilari ous\ndesig n\nwonder ing\nvehic les\nk re\nju d\nrece ption\npar ker\nà Ń\npri vi\nhy dro\nsof tball\npol lu\nlo cked\nba h\ne ar\nscri pt\ndi vi\nbr ace\ngeor ge\nthe ast\nbel o\nj al\ntion ary\ndent al\nroc ket\npur ch\nsh ak\nmanufac turing\ne z\nit is\ncon cep\ntb all\nch s\ndirec ted\npra yers\noo k\nphil os\nvari ety\nche ss\nser ver\ng and\nbal ti\nðŁĵ ¸\nsel y\ncru z\nspectac ular\nbur ning\nre present\ni z\nt one\nmer ce\nh ell\nbed room\nestab li\nbo l\ncom mon\nãĥ »\nab or\nkit ty\nhei ghts\nre pair\nwilli am\nqu ake\nalab ama\npopul ation\nre v\nre tt\ni sts\nn ite\nle m\na ha\nclevel and\nr m\npo ver\nob se\nmon tre\nman ia\n ®\ncon ne\ncar ni\nsh ah\nf y\nu a\nsc or\nstrugg le\nbo b\n\' \'\nappro pri\ndeci de\nff ed\nca ster\ns ort\nhun gry\ndra g\nا Ù\ngr ounds\nd w\nsli ghtly\ncar din\ndead line\nbron ze\nweb in\nbar ry\nsil ence\ne uro\nop tion\near n\nðŁĴ ĸ\nhowe ver\nna ren\nna ils\nbath room\nv ine\nph d\nmin ing\ngar age\n( )\nshou lder\ndefe at\ndi r\no v\nliber ty\nple as\nx on\ncom pre\na v\nj in\nab les\nsil ent\nfam ili\nvis its\ndi pl\nha bit\nmilli ons\nregar ding\ninnov ative\nsen ator\nr ts\nv on\nk l\nwh il\nrequi red\nâĿ Ħ\nlu v\npresi dential\npo cket\nhun dre\nsho wn\nfro zen\nto ward\nfa st\nconfi dence\nr ough\nindivi dual\nqu et\nðŁı ½\ndom e\nfi fa\nengine er\nz en\nre mix\nðŁĺ ĥ\npl ant\nmin or\nrobin son\nas y\npul led\ncer tain\npotat o\n( :\npre s\noc ca\nw it\nit em\nsi e\nd ating\nthom pson\nown ed\nan u\nvi e\nte dly\ngood night\nex cept\nðŁĮ Ł\nira q\nki e\nren ces\nli p\nsimil ar\nsau di\nvi g\narth ur\npic ks\nmil an\nhon da\nma xi\no g\nste st\nar ch\nanaly tics\nba sti\npear l\nter ry\nhor se\nast ro\nac ce\nlaun ching\ninter national\ns no\nta sty\nden ver\nir l\npe te\ntor n\nadvant age\nvar sity\n" "\nsol e\ng c\nlan g\ndemon str\nol ds\nun ity\nne ts\ninsp ire\ncre te\nnash ville\nnel son\ne ter\nwal k\nhy un\nm ack\ntre as\nsee king\nra ge\nbru sh\nab and\nwhil st\nco con\nh ong\nshel ter\ni p\npossi bly\nso o\nit ed\nâ Ħ\nrac es\nwar ming\nqu in\ntele vision\nmat ches\nra pi\nment al\npal m\njenni fer\nrol ls\nindi ana\nb ars\ncat ching\nresc u\ncandid ates\nfa re\nâł Ģ\nse o\nvie tnam\nalph a\nmichel le\nvisi ble\nre gre\nwn ed\napp le\nli p\nf fe\nli z\nyork shire\nha il\nse asons\nbe gan\nm d\nk c\nla p\nfascin ating\nhel p\nur y\nu ms\nnu ts\nse m\nalong side\nbri dge\nori al\no ve\nworld cup\nbriti sh\ncomfor table\ni ve\nhot els\nfair s\nhor ri\nso x\nd ining\nstre am\nbar ri\nss y\nw im\nter ms\nv u\npe re\nl ens\nwal ked\nr or\nl ars\nshi eld\ndou bt\npro to\ncro ssing\nme ant\nmedi um\nad ding\ne b\nche ap\nfun c\npap er\nbran ds\nry an\nfeed back\ncol lins\nun known\ntro pical\nsand wich\nfal len\nfor mu\nselec t\nlo ads\nansw ers\nor i\nmag a\nd or\ndu o\nali e\ndru m\nur i\nde er\nsou l\nsh ut\nâĺ º\nsto len\ndon ated\nbu zz\npatri ots\nha l\nna sty\nnomin ated\nmon te\nki a\nth ri\ning u\nte sts\npe tro\nðŁij ij\nho sts\nne st\nto pic\npat ch\nm my\nhu gh\nab ilities\nma the\ns miles\ng b\nag enda\ninsi ghts\nchi p\nph an\nfail ure\ndg ers\nha i\nsignific ant\nsho ck\nru ral\ngl am\nfigu res\npot us\no ta\nmini stry\nappe ars\nfe ar\nr h\nameric an\nh att\nson y\nfi res\ne di\nn ou\ne qui\nwh en\nunivers al\nmad ness\ni x\nsculp ture\nb ach\nt to\nswe den\net a\nen to\ndevelop ed\nmonth ly\nma ps\nra h\nle d\ndel ta\nsa ints\nis lam\nben ch\nfif th\nv ard\nso cks\nwel coming\nj e\ntur ner\nv b\nad i\nnor way\nad y\nhurric ane\npor sche\ntra dition\nex am\nnewsp aper\nlu ci\na ver\nide al\nd na\nmadi son\nðŁ §\nwit ness\nac ou\ninsi ght\nsi mon\nrobo t\nsna ke\nn bc\nac o\nro ss\nsh ment\nreligi on\nch ann\nin su\ncamp bell\ninst alled\nwe ather\nhor ses\nol i\nrober t\nk az\nðŁı Ģ\nveter an\nth read\nquar ter\nea sier\ncap ture\nhi pho\nlaw rence\nroman tic\npas sion\ncl ay\nox ford\nth ai\nstu dying\nfi a\nelec ted\nmost ly\nc b\ntu mb\nâĢįâĻ Ĥ\nx l\nsh an\nfa ster\nev ans\nsli de\nsh ri\nsee k\nmi es\nchemi stry\npump kin\ntu m\n, ,\nro om\nfi red\nli ps\npres ence\naf f\nbrew ery\narri ve\nsw ag\nphoto graph\npen gu\nchi ps\nat tor\nval ues\naccur ate\ncon temporary\nprinci pal\ncannab is\nari o\nany where\ngi a\ndemocr ats\nbuil dings\nli ved\nap s\nneg ative\nm are\nbal lo\nli on\ndiam on\nloo k\nre form\ntom my\nil la\ntre ats\nhundre ds\nport land\nwor thy\nex cep\nar ia\nido l\nbe er\ncd n\ny u\naw k\nðŁĩ ¨\nc ells\nà ³\nident ity\ndra wn\nde vil\nf inger\nth am\nðŁij Ĭ\near ned\nfin tech\ndol ph\ntwee ting\nevolu tion\nðŁĵ į\nest im\nm vp\nn one\nðŁĩºðŁĩ ¸\ntoyo ta\nau x\nmar in\nb old\nl bs\nste ak\nmur phy\nit able\nlou is\nsol ve\npi a\nsk ir\nill ino\nwebin ar\nban ana\nlo v\nth on\nvo ters\nafford able\ndefe ated\nlm fa\nair lines\nsuper b\nany way\ndeb t\nbo red\nver si\nme tal\nresponsi ble\nm k\ns se\nf ay\ncau sed\nf p\nrecomm end\npla za\nspor ting\nalli ance\nau stri\nn n\nt ours\nsurpri sed\narti f\nth under\nsur ve\nwor e\nbri ef\nnecess ary\nz ie\nash ley\ndra ke\nr t\nkni fe\nim mun\nchar ges\na the\nbri de\nrep ly\ng av\nbroad cast\npu er\nbrace let\ncap acity\nharve st\nid k\nperfor man\nd ding\nil ers\npar a\njam a\npro vince\nch in\nid ers\nhar i\nte aser\nch en\nre stor\nr at\nfl at\ncol om\nðŁĴ ŀ\nðŁĩ¨ ðŁĩ\nsmoo th\nr t\np itch\nstay ing\nisra eli\nt cot\nper spective\ndo ck\nopen er\nlo vel\nx o\nclass room\nl ington\ngo al\nkenne dy\nsh am\nsp aces\nmitch ell\nhome coming\nuk i\nclaim ed\nrecru it\ning o\nmu fc\nmon it\ng roo\nresi dent\nper cent\nper man\notta wa\nint ment\nan xi\nstand ards\nwor ship\nsche me\nf x\npot ter\nbi an\nathle tic\naf gh\ns se\nsat ell\npar ties\nâĿ¤ âĿ¤\ninfra structure\nrela x\nmo du\nwor n\nsmo king\ny ach\npractic es\nwc w\nam b\ndome stic\ntay lor\nk entu\nprovi ded\nmo di\nve g\n" ...\nob serv\nðŁĺ ©\nbe ard\nm our\nan gry\nðŁĺ ±\nstartu ps\nwoo den\ndi ve\nna il\nanti que\nro ses\ntorn ado\nm at\n^ ^\nsu spect\nfar m\nde vices\nme ga\ntu l\nscholar ship\nge e\ndisa ster\narri val\npo in\nmar c\nkati e\nbb ed\nfal se\ndeser ves\nric hard\nju ana\nfre y\ntion ed\nhy bri\nr w\nsar ah\nach i\nc ure\no le\nmor ris\nch ic\nbroad way\nla bel\npa k\npover ty\ngol f\ne red\nf u\ner ies\nbe es\nalo gue\nst el\nwire less\nje wish\nti de\nblo cked\nlife time\nb har\nsp lit\nam ster\nth i\njo shu\nbr unch\nha ps\ns for\noo ps\nka poor\nhi king\nsuppo sed\nro of\nre as\ntra in\nti ght\ntru mp\nbas ically\nr r\nea red\nsee ds\nentr ance\nc p\nwi e\nson ic\nvic tim\nhe re\ne h\near rings\nsal mon\narc tic\nan ne\ndou gla\ncorru ption\nhann ah\nha sn\nvo ices\ncon ce\natt a\nfle et\nclin ical\ndemocr atic\nton y\nst ood\nle f\ntwit ch\na il\nhonest ly\nincre ased\ndro me\ndon na\naccep ted\nvisit ors\nap ar\nad or\np ar\njer ry\nra i\nbrand on\nab u\n!! !!!!\nme me\nin gh\nglori ous\nb hu\npu mp\nj ol\nli ke\nfi sher\nma z\nag an\ndestin ation\nplay list\nle tters\ngen u\nbr ace\ncelebr ated\nbann er\nr he\ndra gon\nðŁĺ ħ\nsig nature\ngre y\nâľ Ķï¸ı\nal ice\nbe red\nph er\nber n\nca th\nga thering\nsc oring\ninflu ence\nsm iling\nde pt\nlo cal\na x\nac u\nreti rement\nhon or\nher self\nchem ical\nasse ss\ny all\nfre qu\nappreci ation\nac a\ncho ir\ncu z\nso il\nc il\nrepor ting\nu h\nenterpri se\ngr at\njaco b\nru m\nfe e\nj ak\nsp in\nbi kes\nphi a\nste re\np is\nbloo d\nt att\nra ft\nwar ren\nsh eri\nback stage\nmar sh\nhash tag\nther ine\nre in\ngame day\nguar an\nreci pes\nmin ds\nstron ger\nissu ed\nbic y\nn ak\nment ed\nsc ary\nu x\npre vious\ntt le\nth ats\nac tors\nu ma\ntin a\nbun ny\npromo tion\nu ss\noli ver\nmontre al\nwhat s\nappreci ated\nla kes\nexcu se\nkno wing\npri zes\nmusc le\nshad es\nsco t\ning redi\nelectr onic\nju an\ncomb at\ns ri\ne h\nturk ish\nl om\nstri kes\npri son\nre e\npo pe\nvi d\nol dest\ndol l\nsw iss\ncerti fied\ncli p\nre turning\nlat or\nle igh\ntt es\nwat son\nheal ing\nel im\nper haps\nha ss\nk au\nd der\nmou se\nnew castle\nindigen ous\nwel comes\nco le\ntau ght\nno ise\nappe ar\njo e\ncan on\nwedne sday\nu tah\nc tive\ndri ven\ni v\nc ell\nstri p\nac c\nfocu sed\nar rest\nsto cks\nwo o\nâ Ĺ\nnotic ed\nshad o\ndi spla\nter ror\nbor ne\nsecon d\nque ens\nwo ke\nja il\nno tt\ncam bridge\nhar t\nse af\nfa x\nac cept\nâĺ ħ\ngoo ds\nk at\nt win\nh s\nthou sand\ns ins\nsu ite\namp ton\nar n\nrele v\nric har\nhoo ps\nn bc\nclass ic\np ab\nsoldi er\nde plo\nle ans\ninstall ation\ncla sh\nle ban\nee e\nti re\nbelo ved\nfu sion\ntravel ing\nne i\ncoo kie\nglo be\nphys ics\ns q\nco l\nwol ves\nd l\nex it\n" -\nfoo tball\nle af\nster ling\nhi de\nminne so\nfresh man\nnatu re\nindi e\nsupp lies\nbri s\niri sh\nink tober\ndoo dle\nic op\nmess ages\nadul ts\nrecor ded\nfix ed\nar do\noffe red\nunder ground\ndr one\np ine\nma inten\nand re\nham mer\ns x\nr ound\nhi ke\nbra d\nro me\nfu ll\non ey\nro ws\ncolum bia\narchi ves\nappro ved\nbat ch\nillino is\nrecogn ition\nshou ldn\nfo g\nnca a\nke vin\nhuman ity\nal though\npow ers\np ou\ns ar\npe st\nalco hol\ncon sci\nphil adel\nen o\nt m\nok la\ncate gory\nparticip ate\naccu sed\nbri ef\npo em\nclu bs\nconsul t\nja b\nbig data\namster dam\nac ing\ncerti fic\nn u\nd at\nimpro ved\nand y\ncampa ig\npale stin\np ace\nmo bi\nfeel ings\nwol f\nbra in\npro pos\ninter active\nprin ce\ninde x\nc is\ncha e\npeace ful\nco vering\nac o\ncour ses\nmon key\nre place\nb l\nbloo dy\ntal es\nbrigh ton\nneighbor hood\ng ates\nspiritu al\naf raid\nbre ast\nb ones\nðŁij ī\nvide o\nw au\ntou ch\ninju ries\ncar l\nri x\nune x\nâĢ ¢\nfre d\nconsi dered\nthu si\nan ch\non y\nu sa\ngraph ics\nac re\nðŁĺ ©\ncom memor\ncom mod\ngo ti\nguar dian\nstar bucks\npre vention\nhaha haha\nadmini stration\nportu gal\nfac ulty\nbet a\nul a\nal bert\nbre ath\ner i\nle tting\ntr ic\nment ation\nincredi bly\nten nes\nv d\nðŁĻ Ī\ned die\nbr ick\ngr ill\nbt w\nwat ches\nresear chers\nt ney\nni e\np as\na ster\nvi br\npoke mon\nch rome\ngo at\npitt s\nil ly\nfesti ve\ny d\ncan al\nðŁ Ĩ\nfi es\ncar los\nre que\npartic i\ntra ins\nsam ple\ntemper ature\nsym ph\npic king\nin door\nz ers\nplayo ffs\n____ ____\nap es\nly rics\nislam ic\nperforman ces\nd ick\nspar k\nse as\nhom a\ngr ound\ndisc i\nemploye e\ncom mu\nalas ka\nal an\nfe ast\ndg ing\nban king\nmanu el\nslow ly\ntru cks\nmc car\noo o\nsc rat\norche stra\nindivi du\nm x\nbre ath\nstair s\nequ ality\nbla ke\nloc ations\ncocon ut\nbalti more\naa a\nl c\nðŁı Ĩ\nhar vey\nresi st\nimmigr ation\nadid as\nfil i\nre f\nlg bt\nmo s\npp i\nken ny\nterr or\nban e\napol is\ns g\nsocial media\nka i\nhon est\nas sas\nbol lywood\nâĢįâĻ Ģï¸ı\nferr ari\nhor n\ncryp to\nbo om\nmainten ance\ni di\ns man\nw l\next ended\nin sul\nve s\ngo sp\ntr i\npi g\ntar ge\ncel er\nst ati\nsm h\nri dic\nappe al\n? )\ncon clu\ncos me\nshe ep\nchristop her\nen thusi\npo lish\nme ts\noun ded\nsustain ability\ncreati vity\ncon crete\nra i\nali en\nble ss\nte es\nclu b\nro t\nbo s\nex ist\nperfe ction\nlu ck\nrock y\nexpen sive\nmean while\nhappy birthday\npre t\nthr iller\nca ve\nplayo ff\nsom er\nl u\nle x\ndef ence\nam writing\nhome less\npro phe\nch et\npast or\nðŁ¤ £\nland er\nww w\nĢ ï¸ı\ntic a\n! #\no tic\nrad ar\npo sters\npow der\npo li\nha un\ntra p\nbl in\nassau lt\nshor ts\nre y\nsh y\nsqu ir\nrac ist\ngar lic\nfu r\nremo te\nsm ell\nimpre ssed\nfing ers\nâł Ģ\ndin o\nle ment\ns nu\npromo ting\nstr ing\nproduc tive\nb age\nma son\nra z\ndirec tly\nj k\nev al\nðŁij Ĭ\ndoc tors\nco w\nri der\nst v\nre move\nw u\nna than\nro d\nn r\n= >\naffe cted\ninve st\nmp tion\ng inger\no d\nagricul ture\ns que\nmu g\ncoun ting\nke e\nmag nific\ncoo k\nani stan\nroo t\nplac ed\nsym po\ngh ana\nun d\nche er\nthro wing\nsecre ts\nf illing\nopti mi\nbutter fly\nbu bb\nðŁĺ ī\nterri ble\nd g\nsil k\nobse ssed\nlo u\nai de\nsal ute\nmon u\nphiladel phia\nscienti fic\ni st\nu ae\ndess ert\nbott les\ncan yon\nðŁĺ Ī\ncar ib\no ther\nw ich\nre source\nguil ty\nun d\nle on\ne ss\nkan e\nel e\ntra iner\nhe im\nan te\nman age\nroo kie\ntre ated\npo ses\nrs vp\ncau ses\naw ak\nje well\nle tt\non ics\ntit les\ncardi ff\ng aga\nbu mp\nuse ful\n? !\nloo se\nbb ing\n: :\nargent ina\nde bu\ncy cl\nwh el\ndis gu\nj el\nk ills\nbio logy\nex ter\ntra sh\nbo dies\ntr am\ncircu it\nexpe ct\nla ds\nw ells\nsho t\nge e\nnaren dr\nfa stest\nb ent\nb ills\nmar shall\nh ats\nintro duce\nciti zen\nim possible\ngi b\naz z\nnet working\nr ant\nthin k\nin dy\nst ops\nf theday\nbri an\n* *\namo di\ndom e\ncoura ge\npac king\naf fairs\ng n\nsi zed\nent ary\npol and\nswit zer\nafgh anistan\nw u\nten der\nsubscri be\nmo sco\natt end\nrepublic an\nhon ey\nâĢ ĭ\nsi mul\nwe ster\nfoo die\nor o\nmidd le\nab t\nco pies\nma je\nnarendr amodi\nty pical\ninspir ational\nvit am\nwis con\ncu bs\ntiv ity\nh ali\ne ars\nk ay\nd are\nmari juana\ncu rious\nan ia\ntom ato\nre mind\nðŁĩ ·\nsc ared\ncou p\npo et\nland ed\nri d\nwra pped\nmor ri\nclimb ing\ne ws\nfe eding\ncon tra\ntho logy\ngri d\nti vely\nread er\nla ser\ndi ving\ndi g\nlat in\nti ed\nshake spe\no ci\nad m\nshow ers\nchu ck\nmar cus\noo s\nkne e\no live\now l\ndy lan\nan no\ng ym\ndeci sions\nwell ness\narri ves\nsati s\nchri s\nthur s\nðŁ¤ £\ninter views\nthank you\nswitzer land\nover night\njourn alist\nser ves\nvol can\n.... ...\nplo t\nnic ol\ncar rying\nmag ne\ntre asure\nex p\nbe ver\nðŁĺ ¢\nmar ty\nmo le\ndon ations\nrecogni zed\nb h\ndu s\nsh ann\nal do\nsuccess fully\nent e\nðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤ\ncab inet\ncu is\ntit led\nd as\nso l\nstrate gies\ndeli vering\nad ds\nani an\nne ther\nðŁĴ ĥ\ncon tain\nsu its\npa irs\nto dd\nrel la\nro pe\nci o\ncro p\npaint ings\nsu z\nre jec\nbu st\nd h\nfra ud\nm h\ncontro l\nje al\ndestroy ed\nal lows\nwo ol\nminneso ta\nom en\nj u\nsympo sium\nd af\nlim it\naccoun ts\nload ing\ninter n\nre solution\nhol land\nqu al\nmeet ings\ngra ve\ncam ping\nv am\nre nov\nliber al\nam ber\ngre e\nhu mb\nfe ver\nel ing\nbroo ks\nà ²\nbe th\nad ed\nal t\nro e\nperform ed\njo sh\nfrank lin\nnic ole\nde ss\nbb s\nm g\nnet works\nmin im\nal t\nweap ons\ngu y\njas on\ng ha\nharb our\nat on\npra ise\nkentu cky\nbel fast\nst icks\nblo ss\nho pes\nan thro\nfamili ar\nwa it\nch ile\ndepre ssion\nla x\nje ts\nle ice\nrecei ves\nsi er\nan k\nde x\ninde ed\nfle xi\nfab ric\nlam b\nhel icop\nam anda\nâĢĶ âĢĶ\ncompe te\nsn ack\ntechno logies\nsy rian\nmom s\nmu ham\ncho sen\nan at\ndev on\nshar ks\nre t\nfundra iser\nselfi es\nst ations\ncommunic ations\ntennes see\ntu tor\nro t\nvalu able\ndynam ic\nnur se\ni ed\nearth quake\ndeser ved\na ve\nsar a\nstre tch\ndougla s\nne pal\nà §\nob viously\nd ame\nra pe\nany body\nk w\npat rol\nhol ders\nh anna\ninfo graphic\nec o\nbe ating\nstan ley\nbo ats\nri bb\ne z\nwit ch\ninv a\nac id\nboar ding\n- @\ngi l\nda ve\ncare ers\nopp os\nl loy\nin ter\ndo pe\nre su\nj agu\nsh ade\nin dy\non ist\nrel ations\nag en\nab le\ninci dent\nme ter\nshar ma\nid r\npro ve\nimmedi ately\ntro ops\nam an\ng low\ngaz a\nblo cks\nperson al\nchron ic\nall er\nsi d\nsh r\nwhats app\nlu cy\nar chae\nho u\njourn alism\nour selves\ngo t\nthe med\nshap ed\nwe ak\ncas ual\nleng th\nsla m\nab bey\ne v\ncoun ter\nest a\nreci pi\ncha pel\nexpan sion\nsel f\nsuff ering\nsp ice\nn z\nsp art\ndesp er\nboo king\nquart ers\ny on\nðŁĴ Ĺ\np k\ncontinu ed\n- #\nman hatt\ntal ked\nsh en\ncom bo\nhybri d\nje ans\nliqu id\nse al\nre tweets\nac celer\ncollec tive\nt as\n: ))\nprofession als\nra w\no tt\nsu san\nir ing\nokla homa\nre ven\nsurvi val\ncre ator\ntran sit\nst ac\nsur f\ni k\ned iting\nch illing\nbai ley\nste al\nra ble\npa rent\nhun ger\nsn app\ncollec t\nphilos oph\ndedic ation\nc f\nc m\nle ep\nrepe at\nre ha\nun fortun\na er\na ero\nabstr act\nmon itor\nag ents\nbu l\nsci ence\nharb or\ndrag ons\nfloo ding\nac compli\nd ash\njuli a\nthe red\ntues day\ncy ber\nb low\nta ined\nle m\nrefe rence\npp o\nne goti\nchar le\ncon nor\nau lt\naccess ories\ncommissi oner\nrain y\nre ar\nadvis ory\nluc as\nma id\nco al\nk av\npol o\nðŁı ¾\ntran sport\nmar gare\nstraw berry\nbur ns\ngre ens\nne v\npartici pants\ncol in\nbelgi um\ncol our\nin form\nd ell\nbr on\ncal y\nkick off\nstrate gic\nre union\nhon ors\nli b\negy p\nâŃIJ ï¸ı\nhy po\nsi zes\nregi stered\nbet es\nrelax ing\nbloo m\ninten se\nvalent ines\ninsan e\nw wii\np x\ntri o\nbla de\nwiscon sin\ncon e\nplat in\nali ze\nra ven\nincre asing\nindi ans\nil ian\nbl u\nrabb it\nexten sion\nje f\nau di\nfer ry\ns ell\na day\nus b\nswe at\ncham pag\nmetho d\nmem ph\nassi st\ns by\nca pe\nremo ved\nmag n\nv t\nr ams\nf bi\ntack le\nphe w\nh on\nmotor cycle\nsu spec\neleph ant\nsub ject\nlet te\nda iry\nwhe at\nawk ward\nac t\ntro l\nmit ted\nzay n\nsheri ff\nene my\ncon s\nke tt\nbul ls\nev alu\nbt c\nsatell ite\nho lo\npor ter\ndia betes\nbet ter\nrele asing\nsur f\n: -\nse basti\ncollec ting\nen cing\ne thi\ngo ds\nal ley\nhealth y\nm ills\nsma sh\nco pper\ncr ack\nread ers\nsp ac\nlicen se\nbas ket\nbang la\nen tic\nom i\nm ere\nsi vely\nanim ation\nlan es\ndent ally\nchill in\nfi e\nk aren\ndep th\nli pse\nn g\nri p\nmel o\nsand y\nðŁijı ðŁijı\nvin cent\nnu t\nhu g\nwho le\ncre ates\n? ???\nâĿ¤ï¸ı âĿ¤ï¸ı\nbak ed\nup grade\nrober ts\nhar a\ncarib bean\nauth entic\nmb s\nmosco w\nattor ney\nwi ki\nch lo\nhu ll\ncor k\n" !\nsty lish\nðŁĵ¸ :\ndi ary\nimpro ving\nex pand\nbri ght\npollu tion\nk nights\nperson ality\nchec ked\nfac ilities\nz el\nbow ling\ngu er\nðŁİ Ĥ\non going\nun its\nhoo k\nbe ck\nconfl ict\nto dd\nfar ming\neduc ational\nk ak\ncla y\nstro ke\nbel ly\nexplo re\nmill enni\nth m\nloo p\nsm s\nconsi st\ncir ca\nbr yan\nd ab\nyoun ger\nsoli dar\npp a\nexperi enced\nb ella\nbo ard\nshef field\nsteph en\nconsu mer\nsub mit\nspon sor\nt ang\nag gre\ncomb ined\ntrac king\nsand ers\nb az\nsurvi ve\nfer red\nequ al\nse p\nre ed\nstr ong\npriv acy\nst ap\nun g\nac ry\npa sta\npir ates\nag er\nfair y\ndu p\nintroduc ed\nwi p\nlet s\nspr ay\nðŁĵ º\ngre w\na sts\npitts burgh\nnew york\njo ey\nlau ren\ntra de\nch op\npi pe\ncla ire\nbehavi or\nv ap\ncre ws\nlap top\nðŁ¤ Ĺ\nche ster\ndisci pl\nd f\nout doors\nk s\ngo ver\nsuper star\ncas ino\nfar mer\n; -)\nre turned\nðŁı Ī\nma il\nroa sted\nco sta\nv ill\npe z\ngard ening\ndistribu tion\nsh ining\ninve stors\nra sp\ndec ades\nreali zed\nbar n\np ti\nst able\nut d\npan thers\nm ens\nb n\nca de\nbu cket\nyn n\nwhen ever\nwa ke\nda is\nber nie\nlo dge\nju lie\natmo sphere\nðŁĺĺ ðŁĺĺ\nmajor ity\npar ti\nexc it\ncu t\nme h\nmusli ms\nbe gun\nfli ghts\nvene ss\nce me\npo sing\nso le\ng ou\ndark ness\npe ach\ncel tic\nauth ority\ngrand ma\nful ness\nsmi th\nspeci fic\ngar cia\nco ins\ngood ness\naldu b\nrecru iting\nden nis\ngar y\nsle eve\nweap on\npl z\ndisco ver\nharri son\nrecruit ment\nja i\nch im\ncom pared\ntom s\nmo thers\nam y\narchi ve\nt ask\nben jam\nse g\nlaw yer\nal um\ninve sting\nmi e\nche z\nj p\na ke\nfl am\nwall paper\nâĻ¥ ï¸ı\nt ton\nche st\nfavor ites\nwe igh\ncoo lest\nr ating\nrelev ant\nlo gan\nma ple\nrun ners\npri or\npeop le\nma ur\nterrori st\nte sted\ncarni val\nsu spen\nme asure\nm v\ncyber security\napp ren\nterror ism\no z\nv ital\nni es\ngon z\nfun ded\ntwi st\nassess ment\ndie sel\nen for\ncolum n\nad dressing\nca sts\npay ment\nx ton\nfi er\n, \'\nla st\nne e\nun less\nclo se\nsk ill\ncuis ine\nfun eral\nti les\na un\nk ru\nrelation ships\nðŁĴ ¯\nev ent\nâĢįâĻĤ ï¸ı\nkind ness\npro posed\nacou stic\na es\ndefen der\ndan ce\nh tt\nw at\nvo y\nðŁ¤ ĺ\nau s\ncli ff\nsear ching\nbeauti fully\nin qu\nat l\nspeci alist\nðŁIJ ¶\nda i\ntra ils\nclass ics\ninst ant\nv ous\nre venue\nmar ch\nkir k\nfr inge\nfire works\ntri via\nâĺ ħ\ntr action\nwal ter\nmo to\nl ily\natt itude\ncli mb\nsc an\nsav ings\nc w\nfa ith\ncred its\nab led\ngra ff\nauto graph\nhe he\nran ch\nha d\nro gers\nðŁĮ ¹\nf in\nre qu\nfol k\nad ditional\nlyn n\nu ber\ndol lars\nlo gic\nwor th\nso m\nthe sis\np ound\nbi c\nst ur\ncer am\nspen cer\nen tered\nv amp\norgani zed\nâľ Ī\npp s\ntr on\nmerce des\nno ti\ncompet itive\ndo w\nous ness\nvic tor\ngr illed\nna i\npu tin\nab ra\nbl ame\nalex and\nanim al\ndec ent\np ent\ninter ior\n:\' )\nbut ler\nbal let\nðŁĴ Ķ\nalbu ms\ndown s\nla d\nsi r\npla in\np ers\nblon de\ndis c\npaki stan\nse ment\nga a\nw age\nch as\nman i\nco ps\nterr it\nlo l\nlau ghter\nri vers\nmagnific ent\nlam p\nw b\nnew sle\nchar ts\nble ssing\np unch\nlon gest\nfl oral\ncu tie\nfare well\nsto pping\nmb b\nbu d\nchee se\nde cla\nsi m\nmc donald\nde ter\nyou th\nt ch\nfre der\nkin dle\nfer n\nat or\nas leep\np ond\nspr int\np ounds\nla zy\ngh e\nfundra ising\ndead ly\ngran de\ndou g\nhe y\nlin da\nconsi dering\ni um\ngol den\nvi k\nauth ors\ndi ss\nu ally\nappropri ate\nmor ning\ny le\nhon oring\nfoli o\nbe c\nre bec\nfin land\nformu la\ncorn wall\nsh ay\ncau sing\nbl end\nsig nal\nt ent\nkash mir\nnation als\nhar mony\nsc out\nacce ssi\nhe ight\nmedi eval\nimpro vement\nke es\nprac tical\ncar d\nde par\nhu n\nom ing\ncal gary\nste l\nbu bble\ngur u\nma h\nunex pe\nn h\ned a\nme at\ni ge\nsi o\ngod dess\nin ches\ntun es\nbr itt\nsti on\nra j\nâĻ «\nmer cy\nðŁĴ ĺ\nsen ds\ni est\npol ici\nval e\nreduc ed\nas ap\nvi jay\ndefen sive\ncelebr ations\nri ders\nmed itation\nhar mon\ng ing\n ¡\nprogram ming\nin au\nsud den\nm h\nreplac ement\nsk u\nj ar\ngra des\nta st\nk itt\nbrand ing\nk aw\nboo t\nf ought\np ays\ng f\niz ation\nho p\nk k\nactivi st\nv end\ncoast al\ncha os\nðŁĶ ´\nse me\nbill board\nli fting\ncu mb\nsc al\nðŁĸ ¤\nstru ck\nl v\nindie dev\nbeat en\njun gle\nal right\ndestin y\nm ing\nk c\nch ances\nom an\nq atar\ncra f\ntra ined\npri x\nchar m\no tive\ns mu\ne c\nand ers\nhand ed\nal ban\ncertain ly\narri ving\ni ze\nsa i\ntr ack\npain ter\nhu mble\nappo intment\nhead line\nmanag ing\nmo d\nas pe\nandre a\nà ¤\nethi op\nun ited\nexi st\nbal i\nk ad\nn t\nd red\nre x\nrecogni ze\ntam pa\nbe ers\nati a\nhe els\nno te\ntransport ation\ntur tle\nre de\nhipho p\nsp icy\nsp urs\n⬠ĩ\ncor p\nther n\nto ast\nhur ry\nproper ties\nma ge\nmar co\nele ments\nbou ti\nsyn drome\nms g\ndevelop er\ngra ders\nhe im\nre sil\noff ices\ndel ay\ndi men\nvin tag\nbarbar a\nðŁĺ ±\nvene zu\ncu lar\nfac ed\nbar n\nðŁĺ Ĩ\nsurvi vor\nwor m\nconfu sed\npassion ate\nØ ±\nidenti fy\nelectr icity\nsou ls\nbrad ley\nrepor tedly\nlun ch\nshel f\neli a\nswee t\nsmoo th\nemplo yment\nam el\nmanhatt an\nste am\noun ts\nye p\nli ving\nun e\ndescri be\nca res\nman ila\nsha wn\nac ted\nbas h\nst even\nre st\npet ition\ndiv ine\nwel sh\nrac e\nplatin um\nðŁĮ ¸\np b\nextra ordinary\nsolidar ity\nm all\non ion\nschedu led\ngame of\nfer gu\nde ms\nnor m\np k\ntri als\npolici es\npubli shing\nst ole\nfron t\ncharac ter\nvan ia\nex ce\nsti e\nsc a\nresi dential\nsa iling\nðŁĶ¥ðŁĶ¥ ðŁĶ¥\nspons ors\nth ick\nchampag ne\nshe pher\ncontinu ing\nven ice\nper th\nna p\na ster\ny ak\nun limited\ncho ices\nne o\nhi v\nrepor ter\nbru ssels\nf old\ndy s\nse mi\nla wn\nit alia\nwi fi\nas k\nem ed\nfr ame\nmonit oring\nste ad\ni da\ngr in\nis a\nfli p\nre stric\noffen sive\natta ched\ndi sh\nwh y\nphilli ps\ngre et\np als\nmix tape\nv ou\nfiel der\nspar k\nalber ta\ng len\nca sh\ns ri\nu ri\nro dri\nentreprene urs\nclimate change\np sy\nd le\nem ents\nlin ked\nnether lands\nacci dentally\noppos ition\nvel vet\nra ys\nc w\nom o\nm f\nlmfa o\nnewsle tter\n: )\ntoi let\nliter ature\ndi sp\nphili p\nuni form\nsudden ly\nhead er\ncool er\n-- -\nprou d\nbri g\nnis san\nscienti st\nj ah\ncon centr\npac ks\nappo inted\nso ap\neng age\ncho se\nâĻ ¡\nse tup\njeal ous\nhar ry\ng ation\ntun nel\nte mp\nosc ars\ndec ade\nrecomm ended\nchild ren\nab a\nanxi ety\nve ments\nsal on\npho too\norgani z\nmach ines\nab s\nvil le\nhy pe\nti ff\nemer ging\nav geek\n[ #\ncontribu tion\nbra dy\nre sto\ng mail\nfit z\nphoto shoot\nhel met\nh t\neleg ant\nug anda\nnur sing\nor leans\npen n\nna h\nfoo tage\nem a\nw o\nw ad\nconcer ns\nve re\nre mark\nwho ever\nstr ang\np t\nqu it\nsh ang\nhistor y\ns ick\nperman ent\nill ness\ncol d\nvisi on\nhe m\nar row\ncon vic\npin k\noc cup\nbal d\nex hau\nu of\nam o\non t\nãĥ »\nadop t\nla id\nsmo ked\ninter pre\ness enti\nassoci ated\nb d\nbb y\nfi er\ninst all\ndipl om\ncon diti\nc f\nw ak\nany a\ngr aci\nfi sher\ns ss\nap r\nil it\nmus ician\nsymph ony\ncor d\nh ack\nle gi\nl v\nbless ings\nhum or\nsc ra\ne ti\nmin ster\ntrav elling\nbu sh\njewell ery\nli me\n!! !\npregn ant\npe e\nlo b\ncap ital\nip a\npen cil\nla bor\nduc ks\nprou dly\nwedd ing\ndere k\nm w\npe g\nvalent ine\nan gu\nre treat\npro spect\ndang er\nvul ner\nup set\n, #\nsr k\nx im\nthur sday\nn fl\nkis ses\nre ds\ncr ack\nre ward\nc u\nko k\nme te\naband oned\nit t\nme als\nsp ell\nstan bul\ndel ays\nru m\nle op\ngu m\nno va\nsuper man\nch ick\nm is\ndram atic\ninno cent\nr ounds\nre c\nauti sm\nbangla desh\nmor al\nmo vie\nsp oo\nk la\nâĥ £\nou ting\nmess i\nab road\nloo kin\na im\nq i\nst ack\ncolla ge\nà ¯\nhud son\nsc an\nho e\nch au\noc cur\ncomm ander\nho les\nðŁİ Ħ\nbi as\nv on\nstick er\nma k\nresponsi bility\ncolum bus\nsa int\ned mon\nrac ism\nfar ms\nw en\ngul f\nmay o\n!!!! !!!!\ncorpor ation\nba chel\nel a\ninter nal\nje ep\nfol lows\ndi alogue\nde rer\nsmart phone\nhe len\nrich mond\nequ ity\ns land\nb g\nne ar\nav i\nmemph is\nwe ir\ndiscu ssed\nbad ge\np up\nmi stake\nphen omen\nun ite\nðŁ Ľ\nde pic\nri des\nin augu\nn at\nsof twitter\ncomb ination\ngosp el\nâļ ¾\nad mission\nretro gaming\nðŁIJ ¾\nsch u\nmb o\njun ction\nal arm\nà ¦\ngr ac\nkh ali\nk ul\nm ale\ncap tion\nwi sh\nte re\ncor ps\nru bber\nplay station\ner in\neffici ent\nl or\njo kes\nin ary\nnor man\nlu is\ninaugu ral\nch ed\nâļ½ ï¸ı\ndi p\nto e\nstr at\naa c\nam u\npi er\nco tt\ncomm and\ntt en\nsn oo\ncu be\nclo ses\nclass ical\ns word\nexpre ssion\nreach ing\nn app\nco st\naffe ct\nric o\ngi f\nbrea the\ntri be\nor tho\nh ay\nl g\nfri es\nn m\nhi ding\nrichar ds\nen de\nmic ro\ncapit ol\ncop y\nro m\nregi me\nmary land\ntax i\ndi al\nembar ra\nun believ\nch t\nv s\nelim in\no dd\npen ny\nsound track\nl ings\ntrans ition\nrema ining\na is\nmali k\n? !?\nrand om\ndef end\nul tra\ntru m\ndanc er\nst ol\ndri ve\na ver\nro ast\ndefin ition\nse an\nexcit ement\npartic ul\nsu rely\nsh av\nber y\ndi shes\ncom m\nis ol\ni am\nob li\ngho st\nhugh es\nchi efs\nb as\nconserv ative\nspeci al\nfe min\nsh ri\nn ancy\ninte l\ntu ne\nðŁĩ ª\njo el\ngg le\nmo to\nðŁĺ Ķ\nbu ck\nd ag\nantic ip\nmont ana\ngu id\nfro g\nec raft\nop e\ndri ves\nnu mer\nx y\ncolor ful\nwednesday wisdom\nillu min\nbey on\ninau gur\ndeep ly\npre fer\nfor tune\ncoo ked\nti ble\nâĺ ķ\nswe ater\nit ter\ntt y\nu i\ngi e\ncom plic\n~ ~\ntax es\ncu ps\ndi verse\nsam anth\nâłĢ âłĢ\nba king\nsy mp\nwa i\nbe half\nmer cur\ntravel s\nðŁİī ðŁİ\nor ia\neng aged\njump ing\nreti red\nn aked\np uni\nspeed way\nsci ences\nrehear sal\non ym\ndy ou\npl ates\nr ati\nkri sh\njaz z\ncar ol\nra f\npen alty\ntim eline\nru by\nengine ers\nra f\nbel le\ndo se\nche on\nesc ap\nme g\nran k\nor d\nme gan\nmer ch\nec lipse\nâĺº ï¸ı\nple dge\nkir k\nper si\nleice ster\nsa k\nw k\nsaf ely\nyy y\nje t\npromis ed\nj c\nen ne\nno ah\nre no\nre a\nðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤ\ntra il\nðŁij Ģ\nf d\nsoo o\nri min\nw k\nภ²\ni al\nx ox\nbis cu\nd ale\nfan dom\nparticip ating\nfla g\nprivi lege\npe ach\nmach ine\nbo ston\ngro ss\no g\nmir acle\nadop tion\nu ss\nmon sters\nbe ij\nclar ke\npu shing\npra ying\nar o\nd n\nell is\napol lo\nod ds\nrefuge e\nto w\nb p\nðŁĩ¬ðŁĩ §\nh end\napp eared\nmemb ership\npe an\ndu m\nviol ent\nv y\npotat oes\naw w\ngreet ings\nt ts\nac on\nsh ane\nphotograph ed\ncra b\ntemper atures\ncu ba\nc fc\nwel com\nhe l\nin nings\nm k\nco de\nkno ck\ngra ss\nswe dish\np ta\nick y\nv at\nlin ing\ns q\nsa p\nar c\nannoun cing\nsk ins\ncit yof\nbr ing\nco x\ngam er\nit arian\ni da\nh d\nros se\nsad ly\nge o\nâļ ¡ï¸ı\ntag s\nfa ther\nchan ge\nl ance\nwhis key\nadel aide\nte c\nstick ers\nmarke t\nclass y\nbad ass\nflo rence\nlin er\nfro st\nk ate\nac on\nscand al\nes sex\nðŁĺ ı\nvi vi\ndr ill\nblo ggers\nrecomm end\nd ha\nac res\nro ma\nbu y\ngro cer\ner ia\nma har\nff er\npatter ns\nver i\ncom pu\nst ev\nang a\nment or\ndo o\nit ali\ncdn poli\non ly\nconduc t\nelec tro\nde f\nwh ale\nprepar ation\nbicy cle\nvi ral\nturn out\nbra ss\nqu ad\nhospit ality\npack aging\nden cy\nceme tery\nabo ard\ndre aming\npic ture\nt all\ninv ent\nad mi\no e\ntem ps\nqu an\nfun dam\npro mp\nresi dence\nmu d\nsour i\nâĦ ¢\ngraff iti\ngi f\nd nd\ncom p\ns war\npe eps\npale stine\ndevil s\nsan g\nassi stance\nbi ke\nmissi ssi\ninter viewed\nne phew\ndru ms\nv and\ngentle men\nn sw\ninst a\nleban on\nee ee\noli via\nver y\nrou gh\nindustri es\nm ation\nðŁĺ Ĵ\nbar rel\nn ay\npo ps\nmoder n\nill y\nare st\non ents\nprotec ting\nv ans\ne o\nvi kings\nrestaur ants\nre ck\njac kie\nandre w\nw illing\nhe ath\ncitiz en\ndisc rimin\n๠Ī\nstu art\nm ys\nhi p\ntran sp\n" ?\nte x\nsu shi\nke d\ncro ssed\ndist ur\npe dia\nf ate\nsome how\nmo th\nproce ssing\nis s\nr in\nu ts\nyy c\nver t\nlg bt\nre id\non to\narab ia\nhabit at\n= =\nstre ak\nsimp son\naddic tion\nwim ble\ndeli vers\nchalleng ing\nðŁİ ¶\nfran ch\ne du\ns me\nai ds\nhur st\nth am\ntari an\nremem bered\npalestin ian\nfe es\ntru m\nsket ch\nur u\nfit ting\njes se\nðŁĶ¥ ðŁĶ¥\n---- ----\nba ch\nici a\ncolo red\nda h\nassoci ate\nint el\ns eller\np u\nstu ffed\nac s\nb s\nsh in\ncooper ation\ncertific ate\nab u\ningredi ents\nre v\nin ge\nel der\nchristi an\nbun dle\nth ic\ndir t\nbeij ing\ncomm it\nted dy\ned u\nto day\ns field\nw yn\nconfir ms\nlo o\nj v\nene ss\nal pha\nvir us\nari um\ngr ind\nbri dges\nintroduc tion\npol ls\nbac ter\nz ach\ntermin al\nra iders\nfla vor\nzom bie\nvo d\nsp reading\ngameof thrones\neffici ency\nlat ely\nale m\ntwee t\ncri mes\ncl er\nde y\ndg ed\nhy un\npay ments\ncir cus\nðŁĺŃ ðŁĺŃ\nmis souri\nlu b\nepiso des\nc age\npo s\nmat ching\ntumb lr\nlin ed\nge st\nam bi\nnar r\ning ton\nregu l\nblo wn\nis le\nco co\non don\njoshu a\ntour ing\nsm a\nsau sage\nbest friend\nbo eing\ndesi re\nsav age\nra pper\nde vo\nte ar\ntake over\ncow boys\npo ker\npar ag\npp e\nh int\nwe ars\nse th\nro les\nl anc\nman ga\nform at\nfl yer\nc ay\nmo or\nba ke\nspla sh\nv ad\nker ala\nproce eds\nsil ly\nreflec tion\ndi str\nwi d\nsu it\nci vic\nyan kees\nby n\nmigr ation\ndi stin\nor ch\nfe mini\nquali fying\ntu ri\no be\nhun dred\ncra p\nwan g\nmathe mat\nbu re\nexpo sure\nfergu son\nseme ster\nre serv\npl ym\na hu\nfac ial\nwa x\nwor ried\nca b\nvi o\nas a\nco d\nto pics\np cs\nhal o\nrescu ed\nhoriz on\nar k\nâļ ª\nhol ly\nel f\nul ti\npu p\nquali fied\nattend ance\nati vely\ndestro y\ny c\nfor th\nphotoo ftheday\nc ents\nic eland\nmeas ures\nde sk\nport folio\nartic les\ndirec tors\ndat ab\ne w\ncreep y\noun ding\nhon oured\nmi st\nj it\nmen tioned\nport able\niti c\nd ann\nfriday feeling\nam id\nti ger\nscri p\nhelicop ter\nhard ware\nexpl or\nwork place\naustri a\nbeat les\nber nar\nspi der\ndisc o\ncul t\nlim its\nshor tly\nfin al\nnin ja\nlu ke\nle bron\nwal mart\no il\nvan illa\nshi re\nye g\nak y\nc s\nbl er\ncollec ted\nt g\nrol led\nspeci als\nb ff\npier re\nsh im\nvi er\nflash back\nrestor ation\nindividu als\npro d\nfre aking\ntu rer\no a\nre fre\nmor oc\ngre et\nre yn\ncare ful\nour ing\nu sh\nis d\ng ill\nvie w\nthunder storm\nb led\npic nic\nguar di\npi g\nar k\nsyl vania\nbann ed\nu cl\nvi jay\nori um\nav engers\nbeliev es\neu r\nmonu ment\nconcer ned\nla bs\nber g\na ap\nvi sh\nsing les\ncan cel\nz el\nar ab\nru th\ntoo th\nar ta\nsh af\nchair s\nr ack\ndise ases\ncrow d\ncl y\nfle x\nchrist ma\nartif icial\ntom at\nfin e\ndra ws\nadvoc ate\nfran ce\nÙ Ĭ\nðŁĺ ³\nheav y\ns our\ncompre hen\nno ble\naa p\nhin du\ncor al\ng ars\now en\nn l\nst all\nyel low\nmar ina\nin ver\nsuppor t\ntou gh\npromis es\npi e\nmaster piece\nsco re\nfor ce\nmor tg\ncrypto currency\no x\nr ors\nrock in\npro vin\nho g\nno stal\noak land\npat rick\ninclu sion\ntra ffic\nah med\na ha\nlux ury\ncon secu\nde mon\nâĸ º\nb lowing\nst ag\n: "\nencoura ge\nben e\nsku ll\ndo dge\nbu ster\nkin son\nwit ne\ner ror\nlo west\nfel low\nà °\nsh re\nbl ur\nvir gin\ncompos er\nsli p\nmor nings\nga ins\ntab le\ngra in\nari st\nbraz ilian\nw we\ntu es\nribb on\nan ag\ndi st\nsac rif\nem brace\nentreprene ur\naf fili\nde o\nt ali\ntouri st\nfat al\nì Ĭ\nautom atic\nðŁĩ µ\nwe ak\nwel fare\nconfir m\nbenjam in\nfi ghts\nalleg ed\nme ad\nstrugg ling\npro secu\nche f\nà ¨\npropos al\ner n\nðŁĺ Ħ\ndy k\non gs\nhon g\nm ack\nmel on\non ent\nru sh\nd ap\ntol er\npro pag\nc ze\ntrans lation\nwal let\ncott age\nsa il\nconstitu tion\nðŁĴ Ģ\nmun ici\nfav or\nstorm hour\ni h\nðŁĺ Į\napproach ing\npin ned\nj ed\nniger ian\nn ach\nsh at\nparticul arly\nmc don\ncamer as\nanni e\nadmini str\nhe at\nelectr ical\nchar ming\ngib son\nbouti que\nex posed\nac tor\npil low\nbeach es\ngenu ine\nmargare t\nben nett\nlou isi\npos itions\nel y\nshin y\nten tion\narchitec t\nren tal\nac qui\ngoo gle\nsub way\nmom ent\nðŁļ ¨\nri m\nmetho ds\ncy cli\nnor folk\nÙ Ī\nover whel\nra pid\nwe ar\nhappy birthday\nprogre ssive\nðŁĴ ¥\nco gn\npap a\nf ool\nphilosoph y\npol ar\njim my\nwi g\nðŁĴ ĭ\noper ating\nreduc tion\nph i\nfla gs\nto the\no di\na res\nk oo\nk ang\nar kansas\nash ton\nwimble don\nsci fi\nattrac tive\nmississi ppi\nlogi sts\nral ph\nla bel\ngradu ates\nma ha\nhome town\nâľĮ ï¸ı\nfoun ded\non the\nli z\ntrans l\nmini mum\npre sti\nta m\ngener ations\nre bel\njourn alists\npar am\nmc m\nacry lic\ndeath s\ntes la\nw t\nbry ant\njer us\ni stanbul\nmuham mad\nri ley\nk ris\nwork shops\nis o\ncoun ts\nstre t\nprote cted\ntrin ity\nman ual\nr hin\nr il\npleas ant\nle mon\nner d\nhar der\ndar ren\nbur y\nra h\nbas is\nmi gu\nocca sion\nli sts\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ı\ne b\nde cre\nhamp ton\nìĿ ´\ntra vis\ntrans form\npuer to\nnh l\nav oc\ntri ps\nunexpe cted\nve t\ndi dyou\nbar ber\nst ages\nm son\nre presented\nfor t\nl al\npp le\nnic ely\nignor e\nqu il\nqu inn\nh k\ncarri er\nremin ded\nam ong\npass enger\nel len\ngue z\nsc ape\nmu ral\nyoun gest\nma sh\nd ill\nrout ine\nstain less\njack son\ngand hi\nth al\non ers\nedit orial\nconvers ations\nsd ale\nautom ation\ni ke\nา à¸\nðŁĩ ª\nhau l\nla ying\nmen tions\nam en\nabor tion\ni bi\ncoun ties\nca therine\nman ds\njam e\nroll er\nau t\nn am\no logical\ncep tion\nran king\ntox ic\nsn acks\nvictor ian\nbang kok\npsycho logy\nre g\nang ela\nrespon d\nsty le\nsophi e\ndak ota\nachiev ed\nmar ked\nimper ial\nin as\nglo ves\nsli m\nconfi dent\natt acked\ngg er\nlon ely\nvalentine sday\nre b\ncraft beer\norig in\nzim bab\nce iling\nte ens\nother wise\nw b\nf ers\nday sof\nadvis or\ny ah\nâĻ ª\nen der\nrepublic ans\nav a\nskir t\npi pel\nchi e\njan e\nja x\nðŁĺ ĭ\nâľ Ĭ\nj ays\nbre tt\nbal o\ncru cial\nd har\nas is\nde au\nlloy d\nchat ting\nâĿĦ ï¸ı\nrel ay\nremark able\nn s\nwe t\nbris bane\nðŁĶ ´\ntion ally\nf k\nla yer\nhouse hold\nconsecu tive\nes is\npend ant\nst ir\ncrit ic\nsu gar\nphoto shop\npa res\narti stic\ndo dgers\nc un\ncra fted\nam end\nbo at\nâŃIJ ï¸ı\negyp tian\nsa w\ntra ge\nsmall er\nox y\npa ired\nnex t\ni res\ntac o\no y\nu c\nst i\na erial\n: //\ndr o\ndot com\ngg ins\nr pg\nay e\nle an\nstri ker\nlo bby\nprote sts\npri ority\ncongre ss\nam ate\ninv it\nr ington\nmom my\nth us\nallow ing\npione er\nenfor cement\ng ori\ntal k\ndra g\ndu mb\nbul let\nsan ge\ner y\ntar gets\nðŁĩ ¦\nhe ather\nconsi der\nseaf ood\nve st\nris ks\n% .\np g\nsac red\nhe ating\nkick ed\ntto t\n. -\nchan di\nco ven\npo ol\npul se\ni a\nro ster\nshakespe are\nes a\ncar go\npean ut\ntro op\nac tion\ntab let\nhome work\ncast le\nstru ction\nmus icians\nfree zing\nbu tt\njustin bieber\nj j\nbah rain\nan them\nau dit\ndidyou know\nna vig\nguid ance\nâĸ ¶\ntur f\nn un\nfic ations\nye men\nchar ging\nx c\nbron cos\nsu bur\np ale\nbor ing\namong st\nfor the\nem per\nom fg\np j\nexpe cting\nðŁĴ «\nst l\nad min\nexpect ations\nsw an\nshoo t\noooo o\nmin ent\nãĢ IJ\nwall ace\nstan g\nsatur day\nadop ted\ndou bles\nhom ie\nome z\nd han\nvent ure\nsurroun ding\nfi le\nmob ility\nde es\nw ski\nbroo ke\nemb ro\nre members\nkar a\ntest im\nbo tan\nm tv\nsacrif ice\njerus alem\nd l\n ´\nproper ly\nili on\nas i\nleg it\nco pe\nm cla\nrecy cling\nlar ger\nðŁĴ ĵ\npat ric\ngener ous\nja red\np f\nmol ly\nthom as\nju dges\nh b\nsor ts\nbl vd\no ven\nenter ing\nplan es\nbe et\nintegr ation\nboo ked\nfre ed\nver n\nash es\nto pped\nde pot\nwelcom ed\nren a\nm ick\nd and\nsee ks\ngam er\nran kings\nren e\nmu t\nwhis ky\nfire fighters\ngu es\nga ther\ntour ney\nde men\ny ang\nnew ton\nautom otive\nback yard\ndeta iled\nmi st\nto bac\nfi ber\nun usual\ngrat itude\nsp are\nne ys\n: *\nper i\nflo ating\nfin alist\ndon ating\ndre ss\nbro ad\nbe the\neconom ics\ntai wan\ned wards\nplu g\npra iri\nval en\nbab a\nf ad\nan as\nhar per\ndis order\napp lied\np att\nbi kin\nli ver\ncu ri\ncarol ine\nann er\njuli an\nwal king\nmal col\nscreen shot\nco ding\nskin care\nactivi sts\nmyster ious\nex act\nblo cking\nmercur y\nbat ter\ndu mp\nâľ Į\nen se\nli sh\nridic ulous\nprote sters\nðŁĻ Ī\nlu st\nswe at\nas s\nali ke\nco dy\nre ments\nwin ds\nas pir\nvi enna\npra y\n.. .@\nbo i\ncand le\nassi sts\nte e\nder son\np ony\nf ence\ncon spir\nâĺħ âĺħ\noo th\ne pic\nba rely\na unt\nb am\ndiamon ds\nend less\nscre ens\ncan cer\ngr o\np st\npro spec\nmo sque\nhelp ful\nou ri\nbro ther\ngu jar\ncri sti\nine z\nto wers\nad dresses\ngra y\nbur ton\nre tweeted\nðŁ¤ Ķ\nn ity\ndu ck\nsuper vis\njo an\nkin der\nsanc tu\npi ed\nâı °\nł ï¸ı\nm ati\nreven ge\nce ster\neli fe\ndesig ners\nback ed\nbo li\nwei ght\ncou ch\nsu res\ns its\nshri mp\nla gos\nauth orities\nos ity\nhol ly\ncompu ting\nfac tors\nab e\npan els\nram ad\nsent ence\nmissi on\nhol m\nr b\nd ads\nshang hai\nmon ey\nshe ets\nsk ate\nthre w\ncup cakes\ninfin ite\nl is\npractic ing\ness ay\nka i\nas ci\nmo b\nu gh\nhol mes\nre gg\nik h\nmo ck\ncollec tions\npe p\no va\nsal t\nnan dez\nco y\nthre ats\ntex ts\ncin nam\npregn ancy\npen ding\nstam p\nflow er\ng is\nagre ed\npay ne\nro ver\nph ra\nsof t\nf fin\nfa thers\npass engers\naw ays\nal a\nh es\nli van\nin s\nsamu el\ningu i\nh of\nj j\nchen nai\ncat al\nom ic\nhe ath\nni ece\npump ed\nintegr ated\nare l\nno m\nproduc tivity\nwan ting\nvis a\ndi ana\ntw il\nit v\ncam ps\nro wing\nd ley\nblack and\ngu ards\nb ells\nre verse\nvi be\nric ky\nmo ss\nny t\nâĺ Ģï¸ı\nel le\ntro y\ncu dd\nev an\nwomen s\nfo to\nmi stakes\nwick ed\nmi l\nc led\nme mes\nco smo\nschol ar\nren o\nðŁĺ Ģ\nv ents\n# âĢ¦\nterrori sts\nca sey\ncardin als\nðŁĺĬ ðŁĺĬ\nvenezu ela\nbol a\nliter acy\nt w\nen o\ncon tains\nau stin\nfin anci\nev an\nhar vard\norigin ally\nchev ro\nher ald\nnott ingham\nmanag ers\nâŀ ¡\naccep ting\nwal sh\ntutor ial\nentrepreneur ship\nyach t\nrequi rements\nglen n\npe de\nunfortun ately\nach ing\ndais y\ngi an\nnight mare\nâĿ Ĺ\nr ina\nb art\nema ils\noppo site\nwho m\nsa ke\npu zzle\nda shi\npar ty\nblan ket\nbus es\nlo re\nbeau ty\nreas on\npun jab\nwinds or\nfunc tional\nexi sting\nhel lo\ngli mp\ncon vin\nla k\nscre aming\nrebec ca\nbli ss\nnorth west\ninfin ity\ncosme tics\npul ling\ncoffe e\npl ing\nop ho\ncolom bia\ninterior design\n( +\nemo tions\nsa c\nsun glasses\nsav es\nd f\nsix th\nal y\nðŁĺ »\nde en\ndev ast\npolit icians\nlac rosse\ng u\npe i\njav a\ncomb ine\ncoal ition\ner ts\nsurvi v\nch ad\nstri an\nn n\nde vi\ncoun c\nconcer n\ncontro ller\nbre ast\nj ury\ntu m\nintroduc es\nla di\nmobi le\nal z\nste ady\nnur ses\nh acking\non line\noce an\nðŁİ Ħ\na am\nju ven\nic c\nlouisi ana\nar te\nstreet art\nis on\nwn s\nfr m\np anda\nno ir\nmain tain\ndel ay\nsymp toms\nthor n\nge ome\nter n\ncarri ed\np ru\npan or\nas sy\nper u\nclou d\nsp ra\npe di\ne ste\ntag ged\nðŁĺ Ŀ\nshado ws\nnaz i\nا٠Ħ\ncor ri\nâĻ¥ âĻ¥\nj ad\nðŁĩ «\nform al\nspo ken\nðŁĮ ŀ\nenjo y\nlo pez\nout look\nin ho\nw ander\nÙ ħ\nma ya\npe e\nd ine\nãĢ ij\nbrief ing\nsuppor ter\nar ily\nght ers\nnatur ally\ndoctor who\nj en\nv ar\nnew year\nre se\nsi mm\nre x\ncon sequ\ntomat oes\nbur st\nbra vo\nbur gers\ncr acking\nnor theast\nbi om\nmush room\nmar que\ndou ble\nni er\nv ag\ntw enty\nkey board\nwin ni\njama ica\npar ish\n: -\nmental health\nali zing\nren der\nwa king\nðŁİ Ĥ\ng ly\nna than\nwa shing\nmel issa\njun g\nloy al\nchil i\nsong writer\nguit arist\nbo wie\nneighb ors\nonym ous\nas set\nta i\nhead quarters\nðŁĮ Ī\ni hear\nci gare\nsur g\n) "\nre pl\ndar ling\nðŁĻ Ħ\nz ak\nsa re\nãħ ĭ\nmic key\nware house\nmass age\nine es\ndid nt\ni w\nhur ts\neng aging\nmag ic\nwomen in\nk itten\nmor s\nc art\ntit ans\ncolle ague\ncompe ting\ner an\nk hal\nmar ble\ndem and\ndel ight\net ary\nbli zz\nlou ise\nm ls\nfini shes\nexperim ent\nconduc ted\nelectr onics\nitt ers\ncar ing\nwh ats\nsym bol\njun g\ne cu\npi x\ncon text\nchar ger\nðŁĺ ĩ\nre ig\nfra g\në ĭ\nch ad\ntru e\nker ry\ndef ending\na int\nau ton\ncheck out\nbar nes\nless ly\nd t\nm me\nclou dy\nsecond ary\nare z\n_ :\napp a\nconst ant\n" )\nve ts\njo b\ni ent\nðŁĺŃðŁĺŃ ðŁĺŃ\nm j\nfren ch\ndi ver\ndavi es\nhh hh\ne book\n๠ī\nmar iti\nbree ze\nsusp ended\nmat o\nvi et\nra hu\nse i\nbol t\nen ary\nle is\nkar l\nfr amed\nexpla ining\nab c\nde aling\nnat o\nja ke\nexp and\nleon ard\nestabli shed\ndu b\nar men\nel led\nvoc al\nnichol as\nori ent\nk yo\nillustr ated\nah h\ndanc ers\nmilli on\nge ta\npo pp\nas u\nmur dered\ngi ble\nsto ked\ngri ffin\nmaxi mum\nadri an\nen counter\nther o\ndavid son\nðŁį »\nholi day\nev o\nasse ts\ncar son\nmemor able\nâļ ½\nob am\nrepresent ative\ncb d\ntr icks\nvo gue\nvo ice\nmm mm\nsebasti an\ncli f\nath y\npar alle\nðŁ¤ ·\npa k\nev acu\ne ats\nا Ø\ntou ched\norgan ised\nspir its\ncan ad\ngui ded\nframe work\nðŁĮ Ł\npe d\nnatur al\nag ar\nreplac ed\nanch or\nti t\nsha h\norgan is\nsuper ior\nr n\nch ro\neric a\nst ill\ncor on\nchu ck\nloc ks\nor gan\nro sen\nsc am\nben ed\n/ #\nke en\ntre vor\nvamp ire\nsor ted\n! \'\naf ford\nin tro\ngr ace\nðŁĺ ľ\nsau r\nkick starter\ninflu en\nv u\ny up\npo c\nðŁİ ¥\na ar\ns ang\ntre k\net sy\ntb h\nscre am\nchevro let\npix el\nshepher d\nan or\ngabri el\ntw ood\nsd cc\nme ters\ndevelop ers\nclo sure\nv w\ntwit ch\nì Ĺ\nse oul\npr ice\nho g\nn ish\nhill ary\nscrat ch\nin cen\nwag on\ndis ability\npan ther\nch ats\ng d\nwit z\nsus sex\nl ate\nden mark\nger ald\ncancel led\nnet te\ni x\nnav al\nbap tist\nte t\ny ad\nma th\nho y\nr andy\npo int\nintel lec\nfru its\nw ool\ngu in\npr on\nthe ft\ncon dem\nmar ry\nn ola\narchitec ts\ncin cin\nroc kets\ngentle man\nex plan\nt ate\ndo e\nra ises\nwild life\nw l\ninsi der\nblan c\nw p\nfor sale\nny c\npo well\nunbeliev able\npen s\ngoo dies\nmu stang\np ens\nst ays\nsqu ash\nxox o\nnear by\never ton\nco co\nle agu\nk han\nstu d\nsouth west\ncon struc\ns worth\ncro atia\nle a\nsu ms\naim s\ne an\nvan ess\niti ous\npa thy\narc ade\nb end\nsugge sts\nsac ram\nroy als\nri er\nem ir\nin cl\nan k\nclar k\nri ght\nvac c\nठ¾\ntan e\nli b\nu sc\nsal es\nhu h\ns ally\nver a\np ga\ngro ws\ndru m\ntre e\neth ics\nsug gest\nis ab\nse aled\npre viously\nanim ated\nab du\nri ses\nglo b\npre dat\nscar f\ndel ic\nom ar\nll i\nsx sw\npy thon\nne bra\nfun k\nreflec t\npav ilion\ntic ally\nch asing\nbak ery\ninva sion\nko h\nbeliev ed\nco hen\ncon qu\ncra fts\nnat i\ncle ver\ngovern ance\nsam ples\nfa ils\nâ Ķ\nti mo\nr itu\nstri king\ninclu sive\nsho cking\ncan t\nrequi res\ndra wings\nภŃ\npurch ased\ndu m\nz ach\nwar ner\ncon sole\nman sion\nfoun tain\ncircu m\ne sh\nis land\nmil k\npro fits\nhali fax\nri val\nâľĪ ï¸ı\njen ny\nsand ra\nny e\nk elly\ny al\nqu ad\nno s\ninste in\nfin alists\nmid fielder\ncu e\nexcep tional\na an\nsa pp\ngett in\nsa a\nf ati\nsl ice\nvol k\ns wal\nla sting\nsum mary\nit as\nsm o\ns z\nâĺ Ĩ\nip l\nfl ames\nene ws\nha v\nhoo die\npitch er\nwin dy\nre vol\ncentr al\nton ite\nðŁİī ðŁİī\nsol ved\nmil wau\norganiz ations\nwee ts\nre fin\ns th\nãĥ ¼\nel in\nton a\ncinnam on\nðŁİ ¨\nðŁİ ģ\nron aldo\npen insu\nome ga\nel ds\ndesig ning\ne igh\nblu et\nben z\nnu g\nash a\nrobo ts\nsu dan\nchoo sing\nen do\nser ge\nclo sely\nhand y\nfing er\nbe ing\nar te\nsurvi ved\nfl ame\nmile stone\ngu t\nd war\nfu tures\né e\nel o\nfri dge\neli c\nou ch\nu b\np v\ntit an\ncol lar\nst ation\nnev ada\naur ora\nr d\ndun can\nâģ ł\nbri en\nmar sh\nÐ ¾\nto tal\nch ry\ns ers\nsu ffe\nra chel\ncolle ge\nto days\ncour ts\nch it\nre united\ngym na\ngen esis\nbe side\nre presentation\nch ant\ncollec tor\nra k\nath ens\nni gh\nmun ich\nlangu ages\nfl u\nparticip ation\n__ _\nc v\nspec trum\nso da\nco ver\nrefe ren\nab bo\nap a\npublic ation\ned m\nmon ica\nar my\nðŁļ Ģ\ndiv or\ndr y\nstre ams\nrobo tics\nci der\nbull ying\nappro val\nsto ke\nplat forms\nsier ra\nex tin\ni b\nha yes\nsucce ed\nsuff er\nat ically\nda i\nlyn ch\nh ound\ndel ines\nack now\nd ated\nexclu sively\nhe res\nfac ilit\ndam aged\nchar ter\nla kers\nfal con\nunve iled\nwel ove\ne ase\npati ence\nl one\ngent le\ngene tic\nproduc ing\ng our\nshann on\nbil ities\nzimbab we\np int\ndau ghters\nliter ary\nbel le\ncl am\nsurroun ded\nk any\nne il\npir ate\nrang er\nhb d\nnat alie\nbel ong\nolym pi\nemb assy\nsc ol\nen er\nak in\nlo ren\nb h\n: /\ndi va\nden im\nhi pp\nðŁĩµ ðŁĩ\narn old\n? \'\nwe ren\nem power\ndis abled\nman or\nrasp berry\nb af\naw ful\ndru mmer\nkar dashi\nn ash\nmachine learning\nch u\nrebel s\ntim ing\nmon roe\nton gue\nran ge\npup ils\nre ss\namaz on\nb z\nhar ley\npal mer\nballo on\ns ings\nic ec\nj b\nc ers\ng ps\nwhi st\nri se\nl t\noo oo\nc attle\nshoo ter\nvod ka\nuc l\nmt g\nle sli\njon as\ndi spo\nat ric\nste in\nvintag e\nfir ms\nflo yd\ncow boy\nsoo oo\nis aac\nwar craft\ndisney land\nbeauti ful\nbe am\nfranch ise\nbu n\nk ag\nan on\ntur bo\nswee p\nmade in\nkar achi\ndete ctive\npenn sylvania\ncontro versi\nvitam in\na side\nchron ic\ndescri bes\nremo val\nha h\nap er\nten ed\nu to\nbad ly\nmir ac\nf ry\nye a\nin jec\nther mal\ncomp act\nth or\nte ed\nur gent\nl ite\ng illi\nsop hom\nic o\nche m\np m\nfor k\nfre ak\nch ak\nrecipi ent\ni y\nni k\nmodel ing\nc ans\nðŁı Ģ\ndel ux\nse am\nsurviv ors\nrad ical\ninvestig ating\nreli able\nf m\ntur t\nligh thouse\nto ol\ngo wn\n) )\nbo ts\nauto graph\na id\nbu ffe\nh mm\nhorri ble\nssi onal\nann i\n๠Ģ\nk its\nsch i\neter nal\nhu ss\nsens itive\nr u\ntast es\nchec ks\nim o\npor tion\nsk ate\ne den\nhalf time\nfri ed\nri hanna\nti se\nfl ick\nca in\ns gt\nâľ Ķ\nsh au\nsta ined\nra ffle\ndro ve\nsal man\nprinci ples\nsh o\nar u\nje ss\ngu ine\ngar bage\nmy an\njel ly\ndis ru\nz ia\nq ld\nent ries\nla v\nfle w\nad mit\nobjec ts\ncomp are\nny times\ncann es\np n\nsuff ol\nro c\nd ana\ne gg\nhi st\ncoun sel\n\' !\nphy si\nimag ination\nad just\nexplo sion\nplym outh\nhor ror\nelli ott\nbour ne\nde x\nbre ed\nau dio\nlob ster\ndisappo inted\nnation wide\n( (\nincre ases\naustr ali\nce dar\nstar ing\nrac ial\ne is\ng mt\nvisi ons\nstay ed\ndiscu ssions\nde an\ncur tis\nmai den\nstel lar\nhapp iest\nh wy\npre season\ncar av\nmon days\nhospit als\nglimp se\nschol ars\nja i\nter race\nann a\ngoo se\ngra ded\nlot us\nhun g\ngrocer y\nstam ps\nemper or\nsc oop\nin ser\nc as\nexist ence\nhe al\nfal cons\nmar vel\nreduc ing\nterri fic\nmagne tic\nperfor ms\nbar re\np us\ntre ating\nic on\nw h\ndecla red\ntra uma\ndo d\ncome dian\nnik on\nbu gs\nas m\nmont gom\nibi za\ncomprehen sive\nha s\nsan ti\nfellow ship\nda sh\np sal\nlouis ville\nsp y\nfau lt\nd the\nfi led\nvi sta\nde sc\nfe ars\nyou tu\nsp s\nes p\nri g\ncri me\nber ger\nwonder land\nk ent\nin formed\nstev ens\nmy th\nast on\nir i\nvisit or\nat ri\nproduc ers\nal la\nperson ally\nsepar ate\nagen cies\naf ri\nil an\nspo ke\nn ina\nsqu ad\ndi ves\nde pend\nli v\nfier ce\nenter taining\ncha in\nsc at\nbor ders\npal ette\nsp ro\nos is\nder by\ntobac co\nzi o\nwilli e\nju vent\nzoo m\nhol y\nenti rely\naf e\nmart inez\nbe ds\npe a\nbull dogs\nðŁĩª ðŁĩ\nib m\nne on\nethiop ia\nteam mates\nplan ting\ntw er\nany time\nfor bes\nó n\nrun way\nner vous\nro ger\np ile\nch anc\napo caly\nu w\no i\ndr ought\nterrit ory\nbr ick\ncre atures\ngo in\nw aff\ngre n\nsou theast\nje an\nam bul\ned ited\nstra p\nc v\naar on\nãĥ» ãĥ»\nt su\ndescri ption\nkin dly\nclu tch\nim mer\nen or\nwomen sday\nor ange\nra g\nob vious\nhy der\nchann els\nman go\nme yer\nra ining\nge tty\npil gri\ncoordin ator\nup load\nninten do\ndon uts\nsan chez\napp arel\nj r\nzz i\n, @\njeff erson\naccessi ble\ngreat ly\ne id\niniti al\nbudd ha\npar is\nma scot\nâ¬ĩ ï¸ı\nsch war\nsi ri\nsp inning\nmortg age\ne cho\nend ange\nge dly\nchlo e\nenh ance\nkar nat\nk ry\nexplo res\nðŁĴ ģ\naf fair\nic als\nall a\ndar t\ndolph ins\ndiffe rences\nsquir rel\nau gh\ndr ones\nell en\nre store\npa w\nun for\npi ke\nhil ton\ncolla b\nconsu mers\nco inci\nout comes\npp p\na q\ncoup on\nli est\nsi ms\nk ho\nav es\nspo on\npu dding\ncor byn\nhat ers\nex ams\nsla ve\n. !\np sa\napp les\ntam il\nse d\nco ke\nzz o\nlo sange\ncar bon\ncla ir\n... )\nk hu\ncra ig\nexplor ation\nsanctu ary\nsu e\nal way\ndemen tia\nwon ders\nsuper hero\npakistan i\nbrown s\nbluet ooth\nlo cker\nmar c\nev entu\ndelux e\nrodri guez\nâĿ¤ âĿ¤\nro bb\nðŁĴ ¦\nlin ux\nten s\nintellig ent\nse ed\nvo ter\ns ler\npe aks\ninter n\nteen age\npeninsu la\nhand ling\nti e\ncou sins\nwen dy\nme e\nà¹Ģ à¸\ndin o\nðŁĴ °\nðŁĺ ĥ\nze e\ns bury\ntrage dy\nb k\nbo re\nz in\nwar ns\nidi ot\ntou ching\ncontin ental\ntac os\nsaf ari\nwa shed\npo dium\nmorri son\nfore sts\nc bc\nal on\npartic ular\nbe ads\ninv ented\nlo ch\nli ghter\nwhere ver\ni de\ndocu ments\na we\nk r\nno where\nmin er\nst it\nro x\ncontribu te\nhar dy\ncl an\nob ject\nca it\nðŁĴķ ðŁĴķ\nhapp ier\nvege tables\nt art\ng ag\nnom inee\nheav ily\npan ic\nj d\nthere sa\nat m\nu ph\ns fc\nsu ri\ndrin k\nn al\nre vel\nk l\navoc ado\nnom ination\nma donna\nshar on\nmalcol m\ncontrol led\nsh ers\nrevi val\nlegis lation\nshoo ts\nn in\ncomm entary\npro s\nhuman rights\nstr anger\nmit ch\npipel ine\nleg ally\nth u\ngil bert\ntol l\ngran ted\ngh s\nir anian\nrefre shing\ndu k\nab i\npri me\njose ph\nmo sa\nstati stics\nproduc tions\nmer ry\npat el\nsa x\nhuman itarian\nstruc tures\ne missions\ntown s\nfre el\nster ing\nrat ings\nalle gedly\ncab in\nst l\nw ade\nfl yers\ntri m\npromis ing\nz u\nbal lot\ncompar ison\nfree ze\nou ter\ngreat ness\nas sign\nsnow y\nr ale\ntor ies\nmed iter\nkno ck\nconsult ant\ncincin nati\nanaly st\nsc oo\nje ws\nappro xim\npu re\nportra its\ncy rus\nation al\nlo ans\nacqu is\nel u\naccep table\nuni on\nwater color\nru st\nbatt les\nper fu\nseas onal\nser ial\nmind set\nri ot\nfel d\nenni al\nclo set\npri est\ntan ks\nint l\nscre w\nbu m\nab dul\nou x\nexpla ined\nric a\nimag ing\nlaw yers\nbu ried\nãĥ»ãĥ» ãĥ»\near l\nâĢ ķ\nl ton\nresto red\nstri pes\nfo ss\nde mands\nste aling\nalex is\nmun d\nak er\nur us\nwar dro\nhu gs\ngen re\ne go\nÙ Ħ\nparticip ated\nbab es\nban quet\nti ous\nhe mi\nds b\nlo st\nmilwau kee\njen ner\nge m\nou tra\nlo ses\nid i\nre ps\nðŁİ §\nregu lation\nfla w\nf ang\nvibr ant\nram p\nra ins\nwell being\nso viet\nvie wers\nde po\nlibr aries\nbi go\nser y\ng ill\nde struction\nco z\nc x\nbri dal\nal ds\nplan ted\namate ur\nlu d\nche ering\nshow cas\npro file\ni u\nver tical\npack ers\nwiz ard\nski p\ns light\nbe au\nair ways\nmu ch\nre ra\nðŁĮ Ĭ\nab sor\npati o\npack ages\ns ells\nment ally\nðŁĺ ¢\nreyn olds\nk are\ntri bun\nwal t\nkn it\nta ste\nsur rey\nboun ce\ncre ature\nb are\nbet ting\nsu re\nmi ley\nlaugh s\nal ore\ncy n\nt l\narti st\nann ah\nwar mer\ndynam ics\nlunch time\nmariti me\nvulner able\nðŁĴ ĥ\nwol ver\ndur ham\nconst antly\nam in\nsi bl\n: @\nbul let\nk ach\nangel o\nwil der\ndoo m\ndesk top\nlaw suit\nk ca\nhen derson\ninv iting\nbet ty\nta wards\nra fa\nle aked\nand i\nge ms\naf l\nvel o\nmediter ran\npro be\nto tten\nsteph anie\nsn ation\ncom be\nq s\nover come\nassas sin\nra v\nfil ip\nwinni peg\nsh il\ndetermin ed\nk as\nou tre\nregre t\ngui des\naa a\nðŁĺ Ī\nwi ves\nmani fe\ner ly\nsm y\nsh ima\nx ing\npix el\njac ob\nac commod\nto y\non o\npo o\nti er\nan swe\nðŁĴ ģ\nro sa\nle ase\nbel ongs\nth ar\neventu ally\nnei ther\ngo a\nski ing\nat ra\nag h\nbroad casting\nf ury\npy ram\nd ice\nvolk swag\nwom ens\nprovi der\nbom bs\nmiss ile\nwhi p\nd ick\nnor we\nback up\nel der\nmat ure\nconcer ts\ngi ous\nsque e\ngood morning\nbra ves\n^ _\nau ssie\nlun a\nmal es\nhe ck\nfor tn\nrome o\nsteel ers\np n\npe er\nre presents\n «\nkat y\nmigu el\nrequ ire\ncha ins\nl ur\nimmedi ate\nti mber\nâĸ¶ ï¸ı\nadvoc acy\nex port\nan z\ntiff any\nauth or\nðŁİ Ī\ndu des\nchil ly\nhi d\nhar m\nbu g\nmon ster\nterri er\ntu c\nstory telling\nta k\nin ti\nimmigr ants\nb is\nreach es\ncom passion\njohn ny\ncontribu tions\nðŁIJ ¶\nmechan ical\nimpre ssion\nran ks\nko be\nmen ting\nbloss om\npab lo\nbuil der\nbom bing\ntw el\nsul livan\nom o\npe te\nde mi\nku dos\nw bb\nt gif\nmass ach\nneighb or\nche fs\neng ines\npun e\nga ined\nphan tom\ns days\next end\ngr an\ncent ers\njac qu\ndat asci\nsleep y\nel vis\nanswe red\ns lot\ncon y\nflexi ble\nti ally\nle tics\n% ,\nandre ws\nsi ble\nmom ma\nvin o\ndo x\ninvit ational\ntwil ight\nj ade\nill ery\njoh ns\nf ou\np v\n-- ->\nbreak down\nbilli on\nprin ter\nmon d\nc bc\nmag gie\nlegi on\ndu b\nkur t\npo or\nparen ting\nregi ons\nbikin i\nbe ware\nsi onal\nau burn\nkid ding\namp les\nsp an\ncon tempor\nc ic\nha bits\nak o\npre fe\nbud dies\nit z\nem ily\nperson nel\nmoun tain\nver sus\nðŁĺ ¬\near ning\ns ink\ndar i\nu u\ns win\ni ster\nbru tal\nn ac\nkat a\nclo th\nam and\nðŁĶ Ĺ\nne o\nalu min\nweek ends\nnebra ska\nco des\ndelay ed\nbrun o\npro ven\nin c\ni ght\nfl an\nor o\nlam bert\nregu lat\nw f\nmassach use\nkardashi an\nbern ard\nfi esta\nvolcan o\ngrand pa\nanc a\nd re\nst itu\nmean ing\nfo am\nau ck\nat ed\nr l\nhot el\npers ons\ndy nasty\nell or\nma i\nam ne\nsty ling\navi er\ne g\nvege tarian\n, âĢ¦\nfoun ders\nsta in\ng d\ncy cles\nsky line\ntrac tor\nexi sts\ntra l\nkid ney\nmar il\ninst ag\nse tte\naddic t\ntri angle\nflash back\ncontroversi al\nz on\np ins\ni as\ntr ay\ntown ship\ndeleg ates\nsp am\nh ms\ncr ane\npeop les\no lo\nfac tion\nbut es\non ica\ndeleg ation\nnew profile\neli er\nmc a\nw and\ng ely\nlosange les\nber ke\nti ve\ndis rup\nzz a\ncas a\njor dan\nford shire\nga thered\nic hi\natten dees\nà¸Ń à¸\npe ppers\nco in\nbour bon\nern ity\nro tary\nbehavi our\njere my\nteam work\ncompli ance\ntre mend\nðŁĩ §\nbu hari\ncam bo\nbu yers\nha gen\nbu ds\nbay ern\nmon te\nsm ells\nan za\nath lon\ndescri bed\nwork force\ngi ving\nap i\ninvest ments\nda il\nsel ena\ndatab ase\nth um\nmor tal\nstu dent\nbu yer\ndo ver\ngar ten\natt le\nloy alty\ngen oci\nholo cau\ntheat ers\nru ling\nven us\npat ent\nch un\nab by\nawa ke\nmass acre\nbang alore\nbreak ing\nsimm ons\nju sti\nhal e\ned chat\ngg les\nhaw k\nmar king\nhead lines\nstro m\nco ve\nbreath taking\nmed als\nhair cut\nchrist ine\ntele graph\ngujar at\nju ra\ncan e\nsho re\npropag anda\nmu eller\n.... ....\nsa vi\nstom ach\nthro ws\nta b\nwar m\nj ong\nreno wned\nhi r\nra is\nmush rooms\nguaran teed\nbo a\nm j\nrevolu tionary\ncerti fication\nbru ins\njo in\nw es\npas sport\nc g\nsex u\ncap able\nw v\nton es\njac kets\nac compan\nspin ach\nfore ver\nbla ir\nwat ts\ng l\ncou ples\nprairi e\nnewprofile pic\nlogi stics\nmassachuse tts\njagu ar\no id\nwe al\nunder water\nmo z\ny i\nma ths\nmyan mar\npre ps\nsuffe red\ntr ace\nwal i\nah hh\nbor g\nst itch\ncu lin\nreal ise\ninfe ction\ndiscrimin ation\nsh ame\nan kle\nhu mid\ny t\nbrac ket\ntru ck\ntri u\nea ster\ncommun ity\npost card\ninvol ving\nty ler\ncar amel\nover view\nex amples\nintegr ity\nbase ment\ninstru ments\nani um\nat us\ngh er\nlaun dry\nachi eve\ngen eva\npr icing\nhyder abad\nbeli ef\nme ta\nj aw\naccoun ting\nlead er\ncristi ano\ncou ture\ncy p\nvis ed\n, ,,\nk nu\nh ick\nbreak er\nbr am\nra b\nmo or\nham as\ngradu ating\npupp ies\nak h\nta h\nach es\nri e\nop ini\ng ta\nre ign\ntra gic\nre ver\np ill\npine apple\ntou ches\nda re\nle ys\nil o\ninter iors\nsc outs\nbar t\nen zie\ndon o\nbro ck\nchristi ans\nense mble\n ·\ncine mas\nnew port\nair line\nwin ston\nle igh\ncont ents\npre scri\nur ge\ntr out\nfic ally\nil ia\nsub si\nare r\nâļ¾ ï¸ı\nw ounded\nðŁĻ Ĥ\npe pper\nðŁĴ ŀ\nfit ted\naf f\nre sur\nthursday thoughts\nz ero\narchae ology\ndi v\nje e\ni on\nawa iting\nco zy\nbeauti es\nbal d\ndat a\ngri zz\nstal k\nkin ds\ncle ared\njess ic\nregu lar\nali ens\nplac e\nbo s\nbi zar\nthisi s\nðŁĴ Ģ\ntotten ham\nma fia\ns lam\nari ana\ncar roll\nback pack\ncare y\nuni v\nr g\npe p\ndig it\ntatt oos\nag on\nvolunte ering\ndiffe ren\nconsu mption\nka thr\nhead phones\nt shirt\no b\nele ment\nre tail\nsh ru\nal gori\ncontain er\nconsci ous\nfi l\ncom ing\nra sh\nu rope\ndef ine\ngi or\nfemini st\nflow ing\nrout es\ngl aci\nfer t\nsomer set\nant es\ntwee ps\n$ $\nh our\nendange red\nyear sof\nro h\npo pped\nbac king\nba sil\nbra ke\nmon aco\nlgbt q\npra gue\nut ility\ncas si\ngate way\nhaun ted\nsch ul\nðŁİ µ\nshou ld\nwalking dead\ncomple ting\ndann y\nmontgom ery\npengu in\nss i\nmer chandi\nðŁij ij\nchur ch\nh ates\ncap tain\nbrea thing\nce t\nfair ly\napproach es\ncompan ion\nsurpri sing\nkany e\npe y\nhin di\ntarge ted\nlor ds\nde ut\ndi gging\nger man\nru t\nener gy\nclose st\ny un\napo logi\nภ±\ns ack\nru p\ndd y\nport al\nd ough\nb ats\nðŁĵ °\nat ur\ngraph er\npi res\nmo tors\nðŁĮ ¹\nj c\ndan g\ntu k\nclu e\nus c\npag e\nd less\nbro ws\nju s\nad ing\nre marks\noo m\ncar dio\nste fan\narm strong\nâĢ¢ âĢ¢\nni est\nbelgi an\nbi op\nso y\nlo f\ní ĥ\nq t\nflashback friday\nce e\nģ à¸\nwre ck\nmar ines\namend ment\nwardro be\nvo y\nbur ned\nguit ars\nra inf\nli fel\nssi l\noun ce\nexter nal\nc key\nme sh\nshe ikh\ninv itation\nsugge sti\npop corn\nphenomen al\nan onymous\ntun a\nchic ago\no val\ndel y\nloc als\n( &\npro f\nno vel\nfin der\nspar ks\nla ven\nin fu\nnic ks\nqu ant\nra e\nexe c\ndist ingui\nst ances\nmu tual\nsh al\nunve ils\nedmon ton\nzan ia\na dio\nvie wer\nbrad ford\naudit orium\nqu is\nre act\nhtt p\nl ero\nchee ky\nimpac ts\nta k\ned t\ndesper ate\nt ay\nì Ħ\nsett le\nbar gain\nresu me\nun ite\nthro wn\nke st\nse ys\nmar ching\nam it\ndecl ine\nsch ar\nme tr\nstan ford\nlin ke\nber ra\ndol ls\nrug by\njam i\nb or\nroad trip\ndino saur\nmi k\nsun der\nre m\nb k\nover seas\nnau ghty\nimple mentation\niam srk\nlun cheon\nfir ing\nmi ami\npere z\nthe e\nz on\ngi fted\ncon version\nceram ic\n¡ ï¸ı\npe dro\nì Ĩ\nv ick\n! @\nhe ed\nsi d\nb w\ndocu ment\npl un\ngr ants\nfant asy\npredic tions\nvali d\ncar ved\ngradu ated\nðŁijį ðŁı»\nnation ally\nch y\naf l\nre sso\nblan k\nri vals\nj ig\ne ties\nom ics\nune mp\nb ound\nsk o\ninspec tion\npar al\nhigh s\ncri sp\nb ans\nob a\n[ @\nco spla\ncostu mes\nrec all\nmou th\nni gel\nb ts\nter a\nko v\ndo cs\nwest minster\ndic t\ngra vity\nkar i\nro gue\nt ted\nwar k\nida ho\nw end\naw i\nqueen sland\nproce sses\ncli ffe\nm ick\ncom pens\nop ol\nthe y\ncl ari\nwiki pedia\nsalman khan\nhaz ard\npre ston\nswee test\npd f\nche es\ntr ilo\nsouth africa\nbur nt\n( $\ncon tain\nt p\nsub mitted\nsound cloud\nat u\nre z\nword press\ncorru pt\nn f\nma ker\ní ķ\npar as\nadv ent\nri al\nca fe\nfo ssil\n!!!! !!!\nco ws\nc j\nsp ur\ninstitu tions\nland mark\nent it\nre ut\nh is\nalz heim\nwe mb\nregg ae\nmo squ\nst at\nidenti fied\ndeal er\nre am\nre land\nten sion\nðŁĩ ©\nwra pping\ndeep er\nfr at\nred dit\nar is\nmoroc co\n.. "\nb low\nma pping\npri orities\ning a\nswa p\nre wards\nconspir acy\ncreati ve\nc j\ncongre ssional\nvau lt\nple x\nsophom ore\nshad ow\nele ss\nðŁĺ ħ\ndar ts\naldu b\nanno ying\npro ps\nn as\nalumin um\nh bo\noffen se\nj ill\noni ons\nla ur\nta e\nhar dest\nsh ro\nga ining\nmeas ure\ned tech\ncyp rus\ntar a\nang eli\ncar lo\ngo on\nall i\nim plic\nju pit\nresil ience\nha il\nbal anced\n) ...\njoy ce\ngr a\nth eli\ndefin ed\nshi pped\nmain ly\nmin a\nl m\nsac ri\no ber\np im\nclaim ing\nent ers\nco rey\nbo k\ncri ed\ncool ing\ndani elle\npharmac y\nthor ough\nca ke\nk lo\noutre ach\nz ens\ndigital marketing\nval ent\nsn p\nher b\nmr w\ncaf é\ncap tures\nno tre\ntriu mph\npan cakes\ncu mber\nspi ke\nd ation\nbi gg\nsp er\ncrit ical\nam al\ntoo th\nfoun ding\na stro\n\' #\nquan tum\nth ames\nun c\npri de\nair bus\nkno cked\nun defeated\nmediterran ean\ncal cu\nclo wn\nsens or\nham mer\nfor give\ncu shi\nber ry\nmaje stic\nelec t\npolit an\ng ta\nk ari\nbur ke\nsea hawks\nvolkswag en\nre i\nlandsc apes\ncas u\ngrand father\nlist ened\n/ /\nstar trek\nrainf all\nfur ry\nvi er\nstar k\nrif le\nff a\nleg es\nhillary clinton\nmin us\ncorrec tly\narchitec tural\npre ce\nup side\nbox er\nðŁĻĮ ðŁı¼\nis ai\nde t\npro vo\ntis sue\nspoo ky\nve led\nre con\nprospec ts\nque bec\nâļ «\nig no\nanat omy\nshap es\nw p\np interest\nhor e\nan es\npick up\nti p\npra desh\nhu gh\nco e\npo k\ngram my\nwell ington\nsti gate\nri gh\nlea p\nking ston\nscen ic\ngo sh\nv ani\nau g\ns ary\nzi er\nbure au\nlin son\ncon te\nfra gr\nall an\ng aw\nlan a\ncolli sion\nsurve ill\nren ais\nar range\ns ali\ndo in\nbr ance\nbren dan\nour se\nin coming\nsuspen sion\nà ´\nl la\neduc ators\nin tri\nda e\nbio graphy\nbul gar\nvilla in\ngo thic\nrw anda\ne w\nmay or\nmeet up\ndemocr at\nmor gan\nsu dden\nte sco\ncar rot\nbom ber\nmck in\nre ne\nfun day\nagricul tural\nhaha h\nshow time\nform ing\ncol a\nscor pi\nquo te\npo ppy\ns life\nd az\ntu b\nne n\nmo t\nðŁĺ »\ns ore\nelder ly\no ve\nskin ny\num i\nanc o\nman ship\nwe re\ng v\nk ah\nfol ding\nne at\nsamanth a\ndan ish\nuk rain\nhumid ity\nnu tri\njak arta\ncand les\noooo oooo\nat ile\nstreng th\ni bra\nbap ti\ncharle ston\nfr ames\ngirl s\nclear ing\nglu ten\n# #\nsuper natural\nju bi\nph one\nhe in\ndr un\nle ak\ninvest or\ny er\ndom ain\nball room\nmi sh\napp li\noff shore\nbla ze\ndor o\nâĺķ ï¸ı\nwin ery\nshar if\nad ore\nn ir\nsaf er\nsi gh\nas cri\nstrong ly\ntrac y\nck er\nol l\nfaith ful\ney ed\ndeli ghtful\nvis m\nkarnat aka\ntit an\nwh ar\njer seys\nre fur\nheav en\ngri p\npan ama\npre li\nglu ten\no dd\ncont ent\npon ti\ntion ing\ne commerce\nfeder ation\nflaw less\nge ar\nti res\nby r\npol ice\ncu ban\ntri butes\ntic ul\nchur ches\nnur sery\ndi aries\nmuse ums\nsnapp ed\ni van\nwi ght\ntouri sts\nramad an\nt rent\nprophe t\nwon dered\nfocu sing\nhi d\nic ons\ni q\nambul ance\npi st\nfun niest\ntime less\nsr ilan\nbu ys\nki ds\ncolour ful\na shi\nch ir\nmu m\nðŁĵ ļ\nlet ter\nx en\nreut ers\npre serve\nin ting\nste p\nfu ji\nuni ver\ni u\nshow down\npo ems\nsurveill ance\nsuspec ted\nta e\nsol ving\ntom b\nmother sday\ncar pen\nrecru it\npil ots\nbro c\nmix ing\nfri days\nty r\nrepresent atives\ntra pped\nabdu l\nfree style\nclu ster\nâļ łï¸ı\nk d\nsk ill\npit t\nex o\ncommer ci\nmuse um\nloc ally\ng ina\nno bel\nimmun e\nfr ac\ncap su\nmain ed\nattemp ts\nbull dog\nbe spoke\nsing ers\nsp elling\nseg ment\nnat ures\ntic k\nlip stick\nclean er\ngett able\npreci sion\nâĢ¼ ï¸ı\nth ood\nre ef\nno pe\nbill y\ndi gi\nmu si\nri val\nfigu red\ntal ity\nsun ny\nber k\naw ww\nawa its\nun real\nco pen\nasy lum\nex otic\nbu en\nmo ck\nen able\narch y\nfr a\npla stic\nal mond\namp li\ndispla ys\nabbo tt\ns me\nx p\nðŁĻ ĥ\ngraph ic\ni ved\nmar a\ncau tion\nlea ks\nen berg\nul u\nunic orn\ncann on\nappren tic\nðŁĺĺ ðŁĺĺ\nb ball\nwil low\nat ics\nam as\nmanufac turer\ncampaig ns\nport ers\nflo ors\nl su\nty pe\nke j\nhonor ary\nit im\nto le\nmin ecraft\nd x\nma sh\nri o\nconsequ ences\nron ald\ngo ssi\nsuffol k\nmu se\nr bi\nlive music\ni van\nðŁİ ¤\nle u\npatri ot\nman it\nlan ca\nhome decor\nde ar\nsig ma\nti de\nstr ings\nv ita\nsequ el\ntry na\ninve stigate\nbor is\nve gan\nbarri er\nmind fulness\nweb b\nhu stle\nin da\ntan zania\nstr ay\ntex as\nc ag\ndiagno sis\nwom an\ng w\nob session\nl ative\nnu fc\nfl ynn\nmoment um\nsof a\nwal d\nvege table\ntu cker\nsupp er\nse ab\nar ro\nse ag\nven ting\ncounc ill\nsp lat\ncal cul\n.. #\ncom fy\nodi sha\nsto pp\nwar fare\nca es\nà ¨\nco y\nprice less\nin sec\nðŁĺ Ľ\ncontro ls\nempower ment\ndatasci ence\nper pe\ngen ic\ne res\ntru deau\nman o\nsla very\nexpand ing\nma he\nfa iling\ns aga\nphotograph s\ncre st\nre on\nsurf ing\nhi e\nðŁį Ģ\nja e\nfel lows\nsouth ampton\nsol om\nce ster\ntab ility\nhor n\nse ct\nhe e\ncole man\nat las\nexplo rer\nconsul tation\ncopy right\norgani zing\nden ied\nmon keys\nnoo dles\nbr is\nfl or\ndou gh\nbon ds\nsho cked\neco system\ncare fully\nw m\napart ments\ncur ve\nsan diego\nmust ard\ncomm en\ncere mon\ne ch\nru th\nðŁĻĮ ðŁı»\nhawa i\nfil med\nte ar\nas ingly\nca ir\nwat t\ninstru ment\nou tta\nye ol\nriver side\në °\n. :\nnor wich\nalo g\nmigr ants\nnew man\nri de\nspr ink\ntarge ting\nbeli eve\ntor ch\nreflec ts\nper mission\nff man\nene mies\nbas ics\nse ized\nsun days\nle i\nhass an\nen do\nh c\nst ad\nle ments\nkk kk\nnan o\nshar k\nman a\non ic\ntreat ments\near ly\ncollabor ative\nshu ttle\nbran ches\nmis ses\nmained cm\nap ers\nky le\ncarri e\nleis ure\nsh et\nbir ding\nadv ances\nðŁĵ Ŀ\npopu lar\ndi ane\na be\nre war\nneigh bour\nk pop\nremem brance\nplay ground\nru b\nkrish na\ne bola\ninqu iry\nep a\nlu min\norgan isation\nabra ham\nnorm ally\npre ten\njan et\nw t\nðŁĴ İ\nencoura ging\na stic\nbu mp\nsyd ney\ns z\nss ss\ngar rett\nðŁĵ »\nconsul ting\nroman ia\nspo tting\nchanc ellor\nar ma\npresti gious\nðĿ IJ\nt ad\ncry st\ncompe tit\nrati o\ncat aly\nbro w\nj ur\nvi king\ncommu te\ny day\nla yers\ndu mb\nesc al\ngenoci de\nf ill\ngu pta\nste pping\nse i\nfo to\nwild cats\ncol i\nprojec t\near nings\nst r\nge ons\ncomple tion\nb m\ndecor ated\ncraw ford\naf ghan\nsc are\nvisi bility\nhi b\ndirec tion\nstro ll\nchrist ina\nalter nate\ncl are\nsty list\nbe hold\ns ance\nleop ard\nacqui red\nnarr ative\nash i\nthe a\n?? ??\npe as\nat ch\nsli des\nle en\nrenew able\neng lish\nqu ir\nco aster\nr x\nfo ols\nmatch day\nmis m\namaz ing\nz ig\nke ting\nwon t\nto wel\ndi ab\nsta ke\nn m\nmel t\ne than\ngra pe\npolit ician\nsm en\ní ĺ\nre o\nwedd ings\ncat cher\nor acle\nme mo\nðŁĮ ´\nec k\nrob bie\nnorwe gian\noper ator\nam or\nse wing\nju l\nx ie\nu v\nfif ty\nme ga\ntatt oo\nliber als\nu pri\ntraffic king\nrichard son\nsu v\nki p\nmess y\ntremend ous\ngl ou\ncour tney\nla d\nstere o\nmy ers\ni dio\n^_ ^\nman ning\ndy e\nw d\nthr one\njun k\nas u\nprovin cial\nk ook\nwr c\nfine art\nhamp shire\nrenais sance\nb red\nfall out\ns j\nsn l\nal am\ntor ture\nfy i\nsh ines\npa w\nch ar\nhen ry\nc row\naci ous\ndi an\npa ige\nba re\nstock holm\nscen ery\nðŁĩ ·\njef frey\npu sh\ndecor ation\nne d\ncu te\nbrig ade\nlaven der\ninv ites\ne sports\nvo ir\ndri ed\ntran spl\nsur geon\nno vels\npul ls\nson y\nlun ar\nman e\ni vy\nfru str\ndor set\nsa i\ntor res\nssi on\nshut down\nsuggesti ons\nwrit ing\ne o\nbattle field\nu ga\nðŁIJ ¾\nvac u\nspl ac\ng it\nu g\nhigh land\n% )\nmer maid\nsacram ento\nta ils\np w\nka h\nt ell\nenh anced\nì ķ\nauck land\ncru el\nðŁ¤ ©\nau dre\nsail or\ngram mar\ng love\nde on\ninfl am\nfresh ly\nk ell\nzi p\nchristi e\nmil d\ndi xon\ninstru ctor\ng ence\nãħ ł\nsub jec\nconstitu tional\ncrow ds\nin visible\nru ins\nda k\nsi p\npla que\np ouring\ncomple x\nz ine\nste ad\nf let\ntrans mission\nlo way\nar un\nincre asingly\nau d\ntransp aren\ncro wned\nsc oun\nblizz ard\nlux u\nfi ers\nachieve ments\nhun ters\nrock ed\nbas in\nvio let\npro ves\nachiev ing\npro sper\nse ga\nflo at\nvi an\nxi v\npol ic\ntur a\napproxim ately\nwander lust\nkeep ers\ngeta way\nco d\npol is\nbr yan\ncol ts\ntal ents\nyo gur\ngluten free\nwri st\ngr y\ncze ch\nðŁİ Ī\nev ille\nðŁı Ī\nto x\ndani els\nam er\nbi ds\nweare one\nme tab\ng t\nboy z\npd x\npos session\npu shed\nshr ine\nreali stic\ntri gger\nna vi\nru mors\nn af\njen kins\ntr un\ncomm uni\nà Ĺ\ngam ers\narm or\nmoham med\nbal cony\ny ah\nstron gest\nrhy thm\nunfor gettable\nk p\nho bb\ncusto dy\ngreg or\nr ita\naes thetic\nil ation\nsponsor ing\nn ay\nkid napp\nsh s\nra jas\nme g\nsignific antly\nbutt ons\nla c\nver sions\nessenti als\nopini ons\nk ro\nd printing\nwi dely\nd k\nur an\ny al\nreque sted\nc n\ncur ric\nplu m\ngr un\nv m\ndev on\nm yo\nrel ation\njuvent us\nrou ge\nmin ority\nmin es\njupit er\nn ine\noxy gen\nfran kie\nune sco\nfab ric\ndisgu sting\nsal man\ndete ction\nlan ka\nd ac\nðŁĩ« ðŁĩ·\nargu ment\nshel ves\ncel tics\nrober to\npi gs\nhe dge\nfau l\npow ering\nbutter flies\nfi r\nre make\natt i\ncom o\nemp ha\nkend all\npoke mon\nse ating\nd ans\nbald win\nðŁij »\nlesli e\none direction\nti mber\nim an\nfon t\ne der\ndi on\nste ph\nfor mat\ngre gory\npro p\nhe x\nru in\nsor y\ninf er\nn aw\nbar ak\nsd gs\nkar ao\nlu sh\nv ander\nend ent\ng is\na fro\nsoc cer\nay an\nt uni\nlun g\nda yof\nalex a\nmar ath\naddic ted\nag ile\nhy gi\nlight weight\nì §\nmand ela\njo ey\nanc y\nhu m\nbi r\nmemor ial\njim in\nging er\nv ak\njav ascri\ncro ps\norig ins\nd ari\npi per\nim port\naggre ssive\npredic tion\nre pairs\ncr acker\nvoy age\nni ke\nmu mmy\nlinke din\ncountry side\nbor der\ngla ss\nper t\ns als\nsho e\nautograph ed\nwal nut\ncolle gi\nsal ary\npa iring\nðŁĮ ¸\ncath ol\nswee the\ndefe ats\nstreng then\nroof top\nimpro vements\nbarri ers\nur u\nt ally\nru led\nðŁĨ ļ\nnai ja\nemo ji\nper cent\ngi o\npro bs\non ce\nadm its\npa ths\nli ar\nday tona\npe ters\ncal i\ncal li\nmu g\no sa\nap h\nab y\nhy de\neth nic\npla ins\nol f\nhaha hahaha\nholi c\n?! ?!\nsu bli\nbl acks\nmo t\ngh ton\nlo vin\nb rent\nbar u\nl ati\nde w\nate au\nq a\npain ful\nbu sters\nst atic\nðŁĩ¨ðŁĩ ¦\nnote book\nout fits\nsi es\nr f\nfloo ds\nÑ Ģ\nthro at\nsu ici\nro vers\nbeng al\npre pares\nblo g\nmini ature\nØ ¨\nam phi\ncom b\nr sp\nin timate\ngreen e\nÌ ĩ\nal tar\nsurg ical\nves sel\n... ?\ngav in\ng ator\nthreat ened\nz ar\nrob bery\ndi er\npromo ted\ny g\nx s\nsu bs\ninter viewing\nthreat ening\ndo zen\nme ado\nwater fall\nnintendo switch\ncal um\nmini sters\ndro p\nunivers ities\nwar ned\ntac tics\nðŁĩ ²\nrefu se\nad ju\nv ast\nðŁĺ ´\nmc fc\nlib ya\nno filter\ndistribu ted\nre ser\nron nie\nde co\njavascri pt\nmon k\nintere sts\nfle x\nmar tha\nsti es\noo d\nðŁ¤£ ðŁ¤£\ne un\nb ali\ng omez\nsti mul\nmoder ate\nd ity\nir is\nstra w\nconsist ent\ndirec tions\nadop t\nsal sa\ncro o\nreco vered\nblack friday\nlan caster\naccep t\nweareone exo\nbuil ds\nfree man\nair plane\nditi on\nbel ong\njam ie\npit ching\nli f\nom in\ncri spy\npre pping\nve g\nchan g\naccompli shed\ngraci as\ndolph in\nelec tor\nculin ary\nsuper bowl\nwal a\npur suit\nblack berry\nbe an\ncardin al\npro ved\nimmigr ant\nstric tly\nholocau st\npass age\nha us\ncou p\npur se\nhar ass\n< <\nle ed\nado be\nst ad\nlegis lat\npar ked\npri yan\nsil va\nkri st\ns the\nfun ky\nig a\nsett lement\nph s\nt mrw\nstre ssed\nhun t\nho ckey\ntreas ures\ncham bers\nol u\nhu t\nmar ley\ntex ture\nwilder ness\nmm ing\npoten tially\nom aha\nju dy\nto es\nspo iler\ndistingui shed\nfeli x\nah u\nrecommend ations\nzom bies\nhit ler\ntri ple\ncolla pse\nmotiv ated\nulti mat\ngg ling\nso y\nci gar\nfo ren\nvine yard\ngl itter\nfin dings\ncolon ial\nhun ter\neri k\nden s\nbeet le\nlot te\nsub tle\ns matter\ntru sted\nexperim ental\nnam ents\nðŁĺ Ĩ\nregi on\nacquis ition\nbre eding\nquarter back\nam reading\noo td\nru de\niniti atives\nst out\nhy ung\nout come\nal fred\nmic s\nexper tise\nbacter ia\npengu ins\njump er\nvalen cia\nbar k\ning day\nsell ers\ncontrac ts\nhou ston\ncommissi oned\nadap tation\nswan sea\nsanti ago\ncommon wealth\nju dging\nsub mission\nsco rer\ntom my\nñ o\nex quis\nfil ing\nexplan ation\nalli son\nwemb ley\nri dge\nchev y\nsan tos\nown ership\ncogn itive\nfavour ites\nsh ed\nphil anthro\ndele ted\ngo dd\ns nor\ngui delines\nff ing\nje ep\ncli ps\nsw amp\nan or\nguil d\nbol ton\nspring field\nmunici pal\ngoal keeper\nye on\nðŁĺįðŁĺį ðŁĺįðŁĺį\nãħĭ ãħĭ\nwater front\ngra ve\ncontempor ary\nar ity\nÃŃ a\nsle eps\nsy rup\nal am\npi re\nco yo\nmoto gp\nty son\nkej ri\ncir cul\nsing ly\ncr unch\ncomplic ated\nnostal gia\nk op\nmo ve\nk ale\nmac ro\nmid west\nh ans\ntri bal\nnu de\n௠į\nbey once\ncongratul ate\ncat er\nleagu e\nðŁĻ Ĭ\nla dder\ncra shed\ntech nic\nkarao ke\nharass ment\nro ts\nexperi encing\nkri sten\nðŁĩ ³\nðŁ¤ Ĺ\nreflec tions\nguin ness\nillustr ator\nðŁĻı ðŁı»\ncen ter\nnar row\ncomm ons\nregul ations\nÙ Ĩ\nhar m\ncro ft\ncu ssion\nhong kong\nst ical\nintern ship\nzo e\ncho p\nhoo ds\nestim ated\nbatter ies\nberke ley\nsmooth ie\nshau n\ncro s\n~ ~\ncam pe\nhu mp\nb g\nproto type\ncl ick\nshaw n\nre viewed\ntem pl\np f\njed i\nblo gs\nray mond\nas th\nba h\nav ail\nscot ch\nleaf s\nnik ki\nto k\nhol low\nur ges\nof t\nun like\nlat in\nu e\ncat ering\nmil i\nalter nati\nma ver\nÐ ¸\nag le\npre order\nlu x\ncu cu\nðŁijı ðŁijı\nt art\nâĿ¤âĿ¤ âĿ¤\narab ic\nrapi dly\nar rang\nall en\ntravel tuesday\npa ws\nflo ws\nst ability\nflu id\nca pp\ncan berra\nuu uu\nsp ani\ndemon stration\nm la\nplac ement\nm w\npresi dents\nawe som\nbever ly\nani st\nne al\nfather sday\nreferen dum\nla hore\no aks\ndeb bie\nhalf way\ngho sts\nde bor\nmatthe ws\nfi at\nt fw\npre sen\nrob i\nde d\nbro ck\nlaugh ed\nam ounts\nbam boo\nkinder garten\neat en\nmtv hottest\nbreak out\nu sic\nfra ser\nlegis lative\np ang\nmodu le\nsam my\ngo ver\near ns\nexpe dition\ngar h\nconcep ts\nchar lie\nla va\nbachel or\nveg gies\ndeter mine\nel lie\nun locked\nfru it\ndal la\ncou pe\nwash ington\ndepo sit\niv ory\npau la\nchic ag\ngu cci\nðŁİ ĥ\ncul tiv\npier ce\nli fted\nstu mb\nre cover\nmusc les\nconduc ting\ncb s\nmcla ren\nsophi a\ncel lu\noce ans\nup loaded\ngame play\nmal dives\nkim ber\navo i\nrac er\nca ine\ncav s\nh ana\nli ga\nra ven\ninter vention\ninaugur ation\noo h\nat traction\nmerchandi se\ntune in\nli king\njuni ors\nint ended\natt acking\naqu arium\ni wd\ncomp onents\nsur ing\ncent u\nyogur t\nðŁı ĥ\nshow room\nop tical\nty our\nju dge\nyi eld\nan to\npl c\ntransparen cy\nrecy cled\nchi ef\nar om\nambassad ors\nplan et\nâĿĦ ï¸ı\nom ed\nvaness a\ncour t\nmar gar\nhal ey\nv r\nreg ina\npd ates\nhi span\nlive stream\nâģ £\nya hoo\ngal la\nsecu red\nw ir\nbene ath\noff l\nn il\nam b\nye g\nout let\nu te\npe ep\nlind say\nbent ley\n... !\nhe el\ntrilo gy\nvo s\nty re\nthere fore\ntor onto\nab i\nsimp li\nja e\nexten sive\neleph ants\ns or\norient ation\nim peach\nre play\nconstru cted\npeter son\npa is\npor ted\ncustom s\ncolla p\nad u\nhigh lands\nsal em\nshel by\nko vic\nstra in\nro sie\nsen ators\nsnap s\nbo bb\nsuz uki\nbla des\nk p\nlo lo\ngener ate\nsi ght\nma e\nstruc tural\npredic t\njump ed\nah mad\nsun g\njust ice\ngla m\nvol vo\njubi lee\nde tention\nlo sses\npu ri\nevery time\nÐ °\nra o\ned ge\nli mer\nrese mb\nhar old\nre tri\nsacri fic\nsurpri ses\nam c\nsrilan ka\nbar bie\nmen s\nfin n\nag s\nukrain ian\nem brac\nî IJ\nflav ors\nhom er\nlau re\nou th\npr iced\nver de\nfir m\nah s\ncu b\ntre y\npar anor\npro fit\nin dv\nwho a\nhar sh\nal ot\ncrit ics\nhu bby\nfi gur\ngi ra\nca stro\nchan el\nin put\norigin als\nten ant\nyy yy\nture rs\nlincol n\nco on\nlear n\nch ou\nac are\no les\ndin er\nhy p\nbizar re\nmc r\nlet sgo\ndecor ating\nðŁĮ İ\nal ison\nar vin\nf d\nreha b\nmccar thy\nlot tery\nda h\nminne apolis\neli gible\ndiagno sed\nemer ald\ndestin ations\ns ans\nor y\nbla zers\nn v\nba il\ndigital art\nno c\nmal ta\nsol ar\npi pes\nalleg ations\nno ck\npo pe\nbri d\npremi er\nn x\npresent ations\nef a\nbo ws\nval ve\nopp onent\nĮ ë\nvisu al\ning le\ncate gor\ne ter\npo is\ndan i\nat tract\nneu tral\nth ene\ncra shes\nfred die\nut ili\nc st\nawak ening\nslo ven\nquali fy\npro of\nfair y\nle v\nfre ight\nenjo ys\ncup cake\nflav our\nâ ķ\nprotec tive\nðŁijı ðŁı»\nis u\nad mir\nh mmm\ncontinu ous\nai res\nrap tors\nshowcas ing\ny uk\npa ste\nfollow er\ninstru ctions\nsp ru\n@ __\nthe o\ndebu ts\nve tte\nsto w\nes of\nach ed\nsul tan\nsand wich\nsom alia\nfranc o\ncar ne\nflu ffy\nal pine\njas mine\nhe ated\nviol in\nple ss\ndivor ce\nper former\nphi es\nport sm\ndar a\nkir by\nlo p\nchill i\nfor th\nsky pe\nðŁĩ®ðŁĩ ¹\ncelebr ities\ned y\nve e\npo ison\ney el\ngra bs\nssi c\nun o\nwester n\nrail road\nam er\nnumer ous\ns v\nfo w\nfi st\nâĢ ĭ\nreque sts\nmar tial\nem my\naccept ance\nlau ra\nภ´\ner up\nhyun dai\nout lander\nu tt\nwrest le\nesp resso\ndemand ing\ng dp\ngeo graphy\nsas kat\ntro ll\nconfe der\nsu es\nse m\nbe ts\nt ful\nto sh\nteach es\ncol oured\ngal way\nmac y\ndis orders\nbb cra\nat em\nfen der\nlit ter\ne sh\nprovi ders\nrenov ation\nnomin ate\nps g\nnomin ations\njen na\nshar p\nsome day\nz ur\nbra ins\nche shire\npre y\nhu go\n ¿\nto ken\nr v\ncar r\ntac tical\nzel da\nkay la\nfern ando\nphotograph ers\nj our\numb rella\nwoo dy\ncongress man\ndu mp\nle vy\nju an\nd azz\nsign als\nla in\nan u\nmic hel\npor ch\nal den\nsibl ings\ny ale\npe el\nsw ick\ngg in\nll c\nk ale\ns con\nil d\npat reon\nre el\nqu in\nwit t\nmar ty\nmoo dy\nton i\nder y\ng ators\nspeci fically\ndd in\nly on\ntr ick\nmeado ws\np j\nbor gh\nvi k\ntu r\nbron x\npu ff\nlan tern\nðŁ¤ ¦\ng ently\nbe stie\nfac t\nrefu sed\nfas ci\nmp y\nðŁĶ µ\ncross over\nmead ow\nindian apolis\nduc ation\nsle y\nloo m\nmix er\nnew music\nfilm maker\nprosper ity\nli m\nweek end\ncre amy\nneu tr\nlu ther\nh v\nnor thern\ntw o\nh ra\ncat ches\nappear ances\nha bit\nkitt ens\nn v\nilla c\ninf an\nregar dless\nliz ard\ndun k\ncur tain\nac om\nin tu\nve z\ne min\nfl ats\ncalend ars\nem power\nru ined\nhun gary\nvi d\nwe x\nu lum\naber deen\no sa\nk t\nma ssi\nse emed\ns den\n\' ?\ntele phone\nde fi\ninsp ires\nme ow\nz ones\nbl ind\npl y\ntuc son\nadvent ure\nge d\noy ster\nðŁijıðŁijı ðŁijı\nout put\ntt t\nmetal lic\nsma sh\nucl a\nsco ts\nperfe ct\nlu cy\nregular ly\nsp ic\nrel ative\nath ers\nmis e\nbatt ling\ndeci des\nmat a\noccu pied\nrandom ly\ncat softwitter\ngi an\nball y\nal ties\nal lies\nim men\nsy rac\nðŁĴľ ðŁĴľ\nl lan\nau r\nk ut\nlam ar\naffe cts\nn ra\nstar war\nðŁ¤ ĺ\nsc ram\nen chan\npro cess\nluxu rious\nar ray\nsher lock\ncomp ati\ndor f\nstre ss\nm su\ns with\nsal a\nsof instagram\nfo il\nunder stood\nqu ay\nr p\nc ade\nja w\nen ab\nen coun\nðŁİī :\ndo ck\nsatur n\nmu ll\nlay out\nra rely\nhapp ily\nfix ture\nor ph\nover looking\nher bs\nm itt\npil lar\nnol an\npe tty\nstr y\nu i\nmu k\no res\no vers\ná µ\nre creation\nwe sley\nri t\nkejri wal\nsto cking\ng v\nsubscri bers\nmoo se\nma e\nber t\nopp re\nassign ment\nu ro\nhigh lighting\ncal vin\nwe igh\ncambo dia\nav on\nke m\ndis abilities\nread y\nchar gers\np ads\niz ing\nilli an\ntru ste\ncol leges\nassoci ates\nalban y\nmil ton\ncr on\nbu r\nhar dly\nsi ghts\nanti ques\ne cho\nsurpri singly\nha iti\ncap t\nph p\nop io\nine quality\nequ al\nken y\nsch mid\nautograph s\nren t\nqu er\ncit rus\nchalleng ed\nte c\nepi de\nfe st\nz hou\nli me\ncitizen ship\ncry stal\nconvin ced\nmess enger\ncopen hagen\nâĿĹ ï¸ı\nwar ran\ndevelop ments\nï¸ı âĥ£\nfore x\nhi ro\nsne akers\nxi de\nvi va\nstere o\nbat ting\nss el\nho st\nbeng al\ncritic ism\nq c\ncr un\nattemp ted\nry e\ndetermin ation\ncre ations\nd read\nlabel s\npos se\nanc er\njoh an\nsi ster\npartner ships\nles bian\nk st\nguaran tee\nbar o\nfix ing\nma son\nm ous\nchem icals\nt less\nbio diversity\npar o\nbhar at\nac ol\nrefu ge\nen te\nt iti\ndys sey\nrespon ds\nlef to\nin er\nse vel\nrahu l\nol ine\nfrank fur\ncho reo\nenjoy able\nc to\nstrugg les\nwood land\nheavy weight\ngen s\nrece p\nac cred\nðŁĺ ¡\ntrans formed\nlist en\nat op\nn k\nsur ge\nbe re\ngover nor\nprison ers\nclau de\nt ill\nmu lator\nemo tion\nwater loo\nstar t\nðŁĩ º\nclean ed\ngrand mother\nfear less\nafric an\nastron omy\nðŁı ģ\nภĻ\nthe world\nsu itable\nanth ony\nk and\ntt en\nmeaning ful\ndisc lo\njaco bs\nà ¸\ntom linson\nghe tti\nty pho\nsub stan\nas co\nte k\nnag ar\nmu d\nam on\nvacc ine\nf ty\nfle sh\nno el\ninfl ation\nportu gue\nglam our\ntra m\nv re\nte qu\nroun dup\nw yn\nrejec ted\nmosa ic\nsi ghting\ncal f\no ta\ncom position\ngo pro\ngonz ale\ne ed\nb ard\ntu e\neffec tively\nwe en\nal to\nri bs\nrel ate\nthir sty\nfu rious\ndi m\nch ard\nperfu me\ns ny\nchur chill\nk of\nmaster class\nwa ve\nðŁĶ µ\ner in\nown s\nto be\nsk illed\nte m\ngo f\nen i\ntor i\ncra zy\nl ick\nresi stant\nici al\nag ar\n! :\ng ali\ndel aware\nbl itz\nkoh li\npu ck\navail ability\nhi malay\ninflu ential\ncro chet\nvictor i\nread ing\nho bby\nvie t\nj as\nen gra\nsk ul\nðŁĩ² ðŁĩ\neduc ate\ntech no\ndistric ts\nblu es\nse tt\nseven th\nlear ns\nee ee\napocaly pse\nhang out\ncru el\nmu tu\nbru h\nhel en\nshe er\nc tion\nkle in\ntex ans\nce real\nsh ine\nne red\ngra s\nam bro\nf ella\nhin du\nmatthe w\nli ma\nmir anda\nje wel\nso ho\neuro vision\nneighb ours\nchand ler\nbe sides\nðŁ¥ °\nast ros\nthu mbs\nren ault\nra ve\nhi red\nðŁĸ ¤\nit ary\nz or\nbla zer\nk ine\nea u\nkat y\ndc comics\npe c\nro dgers\nwater proof\nkill ers\nsuper int\npre serv\nas so\nbrew ers\npromo tional\nsc am\nvilla ges\nsket ches\nju icy\nfor life\nau dit\nso lo\nfundam ental\nlen e\nphilipp ine\nt end\nconserv atives\nsponsor ship\ndd le\na ine\nh tc\nos i\nhul k\nw af\nภĻ\nevalu ation\nant ine\nsle e\nrobert son\nroo sevel\nag i\nsophi stic\nemplo yers\nbubb les\nko wski\ninter action\nsh u\nbou le\nic an\nj are\nhan k\nleg itim\nk nicks\nkar ma\nrecei ver\nper ks\nu h\nsta ir\nsun i\nlabor atory\ngra ves\nvoc als\noo t\nc ture\nthri ve\ntic o\nãĥ ³\nb w\ncarto ons\nmcdon alds\ndra w\ny ung\npl er\nli d\neth ical\ngroo ve\nent a\ninternational womensday\npat ron\nwor ries\nðŁİ ħ\nðŁij ĭ\nka therine\ndi az\ntor i\nbach chan\ntru st\nmin eral\nic om\nbuil ders\nbor n\ncol oring\nlat te\nca se\nrevolu tion\ntra der\nox id\nchi pot\ninst antly\nsou thern\nse hun\npro b\nher nandez\nlis bon\nhu awe\np ong\nme a\nro oney\nwheel chair\nke en\nbe tt\ncor in\nregulat ory\ndi splac\nka ren\nsch em\nsun sets\nwh ales\nremin is\nhe p\nhi de\nmar cel\npand ora\ndo yle\nth fc\not to\nno kia\ntrans gender\nko v\nhawai ian\nsha ve\nso vere\nexc er\nnick i\npu g\nst or\nro th\nwee t\nleg al\ndig nity\npo w\nhom age\nðŁĩ³ ðŁĩ\ns re\ncan on\nla x\nwo ah\nquart z\nñ a\ngree ting\nflick r\nnai robi\nadvoc ates\nan c\nvi i\neu gene\nth ra\nc re\nel an\npen sion\nth letics\nton i\nre agan\nx v\nsto re\nben ch\nhar lem\ntodd ler\nsent enced\nâĻ¥ ï¸ı\nglob ally\nche aper\nu f\nma m\nnic o\nik u\ntho u\nni st\ndam i\nth ala\nrho des\nsal e\nbow ls\nâ Ī\nlas vegas\nsanc tions\nadm ire\nmat ched\nun able\ntravel er\nele ven\nstraw berries\nâĢĶâĢĶ âĢĶâĢĶ\nstu dio\njac ques\nim s\nvalu ed\ns no\ncheese cake\nn xt\ne os\ns x\nf x\nton ic\nhat ch\nchic ks\ngra ds\nhand ic\nr ory\nas p\nri pped\ndenti st\nn en\nlu fc\nâľ Ĭ\ndi ge\nhop kins\nsher man\nf da\nfor all\nash ley\nstr and\nh y\nliqu or\nbuffe t\ness ence\nphar ma\nsuri ya\nðŁĴĻ ðŁĴĻ\nfesti vals\nz an\nre fresh\npur ple\nuni forms\nkenne th\n= )\nas an\nhel sin\ntransform ers\nk ali\nperson alized\nchal k\nbo bby\nâ Į\nthe mes\ndepar ture\nprin t\nillustr ations\nqui et\nagre es\ngri ff\nØ ³\nm iti\ntoge ther\nconven ience\nab ar\ncar lo\nturt les\ninfo sec\nsome what\nar lington\nscholar ships\nemir ates\nmu ms\nst ella\nauton om\nfe ather\ng ore\nnom inees\nfragr ance\nÑ Ĥ\nw ong\nthea stern\ngr e\nz illa\nis i\nbump er\ngo o\ndo zens\nab duc\nâļª ï¸ı\no ils\ndon ors\nsil icon\ni pod\nfortn ite\nðŁĴ ¨\ntor o\nspark ling\nconsci ousness\npal a\nnu m\nmoun ted\nffin s\nthi eves\nteam mate\npra b\nom er\nta pes\nbo d\nmit su\nste w\ne re\np bs\ntu sc\nlo we\nra de\nparliam entary\nh m\ned gar\nðŁijĩ ðŁijĩ\nto a\na gh\nhon i\ns late\nge ek\nap t\nhard t\nta p\nhoriz on\ngrow th\nmake over\nhi l\npaper back\nid an\nreha bil\ngi u\npossi bilities\nlet tu\nfran co\nbo ss\nach er\ndoes nt\nmo e\nta ker\nhuss ain\nml k\ndi l\nth ia\nham a\nreal ised\nraven s\ncurric ulum\nm ith\nk night\nted x\nr v\nisai ah\ncumb ria\nbirth days\nf ing\npre z\nmu barak\nexquis ite\nclear ance\ny en\npar i\nev o\nà º\nmodi fied\napp lying\nimple ment\ndisco vering\nchap man\nindie game\ndis k\ncrowd funding\nmach in\nli vel\nsty led\nâĿ Į\nma king\nrehear sals\nnutr iti\nsubscri ption\nand ro\ncre ators\ncar ries\nky lie\ncam den\nappren tice\ntax pay\nc ca\ntuesday thoughts\npis sed\ner man\ndete c\nfreed om\nmer i\n.. !\npsal m\nsun light\nper spec\nbe ings\nbook store\nrock star\nfun ctions\np ence\nfav es\nz n\nobam acare\nsp ill\ncoven try\npi geon\npi vo\nba it\nkol kata\nav al\ndon or\nwa h\nprivi leg\ntra ditions\nrajas than\nten ess\nportugue se\nyn es\ntack les\nde fic\ntor n\npol ling\nthor ne\nin a\nbened ict\nbar ry\ncal ories\nver dict\nsave the\nnor ton\noff ice\nmain stream\nimpro ves\nfr on\nrespon ding\nreal tor\nscotti sh\nde clar\nr l\nshi v\nsupp lier\nre sting\nswee ts\nqu i\n. âĢ¦\nwhit ney\nstartu p\nthank you\nteach er\nh alls\nha ve\nhand made\npro ving\nquar tet\nro chester\nli an\nvirtu al\nmend es\nof icial\nmid lands\nx box\nmeas uring\no vo\naccommod ation\nbri des\ncollegi ate\nintellec tual\nin car\nni ag\nðŁį ·\nsf w\ncoco a\nco ats\ncivil ians\npresi dency\nmat rix\nsweethe art\ntri athlon\nwag ner\nra dic\nplann er\nthe o\nexecu tion\nk um\nthe walkingdead\nsc ar\nro tation\nblo gging\nbom b\nre son\nbb les\nst are\nassi sted\ne do\nbrand ed\nwar nings\nthor pe\nacknow le\nsatis fied\nsho res\nri d\ndor a\nphys ically\nbi gh\nappro ves\nha h\nric al\nvers atile\npret end\nlu m\nab hi\nye e\nsp it\nãĢ Į\ndj s\nash tra\nj t\nven ues\ngram mys\ncy clo\ntr acker\nover watch\nrepl ica\nel yn\nnr l\nlind sey\nhom o\nballo ons\nkitch en\nsi s\nam os\nende av\nðŁĴ »\na rec\nthu g\nhoo ked\nhr c\nnew york\nbur gh\nameric as\npatric ia\nug u\nap athy\nha st\npsy chi\ncor k\npetro l\nðŁİ ¬\nak u\npo pping\npsycho logical\nau x\ng ma\ncad illac\nwa ste\nauth ent\nbri stol\nnam e\nque er\nto ber\njer ry\ncom in\nch ant\nprivileg ed\nop ar\nlo ser\ntex t\nmar ker\nstri es\nequ ally\nak i\nchrist mas\ngare th\nble w\nem ma\nimag in\nse als\nche at\nconditi oning\nj ana\nren s\ndar ies\no asis\ndisc ounts\ncoun cil\ni ka\nshir ley\nvou cher\nal ps\nw x\nq r\ndri ft\nattemp ting\nut c\nØ ª\ngonzale z\nm f\njo ker\nparalle l\npa re\naspe cts\nproce du\nn p\nam a\nrale igh\nbright en\ngu ire\nradi ation\ncre scent\nho b\nil le\nstr and\nv ore\nn ard\nche st\ndi wali\nav atar\nal der\nd ling\npa thetic\nðŁĴ ĺ\nspir it\njor ge\nfilm making\nðŁĻı ðŁĻı\nchalleng er\nb j\ndown town\nht ml\nade qu\ntwi sted\nin ely\n( \'\nwra ps\noper ational\ny ne\nn us\nmag net\nmarket place\nhealth ier\nsnap shot\ndam on\ninter ven\nfe derer\now ls\nbiscu its\nj p\nro deo\nblue berry\nlec tion\nfron tier\nsumm ers\nre yes\npede strian\ngo l\ncaf fe\nrefur bi\nbou lder\nme ghan\nspeci alty\nla ss\ne i\nsuspec ts\nappro x\nrr r\nra th\nst im\ncru shed\nhe d\nwh un\nlo af\ncr ore\nriver a\ngene tics\nso ck\nwa sted\nny pd\nansw ering\ndo ve\nbel la\nol in\ndu n\nfi ji\npre tty\nspar kle\ny un\nj d\neuro pa\nli fts\nam ber\nmu r\nte k\nboy d\nroy alty\nin do\nri b\ngo tham\nti est\ninst alling\nke mp\nthe photo\ncos mic\n) ))\nwhole sale\nloy ment\neas y\nsu ing\nsett led\naf p\npro ver\nsuppor tive\nre es\nne ath\ndeli ber\nc é\nwel come\npic oftheday\nnew born\npat ty\nsun s\nsi est\nfl int\ndiffe rently\nspo ilers\ntroop er\ng ins\ncor y\nlook out\nequi pped\nta pe\nto by\nresear cher\nu sh\nke yes\nal ma\ninduc tion\nk w\nk har\nsl ick\nbri de\ne ur\ncra ving\nbook ings\nch es\ntr unk\nvern on\nsp her\ncryst als\nrel atively\npom pe\nuni ons\nval ley\npar a\nw ant\nok c\nde af\nser gio\nlen non\nsh ay\ncr a\nv at\nhe e\nt we\nliqu id\npol y\nðŁİ ģ\nb ent\nbe aring\nmotor sport\nbar be\nte sti\nhan i\nfin ancing\nastron aut\nwater colour\nri sh\ncomic con\ngar t\nwr ong\nber n\nit an\nste pped\nfil ters\nc low\nme x\ndem ons\nall o\nexpand ed\ncomm and\net ers\ngo ats\nsi ri\ny r\npot tery\nmari on\ni le\nel an\nsan to\nperson a\ndu ke\nhom eless\nli ghted\nwheel er\nchang er\ncab bage\nsur real\nham burg\nsma shed\nstr an\nk not\ni art\nob i\nbe dro\ndi al\nth ick\nb ingo\nfu s\nvacu um\ncon ve\nati ve\naccur acy\naccoun t\nre fer\nri z\nspider man\nban a\nr ite\nu b\nab s\nmedic al\nlin k\nsi em\n> >>>\nbe tra\ng lowing\nre actions\npupp et\nspa ghetti\nang s\nre medi\npray for\nroy ce\nchar lotte\n£ ï¸ı\ngh et\naffe cting\nro de\nsoci alist\nmo ses\naz i\no it\nre porters\ncd t\nap ing\ns nat\nminim al\nwa ist\nsie ge\n>> >>\nri g\nschmid t\nh are\nec a\nthor n\nhe mp\nes the\ncly de\nth a\ndon ut\nmoham ed\nling erie\nle gg\ncarpen ter\nperform ers\nde a\nimag ined\ncur se\nla sh\nct r\nagu a\nro ar\ngr i\nro le\nj fk\nresur rec\nroosevel t\nmaril yn\nsm alle\nwill is\nwa ited\nchar ities\nthe res\nli k\norigin al\ncar i\nc ough\ncru ci\nla gun\ncontra st\nk ou\narm our\nre moving\nt ent\nmaz da\nbri ghter\nthi ef\ncor ner\ntequ ila\nbuzz ing\nal bi\np am\naz ure\ndisc oun\npixel art\npossi bility\nham ont\ntra des\nbu da\nhi ve\nvers y\nfin ch\ntran spa\nem i\nterri fying\nin qui\ng ba\nsub stitu\ncollec ti\nplac ing\ncin dy\nk ann\npa tho\ndiamon d\nmour inho\nguine a\nanthro po\nair s\npu mps\nì ļ\npas o\ncur ling\nan ita\nresi dency\nne wh\njo on\ncigare tte\nque ue\nex trac\ngam es\nspl en\nex press\npublic ly\nbon nie\ntribun e\nba ek\nreason able\nc or\ntimo thy\nshe eran\nÄ ±\nf dn\nsu tton\nconcentr ation\ncarav an\nx avier\nal ger\ncy lin\nfreder ick\nner ve\npe ak\nlettu ce\nj ail\npre game\nkav an\nup graded\neco logy\nsquad ron\ngra pes\ngoo g\npa stry\nðŁĹ £\nãĥ¼ ãĥ\nmil ano\nawa z\npresen ter\nðŁĮ ¿\nher d\nking s\ntem plate\nfl our\nh v\nk ley\ni ya\nspe c\nat er\nfrankfur t\nco ch\ntex ting\ndel i\ncommuni st\nregi ment\nele anor\nanticip ated\nðŁijĮ ðŁı»\nthephoto hour\nran o\nsurvi ving\nsimul ation\ndaw son\nar in\naqu a\nm or\nâĢ¦ .\ncin o\nira qi\nsh az\ndun dee\nwe s\ndra u\nhann ah\ns news\noccup ation\nste en\nx m\nang les\nsett ings\ngur u\nkno x\nor ca\nshap ing\nw ent\ndr illing\nzz ie\nbr i\nkis sing\nfin d\nma ine\nâŃIJï¸ı âŃIJï¸ı\nðŁĮ į\nlar ry\nbu sted\nta vern\nacti vely\n- "\nreplac ing\nno d\nun lock\n. "\nâŀ ¤\naffili ate\nto w\nl n\nhappy newyear\ndi f\nj m\ngreen wich\ncontro versy\ndaw g\ncon dol\nsav annah\ncompens ation\ntouch down\nte o\namb itious\nembro i\nconvic ted\niart g\nbar ack\ntr ance\ntestim ony\nau dition\nthum b\nmy ths\nbe x\nque z\norch id\nden y\nentit led\nhoo d\ngr ant\nin box\nblue jays\nr illa\nsmalle st\nbur den\nin famous\ndivi ded\nboun daries\nt ter\nel t\nwy oming\nbe verage\nme sm\none ws\nbudd hist\ny ana\nas sad\nis ms\nbar rett\npredic ted\nback to\ntw it\ne there\ncap tains\nescap ed\nay o\nlam borgh\ngard ner\nla ps\nk al\nadverti sement\ninsec ts\nna po\nam en\nac y\nr and\ng k\nte h\nk athle\ntri dge\npan cake\nat ro\npyram id\nbu la\nparal ym\ngau ge\nen cies\ntom y\nbiscu it\nbut cher\nquali fier\ncoun ty\nke i\npo ols\ndar ker\nshould ers\nðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸\nsp re\n( "\nwrit ers\ng m\nðŁİ ĵ\nk nit\nhu ff\nmt b\nphilli es\no st\nden is\ng art\nlicen sed\ninter face\nex cel\nd well\nfrom the\nco fficial\naz zi\nappear ing\nfore st\nn ana\nke ith\nmanufac turers\nbeck ham\n) ?\ne se\ncol ony\ndelic ate\nut ter\nmc in\ntranspl ant\npre ferred\npar d\nari e\nhu b\npo ds\nperspec tives\npic t\ndel u\napp er\nbe than\np mo\ncrimin als\nfemin ism\nsh ack\ncircum stances\nfel las\nprote sting\nwa x\nsugge sted\nt ator\ndre w\nom ni\nfa ke\nkath y\nre b\ndel ine\nber ni\nmi sty\nðŁij ©\ner able\nbreak through\nmen swear\nmillenni als\nchan yeol\nla z\ninser t\nrep lies\nphra se\nn x\nihear tawards\naudre y\ngran ite\nrac ec\nori e\nter ra\ninnov ations\nbritt any\nat eral\npe ar\nbio logical\nsh ments\ninstitu tion\nm sn\nfrequ ency\nd man\nneg lec\nt f\nste fan\nfox news\nty po\ncomm s\nsequ ence\ncar men\nwh ites\neconom ist\nexe ter\nse um\nre sorts\ncas ually\nbun de\ndivi de\nØ ¹\nga g\ncre ed\nreti re\ncau cus\nrapi ds\nwrestle mania\ntul sa\nsunder land\nfundam ent\no di\nyam aha\nv ary\nintri gu\nel se\nbe acon\nan gie\ntra ded\ntran sm\ng ents\nkn itting\ngal ac\nðĿ Ĺ\nu to\nsea side\nhol t\nre rs\nfar go\ntrain ers\nmon soon\nb ale\nsou ght\nmad die\nh w\nco li\nfr an\nfav s\nðŁĴ Ķ\nint ent\nr ally\ns bs\nlemon ade\nbarack obama\nbre ad\nstick y\nexplo sive\nchel ten\nt j\nas soc\nram en\nhom ies\nv log\nmi ster\nlor d\nâĢįâĻ Ģï¸ı\naly ssa\nsketch book\nru mble\ncat ch\nmigr ant\ndiscipl ine\nun likely\nchronic les\nfl ora\nsl ams\nam id\ns boro\ncoo p\nju mps\ntran qu\nmel is\nsof ia\nen ri\ngab e\nsy ri\nnicol as\ncha i\nw v\nbe cky\nfoo ty\nta o\nsuppo se\nðŁĺįðŁĺį ðŁĺįðŁĺį\nplu sh\nri sh\nðŁ¤ ĵ\nk ha\nsatur days\nac cent\nhe c\nlim it\ncarl ton\nwi red\ntaylor swift\nðŁĺ ij\nsq l\nhar ro\nrecipi ents\ng at\ngo p\nth of\namaz ed\ngh an\nðŁıĨ ðŁıĨ\npor to\ncla re\ndi stant\nna c\nohi o\nðŁĻı ðŁı¼\nmt n\nanti bio\ndino sa\nme sa\npar tial\nb v\nlear nt\nlov ato\nquesti on\nex tract\ngossi p\ngi bb\nniag ara\nðŁij ¨\ndispla yed\nso oner\nste vie\nnug gets\nml n\nbro m\ntur b\ngive aways\nstu pi\nbl ink\nc ili\nconven ient\nmo h\nvi ve\nf ric\ncau se\ncham ber\ncu les\nne arest\nis se\nsmall biz\nt j\ncanadi ans\nsmar ter\nbra sil\nra re\nque tte\nw ha\ncand le\nat omic\nðŁijį ðŁijį\nwarri or\nrelax ed\nstri ps\nne ur\nk ka\nr fc\njen sen\nreco vering\nrespon ses\nsal am\northo dox\nacti ve\nell ers\nn it\nâŃ IJ\nmetro politan\ncentu ries\nvi da\ngra ding\ntranspa rent\nsim ple\ndo ts\nsuperint endent\nelev ator\nautom ated\nred skins\nima m\nsummer time\njona than\nge aring\nmichel le\nconfl ic\nm ice\nto te\npubli sh\npa x\n) -\nna iled\ná ´\ntele scope\nser bia\nba b\nape u\nst ically\nsen ti\nr ats\nisol ated\ngrou p\nhat red\nparanor mal\nstan ley\nali on\nsafe ty\nl s\nठ°\nnex us\nalexand ra\nmas ks\n+ +\ntr on\nau k\nbrother hood\nbrow se\nmix es\nsim one\nmu sk\nappro ve\nlo la\nex p\nper th\nfu turi\nun seen\nd m\nchel se\nsc outing\no we\nportsm outh\nk ram\nmi ze\ndi spen\nsu p\nd lc\nadver t\ntere sa\nis le\ncy cle\nmet all\nshi elds\nmarin ers\nra z\ning en\nfun d\nan go\njon es\no ka\nmad den\nbroc coli\ndomin ic\nsitu ations\nmer o\ncric ke\npuni shment\nd b\nsha king\nðŁĺ ļ\nm q\nari ans\nle h\ncla w\nwe ds\nd ure\nni el\nj elly\ngour met\ntra ders\nle vi\nw ages\nkne es\nwi se\nheaven ly\navi d\nmelo dy\nz ack\nban anas\napprentic e\npro p\nfun ny\no de\nrespec ted\nme gan\nfe wer\ndra fted\nmed it\ngra pe\nus army\ncru sad\nvo cali\nprepar ations\nnon sense\nus age\nth r\nro th\nwiz ards\ninsi de\npromo tions\nmon a\nred sox\nsi g\neleg ance\nch ia\nuniver sal\nãĢ į\nra ja\nun ga\npol lin\nfilip ino\nak a\nt sun\nik on\nbi king\ndecor ations\nz ac\ncade ts\nhum our\nag m\nre ppin\nvac cin\nelo ve\nu w\ndia be\ngalla gher\naz er\ndo l\na while\npro minent\nwel sh\nt ann\n\' )\nbi en\nwa g\nin al\nc wc\nwic ket\nur st\nq anon\nx e\nout door\ndun n\nstar r\nco logy\nric ky\nu efa\nreb ounds\ns music\ninf ant\nðŁĻ ĭ\nso p\nu mber\nhand ing\nbeg in\nsor ting\nha sh\nsp ati\nre k\nbuda pest\nblack hawks\ndele te\nro m\ncan did\nauth ori\nde bris\nspe cul\ninter section\nmarri ott\nim ran\nðŁĺģ ðŁĺģ\ncru ises\nram sey\nrafa el\naware ness\nvas cular\nbeyon cé\nru g\nðŁĺ Į\nfesti v\nar am\ns able\nbas il\np ill\nflo oring\nun beaten\nimplic ations\nu f\nw ound\nfor ge\npoin ting\npo ts\npopular ity\nðŁijı ðŁı»\nmani pul\ns lots\ndeb ates\nabs ence\nver mont\nnever forget\nwri st\ngl oria\nren ce\nhu sk\nmel ting\nðŁİ Ł\nbr aces\ntim ely\ntransform ing\nam ps\nma k\npo e\nah an\ngener ally\nnd p\nale ppo\nunic ef\npro fs\nnor d\nma sk\njackson ville\nv v\nsh ells\nbloom ing\noper ators\nchar coal\nne ville\nma gi\nchi p\nsam a\nir an\nre forms\naccu mul\nru e\næ ľ\nweb sites\nga on\ndevast ating\nsto s\nglaci er\nra pp\nchipot le\npr a\nor ous\nrom ney\nseas on\ndecor ative\nc isco\ndit ch\ncompla in\nll o\nassu me\nðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤ\nn els\ncent ric\nft w\ncar rots\ntat a\ncan ter\nper ience\nli ers\ndemo s\nbl unt\noper ate\nreserv ations\nle ah\nsub stance\ndi son\nan te\nelec tion\nv ue\nsqu are\nnon profit\nca a\nf su\ny am\nãĤ ¤\nv ladi\ncomple tes\nmar i\nphilli p\nne ill\ner as\nka it\nmen do\nmahar ashtra\ng p\ndan e\nprovi dence\nther apeu\njuven ile\nme mo\nin corpor\naa aa\nseven teen\nteen ager\nà £\nor ns\nwi de\ncu teness\ntw d\nff les\nbar a\ncom edy\nover time\ny az\nbar on\nunemp loyment\nðŁij ĭ\nexter ior\nden se\ncent res\nmatch up\nhistory month\nartif icial\nqu it\ne sk\nwar n\ncr itic\nj af\nðŁĵ ²\ninform ative\nfu els\nrecy cle\nnam ing\nstri pe\nsol ic\nmole cular\ndee pi\ncon vo\ns sel\nna e\nde scent\nti z\naccoun tability\nter ry\nr ito\nsl ay\nem o\ndem ol\nsens ation\nco v\ntor e\nround table\ny ol\nexcu ses\nॠį\ntur quo\nhh hh\npod casts\ncele b\nme ssi\nli o\nman n\ncontribu ted\nu z\ngener ator\nele ts\nveg gie\nindu l\nen suring\ndetro it\npun jab\ntran spor\ninstru ction\nad d\npor cel\npan eli\ncir cles\npersi st\nclay ton\nsp n\ndog softwitter\nis nt\nsp r\nretail ers\np w\nhun gar\nel ena\nmon aster\ngu atem\nje ssie\nan z\nra shi\nfle e\ncar ving\nfau x\nl al\nhen ri\nd jo\ndu ll\ns ana\nlar a\nglo be\ncri mson\ncom pass\npau se\nna b\nlion el\nba ths\nu fo\ninvent ory\nsin gh\nsat an\nðŁĩ ¸\nce ments\nin form\ngener ated\nbi den\nav g\ntas ks\nde er\nsa u\nja iled\npa stel\nsc c\nna il\nsteel e\nper is\nlamborgh ini\npur sue\nmar gin\nu ch\nbo sch\ndra in\ncl ara\nbo m\nlat ino\nweb ster\nrose mary\nr ha\ns oun\nbillion aire\nnot ch\npercent age\ncon or\n\' "\nhom es\nearth day\nh ort\nbig gest\ndi sin\nwal ton\nedit ors\nim ma\nom ar\nequi valent\npharmac eu\nah med\ncam eo\nhan ni\nunder rated\nge ment\nmicro bi\nv oo\nhonor able\nobe sity\nâļ ¡ï¸ı\nlimer ick\ninvol vement\nst agram\nboule vard\nbur g\nblackand white\nliber ation\nfi ve\ninter im\nsm m\nrival ry\ncap abilities\nstat ements\nthu mb\nve d\nsw ans\nbar ber\ne que\nseren a\nhel m\nnoo dle\nsam pling\nn awaz\nsing le\nthunder storms\nsh on\nin ev\në ¯\nto pp\norch ard\nbi an\nðŁĺ Ķ\ndoor step\nsalv ation\nmarke ting\nr ons\ncle mson\nra vi\nin take\nstand with\nsin a\nha iku\nple y\nelector al\nph illy\nla ys\nelectr ic\ncap turing\nu pp\ner gy\nbeliev ing\ncul tures\nes day\ninva sive\ned ed\nspee ch\nend ur\nviet nam\nboy cott\npe de\ndeli ver\nðŁĴĸ ðŁĴĸ\nmer chant\nst ir\nden ies\npoc kets\no ti\ncu ddle\nro land\nmm ed\nden ed\nlear ners\nhoo p\nsour cing\nh acked\ndi m\nenviron ments\nben son\njud icial\nwor cester\npear ls\ngovern ments\narri vals\ncor ners\ntun ing\nla bour\ny m\nor dering\nle wi\ni fe\nhygi ene\nthou ghtful\nindone sian\ncampaig ning\nprinci ple\nassau l\nru bb\nat v\nwil ly\nen tre\nil i\nph on\ndu ties\nâĻ¥ âĻ¥\nsn akes\nlo op\nam ar\nconver tible\nbon ding\nment oring\nmax well\nethere um\ndestro ying\nax is\nca iro\nfin nish\nsho ck\nðŁĺ IJ\ncal eb\ncom a\npe dal\nco re\ncontin ent\nel son\ntemp o\nhelsin ki\nac p\ntack ling\nst ated\nbl a\ndou b\nsma shing\na ja\ncamer on\ndisru ption\nwarm th\nbeing salmankhan\nbullet in\no de\nsyrac use\nar an\nmc gregor\nbul k\nan ton\nconfir mation\nsp ine\nim ran\ninstru c\njac ks\nchi o\npal m\nstr e\nembarra ssing\nun t\nelimin ate\nto ss\nc ise\na ws\noni sts\nsh inee\njo s\nho se\nli vely\nopp onents\nmo vements\nrecogni zing\nsandwich es\nsh akes\nexerc ises\nse at\nprofe ssion\nmerry christmas\nlu gg\nadopt dont\nmar vin\nbyr ne\nun le\nhe t\nku wait\nrah man\naspe ct\nhumb led\ngen es\nf and\nlong time\n) ;\ncam pu\nan gus\nðŁijį ðŁı¼\nq uran\nsle eves\ns lic\n¸ ë\ntwel ve\nyour e\ni ke\ngo gh\nb st\ndic tionary\nreflec ting\nto on\nyar n\nem bed\nðŁı ´\nre serves\nfloo ded\nver iz\ndu sk\nestab lish\npro li\nau d\nritu al\nor bit\ndeclar ation\nrecor dings\ncam o\ncas sette\ngood luck\ncu tter\nbo p\nb ho\nche ating\npaci fic\nma res\ntim er\ncol t\ntr ous\ntomor row\nhan sen\nci e\nw ang\nban i\ncircu lar\nac ute\nfar mer\nco ys\np se\nir ving\nw j\nhaw kins\nb ison\nur day\ncru ising\no te\nk ath\nwhi stle\nyour selves\nant is\nsla sh\nthorough ly\nke sh\nser ie\nex em\nen ig\nguil d\nsh red\nho gan\nap o\nä ¸\npu zz\nne tball\nau ssi\npanor ama\nws j\nav is\nar ming\nhum ph\nbrow ser\ncri es\nfo ggy\nmat te\nðŁĮ »\nit er\ntal lest\nby ron\ncap tiv\nje su\nany ways\nflag ship\np ton\nwe y\nfay ette\nfinanci al\nf oul\nsolom on\njenni fer\ncucu mber\nar gue\ntex tile\nwrest ler\njohn ston\npa stor\nðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃ\ncac tus\nedi ble\nre served\nric hie\nmet res\ningredi ent\nh ella\nun to\nch ol\ncele bs\npo ets\ngra ham\nhay den\ncoinci dence\nb aw\ncommunic ate\nflet cher\n/ -\ntole do\necu ador\ncoun sel\ns laughter\nline ar\nat p\nos u\njo el\nev ed\nconqu er\nru stic\nplic ity\nrecogn ise\nroom mate\ncr acked\njas per\nph er\nðŁĮ º\nwo ven\nmo ist\nff c\nste ering\nni sh\nstand ings\nfrequ ent\nar di\nhaz el\nas msg\nbau m\nd art\nsi dd\nnat h\nch ero\ncard board\nc ss\nn sfw\npa ir\nðŁĺį ðŁĺĺ\noccur red\nhomeless ness\nmal one\nph e\nxi a\npad dy\ndecl are\ntheat re\nb f\nper sian\nta d\nax e\nsusp icious\nlam b\nmu cho\nsen ior\nst as\nk ite\nst ing\ngra d\nk af\nwat ering\nØ ¯\nspi ral\nth ms\neduc ator\njer ome\nof c\nclo ck\nsu l\npe mb\n.... .....\npark way\nde aux\nrestric tions\nm ons\nneed le\ne j\nle agues\nwater melon\nam an\npl enary\nmax im\nw ab\ncoming soon\nbry ce\nvi gil\nsuper market\nfortun ate\nturquo ise\npresi dent\nli v\ninter ns\nfeel in\nfix tures\nstun t\nst aged\npremi eres\nlo k\nprac titi\nshor tage\nlog ne\nve c\ncon cor\nroc ke\nli g\ncom posed\nsyn thetic\ndi p\ncam ila\nch is\nj ou\nsu san\neye brows\nsupp lement\nsatis faction\nmoham mad\nti bet\nhouse of\npu n\nas sam\nshado whun\npsy ched\nse duc\nmand atory\nher bert\nsc allo\nstream ers\nproto col\nblock buster\nproduc es\nsch nei\nlau rel\ntri be\ntime hop\npl a\nmod elling\ntv time\nmtv stars\nwi dow\nme tric\nch am\ncon do\nflow ering\nale c\nd ms\ninten sity\n ¨\nmccar tney\nislam abad\nk b\nf fi\nph al\nanal og\nf ond\nh acks\npositi vity\ntreat y\nsub marine\nconne ct\nsel en\ncategor ies\ncu b\norgani ze\nsi k\nquote oftheday\nremin ding\nam or\nloc king\nðŁijı ðŁı¼\ncomp ound\net te\nb out\nrec ur\nfe rence\nmi zz\ntren d\nhip ster\nfor tress\nforth coming\npreli min\no dyssey\nang p\ndel ici\neven ings\nðŁĶ ¹\ni q\nd w\nda ir\nkathr yn\nchristian ity\nmoon light\nha b\nwh oo\nf bf\nse th\ngenu inely\npa x\nchar ity\ndeplo yed\nb nb\nbu cs\nju dg\ncon ge\nplant ation\nim press\ncar a\nsc lub\nsco py\nland ers\ncompla ints\nb ama\nre build\nx y\nreal ism\nsh our\nle in\nbrac elets\nmer a\nassas sin\nan chor\nðŁijĮ ðŁı¼\nlin en\ncon fron\nchronic le\ncomm ent\ncat alog\nil les\ngor ge\nme try\njung kook\nlove my\nsent in\nse em\nfit ness\nalli ed\nts man\ndigital transformation\npr an\nlo ft\nmin ton\nalden richards\nen vel\ncher ish\ncertain ty\nzz z\nrhin o\nper kins\nen rich\ncape town\nome ter\nsec tions\nske leton\ndef enders\nðŁĺ Ŀ\npen c\nbri t\nja h\ncapital ism\nðŁ¥ ĩ\nbaz aar\nre me\nex t\nkk k\nconver t\nstor my\nb ye\nkar an\nchry sler\nad os\npre ssed\nsyn c\nation day\ndang er\nbad ges\nrefu ses\nem powering\nly m\nex ports\nadoptdont shop\nðŁĩ ¯\nth c\nawa ited\nfocu ses\nfin ed\no at\nhaha hah\nâģ ©\nn family\nfi ona\nluck ily\nthr illing\nty ping\nout break\ndi es\nhe u\ncraw l\nne sses\no ath\nscri pts\ngee ks\nðŁIJ Ŀ\np b\nmathemat ics\nal is\n________ ________\ngymna stics\nacti vism\nrecommend ation\ngre n\nwa in\ncour ty\nn apol\ncau li\nhor nets\ng als\njo ckey\ndir ty\nat ar\nenor mous\npe st\ngreg ation\nan os\nii ii\ndef ends\nblack historymonth\nat x\nmb c\nlugg age\nwit ch\nco b\nla sts\ncu m\ngg g\nba thing\nn ar\nce bu\nðŁį ĥ\nnavig ation\nmin e\nre jo\nðŁİ Ģ\ngif tide\nre ta\nuse less\npu ll\ndefic it\nal lu\nati me\nit v\ntr illion\npu e\nac ies\nproce dure\nl ori\njen ny\nc ad\nul ously\ndr ac\npromo tes\ning the\ncan u\nwoo hoo\nna omi\nzar dari\nts u\nbe ir\nsd g\nle ver\nwe ber\nab ud\nlun d\ncrow ded\ndeplo yment\nter rain\nken ny\nho f\nwitne ssed\nlo ch\nj k\nbul ly\nw ren\npoe try\ndo ff\nww i\nmo red\ndin i\ncul ture\npromp t\n ¥\nmaur ice\nto pps\nr m\ncor respon\nab out\njewel s\ngi br\neag le\nðŁĺĺ ðŁĺĺðŁĺĺ\nl ending\nsou ven\nç Ķ\ncontemporary art\nestabli shment\nj ong\nâĢ¦ "\ngat or\npatri otic\nmc coy\nv ape\nhuman e\nfeli z\ncoach ella\nre posting\nste als\nfu ller\nn ering\nat ra\n( -\nbla ke\nhe ather\nwor ms\ndiscipl inary\nrede mption\ny ard\nam in\n" @_\nd nc\nt ds\nk appa\nne wark\ncomm its\nspe ars\nj ams\nt and\nmsn bc\ninter medi\naim ed\nat ic\nteen th\nobserv ation\nkash mir\nkavan augh\nou l\nsan francisco\nre u\nbel ated\ncho w\npass word\nst ills\ndeta ined\nsar i\nday ton\ndar ren\nitali an\nar th\namu sic\nar bit\nw m\nv m\nhe m\ndou g\nmy r\na sho\npre v\nvin d\nbra h\nsta g\nภµ\npre views\ngu k\ncon taining\nleon ardo\nsad dle\nru shing\nst av\nlon gh\ngam bling\nve gas\nreserv ation\nend ale\nbal a\nfl a\nvari ant\nhe dge\nbulgar ia\nnat ali\nwe aver\nsol st\nencoura ged\nap c\nas parag\nne st\ncycli sts\nfe l\nìĬ ¤\noverwhel ming\npey ton\nj it\na post\nmb le\nble eding\nneighbour hood\na very\nexpre ssions\nmac donald\ngi gs\nmon ds\nillu sion\nn ct\ncam ero\nover head\nmy th\nol y\nvi o\net v\nlau rie\nunve iling\npri or\ncon n\niron man\ndi ff\nday in\ncrit ici\ncon go\nre vision\nwal e\ndirec tor\np ines\nblack pink\ngar ner\ncur ated\nmanit oba\nh ac\ncommon ly\nbar ton\n.... #\nmor tality\nlive smatter\nphilos op\nshor ter\ncon vince\nfre ak\nvend ors\ninsi ghtful\nel ly\nsens ors\ne led\ns berg\nweight loss\nu kip\nsp ur\npriv ate\nqu a\nss c\n, ...\nsupervis or\nadvis er\namaz ingly\nless er\nat es\nmah on\noooo oo\nsar as\npmo india\nwaff le\nun ders\ntoler ance\nsculp tures\nher sh\nkno cking\nsmo ke\ncathol ic\ngri m\ntra veled\nfli p\nge off\ndinosa urs\nsle pt\nscar let\nok i\ncompla int\nob sc\nnam i\nla g\ncross fit\nu fc\nmc cain\nrefe ree\nsad ness\npen ny\nli eu\nmo de\nki er\nvol s\nw is\nel on\nshe a\nba o\nson ia\ncla ire\nem manuel\nmoist ure\ndi gest\nvi ii\nt eller\nch on\naccess ory\nnight club\nfoss il\naw an\nhu sky\nab original\nbrand on\nffici ent\ncou gars\nste d\nad mitted\nigno red\ncontent marketing\nag as\nv ase\nexecu ted\nnegoti ations\nshe ad\nn and\ntab lets\ngo th\nts al\nd fw\non ep\nprotec tor\nsp ho\ngaz ette\nandre as\nss er\ncomp ilation\nha v\ncontain ers\nbro ker\nsoc al\nporcel ain\nhy uk\nair ing\nðŁĴ °\npubli sher\nscen ario\nspart ans\nre viewing\nitu des\ned el\npear son\nba sh\nmau i\na ad\nðŁĮ Ĭ\nli u\nul ate\nprogram mes\nfav our\nweb design\nreal ty\nmotiv ational\ncro sses\n\' ...\nbus ch\nadjust able\nar jun\nmist ak\ndimen sion\npi stol\nweigh s\nen y\nunve il\nindy car\ngor don\nf ade\nfran ken\nqual ities\nbet t\nloc ate\nker r\nsp c\nconfu sion\nne e\nluck y\nbas es\ndep ends\nfire fighter\nol a\nre t\nmar oon\nðŁĶ Ĭ\nw am\ndefin ing\nwhe at\nbi l\né s\nb hai\npsy ch\nta u\nic ans\nthi k\nob ile\ninspec tor\nìĨ Įë\nill on\ngo s\nev angel\nfa i\nsi st\nvoc ation\nbur ge\nchi stan\nrenew ed\nenthusi asm\nen ting\nag ri\nike a\nm sc\naero space\nsens iti\nmemo ir\nhosp ice\nco caine\nder ry\nmechan ics\nĦ à¸\ntin o\nreduc es\ncollec tors\nin justice\nsupp re\nv ana\nab un\nnap a\nsu sa\nos lo\ne ff\nen core\nlic ence\nched dar\nz al\nmoun t\nðŁĴ IJ\nthreat ens\n!! "\narchi e\nfu tsal\nscu ba\njo s\ngn on\nse xi\ns official\ncompar ing\ndomin ant\ntof theday\nfa it\npropos als\ngi ft\ny as\ncn c\nl r\nha b\nreser voir\nbeli efs\ngener al\nmar ti\nt d\nest e\nì ł\nwi l\nðŁij ¯\nðŁĶ «\nsp x\net work\nexcer pt\ne instein\nhir o\nsil hou\nteam ed\nper ception\ncorri dor\nmental health\nhin ts\nben ny\ninduc ted\nsw x\nwi desp\nspe ak\ncher yl\ndru g\nðŁĺ ķ\nh f\nasparag us\nmyster ies\nfitz gerald\noff er\ntherap ist\ncare er\ndam aging\nts d\nper u\nwei bo\ny ay\nphoeni x\ndisc re\nmac book\nbar ker\nstig ma\nsp read\nroc kies\nkang ar\nbri dg\npa i\nbi shop\nta iled\ncapsu le\nðŁĴ ĵ\nge of\nroy ale\nshort listed\no ste\nash amed\nch app\nkey e\ncl a\nscreen shot\naustri an\nnati ve\nen ight\njuli et\nmichel e\nðŁĮ ´\ntravel ers\npi l\nfootball er\nwin chester\nðŁĻ Ħ\nazer bai\ngold eng\norganis ations\ninterpre tation\npredat or\nofthe week\nlo gan\npok é\nmari e\ncal la\nt nt\ncin de\nge tic\nfit fam\ngra v\now ens\nðŁĮ ±\nshoot out\nsal is\ncommissi ons\nco he\np tic\nni xon\nhi a\namb ition\nmar ine\ncruel ty\nt k\ncru de\nsal ty\njim a\nmon go\nir ony\non wards\narre sts\nstrang ers\nig er\ncycli st\nra g\nexten ds\ntra dio\nbour g\nmo i\nel la\ne able\nlex us\nau l\nder a\nhistor ian\nmor ton\nti ff\nman ner\nko t\nd k\npo inted\nmar qu\na an\nen ey\ndu blin\non poli\nem ili\nsecre t\nfl o\nâļ ¡\nba j\nste ep\naccompan ied\nrum ours\ndev i\npurch asing\nfi g\npu b\nsch oo\nautonom ous\ngo alie\nx ia\nautom atically\nre vers\nter o\nfu ku\ntitan ic\nshoo k\nsand als\nsee kers\nexc av\nnor dic\nbigo live\nba ke\nr att\nz ak\nne p\nðŁĺ ¤\ncand y\nbilli ons\nbook worm\npp et\nà ³\nsur faces\nsc ars\nphil ip\ndo gg\nci gars\nco te\ntransl ated\ncur ator\nsin dh\nhan gover\nbre wer\non es\nel ton\nðŁĴª ðŁı¼\nmar cu\nelli ot\nrigh te\ndi oce\nru ss\nrail ways\ngrand son\nas cen\napo logy\nawa it\nmob ili\nre spir\nparti san\noli vi\nstri ke\nyo o\nwhite house\nexpre ssed\npu ps\nbed ford\ncul tur\nfro gs\nfly ing\ncav ali\nc ds\nfri ger\nstreet photography\nre solve\ntali ban\nkan g\ncru shing\nju m\nðŁĺ Ĵ\nwilliam son\ntan g\ncur ly\nt man\nveter an\nfa ire\nartificial intelligence\nun anim\npre n\nback drop\nfr ances\noc cer\ndoro thy\nwork ing\nar thr\nconver ted\nday light\nserv ant\npad dle\ncompla ining\nthir ty\nnad al\nak u\nibra him\nad dressed\np iss\ngreen house\nbatt alion\nsi mulator\nout lets\nembroi dery\nðŁĵ ±\nfis cal\nger ard\nsas sy\nðŁİī ðŁİīðŁİī\nvent ures\nmer it\npublic ity\nðŁij Ī\nsophistic ated\nc tu\nconven tional\ncondol ences\nisra el\ntra dition\nar an\nte ss\ngla d\nðŁĺĬ ðŁĺĬ\ncorrec tion\nge on\nam d\nor ship\nbe ast\nch ment\nì ŀ\nnic o\nwk nd\nwel s\ncushi on\nbeli e\nvo c\nidio ts\nunder neath\npu ma\ncorn ell\nen ation\nlu l\nswa ch\nab ig\nu rer\nmi e\nform erly\nca f\ner nal\nchor us\njuli us\nsen ator\nâľ į\nwh ir\nsalv ador\nph d\nuni fied\nboo ster\ngraph ical\nw rec\nson ny\nmi z\ndere rs\ns all\nven s\ntusc any\nwi d\ny ong\nkur ds\nw az\ntrol ls\nmac ro\ncat urday\npre ssing\nsa sha\ncent ennial\ngu sts\nem c\nbe fore\nden ise\ncu st\nðŁĵ ¢\nlo oo\nbase l\neng land\ny olo\nar du\nmanife sto\ndo ha\nì ľ\nkni ves\nbourne mouth\nbi bl\nbar b\nal icia\nØ ©\ncom er\ncycl one\ng it\nane ws\ncharacter i\nvent ura\nin tra\nsf giants\nhu t\nbe a\ndar win\nell er\nal v\nre ese\nbl y\nkar an\nconclu sion\nman ny\nfla kes\nunite blue\nnad u\nco pp\ned ges\nlanca shire\ni als\no tta\nphilipp e\nl ent\nche e\nment ors\nfesti val\nan ism\ncompli mentary\nr j\npu g\nd ine\nwe i\ncli ffs\nsar my\nti veness\ntreas ury\nil and\nafter math\nrabb i\nou n\nbou quet\nherit age\nzi on\nsur render\nshen an\nin ks\nkar l\ngh ty\npol icing\nexam ination\nce y\nper su\nmeasure ment\nhydro gen\nlu han\nâłĢâłĢ âłĢâłĢ\nwar i\nо Ð\nj y\nfow ler\nmis h\nal fre\nâĺ ij\nbb naija\ncat alogue\nrecogn ised\nsa ver\nhu skies\ncol in\nmun do\nsi va\np ng\ndiscoun ted\nman utd\nfre sno\nde vin\nprelimin ary\ntro phies\npla stics\ndu g\npro cu\nindi go\ng ard\ndy lan\npit ches\nground breaking\nin son\nbl ac\nan thology\nf h\nexpl ic\nr ard\nadmi ral\nso chi\nla shes\nsplen did\nen vy\nad v\nsex y\nfestiv ities\nstic king\nbi b\nthr ill\nop p\nari el\nbotan ical\nendur ance\nfe males\nbr icks\nvat ican\nblack pool\nber mu\nbr ough\nroll er\nbi d\nsue de\nsloven ia\nmm ing\nml b\nmed alist\ndi ans\nrehabil itation\nne on\ns go\nli thu\nram os\nz ed\npi anist\ninten sive\nbroad band\nstu dy\npeter sburg\nlu ca\nah hhh\nphys ician\ndill on\ntele com\ngri ef\nmu n\nac ro\nsi ded\ns ly\nblo ws\nclassic cars\ntri um\nar gy\n? :\nh ri\nmarsh mal\nâĢ ĵ\nto pping\nwar saw\ntran sc\npreserv ation\nb av\nre friger\nexperim ents\nä º\ngl it\nsli ga\ng age\nfac tor\nflav ours\nbr ony\nsp o\ncook book\ncarri age\naw ay\nny fw\non ian\nw g\nsimp sons\nro lex\nðŁı ¿\ncro sby\nãħ ¤\ncre di\nsyn dic\npu bs\nali fe\npoor ly\nmac ed\nðŁĺ ŀ\nbehin dthe\nw enger\nn ats\nðŁİ Ł\nrubb ish\nprocedu res\ntypho on\nopho bia\ner do\nfu el\nvi era\nbu mps\nmillenni um\nnew zealand\nlec tures\nit on\nmil ky\nrespon ded\nê °\nlandsc ape\n.. @\nbo ther\nâĸ ¶\nz hang\nhuawe i\ntu ition\ns worn\nin u\ny or\npa olo\nau ditions\nab il\nmalay sian\nho ps\nfe athers\nmp le\nau ts\nã o\nboun ty\nic he\nì ĺ\nsh q\npin ot\nge ars\ndisapp ear\nvideo games\nt na\nalzheim er\nðŁĮ ŀ\na ji\nunder wear\nswit ching\nsign age\no scar\nec on\ndro w\ncl int\npl ated\ngun dy\nemb lem\nho es\nici st\nnel ly\njuni or\nroad show\nminer als\nat le\nalexand ria\nac claimed\nv ell\nshi va\nad he\nen ne\namne sty\nh ounds\ncouncill or\nðŁĴ ¦\naes the\npart nering\ninflu enced\nmag no\nfl are\nextin ction\ncivil ian\nmaje sty\nva il\nlaw makers\nrac ks\nmc c\nori an\nsp ices\ner rors\nmay er\nco ca\npa i\ns ooooo\nreti ring\nba thro\nðŁĻĮ ðŁĻĮ\nâĸ ª\nsu f\nendor sement\nbuil ding\nbroo ch\npal la\narvin d\nag ent\nkar ate\nr hi\nc tv\nta ine\num m\nba x\nreig ns\nuni of\nenterpri ses\nadel e\nfla ke\nat tire\nbru ce\nba hamas\ngra vy\nsa in\nche ek\ntri vi\nlo v\ne en\nbb lo\nlady gaga\nitt a\n. "-\ndu stin\nobserv atory\neigh th\nbloom berg\nkh s\nf cc\ngi st\ncommemor ate\nve er\nsexu ality\ned c\nnic ole\nvac ancy\nu ser\nson a\n:\' (\ndipl oma\nt end\nup grades\nÅ Ł\njura ssic\ncardi ac\ndr s\nwidesp read\nà ł\ndail ies\nvend or\nsim plicity\nwi der\nlen ses\nsupp lements\nde pos\nob served\nvin es\nparti ally\nrenew al\ncollabor ate\nali g\nfin ity\nph u\nzz y\npe tit\nðŁĵ ħ\nz in\ni gu\nsm ack\nfall on\nðŁĵ £\nback wards\ncomp onent\no so\ncompati ble\nbin ding\nzur ich\nthom e\nw ounds\nly ric\nfresh men\nsne aky\nfi bro\ndi et\nemplo yer\nin sect\nh ated\nsch er\nraz or\nn sw\nboo ker\ncalifor ni\nav fc\n °\npreten ding\npep si\nal is\nun titled\nk art\ngrand parents\ne the\no ck\nlux emb\nvisu als\nsmall business\nabdul lah\nmin ho\nsu baru\nh ra\nreve aling\nheart breaking\nclar ity\nam g\nsl r\n** **\nâŀ ĸ\nrecor d\nici ary\nmin ded\nye h\nexce ssive\nknu ck\nicec ream\ntru th\nev ic\nta stic\nant arc\nren dering\n, ,\nmit t\nloren zo\nst patrick\nbound ary\nzi g\nvo cab\nosa ka\nfur n\ntu n\ngu l\ns ounding\nblo gger\nutter ly\ng af\nadv ancing\nl cd\nmar gin\nlifel ong\nsolst ice\nsh ra\nwa its\nple ar\nbre ach\nen ligh\nad er\nitt le\nc ation\nho on\nstu died\n?? ???\nk ash\nev angeli\nps l\nwei ghts\nmet als\nty res\ntur no\nwi e\ncar b\ng ale\nse al\nsun ite\nam ic\npatter son\ná n\neu ph\nup stairs\nquali fiers\nkhali fa\napple music\nìĨĮë ħ\nvau ghan\nal ter\ncru iser\nmu a\nt ana\nkat rina\nid ols\nspo iled\nsecre tly\nfi bre\npart nered\num es\ngi ov\ncom et\nscreenshot saturday\nk eller\nfil tr\nfe t\ncon way\npe u\nbad minton\ngi d\nm ound\ndon key\nbu ff\nlea ther\nlar gely\nbro ch\nint ments\nam use\nr k\nsto ve\nimpac ted\ncon t\ncr acks\nprison er\nbar i\ncontrac tor\nori oles\ndomin ate\npol ar\nam elia\ndr c\nðŁijĮ ðŁijĮ\nvi st\nsu arez\ninjec tion\nblo oms\nðŁļ¨ ðŁļ¨\nsti ff\npay pal\nsno wing\nthur sdays\ngoo se\nwe dge\neduc ated\nweak ness\nde cker\nabud ha\nbree zy\nÛ Į\nhope ful\no bi\nrai der\ngh am\nde u\nse ve\npar tly\nfu t\ninfu sed\nmer ri\nthan e\nsome time\nhu e\nme in\ncre dit\nsli ding\nran de\ncher ry\ndead pool\nsh ol\nar am\nunder wood\nsky e\ndistur bing\nm nt\npoli shed\nguardi ans\nha dn\npic asso\nari us\nak shay\nir ri\nj h\nhapp en\nla kh\ndal ton\nat the\ns well\nmar sha\nre h\ncour s\nj kt\ntop us\nserv ice\nr ink\nhack ers\ndono van\nhor o\ntc m\nmay hem\ncha se\ndev ops\nken sing\nsc up\nsh ere\nquali fication\nc live\nton g\nn ancy\nmar is\nder dale\nber man\ncinde rella\njol ly\nci c\nloo t\ncollecti bles\nhom icide\ng ge\nepide mic\nsu ites\nmu ddy\ngi mme\ne rec\n- *\ntal la\nlis le\nembro ide\nðŁĩ© ðŁĩª\nveriz on\nve ctor\nbe anie\narti san\nga in\nflo res\nvi gil\nu so\nðŁĻı ðŁı½\ngrin ding\ngh er\nair ports\nrespon sive\nshaf t\ncan cel\nceremon ies\ne me\nat ari\nbru shes\neag er\nbo hemi\nchildren s\nyan kee\nma a\nsuspen se\nmor an\nmac ar\nsun flower\ncre w\nvo id\nke ar\nfashi oned\njen nings\nsunday funday\nsub missions\nme ad\nher man\nwa i\ncrit ically\nle um\nbaek hyun\nfor cing\nco bra\nãģ ®\nacqu ire\nal k\nge ology\npri mar\nimport antly\nire z\nbunde sliga\ncuri osity\nsen a\nstric t\ncon soli\nwin ters\nven om\nchelten ham\nðŁį º\ncen a\nt at\nba in\nglo ver\nunder cover\nas ses\ncar n\nmemorial day\nam eli\ni rene\nch on\nsyn thesis\nspe edy\nmitsu bi\nsla yer\ncompos ite\nunder stands\npe w\ninter rup\nhen ri\nmor row\nan om\nthof july\ng lee\nthre e\nðŁĺ ®\nand hi\nch att\nrenew ables\nye s\ntrans fers\n!!!! !!!!\nbab u\ndu ter\nlo ops\npe ers\no ilers\npau lo\nic ation\nh mu\nwar a\nmer cer\nhom eland\nfu ji\nale y\nyear book\nre m\nre en\nab sur\nbo is\n] :\ncaes ar\nshot gun\nkur dish\no ren\nra e\nanci es\nty pic\nf h\ndef ault\nre plic\nlu k\ntrans actions\nr ys\ninfan try\nðŁį ¾\ncho w\nchick ens\nba gh\nwy att\nay e\ngg i\nbre ws\ned itions\nmi ra\ncommen cement\npre su\nperis cope\nic hi\nguatem ala\nzam bia\npain ts\nwit ches\nwan i\nun dere\ncro y\nvo ws\nus mc\nhear ted\ntheat res\nshu ffle\nle vel\nmul tic\nsquee ze\nfer n\napp et\npost al\nmal t\non board\nld nt\nco o\ns sc\nk ac\nðŁĺ ĩ\nsc rap\nmar cos\ndeal ers\nann u\nmill er\nco ve\nul ary\nvladi mir\nbe ef\nth ur\npick led\nse same\nbengal uru\nmo tt\nkathle en\nhi st\nno tor\ndr ank\ndu chess\nsnow fall\ne ff\ntin y\nj n\nsy our\nspeci alists\nscot us\nbay lor\neve rest\nmali bu\npre m\nharm ful\nl ali\nb ates\ng ye\ndifferen ti\nand ra\ngeome try\nel over\nblack out\n== ==\nko ta\ninter act\nasi an\nla yo\nsamu rai\nfi del\nexhau sted\ngla di\npd t\nspher ic\nanti qu\nguit ar\nstu ri\nho pper\nang le\nf ills\nsla p\nmi th\nrod ney\nong i\nin som\npre venting\ncassi dy\nap ho\nore gon\nlo in\nham mond\ncontribu ting\nf n\ngar ri\nori on\ncomp elling\nescap ing\naim ing\nplu mb\nbi stro\nbe asts\nconcer ning\nbo e\ndo pp\nshop local\nstumb led\nâĤ ¹\nnaz is\nâĢįâĻĤ ï¸ı\ngest ure\nwar ts\nus open\nhi ggins\nchar li\nhang s\nbom bers\n° :\nfe eds\nc ch\nst il\nnic ola\nðŁĵ º\nclam ation\ntro pic\naf ro\nou k\nexpen ses\nder rick\nal ine\nfa w\nreg ard\nim er\nsat in\nthi um\nry der\npear l\nte ss\nmm mmm\nsen ses\nðŁĩ ¹\npositi ve\nexhau st\noccu r\nnor ris\nlil ly\nis les\ndirec ting\nyo fficial\ncount less\nsam ar\non stage\nflo ck\nmir rors\narch er\nmo i\nk d\nvi v\nin os\nsi kh\nle i\nsen sory\nbr its\nkno x\nchest nut\nop y\ncoli seum\nz af\ndi vin\nadap ter\n:) ))\ntem ple\nku n\nhel mets\nt df\ngu ide\nm old\no ids\nlu ther\nhe is\nmonaster y\nsp ree\nk lu\nbrit ney\njagu ars\ngre ats\nc cc\nky rie\nmachin ery\ncric ket\nre ro\nab o\naspir ing\nsemi finals\nale ss\nsig natures\nvar d\nme th\nher bal\nhol den\nking dom\nap or\nreg gie\nore o\npalestin ians\nem mys\nsec tional\nro i\nney mar\nqu el\ncu ll\nl ka\nhaz el\nestim ate\nul ties\ngo w\nbe a\npurch ases\nbel ts\nprotec ts\nm é\ngue ssing\nbb o\nclau dia\nfr acking\njon ny\nel k\ncel tic\nal mighty\nra je\ncourty ard\nig i\ncan es\nðŁĴª ðŁı»\nbank rup\nle thal\nâľĮ ï¸ı\ngraphic design\nvad er\npenc ils\nrough ly\ndan te\nm fg\nconst ell\ncam el\nj b\nbloss oms\nen to\nbalo chistan\ncine mato\nill ard\njer sey\ncon sent\ndent ed\ncon templ\nsch er\nhol i\nlou gh\nst our\na yo\nbegin ners\ncur b\nv hs\na jax\ndu ff\nav eng\ndom est\ncommit ting\nai red\ncha p\nhedge hog\ndisappo inting\nfreel ance\nin land\nchar ms\nðŁĺį âĿ¤ï¸ı\nai sh\nm x\nbuck le\nti dal\nper mit\nbo ating\nra cha\nkend rick\nb ello\nb hi\nple a\nestim ates\nl b\napo logies\njay a\nbb l\nast oni\ninter state\nmain taining\nel bow\nmu p\nep it\nðŁĺ ¡\nviol ations\ndef end\nbe h\nsl c\nam ir\npur i\nti um\nfi fa\nblur ry\nscri m\nðŁĻı ðŁı¾\nma ple\nrel atives\nâĺ Ŀ\ncho c\ncon nor\n⾨ ⾨\nwhi sp\nlist ings\nma ze\nthan king\nri dd\ngrass roots\nshi fting\ndesper ately\ngor illa\nden i\nju les\nstra th\ng ley\nja in\nbu ick\nt anner\nðŁĴ Ŀ\nga e\npri m\nit ors\nn ano\nsepar ation\narmen ia\nbor deaux\nðŁ ħ\npj net\nbu rial\ne bon\nglo ss\nre new\ngri er\nspe eds\ncomic books\nsym boli\npur poses\nãħł ãħł\nspati al\nno table\nci on\nn ps\nho ffman\nnor man\nrt g\ndu sty\nsitu ated\ntr an\nk fc\nem en\nnic kel\nhast ings\nsett ling\ngr it\nl ena\nw aw\nart s\ngu m\nca regi\nle wis\nsapp hire\nrememb er\nembed ded\nt lc\nbl at\nserge ant\nel sa\nboot camp\nbow man\nphoto graphic\npill ars\ndirection ers\nclassi fied\nno is\nve er\nbarre ls\nwh oop\nðŁĺ± ðŁĺ±\nfe male\npetro leum\nmedi a\ne fc\npoké mon\nठķ\nenthusi astic\nvar un\npro files\npedi atric\nacci dents\ncon rad\njan g\njo jo\nac or\nob server\nl f\nlive stock\nfor gi\nfo s\nel m\nan and\ngo e\nc ere\navoi ding\ngri t\nom an\nthank fully\nscat tered\nnick y\ncylin der\nchees y\ndi ver\nmahe sh\ncav es\near liest\nqu inte\nsubjec ts\nb end\ngul f\nvocali st\nglu e\npat ches\nun stopp\nsny der\ndemonstr ating\npi o\nhor ns\nwic kets\nand the\nr ama\nyo on\nstra ight\nbed time\nor ang\nbul lets\nsa urus\nmin ers\ninci dents\n! ...\nðŁİ ¸\nag ers\nhand les\nstat es\nin ity\nd ons\nincredi ble\nemin em\navi v\nru dy\nmoz art\nfolk lore\nappli ances\nmt l\nfre y\ndi as\nhu a\npage ant\nstri ve\nim prison\nbul lish\nr ana\nal erts\nbb mas\nhy per\nderby shire\nre cre\nre dd\ndebor ah\ncosmo s\nlaw son\nmel anie\npsy cho\nho or\ndoo dles\nsni per\nshad y\nman tle\ncanadi an\nnew year\ninter actions\nsepar ated\ncor ds\nspiritu ality\nap u\nit o\np ct\npel osi\nrebel lion\nse iz\nwor cester\nsec tors\nul i\nsan ta\nÐ µ\nðŁĩªðŁĩ ¸\nbi ased\nclass ical\ngam ma\ndee plear\nemer ge\nback er\nsur ance\nhand crafted\nðŁİ ¥\nfranc is\nmill an\nic i\ncro wn\nwo w\nstri ped\nun fair\nrelax ation\n³ ï¸ı\nembrac ing\nshe alth\npale o\nmartin i\ndist illery\nwr ink\nor k\nna th\nhay ley\ncour thouse\nsi ber\nsa di\nquiet ly\nmel t\nm sm\nme h\nsmart phones\nrel ent\npp ing\nwar wick\nco logne\ngli a\ncot ton\npro g\nlon e\nip sw\nstar ters\nexpan ds\nu mp\nsu ed\nski pper\ninfe ctions\ning le\nà ¡\ncler k\ndemonstr ate\nac ar\nðŁĺĤðŁĺĤ ðŁĺĤ\nti bet\nbun s\nalo m\ndemol ition\nssi a\ng st\n[ ]\nso ar\nâĺ Ģ\nðŁĺ ª\nðŁĵ Ĭ\ndee pest\nbeyon d\nare t\natt ends\nactiv ated\ndi mit\nâļª ï¸ı\nhigh lighted\nmagaz ines\nrum or\naz za\nsteph ens\ndol ph\nsho ckey\nmat s\nwe av\nmel an\nserv ers\ntra um\nku sh\næ Ĺ\nbab ys\npa z\na al\nla use\nbreak ers\ncanter bury\nul ture\nmi ri\neuro s\ntane ous\nimpre ssions\ndu tch\nil d\ngh i\npur due\nadequ ate\nl p\nsy ner\nang ler\ndu rable\ngal ore\nro wn\nmg mt\nðŁĵ Į\nlu cia\nâĺij ï¸ı\nzay n\nbor row\n. (\nnorth umber\ncru sh\neng a\nsu sh\nextra vag\nt out\nma hal\nali stic\nther mo\ngall eries\nes se\nchi bi\nattrac tions\nlex ington\nlegislat ure\ndocu mented\nresi den\nbrow nies\nw f\nst ool\nplan ets\nsho ppers\nconduc tor\nms p\ntr icky\nfru ity\nend ra\nfeel the\nwhi pped\nhair style\nre fer\noo k\noc topus\naudi ences\nku mar\nafter no\nop tim\nc fl\nni p\ngen i\nalpha bet\nann ab\nlam in\naccep ts\nl ng\nðŁĺ «\nt ine\nac om\ncheer leaders\nt k\ngr on\nv g\nk ung\nja x\ndha bi\nr ss\nmack enzie\nbeir ut\nclean up\ngy psy\nst ell\nbur ger\nhurric anes\neduc ation\nst ina\nâĻ¡ âĻ¡\nunfortun ate\njere mi\nbad ger\nat ers\n: âĢ¦\nter ra\nsubli me\nstu d\ny mca\nmr u\nduter te\nbren nan\nbul b\nmel o\nyl on\nhack er\nc red\ngu d\nas an\npad illa\nembroide red\nvietnam ese\npione ers\nprojec tion\nre boot\nid c\nan ey\npri mer\nsuff ers\nwin ding\np on\nsto day\nmor n\nu ch\nall in\nadid as\neliza beth\ntu ck\no graphy\nðŁļ Ģ\nbe g\nos borne\nghet to\nr h\ncn n\nir ma\nma kin\ncab les\nmur ders\noc ks\ninst a\nal as\nsi k\ncu ff\nla re\nfoo dies\no vic\nat om\ngeome tric\nem pathy\nภµ\ncent enary\nnewsp apers\nadministr ative\nðŁİ Ĭ\nsti ve\ncontrac tors\nle tt\ntas mania\nawesom eness\nden sity\nve en\nprince ton\nfrequ ently\nre ject\ngh i\nmodu lar\nceram ics\nsh ag\nki wi\ncan vas\nsweat shirt\nan j\nti mm\nnapol i\nil er\nappe als\nhamil ton\nma yo\nwe ave\narrang ed\nwhar f\noccu py\nb vb\nas aki\not ter\nnor m\nvi es\nde tox\ntion al\ndere k\nid ad\nad missions\nconstitu ency\nu pper\nwoo t\nallo y\nse ve\nlu b\nun comfortable\ned win\nab re\nd wight\nar che\nvirtu ally\nsp ol\npri e\nai i\ner r\nswit ch\nbar ack\nse ok\ncou l\nwn t\npou l\no live\ncaffe ine\ncardi ff\nnotor ious\nde mp\nex cess\nbar r\nt ford\na jay\nbump ed\nmy thology\nshel ley\nfal con\nshakespe are\nmust angs\nno ted\nbon e\ncivil ization\nsy d\npar sons\nun official\nhy ped\nsp ends\noppo sed\nv ings\nspace x\nnoti fication\ndeci ding\nbio tech\nout si\nsal ah\n! .\nfe d\nss y\nc ms\nbad gers\ncr o\nela ine\nn ba\ndy our\nn ant\nhoney moon\nclimb ed\nconom y\nath a\nm ell\nne bula\nnature photography\njuli e\nbm x\ninve sted\nmon o\nlieu tenant\nwat kins\ntechn ician\no se\nka e\nì Ľ\nmc queen\npre ach\ntrav eller\nflexi bility\nze bra\nreta iler\np ant\nben der\nbrand t\nsqu id\nwar rant\nveri fied\ncas s\npier cing\nhon ours\nt ying\nmor ris\nkis sed\nop rah\npanor amic\nme i\nsplat oon\nwich ita\nari as\ngal li\nindy ref\ngood times\nathe ist\nconfe ssion\now ski\nre pping\nad ditions\nmechan ism\nz im\nj ans\nsu f\ncho pped\nbeg innings\nvitam ins\nãħ¤ ãħ¤\nor th\npo les\nru b\nantarc tica\nindie film\nweb cam\nket ch\nbre tt\ncle ment\nher on\ndefe ating\nhydr o\nbuc ket\nwand ering\nsid ney\nfuture of\nb inge\non ies\nknock out\nadministr ator\nsyn the\nl ent\njan i\nbar ley\npremier league\nner ds\ncr m\nbra s\nbot any\nevol ved\nrot ter\nro wed\ntum or\nweal thy\n Ń\nmon arch\nli shed\nda hl\nðŁİ ĥ\nbu ch\nken yan\nØ §\nred ness\nassemb led\nse mit\nhud der\nshro p\nran i\nlear ning\nmor y\niti a\ngeo graphic\nworl dof\nf b\npho sp\nboo gie\nam ped\n? ...\nche w\ndwar f\nar us\ns sen\nru sty\nrecru its\nh k\ngar de\napp lause\nvol umes\ninvol ves\nta c\nhand bag\ntrans late\nffe l\nse ym\naqu atic\ntrans fer\nzo di\nand r\nacade mia\ncr ater\nte z\nar se\nadap t\ncol oni\nsnow man\nmal i\nhang in\ndi schar\noy sters\npho e\ncolon el\nw ba\nhispan ic\nthri ving\nsh y\nag les\nsales force\ncre me\nso les\nla fayette\nâ ī\nter ia\nach a\nsp erson\ngo go\ncar ly\nthe ore\nam ore\nvo x\naf t\nãĤ ¹\nstap le\nmu ffin\ndi agram\nino x\nsu stained\nav ent\nme ta\narbit r\ndec ay\nado le\nÐ ½\nec ol\nph o\nn k\no cu\ngr anny\nç a\nluxemb our\nstad t\nalber to\nle vit\nam as\nd x\nor phan\nco bb\nas c\nlo gy\nimmen se\nchan ts\noff line\np ent\nbre x\nw inger\nplan e\ni el\nnichol s\nca thy\nnar uto\nlow ed\n/ //\nignor ance\ncat astro\nyou ts\nsch en\nbuil d\nhaz i\ns ine\ncritical role\ndu g\ndete ct\nlo gs\nen amel\nstpatrick sday\ned die\nco pa\ncigare ttes\nho ff\nkay a\nla goon\nra pha\nair borne\nchoo se\npuer tor\nke v\ngui ding\nfro sty\nbor ough\nmir a\nðŁİ Ĭ\ncade t\nanu sh\nyo gi\ne ger\nfl ing\nslo pe\nnin th\nwe ston\nfoot wear\nf n\nmay weather\na am\npla in\nstair case\nwitne sses\nwork outs\nro bust\ndex ter\nco hort\nðŁļ Ĺ\nsp ell\nha ze\no om\norgan ising\nwild fire\ncont acts\nav on\nmin o\nupd ating\nðŁį »\nli thium\ning ual\nk is\nau ga\nlo com\nde duc\nu da\nth ak\nboy le\nmp er\nhot tie\neri k\nre vised\nis la\ntravel photography\noo za\nen qui\nconfe rences\nclo ver\ng room\ncur ves\nlive on\nper f\ndisplac ed\nbo log\nxx xx\nðŁĺ© ðŁĺ©\nte al\nve ssels\nrain forest\ncal ci\npan ther\ngira ffe\nta sted\nimag ery\npad res\nday time\nbas s\nri pe\nopio id\nnu e\nvin yl\ninvent or\nsen s\nprocess or\nmu t\ngad gets\nbibl ical\nshann on\njacqu eline\ncar y\nthe resistance\nali en\nn vi\nco sy\nbi har\nfo ley\nren d\nmu gs\nfa ken\ncl one\nni allo\ngra bbed\nchi hu\npower house\nn tt\nchero kee\nspon ge\nimple menting\nrh ine\nle one\nðŁį Ģ\npret tiest\ninfra red\nimpro v\nswit ched\ntu bes\ncon tr\nbl k\nprojec ted\nbe aver\nyo t\nbbcra dio\nthi gh\nper secu\napologi ze\nw ack\npo ster\noli ver\naz a\nlou d\n( ?)\nf the\nwomen shi\nspar row\nblu sh\nus able\nsc ales\nit ative\npeu ge\nne eding\nlegg ings\nglam orous\nmat ur\nc z\nwat t\nda b\ntam ar\net sym\nbau er\nheart felt\nh n\nelse where\nbir ch\nalu mini\nhu ck\ne me\nj l\ntraf ford\nd z\npor tions\nana sta\narthr itis\nesp n\nber gen\nviol ation\nyo shi\nc z\nnorthumber land\nclo sures\nðŁĩ¯ ðŁĩ\nsmi ley\nr w\ntel ugu\ninten si\ngre gg\nve ga\ndun geon\nsouth bound\nba il\ndomin ican\nsemi final\nchap ters\nh itch\nvan ity\ntrans iti\nrecomm ends\nsati sf\nbar ca\nqueen s\n( (\nde struc\nstra it\nra vi\ndess erts\nin tru\nhar am\nk os\nfo e\nfat ty\npais ley\nmagn itude\ndri dge\ncom ey\nschem es\nvision ary\nour t\ndown loaded\nðŁĻĮ ðŁı½\ngd pr\nlan i\np wc\ngu ad\nnic est\nstake holders\nre ferred\ngeorge town\narvind kejriwal\nschnei der\nin doors\nall star\nstrand ed\ngen der\nze pp\nma sses\nðŁIJ ±\npati ently\nbl dg\nz ab\nwe arab\nvi vid\nhe ck\nd ella\nsy mb\nje opar\nla ger\nà ª\ncomb ines\nne c\nbr ay\nflo p\ntx wx\njo ys\npon t\npro found\nsur round\nmad hu\nma ble\nay r\nte as\nn sa\nopen ly\ner nest\nãĥ ©\nto po\ng na\nanti oxid\nti an\ne tr\nc ello\nma thi\ngener osity\nb iting\nman ic\nkel sey\nchee ks\nten der\nw th\npron oun\nultimat ely\ngu sta\nari anag\nger ry\nble ed\nred dy\nmic h\nmitsubi shi\noper ated\nsex ually\nma u\ncl lr\nvi ds\nco c\nmel ted\nðŁĮ Ī\nq ld\nite ch\ninstru mental\nend game\nðŁĵ ĸ\nener gi\nbrow nie\ntam il\nat in\ndomin ated\npra ises\nfire place\nsens ational\nmen a\nk arti\nun prece\nru pt\nori ental\nmc cor\ntour naments\nscen ter\nre eves\nprescri ption\nsam e\nfra u\ntru ffle\nem bo\nroman s\nbla sts\ntechno logical\npr at\nb sb\ny ar\ntren dy\nac l\nal ad\nðŁį ģ\no hh\nbankrup t\ntho ven\nregar ds\nis er\nwar wick\nvine yards\nreal m\nniallo fficial\ndo ta\nge mini\nto do\nv able\n¨ ¨\nla u\nwre ath\nju ve\nnat asha\nle ver\nlor i\nhor ser\ncc tv\nair bnb\nes anders\nsin clair\nema biggest\nhigh school\ncon test\noptimi stic\nt te\nðŁĴķ ðŁĴķ\nss d\nye e\nhel ena\ncon sen\nric ks\njes se\nan ic\nðŁİ ¯\nre acts\nro be\nindepend ence\nvol tage\nm ington\ns ant\nà¸Ļ à¸\n-------- --------\nsentin el\nke tt\nrehear sing\naaaa aaaa\nsof the\nstir ling\nsear ch\nwi gan\nstand out\nsna il\npent agon\nÄ ģ\nch lor\ncru st\nnet any\nchemi st\ndisapp eared\nric ardo\nsp iders\nbo se\nwar ren\nme ssing\nbann ers\ngu el\npar ach\nma id\ncoun ted\nepi le\nbon fire\nspeech less\nse tter\nmeas ured\nrejec ts\nnik ki\nle ster\nforen sic\nfab rics\nalo ha\npre served\nwat ford\ndeta iling\ndar th\nbo u\ncar ly\n... \'\ntail gate\nnoti fications\nå ¤\npas sive\ntrous ers\nbalo ch\nro ther\ntypic ally\nà ¥\nsp it\nwi z\nsic ily\ntechnic ally\nex pose\nst age\nhu bb\ncre am\ncap s\npo ke\nsle ek\nju ne\ntempor arily\nde z\nawak ens\nl ame\n_ -\nji ha\ntues days\nadvis ed\nadvis ors\nexi sted\ndis agree\nnews room\nlo sers\nworld tour\ndr ying\nal di\nhar ness\nfoot print\nhobb it\np mln\ni ro\nque red\nasse ss\ngaz e\nsa b\nth ian\ní Ĭ\nti f\nob serve\nev il\ndra wer\nswee p\ncor y\nco dy\nkyo to\ncal lum\nn inj\nlau rent\nbe i\nsket ching\ncustom ized\ndu r\nregre ts\nknox ville\nìķ Ħ\nmess aging\ngrac ie\nabun dance\nbi dding\nbre wed\nfl ouri\ntherapeu tic\nalt itude\nho gs\nbur ner\nelec tro\nwonder fully\nhe ater\npost pon\nli very\nr all\nad as\na ac\nsau l\nbrook lyn\nplay house\nâĻ¥âĻ¥ âĻ¥\nchar itable\nin y\nz ah\ncompet itions\nbe av\nplu gged\no is\ndo om\nastron om\nspeci alized\nmax i\nta ps\ncellu lar\ndepre ssed\nfolklore thursday\ncri b\ne mul\në° ©\nfi gh\nru z\ncar lisle\nspe ar\nside walk\nde i\ndepend ent\nlac es\nnh s\nðŁĮ Ļ\nreali zing\nnet work\nric he\nre gin\nre fresh\nst ral\npa thology\npla id\npsyched elic\nhin d\nu ka\nalgori thm\nlin king\nprogre ssi\nfe y\nd ade\nhydr ated\nb ant\nfam ed\ncot sw\nbo ise\nas c\nrac ing\nja vier\nww en\nmar lins\npoo p\nswe pt\ntoni ghts\nwe f\nani me\nslo vak\nâŀĸ âŀĸ\ncla us\nlem me\ncli ppers\nre ls\narianag rande\nr te\nko t\nthal apathy\nhungar ian\nzu ma\ny von\nis u\njour neys\nclin ics\nbe be\nww f\nn ws\nsuper heroes\ner it\nsle ague\nidenti fication\nmo tto\nba i\nsour ced\nill er\nap i\npri se\nunprece dented\ndam as\ntuni sia\ndra in\nundere stim\ne ther\nquarter ly\nrewar ding\nal ham\nwolver ine\ncab ine\nhyp no\nnad ine\nhav ana\nda e\nðŁĵ Ī\ndr on\nread ings\nb ati\npic o\nmer ci\niti an\nwal kers\nel ope\nmi key\ngod zilla\nbur lington\nabu ja\nsocial ism\nat ility\nsh ell\nharry potter\ng no\nab ur\nre leg\nfel ici\nro gen\nneuro science\ninst in\nath am\nvou chers\nj arre\nfu se\ndef ici\nmonte rey\nde port\nmid day\npp ard\nfre ed\name ter\nwil t\nn ingham\npr att\nliber ty\nslo gan\no to\npr i\nco ated\nc pd\nne tt\nil las\nmal awi\nevol ve\naccessi bility\nðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥\nor nament\nb p\nel is\nson line\nchi ro\nfl ick\nib m\nar ak\nen ables\ngar land\nsan e\ncu ties\ntri p\nrotter dam\nn ys\nlam ps\nlu cas\nbo g\nra ils\ntravel led\nhic ks\nen u\nsab ha\nscru b\nhi er\nhart ford\nfo o\nfer nandez\ntre vor\nmat tress\nappo intments\nale j\nfe i\no logist\nsaf ar\noc ta\nsr c\nsha un\nambi ent\ndri c\nbi ker\nshe e\nmust ache\nh ta\nbo one\nher ty\ncar dio\nbra kes\nrec ital\nconsi sts\noverwhel med\ncau l\nrobb ins\nim it\nal th\nur l\nbi bli\non ne\nblack livesmatter\ndiffic ulties\ntel ang\ntall er\nðŁĵ Ĩ\ndeb ating\nbur rito\nmo vember\nstrength ening\nbo e\nte stam\nmirac les\nbase ball\nre nee\nðŁijī ðŁı»\nal fa\nâĺ ĺ\nunstopp able\nec s\ng mo\ngiftide as\npath way\nfen cing\nðŁİ ¤\nb ham\nra s\nsk o\nd led\nthel ast\nmagn um\nbin ary\nwil de\nwil der\nwh ati\nbarbe cue\nh ism\ncan oe\nkur di\neli ve\nadvant ages\nmad ame\nbi er\nmis sing\nenter tain\nair force\ny ama\nc is\nhash tags\nj is\nve il\ndream y\nten se\nmay ward\nch ateau\nhunt ington\nâļ ĵ\nv all\nup on\nbl ouse\ndun es\nðŁĺ ´\nfert ility\nm ole\ncurren cies\nst u\nber lin\ntoa sted\ndiv as\nwal t\nlar k\npor a\nhit ter\num er\nchil led\nbal ancing\nfa is\ny in\nor tiz\neast enders\nh ate\nur al\nap ril\ntim el\nà ±\nper o\nsto cked\nrespec ts\nth t\nbest friends\ngiving tuesday\nbe ad\ninv ent\nim i\nnap les\ncomb ining\ntok ens\nthir st\nma sc\npar rot\nsp u\ndent on\n* -*\nt res\nsubur ban\nwid th\nsi ve\ncon tender\nsiri us\nlo k\ntroop ers\noutra ge\ntur bo\nfrag ile\nme ssed\ndo h\ndisc ord\nnetany ahu\nre sign\nforgi veness\nmo han\nmun ch\ncam ou\nidenti fying\nenab ling\nhot ter\nthorn ton\njai pur\nar ya\nðŁı» âĢįâĻĢï¸ı\nmu staf\nmaj ors\no ke\ndu ffy\nroh ing\ntil t\nðŁĩ®ðŁĩ ³\nrock star\nshe ep\nhend rix\nra v\nin vention\ndo u\nlagun a\ngru mpy\nsw is\nim pe\n) \'\nyou ths\nbun ker\nst ache\noppo se\nindi es\nacceler ate\nml p\ned en\nw ann\nk ail\nakshay kumar\nsu pt\npol ym\nmidd leton\nextra ordin\nwil son\naustrali an\nalumini um\nway ne\nalum nus\nmat ics\ngri m\ner nie\nopp a\ncompetit ors\nrand all\nh ence\ndecla res\npre aching\nsha he\ncan e\nsustain able\nstap les\nle dge\nad ena\ndoctor al\nbur gundy\ndecor ate\nren dered\nri sen\npr ank\ndi or\nbee thoven\nflo or\nac com\nto t\nho dg\ntouri sm\nsay in\nobjec tive\nmar kers\npremi ership\nen abled\ncamou fla\ngi ant\nÑ ģ\nsmo key\nric ket\npan g\nde pending\ns ation\nevol ving\ninter cep\ncen sus\ntof the\nre en\nmendo za\ntrum pet\nmarke ters\nan it\nðŁĻ Ĭ\nnorth western\nv la\nfoto gra\nblackand white\nche wan\nwi g\ntro om\nginger bread\nk n\nro mero\nn fc\nor chi\nfun ko\nsour ce\nf s\nra ped\no st\ntar ot\nann ually\nðŁĺ ¬\nr ill\ndel av\n.. !!\nse s\ncan n\nmedic are\nph el\nape x\nguardi an\nrema ined\nr pm\na ñ\nstory month\ninstag ood\nneighb our\np ing\nsem ite\nmy stic\nas cot\nmat er\nhand ful\ndang ers\nti d\nana heim\nopol y\nsh allow\nnami bia\ntor ia\nprocu rement\nbig bang\nannoun cements\nprosecu tor\nbeng als\nsal le\nen roll\nga stro\nsugge stion\nba k\nha ul\nbudd hism\nberni esanders\nflu te\nfati gue\ncyn thia\ncho i\nir win\ngu a\nstr ous\nh p\nba p\nsatisf ying\nplay a\nðŁİ ¼\ninst ap\nal ice\nt p\nirri gation\nðŁĩ¬ðŁĩ §\nin tric\nclu es\nple x\nsa x\nhe pat\ndump ed\nsignific ance\nby u\nmedic ation\npro v\ntough est\ncorn ish\nâŀ ľ\nkel ley\nu v\nsi zz\nsi bling\nme st\ndi stor\ndiplom atic\naun tie\nb hat\nson ic\nbren da\npump kins\nro ch\nblack burn\nur ged\nshi a\narrange ments\nfloo d\nsa unders\nlec turer\nnou ri\npopul ations\ndiplom acy\nconsist ently\nðŁ¤ Ļ\nt mund\ncauli flower\nl ily\nvocab ulary\nvari eties\ncoo ker\nup town\nqu ent\nmo sa\nre inde\nvelo city\nspru ce\nsocial medi\ni ber\nvolun tary\nproce ssed\nbal tic\ny ang\nleban ese\nd p\ndol ly\narrange ment\ny uri\ncran berry\nkal yan\nelev ation\ncli ff\npu shes\nìĬ ¤\nsil ic\nco wx\neter nity\nsla ves\nvine gar\nglou cester\ncon tained\nbreaking news\naga inst\nrenov ated\nnorm andy\nhero in\nys m\nmo ds\ngre ek\nun di\ntren ch\nv h\nencoura ges\nhead ache\ngr ange\n: \'\never green\nÙ Ĭ\nreck on\nab used\nth ru\ncho ice\nti dy\ncol der\nscho ice\nha in\nbru m\nli ars\nbre it\nyor ker\nsh ack\nhe idi\nmicha els\nsco pic\nfasci st\nplay ful\nca c\nyas ss\nsh ad\n.. ?\nqu en\nram irez\nclif ton\npr s\nbest fan\nâģ ł\ngener ating\nhead set\ndisappo intment\nabstr act\nbo iled\nparen thood\nazerbai jan\nexhib iting\nbom bay\noli vier\nko so\nun lea\nmat ernity\niz er\nsi ves\nr hu\ncol l\nsaskat chewan\nfre akin\nde k\nna g\nstab ili\nðŁį ķ\norgani zer\nbo sses\nar u\nu va\nat able\nta un\nafter wards\nfert ili\nver ge\naz i\nmor ph\n๠ģà¸\njer k\ncosme tic\nko w\nstru st\nap ache\npost cards\nfor mul\nì ĭ\nspin al\njack pot\nelec tri\nà Ń\nlo y\ngra der\ndiab lo\nar di\nhe sit\nf w\narch ery\npa sh\nthe ories\nrepe al\nre live\nper cy\nâĺ Ĩ\nim in\nsyn chron\nsham poo\ncoup ons\no to\nla i\nthou ght\nluxembour g\nmo v\nðŁĺ ¥\nge mma\nse ated\nm ga\nstrat ford\nun certainty\nshi fts\nest o\nfo ol\nfire arms\ncor rie\nki ki\nappa rent\np ills\nolym pia\nfi d\nelev ated\nde cks\nignor ing\nav alan\nro v\nwhist le\np tsd\nmilit ants\nrobo tic\npac ers\nquil t\nbankrupt cy\nlic h\nper cussion\ncelebr ity\nal s\n( ;\nsu t\npokemon go\nh g\noff s\ngibr altar\nscre ams\nbilli e\ngen ome\nmar in\nbe ams\narch bishop\nem in\nbedro oms\ng ated\nol ly\nwarran ty\nat own\ncudd les\ngun na\nk ic\nvi ve\ncy mru\nnar row\npro b\nle o\nrefe rences\nmanufac tured\ncho pper\nbrun swick\nsem is\ndon ia\nr ye\nman o\nhur ting\n? #\nhol li\ninvestig ations\nc els\nðŁĵ ŀ\nle ster\ntemp les\nsto rey\nmc mahon\ntoi lets\nwo of\nï¸ İ\nle verage\nat om\nnight mares\nvictor ious\nhaun ting\ncustom er\nag i\nyo ongi\nmon ty\nver onica\nw ur\ninti mid\nblan kets\nvolu tion\nj m\nâĺ İ\nam on\njud ith\nðŁĺİ ðŁĺİ\ndistr acted\ndri p\nhurric ane\nand es\nrevel ation\ntro op\nab leg\ncol lin\ntibet an\nwor rying\ninter nationally\neat er\ncamero on\nbrad or\ny uk\nðŁĴĹ ðŁĴĹ\ntra k\nslo pes\nci er\nne a\nol er\nta ka\nalbi on\nvolcan ic\nam n\na fi\nob stac\nface time\nger ing\nn pr\nmetall ica\norgan ic\nðŁĴ ¡\nki dd\nd ances\npemb ro\nwash er\nm its\nom er\nemo tionally\ntan go\nip o\ndo cks\nscan ning\nspec s\ntho m\nthe ology\nemer gen\nom i\ng pa\nselec tions\nun necessary\nima ge\nter s\ninduc ed\ngi gan\nrent als\nsupp lied\nm fa\nshan kar\nlat er\npa jam\ncla ve\nÙ ģ\nma hin\ncarl son\navi an\nano va\nkati e\naj ith\ndesign ated\nchocol ates\ninvestig ators\ngla zed\nprin cess\ner ry\nra gn\nou rable\nhr u\nsun dance\npeuge ot\nsteam punk\ngh lin\ngre ase\nhi res\nz ap\nper ce\nj ill\ntom e\nhe hehe\njoy ful\nmae stro\nni shed\ngene alo\nv ich\np its\nfox es\ngood man\nemer son\nlo bes\ncon verse\no ats\nthom son\nra him\nmal ware\nah i\nman kind\nre sin\nim g\nsw ood\nkin der\nsc roll\nar a\nsak ura\nro bbed\nxi on\nny a\nc ism\nce dar\nbe in\nmour ning\ntor to\nheath row\ndone gal\nbar b\nhydr ation\nk or\nelim ination\nsu pdates\nhill s\nappe ti\nstar red\nko m\ngw en\ndd d\ncra y\nsc anner\npersonal ised\nseren ity\nre design\nmeta ph\nbox ed\njudg ment\nno se\në ¹\ner ad\nac ne\nsupp liers\nener getic\nv om\nas ap\nðŁĶ ¸\nir vine\nhat ch\nla ss\nad ren\nwaff les\naccur ately\nici o\nitt le\nse un\noccup y\nweb cam\nthene w\nent es\nga i\nj w\naccoun table\nvis or\nir rit\nlicen sing\nhudder sfield\ngen ie\nðŁİ ¾\natmo spheric\nten sions\nspart an\nclif ford\nol an\nnorth bound\name en\ncen sor\nu el\nster y\n$ $\nfar rell\nhy ster\ncl t\nse dan\nrep lied\ndescri bing\nmicro wave\nsla b\npro sp\nassi sting\nru bio\ne than\nhh hhh\ngu ay\nz man\nra ise\nroll ing\no e\nn ile\nambro se\nscar borough\nhero ic\ncoo ks\nmor t\nchop ra\nðŁĮ ·\nto b\nshav ing\nstac ey\ndor m\nmotor sports\nwi ki\nfol ds\nsp iced\nstress ful\nliter al\nfu dge\npe ggy\nwa ite\ntre sses\nse sh\npr ic\nðŁİ ħ\nfri ght\nr va\nmumb ai\npo m\ntt v\ncel lar\ntom e\nandro id\ndor is\ntsun ami\ntin der\no ec\nm wc\ndor tmund\nno thin\nl iti\nso u\nbelieve in\nat u\nkno cks\nmag ni\nss sss\nro hit\nine ws\nang i\nm andy\nke ttle\nintermedi ate\nav ant\ncur l\nendor sed\nori o\nur t\nconsider ation\nwi res\nshel ters\nb ino\nvik ram\nimple mented\nly dia\nbu k\nparo dy\nc news\nunder graduate\ncanu cks\nsam i\npolit ically\nro tten\ngh z\ntex tiles\nover load\nmoder ni\nrecre ational\nfli r\nbat on\ntypo graphy\nov ation\nintrigu ing\npilgri mage\nal ge\nad ays\ntcm party\nsp elled\ncur ls\nboo ze\nste m\nann es\nir ls\nspon ge\nsho pper\nsig nation\nbra ss\nmi stress\nle ah\nbeg inner\nlau derdale\naugu st\npre school\nta ping\ntai pei\nexecu tives\nb d\nrhe tor\nesc or\nimmun o\ndeeplear ning\nstat ues\nit us\nmanu script\nly ric\ncor vette\nmol ly\nla ge\nde p\ncn bc\nle st\nje ssi\nfi fe\ngriff ith\noppo sing\nran g\ndr ills\nrespec tful\np ity\nd ell\nhar ding\nplay boy\nblo ke\nshut out\nk ili\no sp\nse attle\nbc poli\nmis es\njourn als\nteam ing\nes ther\nfre ddy\nĶ ï¸ı\nmetr ics\nno tre\ngar ry\nfor ty\nnavi gate\nperio ds\nbened ic\nj id\nda w\nance stors\nrestor ing\ncon g\naller gy\ntit anium\nc ence\nlean ing\nab bas\nv ast\nuc f\nroof ing\ne man\nseve rely\nvo gue\nve au\nin bound\nd z\ntane ously\nstret ching\nman chester\ndr yer\ndav is\nkan th\nthe game\nit ted\nre tain\nel les\nconge stion\nfrat ernity\nol lie\nlo ki\nfre ely\ncho o\npon y\nsc ep\ntab ly\nbal t\nrock n\ndi me\nlo gging\nðŁį ·\nad u\nha voc\nwater ford\nchar is\nswee tie\nrun ning\nner d\nerdo gan\nz ara\nweigh ing\nfif ty\npre cise\nlow ell\nkurdi stan\nr yo\nor th\nsyn th\nlin ers\nphenomen on\nart illery\nil legally\nconstru ct\nnostal gic\ngar th\nal ta\nshel ton\na sean\nw ander\ndur ban\ndi versi\nbon o\ncl on\nle man\nsh un\nobstac les\nappet ite\nfe eder\nrespir atory\ndi xie\nformu la\nan to\nso ber\nextin ct\nau c\ning les\nlegitim ate\n; ;\nmin nie\nipsw ich\ndram atically\nðŁijı ðŁı¼\ningh am\nmilit ary\nmon et\nus navy\nfor k\ndun no\nplay er\nq otd\nst oo\nex or\nethiop ian\nfilm fest\npe red\nc ate\nsau di\nin ner\nsin cere\ntion ality\nale e\nde eds\ncooper ative\nir onic\ncro cod\nbr ary\npost season\ncam per\ncan ary\ne in\nexten sions\nnb d\nsher wood\nspo kane\nhu mp\njit su\nê ¹\ndar yl\np si\nstab bed\noffer ings\nexpe cts\ncav al\nbody building\nfr aming\nf ca\nye arly\nbom bed\nsk il\nresear ching\njud iciary\ngree ted\ntu dor\nmil o\ninnov ate\nðŁĺ Ľ\nr hs\nru by\ncontribu tor\nfam er\nsoci ally\nm lin\nfi ery\nut ter\nbeau t\nit os\nde voted\nrain bow\nbar ney\npe ren\nar jun\nr na\ngab by\nut i\nhann ity\npick le\nser v\nqu akes\npp e\nfe m\nwh itec\nj n\nvictor ies\nðŁ§ ¡\ngol fer\ncongratul ates\nresul ting\nmechan ic\nur ve\ncen tered\nkie v\nan s\nin cub\n< <\nc mo\nbestfan army\ndap h\nen ham\non cology\nku sh\nt xt\nori ented\nfashion able\nc sr\nsa hara\nr ack\npd p\nhan son\nภĩ\nti ers\nra r\npan am\nin sky\nsa hi\ntestam ent\nasth ma\nin her\nfisher ies\nor der\nho we\ngall on\nep is\nsuz anne\ndrow ning\npaneli sts\nðŁĺ ²\në ¦\nal ach\ncommemor ative\nat tribu\nðŁij »\nmo o\nvisi onal\nweek sary\ngu st\nak in\npoin te\nee e\ndi spar\nni pp\ndent al\nst all\npi an\nbor e\nul ster\ntic k\nir r\ntae hyung\nmicro phone\nbermu da\nga ard\nel er\nplumb ing\nhu gely\nâļ« ï¸ı\nrace way\ncam bridge\nmar cel\nburn ley\nto ast\nholly wood\nfa sting\nme red\nhib ition\nca pped\nbenef icial\now ning\ncont amin\narab ian\nto on\ncap ac\nhul u\nsm ir\nnutri ents\nse in\ngraph s\ncon ditional\nðŁij ħ\nor ac\nplay in\nnor the\ntor nad\nmar ian\nju mbo\nlex i\nincredible india\nroad to\nuk one\nconfu sing\nsp h\nshan k\npi ed\nmq m\npositi vely\nsher ry\npath ways\nconsi ders\ntof u\nargu ments\nresil ient\nche tt\nwith dra\nter o\nated ly\nsw ana\nhe b\nfli ght\nhar ley\ndecre ase\nkind le\nbook shop\n³ ï¸ı\nmarty rs\nsm ur\nmc cl\nconcer to\nsti me\nrejo ice\napp lau\ncle ment\nmer kel\njai me\nim mortal\nisle of\nmar co\nyoutu ber\nstal king\nme too\nst ack\nsp ouse\nu st\nlu v\nâļ¾ ï¸ı\neque strian\nev ing\nfl in\nnick name\nthe big\nas ar\nst acks\nwal ker\nbor a\nkidnapp ed\nhur ling\nhumb old\nrec alls\nco pper\nann is\nse o\nmer ger\nmu ir\nad dy\nðŁĴª ðŁĴª\nbe x\ncr acy\ncon an\ncongratul ation\nmid st\nâĻ ¬\nfor bi\nop tic\ncr ate\ncrocod ile\nmad agas\nsecur ing\nast on\no gue\nsavi or\nsalis bury\nlove it\nfuji film\ncast les\nas st\nar rows\nsp acious\ntr s\npoly vore\nprogre ssion\nm ri\nnel son\nbi m\nindic ator\no da\npe pe\nre signation\ngu t\nsne aker\nlog ically\naz y\nare lla\nte aring\njo shi\nssion ism\nq pr\nmari ah\np x\nble ed\nmi an\nmed ley\nwe iss\nker ry\ngat ory\nat al\nmadi son\nav enger\nnab y\npl and\ngi les\nfresh water\nd ington\nta j\ndemonstr ates\nn tv\nbul bs\nsunday morning\npe ake\nsouven ir\nwa h\nton nes\nm kt\ncomplex ity\ncon den\nross i\nb ing\ny ds\nsu k\nn go\nmid land\nol y\nlife is\nri pple\nmo reno\ndd ers\ntu s\ná ĥ\nbou l\nx a\nhol dings\nwn y\nshadowhun ters\nke i\nasp ire\nm ous\now en\nso ak\nskir ts\nmoun taine\nstor ming\nch rome\nri ots\nsar ato\namaz e\nless ness\nnav ar\ncrit eria\nra fa\nindul ge\nay er\npor to\nnam o\n........ ........\nyi elds\nval le\nj h\nmac ron\nsa ins\ndur ant\ntra ilers\nwo t\nconfeder ate\nsh rin\nid ol\nform ally\nten e\nmotor cycles\nthan g\nno de\nbang er\ndal y\np ats\nenroll ment\nau ctions\nat al\nar bor\nlo gos\nde arest\ntrans action\ndom ingo\nfle a\nser mon\nde ck\nsin cere\nquesti oning\njuli o\nwas p\npre tz\narmen ian\nk ham\ninflam mation\npicture sque\nacci dental\nfilm makers\nðŁĺ ļ\nðŁĴ į\nca sey\nso b\nyee zy\ngood will\nparag ra\nss ly\nfe ather\ndy ed\nassassin ation\nna de\nb cs\napp lies\nfemin ine\nfe u\next ent\ndepu ties\nl ack\npsy chic\ngo i\nkill ings\npse u\nðŁ¤ ª\nun c\nmar l\ntan e\nmck enna\nsur fer\ninflu ences\nfree way\nhack ney\nmal aria\nel and\nte au\nrema stered\nØ ±\nraz or\ngg y\ncor ro\nlak sh\nfla ir\nhonest y\nhoor ay\nde pp\nam c\nwedne sdays\nq a\ned its\n- $\nse villa\ndou bled\nhuman ities\nc cot\nsom os\nr ine\naf a\nsi oux\nre construction\nwel ding\nth reads\nam ish\nencoura gement\npo der\nbo ck\nbal m\np tions\nstand up\naccompli shments\nguar ding\nconvic tion\nac ion\nnapo leon\ndepic ting\natt ack\nsu i\nwear able\nâĸª ï¸ı\npot ter\nesc ort\nvis e\nto ts\nbo on\nevent profs\nangu lar\nwomenshi storymonth\nbar row\nsch i\nac comp\nti k\nl end\nkensing ton\nwol fe\nst acked\ncra shing\nexhi bit\nwing ed\nsab rina\nma sa\nk ms\nalway s\net t\npla sma\ncounsel ing\npick les\nnfl draft\nmr s\ninev itable\ncoura geous\nstaf ford\nwriters life\nho s\ne j\ngh yun\ntrade mark\nadri an\ninfluen cer\ncoron ation\nra ging\nexplo red\nusa f\nexcep tion\neu x\ntan ker\nsw ami\npac ket\nðŁij¨ âĢį\nf en\nshe en\na ero\nj l\nre gal\nnw t\nau ster\nmeh ta\nchar ge\na ste\nb ate\ninf eld\nracec ourse\ncollap sed\nfle ece\nz il\nal lie\nalternati ves\ngeor ges\nðŁĵ į\nquir ky\nfc b\nnat geo\nphilanthro py\nbra i\nevery day\nðŁIJ °\nach ers\nja an\nfin es\nq i\nfisher man\ndistin ct\ngri mes\nnation alist\ncomm ence\nro wn\nâĢ ³\nz ing\nf ter\nhr w\nbaro que\nbl ender\nkitt y\nhoo ks\nc ited\nw anda\nconsen sus\nreinde er\nan and\nsupp ly\nme ds\nv n\nol ph\nrat chet\nshel don\nsecur ities\në°© íĥ\ncro m\nmosqu ito\nj eric\nim mac\ndimen sions\nâ ¤\ndi ssi\nsponge bob\ndami en\nsteven son\njo anne\ndel ish\nyi kes\nthan x\nsurve ys\npostpon ed\nalco holic\nal ised\nðŁĻı ðŁı»\ndo ch\nsen tim\nmered ith\ncom pares\nb ago\nhappy days\nmo ss\nãħ ĭ\nne c\ngn ment\nfrustr ated\ncomb in\nri v\nec lec\ncol lo\ncompli ment\nactor slife\nct to\nnic ar\nop hon\napar the\nman t\nja de\ntrol ley\noptimi zation\neye on\neco logical\nqui st\nep he\nॠĩ\ncin co\nappo ints\nold school\nc pr\nbehavi oral\nmin aj\n:- (\ntag ging\nev al\njo aqu\nðŁĺ «\nha k\nde me\njama ican\nso s\nhy att\nhand book\nlibr arian\nhanni bal\npump ing\nch om\nf man\nga i\nhu ll\nrespon ders\ngreen ville\nn us\nvau gh\nðŁİī ðŁİī\nta xi\ngold berg\nman tra\nte ase\nforbi dden\nmetho dist\nati vity\n* ***\nec t\nmc gr\nĦ ëĭ\nse b\namid st\ndisapp ear\nthy ro\nphili ps\ner ina\nv icious\nstream er\nmillion aire\nma p\nstr ick\nhack athon\ngh a\ned ic\nmi ka\npe ck\nill i\nanto ine\nar ca\nop tic\nma ure\nðŁĩ¦ ðŁĩº\ncla shes\nman ly\nâĺ ģ\nal var\nand res\nme i\nel m\nww ww\nal tered\nl te\nê¹ Ģ\nmo jo\nfor rest\nthal ai\nnon t\nspee ches\nacknow ledge\nign ite\nx factor\nðŁ¥ Ĥ\nmead ow\ndisru pt\ndebu ted\nscrim mage\npharmaceu tical\nfi dd\nfound ations\nphilosop her\net al\npubli shers\nbo ys\nc ke\nru gged\nopti mism\nre be\nphil harmon\nnar cis\nral lies\nlu is\ngo blue\nfol ded\nun acceptable\noptim al\nli sa\npol aro\n+ .\nen za\nâĿ £ï¸ı\nmon opoly\ngrace ful\ndair y\ndu a\ndiffic ulty\njudge ment\no si\nmer sey\nflu x\nnew found\nter ns\ndimen sional\nin vic\nal ba\nam it\nabudha bi\nalger ia\nautom obile\nthe ad\nlo tion\nacceler ator\nvac ant\niti on\nlu f\nal ic\npl l\nbla zing\nba z\nsen e\nðŁij ¼\nvilla ins\ndirec tory\neis en\nto ck\nbroch ure\nri pp\nhb d\nzayn malik\nnic he\nlo lol\ncertific ates\nmor se\nfac up\nx ham\nun wanted\nim ports\ncarne gie\nfan sign\nmo u\nr alph\ndestroy er\nsw ing\ntrek king\ncili ation\npit bull\ng aps\nho well\ndefin itive\nmc le\nf ps\net z\nbol ly\nlyn n\ngan o\nat ure\nfur suit\nco il\nna v\nbut ts\ntro jans\neu re\nen ko\nsch umer\nhorri fic\ninstall ment\nbr b\nsubur bs\na bel\nvi r\nde sh\ncun ningham\nðŁIJ »\nspan n\nsch we\nke mp\ntr u\nste alth\nqu es\nle w\ndeli ghts\nko ch\nhu mili\ncr iti\nil t\nsp ells\nmi ley\ncar ic\nðŁį ´\nlc fc\nsubstitu te\noun g\n? !!\naf fir\npredic table\nclass of\ner r\ncy press\nchand ra\nage ing\n__ __\nther land\ndon caster\nel in\nyo shi\nsail ors\nhar ris\njo anna\nniger ians\nh ers\npla gue\npro cra\nk no\ncan ton\nbusine s\nun h\npra kash\nc in\nbow en\nco ating\nm als\nbe gging\nsmith son\nponti ac\nsp ies\ndam ian\npl ine\nund ant\nal ta\none ss\nshame less\nda q\nbb m\nwal es\nstam pede\nser um\nÙ Ĩ\ncataly st\nx n\nab sc\nfree zer\nch un\nari os\nmc cre\nfore head\nhe ars\ndamas cus\ntac oma\nardu ino\nencoun ters\nstan ton\nlg b\nab as\n" ..\nke te\ndrac ula\nele m\ng ne\nzepp elin\nla brador\npul p\nop tional\nor n\nrussi ans\nsan itation\nhil ary\netsym ntt\npen alties\nau st\nig ans\nolympi an\nmedic aid\nvers ace\nva pe\nre stra\npe ep\nsexi est\nst alls\ndi le\nthe a\npunjab i\npupp y\ntuesday motivation\nðŁĵ ļ\nthe flash\nroc ket\nmo dest\nchihu ahu\non na\nk sa\nhur dles\nca ve\nfail ures\nsp lit\nbo ho\ngur l\ndisappo int\nho ward\nnug get\nfran z\nstal ert\nkaz akh\nfor getting\nsch ri\nag ate\nam at\neve rett\ndu et\nveter inary\njuli an\nch ills\nbra ve\nghost busters\nlan do\ngre ets\nprofit able\nd é\nti r\nze e\nom en\npd x\ngray son\nhar i\nfix es\nstab bing\nswim mer\nsymb ols\ncompli ments\npo se\nfunc tioning\nth nx\ngi r\ncorpor ations\nbar low\nlo e\noff season\ndistin ctive\nmarvel ous\nnik on\nenri que\nky u\nja ws\namo to\nlom bar\ntravel blogger\nfa h\nouri sm\ntri stan\nso e\nce ase\nðŁı ħ\nz ac\nmck enzie\ntaxpay ers\nswim suit\nbl o\nles ley\nkan sas\nw ks\nki el\nprovo king\nmy les\nstr ing\nkangar oo\ngalac tic\nfif th\ns ke\nwe ir\nll is\nmat ory\nðŁĩ ¿\nun ci\nre productive\nroo ting\nti des\ngad get\n.... ......\nalex ander\nbow ler\nscre w\napo log\neri ka\nwal ters\nshet ty\nlan e\nban ter\nas ant\nme so\nv ain\n" ""\nus i\nfer din\naccomp lish\nman sfield\nbom bar\ncollabor ating\ncla p\nit ure\ns da\nsmo ky\nna k\nim person\ncar la\ncom ra\nbur gl\nlo co\nti es\nin hi\ntrac ey\nse is\ndiss er\nrr rr\ndra y\nprote ct\ncor ona\nhun ger\nck en\nc eli\ntrou bled\npredat ors\nfic tional\nshav ed\nriche st\nmetab oli\nful ham\ngro oming\nmono chrome\nwa sting\nas co\nast e\nti sta\nremedi es\nung soo\nsouth end\nperman ently\nbu mble\nprocra stin\nident ical\npractic ally\nma scul\nsu ke\nassu red\nval erie\ndevi ant\ngrizz lies\nthi er\npur a\nne pal\nnot ts\nbil ateral\nspo il\ncar mel\ncine matic\nph l\nni fty\nma o\nhypo cri\nla ser\npan try\nmathemat ical\nel isa\ncoordin ation\nbel mont\na it\nradi ant\nbo iler\nman g\nf ag\ncr c\nh ams\nbr in\nâ¬ĩ ï¸ı\nfamil ia\nâĿ £\nsab er\nru pert\ngg an\nrit z\nmic h\nsal ford\nle vi\ngra l\nðŁĴ ¤\nn ino\nce d\nbusiness man\nul tr\nsim ply\ncompre ssion\npa ins\nhal t\në°©íĥ Ħ\nlandsc aping\nn f\ncroo ked\ner d\nitt in\nddle ston\nsur passed\nino a\nda g\nbl en\nexten ding\nat ing\nal gae\nball er\nu mar\nsnoo ker\ncol lu\nflo wn\nthu b\nridic ulously\nki sh\nop le\ndi re\nas ser\nari sto\nsc iss\nh ating\ntrou ble\nsyl via\nsuc cul\nplo ts\nsincere ly\nal er\nlaure ate\nbr ack\natt n\nrif les\nme to\ncollec tible\ncu omo\nconte stant\nconsist ency\nant z\nrang es\nabig ail\nde b\nmini ster\ngrow ers\nan oo\nhoo ver\ndream er\nnu cle\nresear ch\nmi y\nsha hid\nma v\nd honi\ncin i\ndo j\nhin dus\npart ying\ndal i\nalon so\ninform al\nclark son\nit ton\nki an\ncit yo\nmor i\nla sted\nas pen\nlibr ary\nsusp ici\nqu at\nden ial\nfol der\nch ori\nswee ping\neni x\nðŁį Ĥ\nØ Ń\nnas car\nhandmade hour\nmou l\nheat wave\nem er\nexam ine\nib n\ngr ind\npo v\ntion ist\nm bo\nshe ila\nintegr ate\nom es\ntake away\ncer v\ncon nie\ntic ket\nce led\nbi en\nvisu ally\nmadagas car\nsor ry\ngu i\npark run\ntra its\nla be\npois oning\nॠĢ\nvi able\nbohemi an\ndenti stry\nbad os\nspr outs\nmask ed\nte ddy\nðŁĺ ·\nsa f\nsa as\nji ang\nti ght\nspe aker\nwithdra wal\nbc n\nas signed\nclass rooms\nfle ming\nðŁĴ «\nsuper girl\ntot als\ntable top\ne books\nhorizon tal\ncra z\nflu sh\nj ard\nc dc\ner son\nãħ ł\ngreen wood\nni h\nco x\nad a\nlit re\ngo ing\nv icky\ncur ved\nlou ie\ngra ins\nhy e\nlon ge\nreme dy\ntra inee\nsan jay\nsuper stars\nma ser\nman u\ns age\nwh l\nðŁĺĤ ðŁĺŃ\nðŁijį ðŁı»\nm sd\nen z\nrab hu\nj oo\ngh u\nac er\ne po\nresurrec tion\njustice for\nbl ended\nmo da\navalan che\nfrance sco\nre spective\ng s\nye ast\nwel ch\ndevo tion\nge tin\nathe ism\nam ic\ncarol yn\nlo c\nld nont\nave c\nus da\nle gged\nbra very\nb lower\ncow boy\nhe h\nsti ble\nbuff al\nchann el\nrun chat\nâĺķ ï¸ı\nide ology\nbest seller\ny oo\npe anu\nbon ne\nfel ic\nedi son\nfr actu\nnaren dra\npp ets\nseym our\nri viera\nhe ctor\nnecess arily\nbi anca\nsoci eties\nthe best\nw g\nsent ences\nwin k\nvacc ines\npal ooza\njam ming\nas f\nmp us\nagre ements\nec k\nba c\nhon ore\ncom pul\nwild cat\nim posed\nyo ga\nhud son\ncan celed\nl ich\nfu zzy\nes que\nch uk\nw vu\nse k\nfli pping\nr hon\nwi shed\nwh a\ncap ability\nlen ovo\nìĨĮëħ Ħëĭ\nvi vo\ntv d\nnor a\nsil k\npas adena\nyo semite\nvalu ation\nclo cks\nu ber\nmr c\ndar kest\nau bre\nss o\nbell y\nwrest lers\nkill in\nlou der\nbuck ley\nge el\nad on\nun s\nappe aling\nðŁij ¯\nsemit ism\nlist ens\nfit z\nãĥ³ ãĥ\nny lon\nar ty\nseem ingly\nhal a\nsu ited\net y\nshe ds\nmu ffins\nap ric\num ents\nu ta\njam mu\nchelse afc\nstar z\nyo ko\nroo t\nclean sing\ndi ar\npione ering\nihear tradio\ndig iti\nfin dyour\ncan o\nðŁĴ İ\nz ol\nspac ecraft\nsix ers\nmoi sturi\nb ile\nti sts\nhor ton\nrang ing\ncolum bi\nmete oro\nsenti ment\nep l\nfoo th\ntext book\ndrain age\nr ly\nsc ue\nimran khan\nðŁĴ ¸\nmargar ita\ned dy\npredic ts\ngamer gate\nadvis e\ngrowth hacking\nlove you\nug and\nv f\nbeng hazi\ns later\nne wor\nch el\nindependence day\np np\ncul len\nhoo dies\nnum bered\nbrit t\nt sa\nkl tu\ns ages\nmom o\nonep lus\ncol l\ngu ts\nw ta\nmesm eri\nenh ancing\nchiro prac\nj is\nteen agers\nm one\nconstell ation\nsweep stakes\ne ze\nslovak ia\nla ye\npear ce\nwa ver\npo gba\nk ron\nsur geons\nmar x\nti d\ngg a\ndesc end\np ours\nupri sing\nwal la\nsab bath\nbachel ore\nmack in\nk am\npeter borough\nhor a\nðŁĮŁ ðŁĮŁ\nthink big\nr j\nhy drau\nsp al\nunivers it\nðŁı ī\nmail online\nleague of\nten ants\nw ally\nlan ce\nheav ens\ndd r\nbol ts\nam ir\ni phone\nci gar\nen du\nre i\nel abor\nr inging\njohn son\ncharacteri stics\nsal oon\nalgori thms\ntal kin\nm tn\ndi ve\nregion als\nff ice\nhat i\ndeviant art\nso tto\nshir o\nl ama\nk we\nf aded\npor ting\ntu mmy\nest ates\nbuen os\nðŁ¦ ģ\nbeli ever\npen etr\ndar n\nsp ite\ncan opy\nfashi oni\nt illa\npet als\neli jah\nbra wl\nmarty r\në°©íĥĦ ìĨĮëħĦëĭ\nmid town\neric h\nd apper\nsm town\nme gam\nww w\nle le\non s\ncat fish\nfir th\nfossil friday\nball park\nth aw\npot ent\nilli e\ncre ep\ncar p\nso ap\ngun dam\ninfe c\nyy yyy\nठ¨\nz ag\nrit t\ncalcu lator\nbo ca\nok o\nto ad\nthreat en\nrefin ed\nolym pic\naccompli shment\nbacter ial\na ji\ntat um\nfeli z\nshe ed\nj at\nth ic\njam al\nðĿ ĺ\nlin a\nðŁIJ ¯\njo king\nyot po\npin ch\nak ron\nher b\nmotiv ation\nli a\nho stage\ncre ek\ngam ble\nruss ell\npatt i\nfo tos\nc pc\nbro ken\nback the\ncla ys\nu mm\nstock ton\nmat ernal\nü r\nla kel\ncent ury\nbe k\ninfe cted\nภ¡\nsmack down\nman ned\nta hoe\nsm es\nbas a\nsu la\naugu sta\n. *\nrohing ya\ngre ed\ncounsel or\nsilhou ette\ngra vit\ncla use\n\' -\nbo bc\nocca sions\nnow adays\ndic tat\nbe ard\nn ally\nbrigh test\nkab ul\ninc india\ndhan ush\narchae ological\nche ape\nmizz ou\nd hi\nov ski\nbax ter\nasse mble\nà ¢\ngi gi\nac am\nwis ely\nhaz ard\nnorth ampton\nâľĪ ï¸ı\nme th\nbla sting\nre unite\nmu lus\nali zes\nt read\nmil a\ned ward\nko va\npe sto\nðŁij ¶\nvit z\nhydrau lic\nrefurbi shed\nmo tel\nisab ella\nhom me\nsever ance\nuph ol\nmis erable\nf ari\nlat ter\nef er\ncrack ers\nes l\nac io\nyy j\nin an\nec b\nz ind\npan as\ntru cking\nre ed\nsh aker\nburge ss\nem pire\nag nes\nn ington\nart works\nfr s\nti le\nbi ome\neu n\nch ong\nameric ana\ngod father\ngo blin\ni shi\n! ).\ntemp ted\ngen omics\nmand ate\nck y\nðŁĴĻ ðŁĴĽ\nsom ali\nbr andy\nin ven\nspoke sperson\npc b\nyu an\nh g\nfa z\nstarwar s\nro wan\nblue grass\ndon g\nd day\ntrin idad\ner ton\nban ning\nre tention\ncu red\ntober fest\nre set\nwe is\ndeta ched\nbehindthe scenes\nimmun ity\nph a\nbra y\nðŁij ½\nran cho\nram say\nest onia\nnd tv\n] .\ncab aret\ntar o\nd v\nshow cases\nplu m\nðŁij ¸\nson oma\npre pa\nmemor ab\ne stu\ndrive way\nu les\nmagn us\nx r\nnn n\nmuch as\nen ge\nstre amed\nfore stry\naudio book\ntro y\nreck less\nkil om\nru ler\nra k\nproce ssion\ni ons\npo ole\nnoc tur\nwh s\nfarm house\nper a\npar me\nhypocri sy\ns ics\nv ant\ncas k\nholi stic\nau st\nÐ ¿\nin do\nðŁij© âĢį\ndi so\ndisp atch\nol sen\nmake it\nen nis\ncent re\nar range\nðŁĮ ¼\nsal ted\nea siest\nf ate\nreg atta\nmo zz\nac an\nsin i\ng ically\nch ops\nchick en\nwork in\nha gg\ninvol ve\nwee ds\nbook day\nwake up\nky r\nmichel in\nfu ss\nre juven\nvac ancies\nincar cer\nm st\nsc ents\nsovere ign\nkick er\nà §\nbo d\nâĢĶ >\nsa h\nmob il\nshrop shire\noph one\ndress er\nmis suni\nhep burn\ni mo\nfoli age\ndiagno stic\nas san\ncycl ing\nguil t\nc sa\npuertor ico\nwin elover\nwake field\ndo ggy\nk he\npa pp\nco g\nal lot\ncu ck\npoe tic\nmi o\nre vit\nmag ician\nç ¥\nant enna\nwest wood\nmber g\nlux e\noat meal\nØ ¬\nte at\nffe e\nsear ches\nl ly\nplu to\nel on\nlet tering\ninno cence\nfa i\nann on\ntelang ana\nma it\nneu ral\ncan ni\nar oma\na stor\nfe x\nco cac\nmon etary\nf ent\nun sure\n\' @\nindi rec\nteh ran\nisol ation\nli bs\nmake up\nmerce des\nff y\nhe tero\nde o\nsco m\ncur sed\nveteran sday\nfranken stein\nshre ws\nde co\nge ese\nlefto ver\nha did\nvari able\nacade mics\ncarol in\nunder going\nvari ation\nna h\nssi er\ngamer sunite\npur suing\nemer ged\nll ers\ncontrol ling\nro aring\nmete or\nvol t\ndaw gs\nbe aver\nis life\nbathro oms\naci onal\npre vent\nlake district\nin als\ny ani\ngra bbing\nsac ks\nle z\nsw ay\nk ool\ntime s\nklo pp\nla de\ncon cord\nresul ted\nrevi ve\nrecon ciliation\nol and\naz z\ngir o\nmand arin\nde en\nnutriti onal\nis coming\nvan i\naw www\nder ived\nlove your\nstop the\nshou ting\nnov ak\nðŁĻĮ ðŁı¾\nlo af\ndispla ying\nsunday with\nma guire\nch eri\nðŁı Ł\nre match\nqu ic\nÚ ©\ny in\nðŁĺ ¹\nili ve\nz ip\nour ke\ndown loads\nsw at\nmissi ss\ncare rs\nt ment\nproper ty\nhahahaha haha\ngi bbs\nsur rey\nar ise\ntic ism\nsti a\nir ling\nfro g\nco se\nbas sist\nfore ig\nlea u\npil lows\nhol la\neli e\ndisclo sure\npeanu ts\ninte ch\nww c\nplun ge\ntrium ph\ncor i\nsli ppers\nðŁĻı ðŁĻı\nneutr ality\nma re\nhair y\ngang ster\nhu mming\ncust ard\nmer lin\nale a\ns by\ndam p\nmo han\nver bal\nj st\ngu tted\nb jor\nun finished\nðŁĩ¯ðŁĩ µ\nun happy\nâļ« ï¸ı\nby pass\nat su\nfis cher\nsa v\nafric ans\nre use\nmid way\ndemo lished\nger rard\nher cules\nÄ Ł\nmedic ines\ncl icking\nsur round\njo ong\nwav ing\ntri bes\nwet lands\noffici el\nargu ing\nl le\ndo va\nsu zy\nclub house\nne gro\nob tain\nga o\ngl ance\nassi st\nch os\nãĤ ¢\nâĺ ķ\nadri d\noccur s\nst ans\npar don\nlivel i\nemplo yed\nre visit\nff xiv\nbb le\nne aring\nmin er\nðŁĺ ¹\ngiov anni\nup to\nmar vell\nmar se\nto wels\ncb n\nengine ered\ny elling\nspart an\nsi ans\nðŁĻĮ ðŁı¼\nse v\ncoyo te\nsta di\nt cm\napp en\nshenan igans\nopen access\nso aked\nma squ\nle vine\nstro kes\nl k\naparthe id\nhipho p\nchar don\nmay may\nha asan\nstri pped\nfr o\nscri ption\nf ton\nh f\npri sons\nmarsh al\nķ ãĤ\nan cho\ncom promise\nclassi fication\nbuzz feed\nbblo ggers\ndeser ving\n) /\ns way\nob o\ncamp ers\npoder nfamily\np oured\nbri e\nsquir rels\nse ize\n: #\nle k\nti mb\nst acy\nnas daq\nrepe atedly\nbr at\nmi ghty\ncompetit or\nmah one\nde si\no ke\nbm w\nshi e\nf cb\ncheape st\nminim alist\npar amount\nn ate\nhar as\ninsan ity\nlat eral\nment ality\nmo zam\nta pped\nyad av\nu sp\nb way\nthe od\nbil t\nra ids\nem press\nadap ted\npat ron\nnut shell\nag ra\nbe aded\nsundaywith marsha\nvi king\nproce ed\nmain tained\nthinkbig sundaywithmarsha\nsn es\nmus ica\nto wer\nch ab\nbo k\nsm t\ninsul t\nharve sting\nwindo w\nru ther\nbe ige\ndec al\nindic ate\nma iling\nri ft\npo le\nander son\nch oral\nsp ride\nl ili\nev elyn\nimrankhan pti\n.... "\nke red\nun dp\nwater falls\nse ars\nle mans\nworld series\nri el\nani e\napp ar\nscore rs\nlam p\na than\nphys icians\nqu inoa\nrefu sing\nvu itton\nunle ash\ns la\npat i\nshou ts\ninten tions\nfo amed\neurope an\nneighbor hoods\nme er\nman son\ndu h\nbr at\ncon es\nbow l\nkazakh stan\nठ¿\nin appropriate\ndel hi\nketch up\nful ton\ns ys\nconsul t\ngar field\nto go\nf ml\nf led\nb ds\nfacilit ate\nree bok\nselfi e\nelev ate\nactiv ate\nbi ble\nca wx\nb ys\ncam ille\nsy ou\nsk ool\nher t\nw bc\nple dges\nrecor der\npo sh\nac re\nso aking\nmat il\nv sco\nshoot ings\npla r\ne con\nðŁĻĮ ðŁı»\nrashi d\nu bi\nðŁ¤ ¤\nsw inging\nwi pe\nrap tor\nm su\nmusic video\ndur ham\nat tic\napar ty\nfe tus\nactiv ation\naa z\nmotiv ate\nðŁĴķ ðŁĴķðŁĴķ\nj al\nठ®\nag on\nsche er\nstal ker\nfo ster\naz zo\ntele gram\nvi gor\ns laugh\nscreen shots\nentrepre neu\nkri stin\ninten tion\nch illi\nfr action\ndon a\nge a\ntc u\ns ite\nla k\nem il\nd nt\nbor o\nwil kinson\nre cu\nato day\nt anya\nbl anco\ncd n\nbrilli antly\ng cc\nac c\nevacu ated\nther ine\nden ny\ncait lin\nshe pard\npou ch\nhand held\nsou theastern\nha a\nà ´\nre solutions\nled ger\nsr in\nr ar\nshat tered\nchim ney\nim with\nmete or\nhand led\nra ke\ntown send\nen han\nshi py\nduc t\ntw x\ninflam matory\nwar hammer\ntheat rical\ngro s\nsk ar\nsco tty\nni el\ntit o\ntin i\nconne ction\n_ .\ngoldeng lobes\nsha q\nðŁı ³ï¸ı\nhall way\nfron ts\neffec tiveness\ngla ston\nd hs\nex pi\nto h\nc pl\nsc s\nre o\nha g\nresemb lance\nhor an\nabu sive\nqu er\nvirtu e\ncho lester\na q\nshan e\nm ce\ncarri ers\ndi stress\nre wind\n ¡\nvoo doo\nint act\nann o\nðŁĺ ¤\npi led\nadi a\nãĥ ³\nen ow\ndi gs\nlight ly\ngoo fy\nturb ine\ngovernor s\ncon te\nre open\npa h\ni ve\ncra fting\nswee ps\njo di\nan de\nzu cker\nkaw aii\no ko\nv ai\nout line\nkri sti\nts n\ninsp o\nqu int\nfil thy\nlyn ne\nlisten ers\ndepar ting\nor d\nt weed\n, &\nale k\nsel fish\nnor ther\nrecogni zes\ni ps\nbe s\na ed\nw ills\npe at\nsurround ings\nmon uments\nais le\nbe cker\nla v\nquant ity\nv ah\nhelicop ters\ntu cked\nalv arez\nsha pe\no bey\nad diti\nroad side\nm ite\nbl ers\nep age\nj au\nignor ant\nb ins\nlu lu\nx o\nc fo\nee eee\napprentice ship\nshef fiel\nto i\nho k\nfaken ews\ndeplo y\naid an\nhusk ers\nãĢ İ\nwest brook\nmi ster\nconfi gur\ncar r\nfic a\nproceed ings\nha w\nste ak\nmur derer\npay day\na jo\np vc\ndon ates\nbi af\nnom nom\nbe it\nk ali\nx rp\nahmed abad\nse mic\nche y\nx tra\nan twer\nhead lining\nsqu ares\nroun ded\nflu ore\nbol d\ndisa sters\nam oo\ngener ic\ncran es\nbrief ly\ngi g\nauster ity\nanticip ation\nfor ti\ntreas urer\ncann y\nce cil\ndete cted\ncheck list\nภ§\npam ela\nbar bados\nan field\nhear ty\ntx lege\nperen ni\narro g\ning ram\nâĹ ı\nty ne\nspo on\nr ation\nam ba\nm be\ncam el\nh hs\nyork shire\nreflec tive\nfre aks\nto k\nju do\npartic les\ndu bs\nban jo\naccred itation\nprover bs\nover dose\ninte gral\ngu ang\nmc s\nsuper car\naf b\nal vin\nail s\nx tre\nst aging\ntw ent\nrabb its\nmar o\ninste m\ndol l\ncr ay\nsant ana\nble ach\nmini ons\nche ap\nman t\ndi vers\ncatal onia\nlo is\nmat ri\ncou gar\nkay ak\ne gre\np so\na ia\nå ®\nchar lton\ntr acked\nsc ari\npe tt\nf wd\nx in\ngra vel\nbr ic\nbigg boss\nar den\nhu gging\npal ms\nst v\nli mb\nthe movie\nhandic ap\nri me\nz ai\nstu b\nindi a\nlithu ania\nrhy th\np ita\nmaced onia\nhigh ered\nbrid get\nschwar z\nske let\nhi kes\nant arctic\nc ps\nmash up\nÐ °\nn ell\nchand ra\nhe ir\nan us\nsher idan\nmi mi\nmuse u\nbec ca\nan ir\nbar rie\ndioce se\ncompar able\nðŁı³ï¸ı âĢį\nyuk on\nme p\nhor mon\nmer ic\nal f\ncon quered\nchrist church\nðŁĴĻ ðŁĴĻ\nhazard ous\npoo h\ncont ing\nretro spective\npar ame\nna ir\ncon sor\nho tra\nastoni shing\ncater pillar\nu man\nti sm\nt vs\nserv ic\ncroy don\nmor ales\nc g\ncu m\nte ur\nscan ada\ns all\nmagno lia\nel ise\nth our\nà® ¿\nag omez\nphel ps\në°©íĥĦìĨĮëħĦëĭ ¨\nwh os\nweav ing\nsi sd\npro poses\ncro ws\npre sale\neconom ies\nbernar do\nsha hid\nair show\nmc cann\nhor ticul\nnr l\ndu el\nmongo lia\ntou lou\nrequi rement\nstruc tured\ned i\no lives\nhe a\ncu ter\nÐ º\nenthusi ast\nharri et\ndomin ion\nsub mer\nðŁį ĥ\nsa ab\nnes burg\nmo ff\ndef ended\nbur t\nrewar ded\ngold man\nop tics\nkhali d\nhouse holds\nbuc kets\nce cil\nche ss\nsubstan tial\nef l\noper ation\nevalu ate\nst n\nrece ssion\nl ll\ntom as\ntru ths\nak bar\ns words\np act\nembarra ss\nha o\nay urve\nscrip ture\nny cc\nop t\ndi ameter\nsc ented\norgani zers\nre lat\nha e\ndream ers\nde se\nðŁĮ »\nrestric ted\nn ale\nr hp\ndol an\nmun ster\nha ired\nconsult ants\njo ints\nhu mil\nd ill\nrelent less\nt é\naf il\nut ilities\njapan ese\ncondem n\npet ite\ncolli de\nq f\npeach es\ncou rier\nl ore\nâĺİ ï¸ı\nreli ability\nch uk\nðŁĻ ĥ\nstu res\nge ther\nho stel\nbi er\n- _-\nâ ĩ\ne ze\nta ilo\ndi ent\nblu ff\nchu ffed\npil ip\nmon arch\ne em\nbu chan\nb ick\nop au\nku ps\nภ¢\npist ons\nsp ins\nm and\nce st\nbur ne\nv ile\ncher ries\nbec kett\nneed les\npan ch\në Ĥ\nhaha h\ntrou bles\ninsi sts\ndo you\ng mc\nmor tar\ndeleg ate\nin n\ng anda\nsin atra\nठ¤\nspee ding\npu pil\npre mises\nali gnment\npi kach\nas us\nj alan\nØ µ\nlime stone\nfol kl\nparme san\nce il\nmo y\nshawn mendes\nac up\nhu st\not es\nmed ina\nma di\ngta v\ncensor ship\nar g\nswe eney\nsy kes\ncol o\nfoot steps\ncann ed\nadv ance\ngta online\nhealthy living\nðŁį ¾\na ig\np ality\noc s\nhe brew\nim minent\nberk shire\njeremi ah\nout going\nbak er\nentr ata\nma ids\ngro ves\nbo c\na del\nm fw\ncon science\narm ys\nnut ella\nconte stalert\nnovel ist\nla h\nban ker\nmarque z\nðŁı ¡\nto ff\nout age\ngr p\nðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃ\nmusc le\ndu dley\nnvi dia\nmi di\nm uni\ness ays\ndat ac\ncar ter\nภ£\nt ans\ni ves\npublic ations\nal er\nok wx\nil u\ncu tt\nhar p\nout law\nluther an\nbr ill\nbo lic\ndo well\ngreen land\nbe sties\npath i\npay ton\ngue st\nhar den\nðŁ¤ ©\nann ed\nevacu ation\npo ised\nmc der\nb han\no i\nenvel ope\nci d\nca vi\nta pas\nbook review\ngrey hound\nâĻ ª\nfe ud\nlun gs\nfor te\nrai der\nff er\noni x\ndep end\nyn wa\nrel ating\nde vs\nðŁĴ IJ\nacqui res\nd ha\nj yo\npriv ati\ncan ine\nk b\ncra b\nsar din\nimag ining\nk j\nem por\ndown hill\nne z\nta eyeon\nnick imin\ngb p\nà µ\nw ap\nsec co\nma shed\nðŁĴ¥ ðŁĴ¥\naugu stine\ndiss ol\ndic tator\nâ ĵ\nvi per\ned fringe\nvau x\nhard work\nbook let\nno x\nchi ff\nðŁĴ ¨\nobserv ations\nxbox one\nu sher\nke er\nlu p\ndal las\ncal gary\nma dra\ndi ous\nk bs\nwood ward\nhero ine\nlu mber\nsea world\no ws\nmc ke\nmaver ick\ngu la\ncross roads\nfan g\ns ade\nnik ol\nchee tah\nme c\npp g\ner ick\nðŁİ µ\ntox ic\nbj j\nviol a\nsp ire\nch ino\ntra vis\ninstitu tional\nha as\nlow ry\nw ac\nea e\nhu mid\nmp ton\nru ck\nje w\nc ine\nzim mer\nse f\nbhar at\nfre es\naam ir\nðŁĴ ħ\nz inc\nwan e\nmulti player\nroyal wedding\ne el\npreci pit\nqu ery\nkimber ly\nisa bel\nful fill\nig an\nvau l\npan e\nsc y\ndig it\ngun n\nu tah\ndog day\nfi on\nxia omi\nda c\nel ast\ncha vez\nro blo\ng ine\nten th\nab h\nke to\nhur dle\nna dia\nmemorab ilia\nha bs\nqu an\nh w\nhv ac\npix ar\nec cle\nkram er\naccu ses\nðŁĴļ ðŁĴļ\nper se\nmean time\nwa hl\natle tico\nâĢ¢âĢ¢ âĢ¢âĢ¢\nott oman\nno vo\nk us\nconne cted\ntru sts\nd mv\nspen cer\nrahu lg\ndo ve\nsto kes\nbolog na\nenthusi asts\nà ª\nrockstar games\nted cruz\ndu ras\ns acked\nlate x\nimmer sive\ncer t\nlu cin\nprinci pals\nfa res\nsa ils\nfar n\nam ent\nsaf fron\nquent in\ncheck point\nfer ris\nex cur\nðŁijī ðŁı¼\nbai ley\nse h\nter re\nmad am\ns band\nwan derers\ncumber batch\nyy c\ndigit ally\nblackandwhite photography\nroll in\nmoroc can\nðŁĮ ħ\ndin ner\nd well\nto om\nm ye\nez ra\ncp fc\nwar hol\nme er\njon ah\nno aa\ns gate\nso on\nsecu lar\ng ating\nti o\ndri ver\nsi ssy\nassan ge\nta th\ned mund\nbobc ats\nra ji\npo stage\nstu ds\nm gm\nkat o\nedin burgh\nmeet the\nshir t\nfa a\nmens fashion\nsp reads\nwi m\ncar ts\nphoe be\nj ars\nbot swana\nÙ Ĥ\ned war\nsk ar\nri ve\ngu sty\nc tv\nferdin and\nsu therland\nnickimin aj\nk v\nsi us\nbee ch\nre z\ndesi res\non ial\ncamp o\nquar ry\nlor raine\ngil more\nig gy\nµ ï¸ı\nho pping\navi z\nðŁĮ º\nuni sex\ndedic ate\natt itudes\nste er\njun kie\nrail way\ny b\nwhi sper\nkey an\nk us\nju g\ndi x\na ins\nsum mon\nov ich\nsy ed\nher ald\nma ison\nme ded\nwild flower\nmain land\nri sky\nru kh\nover looked\nki c\ndestro ys\nnam an\nki p\nz ano\nchampion sleague\nban dit\nquin cy\nsmi le\ncal vin\nopen ings\nta pp\nol ulu\nspec tro\naccred ited\nap k\npra ised\nbar nett\npol len\npremi ered\nselen agomez\ntou red\nscreen ings\nuu u\nmis o\nen se\nadam lambert\nguel ph\nhar yana\nhu tto\nle ar\nl tc\npo ached\nbrex it\næ Ŀ\ntt c\npa vement\nmon gers\nro e\nad ers\nling ton\nparticip ant\nca red\nga il\ny ates\nlan tic\ndash board\njo o\nfeli pe\nssi onist\nbu m\ns end\na eri\nthu gs\nluci fer\na he\ndete ctor\nfil ly\ngas oline\nham per\nhump day\nthe ta\nthe band\nfore casts\no hhh\nlo bb\nhol l\ncp u\naz u\nad ar\nhai ley\nbu b\ncar t\nquo ted\nan archy\npan cre\ntwit art\nal den\nst ash\nthe less\nor ni\nbelie bers\nmor mon\npartic le\navi ation\n⬠Ĩ\nwebcam toy\nsad dened\ncru is\nham let\nn ct\nroll ins\nmarque e\nsaw yer\nreli ance\na ura\ndi ec\nsoo thing\nsig nings\nak is\nà ³\nat kins\naer op\nðŁĮ ¿\ny ab\nsh ari\ncon nol\ndu bbed\nmanufac ture\nconvin cing\nfeelthe bern\nra u\npu lit\non ec\ngem stone\nur ging\nbag u\nga h\naci ds\nfi anc\nzodi ac\nsn oop\nher rera\niniti ated\nven ge\nprofess ors\npro di\nstron ger\ne mission\nbb a\nhal le\nta pp\nhaw an\nwh im\ncompe ted\nmyr tle\nir port\ncold play\nach e\nske p\nm son\nss ic\ncalli graphy\nswim mers\nme y\npp c\nthri ft\npo c\nre places\ncommu ter\nâģ¦ âģ¦@\ngo ers\nlo gue\npara dig\nbas kets\nsensiti vity\njoh an\natl antis\n& &\nsuit case\nanxi ous\nl h\nstr i\ngal loway\nstre ad\nwar den\ngr ounded\nffici ency\nli feat\nreli c\ndisgu ise\nisland ers\nf cofficial\nclassical music\nb mc\nen field\nbi que\noak ley\nbat man\nsla ying\nner ves\nmul tit\ncalci um\nprojec tor\nscott sdale\nant ino\ngri ps\nkim mel\ndes mond\nprote stors\nhi atus\nmetaboli sm\nconclu ded\npress er\nti pping\nsli de\ne to\nhun ting\naus open\nri k\npp ery\ninnov ators\npitch ers\nag ger\nfun gi\nz ad\nproli fic\nrockn roll\nbl ames\nct ar\nstam ford\nq ad\nmozz arella\ninsan ely\nden ver\nph ouse\nnom ad\nï ¿\ns ris\npro du\nhen ley\npag an\nam trak\nru bi\nin cl\ntu tor\nsco tia\nwo es\nsing apo\nfun nel\nturn bull\nknow ledge\ngri mm\nreal madrid\nwe are\nmissi les\ncon sol\nemo jis\nsne ak\nsmi ths\nru iz\nbr ou\ni el\nha ver\nðŁĮ ļ\nkin gof\nbasil ica\ncircul ation\nprin ters\nta pping\nri dley\ndra gged\nha j\nwrit er\nfundament als\npersonal ities\nme tre\nstereo types\nbur le\nbest of\nn ffc\nha th\nmini stries\na ali\ntrac ing\npav ed\nł ï¸ı\ng ic\ninsp ire\ntu g\nha re\nrepe ated\nex pon\nlol li\nrho de\npre cin\ninstall ations\ninstag ram\naz ar\ni es\nsole ly\ndu kes\nmission ary\nvan guard\nfursuit friday\non d\npol ari\nma st\nhar an\njos é\njack ed\nec oun\nal ities\nne ph\nra vel\nmoder ated\nsco w\ns fb\nuru guay\nas o\nni g\nau du\np ints\nlat ina\nben z\nm itting\nchar ted\nmat ology\ncit ro\nbiop ic\nðŁij Ń\ndjo kovic\nfox y\nagu il\nso to\nan ada\nsin king\nsc rap\nhair s\nbethan y\nfact friday\nðŁIJ IJ\nunlea shed\n) (\ncontra dic\nram on\ncoast line\ny ong\nsn sd\nli gan\np ome\nmit age\nge tt\nwat i\nri sk\nso aring\nbru sh\nf pl\nav an\nå Ĩ\nlar son\nsh ear\nmul til\nblu r\nmulti media\nchun ky\npar i\nn ani\nweir d\ncholester ol\nchar les\ndream ed\ntan ning\npuzz les\nfr am\nhand ball\nch ag\nbeli ze\nal u\nbang s\nÑ Ħ\ndetec tives\nmc g\nish q\nbo thered\nsaf c\nmp ing\nten eri\ng ays\nsail or\nan gi\nmul ticul\ngue ssed\nros é\nhigh ways\nbro om\nchatt anoo\n- \'\nsee ker\non ed\nat f\nlu c\n> <\nbar i\nper cep\njewel ry\nas ph\nsor row\nsl ing\nmam moth\njac kie\në §\nwilt shire\nsa o\ncan cell\nim paired\ntor ial\nbre ed\nguy en\njud ice\ntit le\npro spective\napplic ants\nðŁį Ĭ\nepis cop\ne id\nb yo\nstock ings\nðŁĴĥ ðŁĴĥ\nll p\nsna g\nkeep it\nl ough\nol son\nmatur ity\n!! !"\ncop ter\ni sha\nbl i\nwil mington\ntr youts\nth ai\nðŁ¥ ³\npe bble\nkra ft\nf p\n º\nssi vely\nli vin\ncontest ants\ntex tures\njo an\nh dr\nfilm festival\nprov ence\nwi do\nop end\nc si\nsto wn\ncro ati\nad just\nhost ile\nanaly sts\nil an\ncu ppa\nbru m\nnewfound land\ngood win\nme tt\nmall orca\nplu gs\nbu k\nbb hutto\nwrest le\nsa ire\nsho pped\nfor za\nle head\nvi vo\nba st\nro xy\nreg is\nhard working\nhon olulu\ndesp air\nyoung sters\nni g\nimpro mp\nroll tide\nde emed\ntre ason\nru shed\nfor ged\nff f\npikach u\nbri ggs\ndo it\nac cent\nla us\ngla ze\ncompet ent\na ho\nphoto g\nmid field\nle go\nhar vard\nmin orities\nre illy\nslic ed\nonce upon\niniti ally\nfinanci ally\nlandscape photography\nhar dro\nqu o\nmm ers\npar kinson\nsmu gg\nread iness\nbru tally\nglou cester\nmp ed\nbbhutto zardari\nmur der\nye d\ndat aviz\nsr t\ndow ning\nbi ans\nm ü\nfle ck\nfli pped\ns ly\nbrilli ance\nri m\nk um\nbubb a\nko i\nknit ted\nsor g\nma is\nðŁĮ ²\nti ss\nsu stain\nsen su\nak han\nzi est\nexam ines\nchardon nay\nuser name\nshort list\nre bs\non o\ndar ing\nhard wood\nche que\nrighte ous\nlight ening\ndir k\nshra dd\ndu ra\ndown stairs\nsh al\nami gos\nru ff\ns law\nri es\nred nation\nman us\nðŁĩ§ ðŁĩ·\ndistin ction\nu bun\ndur an\nmi gra\nthi ans\nla ver\ndomest ic\nk x\njaz zy\njusti fy\nbelong ing\ninsul ation\ncolor stv\ndrun ken\nchann eling\nqu and\nxi ii\nenligh ten\nkan o\nfati ma\nteen choice\nterri fied\np ba\nas ley\nmet museum\ndun e\npack er\nki o\nðŁĴľ ðŁĴľ\nbo iler\nfas cism\nar mored\nback grounds\nin mates\nembarra ssed\ndefin es\nth d\nwe go\nsilic one\nlo on\nel ding\nbor rowed\nhe mp\nak sh\nkaw asaki\nbr y\nde af\nkill er\ndispo sal\nðŁĩ °\nglaston bury\nun covered\no xide\npo ff\nd ant\nk j\nku ro\ndri zzle\npeop les\nfe e\npro pri\ndd lovato\npi ggy\not is\naller gies\nu bis\npengu in\nser a\nvi z\nprosp erous\nici des\ntornad oes\nsene gal\nweb cast\nsto red\nenchan ted\nbb cone\nbay area\nentrepreneu rial\nrednation rising\nexperim enting\nang an\nlot to\nthey re\npor e\ner p\nseren e\neast wood\nbro kers\nbar ge\nstal lion\ntimber lake\ntailo red\ndy stop\nb ate\nlat ors\ndi xit\nbran son\ndynam o\nky lie\nshame ful\nbt wn\nspring time\nmix ture\ns ounded\nlu ton\ndad es\nmal a\nop ra\nen ic\nrahulg andhi\nse wer\n~~ ~~\nky u\nnor theastern\nca er\nbc u\nnir vana\nkitch ens\nous y\nal m\nriver dale\nhid den\nfl int\nsp d\npat rons\nkaty perry\nau gh\nexhib itions\nsm c\nshu ts\nat ore\nda in\nsome thing\nber th\nbo g\npor ter\ngen to\ncon cussion\nang lic\nro we\ngr illing\nscar lett\nmaster ing\nmor nin\ncomm ented\nsi me\nsi zing\nchrist y\nce os\nst m\nat ry\ntari ffs\nvac ation\npre judice\np su\nparen tal\nfar age\ncan a\ncap com\nkoso vo\nyou re\nmen stru\nstal in\ngrape fruit\nbr an\nche sa\ndav en\nexc el\n!! )\n๠Į\ndistribu tor\nce a\nbride sma\nmillenni al\nwa in\nob serving\nmis ery\nplan etary\nexpo sing\nbra ised\ncomp ton\ndon gha\nq l\nspring steen\nth ul\nsyl ve\ncab o\npal ad\nniel sen\ngaz ing\nba ja\nr oud\norchi ds\njohan nesburg\nse man\nd ji\noper ative\naffe ction\neclec tic\nat c\nmut ant\naw x\nnic e\nmel bourne\nindu lg\ntu lip\ndias pora\nwel p\nbig gie\nmississ auga\nretri ever\nor an\ntam my\nc ta\nhipp o\nseas oned\nger mans\neng v\nmarvell ous\nim f\nrela ys\nmon tan\nmaur iti\nme ister\nas surance\nreig ning\nsu fficient\nhan e\nno thing\npos se\nnav y\nin love\nbrigh ton\nen qu\nch ung\nsweat y\nes c\ncal ed\nman s\nnicar agua\nsl ices\nmo cha\nwashington post\nbb n\ndam ned\ngrow ing\nen burg\nlo an\nme s\nwh oops\nbeliev ers\nspi el\nvo daf\nl at\ns led\ncricke ter\nbrown e\ngolf ers\nbar ra\nwat chers\nlu igi\nsw amy\nmom s\npit ched\nsan tor\ncr s\nsi re\nsc amp\nbo de\nste war\njon ny\nent ity\npac qui\nmind ful\nmin india\nbear ded\ntemp t\nscorpi on\neat on\nauthori zed\nar to\ns vp\nop athy\ncch ini\nhouse music\ndisney world\nâĢĶ @\npro pose\ndi y\nexpen se\nten g\npupp ets\nsm el\nd aca\nper ry\nfin n\nboo sting\nlefto vers\ncou gs\nsatell ites\nman y\naz e\ng ong\nfi e\nmetho do\nfer ries\nðŁ¤Ķ ðŁ¤Ķ\nexplore rs\nload er\nattrac ted\nil ton\ngodd amn\npi azza\ndoc tr\nsav ing\nparagra ph\nvisu alization\nmay ors\nwork flow\nack les\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nठ¸\ntwer k\nclu t\nlo ver\nte ases\nsi an\no te\ndeter ior\naccor d\nl fw\nswar ovski\nnat al\ntra ps\nk ina\nanaly ze\nlaye red\nbever ages\nun it\nran som\npe shaw\ndest ined\nastro logy\nsi pping\nmiley cyrus\ncam ino\nmarshmal low\nbli ss\nout back\nfa q\nint oler\nhumil ity\npo ppin\nhallo ween\nmon tene\nop hy\nnu n\ntattoo ed\na as\nðŁĮ ³\ndale y\nqual ity\ndu sa\nfisher men\nswi f\nter rac\nst au\nle in\ntrol ling\nship ment\ngarden er\nmarch madness\nhead band\ngr t\nbur nett\nw and\n!!!! !!!!!\ngh e\ndu x\nhu d\nwar ner\nðŁĩ ¦\nex ile\nrescu e\nrat a\nd han\nduc ati\ndro wn\nbl ends\nspi e\nalli gator\nsimul taneously\nbroo ke\nu ke\nk har\ncomm union\nri ka\nford fc\nchin atown\nyou rown\nme y\ncan al\nsyste matic\nde pri\nox ford\nan il\nw ut\nequ ation\nbe z\nfle ur\nthe good\nlang ley\nad ity\ned ith\nal fie\nо ÑĤ\nen cry\nbr ill\nex emp\nce sar\nmb ling\nab ri\nsc icom\nj ing\nschool ing\nmi ka\nmechan isms\nimpromp tu\nrhe a\nmoo re\ncrime a\nbe sto\nwri ght\nel ders\nro ds\nkam al\nfolkl ore\nbe et\nmini on\nreli eve\nthr o\nteam usa\npas cal\nmade with\nboli via\nitt i\nfree bies\ndesi red\nbest selling\nl iness\nla den\nke ane\nmi sts\nhipp ie\natta chment\n@ /\nse w\nflan agan\nâĿĹ ï¸ı\nsupre mac\nstl cards\nsi as\nq u\nrh ys\nste ep\nval leys\nv w\npav ing\ndisp at\nal ison\npor te\nid u\nnew sc\nsoc ket\nmo s\nco star\nre vo\nprote ins\nstanley cup\nm cal\near ring\nse cs\nmc lean\ncap ric\nnick elo\nad en\nv c\nshou se\nadap tive\nmaxi mize\nentertain er\npro se\ngri ffi\nsix teen\nlam ar\nmi rage\nsaudi arabia\nawe ather\nru st\nin filtr\nfashion week\nðŁĺĬðŁĺĬ ðŁĺĬ\nselec tive\nbubb le\na den\nfen nel\ndeci sive\nm ta\nmock ing\nmb les\nst amp\nmu le\nbernar do\ngr in\npo tt\nj ingle\nvet tel\ncolom bian\ncam o\nmotivation monday\nba han\np ly\ndh ary\nk ami\nx men\nsleep er\ngar a\nmy sti\nconfi dential\nconflic ts\np neu\nce s\ninsur tech\nclean se\nme rely\nva is\ntu x\nthe great\nshar on\nma j\nhol a\neco systems\naj ay\naa j\nhu sh\nhar mon\nbackto school\nwiki leaks\nreflec ted\nðŁĺ ĵ\ncommemor ating\nac et\nbuck ingham\nmessi ah\ntu ous\nhor net\nto be\nd q\nhe ine\nmi g\npl ate\nnichol son\nsp ie\ncumber land\nnor mal\npho bia\nhappy halloween\ncity fc\nmc el\ngilli an\nke to\nlu de\nde mise\nsu ga\nstr ate\nmcgr ath\nvisit scotland\nfoo led\ncb r\ngc se\ncol ori\npo td\nmissuni verse\nfin ances\nma poli\nfor ks\nØ ´\ncann on\nmedic inal\nðŁĹ ĵ\nkh o\nwre ck\npan to\nbag el\ngu ll\nsyndic ate\nic y\npr c\nki en\nzi ka\nti sh\npe ta\nc co\nli za\nch ut\nex traction\nel g\ngl i\nfu eled\npos it\nrespec tively\nleice ster\nbr ink\nvulner ability\nim ported\ne sha\nðŁ¦ ħ\nr ural\nre ll\ngam ing\natlan tic\naband on\nno ah\nre solved\npro state\naller gic\nps d\nâĺ ¹\ndun geon\nfang irl\nillumin ated\nm hs\nwhite sox\nd ently\nck o\nendor se\nover ly\ndazz ling\nprior iti\nnight life\nut il\nbe have\nflam en\neast bound\nðŁĴ Ł\nilove you\ngov uk\nmozam bique\nalle gi\ndr i\ntestim onial\nath s\nì§ Ģ\nmm y\nshab by\npro secco\nfriend ships\ncal am\ndam ages\noff set\njura ssic\njun o\narre ll\nðŁĴ ©\ninterven tions\ndare devil\ncar ver\nrun away\nran e\ntruste es\nha ute\ndep ths\nðŁİ Ń\nme in\nsacrific es\ncon cier\nne sting\ni zzy\nme tam\nilove my\nur ine\ndu lu\nmal hotra\nve ins\nnight ly\nco at\nan di\nhe witt\nlon el\nci ble\nwr ite\njen nie\nsant ac\nĸ ï¸ı\nstr ato\nsingapo re\nsop rano\nkri sten\ncheer ful\nflee twood\nfa iri\nm eli\nwa st\ntur nt\nsfor sale\nsc rolling\nangel ina\nren dition\njeric ho\nnick y\nor b\nfla vo\npatri ot\nash eville\nsick ness\nre fund\naggre ssion\nb pl\nãĥ ĥ\nelu sive\nthi story\nhang er\nbu ffs\nvil las\nat kinson\nsp h\nja it\ndecl ined\nwo k\nsupre macy\noo tball\ney ang\nðŁİ ĵ\ns ford\nath i\nconsu me\nroad ster\ne so\nu pro\nreci pe\nau f\nuc i\nar on\noo oh\ncs go\nre ich\nmc d\nmin ute\nladi es\npun k\nrut gers\nmee k\nariz on\nta j\nland lord\nde gra\nautu mn\nlyn x\nus f\nb hi\nfairy tale\ndongha e\nbet sy\nexplo ded\nchen nai\nop a\npro tag\nbr ant\nðŁĵ °:\ng f\npal li\nðŁı¼ âĢįâĻĢï¸ı\nsu t\nill ini\ncolum nist\nshir tless\nde centr\nsear ched\nec or\nbu ggy\ns ack\nðŁĺĤ ðŁĺŃ\nde t\nther i\nor naments\nbring back\nto v\nquarter finals\nic he\ncon stra\ngi er\nbuchan an\nvi x\nkay aking\nmu stread\nswal low\nmel b\nsc af\nop al\nmay oral\nhar at\nðŁ¦ ĭ\nschedu les\nid f\nha gue\nro z\na ah\nd mc\ndu plic\nca che\norph an\nfrac ture\nrec on\nch av\nbun nies\nal ain\nmustaf a\nðŁİ Ļ\nvac ations\ndynam ite\ntex ted\nbroad caster\nðŁĴ £\nste amed\nrock er\ndi etary\nluxury travel\ninaugur ated\nsa wards\nvaugh n\nlincoln shire\nclick ed\nkra ja\nf anc\nremo ves\nlayo ffs\nmc far\nbre eds\nwin nie\njon ghyun\nincen tive\nvari ations\npat ton\natur day\npersist ent\npr un\npi ers\ndal es\næ ĸ\nbreast feeding\nr ance\nta wa\nĤ âĸ\nmur doch\ncap tive\nthi stle\nnic a\ncommod ity\ncou ldnt\nboard walk\ngraci ous\npractiti oners\nn gc\nscru m\nner o\ncamoufla ge\ncol on\nhe i\nphys icist\nsaturday morning\nten er\nsi won\ncolum ns\nbru ne\ny vr\nba ir\nreti res\nhal am\ncab er\nshaz am\nmin u\ncas cade\nmilk shake\ngri d\nd ren\nvin cent\nso dium\nplat ter\ncheer leader\nchen ko\ny ak\nelimin ated\nty po\ny man\nre think\nâĿ Ĺ\nts ville\nbernardo kath\nex tr\nðŁĺģ ðŁĺģðŁĺģ\nta o\nre per\nmo ths\nem powered\nc iting\ntranspor ted\nmon ks\nsan at\ncle ars\nbachelore tte\ncamp bell\nracha el\nhar le\nhand ler\nclimb s\ninter ference\nrele ase\nsh and\nr bs\nhr h\nãģ ª\nval le\nr é\nsli me\nw akes\nchu bby\nslo an\nel ves\nath en\nattor neys\nmicro scope\nston er\nsc aling\no be\nc out\nse man\nmid week\nbal sam\nðŁĺį âĿ¤\nti ful\nv ish\nlo tta\nri pping\nre mn\nti re\nle ap\nha vent\nla by\nhi mach\nwhisp ers\nwe in\nðŁİ ¸\nwild flowers\nse le\nu cc\nli ability\naz ine\nsw ings\nk ya\nta ir\nre main\ne do\nflo ps\npoc ket\ngrand ad\nexam iner\ngr is\nffe ct\nðŁijĬ ðŁı»\nstud ded\nheart beat\nde acon\nfirm ly\ninfec tious\nste f\nout lines\nle asing\ncla ws\nsen se\ntab s\nhoo t\nmo sul\nspa wn\nco a\nhog warts\nve in\nalban ia\nmanu el\nb ino\nvaux hall\nscot land\ngo bucks\nmat ty\nphy sio\ntor ino\nconst able\ninvestig ated\ns lower\nmistak en\nbay er\nwild fires\nvo ic\nx on\ntime to\nchas sis\nbar ric\npi on\nbald head\nwoo k\nregi str\ndra fts\nb hs\nli gue\nl ick\nstaf fordshire\nbaf ta\ndar ry\nje anne\nven ding\ncor p\n⼠³ï¸ı\nkid dos\nfen way\nca o\nwest bound\nðŁĺ Ļ\ndv r\nquick er\nbla h\ngoo die\nðŁĴĭ ðŁĴĭ\nvo x\nesp er\nfac ade\ncor relation\nred bull\nrou p\ndecl ining\nchi ve\nmc gee\ntur o\nin der\nf eller\nfu g\nil ysm\nmar di\npeshaw ar\nki eran\nine ma\nmeat balls\npe ck\ndepre ssing\nsen sing\ngi z\ndd ington\nspring watch\nro aming\nyellow stone\nhorse shoe\nam man\nweek day\nol or\nðŁ¥ °\nboo sts\nspr int\nscar ves\nje e\nbee tro\ncl an\nall the\nìĦ ¸ë\nenlighten ment\nado be\nre generation\n? @\ncont ag\nyach ts\nto u\nmor a\nen voy\nr ani\ngo li\ndhanush kraja\nwood working\nstreng ths\nse di\ndisc s\nar ina\nsc on\nlit e\nano ther\nðŁ¥ Ĭ\nye men\ngu ern\nsav vy\nlo yed\nbiom ed\nheart break\ncomra des\nmilli e\npat ch\nun f\njar vis\nbl aming\ncommemor ation\nge y\nå ¥\ncardio vascular\nalig ned\ndocu ment\n. ?\naesthe tics\nem u\nthe irs\nle h\nps ic\nsi f\npl ateau\nex pend\ndomin ating\nrob es\nmauriti us\nexcep tionally\nhom er\ndiscover ies\nbra un\nten nant\ninsul in\nðŁİ ®\ncar bs\nte as\n? !"\nzi e\nfranco is\nbrow sing\nth ol\ncla rence\nhel per\nob tained\ncas sie\nle es\n! ,\npome gran\nhu bs\npresti ge\n] [\nmach er\nbott led\npun ch\npi pe\no ch\ngall ons\ndeliver ies\nu ra\nun day\nmon de\ndepic ts\nre gency\noutra geous\nkhal ed\ncar o\nhe arti\nza g\ndevelop mental\nover coming\nstati stical\nflavo red\nfor ds\ncre atives\nlau rence\ndi as\nsun screen\nin ked\npre acher\nn ul\nimpac ting\nauti stic\nâļ Ķï¸ı\no ss\npel icans\ncele ste\nv b\nru mp\nmc gra\nfair fax\nhu mor\nbbc news\nrow ling\ncal der\nseam less\nag ne\np ti\nmix ed\nt shirts\nmer ci\nb tob\nwomen instem\ngenealo gy\npre ven\nl our\ncra dle\ngi use\nÐ ¾\nchron o\nfair ness\nchocol ate\ntor y\nas da\npre scott\nstret ched\nal man\nu il\nre charge\nin tre\nob st\nhosp ital\nhay ward\nteneri fe\nfried man\nvap ing\nconfe ssions\nye ah\nbal li\nluck now\ncor pse\nsculp tor\namp ton\nt pp\nindic ates\nsur plus\ntru man\nðĿ Ļ\nsin ha\nin vo\nsovere ign\nke v\nestabli shing\nengra ved\nassu ming\nðŁı ģ\nsou za\nfab i\nton ed\noun ge\ndel oit\ndow ney\nno ble\nom or\ncar tridge\nðŁı IJ\nu hur\nhol loway\nsucce sses\nr sa\nâĦ ¢\nma zz\ntw d\ndisc ourse\n. <\ny at\nsatis fy\ncom pri\nठ¹\ngraph ite\ndisser tation\nar ter\ní Ķ\nb ally\nzom bi\nly ons\na ic\nu bc\npra da\ne il\nda x\ncla i\ngrand daughter\nextravag anza\nchall enge\nðŁ¤ ŀ\npo ver\nprimar ily\ndad dy\nman a\nbi kers\ninqui ries\nda un\nfel ine\ngener ative\nhe f\nbenef iting\nlind sey\npol ka\ndemonstr ated\nal le\nrand y\no su\nlow key\nweir dest\nred bull\nour y\nn ous\nwood stock\ncre denti\nnic er\ng ado\naly ss\nap h\nprepa redness\nstation ary\nincorpor ated\ndy er\nsarato ga\ncele sti\n: "\nantibio tics\nor gs\ninde fin\nap ron\nи Ð\nfif teen\nno f\nðŁĶ Ŀ\nph x\nte ga\nm z\norganiz ational\non air\nband ung\npleas ures\nmor i\nsecre tari\nrac coon\nca shi\npil ates\nk on\ngeof frey\nla o\nkam p\ndepart ments\nback packing\nan am\nà «\ncrack down\naun ty\non do\nli zzie\nph ers\ncu n\nðŁĩ ±\nk pop\npu t\ninten tional\nconnol ly\nbar clays\nhs fb\nswin don\nu ku\ns ally\na int\nâľ ħ\npen ang\nup lifting\nepile psy\ninter ro\nbun gal\ngo ku\nblue berries\nठ¦\nu ssia\nsil ky\nmou red\ni stic\nbri efs\nme ats\ngo b\nch aser\nstate wide\npra sad\ngl itch\nar in\nban ff\nmemb er\nðŁĺŃ âĿ¤ï¸ı\nlo ving\nhall a\nภ¡\nsmo kers\nyak u\nscicom m\nphysi o\nsw ol\nlem ons\ngel ato\nch ool\ncapit als\nki stan\nti ghts\nspi kes\ntrav ellers\nik lan\ncommissi oning\nar ine\nemabiggest fans\nempha sis\nfront line\npad dock\ndestruc tive\nba ha\nl inger\nje wish\nshet land\nmc gin\nmon key\nko z\ns one\nraj ini\nte h\ny en\nc vs\nmasqu er\ngir ly\nwe sle\nwas nt\nbro dy\ntermin ator\ngil le\nmag gi\nbir die\njeopar dy\ncu bic\nvm ware\nintric ate\nan up\nto pia\neast on\nsab res\ninvestig ates\nbu sting\nbil ingual\nvalent ino\nin format\nfer re\nadvent ur\nhydr ate\nfor sy\naz iz\nsan to\ne de\nwhist ler\ncontinu ously\nd ham\nun used\nji had\naddic tive\nvi dy\ndo b\ni do\nfi ed\nni versary\nn one\nfu er\nðŁĺį ðŁĺĺ\ncoven ant\nprin table\nimmac ulate\no em\ncl t\nserv ants\nconsu med\nun released\nsc um\npack aged\nme re\nìĦ¸ë ¸\nto by\nta f\nspo ons\nme al\nf ball\nfair field\njan et\nsilver stone\ndart mouth\nfollow me\nvoy ager\nkom bat\nanni ver\nene w\nmag dal\nho ve\nsa th\ngrizz ly\ncar di\ngart ner\nsand y\nkan ye\npost ure\npo ign\nim pulse\nradio logy\nhoriz ons\nsi am\naish war\n= =>\nno che\ntr is\nel yn\ncom me\ndu i\nce c\ncouncill ors\ncudd ling\ncreep ing\nloc ke\nmanag es\ntrans ferred\nne cks\ndi er\ndan o\nv ick\nlun ches\nd he\nen sures\ncri ss\nul ster\nbann on\ncont enders\nsp am\nsweet ness\nmed al\nhon duras\narc tic\nultra sound\nin fr\ndisco vers\nei ffel\nca sters\nru ben\ndu st\nawe ed\natri um\nlest we\nse ared\nðŁĵº :\nty ne\nex changes\nlittle mix\nl le\nastron auts\nhersh ey\nwork day\nkno b\nso v\nre signs\ntoday show\nder man\nan th\naf c\nta ster\nsw oo\nsa eed\nper ing\nnarrow ly\nrn li\nbest buy\npanas onic\nobst acle\nfarmer s\nðŁİ Ļ\npa wan\nki est\nang ers\nabsur d\noh my\nsin o\npist achi\nsp ice\ngiu li\nprime time\nko w\nk ens\nex agger\n! ?!\nu ba\nmidd les\nju dd\ne jec\nslam med\npen sions\nof a\nre create\nb hp\nxx l\nliver pool\nthre sh\npur ity\nni eu\nhol ics\nwr ath\nra do\ngli o\nam ma\ndile mma\ncr u\nlets go\n.... @\nâĿ ĵ\nsugge sting\ntru mps\nhor us\nf v\nic om\nrefer ring\npredic tive\ntar ts\nge tte\nso ck\nglo ssy\npin ky\nal ec\nthy me\nou ra\nthero ad\npe tr\ncr am\np fi\ndv n\nme ier\nincen tives\ntun nels\nmobi l\nrec ap\nextra s\nupri ght\nrev amp\nper severance\n, -\not p\nmir ror\nar wx\nger ry\nma her\ng or\nhom epage\nam is\nag ra\nmade le\nbest friend\nsirius xm\nbun dles\nadmir ing\nt dsb\nðŁį ģ\nch as\nslow ing\nro h\nwall papers\nâĢ¦ /\ntek ken\ngang s\ntal a\nlind say\nshou l\nline backer\ntool kit\nur anium\ncaly p\nab rams\nmat thi\nðŁı ¿\nhon ourable\nda yo\nver sail\ntan k\nst c\nfr itz\nspl end\npat ag\nanno yed\non day\ndevast ated\nchattanoo ga\nnational ism\nmas sey\njen n\ntail or\ndev gn\norg ans\nzu cchini\non fox\nsat ire\nwex ford\ndis grace\nno to\nvol ta\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ı\nà ¶\nhome owners\npoin ter\nm cr\nau sten\nday sto\nmo ons\npal ma\ngra zing\ne so\ninfluen cers\nshahid kapoor\ncompli ant\nmeasure ments\ndevelop s\ny d\npar l\np vt\nrand olph\ntor tured\nger ald\neli as\ndeepi kap\nwar mup\nhick ory\ng ap\nco ffin\nam our\nre neg\nmoun ting\nseven s\nig le\nhi er\ndec ad\ntri ght\nesc apes\nwer ner\nt fl\nful filled\nni ger\nsour dough\nre aper\nchoo ses\nspin ner\nweek nd\nfil tered\nsh uk\nkat i\nold ham\nopen source\nkh anna\nat elier\nconne c\nopho bic\ngla s\ncomplic ations\nar son\ncounc ils\nsm ol\nas sy\nlur king\nling ui\nhan ks\ne in\nÙ ħ\nru gs\nn guyen\nnou veau\nmen ace\nle v\nalad din\nru ining\nround about\nk m\ncon or\nshoo ps\nmay day\ntraum atic\nprab has\nka iser\nk ita\nrou ter\npe dro\nre tar\nstun ner\nspani sh\ndistur bed\nacade my\ne learning\nwit ty\nsen g\nfer al\nav y\nsta b\nke aton\nur du\nko to\nhu i\ncoo ke\nari an\nthe personal\nu ma\nse ap\na sting\nrhetor ic\nhand writing\nmunici pality\nconsor tium\nðŁIJ Ł\nglasgo w\nra ya\neli za\npolym er\nbro th\nprac ti\ncorrespon dent\naddic ts\ngay le\nail ing\no fe\np li\nhear tw\nst itch\nsight ings\nprie sts\nsam o\nslo th\ngood wood\nroc co\nsab c\nsumm it\nl ace\npres ley\nitt en\ncin cy\nthepersonal network\ns week\npe gas\naf con\nregi stry\nci m\nle th\ndic ap\ncand ice\nflu ent\nsm ack\npede stri\nal oud\ncar ac\npriyan kach\np gh\nir ons\ndol ce\nlat via\ndece ased\nthero ck\ncla p\ncen e\nfo am\nmorris sey\ngre t\nessenti ally\ncom cast\nbe agle\nargu es\ning ed\n- âĢ¦\nsa g\nha san\nðŁĻ Ĩ\nðŁį °\nnh ra\nkann ada\nindic ators\non er\nbri xton\nat as\nscreen play\nsor ority\nsha heed\nhe em\nclass mates\ntain ment\nes i\nbreast cancer\nzucker berg\naur or\nen cia\nref ers\nkae per\nvor tex\ncom part\nlym ph\nphotograph ing\nste ff\nrest ling\npar sley\nmom ento\nth man\nlac king\ndu tt\nocu lus\nfin o\nfren zy\nra sc\nder n\ndis missed\nnoo k\nmet gala\nsh ill\nrapha el\nmaver icks\nexhib its\neag erly\nc pa\namen ities\n. âłĢ\nexo dus\nern st\nlit a\ndeal t\nwomens march\ni ain\nscore board\ncampe ones\nc en\nti ki\ngarri son\nfidel ity\nbra g\nroad map\npsy chop\nlo e\nble u\nðŁijĬ ðŁı¼\nsau vi\nspr inger\ntemp tation\nru dolph\nac ura\nwic z\nparach ute\nstro l\nlen ny\nzi k\ndom s\nnb af\nal pac\nvivi an\nro ve\npre et\nperpe tu\nsna ke\nair soft\ninfl atable\nprin ces\nati e\nffe y\npati ent\nm ire\nchel le\nsl ack\ngroo vy\n# :\nup loading\n!!!!!!!! !!!!!!!!\nsiem ens\nprovi sion\nv fx\nneed y\nf ats\nto poli\nbhu tto\nsa thletics\nalu ms\nt winning\nsouth western\nadop ting\nlast night\nman ne\nla ga\ntw ell\nac ia\n-- --\neye wear\nhur ley\nfle e\nsa ch\npe cker\ncost ly\nis k\ncr ates\npolic y\nero sion\nin go\nwer k\nðŁIJ į\ntorto ise\ntherap ies\ninter net\nchihuahu a\nri ps\nfre i\ned or\ntai ji\nt fc\ndo d\ndemp sey\nchrist in\nchen g\nhi ps\ngra eme\ncom passionate\ncavali ers\nhistor ic\nsoul ful\ncrimin al\nja c\nvin ci\nexpi red\nsur at\nturi smo\nk ona\nse aweed\nber ts\nle ica\nexpre ssing\na al\nwor t\nbreak fast\nher ring\nam used\nrhu barb\nmar tian\ncospla yer\ny ash\nstri al\nra ul\nrefer ral\ndw ts\nj w\nad ler\ncur tains\ngu r\nval ence\ntyr one\nsw fc\ncoach ed\nre born\ndiabe tic\ncho ke\nnor folk\ninvestig ative\nðŁĴ¯ ðŁĴ¯\nz id\nv mas\nphi e\nobjec tives\nâľ ĭ\nover due\ndi vers\nmat su\nðŁİŁ ï¸ı\ncasu alties\nภ§\nal k\nstand ardi\nre alist\narti facts\npand or\nke x\nin vin\n( !)\nine y\npar aly\nmr t\nfay e\nthe voice\non ga\nde ed\nskin ner\naz wx\nspeci men\npriyankach opra\nnu evo\nbar kley\ntoulou se\nresu mes\nfootball ers\ncit i\nfe tch\nè re\nlestwe forget\nðŁĻ ĭ\nch unk\ndri fting\nmanipul ation\nequ als\npu tt\nky ungsoo\nâĿ¤ï¸ı #\nela stic\npar ano\nfo y\ndo ping\ncin cy\nss ler\ninterrup ted\nal ay\nado res\name thy\ncon voy\nãĢ ı\nĬ ãģ\nblack list\ngener als\nsa chin\nbru shed\noun ces\nnon stop\nilli ams\nbt sarmy\nu av\nru ff\nbur ma\nbi k\ndefen ce\nschul tz\nbo asts\nlonel iness\ngo re\ntrans forms\nalum na\n@ @\nra ppers\nne hru\ncar o\nhimalay an\nwearab les\nge h\npepper mint\nre development\nflam ingo\ncos by\nbig baldhead\nag ri\nbare foot\nsco pes\nre gram\ngh ana\nðŁİ «\ni heart\nsa die\ncarri e\nmicrobi al\nku ala\nsk ater\nquer que\nâĻ ©\ngen res\nreas oning\nch ased\nas o\nsli pped\nen can\nvam os\nker s\nad verse\nmo il\ncommod ities\nwith you\nsil ent\nhy pe\nan de\nam ination\nwhi spe\nlit z\nâļ½ï¸ı âļ½ï¸ı\nri ff\npp y\nlam bs\ngan esh\nab sent\nregu lator\nmarse ille\nen roll\npar cel\nwa p\nby rd\nðŁĩ Ń\ntu ber\ncountry music\npar l\ncontro llers\nresponsi bilities\nwe y\nch ate\nmontene gro\nchic o\nmil an\nl ms\ntra inees\nappropri ately\nun certain\npopp ies\ned sheeran\nnutr itious\ngar o\ndeut sch\nawe some\nãĥ ¼\ncomfor tably\nland marks\net i\nre usable\ndaniel le\nro sal\nco les\njust ic\nc cs\nf anny\nni m\nmc u\nclin ch\nat ene\nmer ge\nim db\nang lo\nuc cino\npan ini\nan not\nbur berry\nfeat ure\npredic ting\nfashioni sta\ns ask\nimag inary\nmm o\nsouth sudan\nspe ar\nhu bble\njo inthe\ncoyo tes\nsli go\nko dak\nsit com\npolaro id\nroo ted\ncorru p\nðŁĻĮ ðŁĻĮ\nbris ban\nat z\nah l\nre my\ntal ent\naval on\nra da\npau line\nlocom otive\ngo ons\nne mo\nmaser ati\nic u\nstu tt\nhistor ically\nsm b\npres by\navo id\nso oners\nrhine stone\nw ad\nri sing\ntro t\nmo des\nreg ent\noptimi ze\nre ece\nsm u\nver ti\nnewyork city\ncor tez\nra c\nin case\nsin c\nfiel ding\ne tta\ntiff any\nal monds\nsad dle\nk rat\nmat ter\ng low\nstar ving\ngl o\ncra ppy\nsl ur\nst d\nmonit ors\nrecei pt\nmaymay entrata\nmc il\nun is\nrain bows\ncal dwell\npacqui ao\nj op\na fe\nhoo k\nes sen\nwiz ard\nmedi an\nfla ws\ncom s\nâĿ Ħ\ning h\nha ynes\nanton io\ntem plates\nou ter\nna w\ncardi gan\nbel grade\nðŁĴ ī\nhom o\na ise\nro pes\nno ve\nwhat you\ntri gge\nconcep tion\nad ukone\nna di\nfri ars\nsw er\nadju sted\nhot line\nsan ity\nkau r\ndown loading\nc gi\nten or\neth nic\napp alach\nภ¸\npa g\ngol ds\non set\ninvestig ator\ncar tel\npeace fully\njarre tt\ncat alan\npoli o\nn um\nfru stration\ndhar ma\nmy life\nâľĮ ðŁı»\naber deen\nmu sa\nbin der\nspark ly\nfle eing\ninstin ct\nco ping\ndomin ance\nill ers\ner a\nu conn\nlo oms\nliving ston\ngal i\nhe s\nc ma\nbel a\nse ley\nmon k\nla ch\nmar x\n ´\nm erica\nwoman in\nes sex\nra ina\njim i\nnep tune\nz ack\nchine se\nmart ins\nchand elier\nher n\nwith us\near l\nasph alt\nmodu les\nst p\nul la\npsychi atric\nmile age\ncaptiv ating\nsi der\nmen to\nmor t\ntran ce\ntal bot\nab by\nì ĥ\nâľĮ ðŁı¼\nj ak\ndaw n\nturn up\nscre wed\nfe ds\nblue print\nðŁĴĸ ðŁĴĸ\nhar sh\ner os\ninsom nia\nban kers\nta emin\nmis conduct\nhu mber\ngi di\nedu ardo\ncon a\nmusc ular\nconsu ming\nra sh\ndon nie\ndi pped\ncol lie\nsamu el\nmelt down\nðŁĺįðŁĺį ðŁĺį\nme z\nexam ining\nschwar tz\npri stine\nðŁIJ Ŀ\nve it\nful filling\nan esthe\ngue sses\ndra ft\nsom me\nsoli d\npati onal\nho ped\nevolu tionary\nall er\nenter tained\nsli ps\nlud wig\nconclu des\nsen sible\nbon net\ncra ze\ntra s\nhaz ards\nconst antine\ned ics\nstar trek\nto c\noccu pational\nin cheon\ndeepikap adukone\npizz as\nnew comer\nde part\noppre ssion\nebon y\nfoss ils\ntro jan\nel en\nste aks\nk hou\npositi oning\nug by\nred cross\nak h\ndol ce\nus mnt\npp en\ndil ig\nma vs\ncall er\ncost ello\n⼠Ħ\ndy n\nthing s\nrhin os\na xi\nsar kar\ncon vocation\natt ers\nss ss\nfun gus\neu gen\nruss o\nsqu at\nw sb\neli on\nwilliam sburg\ns off\ndefici ency\nbe arer\no kin\nkey stone\nt wain\ncal ming\nbreak able\nwa res\nhorser acing\ncom bs\nbun ting\nu it\nt land\nðŁĴĻðŁĴĻ ðŁĴĻ\nga stron\nsab ot\nick ers\ncommissi oners\nsen ate\nii ot\nath ena\nnit rogen\nan tony\nero tic\ndi alo\nmis sou\nhypo cr\nâľ Ī\nkaeper nick\ncan v\nd roo\nclevel and\no sh\nmon sta\nstefan o\n^ )\nsh ul\npo ison\nha e\ncommerci als\nma ul\nnit ro\nco worker\nalo e\nvap or\nt ents\nrussi an\nqu id\nquestion able\nmid get\npo ker\ngirl friends\nsin the\nerit rea\nten ure\ndepos its\nbuc keyes\nspot ter\ntheod ore\ntrin ity\njoaqu in\nu cci\nfollow the\ncaf c\nmp a\nðŁIJ »\nplo tting\ndom ino\nta ek\nsion ally\ndicap rio\npa p\ncar mel\nig er\nbt cc\nbeth le\nwww bigbaldhead\nfoo die\nbagh dad\nmason ry\noff ended\nà ·\nภģ\nsc ro\nvers es\nori ent\nar ches\npi yu\nknow your\ngre e\nta kers\ngu ard\ndish on\nbucket list\nbha fc\nwar dly\nðŁİīðŁİ Ĭ\nleigh ton\npe w\nstra y\nassaul ted\nin hal\nly fe\namar keting\nl x\nkat z\nubun tu\nme o\ncarto onist\nturno ver\nmi z\ndis like\nmul len\nmo f\nbl and\nhi des\nemer ges\nchori zo\ntruste e\nma hog\nlan sing\nparalym pic\nfa int\nfa una\nch al\nsn ar\ncat h\nbent on\ncast illo\nsli ppery\napric ot\noec d\nbar o\nl z\nhe ming\nclow ns\nco workers\nperu vian\ncommu ters\ny ell\nðŁļ ´\nunder ing\nv j\ntt p\nfli pk\nw ana\nsoc ent\nĤâĸ Ĥâĸ\nठĤ\noo sa\njag ger\ndi sm\ne less\nd ham\ncali f\na official\nec lip\nharro gate\ngra pp\ncom rade\nn tr\nconcentr ate\nthi ghs\nbit coin\nbel arus\në ĵ\nend uring\nnow watching\nindustri al\npi p\nar on\nar at\n ®\nwhit by\noooo ooo\nsa ree\ntic als\nmis leading\nyo on\nyear s\nsle igh\nroman ian\nsciss ors\nvam pires\nac up\nab ba\nth weeksary\ncent ri\nfl ye\nu o\nc bi\nbu ena\nsin d\nmar ino\nbur r\nre building\nठ²\nanniver saire\nac ca\nðŁĴĢ ðŁĴĢ\ngett ing\ntu lips\nwolf pack\nâľį ï¸ı\nmore than\nta kin\nðŁ¤ĺ ðŁı»\nu be\nmon ic\ndou bts\nmo wer\nco balt\ndon ne\nspecul ation\nargu ably\nkak u\nhtt ps\nprosecu tion\ndin ah\nstam atic\ndisclo sed\nbever ly\nfl wx\ncra bs\nextraordin aire\nwar mest\nimper i\no logists\ntrac es\npar c\nlake side\nam r\nter i\nhour ly\ndomin ation\nar row\nshrews bury\nance stry\nwr angler\ntrigge red\npen sac\nroo ster\nsurvi ves\na on\nbo ko\nval or\nlove is\nla g\npe y\nfo cal\nout laws\nbl anc\nartic ho\nwit s\nmarsh all\ndie go\nsupport small\nu ca\nsa h\nje et\nsyn ago\ngover ning\nðŁĴ ¬\nsal ads\ncre ate\nmiri am\ncen sored\nami de\nno u\nz eta\nallegi ance\n* )\nbl m\nric an\npa stors\noly mpus\nblo c\nwhir l\nstar ry\npr one\ny k\np ne\ncongratul ating\nbe v\nso ber\nlove island\nsa ir\nan ing\ntutor ials\nq e\nlun d\nin ist\ncle ver\ntaxpay er\nali z\nwren ch\ndd ling\ncap ri\nh pa\nðŁı» âĢįâĻĤï¸ı\nna j\no j\nfuturi stic\njelly fish\nðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥\ncel ery\nplan k\nfil a\nne me\nun healthy\nlec tions\nðŁ§ ¡\nrit chie\nn ws\nmi kha\nwonder woman\nâĢ İ\nhip stamatic\nka g\nðŁĴľðŁĴľ ðŁĴľ\npoul try\nmo w\nwor ds\nlo ff\nðŁ¤£ ðŁ¤£\nrelat able\nre mixes\nkeny atta\nke m\nre signed\nfo d\nstra igh\nj lo\nhu tch\nbox ers\ncolle en\nmag s\ninstruc tional\nko l\nattrac ts\npra g\naccount ant\ngo ggles\nbr u\nth ole\nmar row\nleu ke\noc to\npon ds\nbubb ly\nhe ist\nìĹ ij\nim p\na har\nha unt\nhall mark\npsy ch\nkkkk kkkk\ncol umb\njump suit\ncost co\nsi delines\nag gies\nover turned\nni b\nkey chain\nfu k\nf af\nmi am\nassist ants\ncy cled\nri der\ndam mit\nred wings\nmag es\nkin s\nì Ĥ\nho d\nson t\ncarol ine\n" \'\ncu le\nbra id\nfel ony\nar ities\nruther ford\ndepic tion\nisab elle\nro ach\nk day\nfifth harmony\nem y\nli gam\nbari sta\nalbu querque\ngro ss\nðŁį º\noo ks\nðŁij ¼\ndun can\ntry in\njag s\ng ould\nli tho\nâģ £\nа Ð\nsam my\ntun g\ncas ser\napo lo\naaaa a\nman g\nas ics\nsh en\np ye\ntur bul\nss p\nsaint sfc\non lin\nn anny\nhe ster\ndo z\nภĶ\nth read\nren ts\nkh and\nðŁĴª ðŁı½\nun conditional\nrob son\ncar re\nph on\nsacrific ed\n £\nauto s\npar ker\noc a\nlog in\nkee gan\nhard cover\ndough nuts\nðŁĮ İ\nspit fire\nrefresh ments\nsaskat oon\ncommod ore\nj f\nrub ber\nhalam adrid\nchild care\nstra da\nio m\nri k\ndak ar\nther mom\ncro pped\ngar u\nali k\nven i\ni ft\nsi ka\nritu als\nz ul\ne ch\n ©\nsu dan\nl land\ni me\ndo cker\nì ¤\nfe ared\nfa o\nwal ter\nno g\nmutu als\nl h\nali gn\nmon ia\nconcep tart\nðŁĻı ðŁı¼\nsco e\ncompet ence\nsw ine\nly me\nlaun ch\ngreen er\nabstract art\ninqu is\ngran ada\nga elic\nflu ff\nd backs\ngrave yard\nba be\nacade mic\nadventur ous\njoh ann\n~ !\nbi bi\n| #\npl ings\ngett y\nas b\nâĿ¤ï¸ı @\nstaf f\nreligi ons\nbang or\nworld bookday\nme gh\nde vin\nash ore\nmeri dian\ngi thub\nqui z\nall stars\nbe stest\nir resi\nack er\ndo te\nwar rington\npol ly\nnewor leans\ncr ou\nwi gs\nche y\nsmithson ian\nla sag\nde tour\nbor is\nstra ps\nmari ah\ninten tionally\nko h\nðŁį ¸\nssi an\nmar issa\ncor al\nepiscop al\ncasu alty\ntom o\nsupply chain\nsam p\non go\nro o\ncavi ar\np fw\nclau dio\nbuff alo\ns ations\nmat ty\nsnap back\nl ds\nal arms\nmat te\nâĺ Ķï¸ı\nconditi oner\nd ors\nhe x\nfi zz\na stri\nsus sex\nsecur ity\nqa eda\nall star\ncocac ola\nas one\ncl icks\nsc ans\nmu te\nhe avier\nðŁİ §\nâĺ ŀ\nlv l\nbook boost\nyoutu be\nfla shes\nf jor\nc su\nexplo de\ndo dge\ncair n\ngonz ales\nth ill\npel le\nhart ley\nrenew able\nre tin\ne stre\ncostar ica\nshipy ard\nnc fc\npri ya\na ghan\nan ath\nplu gin\nco rey\nre bound\nor u\nkat rin\nhor mone\ngi m\nmahin dra\ns sus\npark land\nhar per\nfanta stic\ninfer no\nep ilo\nwrest ling\nfe ct\nc it\nac oun\nto ssed\nmonu mental\nchar tered\nbu st\npe tra\nâĮ ļ\nwildflower hour\nsweat ers\n* .\nbl er\nate ch\ngo wan\ndemo graphic\nbra l\nsuici de\nrenov ations\nvu el\nsin ister\nar mani\nmiso gy\nph arrell\nnap s\nun iting\ncrusad ers\ncor gi\ninsu red\nthan i\nno or\ng q\nd ada\nbicy cles\nsnu ggle\nsch an\nten berg\nss al\nfe mme\nbo il\n½ ï¸ı\nre ap\noccur ring\nhus sein\ndivi d\nsto ke\nsh alom\nna ia\no lic\nfrustr ating\nÙ ĩ\nig s\ngro ver\nscen arios\nn ds\nbru tality\nmed alli\nbu on\nsas s\nskate boarding\nony x\nlor ry\nny u\ngau tam\nmm ings\ngu g\nend i\nlo thian\ncomm ando\nchal k\nph ora\nasse ssing\nti gh\ncrun chy\nad ay\nis l\nci ara\npilgri ms\nkam al\np to\nbrit anni\nt ani\nsm c\nl ure\napp store\nab y\ngolf ing\ncl c\nfa u\nan as\nshu tting\nregul ated\ncarn age\nscow boys\nall enge\nc ma\nhumbold t\nrel le\nku mb\nher i\nrefin ery\nsound check\nd wayne\nbos nia\ni sp\nthe alth\nanni v\nrelev ance\nmy a\nbag gage\ndre ad\ns bc\nth ed\nbu h\nhi jab\nlo id\nke w\nc te\nrespec t\nlovel ies\ncu bes\ncelebr ate\ndir t\nsav ers\n_ ,\ngar ment\npulit zer\nmas jid\nbeat port\nal arts\nencry ption\ns ner\nple ads\nfound ry\nsym metry\nru mi\nbirth place\nscallo ps\nsupp le\npivo tal\nt ati\nno de\nso d\npro xim\ntr ics\ncol dest\nbren t\nmand u\ncla ir\ne ach\nand alu\nhi ddleston\nðŁIJ º\nmel ts\nv ance\npin n\nse ments\nscre ened\nsa chs\no bl\nic ha\nâĺĺ ï¸ı\nschool ers\nheal ed\nlo gged\nðŁ¤ĺ ðŁı¼\nic us\nbore dom\nb ish\nb ffs\ntal king\nsure sh\nhoo kem\nde on\nde fl\nei leen\nðŁį ķ\nwomen intech\nri sotto\nrang er\nadverti se\nภģà¸\ntel ly\nla go\ndart moor\nd ong\nsk ates\nlo go\nun ner\nmail box\nma sala\nlo oooo\namethy st\nche wing\nc bb\naustrali ans\nrc mp\ngame art\n# ...\nkor n\nextre mism\nfruit ful\nanci ent\npu bg\npol ite\nwh it\nmur als\nm gr\nline man\ndav ao\nste ms\nten nis\nav age\ntu pac\ngigan tic\nhs bc\nauto biography\nup the\nี à¹Ī\nre gal\nfig uring\nku l\nmis sy\nhoo p\ngra s\nfor ums\nback lash\nabduc ted\np nw\nmin ic\nbu tt\nbott oms\nat on\nven g\nðŁĮ ı\ndel aney\nprab hu\nfan club\nover haul\nhealth ye\nsy no\naa f\nren amed\nkim i\nun cle\nman city\nse u\nqu anti\neste em\num in\nen zo\nmel vin\nunder go\nj har\nfar ah\ncoast ers\nhumph rey\nmh z\nchildren s\n^ .\nd hi\ndisrup tive\nintegr ating\nr nb\nover sized\na ide\nne au\ndocu mentation\nðŁijĢ ðŁijĢ\npal o\nhear th\nri yad\npun ctu\nabc news\nsecu res\nboy band\nbir ch\nju co\ntra ff\nlegislat ors\nbay a\nãĤ ¯\nno ises\ncollec ts\ns warm\nk ner\nbi shops\nstur geon\nsnapp ing\nmo l\nfre aky\nchair person\ntro p\nlyn ch\ncar cin\nart sy\ne sto\ncha i\nfl ur\ninv ali\nsau sages\nim el\nj or\nfun fact\nwit ter\npuni shed\nac ons\nh ya\nre versi\nem c\ndif fu\nz x\nsp aw\ncla d\nd mit\nhol land\nfre sco\npay roll\nab undant\nstu ffing\nmor o\nc ny\nboy cott\nwend y\nele ven\npro voc\npil ot\ntr x\nbe ad\nclimate action\nri on\nassi e\nì ĸ\no sm\nislam ic\nho ar\ngood reads\nal ici\nafterno ons\nspoke sman\njo lie\nit as\nmasc ara\nâĻ© âĻ«\npre vail\nbeetro ot\nlu jah\nk li\ndod ger\n »\nru le\nl n\nscre am\nho bart\ncol bert\nr tc\ner m\npat ro\nquo ting\ns live\nque st\nnon fiction\nsemin ary\nprosecu tors\nve st\nexpress way\ng ge\nnau tical\net f\nðŁİīðŁİ Ĭ\ndur ation\ncha ired\nthe film\nfab io\nshe h\ncan o\nðŁĴª ðŁı»\nwith draw\n! :)\ncor pus\nphen om\nyel p\nla wn\nent om\nsnapp er\nbut te\npin ball\npro xy\nlibr e\nalle vi\nn ada\ngabri el\nfo wl\neure ka\ndaph ne\ntu nes\npun ched\nwh ore\njo g\nren tial\nman ners\no pe\nwh ufc\ngu th\nrevol t\nsne aker\nphilharmon ic\nho ste\nsovereign ty\nðŁĻıðŁĻı ðŁĻı\nfish ing\nsci art\nfe ta\ni pp\ndump ing\nkel own\ngir i\ndig its\nsal u\nsan jay\ntwee ters\nsp as\ncol chester\nsc ab\nma dd\n๠Ħà¸\nÄ ĩ\nged don\nmarch for\ndo p\nmaure en\nun plugged\ndi do\nfashion blogger\nup a\nmex ic\ntar y\npol ye\njame son\nv t\ngrin der\nmad dy\nconsult ancy\n¬ ë\nleagueof legends\nac cents\num ni\njane iro\ntu ss\nh ens\nampli fier\nto shi\npret tier\npre vents\nnew town\nred wood\nvant age\nball ard\nar tof\na she\na sion\nlac ey\nap at\ngro ve\nภĦ\nrw and\nreal tors\ntra itor\nbed ding\nö r\nzi on\nfla shing\ncam pan\nboom er\nsecretari at\nab ol\nliti gation\ncont amination\nse dly\nshred ded\nin for\ndo herty\nbench mark\nro che\nskate board\nsho vel\ni zz\nto pper\no ster\nlaby rin\nautu m\nk ong\nhum mus\nvi z\ntech news\nkla us\nam using\nsocialmedi amarketing\ni des\ncast ell\nste e\nunderestim ate\ncal ab\npa ign\nb illing\nunanim ously\ng mb\nfly fishing\nhath away\ncommerci al\ncolour ing\nskul ls\npivo t\nte p\ntb c\nmotor way\nx press\nconstruc tive\npu k\nunder lying\nkir sten\nmani ac\ncha o\nse ma\nchiff on\nðŁijĮ ðŁı»\nver ona\nkom o\nstan doff\nwi ped\nc ated\nbla ir\nwor kin\nm sc\nbethle hem\nswi pe\nunexpe c\npe es\npe tri\norig ami\nðŁij ħ\nmex ico\nflav or\nru dd\ncannab is\nmar u\nri ddle\nwor shi\nsil on\nsch at\nap se\ntang er\nbi ous\ne er\nquesti oned\no zar\ndan k\nangle sey\nchar an\nbak u\ncompe ten\nre pri\nbat ter\nsa xon\ncal ves\nleng ths\n$ $$\nâŀ ¡ï¸ı\nimmer sion\nga unt\ncar ry\ncy to\nb anda\nshu tt\nexperi ence\nel gin\nmous se\nta z\nê µ\nin correct\nen z\nb ham\nmor on\nso ver\nar un\nti pped\nla ble\nde arly\nbau tista\ní Ļ\nmor tal\nwoo p\ndt la\nsho cks\ndav os\nðŁĵ Ŀ\nswim wear\nher man\nðŁijĩ ðŁijĩ\nz ir\nneglec ted\ngrac ed\ncampu ses\nav s\nar ora\nswach hb\nlive pd\nac cra\nenqui ries\nshoo ters\nkur t\nvancou ver\nbrad ley\ngar da\ng ü\nol la\nattrac ting\nup ton\nne win\nlu mia\nfurn ace\nev ers\ne on\nsw a\nroo kies\na oc\nv ss\nbris ket\ntor ch\nyo da\nheart land\ntac o\nph ony\nfood bank\nab bey\nbab ylon\nu y\ngre ate\nexpre sses\nd andy\nsc apes\nsurvi vor\nron d\ne ci\nha vin\nab el\nchil dish\ntor que\nwav y\nur self\nkanye west\nyear of\nale stine\no brien\nal fon\nsk ag\nkore an\nanchor age\nval eri\nde w\nðŁİ ¨\nland slide\ncar ole\nchrist en\ngo phers\naf i\npriyan ka\nq q\npower of\nit te\npc so\ntw ol\npr y\nintellec tu\nguer rero\npi les\nwish list\nw ren\ntime table\në ı\nprodi gy\ngibb ons\n. /\nne ur\nanz ac\nmur ray\nvie st\npla ster\nla ir\nart gallery\ninter continental\ng br\nbell ator\nnam joon\nmam mals\nam el\ny aw\nsaras ota\ncam ar\nbud ding\nsum mari\naco sta\nla sh\ney ou\npost graduate\ninstruc tors\nti g\nconst ant\nwere wolf\nic os\ncla s\nglen n\nbud ge\nðŁĻ Ĥ\ner ta\nsta ins\npersecu tion\ncumb ri\no ch\nsyner gy\nhu ang\nscand in\nmid terms\ncomment ator\nregar ded\nperpe tual\nbo iling\nal p\nlan ge\nsch le\nfac eli\ntwee ta\nri dden\nok toberfest\ncharlotte sville\nik lan\njo u\nch atham\nb sc\nðŁį ¦\nstra uss\nmel low\nxx xx\nhappy hour\nre actor\nww er\ndistr action\nat orial\nðŁĴª ðŁı¼\ntwin peaks\nfay ette\na or\nko k\nbro om\nsy fy\nou se\nam ag\nØ ·\nubis oft\nlu lu\nhall mark\nstu art\nit ya\nsi deline\nvenge ance\nre lu\nsex ism\nboun cing\nun ites\ngu stav\nte ssa\nstu mp\npro clamation\nima x\ndivid end\ncol by\nðŁį İ\nplay wright\nun safe\nco smo\nðŁĩ²ðŁĩ ½\ncup board\nconstitu ents\nang lia\nram page\nðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺį\nthan ked\ntake aways\nshro ff\nde bat\nkh ur\nconduc ts\nformat s\nà ©\nport age\ngraph ers\nu ten\npre m\nmo ines\ncondem ns\ns ous\nl ps\nf cs\ndeal ership\nleuke mia\nbure au\nski d\nguardi ola\nca ster\nthir d\navoi ded\nen cyclo\nc sr\nvi xx\nanaly zing\nshe ar\ndulu th\nshap iro\nchan ting\nstre sses\nas be\nmil itia\nãĥ ª\ncol lin\narsen e\nsure sh\nteach ings\nyi xing\nsh ill\nnu des\nsv u\nclear water\nwar ped\npro life\nartist son\nit u\nversail les\ngalax y\nax el\nspring st\ncal a\nhu hu\nsc u\ncommit ments\nexe ter\npoign ant\nmo tion\nconserv atory\nrow dy\nrec alled\nmu sk\nemb elli\nso the\nâĺ Ģ\nsto pper\nsch ild\nto pe\nel mo\nzi el\nj om\nbarn sley\nsnow den\non tour\njour ney\nhills borough\npar ole\nw ts\nmo ving\nag ility\ntiv o\nff ers\nkindle unlimited\ng wen\nann an\nah mad\ntex tured\nhepat itis\ndra m\ninsi ders\ntis sues\nãĥ Ħ\nfc barcelona\ncr atic\nna acp\npe can\nf gm\ncustom ize\nconcer t\ng sm\npe g\np one\njustin trudeau\nsuper cars\nhappy holidays\nbu lar\nado x\nlap tops\ndigital health\ndestin ation\ngradu ally\náĥ ¦\npopp y\nss l\ninhi bit\nstar light\nof fro\nglo omy\nx per\nhal der\nim plants\nle to\nhass el\na as\nun told\nen ci\nliber ia\nor an\ncon tests\nil ah\nsma g\nsc out\nmari anne\ncr yo\nschedu ling\nlo s\nkan e\nstutt gart\nne se\nlaw rence\nda in\npho tom\ncar ou\nภ£\ng wy\nnational dogday\nroa sting\nband camp\nkentu cky\nstret ches\nke rel\nca she\nãĤ ¸\nsta x\ntran si\ndog gie\nat ric\nhal le\nci vic\nbrow ning\nlein ster\ncat day\nhigh land\njoy ous\nin cumb\nor lando\nro mo\ncol ton\ndel ta\ncar ab\nro tc\naster oid\ngoose bumps\nmo logy\nyo ko\nan ds\ntomor rows\nred carpet\nsm p\nca sio\nðŁ¤£ðŁ¤£ ðŁ¤£\nse au\nrejec tion\nrot ating\nbi partisan\nth un\nmat i\nbon i\nol l\nener gye\ndo it\nl j\nmother hood\nlou ise\nneck laces\nel ite\nni x\nl cs\nen v\ngl u\nle sh\ncran k\nsu sie\nm clau\nso tu\ncrow ley\nrat ri\nuse d\nbre ton\nalfre do\nye o\ntravel pics\nti pp\nelli son\nsax ophone\nme red\nheu ghan\nta ine\nf es\nvi ro\nsuppo sedly\ni as\ndige stive\ny le\nli zzy\nwildlife photography\nbri anna\nwest field\nra ined\nam her\nðŁĺĦ ðŁĺĦ\ndistribu te\nbott om\npre serving\noil and\ncraf ty\nde scen\ncol ling\nshakespeare sunday\nr wc\nang led\nci an\nt ations\nmon tage\nme yers\nfrance sca\nðŁĮ ·\nwi ggins\nsan ford\nvolunte er\ncar ra\nbar k\nvari ed\npl in\nam u\nkap il\nrock ers\nqu ind\nbr ane\nin mate\nent al\nimpro vis\nmichi gan\nre tweeting\nprogre ssing\nmercedes benz\nsmo ker\nphysi ology\ndor ado\nwatt pad\nh wa\nsr bachchan\nw ga\nvol atility\nhi re\nac ap\nwn ba\nhein z\nstit ches\nkidnapp ing\nbur ys\nlim b\nf itters\nthumb nail\nton e\nmir and\ndesi rable\nad dison\ntar an\ntamil nadu\nspec tator\nsoci ology\namit shah\nremo tely\nâĻ ¦\nham id\nr ds\ng lee\nsmooth ly\nsch ro\ner c\nlali ga\nhe als\nus f\nni shi\nd hu\nun il\nh le\ntro mb\nbhu tan\npilip inas\nse ung\nwhit man\nte y\nmin ce\nsnow boarding\nre au\nk ker\nav o\nzach ary\nran veer\nti k\ngover n\nqu al\nbeck y\nanthropo logy\natt en\ngrocer ies\nde bit\nwar p\nsil icon\nhawa ii\nðŁĴ ħ\npomegran ate\npe er\norang es\npeople schoice\nend ure\nðŁĴĽ ðŁĴĽ\nãĤ¹ ãĥ\nac ial\na haha\nstu k\nimper ial\nbl ond\npow der\nkno ts\nvin ce\nwood lands\nden a\nwatch in\nmat cha\nma hat\ngalax ies\nmiddles brough\nk ö\nstre e\nresc ues\nwal do\nlero y\ndesp ic\nreal ities\ntm nt\nha q\nun o\npe c\nbolly wood\nblin ds\ndesign thinking\nhe ms\nand hra\nab sen\nfan s\nste ch\nshire hour\nbla ine\nshak ti\npu rely\nðŁı ı\ntra fal\nke ynes\ngr ate\nto bias\nspon taneous\nsatur ated\ncaval ry\npri sc\nðŁĺ ij\nwh t\npas si\n~~ ~\nvir at\npatt inson\nla o\nweir do\nsym pathy\nju da\nocca sionally\ncred ited\nstat u\nes co\nhil ly\nesc ape\ndischar ge\nse er\nmay nard\nsud bury\nz lat\nor al\nwe er\nencoun tered\nsm elling\nover sight\nê ¸\nthat cher\nmack ay\nyou can\nfre ep\nfreed oms\nprophe cy\nho e\nishq ba\ndra ke\nqu its\npel led\ntur k\no vi\nwesle yan\nnew music\nleg g\nch eng\nh illi\nay y\npan ties\nad versity\nad jac\nvaccin ation\nju ke\nga c\nexce ed\ntime sof\nsta ining\nep cot\nv ital\nup ward\nbethe sda\napar k\nma hi\ncamp fire\nenchan ting\nrha pso\nh z\nna ver\nfa x\nvali dation\nac ad\nny r\nas ym\ncoordin ated\ndepar ted\nall ery\nvar ies\nspr ite\nchap lin\nss occer\ns wat\nbre t\nrelu ct\ntunes app\nsuper star\nreminis cing\no co\nhome grown\ndough nut\nun canny\nla pd\nthyro id\n! âĿ¤ï¸ı\nbotan ic\nbre s\nsp ade\ni ste\necho es\ndu lil\nbur sting\nqui ero\nðŁij İ\nloy ola\namuse ment\nha ils\nsleep y\nburgl ary\nâľ ı\nro gue\ncot land\nmo ors\nlow er\nwic ked\nðŁĶ Ĭ\ncompet iti\nargent ine\nyvon ne\nkarti keyan\nili ary\ngat sby\nprecin ct\nsix ty\nna ji\ncam s\npractiti oner\nðŁĺ³ ðŁĺ³\npu ne\nneg li\njuli en\ninv aded\ncali br\ncla m\nduba i\nmu k\nlan tic\nproduc t\nfe dex\nï¸ı :\neu ra\ndari us\ns ling\nvirtual reality\nhome stead\nðŁı³ï¸ıâĢį ðŁĮĪ\npac ed\nin ha\npul mon\nla zy\npremi ering\nma stered\nin he\ncon gregation\nba jo\nsport ing\nnew jersey\nhor ny\nlma oo\nleng thy\ndu t\nyo gh\nswe aring\nphilosoph ical\npap ua\nin ski\nknow les\ndy ke\nâĢ ²\nto ken\nmc guire\nri ot\nprobab ility\nmc con\ngro s\nsu mat\nc ite\nda a\non da\nmad dow\nche w\nboard games\nspar ked\nre claimed\nad hd\nny se\nimwith her\nequ inox\nboo ths\nbalsam ic\nha zy\ndor chester\nag os\nse aw\nmoder ator\nseri ea\nander sen\npilgri m\nâŃIJ âŃIJ\nitch en\nhal li\nx ton\nnathan iel\nmun ition\ncelesti al\nga f\nzo om\nmark le\npen thouse\ncal e\ns fa\nbar king\ntu cket\nem ery\ncal orie\nli que\nad ar\nmc nam\ntor tilla\nwood pecker\nmo town\nbad ger\nayr shire\nscram ble\ndd ay\ncra ziest\nper rie\ncho co\ncast e\ni ot\nwre cked\nselec ting\nuss r\ngra ft\npun t\nlab ou\nir st\nba ek\nÛ Į\nsu ki\nque u\nach at\nte ster\naug mented\nwc vb\nsin ks\nðŁĵ »\nra ke\ninter ne\nbe cause\nbelle vue\nune arth\nlight en\nðŁĺ £\nturn around\nlabe led\nunemp loyed\ntwitter kurds\nle ia\nh ye\ngreat er\nðŁIJ İ\ntim ed\ni red\ne tt\nlimit ations\ncab e\ns out\nbee ch\nanni hil\nre trac\nyo ona\nang er\nden nis\nsupp lying\ndi z\n" (\nsc ur\ngun man\nsu ho\nsauvi gnon\nภ¥\nwi ley\nland on\nchoreo graphy\npre historic\nðŁı ĥ\nvar gas\nassess ments\npinn acle\ndi i\nchamber lain\nì Ī\nv p\npresent ers\ndeut sche\nsun shine\nsal utes\nr one\nbu siest\n- .-\nmotor ists\nhemi sphere\nal wx\nps p\now a\nden ying\ncho c\ngu tier\nhan uk\nmus kete\njait ley\nse wage\nt ame\nthin kers\nshi m\nse quo\npap ar\nmiddle east\nk wa\nke g\npatag onia\nno y\nbar ça\ntake off\nhe a\nà ¬\nn sc\ng dc\nðŁij Ī\nmou stache\nmel ania\nthr a\nâ¬Ĩ ï¸ı\npier ced\nze us\nfon ts\nber a\nit iner\nq atar\ncontr ary\nire land\ni fy\nou los\ncommun al\nfin s\nun paid\npa a\nðŁijĩ ðŁı»\nri os\nou p\nf iller\ncafe teria\nภŃ\nkas i\ncali ber\nz ulu\nv sco\nts ford\ndragon fly\nsmo kin\npi st\npsycho logist\ndiplom at\nwe bs\nbuc cane\nà® ¾\nmotiv ational\ndu ne\nba e\nc fs\nwith out\ner on\ni ac\nate e\npen sion\nfra zier\nen sis\nsk is\npar ting\nger y\nterrit ories\nnach os\neni ght\never lasting\nmsd honi\ntel e\nsp un\npo di\nsab ah\nenviron mentally\nce ase\nbeau mont\nmar ta\nkel vin\nho ff\nsun il\nn da\nco b\nsh ale\nree dus\nun boxing\nu bio\nre opened\nn all\ncapsu les\nmar r\nhimalay as\nswee ter\nja z\nf mr\ntwee ter\ndha ka\nna u\nde mi\nd fs\nta urus\nfad ing\nit utes\nci p\nover flow\njef frey\ndon ny\ncar tunesapp\nðŁį ij\nprefe cture\ndanc ed\nc pt\nple asing\nital k\nearth quakes\nul ation\nhi o\nãĢ ĭ\nant an\nnutri ent\nde ere\nselec ts\nenrich ment\nr iti\ntram pol\nbl amed\nj ia\ncontribu tors\nchesa peake\npi geons\ntribun al\nmad uro\nw su\nilo ve\neffici ently\ndar cy\nwar ms\nar ra\nec u\nho wer\nstrugg led\nrajini kanth\nðŁĺ¢ ðŁĺ¢\nhou sing\nstr at\neli x\ndisp ro\nraf fic\nthi erry\nna sty\nc fb\nstaf fing\nal ma\nback ers\nhen son\nsky walker\nreale state\nroo s\nness y\nchan ce\ncair ns\nc ci\npe dal\nly ft\ncross word\nwait er\nonly in\nkru ger\nk ir\nalej andro\ncar tier\ncar rera\nre paired\nou at\nun clear\nun breakable\ntoday in\nqu eries\njo dy\ngen ital\nwin ner\nto l\nkelown a\nfascin ated\nãĥ ¬\nsris ri\nsqu ared\nspr ung\nnegoti ate\npriv ately\nav en\n>> >>>\ng ical\ngav in\nchester field\nzu mba\nor r\nnat alia\nimpeach ment\nmn l\ncar at\ncriti que\ncredi ble\ntrac y\ntan i\nmusi k\njig saw\ngam bia\ntol kien\nfe u\nas per\nsav ory\nfo xx\nf itt\nmar lon\nl rt\nv ell\np br\nimprison ed\ni om\nchu l\nwind shield\nkay e\nba a\nchor d\ns art\nal gon\nminister ial\nnat geo\nla zio\nnor ms\nðŁijį ðŁijį\nlic king\nfut bol\nun sung\ndalla scowboys\nsh red\ndistur b\ndev ine\nbe ards\nch f\nb day\nro sso\nig or\nay i\nsi ren\nk air\nsti les\nro f\nmag nets\nun cover\nmou se\nbang ing\nsi ghted\nspe ople\nimpac t\nrow land\nkir a\nenviron ment\nlove the\np sis\nmish ra\ngl endale\nca jun\no che\nde ception\nsex ist\nstra ws\ns ga\nbuff er\napost le\nsp l\npop up\nðŁļ Ĺ\nr g\nup er\nball in\ni dy\nocca sional\nnational park\nðŁı Ĭ\nu an\ninnov ation\nภ«\nte aparty\nre tte\ncounter fe\nb ha\nrec s\nig en\nðŁĮ IJ\nhumming bird\ncu r\nha ven\nla zar\npue blo\n: :\nzi onist\nop ath\ninver ness\npromo ter\ncarto on\ncabine ts\nmahog any\nsurve ying\nr ational\nfeel ing\ntesti fy\nso w\noc on\nภ¢\nne el\nmar is\nsol itary\nche mo\nrad cliffe\nsim ons\nros ary\nnew er\njo die\nre tali\npra wn\npad dy\nhen ge\nk ala\nim plant\nat y\nbren twood\npar adox\nene z\nre designed\np our\nwy d\nal de\n௠ģ\nsol d\nbiomed ical\n๠Ĥ\ntt tt\nmat teo\nys er\nnew ton\nde bun\nner dy\nloo l\nwo on\nelisa beth\nec c\nwh i\nach o\nsalv age\nsal aries\nqu ity\nnavig ating\noph thal\ncon soles\nre built\no pec\nast ers\nsho red\nset list\nkathr yn\nrhy mes\nre visiting\nash ish\nli ft\nre post\nsole il\nâı ±\nweal th\nsa at\nwe c\nking james\nflipk art\nfield work\nse gu\nmo dal\nbu b\nare rs\nðŁį Ĵ\nclo oney\npad dington\nnecess ity\nguth rie\npen te\nli mo\njo sie\nar tin\nen c\nl hs\nbetra yal\ninfo graphics\ni er\nmo a\nhear ings\nbon jour\nsym bolic\nag ro\nwed ges\nkrist ina\nwild flower\nathle tic\nphotograph y\npe sh\nca hill\nchi lean\ngou l\nfi oren\nðŁij ¶\nz il\nsk im\nbad oo\ndeli a\ntre ble\nn cc\nðŁĩ¦ ðŁĩ\na house\nbul lock\nsol itude\nا٠Ĩ\ncan cers\nfutureof work\nhu tch\nwater shed\nwar mongers\nsp illed\ncolom bo\nmo th\nassoci ations\nweigh ed\nglobal goals\nnot just\nchrist i\ntor g\nswe ating\nman eu\nclu sters\nâĢ¼ï¸ı âĢ¼ï¸ı\nta ped\nul y\ntru sting\nyu suf\nte in\nra b\n, ,,,\nsin ai\naudi ble\nexplic it\ncro wns\nsch iz\nat least\nðŁĹ £\nde bra\nje suit\nene gger\nz hen\none sie\ni it\nss f\ngur gaon\nchak ra\nbear cats\nk ran\nk awa\nreque sting\nhan over\ng end\nsor os\nmer cy\nlovel y\ndo omed\ntim my\nku z\nul l\nab ram\nsa ison\nãĥ «\nclean ers\nre mo\ncircu its\nbar red\no th\nmo ist\nmadele ine\ngall o\nu j\nper mits\nhea viest\ncar ols\naz te\ngior gio\nflo ats\ndecl aring\nus rc\nmin at\ncraf ts\npri ma\nconven i\nnickelo deon\ndanc ing\nceremon ial\nblo gg\ntw p\nanglic an\nshe k\nk nick\n( ((\nhubb ard\nharve y\nhit man\nfen g\nwe some\nfor za\ns word\nop us\nbro m\ngi bility\nz al\nm unch\ndance hall\ngre edy\nhd mi\nre birth\nðŁĺĭ ðŁĺĭ\ns world\nfigur ine\ncom post\nk f\nengra ving\ngior no\nst ana\nk man\nham ster\ncompos ers\naj e\nfunc tionality\npol k\nis ons\nair planes\nte se\nhor rors\nmusc at\ngi ven\nsp ence\nðŁĩ¸ ðŁĩ\neli ot\nach illes\nfre ck\ncrypto currencies\nsou ther\nhal o\nbor neo\npolit ic\nhahahaha h\nup state\nsi ena\nobsc ure\nhau sen\nlloy d\nhappy friday\nmotor bike\nbon a\nameric as\nhol s\n- (\nspor ty\nun aware\nreven ues\nchristop her\nbank sy\nav an\nev apor\ncom press\neyel iner\nto dos\nbuff y\nrenewable energy\nly rical\nar chan\nrapi st\nfair trade\nlma ooo\nbeat z\npro active\nla pse\nir ical\nrevers al\npo de\nmcin tyre\nmac au\nãĥ ķãĤ\nnash grier\nf sa\ng all\nçĶ Ł\nperpe tr\nil ya\nconfigur ation\n% ;\nstr ange\nrac i\nภĩ\npic kups\nkov sky\nmam mal\nw ps\ng able\ncompar ative\nz h\nsave our\nda vey\non etsy\nmu ssels\nmis er\ncri stina\nelectr on\ncra ve\nlo ren\nprecipit ation\nm z\nðŁį «\nvin cen\nsnow board\nno ida\nah n\nmarin ated\ng tr\ntown hall\nmin is\nbethe l\nadv an\nsu ra\nshi el\nfur ry\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤ\nlyn d\nso il\nsc ence\nsen eca\nshar jah\ndick ens\ncredenti als\nav ar\nper k\nrequ iring\npre fer\nj ian\nde ca\nr ach\ning for\ndel e\nbe ep\nðŁĴ »\ncis ely\nhu ddle\ngreen sboro\nhaw king\nho ax\nhang ar\nç ľ\nmis o\nlo vin\ngre ta\nab ad\nlogi e\nat an\nsnow flake\nmahe sh\nfear the\nal kal\nbobb lehead\nba hn\nju dged\nfu tu\nfeli x\nðŁį ĵ\npi ke\nder iv\nnotic es\nau er\ndis super\nor da\nwi pes\nam ino\nstri kers\nfoo tb\ndram as\npun ching\nscore less\nheming way\nbi h\nbal lad\nchat ter\nam mo\nkle in\nfabric ation\nkari m\nz end\nhi sto\nvol ta\nrock y\nmarke ter\nxtre me\nsequ encing\nparadig m\ncle ats\nboom ing\nâģł âģł\nblock ade\npromp ts\nyogh urt\npur pose\nnu r\nregu late\nnois y\ning rid\nbird watching\nbar tender\nÙ ĥ\nwor dof\ncha otic\nshor ty\nel dest\nz app\nonceupon atime\nfl yo\nrit os\nmike quind\nðŁIJ ´\nregi stering\n. ]\nad ol\ngg gg\npur ge\nkid lit\nar bor\nval ves\nsynago gue\no th\nunanim ous\nveri fication\ndar rell\nãģ Ħ\nvander bilt\ntape stry\npro sper\ndid dy\ndra fting\nde cep\nmarqu is\nst int\nmichael jackson\npee led\nmen us\nbb b\nsc are\nema il\nwri gley\nit is\nf ell\nsome thin\nbar ra\ned gar\ndi pping\npu ddle\nsla de\nlear ner\njal en\nðŁ§ IJ\nthe daily\nmikequind azzi\nju x\niq bal\nmckin ney\nra iser\nef an\ndr one\ncat o\npic ket\ncro we\nl att\nuk o\ngiuse ppe\nhin i\nsynthe si\nponti fex\nsong writing\nto d\nswit ches\ndin ners\nh q\ngabri elle\npensac ola\ncir cle\nexpo ses\nev s\nriyad h\npro men\no ck\nsa j\ncit ation\nbrew co\njo si\nep aper\ndri f\npoint less\ntang led\ncri pp\nline ups\nfairi es\ndaz e\nmour n\nbla dder\nsal z\nbur undi\nbook mark\nthe people\nsub sequ\nprinci pal\nsk er\ncourt ney\na oki\nrac ers\nad m\nmom a\ncritical role\nhou n\nshed ding\nsa ka\nace ous\nmck ay\nhus bands\n ½\nme da\naccu sations\nro sel\nnc is\nwitne ssing\nor ama\ngo ds\nhil ton\nel man\nÃŃ n\nmeg ap\ncra ven\nannoun cer\ncrit eri\nsheffiel dissuper\nmilit ant\nconsu l\nhoo ded\naby ss\nb x\nma dam\nlo cu\nmary am\nmanic ure\ngrat is\nac tresses\nros ario\nthis dayin\nking ly\ngn ome\ncel ine\nr ous\nhe el\nlil ac\nvish al\nab h\nthor ns\ns ls\nne al\nconstruc ting\nbe ren\ns lang\nma ins\nfar ra\nsar ko\npai ge\ngu iller\nl ala\nice berg\nnou n\nplann ers\nu mmm\nou ses\nill ary\nma an\nbox ing\nzi pper\nsrin agar\nmigu el\no str\nmp o\nresponsi bly\nlan terns\nappli ance\nx b\ngren ade\nneglec t\ndy sle\nham mock\nne ctar\nwit cher\nr gv\ndi ence\nser bian\nseed ed\ncru z\nbi sh\nsp he\ne q\nsky rim\nalge bra\nphil ately\nbungal ow\nge off\ny ves\ndemand ed\nconsider ations\nthe vamp\npawan kalyan\nco ded\ngrit ty\nerup tion\nse infeld\nuni denti\nëĭ Ī\nwor m\nac us\nse ung\ndun g\nro land\nsu d\ndi visions\nab lanc\nshor test\nj f\np oun\nplant based\nbe to\ntough er\nmc o\ndon et\nmark us\nv fl\nðŁı ł\nopen ing\nco ward\ncaber net\no xi\nburle sque\nsand ra\nsu mo\nconsi st\ntho t\ncay man\nmotor ola\ngutier rez\nd slr\ny w\nno bel\nnov ice\nmoms demand\ngrun ge\nsp or\nd cc\npre sses\nsli st\nallot ment\nvoc ational\nft c\npu ja\nlo ven\nutt arak\ntan dem\nsh ep\ncome dians\nanat om\ncant wait\nhealthye ating\nwest side\nmar gins\nchi ang\nasbe stos\nstupi dity\nproble matic\nfit bit\n: $\nceil ings\nshu a\nprotec tions\nbio tic\nbeng ali\nre sts\nbien nale\ntim o\ncul min\ne minent\naffe ction\nunbeliev ably\nindividu ally\ncanvas sing\nwh itt\nnov asco\nchin son\nh pe\ngo w\ngloucester shire\npa o\nthresh old\nchev ron\ns ine\nwe ther\npp ie\naqu ino\nantwer p\nâĸ ¬\npo on\ninst af\nequ ine\ncinemato graphy\nnbaf inals\nvali ant\nkil kenny\nte rence\nsyste mic\nsr l\np ound\nmade ira\npl ough\ntre cht\nmat ed\nmp d\nransom ware\nph in\nli qui\nbb ce\nboom er\ni standwith\ncon ju\nr te\nnar a\nfoo lish\nda shing\nvier nes\nbr ite\nda u\njuni per\nai da\nyou now\nra zer\nde i\nrepe ating\ncomfor ting\nadjac ent\ne to\nca sted\nchat ur\nmu er\nsyn th\nsan itary\nmac le\nindepend ent\nlaw ful\ne erie\nh or\nðŁĴ Ń\nam rit\nvel o\nstation ery\nmu f\nmay may\ncontempl ating\nelabor ate\ngre gor\ndri es\nac col\nภļ\nschwarz enegger\nill nesses\nday break\nfollow back\ncollu sion\nelectr onic\njo vi\nhiro shima\nta w\nhom ec\nmic ah\nqu itting\nfro sting\nben fica\nhel i\ns ical\npic cad\ncorpor ate\nment orship\nyou are\nsing er\nshi va\nru ne\ning er\nri um\nplay able\ndoo p\nwil low\nter re\nni p\nat d\nwar bler\nprofession ally\ner ase\nproce ed\npedestri ans\nmis chief\nben ding\nalas kan\nc kett\nmo p\ndd les\nshut ter\nge ared\natene o\nma deline\ng ations\no sha\nder ick\nsw ild\nan gry\npat ents\nhun k\ndecre ased\nfr y\nðŁĴĸðŁĴĸ ðŁĴĸ\nsal on\nquant ities\nd ario\nni gel\nku ma\njen n\nhapp ye\nxx x\nrex perience\npro s\nau sch\nrele ssly\nham burger\nfuku shima\ner ne\nstat ec\nren d\nmay field\nj one\nlef ty\nbern stein\nsm il\ngener ates\nfore station\nband its\nta yo\nr ca\nac ci\nrodri go\nkn app\nelo vers\nvege tation\nu ral\nle ft\nħ ï¸ı\nworl dre\nsur i\nembar k\nw son\nba you\nmu ller\nmo vers\nðŁķ º\npresby ter\nl f\ncre e\nbat b\nsal am\ndemonstr ations\nan ec\nn pc\nit ics\nto graphy\nre inst\nthur st\ntal e\noff ences\nsmart city\nbro tha\nofthe year\nin valuable\near n\nðŁijı ðŁı½\nkre mlin\ngra dy\ntown fc\nguern sey\nma ha\ncontag ious\ndre x\nbe en\n( £\nnati vity\nk tm\nsomer halder\ncomp ounds\níķ ĺ\n" âĢ¦\naf g\nott news\nh ound\nfire fly\ncil an\ndonet sk\nvolunte ered\nak ira\nè ª\nsing ul\nst h\ndro wned\nmand o\nhe ir\nðŁİīðŁİ Ī\ntax is\ny uki\nvel d\nk ans\nel k\nran ts\nhash tag\nt eng\nro g\na at\ngru b\ne ber\nin india\ncolo ssus\nsig ni\nso ever\nmile stones\nder o\ndifferen tial\nphu ket\nmaster mind\nan gh\nmel ani\nbro ker\nactor vijay\nstun ned\ncontinu ity\naf fl\nvo cal\nperenni al\nfianc é\nin complete\nhun ts\nre issue\ndomin ates\ntur meric\nro am\nri on\nbag ged\nnas sau\nfu t\nx ox\nnational trust\njo ye\nsan o\nhearth stone\ndis respect\nle es\nh se\nsiber ian\noffe e\nre stock\nwolf gang\nre gan\nplan o\nun wind\nre par\nmil le\n] ,\nskul l\nfat ally\nconcep tual\nðŁĮ ²\nf é\nber to\nb ms\nu a\nmag na\nnotre dame\nle te\nla undering\nheartw arming\nbuffe tt\ngo at\npe abo\nwind mill\nv ac\ncontinu ally\naz alea\nmem brane\ncan cels\nmake yourown\nathe red\np to\ntor pe\nðŁĺ ł\nðŁĴ §\nsc ares\nle aking\nz et\npix els\nac i\nkh il\nmarath i\nðŁĻı ðŁı½\nu la\ntam u\nchandi garh\nz agre\naa b\npronoun ced\naubre y\nsand er\npun ta\nhar low\nic elan\ncelebr atory\nso t\nunci ation\nstru ly\nmc dowell\ndeepi ka\nremin ders\nmy stical\nct c\nchat ted\ns ica\nbar gains\nch hat\nru bin\nm net\noiland gas\npel ican\no at\nmor ality\nk our\ni h\nnu clear\ngc u\nric her\nvene zia\nm ma\nle ith\nac company\nrich mond\nsports net\nba ahu\nsmu ggling\nmm i\nðŁĩ®ðŁĩ ª\ntwi sts\nsahi b\n.... .\namb itions\nil lo\nhistor ical\nfo rec\nshow biz\npon ies\nchas ers\nremo del\nwill ing\nprince sses\nam ple\ncushi ons\nac les\nlot r\nda ch\nan the\nin corporate\nnew bury\nki ri\nfried rich\nab v\nball ers\nalber t\nðŁij Ń\nlet i\nnan op\nci de\nanal o\nn sf\n)) ))\ngriffi ths\nvalen ci\nro ano\nfun run\nbabys itting\nca day\nent re\nu ck\nslu g\ntic al\nthe sims\nro ar\ncar ney\ng am\nsto we\nfi d\nbun ny\nsham rock\npe cu\nmol ina\ngo cougs\ncon tributes\ntransform ation\nmo y\nv aj\nsever y\nantioxid ants\nthir teen\nsight seeing\nl j\nreversi ble\nodd ly\nhoo kah\nnou vel\nhal al\nfe i\nstab les\nmul t\nho pped\nbra ids\ninter change\nghana ian\nww ww\neth no\ncon junction\nago v\nye ti\nearth and\nts p\ncon serve\nheir loom\nmetaph or\nwoo f\ntor io\nself less\nn wa\nem ilia\nyl ene\ny xe\ngi ar\nmoder ating\npro bz\nb fi\nne er\ndu mmy\nhanuk kah\nwe bber\nk v\neye brow\ndag ger\nsu mp\nra ges\nork ney\ntb o\nhal sey\nassign ments\ntr onic\nscri b\nco on\nan war\n# âĢİ\njal ape\nflori da\nqu aid\nhaw keyes\nâĻ¡ âĻ¡\nstreet car\nro g\ndat lantic\ngran ola\nun changed\nexpect ation\nÙ ĩ\nmar lin\ngu mmy\nðŁĻı ðŁı¾\nawareness month\noil painting\nmu th\nper ch\njun to\nvilla gers\nmor g\nche ated\nweb comic\nthe future\nd ps\nla kings\nmen tioning\nvo or\nident ities\naccor d\nmc gu\nl pga\nrum our\nmassi vely\nm pls\nheal y\nd ate\nsp oli\nre visited\non t\nal and\nscru tiny\nlakel and\nbl ending\n< /\nan kara\njami edor\nmetab olic\nf ences\nann y\nå ħ\nsemic on\noo tt\nspace ship\nwack y\nle ta\nap ac\nshe e\nin herit\ndo res\nðŁĩ¨ðŁĩ ¦\ngent e\ntw ick\nri ms\ngal ve\nde ville\nking fisher\nscorpi o\now l\nal ar\nvari an\nðŁĹ ĵ\nvene tian\nstar dust\nthen orth\nq ing\nhar rington\nconsul ate\nspectac le\nho bbs\ntur ks\ngre er\nmat ing\nðŁİ Ģ\nðŁĮ Ģ\ndirec ts\ní ĭ\npompe o\nvo iced\nla os\ntz u\npro me\npri sm\nmer c\nfortun ately\nbc fc\nmcdon nell\nnot sorry\nsmi led\nt ba\nfor war\nmid term\ndar by\nwe instein\nup grading\nwol ff\nbron co\ncab ello\nðŁ¥ ĩ\nfi able\nshar pe\nbat tered\nsat o\nmyth ical\ninstap ic\npre pped\neni um\ne spo\ndi aper\nexplan ations\nwho pping\nragn ar\npe el\nantibio tic\nl acks\nharri son\nli sm\nau l\nqu ail\nmartin a\nsent encing\nsc ams\ndi di\ntr onics\nãħł ãħł\ngo ff\nza in\nparam ore\ncha ined\nclin ton\nli ff\ncott ages\nem on\nreve rend\nconsu mer\nce an\nt any\nlum pur\ne bay\nsto ol\nðŁĺ» ðŁĺ»\nta pro\nh ath\nmodern art\njust ine\nprover b\napp y\ntra x\nmani fest\nam bu\nnai k\npe pp\nr sd\nmer chants\nkitch ener\nshi fted\nli zz\nâĺħâĺħ âĺħâĺħ\nâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶ\nuto pia\ntom o\nou ted\ncom ers\nchiroprac tic\nbook club\ncin dy\npro hibition\nse uss\në¯ ¼\nthin kin\nrr rr\ngo fund\nt ack\nom b\ncatastro phic\nling u\nguild ford\nbo td\nॠĭ\nplan ter\n^ ^\nwin k\nkath mandu\nsto ppers\nsmooth ies\nre efs\nhin d\nbell amy\nĦ ë\nwaste water\nvo or\nnat l\n! ]\nre el\ny ap\nscoo by\nwork space\ncorin thians\nbl un\nobli gation\ng bbo\ndy son\ncra vings\nell ington\ndap l\nwre xham\nearthand clouds\nuk runchat\npositi oned\nkal b\nfour square\njo ck\nim pending\neven ing\nath y\npro claimed\nc ites\nann apolis\nsan i\nmar th\nir l\naccom mo\nka a\nfin a\ny aa\ndi sper\nec ar\nbha k\nwill y\nðŁĺĢ ðŁĺĢ\nmcder mott\nmo j\ngener ational\nu said\ntrain ing\nlon ely\nlo res\nimpe cc\nâĢ IJ\nbeav ers\nma ki\nhe b\naap l\nå ı\nwolver hampton\nleader board\nme u\nc fa\neaster n\nhu r\ncivil war\nou rage\nhor ned\nle high\nawar ds\nevi dent\ngi gab\nr ous\nma del\nro byn\nur gently\nk ors\nen as\nheis man\nbam bam\nfab ian\nf om\nevalu ating\nassemb ly\nout sourcing\nhun tsville\nðŁĶ ª\njusti fied\ncashi er\nsp aper\nbuc keye\nanaly tical\nillumin ati\nau tho\no j\nsha de\ngeel ong\nwh ey\nhe aton\nterri bly\nele k\nun charted\nsd live\nmoto cross\nher mes\ndar shan\ndar lington\ncash mere\ngri pping\ncilan tro\npun ish\n... :\nðŁĴ Ħ\ninst ance\nder i\nlo bal\nmuk her\nsp ar\nthin ker\nfre mont\ncom piled\ncolor ado\nvig ne\nsm d\nwhe ad\nvilla ge\nle ek\nformula e\nta res\npersist ence\n?? ????\nped ago\nhe z\nalzheim ers\nvul ture\noff ence\nis great\nsuff ra\nkick in\nh mmmm\nbroad way\nï¸ı @\nart i\nalli son\nendor ses\nry u\nlolli pop\nsoy bean\nkend all\ncer a\ninv ade\n( ðŁĵ·:\nconver ter\ncar pets\nho bo\nfr it\npe ac\nes qu\nern an\nou f\nan il\ndi ffer\nch ing\nbre cht\nsp g\ndaven port\nstra va\nsever n\nn gos\nstor ians\nfe te\nparame dic\nj hb\nal amo\nsne aking\ngold coast\nroof s\nisi l\ndepic ted\nprojec tions\nnu mb\no ss\nep i\nglu cose\nzid ane\ninfin iti\níĺ Ħ\nran som\nton ics\nfal k\ng ler\nou tw\nre ss\nweek ly\nthe on\nn ole\nðŁĩªðŁĩ º\nvol ley\nsum mar\nneg ativity\nsam son\nye w\naus votes\nju l\nju dy\nf art\npra yed\npal ate\nmulticul tural\ndouble header\ncycl ones\npier re\nãģ ¨\nâĺ łï¸ı\nrt w\nconver ting\nwir ral\nl ari\nir relevant\naustin mahone\nan che\nya an\nsd f\n$ .\nexplo ding\nulti mate\nprof ici\ngofund me\ncell ence\nep stein\nbul lied\nsep tic\nà® ¤\nlu mber\ncu ff\nvsco cam\npl or\nภ¥\nse ok\nro to\nvenezu elan\nsor ta\nspir ited\ndaniel padilla\nteam sisd\nradio active\nicelan dic\nðŁĴ ¤\nver e\naccommo date\nshi pp\not ter\nol ina\ne go\nsu la\nsan antonio\nde as\nsimil arities\nâļ ¾\ny om\nbro ward\nå °\ncan cun\nveri fy\non te\ncandle light\nìł ķ\ninf ants\naz am\nðŁĺ °\nle ven\nun stable\nbloom ington\nx ford\ncon tour\ny p\ninnov ator\nhistor ies\npo y\nlolo lol\nex pires\ncat alo\nbill boards\nan ab\nel ic\nnovasco tia\nfa ire\nìĿ ´\nrock well\ngr ille\naz tec\njoh or\nur struly\nfi ren\ndun lop\nid le\nport man\njo es\ntx hsfb\nhol m\ncham ele\nunder world\nlo ss\nti em\ntherap ists\npast ure\npa ste\ning now\nvul can\nra gon\nlar kin\no shi\nho co\nchild hood\numb rel\nsuccess or\nkath y\niz en\n° ï¸ı\nshare holders\nol ga\nai b\nhe ap\nfl aming\nro u\nair tel\nrat t\nz ane\nvo w\nthor ough\nsn ag\npar th\nun conscious\nve y\nnew release\ngh ee\ncroati an\nfacilit ating\nswan son\nastor ia\nto logy\nmaster y\nðŁ¤ ij\nbil bao\ntrou pe\nthe ori\nchey enne\nro tt\nshore line\ngra sso\nmaster chef\n+ )\nvi x\nellen show\nas g\nan ak\nku ya\nsafar ilive\ndebu ting\nblu m\nlist ener\nv ins\nbook shelf\nsmart cities\nmakeyourown lane\n; ;\nðŁIJ ¯\nri zz\non ward\nbull dog\nbear ish\nvir uses\nfri gh\nlin den\nwe iser\nsn t\ngon a\ndre sden\nfl anders\ncu k\nwheel ing\nba u\natu esday\nsurf ers\nswi ft\nmc call\narbitr ation\naw d\nmon c\nb ine\nat x\nre fr\nmi ro\npo sey\nn are\nrit ter\nâģ ¦\nplay book\nblow out\nsports manship\ns oooooo\nmalay alam\ngri ms\nbur bank\ninfin ity\nsar gent\noit nb\njoseph ine\nski pping\npar kin\nexcur sion\nsemin ars\njo har\npar tridge\npost game\nll ll\nblan che\ntemp ting\nm na\nlu ka\nis ers\nto ffee\nbar ron\nhe mmings\nsa e\ngo hawks\ncu pid\nli mbs\ncon se\nun common\nz ada\nhead shot\nso ils\npione er\nmam ma\nsem itic\npan dey\njamiedor nan\nspl its\nvel a\nson i\nra ff\nt mobile\nâŀ ĸ\npra wns\nlit er\nenjo yment\negg plant\ntu b\ncultur al\nus ic\nsuspici on\nsy cam\nsumm ed\nma du\nho ck\nup wards\neye ing\nri ve\nassas sins\nâĤ ¬\nout fy\nchi ves\nt ner\nla is\npor ridge\nsad dest\nw cc\nvick i\nsna ils\nbiz italk\nmill an\nðŁĮ į\nsam oa\nj ing\nmi key\ngu j\nchel ms\neli gibility\narma da\nthro p\nsurger ies\nãĤ ¿\nmo hawk\nex its\nme m\nis lington\nc me\nland fill\nkait lyn\nðŁİ ¼\ncombin ations\ntomorrow land\nver b\ncor a\npre cisely\nna om\nðŁĨ ķ\nshr ink\nsof tly\nmerce de\nmand el\npoo dle\nball erina\nsop h\njux ta\ny at\nary an\nhesit ate\nlo wered\ngu lar\ndungeon sand\nron an\nmy ri\nsp f\nmen opau\ngra sp\npa thi\nfe asi\nfla w\nshi story\nste ward\ngg le\nfay re\ncli que\ncredi bility\nyo g\nsec tion\nmu sko\nse ville\nno tt\ncal m\nmate o\nindic ted\nfi ba\nby l\nlin o\nu kin\n!! #\nenig ma\nsiri us\nbu sc\nðŁį Ĭ\nmac kerel\npsal ms\na at\ntomorrow spaper\nðŁĺ ĸ\np fc\n........ ...\nshre k\nmul let\no sh\ndanger ously\nimmen sely\nam ur\nðŁį Ĥ\npro por\nsy a\nlondon marathon\nabo ve\nobli gatory\npro v\nra cha\nalex is\npri mary\nsh h\nether net\nd stv\ncou gar\nun lucky\nni l\nsteak house\nmel a\nfc bayern\ncause way\nca therine\nfluore scent\nnx t\nto kyo\nau sp\nreleg ation\nqui zz\nshored itch\nproud tobe\npromo s\ninter acting\nhome brew\nda esh\nw pg\nstead ily\nprovin ces\nbal lots\ni ah\nal to\n< <<\nyou u\nri ley\nprefe rence\ntra verse\nincen se\nam munition\nho dges\n# @\nhail state\ntart an\nwitch craft\nvent ilation\nliber tarian\n! âĢ¦\now es\n% !\nong chang\nbru shing\nle ic\nfi ber\nunder attack\ndown load\nex pir\nhy o\npompe y\nmc bride\ny ag\nstre e\ncom bat\nten ding\nai ra\ngug gen\nab ra\nin na\nfli ps\naw al\nm ach\ndol lar\ninspir ations\nz um\no du\nit ty\nvideo game\naqu aman\nhar u\nbel fast\nje b\nbut ch\nus gs\ncalcu lus\ngo yal\nmor gen\nx finity\nstand up\ncontrac ep\nsab re\nna be\nin secure\ngener ously\nepit ome\nl w\nt ca\nnarr atives\ndon nell\npand as\nber gh\ntu t\nker al\nfel icity\nbr ampton\nquinte t\nnom ore\nðŁĶ ij\nlo i\nalham dulil\nðŁĶ¥ ðŁĶĹ\nston er\nshaw l\nclin ical\nbren dan\ngon e\nfla wed\ntri ppy\nj g\nal location\npo aching\nve vo\nmo cks\nlef tist\nbon uses\ncondem ned\nabil ity\nst ating\nmicrobi ome\nbio logist\nfor you\nwahl berg\nss or\nift ar\nw ul\nÑĦ оÑĤ\npom er\nme me\nver te\ntre ll\ntra it\nin let\nhormon es\ndeliber ately\nvill ar\nbattle ship\np bl\ntw enti\nho kies\ndal ail\nsay a\nmay fair\nhan s\ndie ts\n⾨ ⾨\nod in\nhot spur\npap i\nk ana\nk amp\nfin na\nflo tus\nti ans\nunic orns\ntribe ca\nchang ers\nfore ground\nout a\ninv aders\ngett ys\ntomorrowspaper stoday\nmac millan\nhand written\nw fp\nu de\nstate of\nbase d\nâĺģ ï¸ı\ncas m\npsy ched\nhistor ians\nfol d\nd da\nag grav\np ans\ngreen way\nau sv\nðŁĺ ¶\nshradd ha\ninde x\nbe sti\nzim mer\nt ness\neye shadow\not te\ngo ts\ndistribu ting\npro min\nyo l\nace a\ntram rahim\nhoo per\nsupre me\njam min\nintu itive\nquali fications\nsli m\nsid di\njay ne\ntri pping\ng tx\npun s\ne manuel\nom g\nmid summer\nin to\nsuccul ent\nri en\nnew mexico\no or\nhoo king\nin f\nðŁ¤ Ŀ\nflir ting\nna hi\ng friend\nt ps\nhel ix\nz s\non ie\nct f\nkri s\nirresi stible\nfla p\nðŁijıðŁı» ðŁijıðŁı»\nus wnt\nru d\nram ps\npin oy\not w\nlol z\nlow ering\nfavor ite\nt mc\nphra ses\nher mi\naver aging\nem br\nben o\nestu ary\nsle eve\nribb ons\nta sh\nภ¹\nx f\naw gs\nsun ited\nbrew eries\nanir ud\npun ches\nol die\nip ads\nwi fey\nland lords\nd ji\ngun ner\níķ ´\ntex an\nex op\ncas sandra\ns off\nðŁļ «\nigh ton\nbak ers\nawareness week\nv all\near p\nbts bbmas\napologi zes\nâļĵ ï¸ı\nwas ps\nstates man\nsnat ch\nwatch dog\nra fi\nafter party\nspi ke\nj er\nperi ph\nr nc\nmu ll\nle en\nshi es\nli eu\nurstruly mahesh\nmer ton\nde sai\nshi f\nðŁĮ ±\npe dic\ngos ling\narrang ing\nww g\ngen y\nyou uu\nnetfli x\ne ttes\nk wi\nbernar dino\nam iga\nØ ¨\nkashmir i\nt ings\nemer itus\nde cat\nab domin\ndc i\npha ses\nd jan\nbe am\nop ry\ni shed\nthe ellenshow\nthe st\nhabit ats\nto ons\nmclau ghlin\nri pper\nmicro biology\ntal aga\nclu eless\nss u\ncro che\nbro mance\nlonge vity\nzagre b\nprev ented\ntra ve\nspo ilt\ndarry l\nmigra ine\nal cat\ndd dd\nvi v\nser pent\nmat tel\njam a\ncon quest\nî Ħ\nsam sung\npresbyter ian\nket ch\nfire fox\nmo tif\nle c\ncho pping\ncher no\nj ann\nðŁIJ °\npro lon\nwake up\nconver gence\nmersey side\nheart broken\nlo oming\nhal lucin\nmai ze\ncommun ism\nmo h\ntwitter storians\nserge y\nres eller\nfavor able\ned gy\nre iter\nmal aga\nlive me\nka hn\npul sion\nbig g\nkim kardashian\nati o\ntyr anny\nru ption\nq ant\npro ven\nby z\npu shaw\nkri stin\ne er\ntar dis\nri z\nawak en\nmi ko\nun documented\npath finder\nindirec t\nresemb les\nh ler\nconce aled\nscand al\nre im\nd nb\ncr itters\nattend ant\napprentice ships\naa u\nscre amed\nl su\nfa h\nhar bour\ned d\nbat sman\nli ss\nmi sha\nspani el\nit f\nadvan cement\nfa c\nclose up\ncecil ia\nmedi c\nnarcis si\nlav ish\ngi ac\nma ys\nle it\nwine wednesday\npushaw ard\nlet to\ncurren ts\nbug atti\nout ine\nw j\nun do\nler osis\ndevo tional\nðŁij «\non na\nfais al\nsa una\nhimach al\nam ii\nà® ®\ndi zzy\nscreen writing\nph x\nsp n\nick i\nag irl\nfi shes\nwb z\npi m\nbo ar\nac id\n! ..\nrocke feller\nn ga\ndra stically\nsimpli fy\ndru mming\nautum nal\ngur mee\nlor de\njo ann\ngive up\nb our\nam ura\nder land\nsim pler\nwat son\ntri dent\nconcor dia\nbel lum\nbre k\ndum plings\nvi on\ndungeonsand dragons\nsp ri\nascen sion\nwil datlantic\nu st\nrob ins\nlegi on\ninsi st\njar o\ngue ss\nso b\nbigh it\npool side\nnegoti ating\nmc gill\nbil d\ntechn icians\nmiti gation\najay devgn\nb to\nant en\ncosmo politan\nðŁĺĬðŁĺĬ ðŁĺĬðŁĺĬ\npatri oti\ntemp er\npromen ade\nnav ajo\nnam m\nwrink les\ndc fc\nle ach\nbru nette\nr f\ncout inho\nal ti\ntradition ally\nop tome\nna z\naccord ingly\nrec ard\nde ets\nsw ell\npo sure\nwhit ening\nstrang er\nilli on\nhere ford\nu wu\nro bber\ncotsw olds\ncl en\ngor ge\nnam aste\nre lish\ngri ff\nadren aline\nbla sio\nval e\nê ²\ntoler ate\nrail minindia\njen sen\nho ven\nel lu\nob sole\neisen hower\nunidenti fied\nthan niversary\nbody guard\nØ ¯\ni dge\nsch al\nstock port\nsn i\nre taining\npo po\npix ie\noli thic\nki er\nha jj\nsa z\ncor bin\n!!!! !!!!!!\nv it\nme gat\nde h\ncircu it\naf fleck\ntheore tical\nhope less\nu ab\nslu mp\nb ice\njam med\nlet stalk\ncan i\nside ways\nlabyrin th\nre fs\nha hn\njare d\nðŁį ¹\njam bo\nph yl\nenhan cement\nc tr\nful lest\nse ye\ndo ba\ncho ic\nyo s\ncb j\nandr é\nre watch\npri ma\ndoctr ine\nfor gets\nu hm\nar ound\nu le\nart lovers\nshi raz\nhar th\nex tor\nÅ ¡\nunexpec tedly\neli us\ny x\nem my\nse ac\nðŁijĩðŁijĩ ðŁijĩ\ncorrec ted\ncom bu\nwom anc\ncou gh\nwhat son\npubli shes\ndivers ity\nback bone\nlock down\nmesmeri zing\nnor te\nma b\ndesig ner\ní ģ\nra gh\nmole cules\nget outside\nthe beatles\nsemicon duc\nnach o\nlun es\nham mers\nsul tan\no on\nfe ren\natt ach\nar qu\nuttarak hand\ns ash\n; -\ntre ad\ni ko\nar thur\nscandin avian\nr ation\nga el\ncharge able\nfish y\nv ma\nhand bags\nchar a\nay ne\nde fam\nsett lers\nqad ri\npal ais\nin wx\napocaly ptic\npoo ja\na es\nat ories\nproof ing\nn lp\nts la\nv ina\nli do\ndee phouse\ninformat ics\nv v\npp ings\ndi ss\nà ¯\nuhur u\nst ony\nbetra yed\nb aff\nmy ra\nas pen\nallow ance\ntam ara\nci f\ncor bett\nser ge\ndi go\nambi gu\npain ters\np cr\np ca\nnom s\nlo ft\nve e\nopend ata\nðŁIJ ±\nalex andre\nidenti fies\nfantasy football\nre production\nbrom ley\nware agle\nmm er\np ss\ncu es\nay at\nhut chinson\nsar ac\njack man\nira h\nap ink\ncol s\naussi es\nex ecs\nday ton\nðŁĻ Ĩ\nim v\nhar am\nchuck le\nauthent icity\nar do\nincub ator\nภª\nphoto shopped\nembrac ed\nfight for\ngor man\nzz zz\nschol astic\ncri sps\nte apo\nmid night\nga ine\ncol lier\ns ate\nde tte\nå Ń\nimag ine\ni ff\ntw ili\ni fication\nteat ro\nnor ma\nes ur\nemergen cies\nrise up\nr inger\nhass le\ncait lyn\ntranqu il\nvers a\nse b\nover look\ngin i\nbo go\nse re\nmay ne\nhenri k\ncontamin ated\nrhapso dy\npro portion\nwildatlantic way\nâģ© .\norganis ers\ntran e\nstand ard\nsper m\nlaun cher\nric ci\nher ts\npaper work\nshowcas ed\nmer yl\npen a\np imp\ndisa strous\n^. ^\nphar a\nx is\nfron tal\nsw irl\nsp ills\nswag ger\nsmart watch\nsizz ling\nsavi our\ncat ar\nbb cr\nrefurbi shment\ndr is\ncitro en\nabsor b\npatrioti sm\nil leg\nchro mo\nfresh ers\nru s\nlim iting\nef ish\ndown ed\nman dir\nhazel nut\np all\nmac on\ndisappear ing\nquali fies\nbo on\nbar racks\nam ine\ngen dere\nðŁļ ĺ\nj es\nãĥ Ń\nqu ito\nmiddle weight\nsch au\nquad ru\naci ones\nlimit less\nðŁijĮ ðŁı½\nch man\nar av\nregulat ors\nit up\nbatter sea\nmil ford\ng z\ntic king\ngh ou\ncru shes\ntu tu\ndread ful\nfam ine\nfor change\ndalail ama\nðŁĴ į\nwhit aker\nhash mi\nh us\nvo d\nbet te\naa ah\niso o\nðŁ¥ Ī\nha ar\nla ine\nb v\nall day\nspr out\nindie games\nfree bie\ngree ks\nbut ler\nill in\nha al\nware ness\nsi ma\npublic health\ngam a\nwa a\noun g\ngoo oo\nokin awa\noff enders\nim pose\nho c\nyoung ster\nstory teller\nsc ap\nfigh ter\n+ ,\nwhit es\nmusic monday\nre za\ngo ducks\nbri a\nmi um\ncas per\ncru mbs\na ad\nmarti alarts\nch p\nri gged\ntn g\nharve sted\nsa k\ndo jo\nmill wall\nb nw\noc d\nhistor yof\nt mr\nsi rens\nfan ci\ncaregi vers\nvir a\nson i\nrecur ring\nacknowle dged\nðŁı Ł\noph ile\nbu cky\nstre ssing\nroo k\ndi gger\nvi val\nsan do\nfle et\nsi ers\nsel caday\nrefre shed\nanti fa\na que\npo lo\ndisappear ance\nde mb\nâĮļ ï¸ı\nren ted\nber ger\ng mb\ncu la\nss al\ngoo dy\nu hh\nmarcel o\nw anna\nsoft ware\nshop small\nturt le\ntom as\nfri sco\nðŁĺį ðŁĴķ\njim enez\nc su\nday z\nan do\nwyn ne\nchoreo grapher\ncerv ical\ntrail blazers\ned g\nzend aya\ntravel blog\nel s\nwhole some\nco g\nlab out\nar ney\ndel le\nsu isse\nma si\nine se\nom be\nfi ddle\nre claim\npa u\nwat cher\nsla in\nber ty\nopti mum\nel ites\nmin is\ntur key\npatro ls\nger ard\nau reli\nwild ly\nwal tz\nbr gy\nw ob\ncre st\n+ ++\nve z\nfro sted\ndavi do\nthe x\nparam edics\np into\nhan k\ndu pont\nur g\nfo stering\nmicro poetry\nspec tre\n---- >\nne uro\nfri da\nmusic al\ngalve ston\ne ffic\nsc ape\npal azzo\nth all\npro visional\np js\nau re\nðŁĶ ľ\nmam amoo\nkit ties\ncre e\nwa k\nlo ool\nlu pus\ncn blue\nà º\nðŁİ ¬\nrac ed\ntro se\nom as\nstri de\nco ors\n⤠µï¸ı\nin comparable\ncy ril\nbroad er\narec lipse\nðŁį Ķ\ninter val\nti ru\nco working\nw aco\na ham\na bee\nflouri sh\nthe times\nol ini\nkick boxing\nlu cer\nat la\nas un\ncasser ole\nmi aw\nlobb ying\njan ice\ncir que\nre flex\nle ary\nsanat omy\ntem pest\nse mb\nmur dering\nus av\nro bo\non et\np cc\nnati ves\nlife of\nsa ha\nruth less\nrel ates\nappeti zer\npye ongchang\nnor d\ner u\na thing\nug ly\npl ying\nbran ce\norgan ise\nkend ra\ndat o\nchees es\npar ma\nburn out\na stra\npre toria\nadjust ment\nuk u\nsl o\nli ken\nfav ors\ncli ve\nbe ets\nsnow donia\ngo tv\nsy n\nopen house\npan i\nportra yed\nsl ated\nme cca\nren al\nsupportsmall streamers\nstaf fs\nda o\nbi ker\nvik tor\ntit us\nadmi red\nðŁĵ ±\nhurric an\nhe ats\ngl ory\nphoto genic\nmer i\nde por\nburn ham\nor angu\ndj ing\nimpre ssionism\nign ition\nca i\nw ynn\nde pe\ncove ted\ncolla gen\nsau s\nor nam\nadministr ators\nss on\nnh politics\nhahahaha hahahaha\naspir ations\nr gb\nswol len\nso we\nsc r\ndiver gent\nhou ghton\nhan oi\nd ory\nni ki\nland ry\nb cci\nðŁijĮ ðŁijĮ\nis mail\ntri pod\nher d\nbhat t\ndress age\ntab by\ningu ish\nhur on\nà³ į\nà ł\nto das\nevangel ical\nchor ds\nst john\nslo ppy\nmarty r\nface book\nali ght\nsen sei\nkath niel\nr ites\nzi one\nu o\nrevel ations\nweight lifting\npan o\nnc wx\nac ton\nà® ķ\nØ ²\nsom a\nภĹ\nrespec ting\nmar che\nfore man\nbe tty\nki k\nshi bu\npo on\nargy le\nk swx\net z\nmar bella\nbrac kets\nstand by\nfire side\ndefi ance\nv ex\nbritanni a\nin habit\nappo int\npiyu sh\nle ash\nsci ento\nfla sk\nsen na\n> :\nat roc\nsand erson\nid lib\ndhan ush\nðŁĺ Ļ\nen thr\nhit ch\nde dly\nal ley\ndor k\nmon do\ncudd ly\nmis sin\nye sss\nnight ing\nj pn\nw ary\nump ire\nma z\nê ³\nbab s\nĭ ãģ\nstan ford\nposse ssed\nexce eded\nðŁĶ ¶\nwall art\ntra p\nj il\nhi bis\nsp ying\nscri be\nkhali l\ntrans lator\nlu mb\ndi zed\nch c\nsuper vision\nshut ter\nja g\n_ *\nyester days\nms f\nhi hi\ngonz aga\ngille spie\nvive k\nec static\nthis morning\nch us\ned es\nston ed\nbe es\nðŁĩ¹ ðŁĩ\ntur in\nho ver\nat rics\nster n\nsam heughan\nauti sm\nmi ya\neye witness\nwrit ings\ntravel tips\nchut ney\npx rtg\nkeny ans\nmy stic\nk rit\n/ $\nred head\nworld ly\nam us\nop la\nle ve\ngab bana\nse en\no clock\ngang a\nkeen an\nsc ent\nol dies\ngo green\ncorner stone\ncomp ly\ncon cours\nðŁİ¶ ðŁİ¶\nha an\ncon fis\naw son\ncle op\nî Ģ\nsu zu\nsau té\nal gar\nsubscri ber\neste emed\nãĤ¤ ãĥ\nworth while\nmel rose\nflo ck\nbri ghtly\nviol inist\np ere\nsli pping\nand co\nsi gh\nha van\ncu lo\nm sa\nfibro sis\nmatil da\nra fting\naw ard\në ª\nmm mm\nge aux\nste iner\nsin n\nhelp ers\nbeet les\nai mee\ntai wan\npistachi o\nmac beth\nm zan\ndescend ants\non sale\nin r\nil m\ngrou se\nsa ig\nmo w\nbi gre\nadjust ments\ntu la\nmathe w\ntransl ates\nmu h\nbol lah\nðŁĴĽ ðŁĴĻ\namo res\nab outs\nbomb shell\nbla ster\nx avi\ns ns\nk roger\nga ther\nerad ic\ndaf t\nchem o\nben ches\nðŁĩ© ðŁĩ\nut v\nour a\nn ko\ngator ade\nbiaf ra\nok state\nim danielpadilla\ndom ains\nopen ingday\nkid do\ndo i\nric e\nday care\nmac millan\nba thurst\ncheer leading\nðŁ¦ ģ\ncash back\nk won\nhob bies\nexem pl\nries ling\nâļ ª\nag les\nny s\nevery thing\nnav is\nad di\nmagne sium\nfaceli ft\nark ham\ngrand es\nextre mist\ndon at\nvit ality\npump kin\nbe tta\nsl td\narti san\nli by\npe aked\nah hhhh\nmary am\nassi m\nun sc\nment e\nal aya\nlow ers\nar as\ngri ev\nle ip\ngr ati\ncri ses\nspr ints\nexe cute\nw to\nms d\nmag ical\nre viewer\nspark les\njuke box\nðŁĺĤ âĿ¤ï¸ı\npay back\nlicen ses\ndun kin\nbel t\nlake wood\nh ateful\nbud gets\nrev amped\nph erson\nky iv\nwent worth\nro sen\ncru ise\ngi ggle\ndef star\nassassin scre\nym outh\nwin kle\nw fc\nband wagon\nb kk\nw iring\nkear ney\nsouth side\npe tit\n! ðŁĺį\nnor dic\nmir za\nmu gabe\nv l\nscon es\nk tv\nsand al\ndu c\nm alls\nðŁĴŀ ðŁĴŀ\nit c\nal ay\nim pair\nun rest\nflo ss\nc é\nab ou\nvar ying\nmuse o\nser ver\ndi ya\nhibis cus\nero y\nmer ritt\nfin dom\nf pp\nun usually\ngo tt\nconting ent\nali aa\nball on\njo l\nhi ked\nzy me\nay r\nag n\nga z\nperio dic\nspar ty\npracti sing\nlin ton\ntal is\ncy pri\nwomanin biz\nradio disney\nðŁĮ ¼\njump ers\nendo cr\nðŁļ¨ ðŁļ¨\nand on\nshar apo\nmi er\nma sonic\nfac tories\nvi en\nbb ers\nìĽ IJ\nhol d\nke bab\nbe ak\napproach ed\nac milan\nmun ro\nko sher\nexcell ency\nnegoti ation\nwalt disneyworld\ncr ouch\nte asing\nsuppre ssion\nen ya\nb ce\ntransformation tuesday\ncal lie\nvis was\np gat\nic ted\nend ings\nesc u\nrecru ited\nit fc\ncollabor ations\ng ino\nsnu ck\nausch witz\ni fc\nx ii\nke sha\nger vais\nclo ak\nx l\nsa ad\nprob ation\npre cau\nmac in\nanasta si\nle k\ne azy\ndaysof code\nmariah carey\nyo g\nstit ched\nboy friends\nsh ar\nph ile\nag u\ntwin kle\nphi shing\nweek ender\nic ton\ngurmee tramrahim\nal ton\nl eness\nall an\npen ultimate\nkry stal\ngo u\nlan de\ndis mant\nab using\nnor se\npat erson\ned mun\nap an\nxi umin\nsk el\ncat walk\nre act\nwal led\nt angle\nbr yn\nve to\nsuper moon\ncas ablanc\nappreci ates\nski d\nbo th\ncatal ina\nele ague\ncyber monday\ncau tious\nðŁ¤ ĵ\nnov o\nhamp ton\nha ye\njose f\nvar an\nlo bos\nroano ke\norph ans\ntt in\nsqu ads\nishqba aaz\nblack panther\ne tu\nk sh\ncru mble\ncess na\nreli eved\nscul ly\npollin ators\nexplore canada\nki es\nkam loops\nkir an\npri mal\nsett lements\nhot spot\nbrain storming\nce dric\nbi ennial\nsh ant\nâĻ¡âĻ¡ âĻ¡\ndo on\nhear n\nwalk way\nfe m\nve al\ndeport ation\ntox ins\nelimin ating\ndescen ding\nby the\nbla sphe\nha sta\ncomple ment\nas cent\nri ga\nprovo st\nâĸ ª\nwee ping\nanti semitism\nemploye e\nunearth ed\npin o\nnatali e\nbla d\nang ola\nlock heed\nin ian\nag r\nni ster\nim pala\nm ke\nfan atic\nâĺħ âĺħ\nðŁij ¸\nlu ch\nsimpli fied\ngall ery\neconom ic\ncy borg\ncon i\nsel ma\nin ception\nko ala\ndv ds\ncre sted\nm mor\nvisi ble\nn sd\nðŁĻĮ ðŁı½\nw under\nrefriger ator\nre opening\ne era\ncarou sel\nas p\nballi stic\nvictor y\nmo tive\ntre y\nsharapo va\nsi i\nmon ter\nint end\nwest chester\nsp e\ncy mb\nvi dal\nll ama\nuni v\nfin er\ncrafts manship\njazz fest\nb ch\nag gio\nn cc\nlamb da\ntranqu ility\ncis co\nba den\nso bbing\nof i\ngo ta\nru mored\nwar med\nore an\nac ton\nmar ci\ngh ani\nâľ ĵ\nas sorted\npembro ke\npen elope\nda f\nat ty\naim o\npretz el\ncarni val\nthan os\nko chi\nmer sal\nham radio\nar twit\ncas c\nguer rilla\nkush ner\nk app\nal ise\ntodd lers\nsteward ship\no tti\nter ri\ntem pe\nrest less\nvit o\nzay ed\nrsp b\npi on\nhi ppo\nhaw thorne\nin as\nam ily\nnut cracker\nlo p\nd ali\ntro pic\nðŁ¤ ł\nul o\njare dle\npy rene\npale o\nusa ir\nm ould\nit ated\ngene tically\nbiom ass\nðŁĩ³ðŁĩ ±\ndo dd\npractic ed\nmonarch s\nun manned\nm buhari\nam al\nphoto gra\nko ol\nbren don\nju ices\ncu re\nworld bank\npoin ters\nðŁĴ Ŀ\ntur f\nle ds\nbor ussia\nbapti sm\nwarwick shire\nmoun ts\ngay o\nbe gg\nco pied\nasi ans\nk g\nmoder nist\ngi d\nfront man\nconcentr ated\ny t\nsc avenger\niron ically\nadi c\nps n\nðŁ¥ ī\ncultur ally\nyu v\nmac arthur\nfertili zer\nbe withyou\nri gor\nmin ors\nz oning\nâĸ ł\nri r\nadole scent\nvin ny\nren g\nsand stone\ngu et\nwe sth\nple dged\nlac ed\nsp ide\nv ai\nty coon\nseiz ure\ndu p\nappalach ian\nro k\ncathol ics\nsey chel\nposse ss\nla ger\njo di\ncham p\nstra s\nd ina\ncent uri\ncal der\nblur ay\nðŁĩ¨ðŁĩ ³\nmo do\nan nette\nyoutu bers\nchap s\nang ling\nlabel ing\na qui\npk wy\nly le\nbi sexual\nlit ur\ndug out\nli bby\ngrey sanatomy\nsub stances\naugust us\nrall ying\nfi del\ning ue\näº º\nhallmark channel\ntooth brush\nm á\nadi rond\nag gi\nðŁĵį :\ncru sade\ntax ation\nk z\ni ver\ndou bling\nroom ie\nwa b\nen rolled\naz on\na ju\ngrand children\nas df\nðŁ¥ º\nmat ic\nough ton\nutili ze\nðŁĴ £\npon der\nrais in\ndys function\nco bain\nbutter nut\ne man\nsu red\ndri an\nand friends\nwith the\non omy\nheine ken\nbri dal\nleader ship\npyram ids\ndeutsch land\njo cel\nbo wel\ny qr\nhorse power\nbe acon\ning eni\ngra dient\nfer mented\nmo om\nthing y\npot assi\nwrist band\nbor d\nbo died\nðŁĺŃ ðŁĺį\nma pp\nka u\ncyber punk\nph ish\nloo king\nco ates\nap ur\nam ie\nuk labour\nat in\ng la\nadop table\nshel by\nv illi\nri ya\nm ingly\ncli mber\nbumble bee\nðŁĺ ¸\nc sd\nâĿ ¥\nhospit alized\nc ki\nhat er\nch r\nre tina\nit a\nfan base\nbeat rice\ngwy ne\ngo ss\nfo s\nfavor ited\nswachhb harat\nmal ade\nmon mouth\n" [\nsi van\nsh hh\ncommand ing\nsains burys\nwee d\ng man\nss w\nrep tile\niv y\ntro pics\nroll ers\nover cast\nex position\nmasquer ade\nman crush\nwa ist\nspr inter\nsle et\nle vin\nj pg\n_ (\no pel\nexplo it\nap a\npo we\nwrec king\njong in\nor b\ner ick\nbo sco\npra ising\nber tr\nto wing\nin security\nku t\nresto cked\nrr p\nprescri bed\ntrafal gar\nper t\ng ases\napp rais\ng har\nmusic als\nâĸ¬ âĸ¬\nmc fad\nag ony\nconditi on\nequi p\nshi k\natra vel\nðŁĩ¿ ðŁĩ¦\nke h\nabduc tion\npe oria\nwil kins\ng ms\nas d\nev i\nðŁĴĹ ðŁĴĹðŁĴĹ\nu z\nmo c\nhalle lujah\nguad alu\nlou vre\ndra wing\ngo ve\nph ant\nfri e\nweb dev\nprogram mer\nz able\ngames com\nclari fy\nli th\nkin ky\nâĿ £\nlabour doorstep\nson ata\nju ris\nmai den\nvi adu\nbuch arest\nconditi oned\ncapit alist\nu de\nps b\nsp ca\nlul la\nfooth ills\nkay o\nbon d\nwom b\nroun der\nce sar\nbur sts\nap ra\nsw oon\nsab rin\nfra grant\ncle arer\nku brick\ncli max\njour no\nag le\nðŁı½ âĢįâĻĢï¸ı\npoo ch\nhal e\nsol it\nsal mon\norganis ms\nbron son\nart en\nhodg son\nalo ve\nvent ure\nbb i\nae a\nðŁIJ ¢\nld n\nd nr\no zone\nel las\nman ny\nazz ur\nun beat\ntru ffles\nth ong\nma ñ\nlas ers\nley e\ngettys burg\nback packs\nor is\nma ison\ncraw ling\nla bra\ncl ing\ndra gging\nste al\ndou bt\nde van\nck ers\nagent sof\nphoto bomb\nelon musk\nabo y\ndist ances\nstory line\nsp i\nnor than\neurope ans\nwh ale\nser pent\nðŁļ ²\nfi or\ntr it\nox o\nawar ding\nclass mate\nsu fc\nsmar test\nrich es\npr k\nbig foot\nar mb\nbi polar\ndw elling\nom ars\nk wan\ngri me\nm eng\nfreder ick\nnavar ro\nsorry notsorry\njaredle to\npa ve\nsl ack\nbarn sley\natt ar\nevic tion\naccumul ation\no ir\ncat chy\nwel ter\nvik as\nhas see\nnik ita\nmo yes\nmathe ws\nshi v\ngat wick\npro filing\ncompan ions\nmar rake\nan tics\nðŁĻĮðŁĻĮ ðŁĻĮ\nse se\nbo i\nbart lett\npoison ous\nab uses\nym m\nkam pala\nguggen heim\nimv kohli\ndol om\nbre e\nthro ttle\ngare th\nfitz patrick\nun ya\npar ad\nmar got\nj nr\nwe a\npotassi um\np nc\ndisgu ised\ncra sh\nren ergy\nill ic\ncoup led\nni els\nci ones\næĹ ¥\nim ent\ndespic able\nd ye\nwhat cha\nconne ctions\nparalym pics\ngaunt let\nwait rose\nsuici dal\nstar ship\nvap or\nst ou\nlaw maker\ncoo led\nsi mo\nthen o\noffro ad\nja den\nbas que\nvick y\nlu kaku\ncentr o\ntri sh\nstrate gist\nmedic ations\nhor st\nb fc\ngra il\nsharp ly\nad itya\ntom b\nkau fman\ntri pad\nsam ba\npastor al\nbrit ney\nsag an\nhill side\nmas ons\nsar a\nz one\nx u\nto tes\nrob bie\napp en\nmon tag\nder o\nshort film\ncharis matic\ntat ors\nki ba\nand ri\nal arming\nsplit ting\nic ar\nth ug\nscari est\nsylve ster\nan an\nu trecht\na difference\nme ade\nbu ster\nair strikes\ncu ffs\naccount ants\nðŁĺ¡ ðŁĺ¡\nnew t\nbo tt\nissu ing\ncl ancy\nwwen etwork\nkyu hyun\nrese mble\npajam as\nsin k\nkin ney\nsul ph\nor k\nli es\nla gh\nor ton\nra hul\nd sc\nwe will\nre am\ncollo qui\nshar ia\nhec tic\nsar casm\nland er\ntm z\nendor f\nro z\nham mered\nfri s\nw adi\npope francis\nhe it\nflash light\nun born\nop es\nhol iness\nðŁIJ ¦\nnach t\nim sa\ngr acing\nbj p\nver ts\nc sc\nhome owner\na que\nbigo try\nanni e\nbag h\nâĿ¤ï¸ı ðŁĺį\ncar i\nthom p\ndispo sable\ncardio logy\npat ented\nhh hhhh\nld r\nstephen son\ncro res\nfan ning\ncli mat\nðŁijį ðŁijįðŁijį\nðŁijį ðŁı¼\naer on\npiccad illy\nbank rupt\nsil via\nemplo y\ndon ny\ncommen ting\nscreen writer\nio ta\nce an\nanc ers\ntu an\nstreet wear\nठ¯\nsk ine\nesp a\nasi f\nos ce\nshe ppard\nmore cam\nbott le\nder s\norac le\ngoogle play\naver aged\nedmon ton\nsteph an\nsister hood\ncru sted\nstag gering\nmethodo logy\ncongress woman\nc abo\ntri ggers\nmil ky\ngli de\ntooth paste\nroom mates\nnu ff\ngu am\nsprink les\nalternati ve\nwat fordfc\nuof t\nhal ey\ncont acted\nbun dy\npro stitu\ngh ar\npre ston\non site\nhil ar\ng ts\nc att\nhamp stead\n? ?!\nðŁĩ§ ðŁĩ\nbbc qt\naless andro\nresi st\nma idan\nt ko\nshad ing\npin up\ngal lo\nsin u\nat ec\nfun k\nac lu\nstri des\nrhy me\nwet land\nbbc springwatch\nt ins\nwild card\nst our\nflamen co\npau la\nonto logy\ngang sta\nam ade\nãĤ «\nt bs\nskelet al\nrun ner\njard in\nharri er\nhun ted\nz hen\nbelievein film\nde mean\nau diti\nre start\nchon dri\nâĿ¤ï¸ı ðŁĴĻ\nmcla ren\nga b\nsh um\nau sa\nlewi sham\ny pg\nk jv\nfur nished\ndor o\nbon ded\nmor ty\nlat itude\n_ )\nlo va\nwater ways\nvin ai\nshor th\ndrun k\nc ay\nay ana\nkap lan\ncapp uccino\nspr o\nlife boat\nhas bro\nspol ice\ntor on\ndo ing\ndam n\nsh ree\nfoun tains\nent ation\nmar u\nboar der\nto pless\nj ada\nchan ning\nul ls\nen closure\ngib son\nfractu red\nbrit ton\nà ¶\nt ous\npor th\ndra f\ntra iling\nmar gate\neli fe\ndown ward\nlin n\ngla des\ngirl power\nak rish\nu ki\nron da\nts c\nappreci ationday\nvis ing\nlo om\nðŁį ³\nmex ican\nar gos\ny ya\njad ine\nsouth port\nd end\nsi sta\nrede em\nmen g\nbra xton\nantioxid ant\ns key\nmp g\nfin ding\nvibr ation\nce u\nkh art\ndi mini\ncl ine\nshel ly\nhin es\nī ï¸ı\nto pical\nno ver\nma xx\nprim itive\nillustr ate\nb ounds\ntren ton\njoin tly\nbreed ers\nu chi\nwakeup america\nb ada\nðŁĹ £ï¸ı\ngu acam\nsp heres\npere gr\nyouth ful\nlo lo\nbir min\nt ly\njeremy corbyn\ndefe cts\nco sm\na rent\nv aa\nbag els\nmedi ac\ncori ander\nic ago\ng haz\nab bas\nre model\nstruc turing\npu m\nout law\nad ani\nr bc\ngul ls\nn li\nconfu se\nðŁijĩ ðŁı¼\nvil a\nmcnam ara\ncorrec tions\nmug hal\nser i\nre gain\nss b\nlea ve\nhaha hah\ngran de\ndi stressed\nre chargeable\nho a\nhou sed\nsti l\nattribu ted\nopath ic\ndi ps\npri t\nhead phone\nconclu de\npil o\nhe t\nut sa\nnit in\nje m\nsni ppet\ntutor ing\nop er\nsun k\nen sla\ncha u\nac orn\nquinte ss\nran kin\naffili ated\nour lives\ncl int\nse ater\nisa ac\nba shing\nsme ar\nnur se\ndoo dling\n" ;\nsa ku\natroc ities\nim am\ng fs\nviol ating\ncomm end\nbrad shaw\ner ville\nb illed\nb be\nthul hu\ni phones\nmoo se\ndi os\nre w\nme thane\nstrang ely\nwhis ky\nti ghtly\nspiel berg\nradi us\nnotic ing\nwi f\nig nati\ni fa\nap is\nw ali\nha itian\nbu shes\ny z\nv l\nex ited\nasse l\ntru ec\ndom en\nash er\nin king\nnewyear seve\nhend ricks\nbat i\nìĿ´ ì\nrich ter\nmon santo\ncon line\nagre at\nðŁ¤ ¯\nmaster pieces\nar n\nrough s\ncle ve\nse v\nfashi ons\nto ya\nsh ail\ncop eland\naqu ari\ndec als\nare you\ny aya\na str\nfon t\nml m\nar ca\npp or\npol lock\nxper ia\nconserv ation\nchain saw\nag gie\n?! ?!?\nsi le\nsh on\nìĹ IJ\nnote books\nmarque tte\nde us\nbb led\nspic er\nmc cabe\nnor wich\nmodi fication\nboo sted\nstru m\nsales man\nbang le\nnis san\nhez bollah\nbrea sts\na af\nanth us\nsk er\now ed\nher os\ngi fs\nfo sters\neat ers\ndu es\n_ /\nlymph oma\nsf am\nme gal\nafri di\nag ic\np amp\njeal ousy\nðŁijĮ ðŁı¼\ncalcul ate\nnapp ing\ng ale\nðŁ¦ Ħ\nlub bock\nassu med\nren ting\níĥ ľ\nsubur b\nãĤ ·\ntech nic\nu cla\nin front\ngar net\nster oids\nstri ving\nho war\nmo ver\nle ton\nbull do\nis in\nci ao\nsn z\nfore front\nd ams\nmid wife\nma wards\ncla pton\nwe in\nsubsi dies\nspr oud\nrother ham\nphan tom\nar ach\nspi el\nrac ket\nsel amat\nno on\nl bc\nenti ally\nðŁĴ ¸\nsil ve\nm oud\nkine tic\ny asi\nðŁİ ©\no ol\nmi ku\ni za\nfer a\nflo ren\nbarber shop\ngroo t\nz est\nne ars\nstan is\nz and\npolice man\njuris dic\nform ations\nappar atus\nsp d\narti fact\nto sc\nmotiv ating\nwomanc rush\nre dro\ndiagno stics\nra za\nout fitters\nel xn\ndod gy\nry n\nsh d\northo don\nol de\njay anti\nbal ances\nquic kest\ncan ton\nfriday reads\n! *\nna a\na ak\nðŁĶ ·\nbehavi ors\nrasp berries\nä »\npolit ical\ncam il\nå ľ\ndi k\nast ounding\nlie be\nnovel ty\ntur moil\nsul ly\nspring break\nhon ouring\ncc g\nðŁı Ĵ\nmy little\nky c\npro ms\nðŁķ Ĭ\nà ¨\nbi ge\nav ril\nðŁĩµðŁĩ °\nmari on\nas ants\nsur ya\noc tag\nluf than\nac ron\nfayette ville\nti que\nlove s\nen ca\nde kalb\nta ver\nde vote\naux iliary\njoh annes\ntread mill\nay an\nqu r\ndonald son\ncher yl\n" ....\ns ven\nkir sty\ngun ners\nra dish\no ahu\nv sky\ni ble\ncon course\nb ps\nelo qu\nash ford\nte bow\nroblo x\nma da\ndri ving\nth day\nspro ject\nm ms\nband ed\n. !!\nlibr arians\nflan nel\nintoler ance\nher al\nç µ\nneme sis\nlist a\ntar ak\ncry pt\nstar plus\nvish nu\nsc ale\ncr is\n% ),\nj illian\nregg ae\npegas us\nol in\nip ment\nman ic\nl fc\ngodd ard\nite am\nparl our\nanch ors\nlee minho\ntalla hassee\nant it\nd ho\nkid ney\ny ash\nbatt led\naz ad\ngar is\nfaul kner\nsni ff\npapar azzi\ned m\nphy llis\ncon tested\naa ay\nse ca\nk ton\nvel ve\nrain ier\nfor um\ntam pab\nho sp\ntrac tors\nox fordshire\nno tion\nguang zhou\nðŁĺ ¯\nref ill\nwednesday motivation\nsli der\nmukher jee\npr att\nfon taine\nalph on\naf ar\nts i\npest icides\nfi ends\nmo cking\nbra w\ntran sat\ndo ses\nco res\nhom ophobia\ndocu menting\nzlat an\ncon doms\ns é\nsun set\nkun st\nton ga\nภª\nv ation\nsp ray\nchow der\nra ps\npalla dium\nnor wood\nmusic history\nhoo ker\nsi si\nosp rey\nph ys\nconce ded\nbob cat\nar mad\nze it\nÙ Ħ\nðŁĺģ ðŁĺģ\nmer idi\nðŁĩ· ðŁĩº\ncorn wall\n! ),\ntouch downs\nze it\nchal et\nmm m\nal che\ngor illa\nfo ss\nati ku\nlumin ous\nivan ka\nbe ek\nsta res\nsw iss\nâĿ¤âĿ¤ âĿ¤âĿ¤\nscru bs\nme ath\ngusta v\njo gging\nconfe tti\nas os\ners fc\nbreit bart\napplic able\nautho red\nya ho\nh in\ndisplac ement\nj v\nðŁĮ¹ ðŁĮ¹\not c\nnon profits\ndiec ast\ngu sto\ninte stin\nc ages\nme en\nlu kas\nmoon ey\nðŁĺ ·\nvery day\ntor ah\nis sion\nwa c\nlever aging\nish able\ncu se\nle wood\nmay an\nturn table\nju ice\ntru sty\ntu p\neti quette\nsupervis ors\nstu n\ngu zman\nconfe ren\nric o\nfe ast\nback ward\npol aris\nmic he\njo g\nh ing\nfield house\nvel ing\nsho cker\nesc ence\nठ¾\nvi be\nanasta sia\nmar ched\nkill ing\nĶ ë\nfe tt\nexop lan\n... (\nsnow day\nlo h\nir ani\nla khs\ndel a\npo caly\nboom ers\ndictat orship\nac er\ntur keys\nquarter final\nmuskete ers\nðŁĴĽ ðŁĴļ\nsf x\nmuseum week\nsc ala\nri sis\n( ðŁĵ·\nãĢ Ĥ\nz ies\nbo eh\nhu es\nlu sci\ndol a\nimpeach trump\nroo d\ndon caster\ntor re\nhero es\nfo yer\ntar i\nblur red\nke w\nfrank ly\ndro id\nap al\nÐ ¼\ny af\nbre t\npar agu\ncac ao\nðŁĻĮ ðŁı¾\nru e\nhead aches\nshaw ty\nchar ley\npal er\ngo wns\ncorrec tional\nðŁĺ© ðŁĺ©\nbreaking bad\nol ing\nda p\nendeav our\ncit adel\ntra d\nincumb ent\nmedit ate\nfoo ted\nðŁĴ µ\nshab bat\ndayof the\nwil lem\ngal way\nto red\nmarri age\nf illion\nsleeve less\naud itor\njin young\ninvin cible\nkad una\na and\nvolcan oes\nmon eti\nindie gogo\nbuccane ers\nðŁijī ðŁı½\nãĢ Ĥ\nlay ton\ncuck oo\nhu mber\nbuzz er\nÏ ī\nto re\nstra ins\nsto m\npa ine\ns we\ndu ff\nz ou\nsi mi\nli pp\nur n\nse agu\nðŁĶ ®\nsun dae\nhi c\nðŁĺ ¨\nbull pen\nu per\nflyo ver\nal dridge\nglo bes\nali es\nken zie\nge es\ny cle\nsp lin\nmag enta\nj ha\nbal u\ngh orn\nti pper\nwick er\ntaste of\ncon clave\nch ale\ninv asi\ncat er\ndio xide\nme gab\nwin n\nat p\ntransform ative\nnest led\nhi g\nbri dging\nlil ies\nchee red\nbad dest\nsc rolls\nreal is\ndipl o\nðŁĶ «\nconce ssion\nprefe rences\nexplo des\ner gon\nintroduc tory\nine au\nch af\nsom es\nland rover\nspir ation\nsex y\nsco recard\nillustr ates\nsoul mate\nwi en\ninter disciplinary\nfore casting\nent ities\nglu ed\nen lar\ncur t\npercep tions\nboot leg\nmi re\nasho k\nv az\nhor ne\ncal le\nac ulture\nther oy\nnight time\noc al\ncharacter design\nar mist\nðŁĺı ðŁĺı\nyah oo\nac eae\nto se\neven to\nsou t\nnay anth\nwh om\nv are\nri gging\ngen us\nhi ve\ncom mands\nsti e\nday a\nethan ol\nen f\nhi fi\nflu ence\ncle mson\nre invent\nthermom eter\nhumor ous\nemer ging\naci ón\nðŁĺĺ ðŁĺį\ns ity\nhaw ke\naccompan ying\nt ility\nðŁĺ ª\nre cess\nprotag onist\nl ery\ndun dal\nint l\nbritt any\nq bs\noff the\nmarri ages\nhow to\nviol ated\nadel aide\nwit t\nlanc er\npak v\nhu me\nst ade\nbra gging\nou tright\nad c\nsuper st\nreal time\ncu res\ngarden ers\nero ck\ndale jr\nver o\nbar tol\nmo ti\nmc fly\nv pn\nst ink\nover rated\nguer ra\ne tis\nath ome\ntwd family\nth ab\ntn x\nrafa el\nfamily travel\nx ley\nsat anic\nequ ations\nru dy\nwal dorf\nstan i\ntu be\nmeas les\nzimmer man\nobli gations\ni ously\nbow ser\ntrans former\nsho ppe\nshak en\ngh ouse\nto d\nke tball\nshare holder\nmar ca\nkp mg\nak an\ngiven chy\ncoast al\nau th\nroller coaster\nmar ches\ncoordin ate\ncine ma\napprentic es\npar lor\nmit o\nmen on\nconsider able\nbar re\nglo ss\nenh ances\njaz eera\nfal mouth\nthra sh\nstat en\nk zn\neng el\nsamanth ap\nflo ppy\nsal om\nðŁıĨ ðŁıĨ\nw ack\ndeliber ate\nosc ill\nherit ag\ndu sted\norni thology\npad dle\nfer ns\nbar un\ncl ans\nanticip ate\na ay\nmat ically\né ĩ\ntu mble\npost man\nunic ef\ntro tter\nop d\nleaf let\nge ist\ncease fire\nscre ws\ncre ation\nwal nuts\nlongh orns\nunder statement\nab b\nproxim ity\nna x\nun ity\nturn pike\norda ined\ndub step\nchak ra\nme ch\nlove her\nlook alike\ndonne in\nvir on\nÙ Ī\nbang ers\nvari ants\nout dated\nin ta\ncri sto\nsp elt\nfood and\nf on\nstefan i\nmargin al\nhu tton\nti ara\ntel ford\nqu en\nfair grounds\nque tta\nmikha il\nheal er\nv ball\nty re\nunder grad\ngl end\nhom ers\nscri bed\nmain tains\npo che\nmis sal\nmar ko\nu as\ná n\nsh p\ncon vey\npad re\nsab a\npu glia\nmadhu ri\npa xton\nchap lain\nn ago\nca si\n... !!!\nfli rt\nsal eh\nk are\ndi re\nstam ped\nextre me\nðŁĺĥ ðŁĺĥ\nho ppy\nguadalu pe\nadvant aged\neu char\np low\nun n\nmac qu\nport land\ncla sh\npe s\nlou bout\ny p\nkeep ing\narca dia\nfran kie\nfi u\nde th\nencyclo pedia\nsi ze\ninve sts\nðŁį ©\ngeo logical\nfran ç\ncon front\nðŁĺ ¥\nd ys\naf m\ntex an\ngraph ene\nrepost app\nac f\nur sula\ngaz a\ndd led\nfu m\nwsb tv\nm be\nfron tiers\nchrono graph\nke s\ninter faith\ntab oo\nspar ta\nwon do\nflori st\nem braces\nca w\nno el\narch ers\nðŁIJ ·\nroman o\nban an\nsh akers\nmelo dies\ngeo thermal\nse phora\nìļ °\nоР´\npro c\nhand shake\npan de\npopul ated\nslow down\nhor tons\nregistr ations\nun deni\nlan ts\npas sover\nthak ur\nli ef\nadhe sive\npe tal\nmicro scopy\nmemph is\nconfir ming\nair drop\nmesm er\nperce ived\nming le\nlifel ine\ngh j\nworcester shire\npas sions\nach er\nel lar\nah o\nfiren ze\nbar ang\nletter man\nhat field\nlu cha\nje ter\ne shop\nwilliam s\nhoro scope\npre de\neast bourne\ndur ga\ndi version\nal trin\nseis mic\npremi osm\nnar co\nti r\nori g\nor m\nland fall\nci ous\nlin do\nmax ine\nx ico\ntra y\nos wald\nc ba\nric otta\nn cr\nmar au\nภ²\ngladi ator\nch ery\nlun g\nu me\npo psic\nlon ging\ncan als\nta ya\ndecentr alized\nsho pp\npres sures\nmahar aj\neti had\nwal greens\nsucce ssion\nsign aling\nli g\nstaf fer\nnorth korea\ndef ying\nas ma\nde g\nperi meter\noak ville\nm sk\nbalti more\nrece ip\nde ple\nðŁĺŃ ðŁĺĤ\njambo ree\n> .<\nrsp b\npuni sher\nconsider ably\nin tothe\npari sian\nacceler ated\npolye ster\nlow es\nfr ying\nsauté ed\nmou ths\nseychel les\nra x\ngo dis\ndak ota\nhouse wives\nthe me\nmat inee\nblack bird\nye sung\npre fers\npelle gr\nin ated\ntrun ks\nstronger together\nre pet\nre pairing\nped als\ntoler ant\nher r\ndun ne\nindic ation\ndecat ur\nb tv\nexhibit ors\nik on\nfriday motivation\nbra gg\nlive tweet\nal ves\nwomens art\nforeig ners\nwal lets\nmin dy\nlan ey\nbb in\ntv miaw\nlif ter\ntar get\ntam e\ndr ou\nastro photography\nmp c\ng pu\nnord strom\nfric tion\nrun off\nlov able\nsp nfamily\next ingui\nbloo dy\nsch el\narti stry\nsw ish\nscar ce\nph ils\nmax im\npos sum\ncom promised\nsty li\nsc fc\nis sa\nbirmin gham\nsket ched\nangel ica\nordin ance\nje ts\nconqu er\nðŁĺ IJ\nonline shopping\ns ori\nreason ably\nnue stro\nar turo\nch l\nbenef ici\nspho to\nwel t\nni kk\nðŁ¤ ŀ\ndan ao\nfor mid\nas se\naf irst\nâľ Ĥ\ngil lette\nas sor\nan onym\nsel ca\nfe mi\nbear able\ny and\nar mory\ncre pe\nceltic fc\nbra vo\nin expensive\nde lec\nge cko\nnew market\nsnow flakes\nkab ir\ncon tra\ncan ning\nmor pho\ngar wal\nðŁĴĥ ðŁı»\nfight ing\nmu tation\nwoo dy\nju gg\ngr aces\npremiosm tvmiaw\nkenne dy\ngu p\nsa e\nop ha\noff spring\nfini sher\nbet ts\nspan ning\nmar j\nh one\nsh ing\ncontin ents\nsamanthap rabhu\nun related\nl acy\nexplo sions\nbenjam in\nsophi e\nno ting\nmicro soft\nas sen\na hoy\ni ker\nho fer\nmo e\nah madi\nyan n\nan ak\nma hi\nbe u\naha h\ncreep er\nbaahu bali\nam at\npri ory\nhaw keye\ndeloit te\nsko da\nprint making\nassemb ling\nmirac ulous\nno ch\nsw o\nleg a\noper ates\nborder lands\neli e\nstron gh\nrep tiles\npir ate\nun fold\n ¯\nqual comm\nun predictable\not r\nrose wood\ndirec tional\ncounsel ors\ncorn ell\nliber ated\nj ad\nir regular\nbulgar ian\nhigh ness\nvodaf one\nsw ild\nmini mize\ngra zie\n๠ĩ\nr stats\nstre ep\nome tric\nhumb le\nlu mp\nl ille\nb ü\nhome depot\ntripad visor\nki wan\na via\ner z\nex ico\ndu f\nblu men\nmi zing\nar ma\nin im\ncon stan\nsor a\nju al\nau n\ntw ell\ntren ches\nher a\nr k\npo plar\nrecipe oftheday\nll an\nbhu ban\nshort ages\ning don\nbridge water\nðŁIJ ĺ\nfortn ite\ncam den\nun cture\npro w\ncolon ies\nt ks\nn go\nb hm\nlive pd\nspl ace\nsli ke\nhappye aster\nter rence\nrevol ver\nj ed\nyy yy\noffice of\nm ts\nexist ential\nr ourke\nexplore bc\nsse d\npri est\nvix en\nsi ding\nk pa\na har\nju ic\nob struc\nforen sics\nuk mfg\ncancell ation\nwe ary\nab q\nele c\npri zed\ndeb ts\nme zz\nsalv atore\nm dc\ngre tte\nc gc\nth on\nsnow storm\nts ch\ncook ery\nå ¹\nwa xing\nn acional\nmur s\nra ve\ncap es\nger main\ndri pping\nsub mitting\nome lette\niter ation\naj es\nshim mer\nfu eling\nðŁĩ§ ðŁĩª\nli po\nbo bble\nun follow\nislam ist\nhi ber\ncat s\nagentsof shield\nsen si\n____ _\nster ia\ninst al\nausp icious\nhar row\nover land\nfemini sts\ninst ant\nchar iot\nblind ness\nsp ed\nsc arec\nnu it\nmini atures\nho seok\nglo ck\nfifa worldcup\ne te\ndis m\nwe iner\nex foli\near ts\nภĶ\nmy art\nman il\niss ant\nform a\nin cu\nbuffal ob\nin tim\nmc cul\nanj ali\npo po\nun doub\nhil a\nfun gal\nthank ful\nfu tur\nen dish\nren ds\nth ar\nshe ff\nring o\nnichol ls\nio wa\npo tom\ncl ams\nãģ Ħ\nacon f\nstadi ums\ndi mp\ndi k\nresiden ces\ndo v\ncaric ature\nseagu ll\nkl m\nconfe ss\nsla pped\ncele b\nturb ines\npp v\nnur ture\nel ab\n.... .#\ntu ff\nde press\nal far\namii bo\ndi spon\ne wing\nque er\nfriend s\nfor re\nâĺ ¼\nsw t\naqu arius\nhead liner\ncur d\nfi gs\no tters\nlove fl\nkare em\ngo vegan\nfri yay\nconsol ation\nat ri\nì§ Ħ\nâĺĿ ï¸ı\npoly ne\ngu ed\no ya\nla us\nintestin al\ncam illa\nscal p\npi r\nleed s\nhorri fying\nbore tum\ndand elion\nfer rer\nell ic\nas x\nso ren\nre loaded\nale ague\nnavig ator\nine tte\nadd ams\nal chemist\nak shay\ndystop ian\nawe c\nn aya\nal isa\nai led\nag or\navi ator\nali zer\nsmo bile\nfindyour park\ncop ying\nto ddy\nsh ti\nmon ger\ncal houn\nnap kin\nbreak up\ny atra\nse thu\nric hi\neras mus\nfer ry\nam ore\nprac tise\nbo bo\npower point\noo se\nli ffe\nchin a\nsh ka\nfad navis\ndu ane\nwar on\nfal se\nðŁļ Ĥ\nwa shes\ndisc ip\n==== ====\ng k\nab b\nstub born\nmedi eval\np ci\nðŁį ª\nmaril yn\nh yo\nman di\ncr i\nprede cess\ncontinu ation\nom usic\ns lat\nwh al\nmall ory\nbon n\nshen zhen\nca i\nâĺ ĥ\nsa fest\nfor wards\ndra wers\nbla sted\nsle e\nmor phe\nmb ta\ndumb ass\nÑĦоÑĤ о\nalhamdulil lah\nec lub\nal beit\nheal ey\nayurve da\nadverti sed\ncro cs\nitt les\nbry son\nbe i\nnj pw\nhonore e\nfu sed\nðŁĶ ĺ\nmul tin\nn aga\nde parts\nko p\nkin o\njhar khand\ned na\nax le\nmil ton\nsupremac ist\nmarrake ch\ndomin ic\ntran script\n] [#\n: ).\nwo c\nsur rounds\no gil\nleaf lets\nco well\nwhe w\ntru de\nproli fer\nsucce s\nsports man\ncon dom\npo che\nk up\nimprison ment\n{ }\nscram bled\nå Ľ\nka ine\ncell phone\nmetam or\ncon i\nremn ants\nee z\ndown pour\nafterno on\nexerc ising\nber ser\narchitec ture\nwick low\nm ns\nis p\nbo c\nn iss\nmn wild\nstu mble\nr si\nlu ffy\nsil en\ndd ad\nbul lies\nhaw ker\nbb cc\nscu ba\ne pp\nque ts\nfor aging\npal let\nha di\ncinemato grapher\ncat chers\nto aster\nk hi\nlite coin\nkid lit\namher st\nmaur icio\nip ad\nmar malade\nfe y\ndon nelly\ng to\nest as\ncere bral\nant grasso\nzz led\nvir gil\nswa pped\nðŁĺħ ðŁĺħ\nno dapl\ngreate st\nnhl bruins\nfra ser\nb mo\nane w\n. âĿ¤ï¸ı\nse gregation\nremark ably\nmccor mick\nlo gger\ner as\ncontrac ting\nâłĢ âłĢ\nyor ks\nuku lele\ntouch screen\nde cked\nben n\nsouth wark\nra vin\nnu mis\nðŁ¤ Ļ\nru t\ngre co\neth ic\nred neck\nar r\nt cs\nih ri\nðŁĩ« ðŁĩ·\nl k\ninher ited\nzy k\nviadu ct\nmarty red\nhi gu\nss n\nbe in\nstreet style\nfer gie\nbank of\næĹ ¥\nstake holder\nexempl ary\ncre ss\ness a\nero tica\nintre pid\ngom es\nbra un\nbethan y\nbang tan\npulmon ary\nm illing\ndoctor ate\ntrump russia\nठ°\ns ani\nbl att\npla u\ndepri ved\nt le\nful ly\nbour n\nst ak\nlufthan sa\nkio sk\nfar oo\ndef y\nbad an\nðŁĺĺ âĿ¤ï¸ı\nrit z\ntri sha\nran ds\nmiddle sex\narab s\npro j\nsport scenter\nrepe ats\niv f\nbleed blue\nas sure\no bs\nterrit orial\nele n\nbever ley\nann ah\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ı\nz l\nfor good\nscience fiction\ngla u\nson ya\npri th\nst weets\nmix ers\nmari o\nant elope\nwriting community\nwent z\nden ham\nbe di\nsf o\nharley davidson\nlook book\nimmuno therapy\nor phe\nes ville\ned ged\ntas k\nsb ball\ncorro sion\nkilom eters\nco sting\nplay back\nke ke\ndi visi\nu ter\nre location\nyel led\npen g\nup beat\nser ve\nâļ ł\nhal en\nstir ring\nreh man\nen v\nschu macher\nfrag ment\nalkal ine\nsb k\nresil i\nshare point\nrol lover\ntra sh\ncounter part\nâĻ «\nob itu\nà ½\nãĤ ¹\nmul berry\nðŁİ Ĩ\nauton omy\nspra ying\nnat l\nlove you\nfran ki\nnu k\nesc ar\ncan teen\nali baba\nde plor\nmole cule\npu d\nfort night\nblon die\nsp hin\nportra yal\nta che\nbu te\nconsi sting\nfreep alestine\nc sp\nim mort\nd ns\nðŁĴ¥ ðŁĴ¥\ntour de\ncoo king\narchi val\nga thers\nbit t\nb anc\npre mature\nsnow ball\npoetry day\nlou dly\nfug itive\ned ay\nem ra\nðŁĩ¸ ðŁĩª\nsci en\nnode js\njur gen\nje ong\nband ana\nun is\nfox sports\nv andy\npro visions\nwee p\ntu k\ni ko\nh oun\nzig gy\nz r\nfil let\nbat a\ntin k\ncon e\nwe want\nk ilo\nhor ace\nsl t\nsc t\nstay tuned\nvictor ia\numb ria\natt acker\ningham shire\nfright ening\nno ir\nfr at\ncon tempt\nlia ison\nho i\nbr ink\ntr ill\nni agar\nkick ass\ndun das\nnot my\nrho de\nbu mble\nno xi\nfa g\nspec tators\nmancrush monday\njin ping\ndistr act\ndais y\nwal den\nportra it\nar thistory\nvol tron\nev el\nis c\nac m\nr ite\nna o\nde ported\nswe ats\nru fus\nlo bo\nlabor day\ngam o\nihri thik\nbl it\nabdomin al\nãħ¤ãħ¤ ãħ¤ãħ¤\ni it\ne q\nbu sy\nallu arjun\nun disclosed\nde ton\npro create\nki l\nðŁİĤ ðŁİĤ\nmitch ell\nki i\ninherit ance\nal p\njo burg\npat rolling\ncompul sory\nun signed\nni am\nl ga\neshop suk\ntr illi\nma w\nappreci ating\nrock ab\nmañ ana\nan tal\nmal vern\nroy o\ngrand prix\nsut ton\ngo ftheday\ndig i\nãħĭãħĭ ãħĭãħĭ\nt les\nvaran asi\nerec ted\ndiscip les\ncont act\nðŁĺ µ\nli d\n⬠ĩ\nscen tre\nradi ator\ning tips\ntrans itions\nthursday motivation\nchem ical\nsepar ati\nsal is\nmi m\ngeo graphical\nbook fest\n/ .\nâľ ĭ\nv ae\ncur rie\nag garwal\nacceler ation\nthe ses\nlg m\nu mass\npro portions\nnat a\nani ans\nku ch\nbe acons\nap r\n@ #\nðŁĴª ðŁı¾\nnu ke\nsher aton\nki o\nma kati\npolit ico\nmor ale\nì Ļ\neconom ically\ngg ly\nss en\npa stries\nintern ships\nvic ente\nfanta ken\naveng ers\naccu se\nslee pover\nindic ated\nthe dream\nster one\nren ders\nfro st\nou i\ngre gg\nd ore\n⾨ ⾨⾨\npu gs\nsat y\nnu mb\nhems worth\ntam i\nla ssic\nschi ff\nigle sias\nag awa\n] "\nre shi\ngame stop\ndivor ced\ntheat er\nclau di\nun conventional\nprophe ts\nac in\ntwel f\ntow ering\nt ml\nsc lerosis\nk wan\nge ts\ndistur b\nna ira\nener g\npir acy\npru itt\nnoti fied\nhen na\nbra m\nground water\nbl s\nopti mis\n$ )\nluci e\nbiz hour\nfang irling\ngr ills\nor l\nver se\nc ina\nlaw less\nartistson twitter\ntele vised\nmarshmal lows\nradio head\nbar r\nm fc\nbre vi\nmmor pg\ng aya\nâĸ «\nsub titles\nj t\ndisney land\nto bago\nnh m\ngroo ve\nfi awec\n" /\nba o\nscra bble\nom ni\nff l\num c\nsi mba\nali er\nter rell\nplu me\nmi di\ndig nit\nco c\nbru t\nad ata\nalche my\nd sm\nðŁĺĨ ðŁĺĨ\nwin try\nspa res\ncu er\nconclu sions\nto ys\nod or\nfl ann\ngar vey\nscrip tions\ninspec tions\ncat ap\nang lo\nst louis\nheim er\nat ay\ntr ich\nen yc\nchil ds\nvent il\nmont p\nguiller mo\ncircu lare\nz ell\nmode led\ncraf tsman\nal ina\nstimul ation\ncashe w\nju das\nbest of\nto ire\nsusp ends\nscol lege\nreal ising\nby tes\nbloo ds\nas si\nðŁĴ ¿\no hs\nðŁį ĭ\nscallo p\nठµ\ngi fting\ncamo gie\nwil kes\no zzy\nðŁ¤ ¤\nver onic\nsav oy\ndeme tri\nbaby girl\nðŁĺį ðŁĺŃ\nso x\ncly de\ninduc tee\ncount down\nself care\nठľ\nvi ka\ntor re\nphd chat\npe ars\naw h\nsuff rage\nle sn\nadmir ation\nmp p\nshark week\nschul z\nsantor ini\nclo ver\n( *\nstras bourg\nex iting\nso yu\nfinger print\nche a\nãĢ ľ\nvin dic\nsong writers\nso a\nprou der\nnam a\n= ))\nsimple st\ndelici ously\ngil les\nu q\nmn wx\nep p\nsh un\nken nel\nfall on\nðŁIJ £\nsin d\ntra gically\nout es\nmodern ism\nco ke\ngy n\nspi on\nâĺ¹ ï¸ı\nle am\ncompress or\napolog ise\ntwent yon\nfan atics\nâĻ »\nsco tsman\nsa wa\nko u\nas er\nภļ\nwelter weight\nphen om\ntwick enham\nstri a\np out\nka z\ngi am\ncd p\nho y\nemplo y\nred mond\nภĦà¸\nsm ere\ntrance family\nproto cols\npie ce\nlu iz\niter acy\ncarl s\nunited states\nhar med\nphd life\nch aw\nfoot prints\nl é\ncho ker\nz ana\nsli pper\neric sson\ninsul ting\narticho ke\nadvis ing\nacquis itions\nop or\nmut ations\nre ar\nॠģ\npod cast\nwi ther\nkun g\níĺ ¸\nwin slow\ndi apers\nðŁĵ¸ @\nec ker\ncol lar\nhu ey\ngi ro\nmono gram\nkas ich\nsi veness\nmalay si\narom atic\ngre s\ngali leo\nu ji\nrob b\ndr m\nnone theless\nas a\n: >\nlo a\nl np\nat work\nag t\nlaksh mi\npipel ines\nid al\nstre l\nre all\nchain z\nstone wall\nsan sk\nðŁı ´\npied mont\nhoste ss\nci u\nt é\nanaly ses\nwil helm\nscott y\nrw by\nmosqu it\nuse mb\nqu ins\nðŁij İ\ntu cker\ns conf\nspeci fications\npsychi atry\nbroo kes\ns ils\nol af\nde to\nco di\ncli p\nfil th\nwomancrush wednesday\ngo to\nang erous\nbe ale\nw tc\npaneli st\nne x\nlar sen\nemili o\ntab leau\nh itters\nconce ived\nameric ani\nor tega\nmar di\nÑ ĥ\npain tball\nthir sty\nnew yorker\netis ation\ngo ss\nwe aker\nu gh\ntro ll\nhar ga\ndu al\nght ning\nat ine\nðŁĺİ ðŁĺİðŁĺİ\ncook out\npyrene es\npo ss\nauthent ication\nsports wear\nyun ho\nkir o\narchi pel\nshen ko\nren der\nnov ation\ndivin ity\nðŁij £\nsu fi\nhumb ling\nge opol\ndevote es\nwait ress\ntr ough\npy ro\ni ba\nbl ing\ngra f\nepilo ts\nbt r\nof tball\nbas king\ndomin os\nso om\nr ath\nsher yl\nqu el\nastronom ical\nwel d\ntrack list\nsig nee\nslee pless\ncom man\nch ron\nsumm on\npure michigan\ncri spr\nsli p\nla gi\nra q\num u\nthal ap\nchar med\nscru mp\nquad copter\nski p\npeter sen\nmun i\nðŁĮ ¾\nmon aghan\ntra ys\nick ed\ncanad aday\nte gr\nï¿ ½\nhot ness\nheavy metal\nab ar\ngop debate\naz ul\nspider man\nsun flowers\nľ ë\nweb comics\nbar d\nÐ ²\nnichol as\nslu sh\nram an\nmark ham\nffici al\nff ler\níĬ ¸\nple ss\nanush ka\nto to\nsk aters\npro wrestling\ncompet es\nay ala\nmyster y\nthr ills\nmp g\nindepend ently\ny ul\nimper ative\nformid able\ntire less\nst acking\nton gues\nmal tese\npot ts\nmat ti\nchar ting\nchill out\nsuper nova\nome o\nsky sports\nnu tty\nðŁĹĵ ï¸ı\nro han\ninsp ired\nconcier ge\nser ra\nma kk\ngal at\nchi pp\nye v\nì £\nreim bur\nop ul\nkimber ley\ni eee\nbre men\nch itec\nor in\nnak u\nbon kers\nfoo ty\nemer gence\nðŁĨ ĺ\nsti p\nserge i\nzo ey\nai me\nwou ld\ndy es\ndestin y\nvinai grette\ndri er\ncirculare conomy\nan archi\nss r\nsch el\ncin er\ngro om\ndetermin ing\ngar min\ncal ais\nincarcer ation\nbu kit\nno i\nchelms ford\nmckin ley\nchi pped\nbelong ed\ntu mors\nstr oud\nmi i\ninfluen za\nwwen xt\ntun dra\ntele communications\ncat sofinstagram\nt ages\nbeat ty\no du\nml kday\noo per\ndang le\nak ley\ncru mb\nanti gua\nti mbers\nrou hani\nðŁĴª ðŁĴªðŁĴª\nha fi\n... !!\nw cs\ncoo p\nsn c\nlit res\nãĢ Ĭ\nha z\nco z\nk ant\ngreen field\ncur ti\ny ale\nflye agles\nwhat soever\nwor thing\nrou lette\nflyeagles fly\nun da\na inted\nstand ing\nlusci ous\nh pc\neffic acy\nash land\nme ghan\nky wx\nn pr\nbath tub\nac os\nh ani\nmar cor\nman tis\nda isi\nbo ba\nab bie\nmu til\nvi al\nspy der\npo z\ng ti\nel fie\nnigh tw\nmetro id\nanton i\nmad die\ndh ry\ndar lings\nten ds\ntaek wondo\natlan ta\nme ow\nchlo e\nãĥ İ\nym es\nsiber ia\nk con\ngu es\nmar iner\nfac il\nazz le\n[ ...\nhan nover\nbav aria\nvir go\nte uk\nu sps\n) #\nwall a\nsam pson\nneed less\nver bally\nhay ley\nbow led\npi us\nlam pard\nham string\nvol vo\nroad safety\ncho king\nsor bet\na hem\nhealthy food\nbrai ded\nhorticul ture\ncr ative\nche ek\nad do\nthe force\nko ko\nschiz oph\nj ie\nw ada\ntwentyon epilots\nh bcu\npro ton\npau ls\nlou isa\nlat am\nkyr gy\ncom pac\nsd k\nsap i\n?? ?\nliber alism\nep silon\nai den\nw usa\nspra yed\nbaske tball\nkim ono\nblue wave\nali as\në§ Ī\nmug shot\nce c\ndo gre\nad ora\nðŁĵ· @\nkra kow\nintrigu ed\nexhau sting\nastron omer\nven ison\nlady bug\nci v\nbra e\nus m\nbri be\nacup uncture\npembro ke\nke ating\nchi e\ny ad\nt si\nsm i\nsee ding\ngate shead\nlis boa\ngy p\ncanv ass\nðŁĶ´ âļªï¸ı\nop i\nni r\nsoci etal\nly te\nati es\nc sm\nar tery\nal in\naka poor\nabstr acts\nâĢ¦ âĢ¦\nteen wolf\nne we\ntravel gram\nsentim ental\nper ched\nhan del\nho ek\nf ay\ncoordin ating\nanim ate\nman ian\neffor t\njer ky\nf ck\nadri enne\nma bly\ntra ding\nmy el\nspi ro\nsol a\nstor ing\nover drive\nmonday morning\ndream team\npul se\nbon di\nber nie\npgat our\ntri poli\nson am\nplat t\nâļ ¡\nag roup\nîIJ Ĵ\ninv ading\nv cu\nk ell\nñ os\nun dead\npod casting\nmercede sam\nmana fort\ncor tex\nque so\nimpecc able\npal mer\nwil doz\nsport sc\nguacam ole\ndispen ser\ncate gori\nstun ts\nper il\ninvit ations\ndune din\nxi e\nachi eves\nsaf er\npre ds\nph an\nknuck les\nk ak\nigno res\nlovemy job\naru ba\nound ation\ndatac enter\nco vert\ngr ing\ncou ple\nا ر\nvol i\nmc cle\narti sans\nlu do\nkal am\narom a\nunder taker\nhu la\nwiz kid\ngu mb\ngod frey\nbakers field\nker n\nengine er\ncar ve\npal in\nguaran tees\npe bbles\nb ays\nzi eg\nfin k\nâ¬ĩï¸ı â¬ĩï¸ı\ndown pours\nro chelle\nrasp berry\nðŁĺ ®\ngra phies\nstom p\ncaf es\nari zed\nutt ar\ncal vary\ndri e\ncrusad er\nbus an\ntux edo\nsi u\nseam us\ncul tured\nblan chard\ntown house\nge red\nbutter milk\nflu ctu\nroger federer\nhel i\nðŁ¦ ĥ\nu ous\nram esh\nmu ppets\nemail marketing\nye ss\nbr ice\nri zio\npel o\ndonnein arte\nu rable\ninve stin\nbump ing\nraji v\nsav a\nthro wer\nfore x\no hhhh\nth rust\npull man\nr fid\nsep sis\nle ed\nfri ght\nroun ding\nne b\nph ins\nai sha\nutili zing\nsqu ats\ngold smith\nj ic\nbo ks\nvau s\ni po\nexclu sion\ntari ff\npo kes\nmin al\nland s\nen force\nwashington dc\nor char\ng x\nmar ys\ney our\naussi e\nbak ers\nun popular\nlatin os\nlar ge\npu tnam\nbol o\nwa de\npel o\ndi zz\nob struction\nfla ppy\nweare the\ndepend ence\npajam a\ne te\ny ann\ne wan\ndisc la\na ay\nkar ina\ne ic\nan trim\nw soc\nneg atively\nkai do\nfotogra fia\ndh ru\ncolo ssal\nmcle od\nk wang\nmani pu\nex hilar\nus atoday\nsummer slam\nco les\ntapro om\nunbeat able\nde ma\ntic ks\nk ling\nfil s\ncampaig ners\nภķ\nbrew ster\naudu bon\nqu ay\nch s\nki gali\nd ler\nstrength ens\nsom al\nsign ingday\ngol ds\npig ment\norche stral\ng q\nlin kin\nðŁı ĩ\nta w\nalgar ve\nho v\near le\ngold fish\nam ig\nex er\nben in\ndru id\nðŁIJ ¸\nshe m\nquat tro\nmer cen\nmen te\nincorpor ating\nbon anza\nstate fair\nen de\nconcep tions\ne es\nâĻ¥ï¸ı âĻ¥ï¸ı\nd son\nfire arm\norb ital\nwe h\nmulti p\nfo b\nrequi em\np light\nthou se\nsa id\noc re\nremem brance\nn old\nchi pping\nbe v\ner t\nca thy\nsy m\nri ggs\nm ley\ndialo gues\nsl ender\nhow l\ngau teng\nwd w\nto bi\nsmo kes\nim plo\nb pm\nad n\nmom basa\ncap sul\nbloom field\nartic ul\ncle o\ngoog led\nflu ffy\nl ard\nen zyme\nve sti\nibra hi\nfl ame\ne mea\nout ages\ndispro por\nble ak\nan sel\nick er\nst louis\nstock market\ngood friday\nsau lt\nstal led\npro m\nep som\nb é\nthe se\nsau ces\nme w\nlit fest\npre d\nre u\nkar ak\nsi enna\nell in\nbio technology\nï¸ıâĥ£ -\ntac tic\nsa in\npor k\nmon za\nka j\nlu sh\ncompart ment\nchang ing\nshraddha kapoor\nfo al\nar tem\ncu ando\ncan ola\nori ente\nme sse\nd ited\nbr c\nbox er\nbbc two\ns st\nment day\nem ing\nde wey\nkof i\nâŀĸâŀĸ âŀĸâŀĸ\nreali zation\nsmo l\ntw ood\nsan je\nflag staff\nber wick\ncor set\ncan ary\nwhistle blower\net ched\ncom posing\nsquee zed\nbow er\nauto desk\nne h\nmathi eu\nba ja\nÅ Ĥ\nhy dra\nda im\nam eri\ninsi sted\nmer lot\ngar ros\nheart news\ngaine sville\ncut ler\nbo de\nðŁĺī ðŁĺī\nlew es\nscoun try\ng sa\nus u\ncc m\ngod awgs\nphara oh\ncra e\nmor ley\nhyp noti\nf ades\nneur ons\nfu zz\ning co\nhigh landers\nstar k\nvig ne\npac kets\namar illo\nreu ben\ninsul ts\nbas ic\nvec tor\nn me\nac ruz\ntro s\ntransm itter\nðŁĺ ŀ\ninterpre t\nðŁĺ ²\npre quel\nmc gowan\ndis semin\nðŁĴĺ ðŁĴĺ\nmascul inity\nindie gamedev\nali ve\nte t\npe tal\nema iled\nar med\nko o\nhe er\nba ird\nsuper junior\nmetro polis\ndelav in\ndecl ines\nstit utes\nÛ ģ\np tbo\ng lan\ncho res\ne aling\nchri ssy\nste mc\nvi an\nassassin ated\npron ounce\nilleg als\ndiscover y\ncav ill\nfri fotos\nf al\nso i\nsabot age\nt int\np dc\nðŁİīðŁİ Ī\nãĤ Ĭãģ\nji o\nendeav or\nin sig\ncommit tees\nshe arer\nme tz\nmar rying\nh dd\ng by\nfre t\ntri sh\npu l\nscrip ted\nsa ki\nl w\nke ye\nshim i\nnan aimo\nca h\nà «\ntem pered\nici an\ndu gg\ndish washer\nair field\ns rugby\ngr inch\ny st\nr ms\nmahat ma\nlan kan\ndisc ar\ndige stion\nno des\nl ls\nom ic\ngu tter\ntis garh\nfeder ico\nelection day\nbo he\nmaster card\nfire ball\nâľ Ķï¸ı\noy ster\np ong\ndo k\nen route\nm vc\nbeat the\nali stair\nshu b\nsh aming\ncherno byl\nghi bli\nthe s\npin ion\nd bs\nsal ts\nic tion\nepi ph\nnc pol\nin convenience\nwhit ley\ninspec ting\nwood ley\nwi ener\nskil let\nno les\nm ca\nh ina\na sha\nwilling ness\nwell ness\ntam ed\nshow time\ndis advantaged\nber nat\nus n\nmission aries\ncoun selling\narrog ant\nquant itative\nleg alization\nho dge\nenergye fficiency\ncameron dallas\npos sessions\np bb\nharris burg\nv g\nhindu ism\nhappy thanksgiving\nfi b\nre acting\ntweeta picture\npol iti\nmu ppet\nhur rah\npac e\ncoast guard\nguar ded\nas am\npar ry\nfore very\nx q\noom f\nke anu\nj ind\nri st\ncustomer service\nsac red\nðŁĺ º\nton er\noccur rence\nmat u\nval dez\nred d\nis ak\npower rangers\npe asant\nraj ini\nabra ham\ne mil\ncar do\ntr il\nhair styles\nobsole te\nsam pler\ndirec tive\ndelavin kisses\nver ton\nglo s\nsp ay\npaler mo\ncom ets\nman ziel\nchicag of\nski pped\npic torial\nh ant\nb mi\na ol\nre opens\npad dling\ndevo s\nfra ud\nbas eline\nque ues\nsp ired\nsn are\neu ve\ndescri ptions\ndaisi es\nca ching\ngall eria\ntri mmed\nstin o\nrecy cla\nic ular\nbir ken\nraw lings\nfli x\nchic as\nb gt\nlik eli\nargy ll\nthel ove\nga ston\nbl anca\nha k\nf one\nsailor moon\nh aci\nima c\nfl yn\nde can\nbel les\nap ic\nzo g\ntaun ton\ncon stance\nlasag na\nker nel\nin ka\nhar bor\ncollec tively\ncalcul ated\nav ille\nshil pa\npur du\ngi mm\nfun er\na est\npembroke shire\nnighting ale\nn unes\nhyper tension\nhu bert\nsli ders\ninfer tility\ncomm ended\ntransat lantic\nmetr ical\n!! @\nÅ Ł\nss g\nbac ca\ninver ted\nfun factfriday\nit ans\nalbu m\nacqu ainted\nri er\nwhel an\nsar ab\nmu e\nsnoo ze\npi ff\nagre eing\nsp itting\njer maine\nn ye\nâľı ï¸ı\nam bush\nze ph\ncon greg\nunivers ity\ns app\nwann abe\npat rice\nib d\ndo glo\nfri dges\nsun d\nking ston\nar gon\nkam en\nhardro ck\nds ley\ndo lores\nì °\nota ku\npi ping\nbe having\nâŃIJï¸ıâŃIJï¸ı âŃIJï¸ı\nblue bird\nan sari\nteapo t\nfire work\ncro p\nlog ans\nty ped\nthick ness\nig ers\nc fp\ndys functional\ncontra sting\net ty\naston martin\ntx st\ndra grace\nat tributes\nmarath on\nmanu scripts\njohn stone\nðŁĺ± ðŁĺ±\nbo er\nay u\naru gula\npoo rest\ncon du\nassu mption\nanag h\nno h\ndelav in\nsit ter\ng ö\nmor ow\nkick start\ncom i\ngl acial\nghe ad\nba in\nker shaw\nen dof\nfre ud\nom at\ni af\nhu g\nsign up\neach other\ndefin ite\ntu bing\nshak ira\nðŁijı ðŁı½\nuu uu\nsw in\nsham bles\nol as\nsk ell\nbrit ain\nkn w\nclu tter\nom y\nj ens\nhang ed\ncity scape\nscra ps\nun locking\ndead liest\ner no\nbreast cancer\na it\ninspec t\nfu ri\nðŁĴ Į\nku d\nju le\nor ah\nmi ds\nm dt\nbur gring\nr attle\npu sa\nstal k\ncle ans\niss ance\nz ek\nworth it\nnam eis\nmusko ka\ncouncil man\nurban art\nbar rac\nun solved\ntu l\ng ita\nwhite board\nsoy beans\nem ent\ncont i\nsaturday motivation\nconveni ently\ndoc king\nt ado\nâı ©\nsp ino\npuppy love\npo f\nfabric ated\nrobb ers\nadop ts\nti fied\nkk r\nindulg ence\nnotic eable\nmacqu arie\nchap el\nsensu al\nki ko\nmelan oma\nlore tta\nli ance\nab en\nsp lus\nga al\nac ele\nlib dems\ncompar isons\nðŁĮ µ\nrhy thms\nmer y\nen capsul\nnap ier\nðŁijĮ ðŁijĮðŁijĮ\nðŁij IJ\nplat z\nfre sno\nre formed\nran bir\nel it\nthe best\nbhu shan\nvin nie\nimpro vised\ns ittin\nre created\ne ba\nec ker\nac rob\npon te\ncor d\ngi ddy\neur usd\nfe ver\nintu ition\ngar i\ndum mies\nbud weiser\namend ments\nte tra\nsch nit\nay as\nmar ys\nci st\nk ani\nker mit\nðŁĺ±ðŁĺ± ðŁĺ±\ntin ker\nstrol ling\ndi visional\nniger i\nomin ous\nmenstru al\nkar ab\nk hy\nbw fc\npan handle\nl illi\nwell er\nstra pped\nson the\ntransfer ring\nethe real\nsne aks\nru dol\ngab les\njac king\ncin code\nfor tune\ncanadi ens\ncon for\nab normal\nfrank lin\ntit a\nmu la\npersi st\ncu ties\nki el\nðŁĩ± ðŁĩ\nher mann\naw k\nfi asco\nko to\nwe ta\nhi ker\nbudd y\npreven tive\nmcgra w\ngame boy\nforsy th\ntop shop\nsi ob\nsad h\nin tram\nfollow art\nso aps\ndragon ball\nou x\nmorri son\n๠ĥ\nlu bric\nadul thood\nmorri sons\nâļ łï¸ı\nher mo\nta ka\nstall one\nmis use\nteam gb\nra gha\ncon fined\nat y\nhom ophobic\nnw o\nsky news\nho ya\nac rosse\nwi iu\npur ée\njed dah\nðŁ¤ §\nadvis ers\nph ine\nan is\nscrump tious\në° ķ\nc ke\nvin y\nter m\ns dc\no do\nhome school\nvas c\nleop ards\ndebor ah\nillic it\ncur ran\nas roma\nnau ght\nmar ig\nbrand i\nem p\nðŁĺį ðŁijĮ\nî Į\nsu spend\nlu z\niniti ation\nsch aft\njensen ackles\ncraw ler\npost doc\ndes ks\ntrail blazer\nden omin\ntri x\nno ise\npo et\n± ï¸ı\ns mug\nvol atile\nproof s\npharmac ist\nsardin ia\nmash able\nkim chi\nco ed\nschal ke\ndoo dled\nc sw\nsh ur\nro x\ndo k\nchris brown\nmathemat ician\nab ound\nang elic\nrock ford\nd ole\nyor kers\nms n\ng man\nxavi er\nbor rowing\nmark ings\nlongh orn\nk ja\ndiver ted\nmm it\neuph oria\nay yy\nte a\npa h\nck i\nun cut\nli ven\nky ung\nfan art\nmer ing\nred ding\namo vie\ngri di\nc thulhu\nschol arly\nju dah\nth bewithyou\neu calyp\nðŁIJ ķ\nhert fordshire\ncour troom\nby u\nauc tioned\nple ase\nmar cia\nê° ĵ\nsucce eded\nel as\narvin d\nt lot\nsaig on\nre tt\nra kesh\nfd ny\nas en\nse bring\ngladi ators\nyou know\nv lad\ngol a\npar ap\nÑĢ и\nsab cnews\none team\noh l\nsun e\nri j\ncd c\nstar gate\nrun down\nplat o\nph c\nchat ter\nra viol\nmn f\nmand ala\nli et\nภķ\nmari a\nhun gover\nconsoli dation\nfer rell\ntradition al\nilove art\ngal ap\nðŁı Į\nque zon\nespa ña\nðŁĩ¨ðŁĩ Ń\nho bby\nsteam boat\nmali gn\nguil lau\npro hi\nits me\níĥ Ģ\nin scription\nal z\nmari an\nk ade\nmm on\nadju sting\nne sts\nintern ally\nci r\nvik ram\nmal ala\nk ph\nfel icia\nthe real\ncap tivity\nat is\nmarcor ubio\nkale ido\nche v\nmano j\nle more\ngent ri\nvi ps\ntro pe\n" âĢĶ\npair ings\nmal nutrition\nfr ay\ndesig nation\nbrun omars\naz e\ntor rential\npan zer\nga il\nunder the\nthe ological\nschizoph re\ndazz le\nfreder ic\nmo par\nad illa\nso ggy\nra un\nmedi ocre\ncolo rec\ni fe\np inst\nblu ef\n ²\nworld water\ngir oud\nclar inet\nad olf\ntar antino\nreceip ts\nassu mp\nðŁij Ł\ncoffe es\nâľĬ ðŁı¾\ndu plex\ns of\nr x\nlin o\ntimber wolves\npan dit\nmo tm\ne ga\nay ama\nach s\noutsi der\nll en\nco er\ntil ly\ncheese burger\nma ds\nple dis\nemp ty\nnational parks\naz iz\np mi\njun kies\nf ener\nsq n\nè s\ngener ation\ncleop atra\nbhuban es\nmosqu es\nty free\npopp ins\ntw c\nor well\nn age\nka whi\nhol low\ndal ai\n¨¨ ¨¨\nou ro\nm health\ngi on\naz o\nvis as\nreneg ade\nre ic\nw sop\nðŁĴļ ðŁĴĽ\ne chel\ntox icity\nmü n\nbun k\nstimul ating\nasth our\n\\ \'\nep h\nende mic\ncn bc\nshrin king\npeabo dy\nmichel angelo\ncan yon\nwal e\nsu mi\nsi ders\ninu it\n? .\nprofession alism\ndr acing\nplat oon\np ons\nout bound\nmaple leafs\nde sol\ncen cy\na than\nver ma\nru bbing\nok an\nðŁij ł\nmull ins\nauthent ic\nÅ į\nalman ac\nga ia\nbb q\non imo\nke h\nty a\ntou ts\ny av\nre posit\n, .\nwi ght\nse eyou\ncal lof\ndone sia\nbar gaining\ngr anth\nsd su\namphi theater\np su\nre watching\nwine tasting\npeak district\ndete cting\nthur man\nphe e\nèª ķ\nu mich\nre r\nsculp ted\ngo le\nname sake\nðŁĶ ģ\nserv icing\nbau gh\npu gh\npen cil\ndar th\nmunch kin\nat orium\nten ers\nsun y\nrolling stones\nmag ing\nstar rer\ni dris\nfe instein\nag ron\nâĺºï¸ı âĺºï¸ı\nsupervis ed\nchamele on\naggre gate\nsucce ssive\nmo gul\ninst yle\npol dark\ncustom e\nohio state\nha ya\nci des\nbroker age\nangel ou\nfifa wwc\nde forestation\nal ton\npam ph\nhu gged\nho bo\nchange able\nku ber\nbur roughs\ndemon etisation\ncape cod\nvers atility\nor ice\nle ila\nwomenin science\ntu a\nhe dges\nembarrass ment\nali fe\nso ars\nni ghter\nhy mn\ngi pp\nchas u\ntech s\nni all\nk illa\nhi ka\ncam els\nvalu e\n ¢\nsc oops\nmah moud\nclu sive\nadri ana\npac o\noz il\nun as\ntransl ations\nwhispe rer\ns bi\nbu xton\nbio tics\nindi ffe\nken ney\nk lar\net ching\nbarra best\ninst ability\nse ine\nvo tel\nblo gged\nwhis key\nmy space\nt ant\nlan dia\ngive back\nillu s\naw ak\nac ab\nf bloggers\ncloud computing\nblat ant\nsyri ans\nband ra\nsty n\nan em\nke ted\nkar thik\nbarun sob\npin ot\ngu bernat\ngay e\narti ste\ni fied\nconven tions\nhu an\ngeni uses\neeee ee\nfol ly\nsomer ville\npride month\nðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸\nchemo therapy\npaul s\nbak ar\nìĦ¸ë¸ IJ\ntaiwan ese\nfol lo\nc ss\nre ign\nnn nn\nfla un\ncatastro phe\niti es\nfrag ments\nextre mists\nym oun\ncar men\neze kiel\nconne cting\nse h\nman ta\nremodel ing\nwe ymouth\nat oms\nce m\nne well\nlu mi\nthe open\nmo c\nmili band\ng land\nz shq\nmag gie\nmani acs\nm sp\nad y\ncre ams\nle anne\ne sta\npy g\naf finity\npray er\ndun bar\nligh troom\nac adi\nwyn onna\nroman tic\nstate dept\nsick le\nwh os\nlam o\net our\nfin ity\nshru b\nshar pen\npun dit\ned on\naf ore\nmar s\njeff ery\nter ps\nmedal list\nkath arine\naccu sing\nta z\nroy d\nfrom home\nconfron tation\nalle gh\nðŁijī ðŁijī\nrefresh er\nran veer\nnever land\njo jo\nlu crative\nen am\nca ver\npa edi\nman jaro\nflu ids\nthe ssal\noppre ssed\nmu ss\njoh anna\nØ ®\ncn g\nbuil dthe\nsett les\ns ith\nfu ego\ncl amp\nar ag\npay er\nted x\nmand y\ninter stellar\nfr c\nch and\nb cc\nmo lo\nlen til\njohan sson\ngrims by\nnature lovers\nðŁļ¨ ðŁļ¨ðŁļ¨\nshin de\nx in\ninternational dayof\ntransiti onal\nsat a\ncad dy\nwo d\nif u\nha ys\nholl yo\nj ang\nir c\nco im\ngrad able\n" "\nðŁį ´\nঠ¾\na el\nn yo\nwest lake\ntime out\nsof i\nphenom ena\ncultiv ation\nag no\nun armed\nso t\ncon j\ngen o\nroyal navy\nnutriti on\nfair mont\nti relessly\nsn g\nre ty\nmic a\nlu cent\nslo ane\ndroo l\nriz al\nod ell\ncritici zed\n. \'"\nla ze\ndeser ted\nco der\npra s\nl illian\nitiner ary\ndav y\nan ap\nwhi pping\nhobo ken\nkare ena\nçľ Ł\nvi us\nter n\nnan tucket\nmis understood\nbu laga\nst ant\nchin ook\nz am\nreli es\nd ss\ned mond\nsket chy\nm ell\nfe x\nrec tor\ndist ill\nday dream\nwine maker\nri pley\nbillion aires\nhel ene\nati f\ncul prit\nbertr and\nwou ldnt\nma pped\nv ak\ngla dly\nparliam ent\nkidlit art\nware ness\ngoli ath\nâĨ ĵ\nview point\ntat ted\nfu ls\ndor sey\nang lers\nli ds\nki ya\nbow les\nbe h\nb ite\ncompati bility\nance stral\npro x\nbeha ved\ngubernat orial\nch field\nsab an\nz h\nteen y\nshibu ya\nholli day\npan cy\nâĿĦï¸ı âĿĦï¸ı\nseun gri\n? ,\nðŁĩ¦ ðŁĩ·\nim itation\nimpac tful\nany i\ngene vie\nañ os\nbate man\ngli der\naf ar\nra sheed\neffor tless\nsh war\ndach sh\ner un\nat os\nkin i\nch d\nkha ki\nk lin\nfelici dades\nbel o\nas l\nto ppers\nfin ley\nstac ey\nrigor ous\nkar ting\nle ppard\ncar michael\nbe ret\nc se\nak hi\nmer ingue\nab an\nha ke\nger i\ner jee\nre sto\ncomm anders\npr it\nfl or\nad ven\nex termin\nremain der\nå IJ\nes g\nmartin o\nlulla by\n| @\nmi gn\nin store\nbig bang\ncor di\ncau ley\nante bellum\ndg ate\ncro ck\nspan dex\nscaf folding\nore os\nê°ĵ ìĦ¸ë¸IJ\npom ona\nma uro\nuni versi\nre mi\naf ootball\nt ant\nsm alls\nne h\nworl do\ntropic al\nmor ph\njav elin\ngla r\narqu itec\nreminis cent\ntu bs\nspide y\nmake u\nsyl la\nprogressi ves\nblo t\nshor ten\nkeep in\nch ak\nang st\nsuper food\ndecad ent\nston y\nneuro logical\nar boretum\nann ak\nfe ma\nper cu\ndis respectful\nsmall biz\nlo x\nco om\nc sc\nbs bi\npre valence\nhim ss\nesp an\nmo ga\nfr ampton\nsky map\nmas se\nlevi athan\n( ).\nnoctur nal\ncar ameli\nang or\namne sia\noutsi ders\nshe alth\nrhin o\nant ag\nag io\nðŁĴ° ðŁĴ°\ntake me\nkab addi\nc si\nm sh\ncoch rane\nthessal oni\nsil a\nha us\ndu sting\nobe se\nmack lemore\nmani sh\nlen in\nm dc\ngro wn\nshef field\ns rs\nke le\ncar son\nch um\ndah lia\ncan tore\nopp o\nhow ling\ncyber crime\nsur realism\nsc ran\nfa iz\nthre n\nrac ists\nr out\npk not\nse mana\nsin i\nmc cull\nma chi\nalfon so\ny b\nsar dar\nkend rick\nden g\nreci pro\non f\ndoom sday\nbri bery\ncustom iz\nart is\nc pi\nðŁĻĪ ðŁĻĪ\nsla va\nlet te\nen s\nâĿ¤ï¸ı ðŁĺĺ\ncra yon\nad an\ntr c\nmigr ate\nsimp son\nrow ers\nking sley\nfarmers market\nshee han\nne phe\nbor non\ncar ton\nmic key\nall ure\nu lu\nsli pknot\nheb do\ngui do\ndog celebration\nonline marketing\nacceler ating\n) ..\norigin ated\nmacar oni\ned tech\nout field\nmit z\ndisc us\nadverti ser\nman or\nha shi\ndescri p\ncap ita\nful bright\nrecep tor\ncon n\ncon ey\nspion age\nr attle\npre st\nu li\nblog post\nacker ay\n) âĢ¦\nred velvet\nmat th\ninspir ing\nb sd\nker ri\npo con\nmil lar\nre pur\naccent ure\nä ¹\nram bo\nragnar ok\ndele ting\nbritish museum\npat ory\nleip zig\nflori an\nsci fi\nin ers\nbr ate\nyo y\nmelis sa\nab er\nma sa\npo te\nmosquit oes\ntranspl ant\nr pa\n; ))\nbast ille\nyl an\njoye ux\nmelo dic\ncap tions\natri st\nroch dale\ngott i\npew die\ncuties aturday\nwho is\naqu aculture\ntiv a\nsp el\nhe ss\nha ji\nfred die\nco per\nbrand o\nv k\nphoto book\n* ,\nmy dayin\nmicha ela\nbrune i\nsr ini\nin te\nÄ ±\nde ol\nd fc\nsepar ately\nbun d\nve sts\nto c\nme ck\nrein forced\nconstra ints\ncar roll\nsq ft\nre ver\ncam per\nbird man\nin action\ngener ators\ntriumph ant\npe sts\no vo\ngy pt\nal amo\nsc aled\nsuresh pp\nsd n\nis mo\ngi os\n) @\njustic eleague\nrestaur ant\ngab i\nden gue\nnext gen\nexemp li\nap ex\ninspir ational\ndown side\nkid z\nu pl\net na\nalvar o\nfel dman\nbar net\nm ha\nes ch\nbloo ded\n>>>> >>>>\nkan i\nho fficial\ncasablanc a\nbir ds\nty ga\nsw amp\no day\nnew castle\nnb ap\nci sion\ncho ols\naf lo\nne p\nmon ton\nak b\nsuper model\ndown time\nth os\nsc wx\nsnoo py\nag greg\nyo ke\nnor cal\nwe tt\nprolon ged\nme tast\nbeat er\nf ta\nt lap\ndisgu sted\ny h\nvoice over\nitch y\nip c\nðŁİ ¾\nphe asant\nstra its\nram pant\nj g\nfer til\nassu res\nfortun es\nsal inas\nliz ards\nkett le\ni bs\ncyn thi\nhe g\nmc cr\nsoccer oos\nhappen ings\ncor den\nðŁĺĤ ðŁijĮ\nt ches\negre t\nwolver ines\ncongratul ated\nho gg\nbott ling\nwr i\nfer ri\nbo sch\naf ire\nog den\ns jo\nj dm\nsv t\ncon tex\ntol lywood\nmin k\nme se\nsuper sonic\nop oulos\nå ¸\nâĶ ģ\nknuck le\ngu ise\ngam i\nchu cky\nz inger\nradi al\ncompla ined\nbo da\nfe tal\ndiscipl ines\ncor ro\nðŁĩ®ðŁĩ ¹\nop ted\nfiltr ation\nad nan\nem cee\nmi stre\ninsom ni\nfer gus\ntra jec\non don\nmed tech\ntanger ine\nmadra s\ngru e\ncab s\nz hu\nsureshpp rabhu\ninsul ated\nday swild\npp m\nband ai\nv day\ns ff\nsqu id\nlo thing\nnot dead\nexpre ssive\ncu ll\nala stair\nx u\nup front\nfish ers\nen es\num d\ndis missal\nsti er\nsel s\nlu st\nre active\nprote ster\neyel ashes\nal im\ngoo de\ngre eng\nda ir\ncom pen\nanush ka\nproto typing\nma pu\nbear ings\nðŁIJ Ł\nfor me\nbsbi botany\ntimo thy\nout skirts\nam bed\nare tha\nwend ell\nstre aks\nni m\nk pk\nsne e\nfit ter\nquo ta\np ate\nwin ning\nðŁį Ń\nsho pping\nma inst\ncul ver\nste vie\nmcfad den\ncounter parts\ngren fell\nfol som\ndor set\ntech crunch\n⬠ħï¸ı\ntip tuesday\nus l\ntre x\ngeor gie\nranveer official\nlic ks\nse wn\nk f\n\' âĢ¦\njap s\np ate\north op\nfe sta\nstra s\nmon tal\nhammer smith\nfore most\nwido ws\nmad re\nite z\nmito chondri\nlig ans\nz ona\ncari bou\nm ss\nandre i\nweather channel\ngh c\n: ...\nta ft\nawe ather\nal isation\nbru tal\nbliss ful\nnik ola\nmal icious\nq m\nmpg vip\nbro die\nbl itz\napplau d\ndri bb\nv ague\ndog go\ntransl ating\ninterpre ted\nhat ched\nge tyour\nbenefici aries\nspar ring\ncaes ars\naw illiams\nla hat\nbro ke\nti mp\nvirtu es\nrel ying\npie tro\nk tn\nici sts\npab lo\nlou i\na ag\npn pp\ncha st\npul ses\nfini sh\nusair force\ntype writer\nthomp son\ndog s\nut to\nãģ į\nsand al\nnew ly\ndo ge\nz w\nwan kers\nne gr\nmu cha\ndetermin es\nblack fish\nsk unk\nmu ps\ninstru ment\nphy to\ndaysto go\nskin ned\nhai der\ncon ten\nðŁIJ¾ ðŁIJ¾\nwe iler\nundoub tedly\nchair ing\nwall is\nsh ard\nzind abad\nadul t\nabsor ption\npre sto\ndeplo ying\ndrum mond\nbattle front\nseag ulls\nhow dy\njuda ism\ndes de\npart ition\nâľ Ŀ\nno logy\nnational bestfriend\nlesn ar\nfilm fare\nco asts\nchristen sen\nac an\nmb u\nco pped\nru bble\nsw c\nfun nier\nfar ther\nwhere as\nnano technology\nwith stand\npil low\nbow ers\nto pe\nit ly\ncon fit\nma kar\ncomfor ts\nbo sh\ncli pper\nbal la\nsti k\nmil b\nsafe guard\nmusi que\neas port\nya z\npad ded\nbad er\nfore ign\nchop in\narchi ve\no ka\ntran sporting\ntml talk\naj it\nconsequ ence\nsc roo\nff o\ncollabor ated\npug chat\nye mi\njav ed\nau burn\no of\nma w\nsau cer\nmiti gate\ni les\nevangeli st\nter ie\nre cl\nindic tment\ncat a\nbright ness\nmay the\nwhim sical\nun lv\nkey word\ncu min\nmed way\nwest world\ntra w\nim posing\nform ity\ncoul ter\nab z\nny pd\ngrass i\nkel sey\nqld pol\nclock work\nf dr\ndi anne\nâĺ ij\nad h\np ann\nbra vely\nae ge\nun lawful\nver di\npocaly pse\nphar o\nkar la\nreson ance\nma stiff\nla dak\nbu u\nma iled\nhi i\ncraw ley\ntor rent\nmach ado\nliby an\neffort lessly\nfal sely\nq vist\nke ef\ncraf thour\ncheri shed\nval kyrie\ns ari\nkal amaz\nbe he\nðŁĮ Ļ\nth im\nro ddy\ncol trane\nbut chers\nach im\nwk end\nawk ward\ncab rera\n:) )))\nfran c\ndecl an\ncon dos\na ja\npandor amusic\nchar ter\nph ill\nmon trose\nhatch back\nhandic app\ngre aves\neucalyp tus\nut most\nt son\nbur ton\nmid wives\nin cur\nðŁĺį #\nmoo d\ncompre ssed\ntom a\nmust ang\nmo g\nas ana\nte stic\nsho tel\nin sol\ncor sair\nnh q\nben ny\nsm ma\nkap ur\nin con\njon as\nener gies\ndon al\nas ad\nse z\nn pa\narchi ved\nstimul ate\ndo p\nhy d\ngri eving\nãĥ Ī\nron a\nwhy te\ntree house\nss ell\nsand ro\nko bo\nther most\nse clu\nhi ya\nge ez\nmam as\nprisc illa\nflav oured\nfas s\nw old\nmaker space\ncospla y\np tv\nhappy valentinesday\nsequo ia\nlove craft\ngu an\nd tm\nci i\nyoko hama\npos thum\nre q\nðŁĶµ âļªï¸ı\ngalat asar\ndol by\nhamp tons\ndisturb ance\nstone henge\nok c\ndisrup ting\nmonth sary\njun gle\nhead lights\ndu stin\nmicro sof\nhappy mothersday\nko ko\ngra zi\nte sto\nna idu\nmal ay\nari al\nru mb\nab oo\nhar man\ntra pe\nspo ils\nje ho\ngo dly\nlock screen\nz un\npi ous\nma gento\nl enders\nprob able\ncorpor al\nm our\naw al\nsu a\ncall me\nton ne\ngo vin\ndevast ation\nx j\ngear box\nwar lock\nper me\nit ate\ngaza underattack\ndu val\nparas ite\nclement e\nle th\ni va\nfro zen\ntho les\nto bin\ncair n\ns ill\nluc kiest\nconver ts\nst ale\npan cra\neuro pale\nwis dom\nsch ur\nì ¶\nverti go\nbi j\nu bc\nnu re\nrighte ousness\nmt c\nfactor y\nver st\nrevers ed\nhur i\nhee chul\nfab er\nar r\nul ous\nven om\nph at\ngreen ery\nbra dy\nà ¦\n: ((\nnever giveup\ndi sha\nmo ta\nhealth care\ndun ham\ndex po\nden zel\nbb ins\nf ics\nwh am\nmc g\neli an\nwat a\nstr alia\ntel lu\npe sky\nspin off\nar moured\nre acted\ndo fficial\nte du\nsag ar\nmor ally\nparalle led\nfi os\ndow ner\ndau gh\nre do\nworld cup\ntari q\nbar ne\nglaci ers\noc cult\nbarbar ian\nher mosa\n!! !)\ny ur\ninter nation\np ss\nsit u\np int\namerican air\nsw am\ndopp ler\nðŁĴĻ ðŁĴľ\ncincode mayo\nle van\nhell enic\nmc ne\nju di\nyu h\nst x\nqu are\nðŁĺĤ .\nsti g\ng els\nmot ley\nhard work\neuro zone\ne ad\nç¥ Ń\nseab ir\nci us\nla id\nalpac a\npresu mably\npewdie pie\nboo ted\nam ari\ntam ine\nsol ace\nbar row\nacade mies\nx ian\nom ination\ndun geons\nb ma\nde ity\nai k\nstab il\nhir a\naffection ate\nving ne\nnew port\nãħĭ ãħĭ\nthir ds\nre tains\naroma therapy\nski er\nni ma\ndo pe\ncr inge\ncon domin\nto or\nanim ator\nsar aj\nseas cape\nminim alism\nlake shore\ncalla way\nberg man\nठĹ\nwhisp ering\nstupi d\nri ghtful\nrequ is\nir n\nse va\nut pol\ntuber culo\nsqu ish\nde but\ngovern mental\nchrist ine\nall man\nweap on\ns ito\nbur i\nlo lita\nleaf y\nfu ch\ntin ted\nmck en\na hahaha\nðŁĩµðŁĩ ¹\nrepe al\nne gan\nðŁķ Ĭ\ntail gating\ngame insight\nðŁıŁ ï¸ı\nyaku za\nz t\nti ring\npro posing\nbow lers\ntra itors\nak shi\ncler gy\ncit o\nup sets\ntu scal\nsymph onic\nsil ently\nshu ff\nblack well\nðŁĺĤ )\nko be\nrober to\nri dg\ndc u\nmer ino\nft p\neast side\n. ~\nnb l\nmn leg\nts for\nfrau dul\nca pping\nin my\ngymna st\nston es\nss in\ntwe aks\nshag gy\noak land\ndem sin\nsang ria\nmm va\nhen nessy\ndown ton\nri ghtly\nin it\naga ve\nob last\nnorthe ast\nfriend ship\ndal a\ntro phy\nðŁij ½\nmag in\nmargar itas\nê ·\nww fc\nfa sh\ndi ke\ncu d\nchar t\nðŁij ®\nrefuge es\njop lin\nn cs\nimp y\nfirm ware\npas cu\nflam in\nhealth tech\nbell letstalk\nw aka\nol ls\nla go\nco wan\nbombar dier\nsh ome\nðŁĻ ħ\nmc master\nna ve\nwell s\nu ta\ntell ers\nmis fits\nkap il\nface off\naf firm\na pro\nwhit epaper\nsuper yacht\nspeci mens\nal located\n... ,\n- __\nka w\ndachsh und\ndjo ker\ns work\nqui ere\nor um\nðŁIJ ł\nsom m\nc mt\ningh our\nskin ny\nlgb ti\ngi ggles\nbreak away\nresear ched\npar ity\nmy al\nms l\nre tained\nsi vity\nmake inindia\nsol ves\ndefam ation\nwal tham\nsri racha\nroad way\nconcep tu\nal in\niw ant\nå Ī\ndel ft\ntender loin\nga ins\nfaul ts\nsw ire\nst ellen\npol lo\ndy ne\nbornon thisday\nasdf ghj\nsq l\nsali m\nadvis es\nvo ip\nìĹij ìĨ\nun touched\nshe il\nontari o\nuph ill\nso bre\nde shi\nnov ella\ndu tton\ncraw fish\nا٠Ĩ\nma a\ntw ine\nkal in\nðŁĩµðŁĩ Ń\nye ss\nbrook s\nhoo siers\nton ka\numbrel las\nay ers\nate am\nacqu iring\nsu ction\nä n\nwi es\ntari ans\nsoci o\nmat tb\nshepher ds\no so\ncharity tuesday\ns logans\nninj as\nal bat\nby te\nbash ir\ntrampol ine\nmydayin la\ni ja\nbas el\nror y\ngol die\nfi rec\nun noticed\npecu liar\nsch a\nker son\nmour ns\nliquid ity\nqu ipment\nhi bs\nar s\naeron au\nslide show\nsla bs\ndelici ousness\nsk itchen\nhta fc\nfull erton\ncre ighton\naer ob\nprocrastin ation\naz ores\nwhite hall\nuss occer\nmedi ation\ndjoker nole\nand me\num en\nnoxi ous\njo ss\nili fe\nanni vers\nsudan ese\net res\nunder mine\nwhole foods\ndiso be\nkor i\nade le\neli z\ncan ti\nal on\ngymna sium\nsarko die\nmeteoro logist\nyl de\nste en\nstamp collecting\nnas al\nlo tt\nfran ks\nex ol\nack i\ngood year\nanimal rights\ny les\nvio lets\nmm es\ns thel\nra pping\ntu scan\nwai ver\ntur ner\neat local\nnorthe asthour\nanim ations\ntom morow\nt sh\nff ame\nbra e\npe tron\nglam our\nbr yn\nd cs\nbal es\nðŁĶ ¶\nbro v\nbre v\nb ons\nphysi que\ncar ne\nx e\nelix ir\nvol ved\nl oma\nìľ ł\næ ĺ\nvan u\nri gs\nbal ance\nva res\nbon ita\nsprink le\nperfec to\ndi on\nle ak\ncalcu tta\no ba\nd ma\nc mon\ntun er\npneu monia\nbo gus\napolo ge\ncl ough\nbor ne\n)) ))\nrevi ved\no varian\nner f\nc legg\nfan fest\ncho u\nreali zes\nmc n\nli gu\nleg alize\njust saying\nfor ster\nbo sni\nk hi\nin dom\nhei del\nen cryp\nsi ss\ned di\nmar bles\nbrisban e\ny ing\npre paid\nwal sall\ncooper ate\norche str\nmar isa\nho wie\nche wy\nbren ner\nandro meda\ne gan\nsto cki\ncav endish\nag an\nban o\nde ir\ngo g\nbl k\nre thinking\nch ig\nrhe u\nsni p\np eng\nsemin ole\nm swx\nan nex\nlyn da\nlewisham ilton\ncu mul\ntb l\ndolph in\nagu ero\n........ ....\npre lude\nat our\ngr anger\ntoo ting\nro tun\ndis ar\nhome items\nda res\n**** ****\nðŁij Ĩ\ncompre h\njin x\nas well\niri e\ncircul ating\nðŁIJ ¥\nover board\ncultiv ate\nrhe tt\noriente ering\nca k\nbal kans\ns itt\njas min\nbritney spears\nro tor\nse aling\ng bc\noc ci\nf as\neman cip\ncom er\nwar time\ntic kle\nson ny\npac es\nlog g\nat rix\nsr p\ng win\ndo bbs\nuz be\nthe wanted\ndru sh\nex tru\nm icky\nhonore es\ndar win\nre dux\nmm j\nram i\njalape ño\nio c\ndo ver\nju ju\nwhit ney\ns eng\nen ly\nau ch\narchipel ago\nvigil ant\nman gal\nwil dest\nparano id\nhal i\nbb ly\nsanc tioned\nreal ms\ncon co\nu ddin\nc sk\nplay time\nlibr a\nsav ag\noc tane\nrec tan\nre turn\npar rish\nmor rha\ncc p\nc mu\nsa iled\nse vent\nro sie\npil ing\nhe w\nboar ded\nseg ments\nneph ro\n( .\ncr ats\nbak es\nðŁį ¸\nback tothe\nsibl ing\nkirk land\nke o\ngu wa\nbre ads\nðŁĺľ ðŁĺľ\nt q\nharas sed\nga u\nwil bur\nj isoo\nep er\nli sam\ntri ppin\nsh ino\nru kh\nbeast mode\ncho a\ninst aweather\nrich land\ngar i\nfe z\ncowboy snation\nfur suit\nk run\na en\nsycam ore\nse gun\nent ennial\ndi h\no ax\ndemsin philly\nðŁĻ Ģ\nsn hl\npen nies\npass words\nma kin\nty e\nd eng\nkni gh\njeep life\nhel pline\na for\nzz zz\nste amy\npic ker\niter ate\nhappen ingnow\nki b\nbloom berg\nmartyr dom\nbul ly\nassor tment\na hora\nzo e\nno i\nillu stri\nagar wal\np sc\nelectr onica\nrecruit er\ngar diner\nrad ha\nnaf ta\ndot net\npi ero\ngeor g\nbel s\nðŁĺĤ ðŁĺį\ntuberculo sis\nrun nin\nmor is\nhaul ing\nev oc\nbre thren\nsha ir\nframe works\na stu\nri gid\nku ma\nkre me\njin nah\ninsu rers\nny u\nf ere\nnol lywood\ngood vibes\n- ...\ntoi le\nsk ril\ninstaweather pro\ncze ch\npa vel\none piece\nnike plus\nfi let\ncav ity\nðŁı½ âĢįâĻĤï¸ı\nðŁİ £\ndra stic\ndail ys\nsiam ese\nre bu\noste o\nlar k\nf re\nsh elling\np é\nglad ys\nðŁıĢ ðŁıĢ\ngusta ve\nsubmer ged\ngrand stand\natt u\nwon t\nf pv\nb ley\njon i\nang ames\nweigh ted\nal ou\nठ¶\nles bians\nf j\nanni es\nam l\ndor ia\ndav in\nbe ta\ncan c\nmadewith unity\nha j\nbad lands\nmu l\nblu ec\npa wn\ncov ington\nneuro logy\nhtt weets\ndysle xia\nthel ove\nne at\nfork lift\nautom ate\nune ven\nmonte ss\nhe in\nha g\nrel ics\ncompetiti veness\ncan elo\nmar tens\nbullet proof\nsk ittles\ng ya\npri mo\nameric afirst\nwoo o\nabor tions\n?? !!\nma che\nld ers\nrl ly\npreli ms\ndirec t\ncour se\nswa in\nsuper cell\nec centric\nsting ray\nple ts\nwil cox\nwest in\nokan agan\nkir an\ncar bo\nbomb ings\nra rest\nbo h\ngaw d\ndi gg\nmo ana\nenti rety\nen closed\ndodge ball\npar ton\nmilky way\nat r\nthorough bred\nre ally\nqant as\nepiph any\nine e\naero smith\nspi eth\nar thro\nell ini\ndu bu\nbra ving\nâļ½ âļ½\nre structuring\nillumin ate\nequ ili\nmp i\nash ton\npony tail\nma scots\nflat tering\ncru m\nast a\nà® °\nstranger things\nbar nab\nر ÙĬ\nmake shift\ngot cha\nwill am\ncho irs\nkilom etres\ngho sh\neu than\ndol ly\nun ning\nthe ar\ncre we\nw sw\nj ace\ndis miss\nke an\nho ta\nkh at\n~ >\nthir u\nren dez\nhart man\ntee ssi\ncas ca\nz ah\nhydr ange\nfo d\naw p\nmzan si\nthick er\nnago ya\nne va\nsti que\ncast el\ndam ian\nthere by\nji ang\nale k\nmusic islife\nra q\ncalla han\ngou ache\nsomal iland\nsean hannity\nra heem\nlo se\nelo ve\nwhar ton\nrectan gular\nillustr ating\nhar ne\nauti sma\nscra pped\nell and\ndecre e\nnag pur\nki pp\nso re\nn md\nma as\ngun a\ngart ner\nbel li\nthen ight\nje on\ngendere quality\ngi ver\na el\ngar ments\nne u\nmardi gras\nmar sden\nro wer\npollu ted\ncamer aman\nvin od\nbe asley\ncro c\nji u\nhollyo aks\nanesthe sia\nal les\nste ward\nlati mes\nðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸\ntic ian\ngor ia\ncome dic\nðŁ¤Ķ ðŁ¤ĶðŁ¤Ķ\nnai ve\nsli ons\nł Ī\nbur glar\nðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃ\nyork shi\nse ñ\nfan boy\nlau rel\ninci dence\npotom ac\nrober ta\npresi den\npr yor\nos bourne\nw ku\nte me\npal ae\nðŁ¥ º\nre boun\nitu de\nred dish\nk hand\ncoloni alism\nnorth carolina\nðĿ Ĵ\nmanne quin\nlady bird\nta sty\nknowledge able\ng shore\nðŁĮ Į\nà® ©\nqu aker\nsalz burg\nmed alists\nchy na\nbridesma id\nma ori\nro p\noutra ged\nin adequate\ntruck ers\nal ana\nìĿ ¼\nri x\noooo oooo\ncommand ments\nlam beth\naa j\neco friendly\nbla z\nmorecam be\nboun cy\nrou x\nrai ded\nmi zed\nsh c\ngaw x\nlabor atories\nru bs\nrest room\nconsult ations\nca jun\nvirgin i\nso ir\nrev ue\nple in\nwag er\nç ¹\nwe do\ngrowing up\n! ðŁĺĬ\nface ted\nsin ners\nho vering\nti ene\nseas oning\nan ja\nleg go\nil is\nfla x\ndev o\nash ram\nmati sse\nker i\ngo wer\nbo tox\nmar shes\nunh cr\nts m\nopti mus\ndun i\nstu ffs\nso k\norder ly\nn bad\nislam ophobia\nraviol i\nfab er\ncre ds\nwon ka\nin fusion\nover weight\ndaily news\nassi mil\nacol lege\nmedalli on\nkili manjaro\nsti ff\ntham es\nsun ken\nth ard\nmy dubai\nhilari ously\nhan nel\nplu mber\nfair view\nsepar ating\nrasc al\nqui en\nnecess ities\nconfeder ation\nll ll\n: ]\nweak nesses\nbron co\nra ffles\nel ot\nãĤ¸ ãĥ\nadvent calendar\nðŁİ ¹\nstra vel\ntun ic\nk su\nim peach\ne spionage\n! -\ndi ment\ncur rant\nbio de\ncommu ting\nby ron\nðŁĴĵ ðŁĴĵ\nshad ed\ntr uro\ncray ons\nar ne\nh sc\nfre aked\ndram ati\nfle ek\nu cd\nmarl borough\n^ -\ncross ings\nmal o\nblack ops\nbin ance\ncho ked\nchen ey\npl o\nge stures\nval edic\nryan air\nrem ington\nv cs\nmc kee\nec z\nbe gs\nnail art\nmayor of\nhappy fathersday\nwar t\npet itions\nn ingly\nclean energy\nbro x\nsl alom\nexist ent\nab ay\nug liest\ntom p\nstom a\nsel by\ngoal scorer\nben ji\noverwhel mingly\nlan s\nsemiconduc tor\nsouth korea\nre scheduled\nsk yl\nen listed\ndow ski\nsi del\nrosen berg\nnas ser\nwhite head\npri us\nhar are\nen n\nry der\ní Ĥ\nmon g\nclas ico\ntranspor ter\npo tty\nis me\n** ***\nvic e\nsk it\node ssa\nl mp\nher n\nraci ally\npin oy\nparagu ay\nobitu ary\ngo es\nbu cha\nside walks\nangu lar\nun constitutional\ntransiti oning\ni bu\ngu ys\nun packing\noooo oo\nblack girl\nber gs\n ¯\nwordof theday\ntrump train\nthunder bolt\nm si\nfasci sts\nठ¬\nt sk\ncollap ses\nraje sh\nloveis love\nmigr ating\nset back\nðŁĺĬ âĿ¤ï¸ı\nt els\nsafety first\nnar rated\njae joong\nun answered\nlique ur\nen nes\ndal go\nbill ings\nsalt water\nmer maids\nlon gs\nclap ham\nwe arec\npic collage\nn ach\nh ace\npois oned\nlo th\nag na\nadel rey\nguar dia\npoli shing\npeace keeping\nd all\np isa\nla pland\nprocess ors\nde andre\nso bs\np once\ndra ins\nc be\nðŁİ¥ :\nspla sh\nmeat ball\nfon tana\nworcester shirehour\nne v\nbri sk\nb int\nac r\npo x\ncay enne\nskril lex\nj fc\nhahahaha hahaha\ngla s\nen gul\ntempor al\noni zed\ncon cre\ncom pose\nvibr ations\nplant ers\nfer t\ncriticalrole fanart\nt bli\nsch allenge\nhuck abee\nmunici pal\niam bic\nradi os\nne vis\ndura bility\nmc cla\nhorse back\ninst itutes\nful fill\natta ch\nate ur\nak an\nresi sting\nillumin ation\nhand le\nhair care\nom ent\nmacle od\nka iser\ng no\nbear down\nly f\ngl omer\ndistor tion\nz m\nsan k\nroo sters\nis now\nas ports\nag en\nwo ken\nst george\nro mper\nmy le\neconom ists\nru to\nt will\nhealth and\nd ito\nws l\ntair p\npra kash\nmic heal\nh ts\nw rights\nkat su\nfioren tina\ndefen seman\nd itch\nvar sity\ntexan scheer\nba ham\nsc anned\nwe il\nseduc tive\nðŁijį ðŁı½\nfu e\ner win\ndav ison\nter ran\nmoo ds\nwool f\nre source\n@ .\ncu sh\nðŁį °\nregre ssion\ncur led\nla zer\njo anne\nab bott\nmo z\ndown ers\nmm mmmm\nvalent ina\nk hair\ndream t\ncro ok\nche k\nste aming\nnephe ws\ncl eric\nas ober\nindefin itely\nw ye\nus news\njoy ce\nflu shing\nwynonna earp\nron do\nkis s\nhot dog\nbar ns\nsax ophon\nfar ley\ngas p\ndecre asing\nal way\npe x\nl sd\nshi ft\np outine\nra zz\nrescu ing\nni ko\nho ch\ncc l\nu aap\nn ts\nm car\nil wx\nconqu ering\nket tering\nstur dy\ndelay ing\nsto k\nvani shed\ncath ar\nbin gham\nin v\nic hiro\nhe mo\nbudge ting\n[... ]\nbe ss\nsebasti an\nslow ed\nðĿ ij\nmusli m\nstun s\nacton climate\nve a\nse ton\nrose tta\noun t\nhard in\nflu id\nca w\nðŁ¥ Ĥ\nyach t\nun l\nsp hy\nprovoc ative\nor ic\nis back\n__ _\nnicol as\ngy an\nloo se\nfl in\nreb ate\n: ::\n! "@\ncom icon\nshe ff\ndown stream\nchic hester\nbeach life\nmom life\ndiabe te\nar ra\nvan e\nok u\nye o\nman go\ntry out\napp ell\nhe irs\narjun a\ndd u\nna veen\nmovi c\nsoci alists\ns back\ncriteri on\nsoyu z\nk her\nda z\nyol anda\nwine oclock\nre ina\none w\nleon ard\nen dez\nu bs\nsupport local\nfacilit ated\ncarameli zed\nb pa\nvuel ta\nmy tho\nm ami\nspe are\nnbap layoffs\nfe vre\nnick jonas\nim print\nc so\ncraig slist\nla salle\ngi deon\nha doop\ndis regard\nw ud\ntu c\nma gee\nacou stics\nta a\nqui e\npol a\ncr t\ndw yer\ndis sec\ncapit ol\nmen tion\nkn oll\nhe igh\nfin ders\nplac ements\nl se\nindi ra\ngur i\nmadhuri dixit\nkingdom s\niambic pent\ngeor gina\nje ky\nconflic ting\nbay an\naga tha\nuph old\ndr on\nvic ar\nex pat\nperiph eral\npe ssi\nfa f\nance stor\n? ..\nwid get\npun c\ncomm enced\nbeav s\nair waves\nad dis\npo a\nde sses\nco den\nvu e\nru pee\nkar in\nspo ck\nm sy\nภ°\npr ick\nfill more\nti fication\nthing sto\nsar de\nem ile\npere ira\nn ad\nbright ening\narre sting\nwo king\nusc g\nsp ill\nraspberry pi\nhu go\nite c\nis ma\ncuff links\noptimi zed\noc c\nmi wx\nen ka\nel ited\nafford able\nsa kh\ncoron ado\nho h\nat ul\nai oli\njim cantore\naccoun ted\nvin ay\nher mit\ngroo ves\nran ch\nr illa\nwe tter\nou tof\nveter in\nni kov\nki an\nfair banks\nram apho\nn iti\nk ko\nru sty\nne stle\ntv xq\nshahe er\nâĿ¤âĿ¤ âĿ¤âĿ¤\npenn ant\ngem stones\ndem debate\nðŁIJ Ĭ\nauton ews\nsupport indiefilm\nmach o\nve x\nnew sat\nne ti\nconce ssions\ncan died\nyof the\nmac au\nden ds\ncricke ters\nsan iti\nmari ano\ngh at\nar toftheday\n¡ ľ\ne gos\ngen oa\nchat bots\nbri er\nal labout\nmon ty\nspi ed\nr tr\ncomfor t\nsni ppets\nreal time\ngra in\nexam ined\nen lightening\ntt u\ngod bless\nrelease the\nsing ular\nki ans\nha ka\nsor ren\ndefe ct\nmar g\nequ ities\nd orian\nsu ka\nper l\naishwar ya\npul lover\npreci sion\nfair way\nne ve\nrive ting\nvill anova\nen com\nak o\npassion ately\neuropale ague\nsiem pre\nx vi\nenligh tened\nc fr\nâĺħâĺħ âĺħâĺħ\nwast eland\nis f\nnew comers\nemergen cy\namphi theatre\n- .\ntext books\nfigur ative\ntre mb\npe sc\nab hin\nab bot\nac acia\nhar ds\npor sche\nkau ai\nel isa\ncar rick\nabo u\nelli er\nbe ch\nneu tron\ngalap agos\nru ben\nin nis\nhow to\nnun s\nsab ine\ni ac\nclin ched\nno tori\nfi ves\ncairn gor\nper i\ngr c\nðŁĴ¯ ðŁĴ¯\nmal m\ntwelf th\ndi ff\nrout ines\nmarty n\nlin den\nsynthesi zer\nnu mber\ngame cube\nfal kirk\nbyz antine\nqueu ing\ngr ill\nscal able\nchar red\nrou ting\nher bali\ngri zz\nðŁĺŃðŁĺŃ ðŁĺŃ\ntol l\ntermin als\nl pc\nab d\nwar mups\nremo vable\n¯ \\\nvi go\npap aya\nne ve\nlov ingly\njo kers\nib les\nsse tt\npoten ti\npel e\ngi gi\nsadi q\nleg acy\nson o\nru pees\nretar ded\nele e\npar r\nfi ance\ney re\nsay ers\npend ants\nmak nae\nal bans\nadap ting\np ff\npu berty\nji u\ning rad\nhypocr ite\ndiplom ats\nphys ical\nrob by\nbon sai\nãģ ·\nf att\ncatal unya\nâľ ĸï¸ı\nro ma\nmore land\nso e\nconver sions\nstl blues\nshol m\ngra ssy\npra do\non u\nassaul ting\n> _\nsett es\ndis graceful\naph ra\nâļ½ï¸ı âļ½ï¸ı\nठª\nkil n\ngoal tender\ns ru\nphilanthro pist\nb als\nth n\nstu den\nsando val\ndogre scue\neli ons\nasse ssed\nlar go\nhec tares\nsh rm\nsa if\ncle avage\nno ches\nn ene\nfat alities\ncur ing\nclean ser\nal es\np vp\nsouth bank\npizz eria\nmarsh als\nkni fe\nan dover\ntbli ghtning\nsr sly\nou te\ndigi mon\ntimesof india\nprome the\nle bo\nf su\nwit z\nrever e\nman as\nmam ba\nch ica\ngu an\nexhibit or\ncsr racing\nd ere\nxx xxx\ngu sta\nstory time\nston ey\norgan ics\nand u\nse am\nmin ogue\nanushka sharma\nab a\nðŁİĻ ï¸ı\nugand an\nchro matic\nas sn\ndocument aries\nsh t\nru paul\nloy d\nk ats\ne us\nite ch\nme dusa\npan ty\nkel logg\net to\ntalla de\nsha a\ndo st\np ms\nmari ana\nje ster\ncroo ks\nðŁĶ ¬\nmin danao\nind hoven\nðŁ¤ ª\nle xi\ntv n\njan is\nco te\nãģ Ĩ\nser rano\niw m\nðŁIJ ¬\nk ke\ndistribu tors\ncap u\ncounterfe it\ncamp site\nag gie\nðŁĺ ¼\nchhat tisgarh\n~ @\nstate u\nsan di\nprevent able\ncl s\ncan ne\nmm c\ni ver\nsa haran\npal is\nnight out\ndo s\nap ia\nabsc bn\nmanag erial\naro se\nmo wx\naro sa\nðŁĮ ³\nunder dog\nremo ver\nastronom ers\nlent ils\nsu scep\nsmoo ther\npend leton\nfau cet\ne mory\ndal mati\naf cb\ntic us\nexem pt\nen rol\nd heim\nðŁIJ º\nrestric tion\nstar fish\nsto w\nsnor kel\nthunder birds\nshe ad\nhomo sexual\ndy n\nas li\nandre tti\ndou che\ndom o\ntar mac\nslu mber\npr onto\nfirst dayof\nmini ature\nmari achi\nargu s\nrecomm ending\nmobi les\nin ce\nillustri ous\nor c\nadver ts\ngr its\nwea sel\npag oda\nover pass\ngre ys\nmaxi mus\narma gh\nwood land\nsun ni\nðŁĴ ī\në Ŀ\nti one\nsoci o\nho s\nðŁ¤Ĺ ðŁ¤Ĺ\nwind sor\nsubsequ ent\nmunch ies\nid h\nexclu ding\ne mi\ncu th\nz ai\nweek days\nlaw suits\nbarn ard\nØ ª\npe tting\nnet es\nmul ligan\npharmac ists\nra quel\ne ton\ncran ston\ngil ded\ncle ary\nce ph\nra a\npam per\nlombar di\nas in\nsher ry\npro d\nfor te\nari anism\nbuffalob ills\næľ ¬\nðŁĶ¥ #\nuu u\njust ices\ncar ina\nnat in\nmas low\ndro oling\ncog nac\ncam ber\nel ong\nr dr\nin en\nconvic tions\nam use\ntro ck\nharm less\nvisit ation\ngen omic\nbl and\nbeno it\nchim p\ntuscal oosa\ngre asy\nx po\ngil t\nse q\nper mitted\nchristma seve\nbook s\nmu e\nold school\nhuman right\nbe ati\nðŁĶ Ŀ\nsh at\nsculp ting\nh wan\nfern andes\nsci utto\nfu entes\nendeav ors\nmaid stone\nun paralleled\nshou ted\nqueen of\nmer c\nband ic\nve da\nsel angor\npi le\nja han\nintimid ating\ndisapp ears\ncl ich\nza ha\nw urst\nhi v\nfod ils\ncor dless\naaaa aa\nhy dra\nbel inda\ne els\nbu f\nsu staining\nrugby league\nno c\nbrig itte\n( ðŁĵ¸:\ntromb one\nsoo the\nsmo g\nad p\nstab le\ning ley\ndiagno se\nms g\nwe ss\ntic keting\none e\nnsw pol\ne up\nauto psy\nadity anath\nsun down\nriver front\nsi ya\np is\nhier archy\ndur ango\ndi jk\nren shaw\nhe aps\nepide mi\ndavid bowie\ninterne tof\ndd i\nnation ality\nmb ar\nair y\nwin der\nw alia\nelli ott\nc x\nbav arian\npl att\nan tw\nwi wx\nsof ter\nne ha\nh eller\nth and\ndani ela\nbo ast\ndegra dation\nðŁĴ¦ ðŁĴ¦\ntransform ing\nman e\nav ut\nðŁĺĪ ðŁĺĪ\nvo ter\nthe e\nt ate\npu ff\nin door\nsop roud\nboy ce\nboris johnson\nwait in\nimmun ology\nðŁıĨðŁıĨ ðŁıĨ\nâĿ Į\nstreet food\nliz asober\ncavali er\nc elia\nneed le\nmotor ing\ng ato\n, )\nra de\nharve st\nt ms\njar pad\non ey\nair men\nv re\nimpair ment\nabhi shek\nsnoo p\nl ant\nfam ously\nbl ou\ns ze\ng ander\nun touch\ntu f\ndee jay\ncol lateral\nb ind\nðŁļ ©\npin ning\nic n\n\' ;\nthe economist\nul tram\nworldwater day\nti poff\nthe i\nfeed ers\ncampa ign\nsc umb\nday weekend\nyo m\npe dic\nh ough\nps v\npl in\non de\nboston marathon\naz zy\n* _*\ncon ley\nthi ago\nhoo o\ngal erie\nluci d\nje tt\ngl itz\nfinal fantasy\nachiev ers\ny ung\nperegr ine\nop hi\ndam es\nbiom ar\nâĺĢï¸ı âĺĢï¸ı\nsk c\nl ics\nfl ank\nar rahman\nho of\nuphol stery\nt ats\nwo z\n ¿\nsnor ing\nra er\nl ju\nap d\npl ating\nkan u\nim ation\nfragr ances\nm ra\nmor ay\nmo tt\nim muni\nhearti es\nbho pal\ntim ers\ng ata\ncolor way\ncar nation\nwin get\nsi ghs\ns ville\noptimi st\nchate au\nolympi ans\nci o\nsinger songwriter\nny o\nfi bers\nbur ch\nag ro\nmil ne\nig bo\ncr amer\nation als\ndan ube\npad ma\nnor mani\nen forced\nbre ck\nboeh ner\nar den\nsur rendered\npros thetic\nom a\nha iled\ncalcul ations\nw fa\nbi b\nfcb live\nfon da\nwest coast\nque sts\nfriend ly\nto wie\nfit ch\nbal ot\nstar dom\nscrat ching\nho sa\nthi ka\no ven\nstro ke\nout post\npharmaceu ticals\nhi kari\nmu y\naf d\nfallon tonight\nsqu at\nor u\ndra ined\nchocol at\në¯ ¼\nwor ths\nri b\nmu j\nthat s\nresiden te\nit el\nboo st\nmi gos\nmul led\nla a\netsy shop\ndon keys\nme k\np tc\nflin ders\ne hs\nro hit\nmu ir\ng ad\ncompos itions\nåĨ Ļ\ncombu stion\ni kh\nyemen i\nwav ed\ngar ci\nak os\noo ds\nfu sion\nse que\ns lan\npl ur\nkic chasu\nshenan do\ns ams\nworl den\nhoro witz\nwith me\nmic robes\nk ki\nðŁĴĶ ðŁĴĶ\nw su\npatch work\nfre er\ny aki\nthe art\nsymboli sm\nmil er\nbt n\nma bu\nside kick\nmotiv ates\nsag itt\nnatur als\nserv iced\nps ori\npa ola\nqu ig\ni badan\ngi ggs\në ³\nsciento logy\nsi oux\nsalam at\nd res\ncad bury\nd hawan\nci ón\n_ \'\nswa pping\nmaris ka\njames bond\nexplo sives\nay les\naf er\ns agu\ncen sor\ntom a\njeff erson\nring ed\npar tist\nir responsible\naguil ar\nvac ay\nequ itable\naltrin cham\nac ur\nman ish\nger min\nschoo led\npu tter\ned ad\nnav al\ntoast y\nsol areclipse\ndish u\ncoy ne\nac co\nmu ck\nmar an\nel os\nlen der\ncro ix\nworth less\nha ber\ngun men\nðŁį ĵ\nzen ith\nt enders\nhur st\nhol tz\nitali ans\ncar low\nu cd\ncharacteri stic\nbun g\nav l\nu th\nsa sia\nrs l\nred man\nneighbor ing\ngreen peace\nsti ps\nfollow party\ny gk\nen os\nomni bus\nna issance\nchri ssy\nsecu re\ncall back\nji hoon\nmemor y\nblock er\nl anta\ndaf fodils\nbil t\nffer ty\nfau st\nie c\nnipp les\nso g\nm nd\njagu ar\nbol dly\nab poli\npro position\ngun sense\nevan sville\ncu tters\nwe go\ndou n\ndo x\nstal lions\nka j\nshi ppers\nj awa\nvol o\nle ven\npap rika\nkov ich\njor di\ninduc tees\napp alling\ndial ysis\nallevi ate\nâĢĶ âĢĶ\npie ter\nmid wi\nq tr\njuli ette\ninter mission\nhaw ks\nact ment\none ill\nk lin\nvam ps\nfam ous\ncou ld\nautom obi\nda an\nwest end\nelli p\nnh c\nmel anch\nweb series\nton gue\nsnat ched\nsmy th\ntan gible\nsl i\ne asing\nbar stool\nover lay\nafford ability\nting ed\nter as\nay ush\nwanna one\nrh ine\ndan a\nsh ana\nkend al\nfer tile\nw ir\nrepl eni\nlar vae\nis ro\ncon vos\nab brevi\nu cc\nhun gry\nbur rows\nag er\nnav i\nmat in\ndu per\ncer n\nma don\nķ ï¸ı\né ģ\ntu ps\nhy att\nsh ep\nfriday night\nwis er\nhei di\nhat ton\np gh\nfoun tain\nwrist bands\nahmadi yya\naeri al\nsubscri bed\nso los\nm ace\nsla yed\nfor fe\ndul ce\nchrist mass\narun jaitley\nviol ate\nob stru\nni eces\nw vu\nidy l\nfa ze\npre serves\ninfr inge\npremi ers\ninter vals\nagen cy\n( ©\nstand alone\ndi mes\nbo er\nparam eters\nge tit\nðŁĺĺðŁĺĺ ðŁĺĺðŁĺĺ\ntu lane\nfor given\nscol l\nmb ps\nsmash bros\nrob bi\nprima vera\nali st\nghost ly\nay at\nye ats\nimpre ssionist\near phones\ncaul field\nwai kiki\nsal ute\nsc ou\nmu ay\nlouis vuitton\nbak hta\nado g\ninven tions\nhur d\nforec lo\nstream line\nthalai var\nch snews\nwill ard\nt sn\neuro parl\ncru sher\nmy sore\ngro wer\nra ping\npat ti\ng den\nsm w\nmuf ti\nkid man\nab r\nsoun ders\nskep tical\nðŁĶ İ\nsun dar\ni me\nfer g\nfeather weight\nar lington\npas qu\nag azine\nwearab le\nnati c\nmccl ure\ninter mitt\nhor de\nsix ties\ncar te\nbha v\nze al\nexperi ential\nador ned\nsom mer\neno te\nhypo thesis\nstin ky\npro to\ndead lines\nvo gel\nmus ings\nmonc ton\ngu ter\nf le\naci on\nvoice of\nta sha\ninhabit ants\ntype face\ns ba\nbts x\nðŁĶ Ĵ\nwor x\nu hc\njo ko\ncell ars\ngor o\ncontinu um\n... &\nweather cee\nha p\nsr k\nris ers\nlonely planet\nun named\nco eur\nðŁį Į\nthe world\nili ke\nfa sten\nami go\nri ba\nramapho sa\nstaf fers\nhad ley\n? ?"\nfi ore\nsal ut\nhu ff\nbez os\nÑ ĭ\nra der\nkam ala\nin line\nfill ers\num atic\nall in\nshat ter\nre in\no ku\nch ases\nfla gged\nbaby metal\nwater stones\nts b\ncut out\nop hel\naam a\nrockab illy\nsto lic\njet blue\nich ick\ndown ton\nuzbe kistan\npat na\nla q\ngr ange\n) _/\nsubsi di\nsc p\nnewsc ast\nit sa\ntwee tyour\ne mor\narchae ologists\nuni fication\npor ta\nq x\nprotec tors\npro hib\ncharis ma\ncar tag\nren fre\nscul pt\nguwa hati\nde ma\nboo p\nunf pa\ndex ter\nlay la\nalleg es\nsou ps\nnever again\nl ys\ncal c\nbar oness\nvisu alize\nger ber\nabsor bed\ni ers\na han\nfon tein\ndetec tors\nverst appen\nsv c\nformul ated\nac dc\nli x\nin competent\nbh k\nlour des\nwater house\nsnow ed\nappreci ative\nsig ma\nlizasober ano\npen ned\npay check\ntall inn\nfanc afe\npar isi\nav alley\nvi g\nru fc\nhard ship\nso cute\npo ise\nì ¹\nroth schild\nk ly\n???? ????\nl hp\nil ay\nf hs\nam ad\nide als\nbrad bury\nbal boa\nnic ot\nkid nap\nwol ve\ntas manian\nop t\nmatthi as\nãĥ³ ãĤ\nsuper markets\nmylittle pony\nme lee\nli ster\ngr oun\nfe dora\nkind ness\nen en\nbra hms\n¯\\ _(\nros well\nmar lene\nic u\nre formation\nor ail\nhe brides\ndispar ities\nterrac otta\nswal lows\nre id\ninflu encing\nflu or\nden e\ntum our\nblon des\nthunder bird\nsh eva\nmoga dishu\nka b\ncre eps\ni ving\nene ed\nanno y\nâĶ Ģ\nintri gue\nenqu iry\nar aj\ntur al\nkuber netes\nend lessly\ndivi dends\ntor a\nti sh\ncommemor ates\nun ra\ntri b\npon ty\nne m\ndiss ent\nbrew ingco\nðŁĺ ½\nnor mali\nbi of\n( ...\nchil len\nì£ ¼\nmell on\nav is\nmccor mack\ning ra\nenrich ed\ncustome rexperience\ntesto sterone\nsnu g\nsett i\nger onimo\ninqui rer\nbre aches\nvery thing\nbloom ing\nmu ra\ndispo s\nbi de\nde va\nshade sof\nin trin\nsh ev\ns ven\nnayanth ara\ngan esha\nc ws\nber ta\nlabel led\nuse um\nnick named\nma han\ncar uso\nap ur\nðŁij Ĩ\nw q\norphan age\ndiscar ded\nmag nu\nlu e\nje on\nbridge port\npac ing\nmercur y\n( ðŁĵ¸\nmarx ist\namphi bious\ntransplant ation\nstit ching\nthen burg\ngradu al\nãĤ Į\nro ft\nma ils\nine c\nguy ana\ndopp elg\nver o\nre write\nhead less\nharb augh\ngate way\ncar sforsale\nsw i\nst is\nmach t\nun de\nsura baya\nstap leton\nnur turing\nmil ner\nya o\nlma oooo\nko sh\narsen al\nk ame\ner ry\nar royo\ndis misses\nru bbed\nrc b\nlew d\ndil u\nand or\nvi de\nur in\ninter sec\nha ar\nal b\nyear swith\napp leton\né al\nul livan\nsuc cu\nmonter rey\nd mx\nartem is\nron nie\nfarm land\ns football\ngro tto\nanth i\nãĢ ģ\nà® Ł\nvid ya\njimmy fallon\nൠį\nt zer\ngravit ational\nw thr\nu hhh\ne hr\ntin ker\nti juana\nscran ton\nram charan\nbar clay\nre van\nm si\nka p\nwr s\nwe thenorth\ntor al\nsat u\ngro m\nfac ep\nerick son\nz yn\nse dge\noo dle\nspur sofficial\nds p\nsic ilian\nsoli hull\nrecei vers\nladak h\nhend rick\nther i\npresi ding\nmc guinness\nlitt ers\ngun nar\ngh oul\nwi b\nn tv\nkar o\nfro ck\nb lau\nampli fy\nall is\nul lah\nmemo irs\nkh loe\nintercep tions\npet day\nlo oney\ncon fin\nch ay\npiyush goyal\nfrequ encies\nut z\nevent ual\nwarm ly\nobli vion\nan ka\nta it\nâĿ¤ï¸ı .\ndirector ial\nru lers\nprince s\nmu ck\nstur ridge\ndeu ce\nabri dged\nbagu ette\nun cles\npen du\nmin ding\nforre ster\nav ila\nwall er\nwall street\nment or\nhin o\nhigh way\ncrom well\nfanart friday\nmb i\nco yle\na hi\ntro ve\nspie gel\npay tm\nmcin tosh\njan sen\nnit i\nnash ville\nlen o\nleicester shire\nle gos\ndic t\nðŁĵ ½\nsp ad\nbeverly hills\nsy rah\nsepar ates\nz ain\nun fit\ndra gs\ntan ia\nover flowing\nhri thik\nhaw thorn\nz ani\nmac far\nfi de\nto tem\npe ds\nfundament ally\ncal ico\nsin ner\nj ä\nhil de\nds d\nten ay\nta hit\nmil f\nlie b\ninform ing\nup lift\nra el\nmortg ages\nlec t\nii ii\nguillau me\ncompos ites\nold smobile\nl end\ngar th\ncom mish\nbapti zed\nscorpi ons\nru cker\nbringback our\nalli ance\nthalap athy\ntal i\nsp ans\neri dge\nwither spoon\nlin da\nsky lar\nkor n\nhom s\nÄ į\nsil enced\ncaf fe\nar ty\ndist inguish\nto wed\npun g\njessic a\near nest\nbeau fort\nt ama\nstudy abroad\nsi khs\nnew bie\nnav ratri\nmar ble\nloun ging\nlit ter\ndal it\nso sa\niz es\ngra de\ncom promising\ntr iton\nde tta\nv j\nchau ffe\nspec tral\npowe red\nmontess ori\nartic ulate\nhal ton\nal co\nye y\nmn twins\nacoun ty\nðŁijı ðŁı¾\nâī Ī\nmad men\nkal a\ngru m\nchi k\nati s\nsu me\nakh tar\njob search\nhigh lighter\nbo ath\nâĦ ¹\ntar zan\nlam bo\nâĽĦ ï¸ı\nox fam\ndump ster\npretz els\nmac os\nincl ined\nfac tual\nadverti sers\nshu i\npu ree\nml pfi\nanti dote\ncap o\npa str\nmerc ado\nbut ton\nar min\nag g\nlol la\nhorri bly\ner rands\nchristop he\ntime snow\nmonday motiv\nli ss\nscand als\nmc i\ndispropor tion\nâĺ İ\nsur pass\nsamar itan\nso tho\npu rest\nfl att\ntrivi atuesday\ndelec table\nleop old\nhermi one\nchou dhary\nen rich\n¡ ¡\nsubsi diary\nine qualities\nbachel or\nauto immune\nla kota\ni hop\nad jec\nthe simpsons\nsh es\nse k\ngret chen\nup stream\nhin akhan\ncoper nic\nx tina\nlu g\ntough ness\ne ad\ncli pped\nbi us\nsl v\nfah ren\ndee pak\nca u\nx an\nim mature\ndig ni\nbo bs\nshred ding\nbut tery\naccommod ations\nde ven\nchun ks\nsuper league\nsky bet\nkil dare\nje et\në į\nce k\nwrec ks\npro pane\noh l\ntb d\nquo i\ntrum pp\nmi mo\nreluct ant\nver ne\no ic\nma gh\nar nau\nse ver\nli dge\nstair way\nkicchasu deep\nðŁĶ º\nmach ining\naama admi\not i\nc da\nal it\npan y\ninst alls\nac ct\ne shop\ndi em\nhard well\nfulfill ment\nsc afe\nqu ack\nextrac ts\nswee tened\nfi ghton\nf di\nd inger\nwal tham\nus ur\nrefe rees\nseok jin\ngran n\naf rin\nth n\nsch af\npar cels\nbet is\namar ine\nnom an\nkh tar\nmor itz\ncou pling\nbar ons\nðŁIJ ¸\nà ¸\nsl p\nsad ler\nx ander\ntri ad\nmc millan\nkh z\ndivi ding\nìĹijìĨ Į\ndar yl\nzed d\nle ys\npla ques\nflu ori\ntipper ary\non nell\ndi dier\nlang ford\nim c\nthe sun\nbir dies\nar cha\nye ssss\nt di\ndar ia\ncand ace\nal tam\npal aces\nch it\nsant am\nevent ful\nbook of\nad b\nmon stax\ncre ole\nco el\nâĸ ½\nwe aren\nsten nis\nshe ath\nati sm\ngron ingen\nmlpfi m\nle pre\nwrong ly\nrsp ca\nrendez vous\nacknowle dging\npel vic\nsolic itor\nsla ys\nnue stra\nlo d\nis lander\nfer oci\nfashion show\nra ss\ndge on\nadole scents\nsma shes\nnegli gence\ngrate ful\nved ere\nsw oop\ning l\napol ice\nvand alism\ngan n\njo ao\ndi supdates\nzimbab we\nunder age\nradi ance\nw of\nbour geo\npla s\ncr ani\ngh ue\nwrec kem\nwarran ts\nre form\njim mie\nat wood\nys l\nneil himself\nl bj\ni man\ntan to\nnois se\nver bs\nequip o\nal together\nmam ent\nl ice\ndou glass\ntier ney\npri med\nj hal\nfurn itu\nbraz ili\nv ill\npast els\nn ison\nu ff\nparal ysis\njay e\nim po\nðŁij ģ\nstrate gically\npakistan is\nwas sup\nsuper bike\nthank u\ntru elove\nsha ikh\nisrael is\nvi p\nto g\nli en\nla ker\ngrey hounds\ncul ars\nbian chi\nbalot elli\nar ran\nloo s\nstr ates\nhe bron\nar vo\nsunder land\nthe al\ntomb stone\nsand man\nc pac\nthanks giving\nlove him\nlat ino\nan in\naka if\nĭ ãĤ\ntor quay\ndi est\nalli anz\nðŁĺ ķ\ngolf club\ncl lr\nwal cott\nsch nau\npromp ted\nnomin ating\nlen nox\nval et\nmon ro\nmay ward\ne ph\nðŁĶ Ķ\ninter oper\nr da\nre flex\narm chair\nê° ķ\nstri pper\npor ti\nph arm\nham za\nni reland\nne ue\nh pv\nport foli\nsun burn\nfris bee\nbe al\nbapti ste\nx h\nty m\npr ati\no vers\nhaz rat\ndeser t\nder ry\nus ky\nem mett\nach arya\n)_/ ¯\nshu d\nmay a\nham ill\nra im\nnr c\nfitt ings\ncur vy\nðŁı ĩ\nster ling\nॠĢ\nwal kin\nshort cuts\nmil ly\nast ur\nalpha be\npl i\npe z\nmiss you\nrad ford\nml g\nta eyang\nnotjust lakes\ndu mps\nseren dip\nle ur\nra ving\ne ster\nde priv\nabsc bn\nðŁijĩ ðŁı»\nscar city\no cr\nmean ings\ncap t\nda hl\nfer mentation\nbri oche\nto win\nout lander\nmassi mo\nen cro\nðŁ¥ ³\nbuil t\npo tam\nkir i\ntm w\nmonit ored\nk ites\npeoples vote\ngray son\níģ ¬\nafri ka\na dies\ni vote\ngy ne\ng annon\ndi x\nc mc\nou ral\nfox andfriends\nbel i\nig ne\ngl an\nkatrin akaif\nco politics\nqual itative\np si\nlu cci\ndisc oura\nâĺ ®\nkel li\ngau tam\ncarac as\nreale st\npu la\nin us\nhill top\nmake aw\natten borough\ntw y\nr arity\npeck ham\nma hon\ncorn elius\nclin icians\nton line\ntb i\nparadi se\nka si\ninev it\nfresh ness\ncolling wood\nlun atic\ndefen se\ncop d\nin fra\nwain wright\nsains bury\nalab am\nte ma\nlac o\nchec ker\nreleg ated\ntren t\nstal ks\nhuff post\nbhubanes war\nast ral\nshare your\nprim rose\nhi me\ncat an\nend ment\nen dow\ncle mens\nmal oney\nhil ary\ngame time\nden ise\ncollabor ators\nb wo\nradic als\ngue tta\nici on\nau a\nsnap matic\nsat chel\nexcav ation\nbase man\ns ão\ngn ation\nfel d\nsurve y\nshah zad\nma st\nanirud hofficial\ntru cker\not ago\ngeo graph\nethe l\nâļ¡ï¸ı âļ¡ï¸ı\ns ver\nmu tt\ninternetof things\nancho red\nwh ouse\nbang la\nbal main\nç¹ ĭãģ\nbreak fa\ná Ģ\ntwi ster\nte tris\nca v\nstag s\ng z\nau b\nstor med\nhel ens\nyar mouth\nst asy\ngustav o\nco sc\nvin son\nup p\nsc ricket\nassump tions\napp e\nnu h\nu er\npre mise\nn aga\ne amon\ncoron ary\nna f\nnorth side\nel mer\nro tar\nout lining\nel f\nre surg\nkat elyn\nin can\nhyster ia\nce e\nam bani\npro lly\nĮ ãĤĬãģ\nax es\nsan jose\nrem brandt\nmag pie\neven ly\nscor sese\nqu aint\nf g\nb buk\nindian football\nweare all\nspd wy\npis ces\nec g\nâĺħâĺħâĺħâĺħ âĺħ\npre orders\n: |\nni pple\nsal azar\nju me\njail break\nmin n\nbas sett\nze tta\njef free\nad jun\ntic on\nsan diego\ndrink local\nchol era\nsolic itors\no bo\ncom post\nni an\nwr a\ntre ach\nic ic\nprofession al\ndel ve\nleg ate\nhistor ia\ncro issant\ncon noisse\nnam o\npalli ative\nchem trails\ni ority\nglobal warming\ncomic art\nbehavi oural\nre sted\nli as\ncli mates\nŁ ãģĦ\nrut land\nnou rish\nmenopau se\nhot ties\ndemen ti\nve spa\nmel ville\nanal ogue\ntz man\nstr ung\nim perfect\ngl are\ncir cling\nros berg\nrec o\noc ity\nlo ire\nem be\ndo ssier\nne el\nnan do\nme a\ngal vani\nfin esse\nag p\nberke ley\nasi m\nâĺº âĺº\nquil ted\nish ere\nun matched\npo tion\nfor z\nat re\nselfi es\njuli ana\nðŁļ ¶\nâĸ º\nmel ton\nâłĢâłĢâłĢâłĢ âłĢâłĢâłĢâłĢ\nspin rilla\npur cell\ned p\nat leti\ntony awards\nra ja\npro gno\nmol ten\nstu ff\np ally\nnobel prize\nâĻ» ï¸ı\nspiritu al\nspe ake\nsa sha\nbri um\ntru ss\ncritici ze\nassassinscre ed\nyor uba\nu lo\nfire man\nworkin progress\nef cc\nfla res\nro bot\nhi kers\ncl l\nshado wing\npat sy\nleh man\nc ns\nå ±\nguad al\nà± į\nra pe\nr honda\nparalle ls\nson ja\nlangu age\nland ings\nz ola\ncr amps\nbur ning\napprais al\njol la\nham m\nkas a\ngul ly\nf go\nuly sses\nri be\nðŁĴ Ħ\nib u\neti enne\nbri ar\nfin ely\ncomb ating\ny ql\ngo tham\nwe chat\nto paz\nprimar ies\nl se\niz z\nhel e\ndispon ible\ncy stic\nbel ichick\nth rush\nkansas city\nge om\nsoli di\nred bubble\nby stand\ncambridge shire\npar fait\nast le\now o\nind ore\nstom ping\nsm elly\nðŁ¤ ĸ\nlocom o\nadm itting\nhol me\nclock wise\nmin sk\nmc co\nfor get\nev p\ncam ra\nab ella\nyo tes\nuniversit yof\nmé xico\nsilver ado\nric ket\ncrom bie\npu j\neradic ate\ndeli ght\ny go\nglam ping\nvic a\ndu ggan\ncoun ters\ncf d\nsc our\nreact js\npu ram\nparas ites\nin ki\nvill en\nstel la\nli mbo\nang as\nk cr\nðŁĴļðŁĴļ ðŁĴļ\nvap ori\nmum ford\noli gar\nà ¼\nal oo\nboo ties\nad r\nk elli\ndru mmers\nav ici\nnature uk\nron al\nin trac\nun splash\nle che\ng oma\nel ine\nenvir o\nbi onic\nbu eno\nmi k\nav in\nstar ling\nem powers\ncake day\nboy cot\nðŁĴļ ðŁĴļ\nðŁĮ¸ ðŁĮ¸\nv ach\nm ci\nfractu res\nger i\nsk ing\nexclu ded\nlu ce\nja ve\nig gy\nevi den\naki stan\na wn\nmor als\nluci fer\nha ban\ntumb ling\nsunday motivation\nmo sley\ncaptain america\nsch icago\nthe one\nmo td\nd ts\nðŁIJ ¼\nrep ell\nii i\nlocu st\ngeo spatial\nmer sey\nimmer se\ndesc end\nber nade\nj s\nboat sales\nwin der\ncran k\nsing leton\ncandid acy\nben a\nðŁı» âĢį\nhigh lander\nol t\nk prs\nhealthy lifestyle\nfour teen\nend the\nith aca\ncircul ated\nr ans\npre valent\nha vas\nsplend or\nroo ster\nkalamaz oo\njewell ers\nenne dy\nrou sey\nes y\ncann ons\nornam ental\n// //\nren don\nwin ne\nmol ding\neid mubarak\ncoun tess\nsimon a\nha wa\nfo es\ndu ster\nsb u\npor tray\nmar ries\ngoo dday\ncho co\nachi ever\nðŁĺ¹ ðŁĺ¹\npre neur\ntr amp\ntom i\nn bat\ngarden chat\nfarra khan\never glades\nab ru\nsou sa\nse ce\nhomes wee\nterre strial\nbar it\nsri devi\nol u\nmel inda\nf rick\ncan dies\nðŁĺŃ ðŁĴķ\nqu reshi\nfamily fun\nexor cist\ncardin al\nny t\ndies el\ncu mulus\ncapric orn\nsi ology\nlor na\ndou gie\nan die\nsuper sport\nc fl\nп ÑĢи\nsay ang\npe ek\nภĬ\nlo be\nj em\ning lis\ngg led\nc sn\namne sty\nchu ps\nba es\nsau er\nðŁı IJ\nmongo lian\nen et\nback street\ndr illed\nacce ssing\nce o\nb se\nai ken\npur r\nwor sen\nwhe res\nwar k\ntesti fying\nbu ri\nbla st\naw g\nðŁĵ ĭ\nre defining\nhear ing\nu ci\nc mp\nbon i\ntail oring\nta ji\nnoc chi\nem t\nstephen king\nne et\ncompla ins\ncampaig ner\nluci ano\ntwili ght\nti esto\npas sports\nflo yd\ncathe dr\nna ked\ncaregi ver\nb coz\nade cides\nku ri\nly k\nbr aries\ndren ched\ndisc lose\nðŁĴª ðŁı½\nle blanc\nje tty\ngar ty\nchip mun\nb su\nrhyth mic\nic z\nfri d\nanne x\name x\nsolo ist\nlanc ers\narro whead\nspeci fication\nsimul ated\nna is\ninver te\nbo wing\nwor ship\nf z\nabo ss\nsha q\nì¶ ķ\nchalleng ers\nan arch\naamaadmi party\nãħĭãħĭ ãħĭ\nsuffol k\nso corro\nsn ell\ncla dding\nabsor bing\nshaw a\nparticip ates\nðŁį Ķ\nbook stores\nbak u\nseap ort\nko jima\ngab y\npack ard\nelectr ician\nlet it\nmo wing\nfa wad\nyoung jae\nhot mail\nmen ing\nu rie\nintim acy\ncon ti\n: ")\nlifeis good\nin ciner\ni dri\ncraz iness\njour nos\nfran chi\nbott len\nal da\nff es\nk x\nsouth we\nair a\nclay ton\nsco ti\nf j\nbri ga\nðŁ¤ĺ ðŁı»\ndemonstr ators\ny z\nstor k\nna q\ncasc ades\ntravel chat\nplat a\npad ma\nfran ci\nat tain\nbat girl\nlom bard\nhoo s\nd dos\nneon atal\ndiscla imer\nr ss\nr ant\ndi sen\ntex aste\nso cal\nfrac tal\ncam ry\nstri fe\nsn acking\nmu h\nsant ander\nmor ons\ngra f\npar ades\nhu ston\ndru pal\nmi ento\nkir stel\nhy de\nvom it\nforti fied\nsphin x\nda v\nbir yani\nwin nings\ns baseball\nmer ged\nlovel ondon\nling ering\ndream big\ncar leton\nliveli hood\ndjan go\nastri d\ngri ds\ndown e\nbru ised\ns ne\nscarec row\nhel ium\nf nc\nbi ggs\nan ter\nrestor ative\nem pires\nab del\nlife style\nkiwan is\ncolloqui um\nme en\npr ick\nanti que\nze b\nmi mic\nedmon ds\nðŁijĬ ðŁijĬ\nq ing\npp el\nmc gill\ninterpre ting\nâŀ ķ\nrash ad\ndo ka\nnarr ator\nelectro magnetic\nash by\nsau ra\niran deal\nâģ īï¸ı\nkrish nan\nin di\nff en\nbre a\nos man\nmultin ational\nchi ppe\nrecruit ers\naus biz\np ounding\nre gen\ncur sor\nrefu sal\nmac s\nin ak\nax ial\nwa ifu\nup cycled\nhindu stan\ncas sini\ncarly le\nscrat ches\nre ef\nman atee\neat ery\nðŁĵ ¢\nun condition\nsen pai\non ther\ncomic book\npro sciutto\nde mar\nmi se\nma ge\nfre ec\naye sha\nal der\nandroid games\nley ton\nho ck\ndoor way\nchicagof ire\naali yah\nsw elling\nbi x\n. ðŁĺĤ\nevan kirstel\ntorpe do\nkon stant\ngenevie ve\nma ia\nha user\ndo torg\nhide ous\nfi k\nsp raw\ne ek\nz appa\nwan dered\n\' \'\nra jan\nbam bi\n( $)\nwid ening\ntool box\nsa ir\nillumin ating\npra ys\nout patient\ni w\nday o\nlo b\nsw fl\nsha des\ngu ms\ncoo kin\nko di\ngri ffin\ntraum ati\nste a\nslaugh tered\ngod bless\nair time\npseu do\nb sa\nhau led\nar if\nà¸Ńภĩ\nle l\nwc po\nmil iti\nchar ters\nworl da\nru k\nk gs\ndigital india\nis able\nidyl lic\nesp ino\nmarie tta\ne bo\nteam canada\nab our\nwil ton\nrock stars\nfav ored\nphys ic\nwrink le\ntb r\nd print\nball arat\nad al\nz ey\nðŁĺį ðŁĶ¥\ntom lin\nmt r\npal sy\nfener bah\ntight en\nphil ia\nir oning\nry u\nb ant\nenqu ire\nca ir\nabur ger\ntru n\ngreen berg\nchau han\nir ina\nsh ani\ntrend setter\npre tt\nzaf ar\nalo ve\nv ici\npan ic\nno o\nlu stre\ndisrup ted\nbal lis\nson sof\nmon si\ninst ac\nake st\nëĭ ¤\nkw ame\nhorror movies\ndistric t\nsau cy\nmb an\nar mies\nwith drawn\nmed ics\nloft us\ner oom\nbe kind\nar ns\nall on\nun ison\ndavi ds\ncr at\nnicot ine\nso or\nsm x\non co\ncospla ying\nzombi es\nhar ms\ne ger\nro sy\nmoon shine\nfe in\nce tt\ndu brov\nreg ents\nben itez\nðŁijıðŁı¼ ðŁijıðŁı¼\nste c\nm alia\nprioriti ze\nic eland\nft se\nv amo\nlam ont\nhomo sexuality\nbre es\nregu i\ncb p\nte j\nsky sports\ndeter gent\nsha sta\nde rel\nconserv ancy\ncolori zed\naccol ades\nvis o\nshow your\nnan ow\nbice ps\nus ability\nbi m\ndailys ketch\npearl jam\nstran gest\nmega deth\nbroad casts\nbar ren\nar ton\nchri ss\nconfi gu\nlu res\nis the\ne ul\nrailway ana\nglobal health\ngi anni\nu aap\ns lum\nconsci ously\nab re\nn up\nbud get\nv ada\ne sch\nreal ness\ner ased\nth unt\nbe z\narmist ice\nðŁij ¹\nsh run\no led\ndriver less\nðŁ¤· ðŁı»âĢįâĻĢï¸ı\nwon dr\nsk an\nsal aam\nmother land\nh wang\ngen o\ngang nam\ntw right\nendor sing\nen ic\nador ation\npau sed\npatric ks\ndo cked\nplat te\nff xv\nethnic ity\nauto show\nside show\nafter life\nre located\norphan ed\nfood network\ndare to\nand ra\nsla ps\nv live\nswim s\nre imagined\nmist le\nre vise\nreal ity\nbhar ti\nðŁĴĻ ðŁĴĽ\nlate st\nprou dest\ngra sses\nlan yard\nfresh est\ncarcin oma\nanom aly\nzieg ler\nsum ner\nly rix\ngor g\nis d\nav el\nswild life\nme squ\njohn cena\neuro league\nsab er\nmaster ful\nyar ra\ncogn ition\njacob son\nabo lic\nsir loin\nshuk la\nmoj ito\nsu pere\nst weet\nme z\ne sa\nrudol f\ngur a\nwhere you\ntt m\nwin s\ntrust worthy\nny k\nbra den\ntable top\ngood food\nes on\nbe k\nlingui stic\ngra ys\nch ath\nh cs\nmon i\nde ans\ncu ssions\nch ell\nslo ws\nhe mi\nd app\nshar pie\nboo sters\na os\nstr ack\nse dona\nmu eller\nhard wick\nor nate\nthor a\nsal ud\no twol\nch um\nmi ho\nfor age\nthel ittle\ntear ful\nones elf\nmin dy\nsm g\ngmb h\nemer ald\nðŁĶ´ âļªï¸ı\ntu tti\nrecep tions\nre vising\ni brox\ntope ka\nsal ami\nexpan se\ni books\ndob son\ncli o\nat s\nðŁļ Į\nmo ha\nis ance\nshu tters\nmoo t\njan ine\nmarvel comics\njor dani\npos er\nkenne th\nhy ung\nde ja\nase ball\nspeci ality\neu ston\nclassic car\nhad ith\nðŁIJ ī\nchas ing\niz o\ngros ven\nag lia\nthisdayin history\nt row\nom ile\nhu ar\nby n\nsal ine\ndiv ine\ndemon ic\nty ran\nhan dover\nrevit alization\npa ella\ncryp tic\nse dg\nm end\ndun kirk\nbre d\nwal d\nsport scar\na ard\nwhe aton\nda ener\nk lan\nbr t\nbakhta war\nspi res\nschu bert\nro ti\npoli sh\no se\nag ame\nwonder con\nprote stant\nbo sa\nðŁĺ Ł\nd ü\njoy ride\nger trude\nâĿ Ŀ\ngil a\nv h\ntw a\ntra v\nswal lowed\nstar ve\nla in\nent ren\nrei ki\nsu kh\ncra ic\naz u\nweb page\nkee fe\nhypo the\nhir sch\nhel le\ncamp ground\nw amy\ntra vi\nsha hi\nsan deep\nru i\nhan uman\ndw p\nreposit ory\nno or\nno ff\nun real\np ell\nblack history\nhar vick\nma scar\npay ee\npa sha\ngastron omy\nd ÃŃ\nai g\nrosen thal\nopen day\nembelli shed\nt tip\nsun bathing\ngo pack\nend ome\nï¸ı #\ninvali d\nfinal four\nst fu\nsquish y\nra sta\nmo sch\njam esc\ndie trich\nsel a\nmel b\nel vi\nt dp\nsun i\nsli t\nj ha\nbi za\nspi ked\nl li\nl illard\nvam pi\nsyno psis\naz har\nkendrick lamar\nĮãĤĬãģ ŁãģĦ\nheart less\ncountry file\nair play\narrog ance\npre e\nvirtu oso\nãħłãħł ãħłãħł\nraj u\nle bu\nfor ward\ntu g\ndro s\nmondaymotiv aton\nconcep cion\nthel o\npad i\nlooo ol\nÑĢ од\nit ss\neth ical\nend uro\n__ :\nexpend iture\nmon ste\nmas king\nterri ers\nib is\ne mber\ncu mple\npunctu ation\npi per\nir vin\nade e\nyy yyyy\nflash backs\ncel sius\ndon nie\nbo gota\nben evol\nthe script\nshil pa\npro se\nfin dia\nze ke\nne ko\ndo ves\nblues lyrix\nfro sh\nsowe to\nmp lo\nal ai\nsab i\nraq qa\nwf tv\nstro ller\nian somerhalder\nðŁĶ ª\nan on\nmo seley\n! ?!?\nsta king\nmol y\ncar tri\nc sg\nast or\ntransc end\nma er\nde ux\ncow girl\nsas k\npun ter\nma ken\no ates\nlove tt\ngrow ler\nsag in\nv n\nssi ble\nofficeof rg\ny mc\nsab ar\nfaul ty\nap ha\nak on\nðŁij «\nsnow don\nae w\nraise the\nðĿ ĵ\ngrue some\nclement ine\nsp ing\nlat a\nworlden viron\nmi mic\ncan aria\nbakhtawar bz\nao a\nfal a\nãĤ Ń\navi va\nyou uuu\nthi gh\nla dders\ngu mbo\ntz ky\nfu zz\nplastic pollution\nest ate\nstrength ened\nk ant\ndr in\ncal vert\ntransform ational\nfrigh tened\nmac lean\nelited angerous\near thy\nt son\nto da\nj nu\n.. ,\nmic hal\ni ban\nje ong\nis real\nsim coe\nexclu sives\nblue bells\nben e\nte u\npil sner\npens ke\nathe ists\nm pu\ncartag ena\nðŁĴĹ ðŁĴĹ\nmillion aires\nkk kk\nit ar\nsubscri ptions\nremo te\nma fi\nhin ton\nw cc\nho k\nds b\nab leton\nsevent y\npun ks\ne indhoven\nsh one\nmcfar lane\nlim popo\nempha si\nà ¼\nsin fo\npe tre\nman grove\nch ino\nber tie\nplay lists\npush awards\np af\ndeb bie\nc do\nr ino\nðŁı¾ âĢįâĻĤï¸ı\nfol ke\nbon nar\nth ine\nsl an\nhal ter\nevi e\naw some\nvul tures\nspar ky\nseiz ures\nâľ Ķ\nram one\nine ffe\nal n\npro ctor\nast ra\nthe voice\ngro te\nsci on\ndead line\nam aya\ntain ted\npatter ned\nexce eding\ncross fit\nkay lee\ndrop box\nru shes\ntack led\nmo by\nretro gamer\nn cbd\nbenef itting\nshay kh\nguild hall\ngen try\ndream cast\ndread ed\nbun dled\nth aw\nrevol ving\nn pt\nkylie jenner\nimagin ative\nron i\nover came\nfamily time\nds burg\ncar naval\nrelation ship\nrecogni zable\ncor oner\nho le\nfan fic\nemir ates\nbur ritos\nanaly se\nthin ner\nne es\ngalli poli\nbl r\ncat woman\n-- >>\nau lt\nada ily\nnau ghty\nili o\nsolit aire\nmtv br\njocel yn\narun ach\nrep ent\nsouth gate\nhy acin\nessenti al\nfent on\nand um\nit or\ngo pal\nsl inger\npo sei\naw il\nwi elding\nra ila\neli as\na sto\nà ¤\ntend ency\nstr ata\nker t\n< -\nim acele\nda es\nsti mulus\nhan ley\nfit nes\nec stasy\nlim ous\nha iling\nðŁ¤ Ń\nchis wick\ntar ies\nsla v\npul i\nmoderni zation\nblack mail\nb ingham\nh fx\n+ +\nðŁĩ®ðŁĩ ³\nni v\nwe a\nprofess or\nk off\nbol ster\nsu ave\nsequ ences\npepper oni\nnot te\ndre n\nãģ¨ ç¹ĭãģ\nhs v\no ga\nap tly\nz ad\nexcel si\nrin ka\nmol dova\nmin n\nma bel\nconferen cing\nbas ing\nof er\nob si\nhamill himself\ncare less\nbrief ed\ninhe rent\npar ish\ndub nation\ntown sville\nsar awak\ngee ky\ndoncaster isgreat\nwas abi\ngu p\nphen o\ndra inthe\ncarrie underwood\nble eds\nbbc world\nane w\nalta f\ndul wich\nani ston\nw ti\nsumat ra\ngra fton\nbl n\nme ster\nbode ga\nre go\nes q\nan jo\nsump tuous\nmai sie\nï¿ ½\nwil t\njak ob\nel vis\nse pul\nmu ster\nair pollution\npresident e\nhappy monday\nexten sively\nfl ondon\nt ls\nplay ing\npe ed\ndin ho\nvar dy\npi ka\nn iro\nau cus\nðŁį ¦\nnu ll\nel ondon\njuvent us\nimag ines\ndis ab\nlit o\nd ura\nwork places\npromo te\nmc caf\nwood work\nwaw x\nà® ª\ntt ino\nshar i\nsem per\nbetter together\nðŁijĬ ðŁı»\nze bra\npon dering\nen chil\nho m\ncosm ic\ntan z\nmo cked\nec cc\nath ed\nabo lish\nprop eller\nparis agreement\nassemb lies\nindu stry\nfraudul ent\npe sa\nchang min\nax x\nðŁĴ µ\nirr ational\ncu sa\nramad han\nocta via\non elove\njac ki\nbar ak\ntaxi der\nseri ous\nnathan fillion\nmc en\nch k\npo part\ngrav ity\ncopp ola\nreading fc\nillu sions\nj ig\nww x\nre sh\nex porting\nbuzz ard\nâĻ ¤\np cm\nlan apar\nko s\narom as\nantal ya\nww dc\nven a\nphil a\nball in\nðŁij Ħ\nquin ta\nma o\nf ery\neigh ty\nsentim ents\nsafe guarding\nr wa\npu ffs\nluc ille\nde cath\nsl u\nnu gent\nde ter\nbraz il\nze iss\nsuper bowl\nsubsi dy\nalter n\nhi dalgo\nenz ymes\nä ½\ntag ne\nhair dresser\nadri en\nwalk out\noppo ses\ncan tina\nbed side\naf an\nðŁĶ Ĺ\nprophe tic\ndan es\nun successful\nsuper charged\npk k\nexem ption\nhart le\nsecu lar\ncli pping\nbr s\nunited way\nc net\npat chy\nha gan\ne en\nâļ ľ\nvar a\nsym pathi\nnever trump\naffir mation\nom f\nny cfc\nma ja\nsur ro\nkeer th\nup scale\nsandal wood\nmon archy\nkno bs\nå ĭ\npo tholes\nhunger games\nter races\nna sir\ncoun sell\nwelcome to\nwa q\nse aman\nm ita\nstun ningly\non theroad\nin ability\n) !!\nbon go\nant v\nsp ut\nworldenviron mentday\nresu sc\ny td\nfi m\neun hyuk\nsa chin\nrose anne\ncler mont\nape c\nam ina\nv ening\nn antes\nal most\nsin us\nex as\nty l\nti en\nple ad\nlanc s\nbur naby\nre k\njo om\nobserv ers\ndisco graphy\ncl g\nâĻ ¦\nsn ack\nr ti\no ily\ncrystal li\nbru te\nweb development\ntopp ings\nla f\nan is\nad der\nreli ving\ncar lin\nbattle of\nwe g\nsyri an\npon t\nn dc\nlagh ate\nyu ma\nsp p\np iti\nro bbing\nmart ing\nrey kja\nraj put\nnc ds\nkie wicz\nâĢ¢ âĢ¢\nvam pire\nsubstan tially\nopio ids\nnepal i\nk line\nar oo\nunder stand\nlit t\nu it\nthro mbo\nsar ies\nqu ot\nb alling\nt tr\ns gh\nphilip p\nbr ant\nac l\nm ello\nwhit taker\n. ;\ndefi ant\nb gc\nrepl ying\nmir ren\nmetamor pho\nsch wab\nbul ge\nutili zed\npick ering\npar don\nd sa\nภĪ\ndoo ley\ncumul ative\nÐ »\nur gency\ne mir\n+ /-\n¦ Ī\not as\nâı ³\nstation ed\ngrape vine\nar ac\nkaran johar\nf ancy\nsau l\ncoo gs\nlgbt q\nا٠ħ\njav i\nu mmer\npl l\nden is\ndai pur\npu ffin\nlewi sham\nfand om\nco pe\nves matter\ns ve\nhel pless\ndeo dor\nostr ich\nkaz an\nfriday the\ncon dor\nv x\nsophom ores\nrob les\ncu tt\ncli mbers\në¦ ¬\nsle g\nsn f\nmac ys\nhydr ating\ngrou pe\npo yn\nmou lin\nhg tv\nlmfa ooo\nsulph ur\nasdfghj kl\nannab elle\nhump back\nbra ved\nviswas am\nmulti purpose\nhu midi\nescor ted\nbarb ican\nf ad\ncor sa\nðŁ¤ «\npi ppa\nhere to\ncan y\nser gi\nor cas\no vie\ned ou\ns any\nglob alization\nman cini\nfood truck\nf is\ndefi brill\nsch re\nsma fia\nlove wins\nla ut\nk aka\nhol lande\ngame on\nresurg ence\nout side\nolympi ad\nint an\nabstr action\nrapi d\npal om\ncal le\njas min\nattack ers\nswag g\nmit ra\nky lo\nà® ²\nher mitage\ngor do\ne ira\nso sfam\nroll out\nexc ite\nsy nod\nmer rill\nc als\nas sa\nliveli hoods\nju ve\nthe black\ngopack go\nant lers\nalban ian\nwool ly\nqu iche\npuri fication\nare th\nsmar thome\nne k\nall blacks\nmex icans\nis m\nger ms\ncomple xion\nmar ck\nu shi\nðŁIJ IJ\nchar l\nca stic\ntill erson\ngiuli ani\nbiode gradable\nmal bec\nbo is\nju bil\nim es\nr ame\ngene tic\nesp nu\nch ley\nso ho\ngo pher\ng sc\nbuu ren\ncu be\nbridesma ids\nwebin ars\nto e\nmani pur\nviol ently\nnotic ias\nex changing\nchi ev\nreplac eable\nmuay thai\nbu ss\nsp il\ninstal ment\ndiv ya\ncait lin\no lim\nfil tering\nwhirl wind\nsta red\nprior it\npr am\npompe ii\nmono logue\nk ite\nbu ka\nâĢ¦ ..\nvac cine\nbre ro\nwoz ni\nsol ent\nre ferr\nmy rt\ngridi ron\ngalatasar ay\nfro ze\nclare mont\nðŁ¥ ĥ\nvictori as\nssel dorf\npa stures\nnet neutrality\nch or\nðŁij ģ\nಠ¿\nwe ho\nsymp tom\njo sel\nin ous\ndragon con\npower ball\np te\nfour thofjuly\nec la\near buds\nwhere abouts\nsalt life\ndepriv ation\nch ter\nwi ggle\nsyste m\nps st\nch az\nd any\nri mo\noax aca\nlanapar rilla\nbarcel on\nmelanch oly\nway back\nho tro\nn si\nl illy\nkur o\nja han\nintellec t\nboard game\nðŁı Ĭ\nsneak peek\nk prc\njail s\ncand el\nzan zi\nmor timer\nstar ch\nra gs\np fa\nlong live\nk art\ngir ona\ncro cker\nchristop h\nprecau tions\nwar ship\nper m\nparen t\nvan gogh\ngif ford\nallegh eny\nra yn\nut m\nsten cil\nrec alling\npen ney\nz azzle\nìĥ Ŀ\nhin ds\naren as\nnu ev\nlaw ler\ngu in\ndo this\nðŁij ķ\nì¶ķ íķĺ\nwe g\nti b\nri din\ncomplex es\nturbul ent\npe sos\nde marcus\nvall arta\nsam sun\nkis ses\nhein rich\ndeport es\nwil ms\nur d\nthen ext\ninki gayo\nho wi\nfir sts\ncarri age\nclean liness\nmas war\nis ch\nax el\nsi zzle\nroad house\nfr ans\nent ourage\nco bble\nboo th\nbenedic t\ntal on\nfc u\nyear ofthe\nray on\nraider nation\nfo yle\nko val\npi anos\nl pg\nbur mese\nman ure\ngeo caching\ncosc ino\nb np\nfer ra\nstro phy\nmar ais\nce es\nlegen dof\nkat niss\neno ch\nav ed\nyou know\nd prk\nðŁĺ¢ ðŁĺ¢\nsp un\npro st\nsor rows\ncent red\nke a\ngal icia\n? ðŁ¤Ķ\nÑĢод а\nbou chard\nðŁĴĻ ðŁĴľ\nyu i\nseed lings\njon ah\nreco vers\nny rd\nboard room\nsu ma\nmy japs\ntun g\nsha i\nir gc\neli o\nwag ons\nka shi\npolic emen\njohn nie\nale coscino\nshop ify\ndot ted\nde tri\nva w\nto fficial\nin your\nchal mers\ntrac ed\nno vi\nby es\nari el\nnipp on\nla pel\ngri ez\nb gs\nfool ing\nd ita\nvijay sethu\nnm wx\nas ot\nkr anti\nhel m\nve di\nsic kest\nmo chi\nk abo\nshru bs\nhe red\nb sp\nsq m\nham r\ndul kar\nanth a\nnr f\navoid ance\nat en\npubli x\nbe arers\nnas i\nha p\nh ells\nðŁĸ ¥\nภ·\nthelast jedi\noh wx\nðŁį «\nwa hoo\nthere se\nrec aps\nss nhq\nbird photography\nv ay\npet ti\npau lo\nbel vedere\n( *\ngr l\ndu vet\nc pec\nsa it\npor sch\nmeas urable\navi ators\nfre mantle\nbre en\non om\nme and\nlife saving\neu ref\nen don\nembar as\naira sia\nel is\ndun kin\nstar magic\ns ill\nporto bello\nki efer\nex e\nmu ted\nãģ ¦\nwe thepeople\nlogi a\nliber al\ntheforce awakens\nmin ed\nhaun ts\nfreck les\ncare taker\ns india\nâķ IJ\ndev lin\nlist on\ndirection er\noh n\nfi garo\nem manuel\ndu bois\ncl ones\nbru ise\nðŁİĪ ðŁİī\ndisin fe\nder matology\nas r\ns watch\ndis comfort\ntam anna\npi day\nmack en\nk atic\ndelu sional\nshaw nee\ngu d\nal bino\np ali\ndin gh\ncucu mbers\ncoffe y\nanticip ating\ntreas ured\nweb summit\nshel tered\nsav or\npedago gy\nm gs\nsh ma\ns bu\nden ali\ncam pos\nbubble gum\no ir\nle aps\ny ler\nr one\nsansk rit\nmin t\nmeat less\nfuturi st\ndu de\na vel\nprote sted\nsqu ire\nz aki\nsz n\nhar court\ncycl one\nbour dain\ngather ings\nd ant\nadvent urer\nparag on\nalt man\ndd ing\nban erjee\nsnorkel ing\nmother well\nmis sy\nen der\nglo ws\nki wis\nchick pea\npor o\ne fron\napp t\nu y\nspeci fied\ngab by\ne strada\ncom bos\nbour bon\nvin i\nvar un\nsteph ani\nkey words\ncar vings\namit abh\nwr ought\ntw al\nre els\nclu bbing\nubi quit\ncri t\nambed kar\næ Ļ\nprun ing\nvaccin ated\nboe ing\ns ks\nlo ona\nhypno sis\nedel man\npho l\nhe w\ncolo sse\nmckin sey\nu on\nto te\nsacrific ing\nox i\nn ang\ne mu\nпÑĢи ÑĢода\nm th\nkers wednesday\nargu ed\ntimel apse\nris king\nregul ating\nni gh\nlikeli hood\ncu bic\nau ction\nrein for\npi stor\nno ses\nye l\nsnu ggles\npe i\njean ette\nta ku\nri th\nguy z\nภŀ\ny te\nver ted\npay soff\njau regui\nhoo ligans\nprocedu ral\nmi b\nhar dy\nel eng\nchec kers\nall ine\nthe met\nprou dof\nkeerth yofficial\ncollabor ator\nni u\ninfl icted\nadv ani\nre twee\nmemor iam\nf icial\nti ghter\nsal em\nre viewers\nbr ics\nben digo\nam ell\ntur kish\nsush maswar\npaul son\npal awan\nmol lie\nstitch er\ns burgh\nir u\nhay dn\nen ers\naro a\nu zzi\nsaraj evo\nhel a\napol lo\nnine ty\nvac a\nsp on\nvent u\njel ena\nhei fer\navo ids\nsp ine\npri ze\nmar ist\nre creating\nme de\nwoo den\nfind lay\nro fl\nn di\ncompreh end\nyu go\ny ü\nto work\nu fos\nson ar\npi ston\nrecor ding\ntent ative\nart forsale\npel lets\nfre do\nÙĪ ر\nmu ses\ncustom ization\npro found\nis ner\nide ally\nsi am\nplan kton\ncm dr\nman ger\nfran ken\ncustomiz able\nठ®\nwalk away\nswi vel\nvast ly\nno ton\nlex a\nex moor\nz as\ntan te\nreduc tions\nlol ly\nhip sters\nbenef ited\në ²\nww www\nmascul ine\nfi ji\ndre y\nph ill\nane ous\nnic ol\nmen dez\ndisapp ro\nch ner\nthrough s\nshen mue\neast man\nðŁIJ İ\nyu ck\nunder tale\nre ys\ngo beavs\neng en\nc na\nmer r\nbir k\nãģ¨ç¹ĭãģ ĮãĤĬãģŁãģĦ\nâĥ£ @\nyn na\nste ed\noffen der\nat um\nvani shing\npresi denti\nlove them\ng nocchi\nfri ggin\nper il\nmad hya\nag ne\ndee jay\nmar nock\nm tb\nfold able\n@ ___\nstand re\nbron x\nbow ski\nfin ite\ncro ckett\nb sf\nge tit\nseren awilliams\nmir o\nignati us\nsla y\nrin se\nfon due\nsel dom\ns more\ngan i\ndy ce\ndmit ry\ncru mb\nlate post\npri mark\noh ana\nflor als\ndo a\nremembrance day\nd ds\nazi one\ntoon ami\nair port\næĿ ±\nth ad\nfi st\ndine sh\ndr who\nad words\nadmi rer\npro je\nkyrgy z\nà «\nmanife station\nle wan\nj ic\nthi bau\nle ased\nvan ity\nnouri shed\nnever theless\naug mente\nfu elled\nche ad\nwil shere\nru di\np z\nmy co\nmor ro\nherbali fe\nhardro ck\nde man\ndre ality\nsp ades\nce vic\nbha i\nbar on\nultimat efan\nhou news\nto bi\nstru t\nke el\naffili ation\nthe masters\nsm al\nhu e\neste ban\ncon v\nom nic\ndatab ases\nco v\nter ti\nst g\nsnoop dogg\nmetab ol\nleth bridge\nðŁı» âĢįâĻĢï¸ı\nyear ling\nresidente vil\nnws l\niy aki\ngriez mann\nc ous\nðŁĵĿ :\ntor ian\nsam i\nðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥\ng are\nalli ances\nwhit field\nwe ther\nrefin ing\ncoy i\nkra ken\nðŁĺĺ âĿ¤\nsingul arity\nlil i\nh ns\nbol dand\nwaw rinka\nmisogy ny\nlo vers\nc q\nb dg\nad ona\ngar ter\nwomen of\nsc d\nrecogn ising\nmun a\nstr ou\nsign alling\nlare do\nhell boy\nalek sand\nun available\npedi atric\nas in\nmer ia\nri shi\nfuturi sm\nw ye\npolari zed\ne we\npro pel\nin forms\ncre ase\n~ "\narti ston\nlike for\nheidel berg\ner ra\nlife in\nlen ny\ninter rupt\ncohe rent\nca z\nvick ers\nle veled\nf bs\ncab ins\nbu mmed\napost les\nwe h\nten don\nsouven irs\ninfu ri\npier ce\nasse t\nm las\ngo th\ndi ggin\nann as\nyl or\nth waite\nsw el\npan era\nmur derers\ncroo ked\nbs go\nac u\na on\nre an\none of\nko hl\nbloo dh\npest icide\nlost dog\nfle xing\nëĤ ĺ\nsu pra\neter nally\nðŁļ Ļ\npa olo\nol an\nmom o\nis elle\ncaptain marvel\ns lou\nmistak enly\nakhi lesh\nmer t\nil inan\nbu on\nbal kan\nmir ro\nmill en\nder ail\ndam on\ntit i\nbi os\nre don\npic ard\npar te\nðŁ¤ Ł\nØ º\nson ics\nfir sth\ndd c\nveg ans\ntur ban\nni gan\nlot tie\nlyn don\nstar buck\npink floyd\nlife styles\nam ara\na she\nr sc\nval a\nsm er\ncw gc\ncli ent\nbuen as\njag an\ncoo ps\nðŁijij ðŁijij\nspeci alizes\nsnag ged\ng lar\nben net\nwildlife wednesday\nbow den\npi k\nart in\nempor ium\nar l\nre ba\npas ser\ndisappo ints\nadditi ve\nâľĬ ðŁı½\nbay er\nmissou la\nha skell\ncomm ences\nni x\nne man\nexplo ited\nplastic surgery\ncc d\naso cial\nvo t\nsie gel\nfro ome\nkap am\nfar a\ne ha\npro bes\nmw f\nmeet ing\np bb\nak ins\nmistle toe\nkingdom hearts\nfor kids\nec r\nbal e\nescor ts\nadidas originals\nk wa\nk ts\nhallo ffame\nðŁĺį .\nwag s\npot ted\no wing\nhoney comb\nhe fty\nuro logy\nmer le\nb pd\nstri pping\nre ich\nk state\ngu ay\nyon ge\nshak ti\ng loom\nbat t\nson om\nn ery\nel ba\nblan ks\nhel le\ntriple ts\nbom bay\nak arta\nab ia\ntransm itted\nrol f\nja is\nangular js\nfi erc\nm ss\ntrac e\nॠĩ\ntom bs\nold man\nkom bucha\nfo l\ne health\ncere als\nare lli\nin ari\nðŁĴ ©\nwo l\nliber ties\nfa wn\naf firm\nnun avut\nhyster ical\nk drama\nart es\nâĢ¢âĢ¢âĢ¢âĢ¢ âĢ¢âĢ¢âĢ¢âĢ¢\nvalent in\nman slaughter\ngal es\neo in\nenergi zed\ndel s\nwith draws\nst les\nsar castic\nram esh\nincredi bles\nlock hart\nya wn\nultimatefan live\noooooooo oooooooo\nmu en\nguru dev\nte er\npe eling\nnew snow\nlingui stics\ndirec tv\nag end\nuni lever\nru ger\nhan dedly\nero se\nli mel\nthe c\nroyal ties\nfini shers\nnr g\nm gt\nfid get\ncom ps\nbac on\naggre ssively\nab it\nch â\ntar de\nslu gger\nq anda\ngre ening\nd ats\nensla ved\nspec tor\no ye\nfre ef\nb hand\nstop brexit\nmis conceptions\ncav a\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺįðŁĺį\nmultit asking\nhou sel\nferre ira\ncen time\nank les\njo dh\nhel ly\nfro me\nout tuesday\nnar nia\nbal aji\nl bloggers\njyo ti\nðŁį ĩ\nlan cia\ncap ri\ny ap\nnat ash\ndown fall\n." âĢĶ\nà ®\nligam ent\ncoat ings\nai ded\nhi ko\nfall ing\nencryp ted\nyeg food\ninfringe ment\ncu di\nce p\nðŁĺį ðŁĺĤ\ntra d\nsuper rugby\ned win\nwh iche\nvi meo\nlay ne\nin vigor\nhe he\ndubrov nik\nbie ber\nu tr\nsham an\nop ers\nham ill\nen ig\ndi f\nar um\nscrap book\nmin h\ndiver gence\nmckin non\nlife time\nguter res\nwil le\nple as\npatt y\nmic ron\nk z\ndom aine\nru sher\nm ds\nches ney\nscrew driver\nâģ© ,\nsle dge\nhau er\nchan a\nstam ina\nsprink ler\npl n\nhe ff\nbol ton\nom on\ncar rington\naccor dion\njor ge\ninter ception\nin puts\ngu ll\ntran scription\nvanu atu\nit ical\neth os\ntic h\nspac ey\npee king\nu mi\nha ger\npsycho tic\nilli an\nilli a\nbonnar oo\nan ese\npu c\nlaghate parth\nen hall\neconom ical\ndre dge\n% -\nu we\ntu bular\nscoun cil\npe asants\nfl er\ntumb ler\nhe p\nford ham\nrow ley\niniti als\nev asion\ner nation\nplu gins\ncoch ran\nc attle\nacid ity\nðŁİĬ ðŁİī\nre grann\njump man\nef ace\nx ma\npatri archy\nesco bar\ncristi an\ntip ton\nnu eva\nhack ney\nback seat\nkill arney\naid an\nsta dion\nsimul taneous\nida ho\na je\nu th\nfigu re\nclo s\nbur k\nvolun tar\nrec ite\nmacfar lane\ncur few\nbou do\nw gn\nsti x\nsla p\nscrat ched\nphilli p\njour ne\nex pelled\nwa z\nu ke\ntati ana\nou e\nho pp\ndimit ri\nðŁĵ £\nmato logist\nelectri fying\nblu ffs\nbill smafia\naz cardinals\ny aa\nx mas\nshar a\nr ith\ng ills\ndre s\nbar ton\nauthori zation\nimperi alism\nhome of\nto do\nfoot path\nband width\nvisit spain\nmoh sin\nerup ted\nmi ki\ninsig nia\nmike l\nss h\nger a\nbank holiday\naw an\nt weak\nstar craft\ne al\nconstruc tion\nskelet ons\nle ep\nine m\nbar clay\nship wreck\nmonsi eur\nyo h\nron t\nform ative\nser o\nle p\nhorse man\nhoo sier\nhaz mat\ncylin ders\ncen ti\nðŁĴ¥ðŁĴ¥ ðŁĴ¥\nre em\nna ire\nmus ically\ngras shopper\nest onian\ntermin ology\nro main\nblogger rt\ntox in\nstan ce\ncultiv ated\nan ast\nðŁIJ į\nshi mano\ngo pher\nene i\nrecycla ble\ngam ification\nfight for\nc q\navoc ados\nke ys\neli ke\ngly cer\nshak ur\nmobili zation\ngal ley\nexpla in\nex changed\npe th\nobe dience\nilla ge\nen nis\nãĥ ŀ\nwi v\nwalla bies\nma ar\nig ers\nfin tech\nfin alized\nwo j\nmeaning less\nin field\nonna ise\ne et\nbron te\npass ages\nðŁij §\nstrick land\nnorthern lights\nlom ond\nh tc\nwr ay\nshi fter\ndi alog\nðŁį į\n>> >>>>\nte atime\nste ch\nsic huan\nqu ill\nfran ca\ncomple mentary\nbar rington\nmarcu s\nmal am\ngoo oo\nfor sa\nelec tra\naf s\nâĹ Ĩ\ntri fe\nsn azzy\nfo lia\nand olan\nafter dark\nwood son\nstra de\nlitt lest\no gun\ncon wy\nco wards\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤ\níĬ ¸\nse ul\nmur phy\ndun ks\nkapil shar\njo achim\nwom ack\nequal ity\naver ages\na ine\nðŁ¦ Ī\ntac ular\ndis ability\nu ked\nmid century\nbar thol\nteas ers\ntab ern\nnj caa\nsp out\nop i\nku bball\nbl om\nso ar\npopu lism\nmeth yl\nðŁijĬ ðŁı¼\no spre\nalo ils\nðŁĵ ĸ\nðŁĮ ļ\nx er\nsp illing\npubl ica\ncar dam\nadi sh\nsa cha\np kg\nbu da\nlyric ist\ni bc\ngru mp\nho ver\nhal ep\nanti body\nanem one\nâĻ¥âĻ¥ âĻ¥âĻ¥\nm cl\nlitho graph\ncc u\ns fest\npath ic\ncalli ster\notta wa\ngun sn\nrut ger\nhali but\nen vision\ndifferenti ate\nðŁļĢ ðŁļĢ\npir an\nlat el\nuc n\ntrou bad\nra ine\nfierc ely\nlearn english\nlea se\nwex mondays\nem it\ndray ton\nbur rell\nscuba diving\nhol ler\ndr u\nclo cked\nw ral\nap ro\ntrans lucent\nw bo\npatri arch\nmo ja\nlan nister\nfish ery\nne derland\nmil dly\nmi rai\nma ko\nja p\nðŁĺ©ðŁĺ© ðŁĺ©\npro statec\np anna\nar ama\nunder taking\ntomp kins\nne op\nsoli ds\nsav oury\ne ames\ncut lery\nwood bridge\nsteam er\nri zzo\nwild cat\nrat na\nlamin ated\nkin eni\njal ap\nai des\nacknowle dges\n?! ?!?!\n! ðŁİī\nw afc\nmag gio\nha ves\ndar je\nof i\ngr il\nv asi\nbru x\nmo hd\nfake speare\narn old\nr mb\nfor be\nwal leye\nro di\ntherapeu tics\nstrate gi\nob ste\nmu dder\ndownload able\ndd ings\nd ca\nasi angames\ncampe on\nappropri ation\nth century\nram atta\ndra ped\nbul lion\nmu c\none x\nse greg\nophel ia\nbod ily\nâĿ¤ ðŁĺį\nwi zar\nte ased\nade my\nto id\nsur a\nlazar us\nsn ickers\nma se\nlo h\nbow ed\nbibli o\nx change\nhar lan\ngho shal\nflavor ful\nbha gat\nalle z\nwhiche ver\nten stein\ndisc er\norgan iser\nmt g\ndream liner\nt se\nhok kaido\nmo k\nindulg ent\nhick man\nblin ded\nal yn\naaa ah\nsp ool\nlough borough\ninter pret\net v\naristo tle\noptimi zing\navici i\nmadu rai\nju li\nnaw az\nmat chups\nab ide\npaint ing\nw elling\nvel i\noctag on\nin scribed\npo king\nplac er\nlife cycle\nkili g\ng sp\neli ves\ncle ments\nna sheed\nme sut\nincarcer ated\ndist illed\nwal ang\ndelic acy\ndel gado\nche z\nch ita\nad ero\ntu x\npati l\no do\nabh cosmetics\ntv c\np bc\nin accurate\nhardwork paysoff\nball er\nquot ation\nmerchandi sing\nga stri\ndefen ses\ndro gba\nbex hill\nban kno\nwin ona\nsi eg\np gs\nhahah ha\nagu chi\nsu bram\nmirac le\nde sch\nli bre\nba cher\nent ine\nbbcra di\nlou dest\nr ps\npi erc\nfr yer\nstorm trooper\nrafael nadal\npas co\nexhau stion\nepic onetsy\nrc tid\nkel lie\nga ines\nd bz\nsm riti\ns bridge\nlim ited\ncla w\ntechnic al\nbio graphical\nado red\nภ°\nexclu de\nac adia\nkey boards\nfur man\nso ca\nsur u\nni ps\nsw aps\nserver less\nrun e\npu ffy\nnorth ampton\nnish ings\nhen der\ncartri dges\ngun shot\nðŁĵ ¹\nfil ament\nrespon dents\npey ton\nmountaine er\nmer ging\nlife span\nintimid ation\np afc\nnl wx\nexpan sive\npur r\nf ck\nca e\nat ti\ntele thon\nso hn\nmend el\nlo pes\ndor i\nun broken\nte red\ntast ings\nin active\ndisin tegr\nt assel\nshare the\npi ano\nis lay\nair space\nz awa\nricci ardo\nming ton\nfresh er\ncur ry\nre vs\npharo ah\nh mv\nexhilar ating\nwh oo\nlin kin\nkri spy\ncompeten cy\nste wards\nne bu\nkat su\nad mins\nbaz ar\nas ar\ngiving back\ns summit\nsong z\nlin us\nraj kumar\nfarm ington\nfanta sia\nðŁĺ´ ðŁĺ´\nso bri\nlis se\nbarry more\npri sm\nblo b\nsen ew\nmono xide\nexp ire\neigh teen\ndi pper\nxi ao\nkil t\nhin ch\nbbc sport\nbam boo\np ter\nex al\nðŁ¦ ĭ\nham lin\nexpe ditions\nstar gazing\nfood security\nwy lie\nul f\nst ingly\non storm\nlo eb\nbro ome\nbn ha\npancre atic\neli ve\n!!!!!!!! !!!\nther apper\northo pedic\navengers endgame\nantit rust\nìļ °\ngo te\nom d\noff side\ngy llen\nwin eries\nwhite water\nad l\nlu pita\nexce eds\nconsi sted\nchew bacca\nash leigh\nnhl jets\nis san\nsh ld\nhay at\ncran berries\nðŁ¤ĺ ðŁı½\nrock the\nspring training\nfall out\ndairy free\nwa j\nun decided\nso wn\nrc n\nnorth wales\nhtt r\nfu mble\nd its\ncomp elled\npopu list\nmin ted\nblan chett\n. \'\'\npro pulsion\nm illa\nau berg\nher tz\nh ta\nu daipur\nserendip ity\nazte cs\nals ace\nðŁIJ ij\nlu n\nsho es\nchar li\ngar za\nðŁĴ Ł\npro biotics\nfox tv\nol is\nmi ff\nloc alized\ndiffu ser\nsi gue\nfun ko\nrend ous\nðŁĴ ij\njeky ll\nha bib\nfre ya\nfjor d\nex porter\nto sa\nstore day\nmaj id\nba the\ncham paign\nðŁĵ Ĭ\nder ma\nh ittin\ngor illas\nemo te\nac ic\nmad ly\nlland ud\nkru eger\neleven th\nash raf\numm it\nat as\nper sie\nmo tives\ni ona\nfinger tips\nss m\npon te\nbri g\nrb is\ntu sk\nps vita\njor dyn\nci el\nbas ket\nare d\narbitr ary\ngo ed\nchron o\nsand box\nperforman ce\nna ke\nant our\nvas quez\nquad rant\nmat tis\nìĪ ĺ\nsa har\nnumis matics\nma this\ntr ams\npot w\nas quez\n? !!!\nthro b\nof life\n_ !\npan tone\nmcil roy\ner u\nma sto\nendu red\nco vent\nab hi\nphysio therapy\ncivil ized\nant asy\nsnap dragon\non screen\nmicro bio\nl cc\ndi mple\nsl ough\nma ven\ncol m\nvillar real\nor p\nfr ye\nbar u\nv tg\nperio dic\nconcor de\nchildrens books\nym ru\nre mark\nje w\nu tica\nseclu ded\nrogue one\nag li\nwhy we\nro bu\nnur sing\nlu ster\nautomobi les\nic um\ncl i\nsagin aw\npean ut\nec ra\ntransp ho\nbl ins\naw wwww\nâĻ¦ ï¸ı\njere z\ninst ances\nsy on\ns de\nwp xi\nrob ben\nman x\njourn al\nerne sto\nbelle ville\nas ur\nwal rus\nh j\ncab le\nblizz con\nbean ies\nvic inity\nte igen\nta ire\npa v\nnavi dad\nextr ater\nbun gie\nbbc papers\nalgon quin\nzanzi bar\nout fielder\nmer ced\nm q\nkon ami\nsho ton\nhor rendous\nad vo\nspoo k\nnbc sn\ntu tors\nen tos\nsur name\npay ers\nmul der\nbe be\nradic ally\nbu eno\nre brand\nit ching\nfer o\nzo u\nla i\ngon g\nweather network\nrick son\nrecon naissance\nf sc\ndifferenti ation\nbe stin\ny q\nst as\nlon gre\npro fan\nmar ac\nopol is\nba its\nab se\nsy r\nph us\nu don\nschizophre nia\nreg gi\njen a\ndeto xi\ncom plac\nz b\npr t\nibrahi movic\nbm j\nseduc tion\noooo h\ngonz alo\nw ham\nsha p\ndeser ts\ncallof duty\nðŁķ º\nphoto booth\nbri m\nsi en\nscri pt\ncas par\nline age\nx ero\nmay bell\nco ta\ncarls bad\nðŁĴĥ ðŁĴĥ\nim ba\nthe car\nlaw x\nil k\ng ana\nsli d\nma halo\ng ant\nenri que\nte i\njo ck\nbla de\nh la\ni hs\nwest on\ntrans it\nau bam\nlone some\nkobe bryant\nfun ky\nv andy\nsh aka\nan an\nperson alization\nrede emed\nhat ter\nday s\npar ac\nliving stone\nfor man\nde mar\nðŁijıðŁijı ðŁijıðŁijı\nper sia\npe der\nðŁĩµðŁĩ ±\nreli ever\nith appen\ndc p\nden burg\nÛ Ĵ\nk assi\nun pleasant\nij u\nfar o\ncar mar\nke ren\nha u\nscot tie\ns bury\nr sc\npistor ius\nmp ire\nmo at\nmar uti\nlion s\nback country\nrash ford\nharas sing\nze etv\nt la\ntor so\nsau d\nent ang\nef abz\ntoshi ba\nresi des\nâĿ ŀ\nr ct\nmohan lal\nmemor andum\nhor ner\nbon neville\ng sd\nexoplan et\nblasphe my\nam et\nðŁĴľ ðŁĴĽ\nspo iling\nma as\nka sey\ncoim bat\nðŁį Ĵ\ntu ske\nsu zan\nstill water\nmit z\nkeep the\ngosp el\ndum best\ndistr actions\nch lori\nãĥ ī\nsophistic ation\nmm u\nlithu anian\nbell ingham\nðŁijĢ ðŁijĢðŁijĢ\nstrongh old\nmon aco\nk ad\ndog sofinstagram\nðŁij Ļ\nwest ward\nsedi ment\npal met\nko de\nki do\nnom ads\nff ff\naugmente dreality\nðŁĺĺ ðŁĴķ\nupro ar\nty rant\nsty lus\nsli e\ndeli rium\noccu pancy\nhat t\nhair stylist\near tist\nspal ding\nnever mind\nread able\np met\nfac ts\not to\nshe im\nsch am\ngo thenburg\nex it\nty n\ntam worth\nroof tops\nmutu ally\nj mu\nfis k\ncun ning\nre news\nme tic\nan tho\nmcel roy\ncon tre\nab ank\nmi les\ndeser veit\ndear born\nab ir\ncruci ble\ncharacter ized\ntahit i\nmur cia\nche tte\nuni vision\npres se\nlove e\nim pun\nast ana\na au\no vs\nloo sely\nell ing\nechel on\nconnor s\nn th\nty ch\njim bo\ncor don\napp reh\n. ðŁĺį\njiu jitsu\nacol lins\nsushmaswar aj\nstrike outs\nproto types\nascen ding\nargent inian\nren ner\n# \'\nj y\nðŁĶ¥ðŁĶ¥ ðŁĶ¥\nnanop articles\niz ers\n! ðŁĺĤ\npor cup\nedwar dian\ndx b\n.. !!!\nmil king\nf ours\nthe d\nðŁ¦ ħ\nwriting tips\nsim ms\nele mental\nwhis kers\nrain er\nou che\ninflu x\nå¥ ½\nsnap chats\npi eter\ng awa\nc nt\nley n\nslaugh ter\nk lay\nger m\nbon ne\nðŁı¼ âĢįâĻĤï¸ı\nwic ke\ni at\nborder line\n* .*\nent on\nou ss\nyas min\ntow son\nroll s\nho ho\nbant am\nskill z\ncl o\nsf u\nconden sed\nschool boy\nlondon ers\nãĢ ij\nvand als\nsat oshi\nðŁĵ» :\nsin cer\nni etz\ni awx\ngrey son\ngraph ed\ngabri ela\nje p\nha di\nfron tier\nellu lar\ncon fluence\nðŁĮ ł\nwhite out\nmer it\nshi ra\nsculp tural\nincar nation\nlife guard\nmi de\nbar rio\nattribu tion\napp re\nre eve\nmag ically\ndin al\nbroad casters\ntend encies\nsu bb\nreykja vik\nmin ts\ngoe the\nshi i\naubam eyang\n:- /\nี à¹ī\neat ing\ndu mbo\noc key\nber tha\nam ata\naa g\nevacu ate\nhu tt\ndr f\nwhat aburger\ntb acks\nli vin\nap an\nvo a\nvi kas\ngrand mas\ninter fere\ndor itos\nbon ner\nf gc\npi ñ\nper mitting\nlimel ight\nde anna\nle ela\nha st\nfahren heit\nale ssi\nðŁĻ ĩ\nlie b\ndee zer\ncul tura\nvo ss\npa si\nma ud\nis it\nbent on\ndin ers\ntheroy al\nrefu eling\nent ro\nsky f\nmar ital\nke ene\nsuper power\nrebec ca\ninform ational\nhi deo\nco wardly\nãģ· ãĤĮ\nu sha\nt ere\nsumm ons\nar da\nor land\nfreel ancer\nbbce arth\nv agu\nin sh\nblo or\npot luck\npoche ttino\nche ats\nwondr ous\neuchar ist\ncanc elling\nst es\nesc ent\nen den\nssi es\nsand usky\nbi anco\noppor tuni\nliqui ds\nkyrgyz stan\nai ah\ngn i\nmo vin\nina via\ncoo kie\nâĢĵ âĢĵ\nol icity\nðŁį ½\nun filtered\ndre ary\nbbc breakfast\namar ia\nrais ins\nðŁİĤ ðŁİī\nsand ler\ngan j\nfe in\nmusic awards\nne ta\nflur ry\ner re\nbri ana\nposei don\nmul an\nexecu tive\ndhar thm\nch ins\nthirsty thursday\njam as\nbar th\ntn f\ntac ob\nk hor\nmi ma\nfil ms\nington post\nepit om\nec w\ncor ral\nweak ened\nak ov\nshi pper\nm line\nla sal\nbra iner\naw m\nðŁĴĻ âĿ¤ï¸ı\ntwi g\nthis girl\nman of\nre count\nlan zar\nfor ci\ndischar ged\nworld news\nmon strous\nin toxic\nfo ie\ndemean or\naf firms\nhal ves\nche shire\nse of\nlanca ster\ng enders\nstar r\nchick fila\nnew england\njay den\nðŁĺĤ @\nsha allah\nase efabz\nflamin gos\nconfron ted\nchi anti\na om\ncab ot\naf loo\npi kes\nleav ers\nh cc\nchap o\nyoung stown\nre solu\nokla hom\no ons\nlamin ate\ncash less\nðŁĺ³ ðŁĺ³\nz aw\nsa ires\nrebel li\nin adver\nben i\ntra c\nhun tsman\nðŁİĦ ðŁİħ\nmer may\ngi b\ndie u\nce ases\nðŁĺĤ #\nmind less\ni der\na tho\nwheat ley\nprofit ability\nun attended\nin ec\nhan sika\nbackthe blue\nst f\ndrau ght\nanto inette\nv ah\nse ash\nb ina\ncl r\nari zation\nben to\nภĪ\nze man\ninspec ted\nar agon\nðŁijĮ ðŁı¾\ntack y\nrich ly\nrace track\nanthe ms\nabbo tsford\nsheri ffs\ni ah\nen ough\ne strang\nroad ways\nbun k\nsh anti\njurisdic tion\ngur us\nfar r\nad on\nin cogn\nhome improvement\ndal am\ncol lars\nco hn\nbe da\nai re\nwester ly\navo te\nspin ners\nsp res\noccup ying\nsch rei\nreinfor cement\nes er\nsun rise\nmc manus\ngold stein\ngg gg\nann on\nyo s\nre patri\nhud gens\ndata analytics\nag us\nðŁį ¿\npol l\njust e\ngi annis\nstar struck\ndundal k\nz ap\nsk ol\nun miss\nu man\nt cr\nplat y\npac man\nna an\npleas antly\nob vs\ncorrup ted\nam ari\nsho ve\nnau til\nshi van\nsh reve\ngo bears\nwe akest\nbren tford\nst us\npre v\nbasing stoke\nreper toire\nam ala\nç §\nch ong\nc aged\nbil al\n! ~\nyo w\nwan derer\nl ila\nen clave\nae c\næ µ\ndon ne\nðŁĴĥ ðŁı»\ntru ce\nhe il\nscor ching\niri descent\nob taining\nfon dly\ncenturi on\nbuff on\nseren ade\nbreak the\nsap s\nny gov\nla zi\n\\ (\npuer to\nneu tered\nta sia\nracec ar\nhic key\ngan gu\nðŁĴ ĩ\nran cher\ncla se\nðŁĶ´ ðŁĶµ\nho b\nbi zz\nding le\ntw restling\ngo go\nfreder icton\nblock chain\ntu ary\nperce ive\njo int\nes u\nemabiggest fans\nbis a\nwin ton\nre counts\nre launch\nm ths\nar ises\nad kins\nmo tions\nla wns\neno cide\nreminis ce\nra pun\nw kr\nfass bender\ne manu\nsexu al\nhi ppy\nwine house\nf dc\ncare r\nal ai\nprofound ly\nour o\nmon toya\nmee e\nis cher\nimp lies\nfifty shades\nym on\ntogether we\nisleof wight\ncru e\nam zn\nâļ «\nme ps\nhaun ted\ngot vintage\nter son\npet smart\nsell out\nne cked\nentom ology\neng ar\ndeal er\nalo re\nðŁĩ¹ ðŁĩ·\npar tum\nlimer ick\nf ates\ndwell ers\ndiag rams\nðŁİĪ ðŁİĪ\npl ore\nin ca\ndivisi ve\nblow ers\nwel les\npredecess or\ninfin ite\ntheore m\nhot dogs\namericani dol\ndam e\ncap ers\nreco ver\nlolla palooza\nin correctly\ncolle en\nbrac ing\nobserv ance\no ise\nmr n\ngran ville\nestrang ed\níĭ ´\nreplac ements\nje sus\nd st\nwild wood\nta f\nsar ri\nhorser adish\nam ax\ncor by\ncon d\ncit rix\nt ze\nsa ic\ni os\nmon gering\nðŁijı ðŁı¾\njeffree star\nbar ometer\navo y\nyu le\nvar na\nv ÃŃa\nparaly zed\nunder went\nge tter\ndau phin\nstra r\naberdeen shire\norgan ism\ning an\nfei sty\nri da\nworldof warcraft\ntic ker\nsho u\nri ff\ncraft beer\nthur ston\ns abo\nmeatless monday\nmigr atory\nma jo\ngro sse\nag chat\nnet te\nessenti aloils\nchau dhary\nteddy bears\narchan gel\nrotun da\nre us\nham ad\ncon vent\nbritt le\nmar che\nlo han\ninti mi\neu cli\nb ole\ns ra\nho d\nm fs\ndi sts\ncha stain\nz or\nshe k\ncanne slions\nl ends\ncal um\nbru in\nalam eda\nach ri\nprivi leges\nindie music\nfel ton\npo ty\ncor so\nri shi\nha bi\na see\nweir dly\nr ho\nmyster iously\nlow down\nfur s\nfe t\ne die\nro sh\ninqu ire\nvulner abilities\nsil o\nnation alists\nad iti\ntra pp\nti i\nscrat ch\nag ora\npsy che\ndavi de\nbook marks\nðŁĴĽ ðŁĴĽ\nre former\nlu tz\nðŁĺ» ðŁĺ»\nlong island\nawar dee\npo stu\nd printed\nsuccul ents\npoo rer\nl da\nr cc\nivote btsbbmas\ncath letics\nti psy\nquin ce\npupp yday\nâĸ« ï¸ı\ntz el\nsel fridges\ni onic\nwab ash\nturbul ence\nleam ington\ntt ttt\nobsi dian\no hara\nlegitim ately\nspa in\nmor al\nequal iser\nap g\nwatch ful\nw ls\nh ng\nro shan\nmart es\nfalk lands\nd hl\ntri angles\nsta un\nsouth bank\nren ame\nquo ti\ngod desses\ncol gate\nz ant\ntrail running\nsumm its\ndd ick\nac ad\nsc g\nmedi ated\nko hl\nhere wego\ndiscrimin ate\nsat irical\npubl ici\ng tc\ndre dd\nauto sport\nsi ps\ncorrespon dence\nash win\ndragon ball\nðŁ§ Ģ\nship ments\ngly co\nfe a\npur ses\nle er\ngie g\nba bel\nni on\nn ca\nko a\ngo on\nrec a\nfemale bloggerrt\nelector ate\nda x\nic ulture\nelli a\ntun i\ntor til\nle tour\ncoimbat ore\nactiv ating\nnews night\nhad dock\nfree shipping\ncano eing\nay n\nocean side\nnick el\njame stown\nfri gate\ndepend ency\ncho wk\ncataly tic\nbackstreet boys\nÐ ´\nele ment\n^- ^\nzen it\nro a\nfortun a\nfi zz\nac lub\nÙĬ Ø©\nin tra\nhy ena\ndo dging\narchi bald\nmari us\ning enu\nsteph anie\nscand inavia\nma ier\njoy ner\nchrist ening\nb td\nsug ary\nmen e\nimmer sed\ndom ain\nðŁı ī\npap al\nic ann\nta hir\nme jor\nit ys\ninter fer\nim pul\nallo ys\n" ).\nz ance\nan ar\ntam ar\ncoy big\nau ghter\nmanhatt an\nko di\nwedd inghour\ngla zing\nbh f\ndepor tivo\nany c\nnouri shing\nno tify\nj py\nde dition\nbig brother\nwork station\nr allied\nob u\nimpun ity\ngyllen haal\nyou rown\nsm ite\nn du\ns le\no am\nhome opathy\ngro ssing\npa e\nle mb\nwas ser\naudre y\nðŁĩ· ðŁĩ\nsho pee\npar que\nophthal mology\nðŁ¤ĺ ðŁı¼\nthou ses\nt itu\nst illness\nnygov cuomo\nno ta\ndisa ster\ncar den\nb sl\nðŁı ħ\nre po\nr ate\nhil da\nck en\ng pi\ncrit ter\nu hd\ndeadline day\ntom hiddleston\nsem pre\nmull in\nmake americ\nar id\nam t\nn se\nn ch\nmoz illa\nfood waste\nco or\nsagitt arius\npo el\ne try\nc fc\nkil o\nav ant\npist ols\nmis sive\nbah rain\nfa e\ndrin ker\nwar mers\nsv eng\npo co\nits the\ninter ce\npra dhan\nid sday\ntain able\nsub marines\nmagn us\nbo ye\nam are\npen it\ng fx\naren e\nãĥ ĩ\nsu rah\njay son\nin ch\nbo yer\no sun\nstr ati\nscrip tures\nmaster che\nster ili\nprogram med\nkn its\ninj uring\nsea of\nreli ant\np ina\nmix tapes\nman tri\njind al\nhac kett\nbio shock\nv ash\nsp m\nlight saber\nw icks\nrune scape\nvari ables\ndimp les\nol yn\nhol lis\ngetty images\ngalax ys\ned l\ntrajec tory\nthr illers\npositi ves\nkit esur\ndel le\nfeel good\nshan kar\nma is\nis lip\nricky gervais\ningeni ous\nrr bc\nsi p\nacro polis\np buh\nmesmer ising\nbernar d\ntoo t\nrestric t\nmurder ous\nfo i\ndul les\nbelie ber\nsha an\nph ant\nhamp den\nha ye\nch ro\nðŁ¤· âĢįâĻĤï¸ı\nvi endo\nmag pies\nhabit at\nfl icks\nstan za\npu tney\nnew smel\nnd n\nm ity\ncontrac ted\nuked chat\nsp ouses\nplu ms\nl icious\nquan tum\nj hope\nmm r\ncu sd\nusa in\nsection als\nbar bers\nre vered\nd ite\naw ine\nmc daniel\npur dy\npelo ton\nout lined\nben ito\npedic ure\nmoisturi zer\nclif ton\nprece dent\nital y\nbi x\ntro ye\ntren ding\nshan ks\nle tic\nwilms low\nta ir\nkry p\nen u\nkar thi\nhoar ding\nsurve yor\ninst aweather\nri ffs\nevic ted\ntown e\nordin ation\nlux or\ntampab ay\nguine as\nfu mes\nno ck\nki ara\nen visi\nno e\ngeor gi\ncruel tyfree\nwhe eled\nte mb\nmi aa\nbu oy\nabbas i\nmc col\njas per\nit als\nauthor itarian\nma ura\ntang y\nmu ssel\nhi gg\nchlor ine\nal vin\nwhi ps\nre side\nhra ya\ned ging\nutt ar\nide l\ndu d\nwo p\nsummon ed\nìĻ Ģ\nå į\nsi kh\nen viro\ntan kers\nnbc news\nle bone\ngw r\ncon ia\ncolosse um\nrod ney\npar atro\nnau ghton\nfe athered\nchand ler\nau se\n! âĿ¤\nni ko\nmiami heat\ncollap sing\nib f\ngaf fer\nfather hood\ncamp ed\nro gan\nhi jacked\ncoordin ates\nam il\nðŁĺĴ ðŁĺĴ\ne ther\nwater gate\nleg er\nd wy\nc tly\nacry lic\nwhole sal\nven kate\nshadow ed\nhor sham\nbangla deshi\nto ed\ninst atravel\nopt outside\naar p\nfar ce\nag in\n!! !#\nrap ture\nlou th\nmon ti\njiha di\niniti ate\ngro hl\nu do\ntech nicol\nou pe\nbut ti\nðŁIJ ´\nnar ayan\ncar la\nma kh\nindi visible\nground hog\nyn c\nsin bajo\nban tam\nwc f\nsug g\npin di\nthem atic\nrit i\nkk h\nval i\nty ou\nlebu hraya\nko witz\nsla sher\nkit kat\ncy pher\nval u\nus man\nrock ville\nkar ni\ndo re\ní Ľ\nfer ret\nðŁĺĬ ðŁijį\nwood ford\nstatu tory\nlove and\ntar p\nreferr als\ndiscipl ined\nyach ting\nktv u\ndec king\nau m\nph or\nkey west\na ina\nped tour\nge ti\nsla shed\ncric kets\ngr ated\nsteph an\nlewan dowski\nintru der\nal c\nðŁĺĦ ðŁĺĦðŁĺĦ\nmerci ful\nlok sab\ncon sign\nab m\no shawa\nfi eds\ndi jon\ny ass\nwre aths\nwell come\ntath lon\nmitt al\nage of\nrein force\ndra ining\ncoy b\nac ec\ninten sely\nhagg is\nfle mish\nwool worths\npartici patory\nlan y\nconvic t\nstereo type\nðŁ¦ ĩ\nre sale\nlen i\nhol ster\nâĺĨ âĺĨ\nâĺ ¹\nrenew ing\npar ted\nbatt ers\nweak en\nerup ts\nsun il\nnouvel le\nlemon grass\ntour e\nh x\nç ¾\nschi phol\nmess ina\nhan bin\ndaener ys\nbutter cream\ngu o\ncon roy\nbla k\nad ic\nach en\nË ĺ\ntran sylvania\nradi of\nte ren\ndr fc\nb ber\nay ing\nalcat raz\nw ld\nmill ard\nìĿ ¸\nsuper fan\nph am\ngh wa\nfre ight\nµ ï¸ı\ninfer ior\nlibr o\ngoo o\ncam bria\nsix es\nquintess ential\nmat ern\nj ours\nhy mns\ngen a\nwil de\nwhite chapel\nshav en\nq q\nslu dge\neat clean\nmariti me\nka if\nbjor n\npire lli\nja sh\ni gi\nwhis kerswednesday\nthe originals\nsch illing\nph in\njo ke\njal sa\ngen ial\nrod ite\nfor ge\nad er\nðŁijĩ ðŁı½\ndeb ated\nðŁĴĻ ðŁĴļ\nwoo ded\nmun oz\ndism al\ncondem ning\nant ara\nsaturday night\nre consider\nðŁĵ ²\nol amide\nhit achi\nharro ds\nta way\nja a\ning uk\nau c\naz ette\nas bury\nultra s\nri que\nde ca\nal oft\nom ba\nmi gh\nme sh\nfa ze\nsp ital\nv ado\nr z\nmori arty\ntu ck\ntou m\nmon stro\nsain te\nru skin\nre discovered\npar ais\nmocking bird\ncf b\ntu sk\nmodel led\nblack berries\nspo wer\nj ale\nhot spots\nbri m\n" ,"\nyor ke\nap ri\nmi eux\ncarlo s\nwelove you\nfirsth and\nes thetic\nrox as\nj me\nho i\nsch mitt\nu chi\norangu tan\nlead ing\ndef o\nweekend vibes\nrefriger ation\ninter viewer\nfaroo q\n... :)\nwy combe\nrejec ting\nred knapp\npi que\ntwee tab\nmiddle town\npalad in\nbalti stan\nðŁĩ³ðŁĩ ¬\nmc phee\nbl medieval\nide o\ne special\ncc fc\nath ai\nam pa\nsu ss\nstory tellers\nmin hyuk\ntier ra\nðŁIJ §\nspan king\nsilver man\nread ily\ndep t\nambi ance\nðŁĴĭ ðŁĴĭ\nxi x\nsug ars\nmeteoro logical\nhat chet\nforeig ner\nvive kan\ntag ore\nres ent\nbreath es\ntele coms\npancra s\ndu l\nya ar\nar is\nr mc\nmy er\njo bs\nwith draw\nback story\nu mich\nsebasti en\nnu est\nstandardi zed\nsli ve\nsi ac\nsc alli\nlu be\nlmfa oo\nmel ons\nbe than\nå¤ §\nmuer tos\nhon k\ndin os\nãĤ ³\nteam india\npet co\nmo ren\nfe aring\nbb can\nme le\nkne el\ngunsn roses\nbau haus\nygo fficial\nygofficial blink\nmusic fest\nde marco\naro d\nacce ssed\nobse ssive\no con\nnel lie\nkil da\nje well\npower lifting\non en\ná s\nbal ism\ndan ke\nwol fen\npro logue\nnar rows\nhol o\ngeor die\nconfron ting\ncab ana\nloubout in\ns anti\nimage comics\nfoo fighters\nwester nu\ng fuel\ndisci ple\nðŁĺī )\nsu h\nsc illy\nnext gen\neg u\naflo at\nxi an\npang ilinan\ndi en\nb ca\nco ons\nspo d\ns dg\nfall en\ndol la\nðŁĶ´ âļ«ï¸ı\nä ¼\ntor rance\nnc isla\nta wny\njen ni\nfitness motivation\nbl ount\nfascin ation\np da\nip f\naege an\nvan o\nse vered\npol s\nphysi ological\nju ggling\ngu ev\ncalcul ation\nsli mming\nfe mmes\nem pan\ndaw g\nsto v\npoly technic\nmunicipal ities\ngre tzky\ndefin itions\ncorrec ting\ns family\nrock and\non my\nhomeswee thome\nwt cc\nsc at\nmo co\nlar sson\nkag ame\ncorn bread\nlc bo\nhead shots\nfire house\nd news\nuc as\ntem pe\nson ne\ndi ggs\nbo ilers\nanti bodies\nsibling sday\nhobb es\nfly knit\nli se\nze sty\nsubstitu tion\nsic em\nrevolution ize\nmu rad\nbesto wed\nmill ers\nliveon k\ninterpre ter\nsant abar\nqueen stown\nevent brite\nd by\nchur chill\nsp at\npal oma\neura sian\nbu at\nbeau x\nvor ous\nnaz areth\ndaz ed\nal me\nrit a\ncon ch\ncol t\nhamp ers\ng su\nad j\nprofessi ons\nb wi\nac b\nâ ĭ\nunivers ally\ntrou bling\nconve y\nck ley\nwe asley\ntra der\nso td\nscra ppy\nnelson mandela\nrup tly\npe ele\nevery body\nconse cr\nshort bread\nsh rou\no sama\nch ach\nbino culars\npl en\nnam i\nk la\nce tte\nwine wankers\nste f\noxy gen\nha ag\nyu zu\nwh olly\ntri gg\nme cha\nsubjec ted\ninhibit ors\nrepre ssion\nmanipu late\ncur ly\nblack man\nu red\nconvers ation\nbag ging\nat el\nvote for\neli brary\nvis age\nta per\nst ani\nprote in\npe mber\nniger ian\ngle ason\nbehin d\ntrick ed\nhaw ley\nðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸\npsychi atrist\nconsoli dated\nbru gge\nge twell\nes opha\nchine senew\nach t\ns fu\nfe mal\nturn bull\nmirro red\nbobb i\nben id\nado ss\nvit ch\nman hunt\nlog itech\nfa king\ncul t\nwor st\ndy na\ndesc ended\npu ig\nfre dri\nchrome book\naf fe\nvam os\nmoo c\nm le\nlach lan\nall for\në¯ ¸\nà® µ\nye ee\npaul mccartney\nas au\na sive\nthe great\nson fire\npre k\nphoto journalism\nmeh ra\nle tta\nh ss\ndh ury\npersecu ted\nha f\ndemo graphics\nbeet le\nsk ath\nshah rukh\nk lim\nesp añ\nsleep ing\nopp s\nmun dial\nextrac ted\nðŁ¥ ģ\nta ur\njeep mafia\ninser ts\nigu ana\nfthe week\ndo tes\nsecre tary\nrin poche\nfavor it\ncorri dors\neli ers\nbirth s\nla ban\ndrop out\ncav an\no zz\nmar adona\nlec turing\nfan fiction\nele anor\ndesper ation\ncharacter ization\nbu sier\nor die\nholo gram\nson ville\nav geeks\neat bulaga\n" ~\nrox anne\nt asked\nsp k\nsam ir\nrespec table\nha ku\ndi ane\nbey e\nfanta sies\nwin news\nuten sils\nspy ro\nred mi\nmer son\ni be\ncro ok\nco pa\nwa vering\nðŁĮĬ ðŁĮĬ\nzz ard\nselfi sh\nscroo ge\np ml\nbu ms\nart basel\nsyrac use\nsarac ens\nn itt\nhar rowing\nah c\nworlda idsday\nstrat ton\nsav ages\nfur nishings\nbilli ards\no ia\nm ola\ninten ds\ncoy g\nvar ma\nf sb\nthe queen\nteessi de\nre locate\nno one\ninteroper ability\nfam u\nplanet arium\nnit ro\nd lr\ncor an\nìĿ´ ìĬ¤\nshoul da\nman an\ncar melo\ngh o\nðŁİĦ ðŁİģ\nstee ple\nher zog\ndev our\nchan te\narun del\nrio ja\nbox office\nbo v\ntri b\nsn r\nre for\nne wn\nblake shelton\nsul li\neng ages\ntreas ure\no yo\nbi za\n. _.\nãģ ĵ\noo w\nch able\nbrand y\nich t\nâĮ ļ\nz ines\nshar per\nplym outh\nmam mo\nhydr ates\nel lo\ndo e\ncentri fu\nob j\nlaus anne\neli st\ncon genital\nunder armour\nent ree\ncritici zing\nvogue magazine\ncast ell\naga in\na ab\nld f\nco ined\nwell done\nun planned\nswee ty\nq p\nloy al\niz ations\nir ror\nch is\nsw ann\nme w\ncustom ised\ncream ery\ncevic he\nwrong ful\nstellen bosch\nn ella\nhouse mates\ne hr\nc sn\ntor m\npseu do\nmoo dy\nun folding\ntel aviv\nsmall business\nmontp ellier\nmanu ally\nbest sellers\ngin ny\nleop ard\ned in\nun heard\nhi ero\nthero ad\ngr l\napho to\nameric ano\nnap kins\ngall ant\nembo ssed\navi sta\nsar ts\nprosecu ted\nfood safety\ntan aka\nf v\ncav alli\nswe den\nsc ourt\nbar naby\ntart are\nhear st\nbutti gieg\naf icion\nabo de\nmtvbr kpop\nflouri shing\npol ly\nor son\nblue sky\nsound tracks\nmountaine ers\nym ount\nro jo\ndavi e\n. ðŁĺĬ\nsa de\nop ed\nmah ler\nre gs\nram ones\nlanzar ote\nindu s\nblack rock\nvo cab\nthe hill\nni us\ngo ya\nru l\ntin es\nmu ne\ncl ic\ndynam ic\naggrav ated\non or\nmur ph\npar ka\nindigen ous\nready for\nboldand beautiful\nau t\nsomer se\nso good\nroad torio\nbb t\nsau k\nair strike\nâĥ£ -\nspeaker ryan\nfli er\n. @_\nven detta\nfre en\nchap er\nsan ay\np fei\nnu dity\nmr x\nh ha\nro ku\nre dar\nfuch sia\nwar ships\nd fb\nchau dhry\nra wal\ngranth am\nan gio\ntab loid\nstran ds\nportfoli os\nan ning\nwork load\nho to\nhead light\ngeneral hospital\nchri se\nlater gram\nga v\nh out\nbi dder\nshow man\nsha we\nservic emen\nbra vest\nach y\nte de\npran ks\njuli anne\nema iling\ncar do\ntestim oni\nsupreme court\ncalder on\nst le\nwh in\ntro jan\nma honey\nco u\n! <\ngen con\nbh atia\nam us\nvo ting\nfar ah\nbe van\nå ·\nlin c\nka shi\ngif tsfor\nfas o\ndu tta\ninstitu t\ncode x\ntongue outtuesday\nolo gy\nnat ty\nju gger\nde cency\nch ul\naw o\nmont clair\ngol o\ng lyn\nðŁĺĭ ðŁĺĭðŁĺĭ\nqu antic\nn ics\nh bt\ncal eb\ntra vers\nthisi sus\nshi sha\ndeodor ant\ncr d\nac ao\nðŁĴĽ ðŁĴļ\ny il\nendow ment\nz ur\nfor ts\nmar tech\nfifty shades\nci v\naqu atics\naccumul ated\n---- -\nun published\nporo shenko\niz u\ngn all\nle mur\nilo ilo\nglad stone\nesqu ire\nsk aya\nrevi ving\nnigh thaw\n:- ))\nnational puppyday\nmi amid\nkamal haasan\nguest list\ngentri fication\ndale k\nwater way\nt gt\nsle dding\nmath chat\nhu da\nelan ds\ncap aldi\nbm g\npong al\nfac tions\nðŁı Ħ\np ham\nel ton\n, ..\nop ium\nlake view\nexcelsi or\nan ic\nfin serv\nent i\ntrue story\npa id\nspecial olympics\nme tte\nta pper\nship building\nz brush\ntosc ana\nt ants\nstraight forward\nk sh\nca hon\nbra him\nsimul ations\ngu mp\ncar til\ndistr acting\npa is\nmu rak\ngre t\nma hama\neque stri\nemra an\nat k\nla galaxy\nho ku\ncan to\nbo gart\ninher it\ncolli ded\ncarol inas\nadon is\nyears ago\nroo ts\ngirl sin\ntitle ist\nitch ell\nfat ality\nclo ths\ncenter piece\ntis land\nmi ker\nu bu\nsh k\nin tran\ncob bler\nbor ns\nz em\nsub po\nexpon ential\ncar p\nuri g\npanty hose\npa wan\nmac cle\nbrigh tens\naliz ations\nthe weeknd\nt down\nt ash\nferr ara\nâľĤ ï¸ı\nmee k\ngro omed\nbar am\npl ough\nletter press\nedit ori\nimo gen\ngregor y\ng mos\nbree der\nreduc ation\nlic hen\nhe er\ndistor ted\nbeat tie\nyum m\nspla y\nparas itic\nbrook field\nver pool\nthri ves\nsto ves\nru ssel\ncor r\nar min\nprofici ency\njack y\ndebat enight\nwh iting\nnure mberg\ndenti sts\nbaja j\nari ka\nvivi and\npne fc\nsr h\nsick ening\ncu lar\nå ¼\nmil let\ngar age\nmc murray\ninfin itely\naw as\nanti virus\npar fum\ngorilla z\nqui x\nit sal\nhair line\nbo ta\në ¸\nyan ne\nven kat\nro ta\nkel a\nkath niel\nèªķ ç¥Ń\nsch ne\nderiv atives\ndakota johnson\nip v\nbus a\nìĦ¸ë¸ IJ\nun intended\nin dra\npro pelled\nne olithic\nhil o\nhi ves\ngwin nett\nco tta\ncan aver\nb ne\nmagi strate\nes ri\nzam an\nweir dos\nshort cut\nmocking jay\nðŁİĦ ðŁİĦ\nso h\nwh ip\nspec tra\nrober ts\nrob ber\npromin ently\necz ema\nbu stle\nb cli\nsk ol\njordani an\nev ich\næĸ °\nro jas\nmizz ou\nsa shimi\ninstall er\ngu chi\npon cho\nhi man\ndemocr ati\nal be\npp ies\nchlori de\nbly th\nâı °:\nyo yo\nss ard\nsp at\nmad dox\nsalam ander\nboun ced\nasu mmit\nal mer\nscru tin\nam editing\ntransform ations\ntag line\nneur al\nmu tton\nbr d\nayurve dic\nre vel\nhumili ation\nik aze\nbenz ema\nnatur alist\nmac cosmetics\nfi a\nram on\npre domin\nli son\ngoo de\nce res\nmateri al\nherald sun\ncannon ball\nbob dylan\nbo thering\ns gb\nknow ingly\nche ung\ncha z\nhand gun\nchinesenew year\nun treated\nrabb it\nplace bo\nble ssed\nay am\nire ann\ngrosven or\nb light\nnu ne\nco stal\nc span\nsa an\nsol l\nra jam\nk q\ngary en\nben nington\non tag\nmuse veni\nblack jack\no casio\nmol asses\ninter cept\ngh ent\nfu rever\nbla y\naqu i\ntele cast\ns ats\nnat gas\nho v\nneighbour ing\nmag ell\nescal ated\nnewmusic friday\nper ish\nbru tus\nlav rov\njo dy\ngira ffes\nbha gav\nstig mati\npais ajes\nit ra\nbi ases\nun control\nhil fi\nðŁĴģ ðŁı¼\nstom ars\n© ï¸ı\nur inary\n:" >\ns cone\ngrapp ling\naf ran\nace way\nnau t\nlevel ing\nbre ather\naud acity\nloo ting\ndrex el\ngame changer\nstam pe\np mo\nmarchfor ourlives\nger t\ncre amer\nron son\ngu z\nðŁį İ\nk ast\nhd tv\naccompan iment\ntrade show\nsacram ento\nprolifer ation\nwh n\nfacilit ator\nom bre\nen y\nìķ Ħ\nve h\ngi ri\nbal let\nðŁĹ ½\nðŁĨ ĺ\ntake the\npromo ters\nmu ff\niti vely\ncrun chy\nprose cute\ngu antan\n! ⾨\nlex ie\nkar un\njoshu ad\nfit spo\nbagu io\n........ .....\nvoluntar ily\nsti gers\npron unciation\nloo ted\nju ke\ner adio\ndum pling\nbarit one\nneu er\nmac cab\nin ations\nat te\n๠ij\nnbad raft\ndf w\nchil i\nbc ps\namrit sar\nta vi\nro tor\nra bi\ngh os\nde smo\nca g\nfan meeting\nram ona\nau tam\nwaver ley\ntu sa\nt se\nsay noto\npra ise\nes mith\ntime piece\no jo\nk ü\ncu ffed\nz um\njuli et\nvege ta\npen tax\nis inha\nni ño\nmall ard\ngran ting\nðĿ Ł\ntag gart\nsouth land\npas se\nmaryam n\ngrum man\nboot strap\namo tor\nsoci edad\nnath alie\nx es\ntr out\nmo ji\nmar go\ng ld\nma hal\nbal enci\nten n\npedi gree\nna omi\nlas vegas\nke ssel\ngun fire\nak kineni\nten e\ngrand master\nun ru\nk sen\nrebe kah\nmon e\nkol lywood\nreci eved\nfire fighting\ncha o\nde led\nmemor i\nfr nds\nb gm\nshaf ts\nsaxophon ist\nry n\nst fc\nmis chiev\nannu al\ny vette\nvar i\ntah rir\nperth news\no bey\nnaji b\nisab el\nz ler\nvan de\nsomm elier\nsole mn\ninterven e\ncon cise\n. âĻ¥\nref rain\nkri sta\nconver ge\ntrife cta\ntrac er\npredat ory\npu li\ni ow\nbrass erie\nsco ts\npti official\nbon ni\nbl t\nsung min\nregi strar\nre define\npa stime\ngy u\ncanad as\nblue bell\nye revan\nsouth australia\nsli ves\nen id\nvi ole\ne el\ndeath metal\navent ura\n:) :)\nple dging\ni ucn\ndaf i\nbet ween\nto workday\nsa ur\nbe le\nsuper store\nhair cuts\nfil ter\nan ore\nsp resso\nshiel d\ndigni fied\nb fa\nso jour\nbr in\nsham eless\nharri ers\ner ab\nau ld\ntight ening\nprevent ative\nsi star\nnarco tics\nyst wy\ns nyc\nir u\nfor real\nb ends\nfala fel\nsi vak\nfree port\nce ch\nsay ings\ndon ut\ndial ec\nx ml\nwom ani\nott city\nke re\nbook lovers\nlondon is\naugu ste\nwonder ful\nwin elovers\n๠Ĭ\npe da\nminer va\nar de\n" !!\nor biting\nnationalbestfriend day\nflur ries\nang kor\nz d\nstrick en\nphoto volta\nnan dos\nhou dini\nfu ente\nchad wick\nce rer\nwh ack\nterti ary\nny pl\nlow carb\nhai ley\nd ness\nbla c\nthar aman\nre treats\npic chu\nmari am\nl ale\ndecre ases\nb he\nðŁijĮ #\nou sa\no ye\nnhl draft\nly on\ncar u\nexpect ancy\nback log\naudio books\nsur ges\nprovin ci\npa ol\ngr ate\nðŁĺİ ðŁĺİ\nr nd\nparais o\nkee pp\nhu l\nap ed\nðŁij ĵ\npo tters\neeee eeee\nwe work\ntom i\nquil ting\nin dra\nhaw t\nanarchi st\npit falls\nco stab\nzom bie\nre flexi\nmar low\nhen rie\ngra ff\ndribb ble\nam joy\nv ases\nunex plo\ntri mmer\nbl ic\nthe or\nle sley\nkh urst\nfix er\nfili ppo\ncli que\nav tweeps\nsc alia\nfestival of\nmc govern\nku hn\nhol z\ncor ning\nym pics\nvilli ers\nsolu ble\nhook up\nblack ed\nelimin ates\nt va\nf endi\ndent e\nalger ian\nre uniting\nsel le\npe au\nnews feed\nsouthwe stair\npendu lum\nair man\nut en\nin humane\ngol an\nav a\ninci pal\nd fid\nbla ze\ncd nag\nmor bi\ngal lup\nwyn dham\nopen stack\nh isd\non shore\nanalo gy\nv ado\njo t\nl la\ngo of\ndum fries\nmacmillan cancer\nem ur\nwra pper\npar mi\nlog ical\nindi ana\nlo bby\nkit ts\nki z\nðŁİŁ :\nvid con\nphy sed\njacqu i\nfollow friday\ncancer day\ner g\n____ __\nðŁĽ Ĵ\nun lock\nsuf fo\nmust go\nay lor\nso va\nshi gh\nscienti fically\nsar k\npitts burgh\nbarb our\narri ve\naren ergy\nhon da\nãĤ· ãĥ\nmother board\nli ps\ng ac\nfore ster\nffe cts\ne si\nde stin\nr ini\nmu les\ndaun ting\nit zer\nde sal\nto ad\nmain z\nlin burg\ngroup on\n< --\nbu en\ngipp sland\ninv ader\nhatt ers\nfel la\neat in\ndel orean\nbau m\nma un\nje ez\nindefin ite\nro gu\nbru t\nz ay\nhamilton musical\nemb le\nsla x\nhe es\nfull moon\nant an\nli one\nðŁijĬ ðŁı½\nmac kie\ntk ts\nloksab ha\naw i\nsmur f\nman che\nbritish gp\nsha hi\nlon sdale\nhom bre\nwav eleng\nscoun ty\nin ja\nin de\ndarje eling\nðŁ¤ ¡\nnietz sche\nnb n\nwin frey\npre ached\ncap er\nt pa\nreplic ate\ndi ii\nÌ ¶\nsu u\nspeci alizing\nrep ent\njp morgan\nhul me\nclow n\nmin ster\nbo ise\nðŁĻĦ ðŁĻĦ\nm soc\nthe fancy\nm re\npresident sday\npau ly\nnew delhi\njan elle\nheritage month\ncar pool\ncar pe\nnab i\nmau rizio\nes ki\nbern hard\nth tr\noun ced\nkirk wood\nin comes\nido li\ncoo ley\nart deco\nðŁ¤ ij\nwaltham stow\nmut ants\nmal ema\nson aksh\npan theon\nlucer ne\nintro vert\nout take\ndean ambrose\nchild birth\nmegap ix\ngh outa\nap m\npan o\nilli es\nba ez\nred nose\nle ston\nx ero\nsfor life\nmid land\nir re\ner th\nbad al\nren ault\nre spite\nam ani\ncome on\nfuku oka\nb q\nchai kovsky\nðŁ¤ ¨\ntab lec\nan sel\nwar frame\nsul try\nsobri ety\nbridge stone\narm and\nðŁĩ©ðŁĩ °\nste u\ns ny\ngun ned\nji b\nfo u\nexac er\naper ture\nye on\nk sat\ngir lies\nâ ij\nfo h\nferoci ous\npep si\nhay den\nbry ce\nðŁĺ £\nshahe en\nn mapp\nmu shar\nclo vis\nbri bes\npo sh\nmusic festival\ninjec ted\nìĦ ±\nli pa\nsla via\nar l\nan et\nðŁĮŁðŁĮŁ ðŁĮŁ\nz we\nmeer kat\nexpe dition\noni k\ndf wwx\nbat ches\nkisses delavin\ninter faces\nino v\ncast or\nâĶģ âĶģ\nsouth park\nnew sday\ngo bble\nanton i\nal us\nwick ham\nst ly\nguantan amo\nfan cies\nstr on\nmoo g\nira q\ni yer\ncl p\nvis cer\nvo ten\nk lon\natmo s\nzach ary\nmichelle obama\nph ine\ninven tive\nbal four\ns ita\nremo deled\nhe ed\nbreath able\nju ju\nweak ening\nol den\nhel lu\ng ast\nextre mes\nschool er\nperfe cted\nhil al\ndl su\ncau ca\ngo to\nbal fe\nab id\nselec tor\nyo t\nsurve yed\nllandud no\nsc ann\nbour ke\nus d\ntow nof\nj at\ndrin kers\nðŁĴ¯ðŁĴ¯ ðŁĴ¯\nrr rrr\nmaccle sfield\ncor als\nbra king\ntr icia\ncollec tive\nbet sy\nw un\nsonaksh isinha\ncoin base\nchelten ham\nusemb assy\nmyri ad\nmc pherson\ncon ni\nc mos\nsj sharks\nperth shire\nkno wn\nbump y\nè me\nsupp ress\nthel ma\nfey eno\nðŁĴĢ ðŁĴĢ\nss erie\nmakk ah\nbru ssel\nðŁĮ ®\nmil os\nsv b\nemb ank\nta yy\nu le\ntop gear\nj ira\nch affe\nbra dio\nan ac\nlu la\nza a\nevalu ated\nar ic\nĦ Ī\nा _\nru ck\nbuy local\nsag awards\nk sleg\ndef aul\nchant al\nbutter fly\nha vens\ncar ats\ncan lab\nbr k\ndou x\nbee hive\nnew bury\njodh pur\nfree hold\nferr ari\ny ells\nuncondition ally\nplay through\nnanow rimo\ndic tate\nar mor\nswi fts\nsc e\nhuss le\nsay ed\nro cha\nat en\nabil ene\nar mi\nd tv\naction able\ntri pp\nsn k\nod inga\nw kyc\ntime out\nroo ks\nmyal gia\ninsul ted\nan am\nts ar\no leg\nme tt\nj ble\nescal ation\nqui eter\nhouse wife\nexperim entation\nu ary\nto ssing\nre mixed\nla ird\nit arianism\nextrater re\nz are\nk tor\npay load\nber ge\nrestra int\nbethe change\nbe w\nçĶŁ èªķç¥Ń\nf ells\nr ta\npersu ade\nline art\nb do\nadop tive\nðŁĩ¬ðŁĩ ·\nìľ ¤\nke ssler\n= =\ngran ds\nv aish\nsa fi\nemil ie\ncar twright\nand ale\nye st\nw or\npo ts\npam el\nboomer ang\nlju bl\nham ish\nel g\nchrist y\nðŁĶ Ł\nspectro scopy\npo fficial\nm yeon\nÊ »\nsto ols\nnab bed\ninsh allah\ngi da\nc sl\nli dar\nexper tly\ndeterior ating\nbru ges\nsati va\ntesti fies\npy th\nhero ines\nchi me\nfacep alm\nstreet fighter\nph oo\nmay onnaise\ncanni bal\nðŁļ Ĥ\nwat ered\nðŁĺ §\ncor rea\nlunch box\nhybri ds\ns fs\nis an\ncul tu\nzoo logy\nric ci\npi pers\nbe spoke\nasc end\nðŁĺĬ #\nstopp age\nana esthe\nprostitu tion\nw mc\nregu lars\noce ano\ncomm a\nshenando ah\nregin ald\nnas a\ncohe sion\nbli mp\nz as\ntag li\nsm al\nra ga\nmin or\ngabri ella\nmoja ve\nm crae\nearth ly\nsail boat\ngad kari\nworth ington\nlin cs\nitch ard\ncit ra\nsor cer\nracha el\npag i\nne ta\ngood news\ned ly\nwee t\nab storm\nrealtime chem\nover heard\ng ish\nbarang ay\nritz carlton\nmiche le\nhir st\ngosp ur\nbu sts\npar rots\nke ira\nhal la\nbot ched\nai o\næ ¸\nsu pri\not b\nhass an\nsl ick\nsb p\nni o\nshru ti\nba it\n: *\nng l\nhall o\ndi age\nqu arri\nqq q\nlud low\nhel mut\nge al\nestabli shments\nax a\nmelan in\ndi ri\nda red\naless andra\nmet cal\ncar val\nbru ises\nli u\nlat ch\nlap is\njurassic world\nchalk board\nbo sworth\nbatman v\nawareness day\nðŁĸ ¥\nsm tl\nsecond stomars\nhen ne\npra s\nfidd ler\nec ast\nve sp\nkh ill\nfai ths\nacqu a\nsold out\nfrancis can\ndat enight\nh st\nte acup\nmuham mad\nmanu als\nar cs\niel ts\nhr t\nm ro\nii fa\nflu ke\nar lene\nyeo vil\nnut meg\nlo dging\nscre e\noli vier\njac que\ninternational catday\ninnov ate\ndoglo vers\ncomprehen sion\nbea stie\nstu bbs\nsol is\ninter pol\nhal ted\nbly the\nandre y\nâģ£ âģ£\nschan nel\nchance therapper\npott iteam\nnorther nireland\nchee tos\nbelong ings\nmer ida\njan o\noce ania\nfear less\nle ung\nla pping\niver son\nhuff ingtonpost\nhu ts\nde akin\nd ili\nprick ly\nkids deserveit\nid p\nest es\nco sa\nwi c\nne wal\nconfron ts\nbar bi\nappreci ation\nÐ ±\nrati os\nr pi\nmonste renergy\napple watch\nyu l\nsas uke\npe gs\nbow tie\nute p\nsalu ting\npo res\nhome boy\nchar cu\nca it\nಠ¾\nmon tr\nli ams\ngy ms\nad in\nha slam\neasy jet\ncol le\nbeyon dthe\nstu co\nmy n\ngospur sgo\nge ophy\nsk a\nrock land\nence phal\ndispo se\nภ±\ntol ls\npew ter\nnom ore\ndiv yan\ncaliforni an\nundeni able\ntra ver\npar ri\ninfl ated\neu v\ndownton abbey\ncom au\nn su\nminis eries\ntor t\nprepar atory\nmaryamn sharif\nga els\nðŁĺ ł\npic kers\nnan jing\nex u\nbun ches\nðŁı ĭ\nraf ale\nko sci\nd of\npale ttes\non is\nnew sl\nmicro services\nbar code\nà¥Ģ _\nrat che\njun ta\nj and\ndrainthe swamp\nanno y\nsc ards\npc gaming\naveng er\npax east\nhur ray\ncondomin ium\nsheri ff\nli ra\nhard back\nfar ts\ndemo lish\nassaul ts\nw dy\nvo ort\ntion ism\nphilanthro pic\nj ci\ninim itable\nft b\nswar aj\nri so\nqu ah\npi ps\npe so\ncor olla\nrolling stone\npeach tree\ncarl ton\nbe b\naustr al\ntacob ell\nro ver\nmurak ami\ndel mar\nsun dar\njeho vah\nhilfi ger\nemraan hashmi\nemabiggestfans justinbieber\ndis qualified\nvi val\nfren chie\nbrian may\nbingham ton\nttr pg\nrefur b\nil let\nda ver\nbath ed\nbar rel\ns ra\ni vo\nam ak\nwearable tech\nshahrukh khan\nne ander\nle il\ngren ada\nðŁĺį âĿ¤ï¸ı\nswif tly\nsho wr\nre posted\nad il\nî ģ\nfir sta\neasport s\naaa ay\n& @\nwolf sburg\ns sports\nli dl\nab an\nsports biz\ns na\npr ank\npo i\nem bodies\nsky papers\nre ek\nmc neil\nel ow\ndolom ites\nlec ar\nlau ri\ngrass land\nat ica\nhypocr ites\nso ya\nro scoe\npow dered\nnom nomnom\nmixed media\nic p\ngrand kids\ntray von\nseaf ront\nmach ina\nbueno saires\nmulti ply\nwr x\nro chester\non et\nkar u\nk awar\nan ed\naber crombie\nshak y\nemp irical\nbal or\nanti microbial\npula ski\nn ance\nmi a\nheart breaker\ngal lop\nrock away\ner is\njoy train\nĤâĸĤâĸ ĤâĸĤâĸ\ncl un\ngi z\nsal ve\npan eer\nout now\nboni fac\nwr y\nsel fle\nrattle snake\npi al\ngh g\ngastri c\nwalk through\nnc l\nju arez\nja un\nseam lessly\nbur j\nshim mering\noutw ard\nm chale\nðŁĺĤ ðŁ¤£\nstead fast\nhu y\ntra pping\nto a\nthre es\nj ello\ninnov ating\nfriend lies\ncor re\ntic le\nthi est\not tery\nmis information\nhill crest\ngam bino\nwhat son\nbel las\nthe cable\npenn ington\nop sis\nmon ash\nwater fowl\nstorm water\nne tting\nbody builder\naber ystwy\nka therine\nhartle pool\nexecu tions\nvi m\nsha ve\nlich field\ninsi ght\njim mie\nemb raer\ncody simpson\ngiftide a\nfu s\nci g\nmand i\nschwar z\nro tt\ndad i\nbent ley\nang ed\nzar ago\nworl dr\ntrain or\npushaward skath\nhe iser\nwithdraw als\npri mera\nmi gnon\ndiar rhea\nvm world\no dom\nky ra\nu mass\nsp ud\nou li\nc gi\nro de\nquizz es\nmoon rise\nil ty\nhedge hogs\ngil bert\nar ising\npi ers\np ada\nfellow ships\ncardam om\nanni ka\nun humanrights\nsunday thoughts\nkid neys\ngand hi\nmar guer\nari sts\nun ny\nti ka\nlaw d\nkind red\nfra pp\nno sed\nreal madri\nour i\ni fi\ncar am\nchar m\nsp ared\nla do\nke pler\nbree der\nearn hardt\nwinder mere\nviviand sena\nprogressi ve\nmus th\njag ann\namp bell\naffili ates\nrick shaw\nha in\ncompri sed\nhapp ine\ncambo dian\nro tting\nbru nel\nê¸ °\nshreve port\nri gg\nphan toms\nfar rah\na die\ntodayin history\nof er\ne ssi\ntre ss\nst am\nsn d\nla tham\nfor giving\nbi ff\nwinter iscoming\nwa hi\nw ut\ntor rey\nsilver ware\njai me\nflu tter\nco ders\nbe p\nk hel\nbr ates\none ment\nb bling\nâĻª âĻª\nright to\nnet de\ne ster\nver ano\nstay cation\nmotor home\nag ood\nì¶ķíķĺ íķ´\nภĽ\nxen ob\nven ice\nsw ap\nol lins\nmon i\nli ka\nimran khan\nder m\nsaf aris\nmon tic\nbetter than\npa edo\nmay flower\nhypno tic\ncommuni sts\nclari on\nband o\nâĶ Ģ\ni j\nschro eder\npre achers\nity day\nb ini\noo lie\nm wa\nk ula\nalber ta\nphys icists\nmi asan\ndo gg\nwhit tier\ndown under\ndono ghue\nse vere\nmargin alized\ngb v\nche eri\nwat an\no an\ntoo t\nstric tly\nin verse\nchau n\nb hic\nx plo\nun ner\ntun ia\nro be\npersu asion\ndog ma\nswal low\ninfe sted\ndor an\nasu ka\ntortil las\nmi ya\nago sto\neri als\nag ric\nâĢĵ âĢ¦\ntwer king\nsales force\nd mk\ncre pes\nu me\nstac y\nsmar ts\nrepet itive\ndul quer\nke sel\naur ang\nway ans\ns wind\nworld s\ncho y\nrede emer\nuc sf\nstarwar sday\nlager feld\nexpre ssionism\ncir rus\nt sum\nvote blue\nkaleido scope\nhydrange a\nchick peas\níĤ ¤\nå ī\nzion ism\nty son\nnew som\nfal k\ntoa sting\nschrei ber\nrecu per\nfiel ders\nÎ ±\n{ }\nthor acic\nic d\nar se\nadverti sements\nsink hole\nliber ate\nbis marck\nag ed\nsylla bus\ndel a\ncl ary\nshadow y\nmom my\nlim ite\ngr s\nâŃIJï¸ı âŃIJï¸ı\nuk ah\ngood all\nf ong\nenvel opes\nde paul\nufc fight\npe to\ncur b\ncritic ised\nwa key\nsteven age\nhen ny\nerr ari\nder p\ncanaver al\nmu sta\nincl ine\ne bb\nb ks\nter ic\nre defined\nðŁĵ §\ntw alk\nsor cerer\nme c\ncali bre\nðŁĺ ĵ\nse co\nk andi\njun i\negyp tians\ndepar tures\nãĥ¼ ãĤ\nti mess\nilo ven\ncome true\nart museum\napo the\nap l\non ation\nkangar oos\nx avi\nsh om\npu i\nna am\nbom ber\ntc g\nply wood\nno re\nh ame\nelectri fication\nblu stery\nun rival\nun authorized\nplu ral\nlu t\ngilli es\necu ad\nco quit\nav rilla\nyol k\npou los\nher nia\nest one\npe aking\nid w\nhispan ic\nah l\nwor shipping\npe arly\nðŁĺĢ ðŁĺĢðŁĺĢ\nap s\nturnbull malcolm\nse av\nmc l\nma koto\nleu ven\nb sr\nzu c\nte u\nsc le\nph onic\nshat ner\nsan z\ncaul dron\nwar ra\npo k\npierc ings\ni aaf\ngrande ur\nfran ck\ndis section\naffir ming\npy le\nham el\nequ alizer\nbernade tte\nsyour bestfriend\nstumb ling\nprith vi\npolym ers\nmcal len\njun ky\nhu gger\nda vide\nver itas\nmp f\nmc neill\nley land\njo zi\ncandy monday\nbas u\nmon g\nlist o\nhair spray\nsun dance\nfilm photography\nfar row\nu sta\noci ety\nme mento\nfe o\nab ruptly\nc ska\nti vi\non en\ncalcul ating\nshi rec\nsequ in\nmal ang\ngen sen\né n\nup take\nr tx\nfree the\nwi per\nsym bi\nco qu\nภ´\nz oned\nte ak\nid ps\nalon zo\nqu ish\noc chio\nartiston twitter\nsumm ery\nsu is\nsil as\nj alli\nforci bly\ndel ano\ncu d\nblogg ing\nair craft\nthri ft\npal myra\nber liner\nunder gone\nfu j\nv ray\non b\nmand olin\nkra ut\nbutter cup\nbr ats\ntermin ation\npenn state\nmoff at\nmo dem\nashi on\nðŁijį #\nthin king\nre publi\nou ta\nbeh ance\nra ha\nloc ket\nparag li\nl hr\ncrow der\nma gu\nlight ning\njo c\nfire bird\nany l\nan vil\nsus anna\nr ö\nfeder al\ncas ket\nbo or\nðŁIJ ¢\ntion ists\npushawardskath niels\njog ja\nha kim\nðŁĩ®ðŁĩ ±\nkendall jenner\nfri es\nboo l\nboath ouse\nðŁIJ ĺ\nðŁį Ĺ\ns lin\nkash yap\ni que\ncare free\nðŁĴ¨ ðŁĴ¨\nhu ber\ndo b\nbre con\nan acon\npho bic\ndeta inees\nðŁĩ³ðŁĩ ´\nun ter\nsea horse\nman c\nla ila\ncy tes\nauthor ised\nwi pe\nstor ia\nmi yaz\nk ling\nisol ate\nhe brews\ngu cci\naustralian open\ntex plain\ndis continued\ncrow ding\nmer its\nall ar\nðŁĸ ķ\ntiem po\nspo ti\nbalenci aga\nl cm\nkay la\nder mot\ncor dill\nou ille\noh m\nle thal\nfree zes\nut b\nshe pp\nrou te\ndar y\nbha van\nbreath less\nash anti\naci fic\nne followers\nkristi an\non c\nmary lebone\nber ks\nx posure\nunmiss able\ntul ly\ntor bay\nraven s\nkar thi\nad vers\nðŁĴª ðŁı¾\nus z\nsc is\nmil ion\nat ura\npeach y\ncra m\nev ils\npel ham\nparadi so\nmeteor ite\nkra vitz\nyo te\nconfis cated\nbru ck\npla sh\nmur ano\nmaro ons\nðŁĴ ¡\nyn x\npick le\nlovin it\nk ra\nr ns\nann apur\nu ct\nle ander\nlan adelrey\ngab on\nnumer ical\nmens style\nma pp\nju g\ngli ding\nsteve aoki\nfric kin\nfood fest\nch int\ny pres\nsidd harth\nbutter field\ni ff\nad jour\nw gr\ntam my\nme kong\nit forward\ng td\ncryst alline\nsur faced\nsuper cross\ndilig ence\nv z\nsd al\ns fm\nin version\nsni ffing\npun to\nle vis\nka jol\nini esta\nthe future\nsqu all\nend alz\ndi me\ncon tention\nce sc\nshin y\nband age\nnom adic\ndif fusion\naver y\nstir red\nrig by\nos mo\nhard ships\nwh or\ns sp\ndis ks\nðŁį ©\nìĦ¸ë¸IJ íĭ´\nwil ding\nyy j\novie do\nn pp\nexcep tions\nsever ity\nmade by\nharve ster\ndel inqu\npedi atrics\nhuman trafficking\nappre hen\nw lax\nthermost at\nwi gnall\nd pr\nwoo oo\ntra u\ngor such\neast ward\nconclu ding\nteam jesus\nfla k\ncc r\nsa sh\nman te\nhi k\nvag ab\npur sued\nlegis lator\ndi ri\nray mond\nnu dge\nmun dane\ns ars\nmccon augh\nck in\nâľĮ ðŁı½\npho p\nme yer\nhaci enda\nfeasi bility\nsapp hire\nmu gh\nly di\nlo west\ners ville\ngod speed\ngabri elle\nd agen\nbeer fest\nbang alore\nra ff\nn pl\nlu kas\nach an\nsno ws\nml c\nhu mming\nten ter\nresi dual\nmou ssa\nle andro\nke strel\nd reads\nresu med\nhr m\ncom ix\nagreat again\nun loading\nlovel ife\njack ass\ncu yaho\nwh ining\npower shell\nn gs\nfront page\nbarbar ic\nuni q\nol phins\nintensi fies\nea c\ndy sp\nseabir ds\ntann ed\nsti el\nho ws\naaj ith\nmc avoy\ná ¹\nwindo ws\nwh u\nmuham med\nide ological\nmi de\nj ingle\nbbcra dio\nultra violet\nnext door\nlei den\ncon un\nan thro\nair way\nwa irport\ntr p\nrace day\nl ml\ng ough\nin stig\nden berg\nes ther\nmeat y\nda vie\nco founder\ntour mal\nshir ley\nob noxious\nloo sing\nðŁįĢ ðŁįĢ\n⾨ #\nspiritu ally\nsc rob\ngo for\ncoffee day\nðŁıĪ ðŁıĪ\ni em\nextra dition\nsett ers\ndemb ele\ntur nip\nmathi as\nliken ess\nroo st\ni en\nero ck\ndro ppin\nmu ay\nfeyeno ord\nbon ang\nsv g\nous ell\nmar vin\ncas ing\nmor ata\nedi bles\nco a\nav n\nta ken\nice man\nt cc\nsand berg\nid gaf\nconsider ate\nps f\nay y\nscho en\nhake em\nexcer pts\nno elle\ninevit ably\nblumen thal\nwh yi\nunder taken\nsp ub\noni um\ndaw kins\npro tip\nâĺ Ħ\ntroye sivan\nt ye\nstati stic\nsm l\nðŁĮ §\nger anium\nver watch\nyo ak\nworld wide\nvolta ire\nns x\nna iling\nmo ira\nband ar\nlay ering\nkin dest\nef fi\ncham plain\napo stolic\nta vares\nlero ck\nappeti zers\nac centu\n;- ;\nw awa\nor ning\non der\neasports fifa\nar p\nðŁĺĬ ðŁĴķ\nup setting\nstr inger\nsho ggi\nlu pin\nl ny\nsu bor\npr itz\nmor o\nhil i\ntro ye\nscor p\nher story\nent ral\nch ine\nmar ques\nhop kin\nmo g\nh cafc\ng j\ny aaaa\nru moured\niti ans\ncotton wood\nbasti on\nnine teen\nmish acollins\nmen i\nhandicapp ed\nalt coin\nmin der\nat socialmedia\nallen town\nak on\nðŁĺĿ ðŁĺĿ\ngw u\nay ah\ncannab ino\nanth on\nair stream\ni wc\ncbc nl\nðŁĴĥ ðŁı¼\nw soccer\nse ong\naad haar\nl anger\nì ¦Ī\nthe bachelorette\nt chaikovsky\npep tide\np sl\nagri business\noun i\nscat ter\nnul li\ninhibit or\nvie ira\nra iling\nlaw ley\nðŁİī ðŁİĤ\nì ²\nsu tter\nmi u\nhusk er\nhar rys\ncon cac\nc ates\nas ak\nãĥ Ł\nserpent ine\nsanta fe\npat taya\nmodi fy\njay hawks\nh ors\nbrain storm\nbe sik\nwat h\nqu on\ncreep y\nu ic\nsc aring\npeel schools\nðŁį ª\nsh yam\nrou se\ngov ts\ngo pal\npar th\nmaxim ise\nken il\nhhhh hhh\nhealth iest\nso or\nr acker\nbb on\nvintag ec\nthe w\nmarl boro\nd any\naven ues\nag it\nro sh\nsc ania\npr itchard\np mb\nglass ware\nyour bestfriend\nwhist ling\nla e\nindigen ou\nbrad ford\nco q\nbloom sbury\nspirit of\nop eng\nflick er\ncre ed\nconfi dently\naw fully\num n\nhermo so\ntom y\nsn ape\nkar ma\nwa isi\nnw dogrescue\nmon mouth\nde fun\nbu ren\nwest gate\ns show\ngoog ling\ngibb on\ndeci der\nq vc\npat ra\nm chen\nbra ille\nwh opp\nde bac\none al\nwilly levy\nwhite side\nthe red\nim patient\nsaat chi\ndepic t\nwar na\npick ens\ngh um\nfi bon\nopla sty\ndirector ate\nwh ittle\nkim my\ngru dge\nal tu\nsimil arity\neng ro\ncham onix\nalic ante\nsecre cy\nre master\npyg my\nlow ski\ngujar ati\nfigur ines\nat uri\nagar cia\nultra sonic\nout breaks\ninno cents\nunder goes\nacou stic\nnhl blackhawks\ndan ville\nðŁ¥ Ģ\nholo graphic\nf able\ncum ple\nev ens\nacqu aint\nshe ba\nthe drum\nequili brium\nsincer ity\npremi ums\njelly belly\nbuildthe wall\nand rade\nstaur ant\nsavethe date\nre election\nprescri bing\nkno tt\nsome ones\ncook ware\nsal ford\npopsic le\ndr ury\nc age\nag gi\nportra ying\npande mic\npan tom\nv d\nero es\nbacktothe future\në ħ\ntrans gre\nsuici depre\nstay safe\no bas\nju ma\nheigh tened\nendome tri\na jo\nv yn\nnd t\nlif es\ntu ll\ndic tion\nchilli es\ncalla ghan\ntake out\nsu bbed\nstephen curry\nsol i\npromp tly\naw ang\na theatre\nni th\nd ney\naji th\nabas ketball\nsk it\nmol ded\nduc tion\nan ker\nìķĦ ìĿ´ì\nworld sbk\nsyn onymous\nrr r\nro dent\nash win\nÑĭ Ð\nge ton\nreal talk\nmul ch\nj ani\ndray mond\nast in\nharmon ic\nh ms\ndwar fs\nambi ence\nab laze\nth grade\nra kh\nmc david\nbar bic\npre t\nmun ster\nkis sim\nindic a\ncy r\nac nl\nðŁĩªðŁĩ ¸\nturno vers\nrae es\nplu to\nm hr\nlec tric\nkon en\nca stan\nmitz vah\nbo wie\nune asy\npode sta\nphy lo\nim moral\nhour sof\ndecath lon\nc br\nkham enei\nja in\nex tric\ncu shing\nz hao\ny id\nplo ver\nnor ge\nyak ima\nwomen shealth\nto ff\ngil mour\nch ay\nาภ£\nvisit wales\nart fair\nal en\nwillam ette\nlu zon\nelli e\nblin ders\nthe john\nco lette\no zzie\ndrun ken\nbur kina\nadirond ack\nrescu ers\npay out\nmar ge\nju ly\ncar parts\nsu shi\ngoo dison\nag wa\ncor doba\nbox set\nad un\n.. )\nle sotho\nlayo ver\nke an\nal b\nठľ\nson net\nmus ke\nmach i\ni sto\nbran de\nsyn ony\nli oness\nak ia\ntexaste ch\nstun g\nhang ers\ncommerci ally\ndu mas\nuni magin\nspar king\nri f\nz ic\ntabern acle\ng aff\ncreati vely\ncoura ge\narma geddon\nðŁIJ ·\ns st\ngerald ine\nss chool\nson am\nne ha\nman c\nj query\neleph ant\nejec ted\ncam i\nyy z\ncle m\nx games\nwi ft\nsw we\nra bi\nback in\nman j\nhol t\nho ist\nfire stone\nðŁĵ ¦\nur anus\nla ing\nðŁĩ »\nnfl network\ninsp ace\ngod win\nclari fication\ntre spas\nmulti plic\nhack er\nðŁį ¹\npol enta\nheat ers\nmk tg\nmercedesam gf\nãĥ Ĺ\nwwer oman\ngu ing\ngfuel energy\nภ·\nu ste\ndi ony\ncu sack\ncor ned\n( -\nthex files\nv news\nsind hu\nle high\nfun times\nfo g\nexp ats\na beach\ndun fer\ndeduc tion\nbeauti full\nol us\nmodi fications\nmul la\nnot ation\nwweroman reigns\nthal aajith\nkar im\nharmon ica\nsalv ador\noc co\nplan tain\nfaith fulness\nprefer ably\ncar th\n!! ?\nwomenin film\nso br\nenterpri se\nche at\nab del\nsar coma\nmca fee\nchu a\nmuseu mof\nblack stone\nar af\nun dies\nsmugg lers\nyo se\nten dulkar\npreci p\nfc v\ntrac ey\nin voice\nam bo\ntheo logi\nli ye\nchronic pain\nbash ar\nwar burton\nthe more\nsol dering\nho sse\ngine bra\ng ly\nflash y\né ĥ\nschu ster\nlivepd nation\nind ler\nbon jovi\nblack ened\nsilhou ettes\ngar go\nni les\nmu zik\ngau rav\nchant illy\nrecl ining\nmc cur\nlou doun\nhar old\nad ha\nf ata\nali l\ntb f\nv am\ntwenti eth\nthisi sy\nthe bachelor\nlan ark\nsni der\nbar an\nfi sts\ncra i\nal go\npl ice\nor ang\ngen ds\ncor nish\nste dt\ndi shing\nci on\nrel li\nin bound\ncent en\nva z\nsc ia\nune th\nmock up\nlac s\ndr an\ndesign museum\ncos mon\nc dr\nbull seye\ns ds\npamph let\nfi zzy\nsilicon valley\nbarthol ome\n\' ..\ntra e\npett is\nosh kosh\no ast\nmal ice\nbody suit\nall uring\npu tra\nno ki\nar news\nwil lows\nurban a\nradi sson\npodesta emails\nne apol\nj timberlake\nti q\nom ents\ncc c\nwhat wedo\nmat is\nign acio\nho ss\nhill song\ngra be\nfran kel\ne us\ncre epi\nbenedict cumberbatch\nâľĮ ðŁı»\nra bies\nmc m\nbatmanv superman\nsym path\ns ry\nroland garros\nku ch\ngross man\ndu als\ncoco on\nbri scoe\nrebelli ous\npride of\nmi mosa\nk ola\nhear th\ngil more\ncaled onia\nc md\npy jamas\nam end\nðŁĻ ħ\nhau te\nev r\nðŁį ij\nðŁĩ« ðŁĩ\nvo res\nmarj orie\nin explic\ndat piff\nspr in\nrub ens\nlam ent\napo d\nre stores\nra hm\nmadein italy\ncas ed\nca pre\nbang les\nag ile\nrefresh ment\nparkin sons\ngri eve\nexpon entially\ngr yl\ndrin kin\nठ¸\nsch la\nsnap shots\nmis on\nsf v\nnov i\ncun y\nthe snp\nkin ks\njosi ah\né r\nmegam an\nm dm\nblu eli\nx ena\npar ab\nmaker s\ncle f\nðŁĺ ¸\nt cr\npa io\ncron in\nthe boss\nscar y\nran os\nko e\ndaim ler\nwy man\nte es\ns beer\nise ach\nin is\nand an\nðŁĴª ðŁĴª\në¹ Ħ\nstal wart\nni shing\njun k\ngu s\nperfec ting\nnew x\nir us\nco preps\nsupp er\nsuc cumb\nmosch ino\nhi ggs\nãĥ ĸ\nshan ahan\nmark t\nlor a\nhou thi\nex c\nor dan\nko d\ngro in\njust doit\nbell ar\nrho a\npsori asis\nma arten\ninsu fficient\nimpac twrestling\ng aff\ndu stry\nsummer of\nnews week\nmur a\nis la\ndo yle\nma ic\nluke bryan\nfibro myalgia\nر ÙĪ\nm la\nkar am\nju d\nevoc ative\nठļ\ntro tters\ntri pped\nple aded\nfall in\net fs\nvenom ous\nmcconaugh ey\nflam boy\nchang i\ngood morning\nfri gid\nth aman\nre claim\nbo leyn\nãĤ ¦\nrecon c\nke sh\nel sie\nbed fordshire\nbe ss\nsub continent\nkat erina\nbo z\nthessaloni ki\ntermin ated\nrag ons\nintro s\ndr r\ncre ss\nbrief case\nblin ks\nran bir\nperfu mes\nexc ited\never ton\ncou k\nc pp\nyr kkh\nsk u\nri va\nkit sch\ndi pa\ndo do\nbo ho\nticket master\nling en\nlau er\ndat sun\nðŁĶĹ :\nm ro\ngon dola\nci elo\nchapp ell\nfit r\nski ps\nnc ga\nmur dock\nmulti disciplinary\nki wi\ncer os\ncac ti\nvene er\non u\nk ars\nevangeli on\nÑ ı\ntitan fall\nsecu rely\neyel ash\nîIJ Ĵ\ns watches\nheal ing\nton ya\nn q\nmi stry\nhigh e\ncab rio\nm ö\nkinder gar\nin nate\nvi pers\nnucle us\nmac key\nal pine\nox y\nmor tem\nfol ders\na fest\ná ŀ\nrepur posed\ngreen belt\nde port\nwest port\npu sb\nnews brisbane\narquitec tura\nset life\nmag ick\nmacar ons\ndark horse\nvau x\nmu zaf\nðŁij °\nì§ Ħ\npro wl\ngon i\nedmun ds\nvie jo\nlau rier\nenqui rer\nembank ment\nðŁĮ ĥ\nro mel\nma ury\nline a\nk lee\nbis ons\nb able\nwe athers\no deon\nde volution\ncordi ally\nbu ch\nsti an\no varies\nlov ell\ncru iser\nc th\nv ay\nun nie\ntro w\nt ler\nben az\n- £\nnas asocial\nmeto ffice\ngu en\nclu msy\n? ¿\nor ps\njac ket\nin nes\nregi men\nmah mood\nkam ala\nfi end\nda al\nco as\nå ½\ntwitter less\ntao iseach\nbuk hari\npanther pride\ndelight fully\nbook case\npan tera\nms ley\nmesqu ite\nhere by\nhe morrha\ngun control\ndu ma\ncolla red\nav l\nador n\nvaul ts\nteme cula\nsky diving\nplay maker\nmur ug\nlat vian\nhere fordshire\ngod mother\ntill man\nshoo ting\nmar it\nmal function\nfr inge\ntu bed\nnab show\ned dy\ndo ge\ndiag onal\nas mith\n好 ãģį\nsti est\nspectac ul\npinst ri\npi pp\nd sw\nðŁĮ Ŀ\nnam in\nmb ur\npropri etary\ngener ale\ndic ed\nba hia\nðŁĺĬ âĿ¤\nurban ism\npe ps\ndri scoll\nu tt\ncay ne\ntul ku\nnational siblingsday\nya an\nv adi\ntogether ness\no en\njuli en\ncam pion\nðŁį ī\nye ahh\nwo e\nt alia\nlepre chaun\np ice\nfin i\nde ver\ncarri ages\nwe aves\nscho les\nra deon\nlil o\nj cc\nicec ream\nhagg ard\nel ks\ncir cled\nyl le\ntu cci\nic loud\ndr an\nanaly zed\nðŁĴĽðŁĴĽ ðŁĴĽ\nâĢĭ ,\nwin x\nsonam akapoor\ns fl\nni ka\nlock out\ninjec tions\nerad ication\nbio chemistry\nrot ate\nrang ersfc\nplayo verwatch\nkr iti\nhand lers\nwin ks\nmis ss\nk su\nbest fiends\nðŁijī ðŁı¾\nâĶĢ âĶĢ\nsuper iority\nkri sti\nflan ked\nalt coins\nmimo sas\nhallo ws\nyo i\ntro ller\nre pay\nny g\nie a\nfol lic\nðŁij ¾\ntele caster\npro claim\nfear ful\nwhi z\nmosa ics\nimprovis ation\nbic entennial\nwe sley\npad ukone\nevery ones\nain en\nlat i\nlac ma\ngram mer\nfore arm\nde ir\ncolum bian\ntyne side\nsh ingles\nrou sing\nrand le\ncru mbling\ntu pelo\nglo s\ncor mor\nbosni an\nrac ine\nk ington\nha ines\nchildren sday\nat un\nanaly zer\nat ch\nmeat loaf\namaz es\nisa acs\ncorner back\nos wego\nmulti ple\nelectro cu\nadmi rable\nsho als\nred mayne\nlo sa\nmcdon ough\nker ber\nte ddington\nrh one\nplu mp\nne stor\nkw h\nhat ching\ngirl z\nbel uga\n.... ?\nðŁijĭ ðŁı»\ny ms\nble achers\nang es\ntor tu\nrefugees welcome\npu th\nvul can\nnu i\nmad hy\ndoubt ful\ndami en\nyu u\nsi ppin\nky la\nospre ys\nmache te\nlad bro\nsh era\nscoo ped\njy p\nz co\nu bi\nsmugg led\ndre d\ncl ondon\nder berg\ne hl\ndu mont\nde de\nè ne\ns bb\npru dential\nlife saver\nkey notes\nbal t\nun settling\npu ente\nout fit\nleg acies\nexam inations\nred hawks\nmanipul ated\ngaz ebo\ntou hou\nmedical marijuana\ning week\ngi bb\nzero hunger\nrac king\ntu ba\nsun a\nseaw ol\nw pc\noz an\ncav ite\nbroo d\nwool wich\nvol de\nun fur\nshadowhun ter\njo bless\nhar var\nfood blogger\nca wards\nta hs\nst b\nno wh\njo es\nh j\ncahon tas\noper ahouse\nmi ght\nflag ler\nb ch\nsp ire\nbun gee\nb x\nri fle\ncu rie\nba ines\nru pauls\n) ."\nvi vac\nhealth it\nwel lesley\nthrow down\nsa ver\nri vier\nx ray\nnap erville\ninduc ing\ncharcu terie\nberser k\nba at\nspart acus\nnoo b\ndead ass\nbel e\nvi ri\nniam h\nmountain ous\nsi xx\nqu a\nte sters\nprince ton\nin q\nber gam\ndemocr acy\nbre am\naun ts\nre is\npet r\npar ramatta\nnic ht\narte facts\nun just\njet pack\nin venting\nfilip inos\nfarn ham\ndo il\nchu cks\nac ross\nsp ass\nr anc\nhundre d\neuro sport\nslam ming\nhouse mate\ngam bit\nd ÃŃa\nazzur ri\nstam ping\nnar ra\ncampe on\nsuici des\ncolon ization\nbe zel\nxin jiang\nstand still\nhiero gly\ngou da\ncam bs\nthr ill\nstar vation\nnight shift\nadi l\nspher ical\nloc alization\nclean tech\nzarago za\nwor ka\nspec k\nsou the\nlip sticks\ncb t\nak im\nag es\nst ica\nun k\npion ship\nshell fish\nkyr gios\nfar is\nsty lish\nsqu aw\nkel p\nid w\ncap stone\nw gi\ntrol led\npe ppa\ngam mon\nanti och\n; (\nz ations\nun realistic\nss cot\nslu g\nke ats\nen th\nad iti\nuni onist\nol or\nke ita\nexagger ated\nbriti shar\nØ £\nsuzan ne\nso z\nn gr\ncampu s\nbri o\npet iti\neh ler\nci k\nab io\nubiquit ous\nÅ į\nwi gan\nplac id\nbank holiday\nmy sql\nmc nally\nfire wall\nbay lor\nbar stool\naz ur\nâĿ¤ ðŁĺĺ\nmid as\nãĥ ¡\nsun downs\nsto gether\nsequ ins\nm va\nc ph\nðŁĩ¦ðŁĩ ¹\ntrail er\nso wing\nam ary\nmol lu\nmackin tosh\nal di\nwil fred\nvaccine swork\nlo ls\ndial ect\ncas inos\nmiliti as\ngo thic\nfort worth\ncalibr ation\nbr ine\nble ached\nke k\nn ss\nhar u\nacry lics\nmar ou\nger sh\nbor ac\nsam ar\nrome o\nmr p\nlight ing\nab p\nspra sad\nmain line\nflav our\nbo sp\nalber to\nthe show\nsanta anit\nplu s\nn fu\nmorning joe\nm chu\ngi mb\nwater loo\nut z\nmotor ized\nmar icop\ninst adaily\nrever sing\nmm ons\ncen ta\nsalv ation\njaco by\ninquis ition\nhe id\nbantam weight\nsun d\nstri p\nsime on\nfu tile\ncarpen try\nal ondon\nðŁĵ ¡\np ma\nthe hobbit\nmo ab\nkeep sake\nfor mmva\nwater mark\nfree iran\nfolke stone\ndrif twood\nsen sor\nmaybell ine\nfor s\nfer ous\nane mia\nglen coe\natl ant\nat lee\nincre ibles\ncor t\nrefuge e\nelli ot\nÎ ±\ntim or\ntann er\ntake down\nm nu\nha bad\nproud to\nnu tt\nhann on\ncastle vania\ntimm er\nrestric tive\nl tv\ndelu sion\nay la\na ann\nze al\nj ant\nim bi\nbat smen\num o\nther on\nsmir k\nper ishable\nd wind\naa ja\npla giar\nlu dic\nkesel owski\nclin ically\nreck oning\nmountaine ering\nconj uring\nyo gi\nwest land\ntoma hawk\nmontr éal\njaf fa\nb de\nra fts\nn lc\navrilla vigne\nux design\nsun roof\nram s\ngw yn\ndie ter\nawak ened\nab l\nsur realist\nder mat\nban get\nthe cat\nlatin x\ngar nett\nay or\nwel der\nstate house\nlove joy\ngir lie\ncoquit lam\nrefu el\npo u\nman candymonday\nma q\nbus by\ntt f\npicture oftheday\nak ade\nyi pp\ny ere\nwi p\ntre search\nli ya\nwh ol\ndig ic\nbel lied\nabar th\nwill ough\nvil nius\ntellu ride\nkar at\nanth rax\nt work\nas say\nach am\nwil shire\nrain drops\nl are\ngigab it\ndo san\nab p\nðŁį ¬\ntr ynna\northop ae\nh inter\ngo irish\ngian carlo\ngas ol\nchat bot\nwhere is\nsi h\nholli ster\ncli c\nabc network\ndress ers\nfe asting\nelev ate\nconstitu ent\nadventure time\nsr iti\nel ou\nde soto\ndav i\ncontain ment\nlo di\nko da\ngl in\nwr itten\nwind chill\nout spoken\nmake adifference\nj annah\n" --\ntro t\nsummer fest\nsil os\njoom la\ngame design\nar go\nru pp\nperio d\nnew quay\nmitt ens\nici ally\nemplo ys\ndu bious\nbail out\n+ @\nðŁĮ §\nâĺ Ľ\nspecial ties\npan ini\nmb ridge\ngar nier\ndu els\nanton ia\nu j\nph u\naw at\nrobo cop\nmac abre\ndom en\nband ing\nanat oli\nad n\nnam co\nlaco ste\nbuy out\nfav ourable\nesc o\nsexu als\nkait lin\nen try\nad ly\nyang on\nwin ston\nwau gh\npati sserie\nozar k\nkristi an\nkha shoggi\ng mm\nembar king\nmo aning\nmal kin\nj el\ndi ggers\nbee keeping\nwhirl pool\nhor gan\nbb cin\nðŁ¦ Ĭ\nðŁ¤· ðŁı¼âĢįâĻĢï¸ı\nsuffra gette\nmer u\ndro ck\ncru fts\nwoo dru\npi ero\nom bud\nesp ana\nadvis ories\naby ss\nus ar\nren ato\njean ine\nendocr ine\n. âĿ¤\nðŁĺį @\nìĥĿ ìĿ¼\nwand sworth\nslo vak\nreli ance\nin competence\ney oung\nap as\na sen\ns lander\nljubl jana\niti ve\nar gent\ntion day\nreson ate\nmore house\nen chant\nb sg\nri vers\nn ils\nm da\nindul ging\ngal le\nsav annah\nno k\nmn h\nlu h\nhi berni\ntor turing\nle b\ngirls who\ndro gh\nadri atic\nshar pen\nswa sti\nse urope\ni fs\ngi mpo\neri e\namade us\nipf conline\nðŁĺ© ðŁĺĤ\ntr l\nas syrian\nðŁĻ Ģ\nvi ene\ndata protection\ndream catcher\nthro win\nred undant\npen rith\nn ne\namal gam\nsense less\npar v\nnational guard\nkne eling\nguine ap\nfa qs\ncy an\nãĥ IJ\nwhi le\nloun ge\nsik kim\nmakeu partist\ninstin cts\nha ji\ncot to\nvil i\nmb l\ncom mo\nmi ga\nlu s\nar mp\nŀ ï¸ı\næ Ī\nplatin um\nna am\nlukebryan online\ngulf stream\nad der\ntot ally\npal i\nwel i\nalter ing\nts x\npar ake\nmon ol\nair lift\nsym pathetic\nsu pa\nrecep tors\npat a\norchar ds\nop m\nlo dged\nky i\nbru n\nvillen euve\nko e\nelectro ly\ndead mau\na ed\nsharp ton\nre branding\nnu est\nhub spot\nhemp stead\ngw end\nbourgeo is\nwn w\nliving thedream\nfriday night\northopae dic\nkx ly\nis and\nf co\nf ada\nbla s\nall l\n: +\nr cb\nmi kel\nlive streaming\ndin ing\nde ford\nshe esh\nlon nie\nho ard\nzar if\nthevamp sband\nspiro smar\nspirosmar garis\nn hi\nft k\nbiome tric\nbas f\nauberg ine\nacti vision\nvari ability\npi ans\nmed an\nl nk\nira h\nt pc\nr tv\nofi eld\ndr aco\nbri c\nx perience\nwe stin\nsantabar bara\nquadru ple\nconnec tivity\nbru ssel\nmarriage equality\ndat am\nconcac af\në ¬\nw acom\ntruth ful\nsw irling\nsher lock\narchae ologist\naque duct\nyork town\nton k\nten n\nsti letto\njo on\nab ril\nf ft\nboiler up\n? ðŁĺĤ\nshi sh\ndeci mal\nunle ash\npl at\nec risis\nnar c\nsuff ice\njellybelly friday\nit an\ninv ades\nctr l\nsantaanit apark\nle aping\ninvic tus\nful fil\nx ic\nunder stated\nl é\nhigu ain\nct is\nbo realis\nannihil ation\nz hu\nul rich\nshar ing\npul w\neth andolan\nvard han\ntimber land\ncorin ne\nspac ef\nresili ency\npu k\ninspec tors\ncer ve\nbeli us\navent ure\npar ris\npag ing\nhy land\ndebac le\nfirst look\nbast ille\nĽ ï¸ı\nðŁĵ °\nðŁĮŁ ðŁĮŁ\nrel i\nraje ev\nfand oms\nval verde\nmed ford\nvo wed\nv amp\nsweat pants\ndee z\npar nell\nglen wood\nbur ners\nroad works\nno ire\nlek ki\nðŁĺ³ ðŁĺĤ\nsus que\nsp as\ns dr\nlaunch pad\nde tto\nsa q\ncam po\nðŁĺŃ ðŁĴĶ\nvi va\nne g\njol ly\ndi anna\nwaf fle\ntrick le\nth w\nscumb ag\nhenrie tta\nfoo lish\nexpo s\ncaf er\nbil awal\nâĢ¢âĢ¢ âĢ¢\nstri be\nse ward\nn de\nlou th\ncyn ical\nbat o\nm ily\ninclu sive\nhai yan\naj ar\nðŁĺĬ .\nme redi\nd pt\ncan tab\nven n\ngan e\ndi was\nbird club\ntr ina\no gs\nmon ic\nhe en\nde mented\nshe ik\nnoman ss\nitu nes\ngly pho\nðŁİ ¯\ny ous\nwi fe\nvom iting\nom gro\ntax onomy\nri eu\nberlin ale\nad ag\ntur ret\nmaul ana\nmag icians\nag ul\nxx i\nthe age\nshel ter\ngru ber\ncri mson\nbal di\nab sin\nh inge\nme ij\nloc a\nge iger\ndri guez\natten tive\ndit ched\ncat nip\níĬ ¸ë\nloaf monday\njoko wi\nce bu\nchur n\nbreeder scup\nstap le\nlef tists\ntrain ings\nfu ku\ne bb\ncolon els\nâ Ĭ\nwhist les\nshon en\nmc ge\nvel asquez\ntes lamo\nlom o\ncar rey\nin ton\nkent on\nisleof man\naaj tak\nven ous\ntuske gee\noriginal funko\njewelry onetsy\nðĿ ķ\nper ak\neye balls\ndom ingu\nath al\nðŁı İ\ntg dn\nta v\nspam ming\nren ters\nnot ably\nkav anagh\npp ert\nm db\nfox sport\nex ec\nbesik tas\nauth am\nka iju\nðŁĮ Ħ\nutili zation\nspo of\nindic es\nhin der\ngir ard\ndeep en\nanag ar\nðŁĶ ¹\ntermin us\ns wore\nrita ora\nli ven\nbra sil\nalham bra\nðŁijıðŁı» ðŁijıðŁı»\nton ews\nore gano\nboat eng\njoh ann\nbu mmer\nba ston\nà® ķ\nthen ation\nspac ec\ncru m\nbu sch\nsarah g\nlo we\naw arri\nâĪ ļ\nzel o\nwayback wednesday\ntent acles\nl hh\njo ec\neras mu\nde witt\nrick man\ndill ard\ncuri os\npoin ty\npo thole\nmc nair\nhe mat\ndr m\nde fies\nw sb\nplant ations\nha im\npal trow\nup i\nter ies\nshor tened\nal ac\npon der\nla ker\nbest fandom\nambul ances\nsafe way\npas ser\nmelo dy\nima r\nspo tty\nin der\nhear tedly\nge ss\nbi ga\nðŁij Ĺ\nfl ack\nbott as\ny ara\nsi b\ndisci ple\nti dal\nsol ve\nlon a\nâľĬ ðŁı¼\nstrato caster\nk rs\neng age\ndu chen\nbuon giorno\nঠ°\npi geon\nlets dothis\nfe et\nci roc\nðŁIJ Ī\nsom ers\nko ch\ni ain\nal m\nveg am\nre pu\npromethe us\npede stal\nke swick\ni ol\nori z\ncotsw old\na er\nĮ Ģ\næ °\nhead sets\nal ona\nvolde mort\ngor d\nfu se\ndont care\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃðŁĺŃ\nspl at\nport als\nlets get\ninform ation\nen ugu\nattend ants\nth ackeray\nprogre sses\nke igh\nalpha bets\nðŁķ Ĵ\nsand ton\nderel ict\nìĬ¤ íĥĢ\nun familiar\nsuper human\nri an\ninsur gency\ncor rug\ntrage dies\nsi sland\ndel ilah\nand aman\nfu chs\nbr ati\nadam son\npar as\nlive by\neven ting\nç ķ\nra go\nle z\nil ook\nbou lders\nbo j\ntom brai\nring ton\nma ul\nfi que\ncomplic it\nwel beck\ngryl ls\ndiscrimin atory\nune p\nscra ping\npan a\nocean ic\nmat tered\nಠ°\ntropic ana\nhouse wares\nbell i\nagu irre\nun censored\nmult itude\nmon god\nmet life\nkapilshar mak\ngal len\nconfin ement\ntru est\nnew bies\nchil ton\ncal cio\nballis life\n________________ ________________\nâĺĥ ï¸ı\nsantam onica\nopen ness\nfaw kes\nco leg\nbo yn\nðŁĶ į\nr caf\npr in\npic colo\ndev oured\nav at\nadequ ately\nìĬ ¹\nthi e\nmc ity\nmadi ba\nle mmy\nin ject\nfarm ing\nit el\nbeauti fu\nৠĩ\nÙ ¾\nmiz uno\nen rolling\ndu mber\naqu inas\nwo ws\nsque aky\nl ons\nimpro per\nesk om\nemancip ation\nbar ba\na hahah\nâĺĺ ï¸ı\nmc mur\neye sight\ndissi p\ncairngor ms\nbaf ana\ns movie\nli ang\nger d\nandalu cia\nam mon\nyl de\nt mi\ns group\npoly mer\nnewin dia\nli i\nte w\nle ge\ngo ha\nfor ay\ndissol ve\nth ks\nso ire\nlan dis\ngo blins\nglau coma\njble fevre\nd cu\nth ony\np tx\nmargare t\nmal in\níĶ ¼\nli shing\ncough ing\nconce aler\nund p\nsw ir\ng te\nsil ica\nro asters\npo go\nou sted\nin play\nbird sof\nhist med\ndep tof\nbon g\nric key\nmad man\nfundra isers\ne al\nportsm outh\nmu th\npredic tor\niz one\ncompens ate\nsh inju\npo achers\nnbc dfw\nci ano\nðŁı °\nuof a\npo cus\nopen ers\ninsi dious\na the\nyi el\nsup date\npel let\nn sc\nf fr\ncha e\n½ ï¸ı\nlo m\nl fa\nkissim mee\nhafi z\nå ¿\ntr ich\nelec tive\nbrant ley\nmi g\nmee ee\nlun ar\nlaver ne\ncor related\ncarto graphy\nar au\nz az\nyi p\nviol ates\nnegoti ated\nlaw ton\nâĢĭ âĢĭ\nto ads\nreno ir\nfollow your\narma an\nw apo\nth yr\nn gu\nmark sand\nrein force\npension ers\npa f\nmu kesh\nfer ro\nçĶ °\nven u\nre run\nman zan\nfin earts\nbray den\nx m\nwag yu\nun bearable\nri deau\nec m\nc pm\nb itt\nðŁĻĥ ðŁĻĥ\nye ahhh\ntemp ura\nre view\nnoo o\nmoder ates\nli ef\nlat ory\ndeplor able\nco yr\nre gas\ngov ina\ndv or\nangh ami\nseri es\npal lets\nlin d\nsha olin\ncolli sions\nthan a\nl lu\njume irah\nhoney well\ncompan y\nve dic\ntwenti es\nt was\nsnu ggling\nla f\ngossi p\nbow yer\nba si\nvigil ance\nsni pe\nsenti ent\nrepresent ations\nformul ation\nadven tist\nâĨ Ĵ\nt sa\nss ors\nisu zu\nbon ham\nvi vegam\nliver more\njoin us\nðŁĮ ¶\nstage coach\ncon tre\nclique art\nðŁĵ Ī\nðŁĴ ²\npar son\nful ham\nª ï¸ı\nomgro bots\nbridg end\nwink ler\nwaver ly\nton to\nslu gs\nglit tering\nni d\ndog sof\nah hhhhh\nthisis queensland\npro wess\npale y\nn ga\ngangu ly\ndor mant\nagchat oz\nvi acom\nsong bird\nron ny\nafter school\nun insured\nther a\nbc afc\n. "@\nja o\nip cc\nhef ner\ngen dered\ncou ch\nbe there\nv ann\nretali ation\nmoder ation\nj pl\nmac adam\ndan sk\ny us\nmu ri\ncar amel\nbro mpton\nar mando\nagu stin\n.... !\nski y\nkitty loafmonday\nido t\nen son\nha vill\nextravag ant\nðŁĴŀ ðŁĴŀ\nthe op\nun done\nephe sians\nnott inghamshire\nnec tar\nch q\nbai x\nte z\nstream lined\nfl oun\nall timel\nrepublic day\nmer curi\ncc w\nak ash\nðŁijĭ ðŁı¼\ntwi gs\ntul le\nti ram\nred ford\nne ttle\nel ms\nbu gger\nfitz roy\n! (\nver ve\nbottom less\nblu shing\nvaledic torian\ntin iest\nrecy cle\nju di\nather ton\ntime for\nti mi\nkis umu\nfron ted\ne ola\ndigiti zation\ncu ster\nbaz aar\ntri angular\nst ann\npaedi atric\nmer can\nma ren\ngv prakash\nwind screen\nun pack\nla do\nfinan ce\nsaf rica\ncron ulla\nbit ty\nbel ter\nbe bop\nâĢ¼ï¸ı âĢ¼ï¸ı\nmy x\nker man\ndd ell\nbringbackour girls\nsau ce\nrac al\npap a\nnu f\nfa red\ncartil age\nc renshaw\nvas a\nrele ss\nbook ish\nw mata\nite x\ndor al\nastur geon\ntremend ously\ninfo sys\nfan fare\ndie ting\nðŁĺ °\nsuscep tible\nsex po\nry erson\nmo fo\nyel len\nvar nish\nðŁĸ¤ ðŁĸ¤\nðŁIJ ®\nmo sh\nlif toff\nkamala harris\ncrow ning\n# .\nâĩ Ĵ\ntu f\npac er\nshaf fer\nen lighten\nswe ars\napolo getic\nyi elding\nun opened\nn vr\nken ner\njump start\nen sured\nà° ¾\nt mt\npack ham\ncd mx\nswer ve\nsprink led\nday dreaming\nboudo ir\nnicol asturgeon\nbe im\nmotor speedway\nane ur\nacron ym\nmer cer\nfacil itation\nd ass\nas il\n,, ,,\ntb ol\nba er\nauto correct\nwon ky\nthe garden\nremn ant\nmv ps\nmun ity\nling o\nkar am\nis ma\ndignit aries\nboy hood\nst inger\nmarath ons\nlo fficial\njo ero\nflat bread\ner aser\ncourt side\ny ville\nn ila\nli mo\nim ho\ntho se\npre viewing\nmissou ri\nexplo its\ncry in\n( ~\ny ooo\nsal ma\npo cahontas\nex uber\nan ad\nunited we\npun cture\nexplo iting\ndeci sion\ncauli ffe\nbe curious\n⼠³ï¸ı\nz av\nnewh ome\ncarbon ate\nbust ling\nbts fanart\naz ur\nade bay\nac cli\nkit t\nc love\nbur lon\nภĤ\nnew town\nim perfec\nhit z\ndepe che\ncarne gie\ntwitter blades\nqu art\nnu isance\nih sa\nt series\nknu tsford\ndoug all\nat ourism\nand beyond\nbli ster\nam es\nprob ate\nex ported\nca icos\ntoast masters\nnoo oo\nfa kes\npe at\nmaa stric\nha rem\nbha g\naus vind\npreli m\nchippe wa\nb ni\npo g\npa wx\nt day\ne ep\nbenedic tine\ntrigg ering\ne chi\nv k\npretty little\nhar k\nmam at\nel more\ncu ad\nar nab\nj hs\nc mp\nv ra\nstor mers\nlan ier\njar rod\nice hockey\nwren ching\nwreck age\nom ia\nna shik\nar co\nsveng oolie\nen tran\nbake off\nthisi smy\nsw r\ngrateful dead\nmus sen\nm ff\nfal co\ndor se\nwin n\nprin cer\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺį\nfir mino\nyu z\nsk op\nmum mies\nmor si\nl ca\nart pop\name er\nqu ant\nconfe ction\ncag li\nmccla in\nse ye\ns int\nro bi\nra aj\ná ¶\nway ward\nmi mi\nback side\nãģ Ĭ\nregi sters\ngru po\ndis graced\ni ghts\nanaly sing\nadvance ments\ntrum peter\ntr ice\nstlouis blues\nsapp oro\nofthe month\nj son\nj cc\nc of\nbo real\nanz ac\nro ch\npan tal\nny rangers\nn nam\nic arus\ndre au\në Ķ\nmo an\nðŁĴķ #\nyann ick\npope in\nma sha\nhouse keeping\ngy o\ngiz mo\nbook stagram\nsamu i\nex xon\ncri sto\nchi sholm\nsas qu\nric cardo\nrel ativity\nlu i\nd ori\nwe can\nsuper cup\nse aton\nfunc tional\nchil is\nsf r\np wd\nle eu\nl ha\nide as\nand a\nfli gh\nash u\ntou rof\nstarwars rebels\nper alta\non an\ndescri be\ndaf fo\nse ma\nmonaco gp\nk ink\nhimalay a\ngi za\nchim pan\nlaw school\nj z\nim mobili\ndick erson\nchan ey\nchain smokers\nand hra\nvir al\nover take\nmadein usa\net ano\nca ther\nquin ton\nik onic\nco pley\nanc entre\namal fi\nðŁĺį ðŁĻĮ\nsuper bly\nq z\nhu is\nsier rale\nmy name\nem ph\nyi sts\nsnap seed\nself love\nr cs\nshout gamers\nnewsl ine\ngn r\nec co\nca vern\nha pp\nenviron mental\ndream in\nag il\n! ðŁĺĺ\nwinter fest\nsh hhh\ns ye\nsch on\nmlb draft\nbla ise\ndunfer mline\nbe aming\na star\nðŁĺ ¿\ntu fts\nhar inge\nf ü\naq sa\nabu bakar\n!!! @\nwad ing\nfla panthers\ndun dee\nbo hol\nrejuven ation\ners week\ncor se\nwag ga\ntor o\ntat er\nsa ira\no tra\nmck night\nfor thelove\nt tawa\nbaff led\nlex us\ndavis cup\nsw ick\npenetr ation\nb dn\nwhe res\ntwitch tv\npr ing\nheal the\nf ms\ntm j\npir lo\nme zzo\nman ley\nlovel ive\nhu ffman\nðŁĮ ¶\nwa w\nto toro\ncur tiss\nchi u\nbil is\nti kka\nr td\nim poster\nedic ine\nolive ira\nneat ly\né Ľ\nwells fargo\ns mbb\nf ick\nalltimel ow\nshim la\nsat l\nrein venting\npen h\nsan te\nnu kes\nim pal\nbohe mia\nðŁijıðŁı»ðŁijıðŁı» ðŁijıðŁı»\nstin son\nbt l\nëı Ļ\nul tron\nsand ing\nn th\nmir amar\nbre l\nbre cken\nre draw\nevi dently\ne zy\nre unites\nmiami beach\nindian army\ncrunchy roll\nØ§Ø ª\nl of\ngg en\nfl ay\ndo ol\nwil ds\nth ir\nrent ine\nren nie\nnapp y\nlesli e\nag ec\nwood side\nvi zag\nro ker\nover loaded\nesta dio\nภĬ\nun u\nkah lo\nhi king\nðŁIJ ³\nta king\nol m\ningenu ity\nel p\ncommon wealth\nbaha dur\nwiz khalifa\nstray kids\nsouthbank centre\nshow er\nhumph ries\nde vol\ncor ny\nmicha ele\nfon do\nanc er\nè ī\nron in\nar ou\nproud ly\npp d\ndonnie wahlberg\ncopy writing\ncap a\nbro d\nun imel\nome let\nle berry\neccle si\ncla ret\nter ro\nsi fy\nlon dres\nlegend sof\ndoub ted\nö z\nsony tv\nrebe cc\nvote yes\ntv show\nsun burst\nde y\nbenef it\nz ico\nt cd\nrejuven ate\ndon ato\nto is\nim porting\nfa kh\ne fe\nand ela\nzind agi\nlove y\nhigh school\ngordon ramsay\nfur ries\nf cim\nchi vas\nax ed\np mc\njay am\nbrew dog\ngam y\ncaptiv ated\nshout outs\nsab bat\nru fai\nlat enight\ndescrip tive\ns racing\npr p\nnad in\nmushar raf\ngrump y\ngn arly\nfont sunday\nfon dant\nclassi fy\nðŁĴĥ ðŁı½\nryder cup\npne umatic\ni phon\nra glan\nmam bo\ngilli an\nenig matic\ncor dova\nspoti fy\nhar ish\nemo tes\nar gh\nm bi\nlove to\ncur ve\nad ore\npo sa\npa inte\nbe gum\n> @\nro che\nmag i\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\nx lr\nstoo ges\nnewsline weather\nwc l\nlinkin park\nbush wick\nhei ght\ncla pping\ncapp ella\nbad i\nloo t\ndef con\nsuper hero\nshore ham\nmc c\nk lam\nale ducation\né Ł\nthe democrats\nsher ri\ndioce san\nd mb\nsen sex\nlovel iest\nai ko\nâŃIJï¸ıâŃIJï¸ı âŃIJï¸ıâŃIJï¸ıâŃIJï¸ı\ngra z\ncla sp\nchec o\nar nie\nstra d\ndar ou\nbritt ney\nbra h\nfesti ve\ner ley\nthe blacklist\ntb ay\npau lin\nbasti an\naffir med\nstre isand\ngan esh\nstat ute\nre load\nlu l\nid is\nyoucan texplain\nnu tt\nmigr ated\nzi ps\npro dig\nma geddon\nfor ging\nðŁĺ ¨\nst mas\nplu gging\ndur o\ncorrec tive\nt elly\nsj p\npi et\nanu i\nadap tations\nv ant\nmyel oma\ncap one\nsier ra\nblack water\nzeph yr\nyon kers\nthr ac\nscreen cap\npa seo\nmi kes\nlock wood\nh rd\ner rol\ncolum bus\nab al\npp t\nindv aus\nchar lo\npar aphra\ndaniel e\nr joseph\nhir sch\ncarol yn\nthro ated\nsli mming\nadi os\nv logs\nmun ching\nj akes\nfi k\nbar rage\nshan gri\npin occhio\npa kh\nmin as\nicha el\ndiversi fied\ncaes ar\nome try\nham ble\ncuyaho ga\nbai leys\nseat belt\njeopar di\nbrown sville\nscandal ous\noni ans\nble aching\nfound ation\nthe le\nrye o\nkaf ka\nja ja\nfeder ic\nfat al\nbest price\nbandic oot\nðŁĺĤ ðŁĻĪ\nkor o\nfac to\ndispen sary\nbr ation\nur ray\nmakeameric agreatagain\nwit ness\ntoyo ta\npat ties\nblack board\nad is\nte rer\nss chat\nsh alt\nrecord storeday\nla da\ngi ann\níĽ Ī\nun holy\nkh ana\ngodis good\npalis ades\nhe for\nci ve\nhered itary\nhay wood\ncor ker\nspr ingh\nsand i\nre du\nnatu ro\nmany vids\njessi e\nâĵ Ĵ\nschnit zel\no vie\ngren ades\ngat es\nab ed\nms ft\nmedic ally\nled ore\nl ousy\nmentalhealth awareness\nglee son\ncol ly\ncabrio let\nwee e\nsp end\nsnow mobile\nhi j\nÏ ĥ\ntal kies\nrich ness\njor dy\ngiu lia\nacti v\ndo pam\nalleg ation\nyour life\nsk elton\nv ny\nmu riel\nlat t\ninaugur ates\nforeclo sure\ntain er\nharne ssing\naguil era\nx rp\ncoo lidge\ncar ta\nser gio\nnews radio\nk tr\nsol arenergy\nr sprasad\nhome design\nho stages\nhat a\nal ali\nthal er\na sturi\ntri pura\nhydro power\nfree bie\nescal ating\nm ha\ngetin volved\nprotec tour\nod is\nmus ician\nmu le\nu wa\nter iyaki\nrip city\nrace horse\nloaf ers\nkha o\nfi vb\nbal con\nan ou\nðŁĽ «\nvis ayas\nsh all\nfire flies\nठķ\nre morse\npho tonics\nlet splay\nimp lied\nhes itation\ngur ney\nol om\nune ar\npi d\nmo gg\nitt al\nâĿ¤ï¸ı ðŁİī\nma ku\nar man\nmo ke\nhan ts\ncor fu\nä¸ ĸ\ndigit alization\nti ana\nsu bo\nschu yl\ne redi\nven cy\nv room\nro ars\ngrowth mindset\ncosme tic\nchir p\nstra u\nseh wag\nric ha\npin ellas\nelo tti\ndur and\ndeta chment\nqu ando\nmau sole\nma su\nblack wood\naspir ation\nbell ator\nshi ka\nmar oc\nki ra\npi k\ngta photographers\ngand alf\nsto y\nspee do\nmand alay\nfan o\nun ice\nsol ange\npo pper\nden ch\nne warri\ncel ta\nd lers\nce tta\ncc f\nblack smith\nbhan gra\nw anders\nhide away\nemploy ability\nz te\nunder take\ntw tr\nteam building\nta pa\nvirtu alization\npro vo\neigh ties\nche ery\nay u\nwe ber\nper ro\ninspirational quotes\nd hoo\naj ara\nðŁIJ ł\nsub du\nbill clinton\nam oun\nstro oms\nsoldi er\nmouth watering\nmalay a\nlegitim acy\ngr ats\nsyl vi\nsleep ers\nboar ders\nðŁĺĤ ðŁĺĺ\nup loads\nsports news\nske wers\nreferen cing\nfo dder\nea a\nremo s\nra ss\nn ann\ncor azon\nalas ka\nshak h\npig mentation\nincogn ito\nas ca\nmiamid olphins\nle land\nig t\ngn es\nboo s\ncla ps\nmajor ing\ndi als\n---------------- ----------------\nregi mes\npe an\nemul ate\nmer ga\nmed hat\nhead liners\ngo h\ncon di\nwi gg\nser af\nric kie\nbor ty\nâľ §\nre is\ncel eri\nâĿ£ ï¸ı\nye ez\nni ki\ndraft kings\ndiet itian\nat weets\nampli fied\nnee son\nmac ross\ndystop ia\nbor ges\nblat ter\nb ade\ndirec to\nbha skar\nsch ae\nkar my\nscot spirit\nmoment ous\nan ation\nlm k\nkne e\nin da\nig g\nbo tham\nbarber a\ntoi lette\nr tl\nmetcal fe\nlin x\nclo thed\nvo ila\nse well\nregion al\nple dge\nintere stingly\nf nl\nru f\nmun di\nbur sary\nbout i\nâĺ Ķï¸ı\nâĸ¶ ï¸İ\nsto liveby\nstar let\npic stitch\ncar wash\naw ar\nround house\nmargar it\nmanag eable\nbon ito\nus ab\non n\nflow ed\ncher che\ns ju\nkensing ton\njo yed\ncal e\n???? ???\nzu mel\nwir th\nre pul\ngary barlow\ncoel ho\nâı ±ï¸ı\nwork er\nsp t\nsiob han\nsegu in\ns gp\nglypho sate\nclin ching\ncharlie hebdo\nbati k\nuph eld\njust o\nher ne\neuro star\nmccull ough\nfent anyl\ndiamond backs\nâĺ Ķ\nindian express\njis ung\nhen e\nconve yor\nappe tit\nyn g\nover kill\nkim mel\nin it\ny ff\nst ine\nle urs\nher ring\near ths\nor ne\nleis u\ngo pro\nsky way\nscri bble\nby nature\nwater colors\ntin tin\ninter ruption\nbr rr\nwide screen\nshake down\nknit wear\nkarab akh\nid as\ncor der\ntt our\nsac king\ngood ell\nthisisy sr\ngoo ey\ngerman town\nfa w\ncat amar\nðŁĴĥðŁĴĥ ðŁĴĥ\nvijay a\nti ber\nsa ad\nha are\nseul gi\nmischiev ous\nisu per\nhellu va\nconfe ssed\nlitur gy\nin man\nce tti\ntuni sian\ntic ut\nsur ging\nsau er\nry erson\npopu p\nmb k\nbr itten\nv f\ngray ling\nabstr ac\nus p\nun fa\nso rely\nri ona\nr dc\nof sted\nju icy\nhorri fied\ngrac eland\nfa k\njusti fication\njam esp\nbat u\n. âģ¦@\ntu i\nte jas\nsul fur\nindirec tly\na ford\nunder privileged\nnorthan ts\nm countdown\nji ve\nha des\nlac quer\nhumbold t\ngi ggling\njun ho\ndigital painting\naph rodite\nab di\ntel us\npric ey\nhahahaha hah\nfibon acci\ndis mantle\nar ne\nan ine\nwillough by\nmotivational quotes\nmid west\ninter lude\nge re\nbe come\ns illy\nfelic it\ntap tap\nst ings\nilovemy job\ncospla yers\nbra u\nvotel abour\nsto ver\nru ddy\nmeh boo\nhon e\ngift for\nphosp hate\nit ano\ndo sa\nbabys itter\nkri sty\ndele on\ndd ard\nconfu cius\nstewar t\ns worth\ncom ed\narn hem\na ño\nym er\nsmo re\npur suits\nflee ting\ndat ing\nsav anna\ndelic acies\ncomic book\nco arse\ncir ca\ncalam ity\nbro ads\npre natal\njo c\ncyclo ps\nc lec\nyam amoto\nun b\npu sd\nplu mmer\nper ils\ngu mi\nath ar\nval o\ntimel ines\nense mbles\nb sc\nmaha jan\nwa sim\ntechn ics\nsorcer y\njo bo\nhavill and\nthemore youknow\nta ki\nrest ful\nmer thyr\ncro ck\nwee ps\nreneg ades\nlear nings\ng lands\nti dying\nec tomy\ndol la\nya g\nrev it\nkar ts\nf natic\napologi zed\nwin dy\nw bc\nsi esta\npe ony\ngor an\nautisma wareness\naf fi\nwh aling\nv ps\ntrain spotting\nra kul\nmel anie\nmal let\nky our\n? "@\nreti rees\nip kk\nin hale\nelectronic music\ncur ators\npocon o\nl sc\nan son\nu si\nlu r\nhide out\ntwi sting\nsamp led\njun su\ning s\ndead ly\nauditi oning\nhappy bday\nemplo ying\nti voli\nnic u\nfu sil\nak am\npalmet to\nofthe wild\nmy kon\nmahar aja\ndeut sch\nselec t\nnat ura\nme ddling\nland is\ni have\ncomm encing\n.... .@\nðŁį Ł\nmer gers\nm dp\nben i\nne led\nlino cut\nkn ack\nj pm\nbattle ground\nat ter\nrat on\npente cost\norganis ational\ndecan ter\ncn r\nboo zy\nbap u\nal ve\nfast pitch\nðŁ¤· âĢįâĻĢï¸ı\nz hang\ntoken sale\nhear tof\nha den\nrapun zel\nlar o\nfro yo\nbikin is\nsiddi qui\nscri pps\npi ec\nlin de\nstory board\nred lands\nop o\nmb r\ngrace fully\nc de\nth enews\ncas pian\nand ali\nä¸ Ģ\nro ald\noptome try\nmedic i\nken g\nder ma\nðŁİĥ ðŁij»\nmar chi\nbi al\nal ab\nâĢĭ .\nred wine\nk gb\ngun violence\ngi vin\nfan page\nadri ve\nëª ¬\ntel stra\nfl t\nbiome chan\nðŁİīðŁİ ģ\ndram a\nاÙĦ Ùħ\nti rol\nde ferred\nbe sts\nspr ouse\no hh\nchead le\nim balance\ngy n\ncruis in\nci m\nun h\ntra pp\nob scene\nir fan\nimpre gn\ndeut sche\ncymb als\nob an\nau er\natal anta\nroo k\nmen zies\ng went\nentran ts\nco pac\nor tho\nmarksand spencer\nlee ks\nlac tose\nspac ed\nsh ak\npale ontology\nine mas\ne an\nbi bi\nalban y\nìĭ ľ\nko in\nbe ssie\nar dent\nlatt ice\nbe sie\nade h\n# _\nsurro gate\nsand hu\nrain water\nk hun\ncau sal\nbe wit\nat las\nagu e\nwater polo\nl ts\njam ess\nae on\nsch ofield\nmotor cyclist\nge force\ndre y\nwai vers\nsh us\nno excuses\ndi ade\nsweethe arts\nmacin tosh\nl indi\nar junk\nam writing\næ Ľ\nluci an\nink jet\nciti es\nsurvi val\ngam ep\ng j\nðŁijĩ ðŁı¼\nzz ah\nobjec tions\ndit to\nìĤ ¬ë\ntrump care\nlof ty\ntool ing\nintrin sic\nfenerbah ce\ncle men\nwill power\nsu tra\nsim pl\nsave shadowhunters\nsan aa\npri mate\nor bit\nkel sen\nasho k\nartisan al\nê¸ °\ntri stan\nshre ya\nmidwi fery\nlit ers\nla dd\nfla x\nbry ant\nnau sea\nla vo\nul m\nsid hu\nshe ena\ngott lieb\ncr n\nwe id\nâĸ Ī\nmotor ist\nma vic\nlaut ner\nendo wed\nspar rows\nka de\nip p\no vens\nti led\nstin ks\nkeen eland\nkath a\nc te\nmass ages\ninterro gation\nðŁı ĸ\nsen sanders\nfish in\ndro se\nðŁĴģ ðŁı»\nsustain ably\nsh ant\npropor tional\nmis cell\nkh l\nchemi sts\nm ra\nher pes\nf lux\ndisgu st\nbon nie\nartin fo\n~ $\nsau dis\npollu tants\nop ia\nmo fficial\ndark side\ncultiv ating\ncivil isation\nchampion ing\nbl f\narmed force\nðŁĺ³ðŁĺ³ ðŁĺ³\ntian jin\nlar avel\nfe men\nbaf tas\nabsen tee\nra onic\nprovo ked\npla gued\ncool ers\nuc davis\nsand er\ns books\ndi orama\nun ab\nsub division\npritz ker\npa sty\nj ks\naccount ancy\ntri bul\nre tta\ner ty\n! ðŁĴķ\nðŁıĨðŁıĨ ðŁıĨðŁıĨ\nri beye\ntheli al\nnin ja\ng ls\ncer ro\nusa id\npu ma\npascu al\nchev y\nbrati slava\nbra ga\nbi gs\nap nea\nåĨĻ 羣\nsd p\nmarguer ite\nkhu sh\nvec chio\nglit ter\nel issa\ndumb ledore\ncar gill\nann am\ntrium phs\ntempl erun\nru min\nlny hbt\ncla sse\nêµ Ń\nri ri\ngun ning\nboy e\nam ento\nlimite dedition\ngra w\ngan ache\nðŁĮ ½\nresemb ling\non tv\nmoti fs\ni mani\nhel ms\nepo xy\nclear ances\nba ha\nthis day\nre eling\ngur o\nfi eri\nfaw cett\nchec kered\nti v\nnarcissi stic\ni tha\nguil le\ngo e\ndart ford\ncomment ators\ncl out\nch illa\nky li\nhun d\nro maine\njum bo\nfil ip\nde au\ntyler rjoseph\nthe un\norphan black\nom ans\nin manila\ntho reau\nsa ar\nra bin\nen heim\ntn t\nstate parks\nkour tney\nwe th\nkair a\nec r\ngas par\n ¸\nolu tion\nme ars\nhome town\nexecu ting\ndefic its\ncar bide\nblan ey\nstri dge\nsh r\nho tty\ngrow yourown\nfal cao\nîIJĴ îIJĴ\nâĺģ ï¸ı\nun wavering\nmore tz\nhoo dy\nh ine\ndain ty\nbak ing\nภŀ\nsalom on\ndisin formation\npu sha\nla the\nad di\nabi ding\nzig gler\nsic ilia\nmening itis\nhol ling\naus gp\nri mes\nbarrac uda\nal do\naf tra\npe di\nlith gow\nanaly tic\nvanc ity\nse f\npc as\nc ya\nafric a\nw ella\nra ys\nn cat\nfe ez\ndon i\ndin amo\nbreast stroke\ntruec rime\ntofthe week\nsouth ampton\nel ina\nzain ab\nsw az\nph elan\nkri stine\nk lit\ner ation\nbud d\nwrist watch\nthe week\nsimil arly\nqui k\nover throw\nnaku ul\nitali ano\nbigg bos\nse ashore\narnau d\nle p\nfan site\nding o\ncler ks\ncas illas\njo die\nde generation\nãģª ãģĨ\nher ze\nadjun ct\nac ard\nðŁĴĻ ðŁĴļ\nठŃ\nwa al\nrad hika\nchim es\nti pp\no or\nki ye\nhe c\nba hu\nab at\nsam us\ninver ter\nindi spen\nhe ge\nภģ\nl ff\nbi ele\nmu ja\nindone si\nf wa\nbeat rix\nbbc football\nsa ks\nq c\ncont acting\natt enti\nvivi en\ntaf fairs\nso crates\nsen e\nse mper\nco bb\nðŁĴĭ ðŁĴĭðŁĴĭ\nladbro kes\ná »\nwill ingly\np are\np able\nocci dental\nich es\ncan tor\nrox bury\nfre ddy\ned ger\nde capit\nwgr z\nma im\nku sen\nulti ma\nsolar power\nschan el\ndishon est\nbeck ons\nyad av\nover ton\nne ale\nme sses\ndarou sey\nauc tione\nap aaja\nðŁ¤¦ âĢįâĻĤï¸ı\nu tri\n.... ..\ntaco tuesday\nprote as\nintroduc tions\npi ds\ngat linburg\npam pering\nmarig old\nf isa\ncon tor\nclean est\nshort stop\nne em\npin kie\nlet our\nkathle en\nimp ly\nðŁĴ ·\nwork out\nro que\nestim ation\ncountdown to\nconom ics\nal tar\nq e\njesu schri\ngrayson dolan\nst ines\nsmith field\nshi gh\nir replaceable\nspr itz\nmon op\nlo real\nlab elling\nfli ppin\nðŁIJ Ĵ\nsher pa\njan el\nembr yo\nbir dy\nball game\nvul gar\nun f\nspra ined\ncr f\ncome back\ncol man\natt y\nat a\nar lo\nu alberta\ntechnicol or\nrush more\nrespon der\nou re\nobli ged\nmt ve\nmac c\nwood house\nvent uring\nsen john\nlight ers\nher bi\nwall ace\nexo tic\nag em\nvirgin ity\nthe ma\nmart ine\nmar ang\nlee teuk\nho list\nwatch men\ns ile\nle ck\nkan ji\nhoo ters\nst ile\nn ala\ne am\nclari fies\nam é\nvoc ations\nsucce eding\njesu is\nconqu ers\nuc berkeley\nnz v\ncas o\nbar ist\nbar bed\npatri arch\np cos\nben ign\nre read\nmn ang\nfly weight\nfc live\ncre t\nbar ks\nlione sses\nbenid orm\nbc z\nan je\nti wari\nol li\nnak amura\nha san\nfun imation\nco ss\nbir der\nanna bel\ntim er\nrn cin\nreal ale\nra vine\nno s\nðŁĩ° ðŁĩ·\nte ke\nsa hab\nbal tic\nâļ Ķï¸ı\nsur g\nka hit\ntru ss\nstein berg\nreplic ation\nelev ators\nðŁļ ´\nma ki\nhar ming\nh si\ndel ena\nt ke\nsime one\npat ina\nshutter stock\nshe ars\naller ton\nai ka\ntemple ton\nraf ters\nperio don\nnote worthy\nmongod b\nman fred\nko wal\nstu b\njoin ery\nan gie\nu kenyatta\nshel ving\nkenil worth\ninstru cted\nta ey\nretri eve\ninterpret ations\nfirst world\nd si\nbiop sy\nbenef iciary\nsaf a\nphilosoph ers\npand ya\nner i\nbow ery\nwel ly\nthe cw\nspr ites\nner v\nmon orail\njac uzzi\nde mysti\ncon sort\nprogram mers\nnews desk\nl sa\nhong kong\nhome and\ned ale\ndor p\ndar in\nvali date\ntear drop\nsyn ap\nrepeal the\npremi um\nnik hil\nblan k\nai ding\nsquee zing\nrncin cle\nret ard\npark sand\nbru ck\nwr u\nsu zi\nspecul ative\nhew lett\ncru st\nas m\napp end\n¢ ħ\ntele mundo\nst aley\nsn rtg\nsamu els\njae ger\nfarn borough\nwomenin business\nron darousey\nmin es\nau de\nshi ba\nm ne\nestre lla\nswim ming\në¹ Ħ\ntam an\nit é\ncuth bert\ncasu al\nag ing\noffici ating\nli gan\nfo iled\nver i\nms r\ndr ay\nusf ws\nta heri\nse thi\nç ī\nuneth ical\nkick ers\nhi jab\nak ash\npur po\npellegr ini\nneu mann\nman del\nde ver\nap u\nìĭ ł\nz ha\nindic ations\nimag en\nclean india\ncar pe\nso fe\nmart ine\nstra pping\nwit ter\nno tin\nfic ent\nbbcc ricket\ntur ally\ncou rier\ntri xie\nsw am\ni ab\nalfar omeo\nstal ked\nso h\noooo ooooo\nmiasan mia\ncon f\nthisgirl can\ntar rant\nre reading\npresent ly\npow ys\nnj devils\nmart i\nfe b\ncerv antes\ntam bo\nretro games\nlang ston\nkell er\nar nol\nठµ\nshinju ku\nsasqu atch\ndan ica\nakrish na\nso ko\ncat ter\ncar park\ninde cent\ner gy\nbur ley\nbrother ly\nxi v\npost doctoral\npolyne sian\nsuspec ting\nmass a\nmake ithappen\nfab ri\ncu ti\ncor sica\nbor den\nun impressed\nsli gh\nhe don\ngon zo\nfic o\neloqu ent\ndic key\npodcast addict\nle ona\njewel ers\nwic ca\nuniof oxford\nu den\ngene res\nban shee\nu ya\nshe khar\ndoll house\nblu eno\naf alls\nwra ith\nta fe\nmoun ds\nj ct\nin clement\nfun g\nfluori de\n! âĻ¥\nraji v\nb me\nwaz e\nsquad goals\npre ak\nhand painted\nc sgo\nsat h\nleg oland\nin la\nd pi\nc actu\naband on\ntali b\njanet jackson\nãģ Ĺ\nkhal sa\ngl c\nc fm\nab ang\nali sha\nwe m\nsur passes\nou st\nnai as\nmax ima\nlind bergh\nlic o\nit syour\nh ä\ngul li\nanacon da\nwoodru ff\npr m\nh é\nanonym ously\nsun nah\nscat tering\nsc int\nsal mond\npe king\nj cb\ned ine\ndiversi fication\nari on\nall state\nt ley\ngam bler\nb hatt\nra ku\npit ts\nj enga\nri di\npun dits\npapp u\nnow spinning\nha drian\naz ure\nautom o\naran eta\na stray\nil m\nyong guk\nwel ded\nparano ia\nexplic itly\nco f\nðŁİīðŁİ ģ\nsom uch\npost partum\nler c\ngu ava\nenhan cements\nber gen\ncon glomer\nâļ½ï¸ıâļ½ï¸ı âļ½ï¸ı\nmilli gan\n% ).\nâľĮ ðŁı¼\nsh yam\nry man\nmegat ron\nkoh ler\nde schanel\nchel sea\nzoo topia\nwr t\nvalle jo\ntri pp\npositive vibes\nirrit ating\nbook fair\naac r\nsan it\ndi sk\ndepeche mode\nclassi fieds\nðŁij ¦\nven erable\nra ves\nfav re\nek iti\nquarter backs\nhe ma\nh sd\ng ach\ncon template\nl ant\nkh atta\ninter sections\nharle quin\nncc u\nm dr\npp ro\nil legitimate\ngre be\nler man\nite ach\ncspan wj\nvoy ages\nsat x\nrednose day\noo king\ndan ic\nchar lene\na hor\nty sm\ngri ffins\ncheng du\nboo ka\nâĢ ¼\nye h\nur ra\ntari o\npou ches\ndd ddd\nstaf fed\nrevo ked\nran chers\nou z\noni ka\nshare d\nn bs\nli mp\netsy seller\ncl one\nvisi e\nksat news\ngood life\ncow l\nchic o\nн ÑĭÐ\nvigil ante\nskate park\nre it\nmar av\nman ja\nle et\nco der\nðŁį ĭ\nw gn\nld c\nduck lings\ndon de\navoid able\ní Ī\nover lord\nmp r\nanc elotti\nintermitt ent\ncolli der\nste ins\nsque ak\ndispar ity\ncolorec tal\nclark sville\nado u\nÛ ģ\nwomen swear\ndi bu\nbar ts\nsa ws\nrecogn ises\nre pa\nm cauliffe\nhear tache\ngood music\ngg ish\nÅ ¾\ntech house\naci dic\nre pro\nmal low\nd printer\ncro tch\nkir sten\nkan pur\nil kley\nfan i\nev ry\ndit ches\ncher ie\nbat angas\nlost girl\nliam payne\nla be\nrid dim\nden ni\n? !)\nvo o\ntw c\ns za\nfo als\nfic tion\nlim ate\ndab s\nmc f\ner na\nsmriti irani\nespo sito\nduc ts\nblackgirl magic\nweare one\nsen ec\nsch ie\nnath singh\nfo ia\nen or\ndon bas\nç İ\nwi jk\nover lap\ngron kowski\nfull er\ne ssie\nðŁĺ¤ ðŁĺ¤\nye ye\nloksabha elections\nguev ara\nbi es\nâĢ¦ âĢ¦\nz he\npic a\nhomer un\ncon stip\napo stro\nrefr actor\nsa an\no gun\nman sions\nre sh\nnam ely\nhigh er\nevan ston\nup town\nring side\nnaz arene\nir regular\ninvent ors\npope ye\nmnang agwa\nfern and\nsp litter\nmor ten\nasc end\nwhi ff\ncr ink\nbe ste\nat to\nshad y\nel n\nbjor k\nðŁĴ Ĭ\nno tting\nengland rugby\nbe tawards\nwe all\ndan is\nÍ ¡\nmo she\nmiff lin\nlu walia\nal un\nli pid\nha van\ncmp unk\nbur row\nunderestim ated\nste yn\npul pit\npir i\np nr\njer ks\nfin ney\ntra volta\nroman ce\nbuck wheat\nblack metal\nst oops\nintra day\nhuff post\nale state\nso ver\npat o\nobstru cted\njen na\nfi o\nbo den\nbill on\nmy fox\nla hi\nkar na\nbartholome w\nvin o\nlovel and\necu men\nwhitec aps\nthe king\nqu il\nhuman oid\nalab ad\ng ome\nfri ar\nc bre\nbroch ures\nwe si\nmal anga\ndr brianmay\nassi si\nsav our\nprefe ct\nmt ns\ninter changeable\nhex ag\ngar nish\nc ce\namar o\nðŁį ħ\ngu sting\ndismant ling\nbay one\ntv showtime\nsun ion\nrad ha\nozar ks\nnautil us\nla youts\ndid sbury\ndance floor\nsuicide squad\nok preps\nj ura\nalum nae\nron ni\nma f\ngeorge tte\ncoordin ators\nbad u\nðŁı Ŀ\nted ness\nre prise\npain fully\njo ie\nhill billy\nthisi sd\nss er\noo ka\nmm g\nmeredi th\nklim t\nkat an\nblood borne\nbab u\ntrivi al\nth rif\no cla\nmo yo\nmilk weed\nâľĬ ðŁı¾\nsul u\noccu pants\nfarm life\ncru sty\nsing in\nr tr\npenn state\nmet adata\nfab ulously\nwee zer\nschnau zer\nrash tra\nni moy\nh cp\nfreebie friday\ndo le\nsti me\njef fre\ngro ban\nbroad ly\nbil oxi\nwoo hyun\nu zi\nny jets\nfi ver\nvado dara\nit ake\ncheck up\nsupremac ists\nro mp\nthe sunday\ncontin ence\nliz quen\nha ut\nellip tical\nsho o\npan ty\npa as\nimmigr ation\npark service\nos age\ni sta\nhomes ick\ncyber attack\ncolom bi\nboy ne\nðŁIJ Ĭ\nty lero\niron maiden\nhand a\nch off\nal ya\nry o\nred acted\nmo ts\nintern ment\ndie hard\n>_ <\nðŁĺ© ðŁĺį\nm sle\nli bel\nf ant\nembar go\nsoc kets\nski ers\nphoto journalist\nmchen ry\nbou cher\nric ard\njayam ravi\ndock lands\nannot ated\nag ata\nðŁĶ »\nprev ails\nnew ington\nlas sen\nhydr ant\nte o\nrough riders\nmurug adoss\nat su\nafil m\nadmini stered\nv fw\ncalam ari\nbay less\nsw ung\nsag er\nple ated\nmo dric\nhi my\ngolf clubs\ncitizen science\nrehear se\npic kett\nle aky\npolit ely\ngra zia\nsk or\nsar an\ncl inging\nâĢ ł\nther oo\nsquir t\non your\nbag gy\nat oll\nth ys\ncoul son\nvivi enne\ns anya\nrecogn isable\ngr u\nscoti abank\nmilk shakes\nfundra ise\nd mu\nbu tters\nra wr\nlin dy\nal ed\nsk am\nryeo wook\nreferen ced\nquad r\ncri sp\nbio informatics\nâľ ©\nche wed\nsm acked\ncommend ation\nclassic rock\nðŁĵ ½ï¸ı\nstar ved\npu ddles\ndo sing\nbru e\nzah ra\nwo king\nsun rises\nstro p\nsal ons\nlif ters\ncor coran\nala ina\nkom onews\nken yon\ngre tsch\nge zi\nfloor ball\nfi q\ntw om\nre clamation\nineffe ctive\ncop tic\ncit ic\nch ute\nunle ashes\nran s\nmo sc\njoe biden\nsw il\nosi ris\nni h\nembo diment\ncruci fied\nãĥķãĤ ¡\nschu mann\nhorri d\npri mer\nnorthampton shire\nje b\ngraph ing\nback street\nìĺ ģ\nwood row\ntar garyen\nt bl\nsky ler\nru ffle\njoc keys\ninfo s\ndeir dre\nbosp horus\nâĻ¡ âĻ¥\np led\nchu an\nbi got\nren nes\nra va\nparmi gi\nchi ar\nvide om\nstau b\nexc ali\nex clamation\ncity council\nbarnab as\nse du\nker ri\nis che\nfr actions\nfly by\nbau er\nwhere in\nra ge\nou lton\nmu ah\nco stac\nco lec\nchar mer\ncapit an\nsecular ism\nmumb a\nhu k\nhen e\nblon de\nso dia\nr tb\nde coding\ncad ence\nart an\nðŁĺ ĸ\ntoo cute\ntn c\nchen na\nbrux elles\nà® ¤\nt ft\nss ssss\nsp ital\npoun der\np ch\nmega star\nin junction\nal ent\næľ Ī\nx k\ntro pez\ntombrai der\nm mi\namp i\ntac tile\nsel ina\nma sai\ngood bye\ndod ger\nal fred\nvote maine\nqu ads\nad die\nsep ta\ns brewery\nric oh\nmonte ith\nhumb ly\nhisto ire\nme agan\nlow ery\ndel o\nab il\nout numbered\ner os\ncraz ies\nr bg\npollin ator\nil c\ngin sburg\ncy gn\nab vp\nwi dest\nrescue dog\nho re\ny g\nsof theday\nrac y\nla ban\ni bb\nci aran\nrobin son\nali kes\nfre n\nban bury\nball point\natten dee\nati m\nìĹ ĺ\npi p\nergon omic\nad re\nrem itt\npir ates\nover see\nit sen\nhali fax\ndedic ates\ncycl on\nas wamy\nãĤ ¯\nmo ser\nge op\nd mg\nchatur thi\nchag all\nbu gle\nðŁĶ ·\nsamp doria\nlow n\ndavi dg\nnewsmel b\nfix ed\ncordill era\nar ri\nðŁIJ Ļ\ny ra\nto pi\nn aka\ng é\nd life\nbeau ts\np date\nmin ty\nhy uk\ner am\ne bert\nat chee\ntheno tori\nni kit\nmuham ma\nfan zine\nnegoti ator\ngad ot\nbli stering\nbg su\nyoga day\nun sw\njohn deere\nzhen g\nstruc ture\nporcup ine\ncl ack\nboun ces\nqu ali\nmat ador\notta w\nmo es\ngil git\nesp lan\ndy strophy\nb dc\nठ¬\nsh illing\none world\non k\nformu las\ntru ff\nteach ing\nrobin sons\nrij ks\nqu ays\nher ry\nfle dged\nfish eye\nguardian softhe\ndu bl\nz ane\nsty list\nqu ack\nleah y\nj air\nhawa i\ndiversi fy\ndarth vader\nund ated\nsu pe\n< >\np oms\nmemorial dayweekend\nlu ms\nkc mo\nde hydrated\ntaptap fish\nre com\npode sta\nj ir\nfar med\ncait rion\nbor no\nbc m\nsk as\nse dition\nrub icon\nnoo sa\nle page\nhaw kes\nadditi ves\na ol\nth q\nru ta\njo burg\nbas k\nyan ks\nmont blanc\nlu a\njam mer\ncho ol\nrou baix\nre clin\nmat ured\ndimit rov\nãĤ £\nm ites\nâĺ Ŀ\nment alist\nmam ata\ng na\nfla thead\ncanad a\ncaled onian\nbo we\nyor kie\nre print\ng bo\nen thal\nal ka\nx com\nu ka\ntr alee\nspread the\nni i\njoh nathan\nhuman kind\nha sina\ndu vall\ncraft buzz\nton ic\nre lli\nra ged\njo f\nfree masons\n____ ___\nun ter\nsc aff\nlee ch\nextor tion\nari e\nra ghu\npin eda\natt an\nvehic ular\nra oul\nlu pe\neng er\ndivi des\ncr b\ncap ture\nbo ii\nmaricop a\nhearti est\nfair child\nalter ations\nno ta\nmar d\ns kids\nno k\ngui deline\ndeplo ys\ncarni vore\ng sw\nau ren\nat ac\nani el\nof c\nko vac\nweb site\nspectac les\nsn an\nsher yl\nrever b\nnik ond\nn ce\nbig sky\nra pes\nmat o\nnight ly\nmp n\nke sbury\njep sen\ngul p\nfrench man\nbar ley\nandor ra\nking pin\nin ns\ndra shti\ncatar act\ncand o\np co\nlast ly\nherze govina\ngr ounding\níĬ¸ ìĻĢ\ntesti fied\ntalk show\nf day\neven song\neat on\ntor ment\nlove ee\ncooper stown\nal gi\nðŁļ Ĵ\nrare disease\nmeth yl\nlu isa\ninbound marketing\nec re\nt sem\nro sam\nnove m\nmore ton\nmonster mmorpg\nhome buyers\nfru gal\nescal ator\nde sa\nboul der\nbel mont\nâĺ łï¸ı\ntwitch con\ntur ners\nsal ut\nper vert\nle ye\nhiber nation\ngg ggg\nfood service\nex porters\nd assault\nafter market\nwe athered\nun ravel\nsi di\nplu ssi\nmp t\nky m\nbo spoli\nsand piper\ngole se\ncol itis\nbr al\nadventure rs\nìĪ ĺ\nve do\npreten ds\nb da\nsac re\nju m\nhin ch\nacci o\nhy nes\nback stroke\nly ce\nh ve\nv bs\nou m\nbrand enburg\nâĿ¤ï¸ı ðŁĴĽ\nt itude\nspe cu\nrapp ler\nraje sh\ndream land\nav in\nma rek\nke ss\nho oman\npu tin\npar then\nhair do\naaaa a\nè ģ\nvotemaine fpp\nsha stri\nremedi ation\nit m\nhai fa\nex xon\nempha sizes\nu conn\nsim monds\nmo ire\ne scher\ncru tches\nvi vi\nar mitage\nair ani\nshi pley\nprou ddad\nmar v\ninter nationals\nbb k\nprostatec ancer\nmon ash\ntask force\ngod son\nlevan te\nbarric ade\ntr lt\nrapi sts\np vr\nkimber ly\nge p\neri de\nacknowle dge\nwill rock\nu pland\naa i\nwilli e\nune dited\ntri ples\nor ch\nhai ku\ngene see\nen gel\nbay e\nplex us\npen zance\nko bane\nf ash\ncac c\nxi p\nscam mers\nsal i\nnotic e\nmodern ity\nchi en\nbis cayne\nnba allstar\nmar ston\njune au\nðŁij ¤\nvan life\nro sters\nr st\nlabra dor\nbrek kie\nro ssi\nmy x\nlmfa oooo\nje tta\nãĥ «\nzo ya\nw pg\nmer chant\ngoul ding\nfood for\ndosan jh\nconnec ticut\nit to\ngho on\ncan aan\nbo le\nretrac table\nmar zo\nlau ght\ndiscoura ged\ndan forth\na holic\nth d\nmarri ott\nin lay\nduplic ate\nc zar\nwoo fer\nscre ek\nni pi\nintimid ated\ngod ard\nelu ci\nab omin\nsco ping\nprogram mable\nmexico city\nme tat\nh mrc\nh man\nashi sh\nsierrale one\nin sha\nhero ism\ngu staf\nrein hart\nlumber jack\ngu sa\nfella ini\neu f\nbelgi an\nbab ys\nan ski\nyu gi\nspot lights\nrockand roll\nk has\ndark ly\nbut cher\nbal lads\nauto cherish\nwater man\npeps ico\nlo ggers\ninfinity war\nas ach\nðŁ¦ Ħ\nspring boks\nðŁĻ ģ\nsp acing\nla val\nffici ently\nendor sements\ned am\nsharp ening\nsor rel\nprev ailing\nove rex\nnbc snl\nnative american\nex oner\nrin gof\nml ins\ndisobe dience\npre car\ncic ero\nâĿ¤ #\nper taining\nmani fold\nsu gi\nof africa\nmu sh\nmorgan town\ngel ding\nco zumel\nny x\nab ili\nðŁĺĤðŁĺŃ ðŁĺĤ\nworld cancerday\npal acio\ngo k\necoun try\nâľĿ ï¸ı\nro tary\níĬ¸ìĻĢ ìĿ´ìĬ¤\nspin dle\nneck line\nmaneu ver\nmary land\ni player\nbal led\nam ended\nne b\nen rico\nel dorado\ndubu que\nblood moon\nas lam\ncomple te\na of\nwil ma\nthe band\nkn g\nrevi sta\nmal ak\ngoha bsgo\ncar y\nve en\ntung sten\nsnu b\nshab aab\nkil marnock\nle pi\nre eds\nne m\ncan op\nble d\nvali dity\nju icing\nhun a\nchauffe ur\nwater town\nwait ers\nlo d\nfel der\ndow nie\ndon ate\nsan down\nrh schel\nor f\nlulu lemon\nkare en\ngalac tica\nbre vard\nstrat us\nrose ville\nfall acy\n-- -\nw eneed\nsan kranti\nlocal gov\nbilli e\nac cr\nk illian\ncomm ing\nworldo cean\nwatan abe\nsothe bys\nsin ful\nrol i\nlynch burg\nintegr ates\nhefor she\nan p\nal aw\nðŁİ¶ ðŁİ¶\nmaxim ilian\ng ma\nbre tagne\nail le\nworld food\nturi smo\nra u\nmini van\ndis belief\nbay ashi\nus atf\nskate boards\nuy gh\nplo ws\ndon bass\nsugar cane\ncham omile\nyel lo\nin quest\nend ron\nani sts\nte eing\ncos worth\ntune chi\nsothe by\nsle w\nsher o\nle f\nho wit\ngly ce\njoshuad un\nenfor cing\nbaby lon\nreck ons\napu ram\ntoler ated\nresur facing\npla inti\no tr\nkylie minogue\ndis able\npod u\nmul tiv\ninter cultural\ngy ro\ngoal keepers\ncac cia\nag am\níķ ij\nvic o\ntri mester\nka e\ncoffee shop\ntsem tulku\nsta sia\ngo coogs\nds worth\nwast es\nboun ce\nu vic\nstri der\nm Äģ\nlaur yn\nkevin smith\njan ssen\nðŁį Ŀ\nthe one\nsame er\ncret aceous\n! ):\nre gent\nproject management\nperson alize\nmah di\nzah n\nkra f\nvivi d\nten news\nre re\nogil vy\ntiram isu\nphoto bombed\nn ke\ncau stic\nra hi\nnca adi\nlauren jauregui\nki ku\ni aa\ndine sh\ndal ton\nch ata\nba ht\nx as\nwi ping\nripp les\nde generative\nðŁijĩðŁijĩ ðŁijĩðŁijĩ\nvodaf one\nthou gh\nsla pping\nnaz ion\nmer rick\nintern acional\ndo y\nbucket challenge\ny au\nvi stas\npresent a\nmal t\nexpir ation\ne ich\npu ttin\nve su\nsi oned\nct fu\ncircum stance\nblu er\n. ),\npra ia\nmcfar land\nju eves\nhat tie\ndu bey\nmyrt le\nasturi as\nðŁİ ĩ\nreason s\ngri z\nco ils\nat lu\nmode sto\nlo gger\niber ia\naf tr\nv ang\ntransp lants\nprairi e\nmaur it\nhaha a\nt ink\nsci fest\nsc lero\nrandom ized\nglam organ\nfeasi ble\nsplin ter\nblu eline\nsubb an\nnakuul mehta\nm ch\njohnny depp\ncar cas\nvin sky\nhex agon\n* "\nwomen empowerment\ns ooooooo\ninvic ta\ngla de\nðŁĴĢðŁĴĢ ðŁĴĢ\nwe bb\ndesig nate\ncon figure\nay l\nsteven universe\nspo il\nrecep tionist\nplo t\nna is\n!!!!!!!! !!!!\nra gh\nne war\nfr anta\nsar aki\npi aa\nobse ssing\nm anda\nf cc\nem d\nba ins\nrev ital\nki shan\nfe c\nep son\ndef lec\ncbs news\ncamper van\nc ty\nbe so\nat tribute\nari ya\nì¤ Ģ\ntun is\nout flow\nnot the\nmykon os\nclare ts\nci pri\nbrain wars\nsign al\nmin ing\ntr amp\nten go\njimmie johnson\nchristma stree\nam x\na ung\nv z\ntran spo\nspr incipal\nreve rence\nnam ma\nkey ring\nne gro\nate show\ningle wood\ninadver t\nimpre sses\nawak en\navi es\nsale em\ness ence\nes sel\ndoo dle\nwin ch\nson e\nnett les\nmi me\nalzheim er\nvall is\ninsur ance\nh pm\nas sam\ntun ity\npost p\nmonte carlo\nluxury lifestyle\nju dd\nin sensitive\nwax ed\nwas a\nfand uel\nchor ley\nbon y\nback packer\nte urs\nho ag\nsurf board\nstati st\nsober ing\nf anta\nbob s\nbar dot\nban i\nad da\nrec tangle\npe tro\npa ign\nn ang\ninfluen cer\nin u\nhard line\ngwen stefani\nwood cut\ns ors\nfor nia\ncater pillars\nãĤ µ\ntari anism\nshel lac\nnd su\nillino is\nel gar\ncel list\nato day\nðŁĺĶ ðŁĺĶ\nsilver stone\nlog ic\nfac om\nweal thiest\nsun tv\ngy ang\ncom posting\ncandle stick\ncan more\nz ard\nx t\nsc athing\nps r\nnorth land\ncollec table\nwa si\nrip on\nqu is\nge v\nse men\nough lin\nob x\nintoxic ated\nbay side\né Ń\nvan poli\ntim hortons\ntaji kistan\npo i\npeep ing\ndri zz\ncontempl ation\nballo on\nun folds\ntre aties\naishwar yar\nl hc\nfoodie chats\nexcav ator\ncocon uts\napple bees\nambigu ous\nrepar ations\nman goes\nkh mer\nfr itters\ndo wd\nantonio guterres\ncu a\nimpro vise\ng fc\nec cles\ncarcin o\nðŁİ ©\ntheori st\nsj c\nmu je\nir acing\ncamel ot\num mah\nbachel ors\nlumb ar\nc sk\nbi ya\nre fine\nqueen willrock\nci os\nbicy cle\nbali k\nà° ¿\nwil co\now icz\nloy ol\nwa is\nmer al\nhar ma\nba ili\nste e\njo ker\nhein ous\nbu oy\nthe sun\nnou gat\nic ant\nan anda\ndji bouti\ns night\nrelationship goals\npolit ici\nmb appe\ngoogle maps\nba shi\nta ap\nnow listening\nflaun ts\nðŁĺĨ ðŁĺĨðŁĺĨ\nvene to\ncar pent\nbre do\not l\ndi vert\nbr oughton\nflat tered\nbra denton\nas ada\nalo pe\nar b\nan akin\nten cent\nnad y\nconstant in\nsb l\nreinforce ments\nol b\njol li\nil han\nyu ri\nthe other\npunk rock\nlanark shire\nbi st\nti ma\nth oo\nsun beam\nr all\nkar achi\niy ama\ndhar am\nk state\nbat on\nay yyy\ntre v\nbr unt\nar ashi\nà® ļ\nzu ka\ncan es\nar cade\nuuuu uuuu\nma han\nto pes\nsen try\nmyster io\nmis sa\ndeliver ance\nëĿ ¼\nun wrapped\nol li\nholi sm\nh pe\nfree view\ncalab ria\ntwent y\npo g\npe cans\ngru den\n^ __\nðŁĶ ¨\nos c\nleng th\njef fries\nðŁĴ ı\nsh el\nmesmeri zed\nke gs\ner at\ncor r\ncaver ns\nbritish library\n⼠³\npap y\nal or\nw age\njac lyn\nco ols\nbio logists\ntur d\nplau sible\nðŁĺĥ ðŁĺĥðŁĺĥ\nyu mm\ntic ho\nte atro\nash lee\nve iled\numb a\nobli gated\nmoisturi zing\nmagaz ine\nlong board\ndang ling\nc elli\nwest bury\nv ä\nucl final\nhou ser\nchap elle\nadmir als\npar o\nmutu al\nclean eating\nvacu um\nkh our\nhab itu\nfoo din\nfil mis\nes con\nsm it\nawar dees\n௠Ī\nwan ds\nthug life\nmc cut\ncalyp so\nÙ ĥ\nyas a\nradi om\nhen ley\nfron tage\ncritici zes\naccess ori\nsardin es\nid ge\ngold finch\nfront end\nd wi\nbeach front\n# ï¸ıâĥ£\nâļľ ï¸ı\nsh l\nsh eng\nrai shi\nmari ota\nfen der\ncon do\nun covers\nde van\nðŁĺĤ ðŁĴķ\nrenov ate\ncompri sing\ntamanna ah\nmash allah\nhumph reys\nen acted\nar tu\nwo e\nsine ad\nom ore\ndel phi\nbre n\nbo z\nwellness wednesday\nv sc\nt iller\nprogre ssed\non ze\nlove for\ngor a\ndon the\ndear th\nde ve\ncas us\nb ili\nalla habad\nag ni\nt zu\nproduc tion\ncom bed\ncha un\ns ce\nmem bran\ndon ner\nbla der\ndarkhorse comics\nc zyk\nayat ol\nsacram ent\npere z\npe in\nn ite\nken ya\nintensi fy\neleg antly\nauto pilot\nrou ted\niu bb\nceli ac\nste infeld\nmoc cas\nka ther\nex hale\ndad dys\nsta unch\nspring board\npe gg\nkirk man\ncin nab\naor tic\nruth wignall\nmoder ately\nlau ds\nau ral\nvagu ely\nspread sheet\nmerri mack\nda thletics\nwe stie\npesh merga\ncoo pers\ntan trum\nt cu\nga be\ncriminal minds\ncom ix\nq ur\nfi q\nbor g\npue bla\nnis mo\ncy ano\nbak h\nti g\ntho tel\nil ford\nguadal ajara\ninclu sivity\natom ic\nven tric\nu el\nmono gram\nman kato\nfu q\nðŁĺĤ ðŁ¤£\nstra d\nplu mage\nop ath\nkom en\nim al\nche tta\nbill ing\ns vr\nhu mmer\nd lt\nwater cress\npil ar\nhuman ist\nher r\nha ig\ncor ino\nswan ky\nspo tters\nsn h\nmedi aday\nunder ground\nton bridge\nroblo x\nre take\nmen in\ninno cent\nton g\nlar amie\nbe gged\narti sta\nuste des\nsan tho\nlac ro\nis ations\nfox y\nbio sphere\ntemp tations\nstan lee\nsemin al\nini go\nãĥ ĭ\n º\nspod cast\no shi\nlloy ds\ngree ce\nfore word\ndavid tennant\nbrain tree\ntam i\nsam mie\npredomin antly\ncoffee time\nclut ches\nacap ul\nval halla\npro ck\nmytho logical\nmeh met\nidio tic\nd su\nðŁİ Ĩ\npuri fier\noc ca\nma f\nhoo t\nover joyed\nha ke\nbehavi ours\nðŁĴķ ⾨\nle ena\ngau l\ncarne gi\nu ws\nrepell ent\nmaxi me\nkar lie\nj iro\ngla ser\nfr ites\nearth hour\nde k\nse ams\nl ly\ngilli am\ndavin ci\nwe sh\nswe de\npe tra\np tm\nmy b\nmin ig\nhon dac\nal f\nstaf ford\nplu shie\npal in\nmetast atic\ngo reng\nflan ery\nro java\nani x\nðŁĶ Į\nap c\nactiv ates\nvic i\ntu ally\ndelici ous\naw ith\nair base\nstabili zation\nsolic ited\npic ky\nim pin\nfo p\naf x\nthe man\nthe green\npee wee\nmis smar\nkitchen ware\ngil man\nscoun dre\nkra use\nj nj\nhend ry\neng r\ndar lene\nmal don\nfam icom\nmi er\ndi su\nbreakfa sts\nاÙĦ ع\nver gne\nsunshine coast\nh ed\ndi vest\ncri mean\nv fc\nsu le\nsam ay\nsloven ian\nis bn\nborac ay\ntu bby\nsp are\nreas suring\nmu tt\nintram ural\nat b\naaa and\nâĻ Ľ\no ge\nfi u\ncaer philly\nstring ent\nsteel er\nn pl\nmacadam ia\nindi go\ngrow l\ngimm ick\nespañ ol\nz ü\nth alia\nsoul mates\nmore au\ncri stin\nanxi ously\nvod acom\npam pered\nlo z\ncontent ment\npharmac o\nn sp\nmon ika\nmika el\nmac d\nda o\nsw ill\nsheep dog\nyo st\nseiz es\noff shore\nnor walk\nlo scab\nbo sque\nr acked\nparri kar\nna st\nlo tti\nbi j\nÐ ·\ntb thursday\nquestion naire\nmercen aries\nevo ke\ndi sal\nal tru\nwhat ever\nstr ö\nsan jose\nman tel\nin convenient\nuaap season\ntow no\nspec k\nal bright\nthe girl\nha shi\nem oun\ndow ney\ndesp ise\namuse um\nsm elled\nrugby union\nover turn\nak ron\nson ora\npau ly\nmont ague\nmin ar\nmill i\nsuzu ka\nseo hyun\nportra ys\nou mi\nmo hit\nlor dof\nayles bury\nappropri ations\nen act\nconclu sive\nchim ic\nrasc als\nj rotc\nind aba\nma iler\nsun dry\nsubjec tive\nstu mps\nsecre tive\nred blacks\nqu asi\noni ze\ncany ons\nnav a\nlor ne\nfor de\ncocon ut\nus at\nshear ing\nsai yan\nprat ap\nmodu lation\nflann ery\ngol ding\ndi da\nag ong\npatho gens\nk ye\ndow ling\nchi ara\nsadi q\nol ander\njourn alistic\ncroche ted\nassu mes\nai ba\ns vet\nre visions\nph at\nelis sakh\nsur passing\nperson ified\nmon ta\nin ar\nwil fried\nâĹ ı\nx ler\nta kam\nout done\nhall ways\ngow da\nfam ou\nchop sticks\nantiqu ity\n% )...\nnak uru\nforsa ken\nrole play\nkan ban\nfly in\ndock ers\ncon jun\nìĹ °\nswee tener\nsin es\nre kha\nimagin ed\nh su\nder ailed\nmano j\nji mi\nacab ello\nâĿĹï¸ı âĿĹï¸ı\nstre atham\nparad ox\nma stop\nlike aboss\nleisu rely\niti ger\nfaire r\ner cy\nðŁĮ ¾\nma sch\nlun e\nla sd\nhistorical fiction\nbol t\n, (\nta pi\njor d\nd na\ncant be\nalder man\nto sses\nor deal\nnur burgring\nkin gh\ndu os\nde ze\nclin ches\nnap avalley\nindispen sable\nheath ro\nfro ma\ndece it\nba ira\nws ers\njack al\nch ula\nbal ay\nsur bhic\nsal at\nlolo lolol\nhad don\nfear twd\nscar lets\nfanta stically\neredi visie\nconting ency\nseven oaks\nme tra\nfutur ama\nce phal\nvi kes\ntermin ate\nsequ els\nchipmun k\nval ky\nstu la\nse vents\nlo dges\njess i\nj bl\ngar rett\nes es\ncon ferred\ncertific ations\nanter ior\nte ague\nha da\nâĸ ¸\nwin less\nji b\ngrit te\nga el\nz d\nun covering\nsi mr\nroy ce\ngwyne th\ngoo ooo\nconquer or\nald rich\nvin ny\nre generative\npropag ation\ncri stal\ncorrec tness\nwh m\nun lv\nso w\nnet ted\nk haz\nan ise\nplough ing\nmillion th\nem ac\nec ki\nyar ns\nimpo sible\ngood byes\nff h\nfel ice\nero a\ndu omo\ndu ll\nbarri ster\nv ity\nst irs\nshu gden\nse per\nre discover\nmas sey\nal fal\nover ture\nmole skine\nma ka\nli ppers\njay len\ngron k\nfel dt\npuni shing\ngary vee\ndim ple\nbriga dier\nhappy sunday\nfreel ancers\ncajun s\nbloss oming\nscar let\ns ities\nph en\none ida\nken nels\ninadvert ently\nhu sky\nfi fi\nbj d\n?! ?!\nur chin\nto s\nste pp\nau tor\nãĥ ¢\n~~~~ ~~~~\nwid nes\nshe re\njust icia\nfant as\nel aw\nÌ Ħ\nwi steria\nu q\nshar kn\ndragon flies\nal dean\ngo b\ndi bs\nbo rer\npetron as\ndoub ting\nchap ar\nshil oh\ngabri ele\ncor pu\ntaka shi\nselfie day\npe tru\nharmon ies\nu ck\nsty x\nk ine\nhigh gate\ngang sters\nga pol\ndesi ree\nover comes\nmc cas\nhersh ey\nhe ston\nduck worth\ndas gupta\nzam ora\nhar rell\nam ble\nvisu alizing\nuc u\nsu zie\nmil dred\nlu t\nd wi\ncivil izations\npreten tious\nobl iter\nmil len\ngirl boss\n% :\nwin field\nrever ber\nmat ta\nin ery\ncro ke\nch lan\nbep anna\nðŁį Į\nðŁĩºðŁĩ¸ #\nsqu a\nse id\nla ve\ngh is\nbe headed\nemer son\nawk wardly\nar h\nà Ł\nw mu\ntw i\nshiva ji\non of\nbun kers\ntar aji\npal ace\ni ang\nde crimin\nwhit lock\nwal eed\nax well\nviny ls\nkan al\nexc ise\ndon ington\ncarl sberg\nunder served\nsolu tion\nportra iture\nke urig\nincorpor ates\n민 íĺ¸\nvelo drome\npe tta\nlen eck\nfor gott\nfe fe\neu c\nart book\nthrough put\nshare pict\npe eing\nhigh bury\ndog strust\nðŁij IJ\nw wi\nm lax\ndd in\ncon de\naffordable housing\nðŁij ¿\nt fl\nsho aib\nne ues\nn de\nmor in\nflu tter\nfi ver\nsepar able\nkenne saw\nirish times\nink tober\nfantasy art\ned sa\nshruti haasan\nsc ous\ncro pping\nabu sh\ny c\ntem plar\nmotor cycle\ngab ba\nar ic\naldub nation\naf r\nwhispe red\nva x\npollu ting\nhead ers\ngreat awakening\neer ily\nbal my\nida e\nbon es\na fu\nshi res\nf ww\nuni fy\npress sec\nconsign ment\nma ken\nterr ance\nswe ar\nprag matic\nnight fall\njor dans\nic han\nta hir\nma dal\ng eller\nalber thall\nsocial selling\nrecur rent\npho ton\norgani zes\nfight back\nevacu ations\ndu ci\nchicag opd\nbird life\nðŁĺ« ðŁĺ«\ntu mul\ncam pi\nðŁį Ħ\nsin ski\ndissol ved\nan ch\nyon der\nrs na\nriver view\npul sar\npro pon\nmultil ingual\nkab ali\nbe agle\nair canada\nsor ghum\nfron trun\nla val\nim mortal\nepi phone\nde preci\ncor dial\nbet fair\nìĹij ìĬ¤\nti us\nombud sman\nkar p\ngy psy\nautom ata\nyou sse\ntam pering\nred birds\nkar in\ntrail head\nlegend ary\nfi shed\nes l\nsteph ane\nhill sboro\nher cu\ncamil acabello\ncam ellia\nal ts\nadju dic\nse kar\nscaff old\nmel aka\nill iterate\nha sle\nfa thom\ncampeon ato\nv logger\nspi zza\nmccur dy\nine ed\ndev ito\nteam em\nsun nies\nmorning side\nelec ting\nãħ ¤\nbad die\naksh mi\nsport sp\nprogram matic\nge eta\nfla unt\n? ).\nzu ela\nsun ku\nspider verse\nshreya ghoshal\nsh ams\nbenevol ent\nspo int\njee zy\nequ ine\ndunkin donuts\ncomp troller\narto fli\ntre v\npap e\nohmy god\nbou ts\nbik elife\nmo te\ng cs\nacce s\ny art\nut austin\ntrans lators\ntab or\nsho wered\nandre as\nak l\nwomen who\nãģªãģĨ ãģ·ãĤĮ\nram zan\nlake front\ndu cky\ncivil rights\në l\nteam sters\nstr is\nshat tering\nchar lot\nbag an\nalo a\naaaa aa\nmo se\nmar ce\ngun powder\nge isha\nðŁĺ µ\nper mac\nelo pe\nchri sto\napril fools\nwolfen stein\nthere of\ntar n\ntaka hashi\npoly gon\nlu mix\nindepend ents\nhier arch\nfc fans\nwc q\nlaw ay\nav ro\nat one\ntru ex\ns ro\nr ur\nmt l\ni ft\ndefi antly\nch itt\nr vp\no bel\nk mart\nela ine\nbed ford\nse men\nsab out\nbathro om\nðŁĴķ @\nkhy ber\ni will\nbusiness woman\ntar as\nparam ilit\nmer sal\nchor lton\nak ram\nw dc\nuniversi dad\nja vier\nj ara\ngil as\ncontracep tion\ncat aw\nc nd\nbu co\nau ri\nton ight\nma vote\ni fi\nalbat ross\nvegan ism\ntw ich\nlu d\nle ases\nde ben\nworsen ing\nqu ia\npower less\nend ra\nðŁı¾ âĢįâĻĢï¸ı\nا٠ħ\nventu recap\nsu do\nnom ad\nindiffe rence\nge tup\nexplo ren\nbay ley\nu gg\npad ra\norange county\nco bra\ntic ked\nti ss\nshrun k\nk sb\nic m\ngett es\naberystwy th\nde ars\nvas an\ntab asco\nlife mag\nfin lay\ntam iz\npoon am\nplat former\nmu sco\njoy ful\nit b\ngol ang\nga stro\nenrich ing\neli ke\np wc\nkelly anne\njama ic\nhal lam\nbri ar\nwell ing\nwat s\nvo icing\nt tering\nra vel\npa wards\nmu zz\nh tm\nalig ning\nwedding wednesday\ndri fts\nrolls royce\nmultic olor\nluci o\nhan son\nf gcu\nsound garden\npan cetta\noc tober\nfree masonry\nboun tiful\nbigbang theory\nbehe moth\nº ï¸ı\nsne eze\nsaat chi\nraw at\nmobili ze\nmo he\nfur ther\ndy bala\nboli var\ntan o\nghu lam\nfemini st\nbo f\nben dy\nant in\nwe is\nt sar\nfav ours\nfab regas\nsh ang\npro biotic\nad mit\nsol der\nmo vable\ndra dio\ncyclo cross\naustrali aday\nâļ Ĵ\nz at\nchi m\nsi reland\ns mb\nair fare\nÚ ¾\nme politics\nmal com\nkop f\nk all\nchi pper\nban que\nðŁĻ ī\nsol ver\nin sinu\navent ador\nzero waste\nhell cat\nuniversal orl\npu so\npal au\ngav a\ne intra\nd je\narunach al\nvi u\nthe ad\nsep tic\nsantac ruz\nmor gen\nguil ford\nber tol\nb dutt\nworld poetryday\nsc m\nple thora\nlondon traffic\ncre ma\nt iness\nsi em\nel ated\nbefore hand\nb q\naw ada\nnag arjuna\nev y\nðŁĮ ı\nlu cha\ncall in\nse aco\nretri eval\nkun al\ncar on\nreserv a\nnegoti able\nlang a\ndo fe\ncab al\nani k\nðŁļ §\nðŁĺĬ ðŁĺĺ\nsub station\nno x\nlong ford\ngad dafi\ndic a\nzi oni\nmitochondri al\nit on\nin sp\nbe tray\nva in\ntr ts\npen di\noppre ssive\nlong wood\nlimous ine\niz umi\ngreen light\ngo ggle\npl t\nto kio\nlong beach\ngene ss\nvisual art\ns ball\npacific a\nkir by\nitu dinal\ni den\nfoo ting\nen sues\ndit ching\nsunku writer\nsig nor\nm news\nl tr\nb sn\nwhi de\nver des\ntaylor nation\nsen n\nn spoli\nmatch box\nmac gy\nchro mato\níķij íģ¬\nq in\nmo ca\nla gging\nb ander\nsm r\nred woods\nde gas\nti ered\nma ko\nkno tts\nble sses\nbella gio\nbarunsob ti\nad t\nsc rape\np mp\nno y\nmu har\nwhit stable\nman sell\ndri bble\nn di\nmun cie\nho yt\nfiber glass\nalo u\nthing si\nth au\nsanay airani\ns forever\nrale igh\nmccol lum\nbut tered\nbang in\nshab azz\ncho ir\npension er\nn ando\nmu sa\nkra u\nintoler ant\nh mcs\nka jol\nch ale\nblock ers\nbi el\nv su\nsh ona\ngh ol\ndecor ator\nchi ppy\n~ #\nwel lies\nsub hash\nou ld\noc r\no ann\nken wood\nc bus\nton ing\nruck us\nro ca\npi b\nop aque\nfor bid\nbritishar my\nsens ation\nlo bla\ninde b\nconne cts\nðŁİ ®\nnext level\njaz zy\ne fe\nwh l\nim mortality\ngym life\ndopam ine\narter ies\nts g\nsteeple chase\nresurrec ted\nka izer\nhotty toddy\ndg b\ndal ry\nattach ments\nwind mills\nul cer\nshare ef\noy ce\nn tc\nloan ed\nani ka\nag r\nwest coast\nsha ver\nbolog nese\nsu ez\nphoto card\nmi splac\nlimb augh\nbarbic ancentre\naccor dance\nze bras\nthalapathy vijay\nmen style\nfinal fantasy\napp ing\nangel ic\nraf fa\nhitch in\nhe ct\nbre da\nblind spot\npre eti\nmentalhealth day\ndae hyun\nbore rs\nãģ Ł\ntalk radio\nÚ º\nitiger shroff\nend on\nra pp\nph onics\ntar a\nrand paul\nface ts\nart ful\nar anda\nâĺ ĺ\nstor mb\nsau cony\nmember ships\nal ur\ntreach erous\ntis the\nstan sted\nre work\npre emp\nhol la\ngi anna\nbeauty andthe\nâļ«ï¸ı âļªï¸ı\nsurbhic hand\nhealth forall\nanatom ical\nve c\ntrans national\nor la\nen n\nak ali\nto tti\ncar mine\nsub mits\nprojec tors\ngu ten\ncruz crew\nsc ele\nken yan\nconce de\n! ðŁĶ¥\nsaturday thoughts\nru k\nec er\nwin ing\npic mix\nli mon\nlau gha\niti e\nfa un\nbru cele\nठŁ\nvocal oid\nt news\nmiser ably\nem brace\ndon kiss\nde position\nclever ly\nthic ke\nsky dive\nplay bill\nher t\ndoor i\nde letes\nbo asting\nanaly tica\nsh su\npro sthe\nf bc\ndu arte\nc wa\nbad as\nin visible\ngeo logist\nec t\ncas settes\nba ir\nrevolu tions\noff end\nnutriti onist\nline men\ndele vingne\nsi da\nman chu\nji an\nbli mey\nar gan\nwildlife mag\nsnow drops\npre cursor\no co\nneapol itan\nit su\nbirth stone\namate urs\npin ks\nley ton\ngram my\ngiac omo\nsei u\nsecond hand\nout cast\nlon er\nb ites\nðŁĺŃ âĿ¤\nè Ĭ\nun cg\nslimming world\nsi o\nshin ji\nou ch\nkan te\nðŁİī âĿ¤ï¸ı\npe k\nhu zzah\nde kar\nbelt way\nab und\nðŁ¤Ļ ðŁı¼\ncri m\ncaregi ving\nara jan\nq pr\nfon seca\ndaw son\nbu li\nalter cation\nwe the\nrawal pindi\nmessi er\nje mima\nden ounce\ndebu ssy\nchiroprac tor\nantiqu ities\nwa hl\nun packed\ntri athlete\ncl iche\nsuper card\nre tour\nre petition\nre actors\nlead ers\nhol lie\nfa z\nbad o\nta os\nraj avi\nmulti verse\naj al\nìĹ ¬\nuof l\no ha\nka c\npd l\nbaro ssa\nari k\nðŁĺ¢ðŁĺ¢ ðŁĺ¢\nmet calf\nciu dad\nchi yaan\nash lyn\nam ity\nway nes\npa wn\nox nard\nìĬ¤ íĬ¸ë\nes b\ndod son\nâĺºï¸ı âĿ¤ï¸ı\nis che\nev ry\nbre m\nto en\npronoun s\ngraff iti\nflat bush\nche p\npig let\nit ye\nempha size\nc bee\ná Ī\ntele graph\nsing am\nor dn\nmg m\nkno tted\nale igh\nranbir kapoor\nmar ko\nlic orice\nax ia\narti e\nðŁij ¥\npu m\nplun ging\nore illy\ngastro enter\ncis o\nbombar d\nbas qui\nspeci alize\nnr m\nnak hon\nfre sco\nam ity\naero bic\nsin ow\nre produc\npri mor\nstraight en\nbound less\nbone less\nstampe ders\nre tweet\nquint ana\nluci en\nkri eger\njam z\ndou che\naudi ophile\nabol ition\nto ho\ntab a\nse gal\nsch ö\ns gov\nm td\nlen ox\ncru tch\nðŁij ł\nplaty pus\ning old\nre think\nkh attar\ndri ft\napaaja iklan\nancho vy\ntri este\nlu mp\nquen ch\non it\ngill ingham\ngal van\ncom miss\nmi sty\ncol ton\nbob cat\nwhite horse\nric ha\npu ke\nperpetr ators\nno b\nkt la\nira s\ng wa\nd pd\nco tti\nteas er\nolym pu\nfranç ois\nsh amed\noul ding\noffici ald\ninaugur ate\nder went\ncon formity\nsil vers\nis ka\ngat ineau\nce ce\nany thing\nsplend our\npin tura\non am\ndur bin\nd gs\nvali dated\nse go\npar ra\nlast fm\nka in\nh cm\nak ar\nab ram\nlearn to\nar ke\n_ ;\nsom mer\nshe amus\nkam ara\nflir ty\nðŁIJ ¬\non ice\nhu ma\nel bows\nconce al\ncol leg\nacqu itted\ntax ed\nmc cau\nhealth tips\ndefend ant\nchee tahs\nbusiness men\nre h\nmat y\nandro s\nthe musical\nob ar\nge mm\ndalmati an\nwob ble\nspho tography\nprairi es\nma dge\nkail ash\nfun der\ndatab reach\ntender ness\nsper ry\nmc cu\ndebu gging\nko pp\njame is\ndiss atis\nn cl\nlogan o\nh mas\ne ren\nac os\ntumb le\nnatl parkservice\ncross fire\nbat mobile\nag iri\nwar ne\nvi my\nsupervis ing\nren ko\npool ing\nma wr\ndock yard\nnar o\nmulti plex\nexc l\nconten tious\nab bi\n好ãģį ãģª\ntwitter less\nobli vious\nkore ans\nfre ne\ntul si\nhi ma\npasqu ale\noc clu\no key\ngo dof\ndan ilo\nar de\nðŁ¤ §\nnn nn\nfur y\nfi ka\nber sama\nwise man\ntru c\nsh em\nq atari\nox fam\nas lan\nsoci ety\nri dges\nmur ky\nfrederick sburg\nf k\nchar ly\nbuck nell\natta ined\nthan am\nmez cal\nhef fron\nw jc\nsty lists\ndaffo dil\nwend ys\nr tz\nfamili es\ncrack le\ntun nel\nnit z\nmur ph\nad avis\nesp rit\nwin nin\nki pling\njer o\nyoung blood\nru z\nparanor mal\npantom ime\nmat lock\ninst am\ngall ardo\nf wy\nca en\nvel le\nkut i\nfur thest\ncom ings\nav b\nshu dder\nnorth am\n: ^)\nðŁĴ §\nswe dish\nprettylittle liars\nbraz os\nr ations\npizz a\ngo gators\nfire wood\nesto y\nad hi\nlec lerc\nice bucketchallenge\nhippo drome\nbloodh ound\nad gpi\nsuc cin\nsub committee\nmoris sette\nthe view\nshow ering\nj awa\na ic\ntro m\nsurbhichand na\nro din\nrestra ined\nram bl\nmo bs\ncubic le\nthen y\npark our\nhe ute\nep c\nbit coins\nauc tioning\nmal a\ngi gem\nconcentr ating\ner nie\nbun e\ntran sports\nki shore\nhar aju\nðŁĵ ©\nsweat shirts\npol yu\nneed ham\nnc te\nkh loe\nfire safety\ner ian\ndri fter\ndeta chable\nwoof wednesday\ntric ol\nshu ps\ndise ase\nu min\nstory book\nstart ling\nsg f\nma kan\nðŁIJ Ķ\nagend as\nhi it\ndispat ched\nsynchron ized\nshu man\nradic al\npu tt\npre cure\ngo fficial\nde code\nvi ans\nvi ability\nv sp\ntam ales\npra bhu\nsnor kel\neas th\nbl under\n: ((\nwai ved\nide al\ne ury\nameric a\nt dy\nshock ingly\nfran z\neric s\nce f\nbal ear\nren zo\nko enig\nc bbc\nbiome trics\nsuffe rers\nsu ch\nsmo kies\nmur u\nk hawa\ni im\ngha zi\níĶ Ħë\nwhite tail\nun chained\nthenotori ou\nsh ino\nken obi\ncour gette\nclint ons\nal ala\nsexi er\nnever stop\nne gros\nne ca\nx cx\nsong book\nren ding\ncal ms\namar u\nag tech\nãģ Ń\nqui dd\nnew years\nmar gher\neye ball\nati er\nvivekan anda\nsomer set\nrin ce\nmu kh\nho h\ncol er\nbu kas\n⼠µï¸ı\ntu cking\npi ggy\niban ez\nho skins\ndecep tive\nclick bait\nbu le\nworld view\nwoo ster\nwo td\nstin king\ndam i\npau lina\nfel on\ncross body\nwb tv\nsub han\nlon zo\nflat iron\nburn side\nwin throp\ntallade ga\nsp angled\nsf p\nro wan\nreal ises\nwash burn\nÙĬ ÙĨ\nston ec\nemp tied\nci ren\ncha ise\nam bu\n. !!!\nse tbacks\nsad dam\ncon naught\nav enge\naf fluent\nu ob\nthat ch\nswin ton\nsat ya\nes z\nequ ity\nre invented\nkas per\nc fa\naesthe tically\nmi ku\nmar cy\nfin anced\nlook up\necoun ty\nðŁĺ º\nt dih\nro pe\nme ch\ndy ing\nbook seller\naa sh\nvel oci\no vi\nim m\nfeat ured\nnu g\nfun g\nell sworth\nsett ler\nsay o\nmu zzle\nsu omi\nragn ar\nmentalhealth awarenessweek\nmaastric ht\nil in\ngl und\nak ar\nintellectu als\nflor al\nbrack en\nti ps\nsub ver\nse duce\nscu deri\nnev ad\nje eps\njaw an\nscar red\nmed school\nec p\ncatap ult\nadditi ve\nsm itten\nq d\nlock ers\nlike agirl\nkeral afloo\nbub bling\nari ze\nðŁİīðŁİ Ĥ\nìŀ ¬\nted talks\nrhschel sea\npu y\nok ra\nlogo design\nhen g\nhammer head\ndri bbles\ngan ja\nfor ds\ncou scous\nar gen\në³ ´\nvan ish\nne tapp\nmy love\nanch oring\nç Ļ\n ¨\npor ous\nover seeing\nmusi k\nma gen\ndar nell\nr ha\nper o\nland a\njurassic park\nfre o\nbron ze\nãĥĥ ãĥ\nðŁĶ ¸\nðŁĴIJ ðŁĴIJ\nwa ch\ntri gger\neng inak\nd bl\nðŁĺĩ ðŁĺĩ\nspeake asy\nsolid works\nsheh baz\npu sher\np ty\nfat loss\ndiscre te\ndi onne\nch iller\napplau ds\nu mp\nra staf\nneg atives\nmacar on\nislamic state\ncap tion\nanti aging\npember ton\nlong ong\nissu s\nres ounding\noffen ses\nnew balance\nn ley\nmont auk\nmc ga\ndispos ition\npurpo sely\nir anians\nðŁİ »\nfu lani\ncorrug ated\nðŁĩ³ðŁĩ ¿\nston ia\npar snip\njam ison\nge is\nðŁĶ Ħ\nre claiming\npleas ant\non boarding\nedou ard\na ah\nswee per\nnu nez\nmu dd\nholo lens\nchee z\nbrigh tened\nâĿ ĵ\nwo wed\nsch ko\nnis d\nco ffe\nba hama\nauck land\nsuper mari\noun cing\nop ting\nmc clu\nâĢ¦ #\nsant as\nsli brary\nrevit alize\nqu ai\nmen acing\nkkkkkkkk kkkkkkkk\nder ulo\nscre ech\nko enig\ncrowd fire\nbravo tv\nay ee\nar kar\nsi mi\nme era\njiha dists\nje we\nbu ss\nari ane\n- ,\nਠ¾\nn su\nðŁĶµ ðŁĶ´\nfi bre\nar ched\nà ¥\nt so\nre my\nlight foot\nfar han\nembarra ss\nbro derick\nbreath ofthewild\nas ino\nsuperst ition\nnew ry\nmer ck\nkip lier\nab ag\nvan g\npic to\nli f\nbag pipes\nat ru\nroyal alberthall\nmovie review\nlil ley\nju t\nbang bang\n. ).\ngrass lands\nflower report\nchat sworth\naam ir\nsyn tax\npro bing\nnomanss ky\nlau der\nwe tting\nso ta\nrappler dotcom\nphotovolta ic\npharmac ology\nluc ca\nle gging\ngumb all\nfull back\ndece ive\nsop ranos\ns bar\nru pert\ncom bi\nclar ks\nbilli es\nalle gro\nm ce\ndam an\nchicago bears\ncas as\nvap elife\nmal in\nbyo b\nâĹ ¾\nrac er\nmv p\nmemor ize\njiha dist\ning life\ncom ber\nar tex\napplic ant\nje a\nin former\nho xton\nhen ning\nh ls\nðŁĩ© ðŁĩª\np q\nin london\nilay athal\nâľ į\nsciss or\nsch amp\nli able\nstra ining\npu ra\nmon kees\nlet ch\nkom pany\nby design\nmo dul\nhar dened\nbrecken ridge\nwol longong\ntri er\nman ate\nlyn ching\ncon cur\nc sf\nwood ard\nol ab\nl st\njamie oliver\ninsur gent\nwre cker\nor mond\nkim ball\nsn ic\ns ere\nmal ar\ngar ages\nfel a\nfa de\npastr ami\nic rc\nhor atio\ncle aver\nab be\nwwer ollins\nprivati sation\nnature guide\nhol me\nh eng\nesk imo\nmay noo\nlever kusen\nax l\nsk sk\nn our\nfi do\nfamil le\ndis i\nbr inger\nage less\nx g\npi an\npath ak\nab domen\ntri mble\nin ns\nidw publishing\nfocu ssed\nei ght\nmandel aday\nfa ve\nda ire\nbul ance\nu mmmm\npe res\ntomo da\npp ed\nmay all\nler ner\nelder flower\nbar nar\ntransp lan\nmausole um\nfier ce\nalleg ing\nneti zens\nky ler\nil de\ngam b\ne as\nlit es\ngo er\nbur u\nalice in\nðŁ¤· ðŁı»âĢįâĻĤï¸ı\nti pple\nrupauls dragrace\npee ks\ninter twin\næ ķ\ny j\nshan ia\ntechno logy\nnba on\nmul tan\nmotor head\nlu kes\nken zo\nmccre ery\ner te\ndra s\nblo kes\nber nal\napple by\nsouth carolina\nnew borns\ntw ir\nspartan burg\no cala\nl ü\ndwy ane\nbra va\nace h\nภĹ\nsv s\nsula wesi\nstoke city\nshar ks\nfo a\nanti depress\nðŁĩ¬ðŁĩ Ń\nsidel ined\nshu l\nseren geti\nll lll\nkab ir\nbout a\nbi zzle\nbam ba\nque ttes\nnb cla\nmj hl\nmg mavote\nmac chi\ncag r\nale ah\nðŁĺ Ĺ\nwhi plash\ntim i\npal mas\ndomingu ez\n ·\nil on\nhil arity\nru a\norgani st\nmit ts\ngas ket\nðŁıĢ ðŁıĢ\nten sor\nsteep le\nsmy rna\nrand o\nr ma\npl enti\nfo go\naph one\nðŁijĩ ðŁı¾\nðŁį ı\nth ad\nre sor\npetri fied\ndi xi\nti gan\njalap eno\ndeser ve\nsav age\nmad sen\ngre mlin\nfor women\ndepend able\nconve ction\nbo sc\nyel yah\nwatch mixer\nìĺ ¤\nz ell\ntur ku\nsoul ja\nshe et\nsel i\nma kas\nk league\nan go\nak al\n........ ......\nte tsu\ni heart\nher bst\ncyber attacks\nsum ter\nrijks museum\nraj ya\nar ba\nrock ingham\nmus sel\nmicro scopic\nke babs\ncand ice\nget fit\nadam ant\nwe ing\nsa shab\nh gv\nemp tiness\ncur ation\nbrit natureguide\num n\nra fi\nan er\nviscer al\nup trend\num pires\nts now\nout last\nle sh\nih saa\nshal lots\nsco pe\ndan za\nc vc\nbac ardi\nair brush\nae gis\nðŁ¥ Ĭ\ntru sh\nscha efer\nresist bot\nfior ina\nbran ch\nwhit efish\nru l\ncon spic\nar ig\ntwe aking\ntub man\nste tson\nrobber ies\niso l\nem m\ncondem nation\ncast ing\naud its\nvish al\nvand alized\noc i\ngi m\nwork place\nvan buuren\nnig ella\nmis guided\ncas cad\nafter ward\n:- *\nsub tly\ncar rick\nple ading\noriginal art\nomnic hannel\nnancy pelosi\ngreat lakes\nglimp ses\nent ino\ndown right\narter ial\nðŁIJ ķ\nmaxi mizing\ner acing\ncy te\nchur ros\nstur gis\nmicrobio ta\nmass ac\nkun al\nku b\nh ny\nblin ding\narticul ated\nan es\npiers morgan\nker alab\nho cken\ncoles law\ngas sed\nd md\nðŁıģ ðŁıģ\nnor bert\nmi i\nlong ines\ngo de\ndel ray\ncarval ho\nbou quets\nbat ty\nbake well\nst oop\nsare es\npug life\nkau ffman\ng ds\nfree speech\ncul pr\nbasqui at\npan dian\ng ws\ndo glover\nden ces\nbeach y\nwan ing\npress freedom\nhome made\ncon stric\nbhu mi\nbb all\nt iling\npopular ly\naccol ade\ntar ra\nsta ve\nkardashi ans\njac lyn\nic ed\nendange red\nart finder\nðŁİ ¹\nvanity fair\ntr ill\npsychop ath\nmulti functional\nlou p\njag ged\ngr ama\nsanctu ary\nher schel\net ch\ncapac ities\nz ora\nslu ms\njad ine\nbag ga\nani m\nsp ress\nhand some\ncape town\nby ers\nw sc\nsh reds\nmiyaz aki\niti st\ncoll ard\nè ²\nsal ina\npac ino\nnune aton\njan ella\ngrass ley\nৠį\np eli\ndon line\ncomfort food\nc ÃŃa\nso ba\nfl ys\nspay ed\nmed ve\nhol man\nãĤ Į\nstef anie\nnais mith\nhome girl\ng bb\nbul k\nau ce\nafternoon tea\nac ular\nsu iting\nspot less\nsky lar\nshop kins\nj ona\nclo cking\ncar cass\nbo gey\nbe ig\nbac chus\nari es\nad k\nðŁĺ¬ ðŁĺ¬\nupro o\ntri a\nhom ing\nhan n\nel vira\ncdc gov\nbr ind\nal en\nwn c\nwith ers\nro ast\nos mond\nke ele\ne bs\nmarke ted\nimperfec tions\nen cin\ne sses\nc zar\nworth iness\nwatch man\nme ena\nman ali\nkat ow\nhistoryof painting\nedit or\n° .\nrosen stein\nitsen rique\ndal hou\nbegg ars\nsym metrical\nsurg ical\nstar a\nst ent\nso excited\nsa ac\nrobert pattinson\npe dd\nker o\nç Ľ\nthu mp\nre tribu\npowered by\nober oi\nhybri d\ngrid lock\ncd m\nav al\nãģ §\nthenotoriou smma\nsub conscious\nhe id\ngo bruins\ncy ani\nbo den\nuc sd\nsar o\nel c\nde ley\nbol den\nspie gel\nre made\nn anda\njodi arias\nh any\ntoo o\nsalis bury\nop ing\ncab all\nan gr\n... *\nto ggle\nshorth air\nsas sy\nsan am\nfl on\napologe tics\nac cel\nshirt day\nac me\nic t\nhal es\ndanc in\nco exist\nðŁļ ¢\nè µ\nyelyah williams\nstraw berry\nfc n\nce t\nsanc tion\nr fa\npo tt\niz om\nid t\n; ;;\nvol a\nmess engers\ncher i\nsfor all\nrhine stones\nr ann\nus k\nsole mn\nsen tai\nretro fit\nmait land\nac tus\nig loo\ndesc ends\nu day\nic c\nhu ck\nendometri osis\nelec ts\ncrab tree\nrakul preet\njur ors\nholy rood\nfeder ally\ndi az\nde mil\nwash ers\nver tically\nuntouch able\nmal o\ncurtiss mith\ncali bur\nbook keeping\nym o\nx men\nper mian\nnational theatre\nn assi\nlein ster\nc ld\naw az\napolog ises\nal ysis\nson u\nmi dge\ninte ch\ngy na\ncome th\nband stand\nviol ence\nsurvey ors\nn ms\nes d\ndr ing\nclar ke\nbeat on\nu bud\nons laught\nne vers\nm sk\nee vee\ncon qui\nbump in\nbel ted\nac ris\nc our\nblo em\nbien ven\nv mi\nda de\nas ic\nsu vs\nspeci fy\ngaz za\nfe dex\nvoor hees\nshr ines\n# âĥ£\nito hs\ndel co\ncruci fi\nbo h\nath os\nâłĢâłĢâłĢâłĢâłĢâłĢâłĢâłĢ âłĢ\ntri pathi\nthink tank\nt ta\nsatur ation\nmmm sie\nbear cat\nrick and\npa z\nkand ar\njo ss\nal ang\nsab ina\nree ce\nm kh\njin der\nest elle\nell on\npellegr ino\no skar\nim man\nn ona\nk go\nengag ements\ndest abili\nbb g\ny x\nshiva ay\nsee saw\nmo tu\nger hard\nal armed\nhouston rockets\nfin ally\ndra vid\ncorpor ates\nc ô\nc mo\nblood shed\nti h\nstrong man\nsol an\nsn ick\nr ara\npau li\nn ge\nhorse men\nch ism\n? ....\n.. \'\nli via\nissan ts\nbc g\nbar one\nwat ters\nval eria\noptome tri\njess y\nj hl\ncom be\nbe toor\nðŁ¤ ¢\nut in\niggy azalea\ngrou ping\ncommun e\ncolumb ine\naf for\nsa is\npanch ayat\nh ro\nfloyd mayweather\nesplan ade\nz vere\nsony music\nno a\ni vey\nd onal\ncher son\nc ack\nbetoor ourke\nsusque hanna\nkak kar\ndon es\nderail ment\ncompul sive\ncardi b\nca e\ntim ings\nap l\nafter hours\nac ting\nun fore\ntransforming india\nsuppre ssed\nsidd har\nr sm\nmah rez\nin capable\ngreen wich\nmisplac ed\nlove this\ninsi der\nbiomar kers\npanini america\nmultiplic ation\nice breaker\ndiscre et\nchec kin\n人 ãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ\nvel cro\npre scriptions\nhetero gene\ndru dge\nìĬ Ī\nØ§Ø ¯\nvan swar\ntu pper\nspar ade\nm callister\ne ko\nve ep\nmar gi\nker k\nkar a\ndic ho\ncos grove\nval des\npu mas\noff ending\nk andy\nhhhh hhhh\nh pd\ncomplex ities\ncar te\nbuf fo\nk hun\nta char\nin ky\nbat es\nat ms\nsyd ne\nhri thi\nder mal\nðŁĴ» :\nea sel\ndiss oci\nbikin i\nn sui\nmon tes\nmol loy\nmo par\nh di\ndom a\nari ous\nalphon se\nâļĵ ï¸ı\nwer der\nuni x\nseg mentation\nmicha l\nlam beau\nwhat the\nthread ed\nsa am\npfei ffer\nfu sa\nfr ack\naur us\nte dious\nnag el\nken an\nisland life\nge sh\ncate red\nbilt more\nkam i\nbul le\nteamem mmmsie\nt tu\nsl b\nnewal bum\nma zing\ngra phi\nen vy\ncon g\nwe sson\nsch il\ngur ru\nbe de\naqu amarine\nkand insky\nemor y\nden iz\nri sa\npul p\no cho\nneuro surgery\nle sions\nh ons\nbig cat\nsak ti\npsycho sis\nnsi tharaman\nsw ard\nle gu\nfi ennes\nse att\nmarketing tips\nman groves\nloop er\ndh ya\nquar tered\npri este\npres scon\nll amas\ncom elec\nri sd\nr ine\npp r\ndete cts\nvival di\nvalle tta\nfle sh\nalfre sco\ntestim onies\nquil ts\nlat ency\nk els\ngrun t\ncrimin ally\nh tg\napo or\np ga\nor m\nol ly\nmodi ji\nhin ckley\nna ve\nn ong\nheffron drive\ngulf stream\ngar rick\nenti a\nman mohan\niphone ography\nflo ated\nco en\nc ally\narmb and\nte ton\ntar te\nns wr\nmax ed\nin ward\nhydra ul\narmin vanbuuren\nhob son\ncreep in\nre ins\nkentucky derby\ndream s\nblou in\narmaan malik\nab ana\n.... ."\nten acity\nðŁı¼ âĢįâĻĢï¸ı\ntam ing\noper atives\nlec turers\ncam us\náµ Ĵ\ntherap y\nse dge\nqu é\nl ene\njudi th\nac claim\non as\nl ill\nben nett\nsh atta\ngo dre\nfle ury\ne ath\nposthum ously\npla ined\nn ace\nmor bid\nmas ood\nbac olo\nmic ron\nintercep tor\ng acha\ntalk sport\nrequis ite\nintru sion\ndom es\nbrea the\naffili ate\nnyc marathon\nhouse warming\nblur b\nsi ren\nss an\nmill on\ngra inger\ncol by\ncampaig ned\nkir sty\nillu sion\nf omo\nc illa\narmad illo\na better\nt mc\nsoo young\nsec tarian\nrede mp\nom p\nchapp elle\nand ar\nðŁIJ¶ ðŁIJ¶\npor tia\nla pd\nimit ating\ndo ers\ncam b\nbas alt\nw sp\nw los\ntal es\nlov atics\nfat ah\nsle eved\nrand i\nde foe\nÑ Ī\nvo k\nspraw ling\nsmo thered\nkin ab\nisu ppor\ni wo\ndiff ering\nal ine\nscour ge\nrestra ining\nkh j\njoero gan\ned ina\nchiyaan vikram\nweb ster\nty rell\ntake i\nmarting arri\nj edward\ne ke\ndil wale\nsur face\npu get\nle sc\ngreen tea\ndi xon\nmi si\nhuar ache\ncher y\naqu il\naltern ating\nmy thic\nlans downe\nfil an\nz ey\ns att\no as\nkerri gan\nty r\nstartrek discovery\nds man\nbre ached\nbanc roft\nìĦ ¸\nlobb yists\nlil ian\nc ve\nbull ard\nbring the\nst of\nplane spotting\nmit o\nwak anda\nmo wers\nle la\nhad field\nbouti que\nðŁĴ ¼\ns bc\nlone star\ndisciple ship\nqu akers\necclesi ast\ndead lift\nc po\nbotan icals\nac al\nstein way\nje u\nh cl\ncru x\në ·\nsh ani\npalm beach\nmen non\ndu da\ncho t\nwn yc\ncou pon\nca an\nam f\nab users\nðŁĽ ij\nðŁĹ ³\nyu catan\nw ird\ntele medicine\nster oid\nmayorof london\nhy ay\nsni pers\nn andi\nmo x\nga uri\nxen ophobia\nthe arts\nslo p\ns val\nllan elli\nin consistent\ndo ki\ndemo ing\nchar lat\ncarl sen\nbel lies\nìĸ ´\nve ts\nsen atorial\nkrit is\ngrun dy\ngolden knights\ndi vo\narch er\nresi sted\nconnoisse ur\ncelebr ating\nyousse f\npar inee\nde blasio\ndarren criss\nronal dinho\nmt p\nmatch play\nentit lement\nðŁİ Ń\nภĭ\nple asee\nmen di\nev as\ny una\nthat kevinsmith\nred shirt\nlin c\nkung fu\nepidemi ology\ndu z\nsto ker\nsay er\nmad huri\nif ttt\ngye om\nfau lt\nchan ukah\nused cars\nunimel b\nla ha\neco logist\nconserv atism\nbar ro\nart station\nstar citizen\nspr outed\nsho ved\nshark tank\npro filed\njam i\nhu xley\ngrote sque\nbe cc\nìł ľ\nภ¹\nww t\nwork fromhome\nud ine\nmar lowe\nher bal\nfur long\ndeb by\nbou tta\nve dder\npri miti\nmb t\ne ia\ndill on\nakrish nan\nwi ener\ntun bridge\nthy self\npav illion\nom ggg\nkevin hart\naw ry\ntv news\nsi one\nqu ds\nn ita\nloop hole\nte chie\nsab les\nber ing\nworldocean sday\nse g\npat tie\nne pale\nindi o\nbi anc\nbe ingh\nair line\nsu ne\nsj w\nm wah\nh ca\ngre noble\ngn c\ncouncil or\ncall a\nweird ness\nspo ken\nsh ined\nrotar act\nom in\ncity life\nvanswar pedtour\nt ine\nsp b\nsof test\nram med\nmentalhealth matters\ngar ry\nex iled\nadap table\nsmir noff\nsedg wick\nglori ously\nbit strips\naf an\ntam er\nq adi\norigin ality\njohn kerry\nes se\nsoire e\njo ggers\nc gn\nboo sie\nse thro\nle cht\nin al\nde generes\nbog or\nalgori th\nabo lished\nscram bling\nici ones\nhed ger\nhar ing\ngen omes\nbol locks\nram ble\nbepanna ah\nðŁ¤Ķ ðŁ¤Ķ\nthe sp\nt so\nhof stra\nstor ied\nol lege\njan os\ngold wyn\ndonny pangilinan\nëĭ Ī\nâĻ¡ âĻ¥\nyo w\nsab ado\ndefen ces\nap ts\ninter personal\nel ynn\nb ff\n." ~\nun discovered\nred deer\npy ro\nmuhamma dali\nlam on\nkevin harvick\nitu res\nmol ds\njust sarahg\nirr itation\nfre u\nfort itude\ndu ality\narcha ic\næ ¥\nsc loud\nnarcis sist\nmu tiny\nmalign ant\ndu cho\nculpr its\ncross walk\nberger on\nback lit\nye sssss\ntro l\nsil ks\nran cher\nnil sson\nstore front\nsco ffee\npur o\nfla herty\nfa j\ncompen dium\ncar ds\nsi mu\nmo sk\njoe jonas\nhand ker\ny h\nscreen saver\nravi shing\nhu mm\ndel mar\ncro mer\ncape cod\ní Į\ntransi ent\ntaey ong\nsegreg ated\nman ji\nki dd\njam il\ncze cho\nau ds\nãĥ ¯\nma si\nathle te\ntu fted\ntobac co\nthe l\nbird land\ntransm it\nthra sher\nsuit ably\nseawol ves\nma so\nlo vic\ning ford\ncommunic ator\nbe gon\npr s\nco ker\nat ticus\ntel co\nstu bble\nmp act\nje anne\nhome schooling\nest rogen\ndt by\nde hydration\ncom et\naper iti\nwork wear\ntc p\npan t\nmen endez\nair pods\ntick led\nme ws\nmay bach\nli ar\ninc iting\nhal cy\nfo m\nfjor ds\nwd su\nsaf ridi\nproduc er\nout there\nim ala\ner b\nbutter scotch\nble tch\nanc up\nãĤ ª\ntan doori\nshi d\np ds\nny x\ninsp ort\ni fb\nhydro gen\nbattle grounds\nwork s\nmeij er\nmary ville\nkal yan\ncas sava\nbo zeman\nmat us\nin human\nec ur\nðŁĮ µ\nschoo lof\nhispan ics\nga j\nes qui\nbt g\nac ing\npr amo\nmaer sk\nga iman\nbiza v\nbir ders\nwhoo ping\nvit ro\ns ö\nre telling\npal o\nmar kiplier\nhipp ies\ncre ator\nbrom wich\nste ely\noo o\nlouth chat\nnin ers\nmil der\nsimon e\npl m\nho tt\ndevon shire\nbon ny\nvictorias secret\nthe city\nsch wei\npra bha\nlil tunechi\ninter galactic\ncit ations\ncar thy\nbi ow\nvil lec\nut d\nt st\nshay ne\nshakh tar\nreson ates\nper col\nkat ana\nasi ap\nak ki\nshel ley\nke ston\njade ja\nhutch ison\ndisp ers\nbro mo\nrai ding\no dy\nn news\nmartingarri x\nlu g\ng lish\nver so\ntan tal\nom ag\no tak\nfree ing\nyam in\nun ser\nmulti family\nhaha ha\nh sm\nfi go\nf ma\nem bre\nab normal\nnu ig\nmall ya\nd pa\nbu i\nar no\namp shire\naf fin\nab ook\npel ican\nmee ks\nheathro wairport\nbhai jaan\nภĽ\nst are\nsar o\nmathe son\nmar ts\neucli d\nw sc\nseven ties\nse cy\ns not\nmotivational monday\nmar que\nkarl sson\nimit ate\nif bb\nhouseof cards\nba sta\nðŁĩ²ðŁĩ ¾\noc cul\nna vel\nmanag h\nic her\nent icing\ntw ente\ntrac ts\nroom ies\nlittle big\nel dor\nhumidi fier\ndepe che\nsu pp\nsi b\nse ong\nsafridi official\nnebra sk\nmake your\nhiro shi\nel khart\nedi ble\ndu t\nbarrow man\nbalo ch\nude my\nrwand an\nme ts\nfootb alls\nconun drum\nti u\np low\nnews stands\nconstell ations\nch n\nlu han\nkhu shi\nhope fuls\nconfe sses\nati ya\nw ms\nv ite\nsyn dro\nshameless ly\nkhloe kardashian\nhi sp\nhaban ero\ndescend ant\ncon scienti\nblack caps\nban dof\nwad sworth\nmuseu mo\nban king\nanu rag\nva ill\ntele health\n\\ \\\nw gc\nv aqu\nup cycling\nk sl\naw ol\nup cycle\nnick names\ndiver se\ncenti pede\nbr indu\nbur ying\nbi gger\nbedro ck\nre solving\nrang a\nor icon\nnikol ai\ngod in\nexcali bur\ncur tin\nchir anje\nab sa\nwh irl\nmonday blogs\nll ang\nbj ö\ntrip led\nre imagining\nlo ko\ngovern ment\ncraft smen\noste opor\nlo bo\nla vigne\ngrand view\nv rin\nv anna\ns net\nnomin al\nju ri\nes m\ncra dio\npr ingle\nkey chains\nimagined ragons\nig ned\nhill man\ne ases\ncatch ment\nðŁĮ ª\ntransc end\nqu ita\nno sql\nhav re\nðŁIJ £\nâľ ¿\nrani eri\npor ta\nyun nan\ny ac\ntam ale\nir t\ngar gan\ndis agreement\ncy st\nbusine ssc\nsten c\nsm f\nshino da\nqu adri\noff site\nliter ate\nchap ter\nboun cer\nasym metric\nwi den\nsch n\nj han\nak wa\nrheu mato\nle de\nin patient\nhe ide\nchec ker\ninf light\nim pover\nha res\nayush man\nðŁı «\nuter us\nfly catcher\ndu ques\nka st\njahan gir\ncon vo\nskin da\nsan sa\nqu im\npresu med\np ils\nnbat v\nmainst age\nbri xham\ns game\nrho dod\nqu ake\nper ci\nnever hillary\nlove birds\nloo kie\nla vi\nwes tham\npomer anian\nner o\nmontic ello\nconst itutes\nwarner bro\nsynth wave\nnr w\nfand ango\ncon d\ngrin dr\ndé cor\ncu h\ncome dies\nbir kin\nbap uji\nsmu dge\nscru ffy\npan cakeday\nove se\nni d\nli eve\nlaz iness\nimple ments\nad ri\nðŁį ŀ\nvi sts\nve u\nrisk ed\npro football\npless is\nmeso potam\nma ret\nlu pa\nkoto ko\nk ura\nclin ic\nam ends\nstate fb\ngoo ood\n<< <<\nâĢ¢ Ì\nth icc\nmc do\nhd fc\nconfigu red\nck in\nback ups\nthe mo\npol ska\ninsi sting\net su\nsis coming\nkin ect\nconce iv\nar ry\ngo heels\nvac ances\nto sca\nte sco\nsymboli zes\npnpp ro\npalla vi\nos born\nori ole\nk sen\ncro issants\n+ $\nthe man\nli gn\njump in\nhoo ligan\ndictat ors\nanal og\nwai kato\nha vi\ngis elle\nfin ches\nc di\nar at\ntra shed\nthe academy\nsteel book\nove rest\nhome ward\ngen ev\ndavid son\nti bur\nloo ker\nbrindu sab\ntra shy\nsl v\nillustr ation\nbread th\nba f\nri del\nexpre ssionist\nco pic\nclu s\nag chat\nwiscon sin\nsn ick\nsh s\nricket ts\nmlb network\nhan sel\ndari en\nchi val\nwh u\nsal as\nphi pps\ncor responding\nchicago bulls\nblat antly\nbil a\nbay watch\n" :"\nìĿ ĺ\nsu mb\nrous seau\np we\ned d\ndam ning\nbenaz ir\nbb mastop\nunlea shing\nhour glass\nbur nie\nbuck les\nticho pra\ntee thing\nper ri\npen der\ninf atu\nhe il\nalum ni\nॠĪ\nwh im\nver ge\nnewly weds\nan ach\nwo h\nsj su\nmi an\nlom bok\nj adi\nail ments\nft m\ncro quet\nblu ff\nfa iz\nchromo some\nqu t\niti onist\nma dera\nbreastcancer awareness\nb so\ntra pper\ntole do\no ys\nfe ats\nbt p\nbeli ve\na sey\nser t\nbor i\næ Ń\ntr ition\nnun n\nnbc thevoice\nform ers\ncav all\nðŁį µ\nl ingham\nhang zhou\nwe stand\ninju res\ngr rr\nfer managh\ncygn us\namster dam\nt ns\nspar row\nro logy\nray ner\npe onies\nlu ton\nhuff ington\nha si\npri es\nev ol\nds l\n. âģ£\nwins let\nparinee tichopra\nnur series\nes ri\nde mor\ncon texts\ncon rad\nðŁı» âĢįâĻĤï¸ı\nsp rays\npres suri\ndon or\n... ðŁĺĤ\ngru b\nder asach\nðŁĻ ĩ\nzvere v\nthi el\nslo e\nom w\nkha di\nic hel\npun ters\nf gs\ncommemor ated\nbrick ell\nbox eo\nschool house\non enote\nlu men\nl ye\nar ah\nalex ei\nab ingdon\nschol ast\nmagdal ene\nfor a\nfoot bridge\nembo died\nble e\nsm w\nren ton\nmad havan\nestim ating\nson of\ninthe world\nce ta\nasau da\nঠ¿\nvue js\nshar ad\nsh unt\no val\nlocal ity\nfirst ly\nde jav\nwhe elie\nno zzle\nno bu\nhan es\ncu ban\naj ram\ns radio\nreen actment\nplay grounds\nordn ance\nmu ggy\nhor i\ncol ouri\nb aka\nvi ber\nsle dge\nro si\noff aly\nim u\nende aring\nconcentr ations\nari th\nver me\nsouth sea\nsha ws\nsecond life\nre ac\nmob i\nla ff\nexxon mobil\ndomestic violence\ncondol ence\ncd g\nbi i\nab cd\nventurecap ital\nthra shing\nfox sports\nferra gamo\ndang al\nacapul co\nser rat\nuphol stered\nu gu\nro bs\nplay station\nforwar ding\nbeautiful pakistan\nx vg\ntit us\nsu se\nin sure\nhavas u\nflam mable\nðŁĴĽðŁĴļ ðŁĴĻðŁĴľ\nwh ine\ntuc son\ntame side\nsc f\nis so\nafl cio\ncal tech\ntheat lantic\ntaylor made\nq ot\npp i\nhy alur\nhect are\nde mir\nsu kho\nscrap booking\nsc ic\ns sport\nharmon izers\nfol lies\nche tti\nmed ellin\nken osha\nhal ts\nfuji film\nb hd\nepic enter\ncivil ity\nte ac\nrajam ouli\nho zier\nsummon ing\nmusic news\nlaugh lin\nfriday thoughts\nderasach asauda\ncauca sian\nz ha\ntotal ing\nsa rena\nratt lers\ngo se\nby ul\nb mc\nti st\nseri ousness\nkid dies\ngre mlins\ncon testing\në łĪ\nz g\nsnapp y\npud sey\nhor ton\nho ses\nder ozan\nsar ge\nplastic ity\nintercep ted\nðŁij ¬\ntre c\nmore lli\nher ron\ndj t\nðŁĴķðŁĴķ ðŁĴķðŁĴķ\nyear ning\nj hu\nhyacin th\nche stra\nya w\nsequ ential\nol ite\nmoo red\nt assie\nsop h\nis brill\ninsec tic\nfou ls\nab ook\nsli ver\ncripp led\ntransl ational\nshock ers\nshe er\nseman tic\nmumbai police\naccu ser\n? -\nthe official\nsam ara\njac into\nfal ken\nexpo sures\ncar repair\namand a\nðŁļ Ķ\ntwee tup\ntil ted\nro phy\nske et\npamp anga\nit take\neto bic\ndess in\naa shi\nus ga\nparis attacks\nate ch\nam ici\nscrob bler\nnintendo america\nmol son\nmag ne\nhaw es\nex pres\nâļ ĸï¸ı\nwe got\nscram bler\npra m\nfic tional\nelli eg\nðŁ§ ł\nsw tor\nquir k\nkarti k\ns rock\nni er\nland on\nhe dron\nber yl\n^__ ^\npin back\ndar ling\nc mon\nand sons\nal ca\nsevery thing\nram an\nra dy\npermac ulture\nbe vin\nsee australia\nman ga\nkau shal\nhalf term\nfet ching\ndivyan ka\nbureau cracy\nal ena\nstin i\nsho vel\nrho bh\nraz ak\nco schools\nperil ofafrica\no choa\ngi mp\nfacilit ators\nblueli vesmatter\nah ly\nadul ter\nthe art\nrevol ves\nphotogra phie\nbe happy\nahu e\ns are\nfc l\ncounsell or\nbio gas\navi base\nwh ys\nv ad\nsantor um\nles sen\ndon k\ncover girl\nbacolo d\nach en\n-__ -\nzir conia\nroo p\nbrack nell\nà± ģ\nmis spelled\nimperson ation\nhand soff\n( @_\nrou en\ncl er\nstabili ze\nst t\njun aid\ndefibrill ator\nshe skinda\nrox y\nra jar\npr ingles\nover alls\njin ks\nmchu gh\nfra u\nabig ail\nab adi\nro sco\nre ims\nho shi\nquig ley\npu rim\npolice uk\ncu pping\naro v\na state\nxero x\nnz l\nnoctur ne\nmortal kombat\nclou dexpo\nain tree\nhur lers\ne ffing\nbi athlon\nal os\nkin ky\nhut cherson\nbol l\nwood bury\ntart ar\nsav o\nq o\ncou ghlin\nciv ics\nblogger stribe\nther oux\nroyal rumble\nni bbles\nk ro\ngar fun\nwest jet\ntrack suit\nsyl van\nsof ten\nreg tech\ngoo oooo\nbio graphies\nbarnsley isbrill\nadam levine\nic f\nguit arists\ngal ing\ncour tois\nblack hawk\nta gh\nsa kes\nreligi ous\no er\nan j\ntable ware\nru de\nmy first\nmun itions\nah m\nðŁĩ«ðŁĩ ®\nsli ppin\nsharkn ado\ngab y\nearly biz\nðŁı ¡\nsw ad\nsorren to\nkoh ls\nkend ra\nhahahaha hahahaha\nd mr\n` )\né ĸ\nmel e\nanten nas\nwork ings\ni wa\nha fen\ndi ah\nthe k\nprophe t\nmc callum\nm re\ncripp ling\nate ment\nab omination\n! (:\nâĪ ŀ\nworld heritage\nun reliable\nt into\nsho gun\nque sta\nho tep\nb po\nal r\nsupple mental\nmm f\nit en\ndor n\ncon current\narsen ic\nmartin is\ncu sp\nðŁį ľ\nza hid\nis fun\nas ahi\nðŁĨ ļ\nwal kie\nspo d\nnatural hair\nblader unner\nan se\nit ory\ninfe station\ngover ned\ndic e\ncusto dian\nsulli van\nr ong\nn dam\nhi z\nd ba\nteen choice\nsid harth\nsh ami\nmagdal ena\njohn lennon\nf nb\nen rol\ncon form\nunh inged\nsp ay\nflat ts\ndar shan\nto ver\nsi ang\none er\nmo ga\nlead ed\nef ur\ndin burgh\nmezz anine\nangeli que\ne fl\nba ar\nyou ra\nnbc washington\net u\ndisco vern\ndimini shed\nten acious\nprecar ious\nlo tu\nkel e\nj illo\ngag reader\nbre s\nbal ding\nu is\nright now\nrichi e\neuro maidan\ndwar a\ncur v\nchann elling\nben zo\nunreal engine\nu shu\nn mr\nlet ts\nis r\nfergu son\nelev ations\ndream works\ntape red\nruff alo\npen ne\nful ton\ndown trend\ndepre ssive\nactu al\nvijaysethu pathi\nth monthsary\nfla p\nde human\nbol she\na sta\nuchi ha\nsha b\nscen ic\npla gi\nlan sbury\n몬 ìĬ¤íĥĢ\nv ri\nun interrupted\nsw ami\nconcre te\nworld mentalhealthday\nwork hard\ntru ms\nser if\npy on\nos x\noh t\nle dit\nla gs\ngraci e\nðŁĻ ī\nsummer camp\nkaran patel\nav p\nãĢ į\nweather nation\nthe division\nmiser ables\nliverpool fc\nking sc\nju ba\nholocau st\nco eli\nade y\nâľĮ âľĮ\nun marked\nswag gy\nfinger prints\nyel lows\nvo m\nsm th\nri ser\non ge\nno tions\nvac y\ntn wx\nsh ala\nnc state\nleav eno\nec ke\ndutch man\ncor o\nbang ed\nte ver\nrout inely\nnew schannel\nhec tor\ng mp\nfo z\ncor tina\nw ce\nsu zy\nmotor spdwy\nma ye\nzimbabwe an\nsa ip\nhead ingley\nglit tery\nestabli shes\nes cotland\nander lecht\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥\nwood man\nri az\nkritis anon\nko dak\nham lets\nha c\nflee twood\nantic or\nz it\nyar n\ntu t\ntin ashe\nmand ed\ndam m\nd fl\ncomfor ter\nbicy cli\nu il\nsucce eds\npat ernity\nno ds\ncu sco\naband oning\nwhite ley\nweather man\nshi h\nmarau ders\nhilli ard\ndi rek\nchor ale\nali c\nðŁİī ðŁİīðŁİīðŁİī\nmakeaw ish\nmaha thir\nloch te\ndro plets\ncob ham\ncle matis\nbesie ged\npan kaj\nillustr ators\nco burn\naffl iction\ntravel o\nruff led\nnag aland\ndoc trin\nbul acan\naqu ap\nme de\nh sr\ndu bbing\ncat z\nready to\nfin alizing\ne pping\ndefun ct\nbonifac io\nagu as\nzo ic\ntaxider my\npra dhan\nhar ass\ngrad school\ncounter tops\nclt motorspdwy\n-- @\nsecre taries\nå ĩ\nu pped\nser ap\npel t\nid an\nhumili ated\nðŁİĦ ðŁİħ\nðŁ¤£ðŁ¤£ ðŁ¤£ðŁ¤£\npsycho logists\nmil le\nextraterre strial\nemirates facup\nchatter jee\nbre con\nt gs\npan el\nmen ag\nig le\ncb se\nron ic\nguide book\nbystand er\nvalu ing\nnko tb\nmen sah\ngo cards\nexten der\ner bil\ndraw string\ndemo day\npho t\nfe red\nchic har\nbeth une\nbe m\nmol y\nloc ke\nexcur sions\ndata set\nbre ds\nab aba\nðŁij £\nstab s\nscrip ting\npar m\npaper less\nmu zi\nkra sno\ncle ft\naccu sation\nmon oc\ngre wal\ne dia\ncb x\ncal ender\nbesti val\nv ying\nuph olds\nsa oir\nme tic\nchâ teau\nalle gri\nyo gy\ntro is\nmar ley\ng fuel\nenglish heritage\nemb ed\ncounter top\nba chi\n:- )\nØ ¶\nr sac\nmill eni\nko komo\ndeduc tible\nam ia\nyam aha\ntotal ed\nth war\np br\nmor den\nmo yne\nk attu\ncali ente\ntra ve\nth ayer\nscoo t\nmc crack\ngu bati\ngas s\nfel ices\nbac a\nun fairly\ntrust the\nsb m\nsadiq khan\npri mates\ngen i\n/ "\nwou lda\nun well\nrac quet\npa than\nme wx\nhol comb\nhero academia\nfro do\neng vind\nbet fred\nãģ £\nwest end\nsch ke\nrat at\nles worth\nkashmir is\njuxta position\nje annie\ngreen day\ng bs\nf nd\ntemper ate\nphiladel phi\nfé in\neye hinakhan\nate k\nðŁĺį ðŁĴĻ\nv awx\nj col\ner d\naj u\nadirond acks\ny na\ntra shers\nsuper powers\nre funds\nox on\nmu rah\nllan o\naw ana\nsly ther\nkh on\ncast ello\nblo ch\nาภĻ\nup t\nilla warra\ngram mat\neintra cht\nas aram\nsprink lers\nlas se\nhaul s\nchry san\ncas ks\nठª\nwoo jin\nther mo\noppos ites\nle ttes\nheath en\ngoal less\ngi ga\nesper anza\nanzac day\nac ul\n «\nte sol\nobas anjo\nfac es\nsw w\nstat en\naz io\nshor n\nradi on\nmaiden head\ninspec ts\nri ordan\njen son\ngb h\nek u\nalbi on\nta ffy\nslu r\nrit er\nnouri shment\nmot ley\nlife guards\nfrei burg\ncent ro\nbir u\nbb ci\naj english\nswee tt\nper shing\nnew haven\nake up\nabru zzo\nthe b\nsig ur\nremember ing\nram pal\nqu eri\nconven ed\nbraz ak\nalco holism\nॠĤ\nfirec racker\ndat emy\ndar o\nðŁį Ń\njunior bachchan\ndis likes\naf oot\nt ff\ni one\ndeer field\ncory booker\npull back\nmail bag\nj emma\ndaily photo\ncur ating\ntourmal ine\npupp ete\npots dam\nnis ar\nmadi gan\nbas set\nun intentionally\ntil apia\nsmo s\nnaji brazak\nxy z\nsqu amish\nproduc thunt\nni z\nellieg oulding\nch r\nè ¶\nun followed\nheu er\nwo ww\nun prepared\npe els\nmoul ding\nmar le\nbellator mma\nar rays\nz uk\nsocial justice\nri ma\nent angled\nabsin the\n⼠°\nthro ats\ntheat r\nsligh test\nshame on\nnotmy president\nhumanright sday\n. :)\nðŁĺ»ðŁĺ» ðŁĺ»\nyour world\ntestimoni als\nf br\ncumbri aweather\n| |\nspr outing\nsan gre\nroa sts\nrespect fully\nma el\nl x\nkan ata\nk ells\ndam nit\nspur geon\npitt man\nk we\ngeopol itics\ndec can\nchri sc\nvenkate sh\nba ad\nplun kett\nled zeppelin\nlang don\ngilli gan\nfur sday\nbu gg\nblogging gals\nu lit\nsab r\nivan kat\ngl ene\ncd f\nam m\nam ble\nâľĬ ðŁı»\nvote snp\nstar gaz\ncma awards\nalder shot\nvv v\nlent en\nax is\ntt r\nthi bo\nsunny side\npulw ama\njan us\nðŁİ ·\ntru er\nshel fie\npas ar\nlowest oft\ngu ac\ngo diva\nextraordin arily\ncountry man\nview ership\nmag ma\ngen g\nqu into\nm fl\ngh d\ncr p\nclass ico\nsho veling\nse same\nre at\ned ining\nboyn ton\nbea sties\nwest life\ntrous er\nter i\nmyo gi\nmin ced\ninde struc\ndomin ican\nê ´\nt sai\nson n\nsm in\njeff gordon\ncypri ot\ncast ro\nboy with\nameric orps\nac al\nðŁĴ ¢\npa e\ni shi\ngau rav\nevangel ism\ne ic\ncur ate\nti sdale\nsynth pop\nspaw ning\nrole playing\nnational ities\nhormon al\nre constructed\ng ne\ned way\ndom i\ndoc u\n* :\nshre w\nseth our\nout day\nmor ia\nma ther\nlatt es\nka it\nk ri\njolli bee\ndi or\ndefe ctive\nal bin\nadri ano\n: (((\nu cha\nserv ings\nil los\ngreen brier\ndye ing\ncongr atz\nmoon stone\nexi les\nbell ini\nadditive manufacturing\ntin ent\nster dam\nsar kar\nre lin\nov c\no del\nhat ties\nfeel s\ncolla ges\nas sign\nnik kei\nmy r\nminim ally\nbel ting\nØ ³\nstat ely\nmac pherson\nlob ster\nhus band\nca po\nbigh orn\nç ão\nver tical\nsten berg\nlocomo tives\nstocki st\nnorman die\nmo yer\nhomec are\nhassel blad\ndad dies\ncal laway\nai x\ntar te\ns gs\npr une\nner os\nmush y\nmar go\nbel ton\nbag ley\nai e\nyoun is\ntom cruise\nswaz iland\nsamar itans\nnat ur\nmi ata\nla paro\nanti bacterial\nu we\nori on\nloscab os\nloc ates\nig p\ngi ff\nplun ges\nmaj ldr\nha ba\nfac ul\ncran ky\nair drie\nag ron\nr fk\np vd\nhey ward\ndat eline\nbo ko\nt ma\nsin ce\nobjec tion\nharmon ious\ngren ache\nclash of\n)) )))\nym ents\nsi mb\nridd ell\nrb ny\nmur da\nmay hew\nton in\nswal lowing\nrand wick\nob c\nig non\nf ann\nbegg ar\nab q\nsuppor ting\nse go\nplate let\nl chf\nØ§Ø ³\nwi pers\nweb toon\nout cry\nbio l\nurban decay\ntaran tula\nna uru\nmegh alaya\nmedit ating\nme ren\nlett ings\nhol born\nðŁĴĻ #\ntrish trashers\nry lan\nn ne\nmand ated\nfull ness\nfield trip\nchi sel\nbuil dup\nty ra\nmade with\nha ile\nforgott en\ndan gote\nwomen smar\nti mid\nski m\nsi kor\nrig or\nreig ate\npu tty\nillu m\nfat ale\nbra sile\nbass fishing\naf a\nâļ ĵ\nsu prise\nn endor\nhair dressing\ncd l\nbe cks\nbart ley\nwit tle\ntang a\nl acked\nfox business\nducho vny\nday time\naudu bon\nthink able\nse marang\nroman ces\nnorth umb\nnl cs\nio e\nbt sport\nste dd\npa b\nshr oud\nred line\npla ge\np ell\nlip ton\nachiev able\ntake over\nru ci\no vr\nmide ast\njun tos\namo ah\nve tting\nv eng\nti my\nnew shour\nle ste\nindu ce\nhard waj\nde se\nba idu\nmy cleanindia\nleg alized\nam monia\nweb by\nun tuk\nstone ware\nap id\nsol sk\nsatis factory\nhead master\nfulham fc\nchi dam\nbere tta\nðŁĹ »\nkil len\nearly bird\naway days\nni ve\nnarr ation\nis b\neter nal\ntylero akley\ntri g\nscoun tdown\nol en\nmyogi adityanath\nindi atoday\nf news\nengul fed\nth aa\nsubsequ ently\nmusic app\nconstantin ople\nsta hl\nrecu er\nem m\nu om\nstone bwo\nsouth wales\nmi zu\njoy stick\nhydro electric\nhat trick\nvivo ree\nayr ton\nðŁĺħ ðŁĺħðŁĺħ\nu sch\nk ham\nd proud\nðŁĩ®ðŁĩ ª\nton io\nlal u\nkil os\nhel las\ngle aming\nface of\neast coast\nthe truth\nston ers\nr gv\njo liet\ne spar\nal cs\n@ âĢ¦\nsh ingle\nenchil adas\ncast ile\nbio fuels\nam il\nal pin\nr ile\nmu da\nchri so\naw ad\nto b\nstor mont\nmat tresses\nhel o\nhee led\ndul lah\nchom p\nchic os\nbis que\nlovely z\ngali lee\nco va\nvir k\nsubli minal\nphosp horus\nl mu\nfootb alling\ndrogh eda\ncro cus\nmadhy apra\ngraci ously\ngen ova\nex pos\ncruiser weight\nbi ken\naf amily\naccr ington\ntt w\nted dies\nspon taneously\nsom o\nsla sh\nben et\nafri que\nvand al\nun till\ntor ius\nstadi um\nnnam di\nmigr ant\nman na\nll b\nkar oo\nchi les\ncave man\nðŁı³ï¸ıâĢį ðŁĮĪ\nseparati st\nron pa\npa cha\noper a\nmacau lay\nfrank fort\nfr ills\nev ade\naud iting\ntheli on\npar take\nmck ellen\nman is\nka yo\ndee pak\ncas sp\nzam be\nsunday brunch\nra sa\nqui p\nadhe rence\ns wed\nle mieux\nstu mp\nlitt les\nevalu ations\namu let\nðŁĺĬ ðŁĺį\nn ch\nðŁĴ¤ ðŁĴ¤\nâĻ¥ï¸ı âĻ¥ï¸ı\nwere wolves\nste ers\nscar face\npar tied\nde su\ncreepi est\ncontroversi es\nadri ft\nsu mer\nsou p\nri go\nlet stalk\nirrit ated\ngrou pp\ncarni vorous\nautonom ous\nau e\nal pes\nt fa\nm gb\nincan descent\nglo ve\ncant ando\ntas man\nsab re\nliveon komo\nkapam ilya\nfang s\ndi lem\ndeb bi\nbah ra\nmoha bb\ng mg\ng da\nke xp\nbal an\nux bridge\nt of\nsome things\nkeigh ley\nembarrass yourbestfriend\ncho ke\nnab s\nam mar\nadjec tive\nðŁĴĺ ðŁĴĺðŁĴĺ\nvol l\npin to\nnhs england\nkrit i\nit age\ncollec tor\nblack twitter\nb more\nab and\nsher i\nnorth west\nmtve ma\nkel so\niz ard\nbur gos\nãĤ °\nwet test\nma sti\ni stan\ntri al\nth enight\npurpose ful\noff ical\nbbmastop social\nar g\nvent ured\nvas co\nmale ficent\nhar k\nbarre tt\nre adies\nquantic o\njen ks\ncentr alized\nye m\nun tapped\nun m\nn bas\nivankat rump\ningl ory\nhaare tz\nul cers\nsky nyrd\nru ms\npre cast\nmd w\nhorticul tural\ngeel ong\negg nog\ncataly sts\ny all\nwoo ooo\nto bo\nshru gs\nev in\nser mons\nnau tica\nit in\nemb a\ncoloni al\nbow er\nblin king\nbbcc in\nthin ning\nstu mped\nsh awar\npsycho therapy\no ssa\ndolce gabbana\nbra zen\n: .\nstur m\nribe iro\nnbc days\nzz zzz\nwozni acki\nwith love\nmag ick\nid l\nfunc tion\ncar li\nai ya\nsp its\nsn fl\nos m\nmo ya\nhi jack\ngreat britain\na vey\nâĸ¬âĸ¬ âĸ¬âĸ¬\nu ea\nstom y\nquidd itch\npine apples\nspoon ie\nsch rader\nram blers\nknuck le\ngra ze\ndurand uran\nd har\nâĻ¥âĻ¥ âĻ¥âĻ¥\npatron age\nnieu ws\nmee ster\nij n\ni is\nconstruc ts\nðŁį ¯\ntaap see\ndeath ly\nback door\naero sol\nwh c\nt ss\nof honor\nbring it\nathe dral\nate c\nðŁĮ ķ\nv us\ntokio hotel\nspeck led\nscon i\nsa under\nra be\nfairy tales\ne is\nav ers\nab rupt\nðŁĶ ŀ\numb c\nsu ren\npfi zer\nlove yourself\nin uk\nger son\nen ish\nthe archers\nte pe\nsolom on\nsign ite\ns new\nrav aged\nra ul\nhon ky\nci b\nchester ton\ntv d\nneu tro\nn lt\nmusth ave\nlu vs\nhan lon\ncoinci dentally\næ ²\nprojec ting\nh sa\ndigiti zed\ndi min\nchilli wack\nkick sonfire\nid ad\nharaju ku\ndu eling\ndiscre tion\nten ny\nprogno sis\npitch fork\nle vee\nd hy\nco ven\nco pic\nsan disk\nilook like\nbe sar\nar ind\ntry on\nnor way\nlevit t\neun ice\nw pa\nscan me\nquin n\nmet z\nland au\nin wood\ner to\ncruis ers\ncraw led\nchap in\ncar nit\nangel is\nfl an\nchel t\nbri l\nna in\nintegr ative\nhere sy\nd app\nbn pp\nut k\nstam os\nsco de\npen ta\nname less\nka is\nin elli\nill ating\nsa ina\nrenov ating\nnut anix\ngrand child\nbo keh\nbat ch\nb ure\napproxim ate\n몬ìĬ¤íĥĢ ìĹijìĬ¤\nzam bian\nfallout boy\natl traffic\nun mistak\no ink\nje k\nik amal\nemin ence\nwor ding\nunimagin able\nmock ery\nhy man\nhand er\ngo onies\nfranch ises\ncollabor ates\nshe ik\nimmuni zation\nfre es\nayatol lah\nas on\nun abridged\nrec iting\njen winget\ndu ly\n& âĢ¦\nstra pless\nhan ey\nchev alier\nber th\nansel m\nacet ate\nwater park\nvio let\ns mann\ns illi\nof t\nmovi enight\ndo reen\ncollabor atively\nìŀ IJ\nun confirmed\nrubi k\nru di\nny knicks\nlonge xposure\nk ur\nvitam in\ntra x\nmegapix el\nlat robe\nin deli\nhoo oo\ndream hack\ndive st\ndeng an\ncover up\ncomb ing\ncolum bu\nwil kerson\nlo la\nflu shed\nfi gue\ndou in\ncontin ental\ncapit alize\nbaj wa\nwind power\nsha e\nse asi\nplan ks\npi i\nn cbn\nextin ction\nÄŁ an\ntot p\nrex po\noc tu\nmo k\nclo t\npick ford\nosteopor osis\nm alian\nintelli gent\ndimen sion\nbeetle juice\nabre u\nyo jana\ntouri sme\nscat ter\nro per\npue de\nmar tell\nhe sse\nz ags\nta ch\nsen schumer\nmontre al\ncou ghs\nab usa\nwilli an\nsur in\nstain ed\nnorth wood\nlil ith\ngun ner\nab ay\nsen der\ncorp ses\nu go\nhouse gop\nstro m\nli ddell\nki ki\ndir k\n( {}\nrela y\nma ire\ncray fish\nse da\nid h\nboy co\nðŁĻĪ ðŁĺĤ\nsam son\npost pone\nn ra\nes n\nde wan\nber nabe\nan thrac\nìķĦ ìĿ´\nunder mining\nsm v\ngior dano\ncor ne\nca stig\nbal moral\npeder sen\npap s\ndu e\nad here\nvanc ity\nta za\nt ada\nle if\nincre mental\nhouse full\nsecre ts\neth am\nex es\nr itic\nketo genic\nkerry washington\nkean ure\ndu go\ndra b\ncollege gameday\nco gni\nac ap\nuc sb\nnab il\ncorri gan\nal ain\nsh ale\ns ws\nim ti\nbre ve\nar ai\npc gs\nkaw i\nhar ford\ngerry mand\ncasu als\nan ish\nth ap\nlo aves\ngo alies\ncle e\npash tun\nven mo\nvaul ted\nshi var\nre gur\nplum me\nfun ders\nt sch\nrapp or\nr ten\nple t\ndeb ilit\nchil ders\nblack ness\nblack heath\naz im\nanthro pom\nalco hol\nwednesday thoughts\nwan ker\nlon goria\nne spresso\nholland aise\nartist es\nðŁij ¦\nsingapore an\nmiam is\nent or\nd lp\nbe ero\nak ka\nunited kingdom\nunic orn\nstan k\nshi k\npres sured\nperson of\nimpre ssing\ngrat uit\ngrac ia\ngang es\ndetroit redwings\ncentury link\ninter collegiate\nboo ed\nshi ki\nopti ma\nonthe blog\nmargher ita\nling us\nen bc\ndon i\nyi fan\nr ba\nfit test\ndor ff\ndep tford\ndd g\nwoodland trust\nj cu\ner skine\ndab o\nre tr\npe eta\ninterpre tive\ncomman dos\nson o\nru ffles\nbi bs\nmercuri al\nlo pe\ngrim shaw\nfairy tail\nd ood\ncon nacht\nbot anist\nyam ato\nwal ton\ntri ke\nsh ards\nmotor rad\nmach u\nfa had\ndemon eti\nde h\ncy ril\nch roma\nbla zer\nwau kee\nthe fan\nsj s\nsi ro\nsch iller\nplay wrights\ngeopol itical\ncb l\nc mb\nbrick yard\nëĤ ¨\nsul ts\npolicy makers\nmarx ism\nel paso\ndil ly\nat tainment\nwatch ing\ninser ted\nbl ick\nas pi\nof course\nla ois\na sti\nju illet\nhar ness\nenrol ment\nðŁĻı ðŁı¿\nðŁijĢ ðŁijĢ\nhon ne\nevo kes\ncuri ous\nclo thes\ntu lum\nmo x\nlo fc\nka os\ngun point\ncarav an\nboo boo\ntran scrip\npollin ation\ngas m\nden ison\ncam e\nãĥ ģ\nobsc ur\nliter ary\ng ati\ndisneyland paris\nag ames\nmn p\nmitt romney\nmaha dev\nhang a\nðŁ¤ ¬\npre ordered\nmj fam\nku al\nin day\nduck ling\ndiv yas\nbo v\naf tere\n" ),\nwo bbly\ntransi stor\nthom son\nsc l\nl ach\ngur ley\nfu tur\ndoor bell\ncau casus\nile ana\ngeorge town\nbe ste\nðŁļ ģ\nðŁĺĦ ðŁĺĦ\nst ence\ns ü\nor ti\nmale c\nislam ists\nheart throb\ncrucifi xion\nali ster\nwiz ki\ncole en\napp alled\nsk am\nsh indi\nnightw ing\nfix ation\ntri vand\nstir ling\nsing ham\nsh able\nfro wn\ncu ses\nano inted\ntar yn\npresu me\nnu anced\nmeck len\nku bo\nhl pf\nfuner als\nflo at\nwh edon\ntrans fusion\nfc ps\naf u\nsubor din\nshe khar\nseaof thieves\nplenti ful\npente costal\npa sig\nbeat le\nsqu ires\nconge sted\nsom brero\nring ling\nrein hardt\nis love\nbal last\nannapur na\nal ban\n/ :\nvi ent\ntit ties\ngro oms\ndu xford\ndan vers\nbab ar\nack erman\nx factor\nv ms\nuniq lo\nsporting kc\npen al\nover run\nne arer\nnad er\nlife hack\nko ku\ncr pf\nvehic le\nun ners\nserv o\nn ta\ni wan\nh md\nemp tying\nde kker\nchu bb\nback yard\nnews flash\nn st\nley ball\nlam bing\njamie son\nfolk sy\ncram med\npolyu re\nmpu malanga\nkarnat ak\nef er\nw has\nv age\ntill is\nstreet art\nnit rate\nnas s\ngues thouse\nblan ken\nsave butterflies\nphoto bombing\npe bble\nnbc sports\nke mb\njessi ej\nhuman ism\nge ki\nern yo\ndancing abc\nall ard\nal ford\nab r\nshin hye\nrepent ance\nlym pho\ndon c\ndi ol\nno l\nठ¨\nwork book\nvincen zo\nspra yer\nmental illness\nby te\nðŁĶ °\nsel var\npuri fy\nmin zy\nce ci\ncbc news\nâĺ ł\nwin tery\ntoronto star\ngar ret\ncassp ernyo\natl é\nal can\none more\nhist fic\nhat ches\nha se\ngy ro\ngamb hir\nerik sen\nafore ver\nyl o\nvalu ations\nsel tzer\nnus ra\nðŁı ¹\nplagiar ism\nper la\nkun st\njon athon\ninqui rer\nblack face\ntri e\npas a\njoh no\nchicag oland\nchi al\nag al\ntrin ket\nfran tic\ndin on\ncancell ations\nun be\nsch me\npromin ence\no stro\ncom ical\ne ads\nweav ers\nantwer pen\ntri an\nec ole\nbil bo\nb su\ncospla ys\nconven e\ncm te\nbarric ades\namazing phil\n) ]\ntat i\nsh app\nscis sor\nnorth ridge\nnazion ale\ngro cer\neat more\nea ves\nde sley\nbbc weather\nb vi\nðŁijıðŁı¼ ðŁijıðŁı¼ðŁijıðŁı¼\nyouth day\nthur rock\ntensor flow\nman z\nkatow ice\nhigh life\ndeci pher\npig ments\nmu mma\nbu f\namar in\ntrouble shooting\nsnap deal\nol ar\njeffgordon web\ndog wood\nkat ya\nitsenrique gil\nbigo ts\nðŁļ ²\nker now\njay alali\nin separable\nx files\nwar at\nmu z\nmo ped\nbreak throughs\nbran ching\nbouti ques\nword sof\nwi st\ntren ded\nren aming\nr hom\nmaced onian\nkeanure eves\napproach able\ny bridge\nve il\nty l\ntamannaah speaks\nsti f\nphoto friday\ne ir\ncav ities\nproce eding\npix ies\nkey hole\neeee eee\nultimat um\nstu ffer\nmar sala\ngroo vy\ndal ston\nðŁıĮ ï¸ı\nvin ay\nlat inas\nga is\nfo les\nbe yer\napp al\nth ales\nsoun dof\nmoderni ze\nligu ria\njav a\ncarib bean\naa yog\nwiki media\nsocio economic\nk cr\nim raina\nhygi enic\nthe kid\nstret cher\nscot ch\npan cho\noo g\nnat west\nnam ur\nðŁĴ ĩ\nre shuffle\no a\ngo m\nes f\ndill inger\nbu sses\nbac cal\nsa al\nperson ali\nn ought\nlovers day\nkew gardens\nge mini\ndu x\nbud den\nblood line\nbi les\nair quality\nìĤ¬ë ŀ\nâĸ ²\nrazor back\nlondonis lovinit\nkonstant in\nk vue\nima h\n: ,)\nspu ds\nskyl ine\nlux uri\nloy alist\nhorn by\ndeb t\ncharle ston\nmore head\nhealth day\ness endon\nef m\ncow es\ntimm y\noxid ation\ninvest ment\ninthe city\ngeo g\nale gre\nðŁħ °ï¸ı\nwaf er\nri bu\nm tsu\nfab ulous\nzyn ski\nva inglory\nunder whel\nri bble\nmen sa\nkim ber\ninsol vency\ngen ous\nck d\nperson as\nna e\niv ory\ndagen ham\nra o\nmouth piece\nmor ne\nle mmon\ngl ace\netsy social\nchiranje evi\ntv series\nthe u\nsait ama\nging rich\nflag day\nb snl\nau ra\nao i\nhol brook\ngreen ish\nconsult ative\nwin drush\nwater side\nn ff\nlovel iness\nlive in\nfor heroes\nðŁĶ ±\nvo i\np ne\nnol i\nl all\nhorse hour\nbre whouse\nbe mid\npd p\nfron ten\nfri eze\nar acing\næ ł\nsub tle\nsm ac\nah san\nts v\nrestric ting\nli ano\nis mail\nfianc ée\nad oo\nyn olds\npret ended\nom yo\nn aca\nconvic ts\nbattle ofthe\nðŁĴĥ ðŁı½\nre vo\nkil lah\njad hav\ngree ley\nfc cc\nev in\ny oooo\nte al\nshiv raj\nrival ries\nrel ational\npos ite\nnct smtown\nfi at\nanam bra\naerop lane\n# /\nðŁĩ¹ðŁĩ Ń\nrein forcing\njust sayin\nincub ation\nde u\n( ...)\nvern on\nnew swire\nlan ge\nhypo critical\nac ity\nabu zz\nstar news\nrhino ceros\nrais ing\npm qs\npin as\nne cn\nmtv lak\nharry potter\natt is\nsof as\npatho logists\noc to\nmont mar\nhah ha\nfar aday\nar murugadoss\nappell ate\nsaku ra\nimperson ator\ner go\ndog sare\nbour go\ntalis man\npon dic\nil legal\nwork flows\nthn ks\nsm itty\nskin care\npoin set\npic spam\nman soor\nexac to\nech lin\nas at\nalleg ory\ny asha\nu mc\nre kind\nrat an\npu ck\nip ur\nhumble isd\nchrist o\nbel tran\naz a\nab bi\nvi sto\nshin hwa\nplayo ff\npa ve\nhun an\nbush nell\n) !!!\nðŁĺļ ðŁĺļ\nst win\nplace tobe\nnon violent\nlon go\nkal ing\ngeo engineering\naudit ors\nè ¡\nuof l\ntal ker\ns borough\npatho logical\nor as\nelm wood\nbur l\nbear den\nb hat\nrelent lessly\nmen om\nj alil\ne bene\naugu in\nmen tos\nim d\nfur sona\nras mussen\nran ting\nkas ab\nk lang\nide k\ndy nasty\ncbs thismorning\nmt bos\nðŁĺ ½\nre worked\nmali bu\nlo ban\nla zar\nhost els\ndo in\ndef ra\nbreit ling\nbis on\nan r\nsa want\nquin nipi\nmcar thur\nally son\naler ted\ny lang\ntr ul\nron ald\npro ds\nmaster son\nhel io\nget the\nfire emblem\ncup final\nbre st\nðŁij Ł\ny aaa\nvan quish\ntrack ers\nrosal ind\npersu asive\nnew found\ng sk\nel ke\ndev op\nci ar\nbuck le\naly tics\nyah ya\nty me\nthe dailysketch\nth aan\npersonof interest\ne bel\natlu td\nÄ «\ntson ga\nscari er\nrise and\npass able\npa than\nlib crib\nim g\nexecu tion\nyal it\nre port\nop ie\ndun geness\ndream home\nne ssa\nmonu ment\nmill enium\ndani sh\nbert son\né Ļ\nw impy\nspanish gp\nslic ing\nn oun\nla borers\nji hyo\nf st\ndad dario\nbang or\n\' ."\npra ha\nmau de\njacqu ard\nhi ra\ncook books\nth wart\nsor riso\nme din\ninfe rence\ngr inning\ncor du\nano inting\níĺ Ħ\nval do\nss oc\nscreen print\ns ree\nprivati zation\nnational poetryday\nhealthand safety\ner ner\nthe five\ntechnic a\nrun es\nper in\ndon ahue\nbra c\nber nab\nwizki dayo\nra bat\npyon gyang\nlion el\nfi da\ncla us\nbay are\naldub the\nðŁĴİ ðŁĴİ\nsuz uk\nretro grade\nmoun ta\nma der\nher ding\nðŁĶ ®\nsoun der\ns forum\ngre tel\nಠ¨\npa the\nedg baston\ndo h\nbob bie\nðŁĴĶ ðŁĴĶ\nse alife\ns ree\nmu gg\nmonte rey\nno am\nmuch os\nlu red\nt dc\nsuperstar rajini\nspal ace\nshow us\ni go\nfaw ad\nwa j\nsmash bro\njacob sen\ndvor ak\nregre tted\nral f\nno b\nlobby ist\nisai ah\netobic oke\nbrant ford\nbon ey\nbeliev able\nagre en\nðŁĩµ ðŁĩ·\nsky fall\nshilpa shinde\nre spl\nrail road\npau k\nfun inthe\nfi est\nco cc\ncho ck\nbeli ke\nalli e\nqu at\npublic schools\nmar o\nh ing\ngloss ary\nflo tilla\nfigu eroa\nf illies\nbirth right\nbar olo\nam ag\né Ģ\ntab itha\nra shi\npu tra\ncom or\nky un\nil u\ncad re\nbelle w\nab ort\nsp fl\nnick carter\nnaw ab\njol t\nchristma sin\ncarr illo\naffirm ations\n ª\nyipp ee\nas sail\nà° °\nske leton\nriver walk\nper l\nnin ado\nmis understanding\nhunting ton\nholly woo\nbel lows\n¨ ï¸ı\nunru ly\nthe weather\nsw ar\nru stic\nreggae ton\nmy ungsoo\nmuske gon\nfili gree\nczech republic\nch ch\nun thinkable\nvaccin ations\nswasti ka\nsol vent\nipkk nd\nhel ve\naldu beb\nraun er\npho en\njo ya\ntwi st\ntrade marks\nspor tive\nscor cher\nrazor backs\nra ik\ninfiltr ation\nbiow are\narchi vist\nak ita\nç¥ ŀ\nmeek mill\nkn ap\ncag ayan\nwh id\ntu ll\nsri devi\nmis fit\nma v\nimacele b\nfo ils\ncc b\nbren don\nbic ep\nal ittle\nthr ice\nreg alia\nra bo\npain less\noverest im\nmarin ara\nklit schko\nig f\nhr inger\ngu st\ncaptain swan\nar ay\nðŁİ º\ná il\nu day\nco bras\ncaitrion am\nu ig\nhard top\neci g\nbach mann\nk wara\neric h\nde bs\ncontra sts\nturbo charged\nrich man\nprovo ke\nlong mire\ndilem mas\nthe blue\nme di\nley park\nfam s\ne sport\nbi ko\nbar ium\naveng ed\nallar dyce\naar hus\nbetter call\nking sbury\ngn ant\nfriendship day\nsubstan ti\nsch ip\npep tides\nmate en\nاÙĦ س\ntur alism\nst ang\nra aj\npeace keepers\nli ana\nexc ites\nvaz quez\nus gp\ntravel ing\npill ar\ngu h\ncompeten cies\nar tur\nvo lo\njer ome\ndi adel\nden ny\nav fcofficial\nu dd\nmo dy\nmini str\nge min\ncryp tonews\nchitec ture\nz infan\nsuper fast\nst ace\nsaj id\nkra zy\nðŁĵ Ģ\nphilipp ians\nnis a\nbook sellers\nÄ ģ\nvictor ian\nthe body\nsu pt\nsalmon ella\nrat ty\njo gger\nfu biz\ncree ks\nbled soe\nad ell\nzinfan del\ntrape ze\nsi z\nsho eing\nle pro\nja vid\ncustom ed\nsa ath\nquar antine\nmis sk\ndetri mental\nchampag ne\nbi k\n; _;\nwa f\ntiger woods\nstar burst\nrach man\nok ada\nnew day\nly ca\nder rick\nanec dotes\nstemc ells\npas cal\nhu sain\nclai borne\nbol son\napar te\nai pac\nwi k\nw ch\nstimul ates\nmorpho logy\nlogi stic\nindom itable\ngal oo\ncomm end\nchaw la\n\' (\ntru jillo\nlown des\nlog ics\nliber ating\nas am\narrive alive\naro ons\nа н\nshepher d\np bc\nli po\ner l\ncitic bs\ncc sd\ncaitrionam balfe\nbr fc\nse ki\nit out\nish q\ndil do\nati k\namar inder\ntal kie\nstate hood\nca be\nbos well\nðŁļ ij\nwer th\nva al\nsky ping\near phone\ndilig ently\nco chin\nap hi\nam ente\ntimesof israel\nsel assie\nroad runner\nok ay\nny der\nni ven\nla ir\nce ased\ncategori zed\nðŁĴ Ĩ\nu fo\ntele scopes\nom ania\ncam ino\nb illa\naw ning\nĴ ï¸ı\nðŁIJ ħ\nðŁįķ ðŁįķ\nwom ans\nre iner\npeace building\nneu ter\ndj ia\ncyber bullying\ncs x\nconstitu te\nb the\nzam bo\non ta\ncal loway\nsteel head\none team\nini ans\ni zzo\nabor ted\nse to\nmaldon ado\ngood day\nfil mo\nbre ck\nhang outs\ngibr an\nz sa\nwhit more\nstru p\nshort story\njen i\nenergi zing\ncon vening\ncheck mate\nbatt en\namazon in\nalfal fa\nstar ks\nq v\nma eve\nle fish\nide vad\nearth capture\nbn buzz\nbau lt\namate ur\nus l\ntwitch kittens\ntri ms\nmb bs\nkodi ak\ndin ky\nchoreo graphed\nben son\nar aw\nÑĢ Ñ\nreal tor\nfun facts\nf nf\nd mp\nben ue\nbaye sian\nthe old\nsubscri bing\nra king\nofficial monstax\ng ak\ndrink able\ndetec tive\ntrilli um\nsnow men\nshah rukh\neli ds\ndismant led\nmo dest\nlud acris\ncan trell\nðŁĶ Ļ\nâĿ¤ï¸ı ⾨\nÚ ¯\nyw ca\ntb adly\nsa ha\npor tof\nlu cre\nla ken\nha skins\nvinyl records\np ima\nmol o\nign ited\ngau ges\nf sd\nðŁĽ į\nmat su\ng ant\nhen nes\nh bo\nbu sta\nse tups\nscor ner\nreli eving\nneur on\nirish man\nfo gle\nd bn\nsumm a\npi ppin\nmicro finance\nfanci ed\nchair woman\nbrah ma\nfal low\nanti social\nwi a\nt ments\nram i\nra iney\nmind blown\nly man\nafgh an\nbilli ard\nauthor itative\nye hun\nsput nik\nbombard ment\nnl traffic\nmar ic\nma vis\nin nov\ncentral park\nbli ge\nry de\nplun ged\npatho logist\nhost ility\ngroove musicapp\nenti st\nem be\nchi ba\nchast ity\nboul dering\nbc l\naccumul ating\nðŁĴļ ðŁĴĻ\nsmo king\nsm town\npre ssie\nk lik\nje une\nikamal haasan\nhighe reducation\ne music\nðŁĺı ðŁĺıðŁĺı\nwar ing\nup c\nstra chan\nsp itz\nrober son\nnick laus\nmue ang\ninterpre ters\ncy c\ncasspernyo vest\ncam acho\nsl png\npent icton\nmin hyun\nki ah\ni vo\nenergi ze\ndou gal\nalo ha\nwinter wonderland\nir win\ni ar\nhandle bar\ngal lows\nest ro\nen vi\ntrivand rum\nsty rene\nmedi ums\ngains borough\ndr ina\ndis agrees\nd la\naud acious\nwizard world\nus ac\nsubdu ed\nslaughter house\nn wc\nmacchi ato\nham er\ngat os\ndebun ked\ncontact less\nc ing\nz f\nver meer\ntrick or\nopul ent\nis ure\ngaz i\nfilmis notdead\ncanon uk\nbam ford\nske chers\nshi ver\nko gi\nh mi\ngh ats\ncor leone\nsu g\nsom uch\nlo athing\nl int\nfoot work\nen list\ndu rian\ncanonuk andie\nab ot\nx dd\njar gon\nban di\n:) "\nthe only\nsm n\nn ha\nlooo ool\nidevad hikari\nh bl\nfol l\ntraffic alert\nkau f\ndd p\nad in\nso d\nrom ford\nre strooms\nbol linger\nsc cc\nguardiansofthe galaxy\nash er\napi ece\nÙĦ س\nrod man\nren z\nproce eded\nhul kho\nequi pe\nwhit worth\nvisual isation\nunder pass\nthor p\ntae hyun\npower fully\npag ani\nmemor ials\nmar vels\nintan gible\nwin o\npe o\no der\nilo vel\ngil christ\ndeep ening\nchrise vans\nchi ka\nbr ü\npersi an\njer i\nful lof\nem manu\ncu pp\nawesom ely\nalvar ado\nwoof woofwednesday\nme ticul\ninfo wars\nfriend sof\nfair mont\ncov ina\ncma fest\nbul ky\nagno stic\nfar ne\nanton ov\nta pi\nofe x\nmen tored\ne pps\na had\nãģ ķãĤ\ntreas on\nro dents\nriz vi\npari shes\nmal am\nka sey\nappreh ended\nabsolu t\ntech ed\npitt sburg\no real\nmar itim\nli us\nlaun ce\ncorrespon dents\nwat ery\ns jr\nron ey\nneta ji\nglori fy\nar son\nâĿ ķ\nØ§Ø ¦\nwood block\nrt p\nm th\niam jericho\nhu ge\ngh at\ncar go\na edt\nwig more\nshutt les\nretribu tion\npinot noir\nback room\nabhi yan\nðŁĩ§ ðŁĩ·\nsir l\nse gura\nlatin america\nex id\nbe aker\narch ite\nwo z\nun load\nstudent life\nmotiv ator\nku ta\ngreen ock\ngo zo\ncon st\nrespl endent\ne mulator\natten u\nthe zon\nreser vo\nmc gon\nin dah\nga it\ndomen ico\ndo sage\nant ler\noh ne\ninter ning\ncor mier\nci ence\nå ij\nss ur\nred hat\nou ach\nhigh score\nexclu des\near ls\ncal u\nsimul ate\nmur frees\nkru g\ngat to\nchrist a\nan h\nstart shere\nsin n\nn wo\nlo ween\ng lynn\nflo rentine\ndra go\nspi kers\nshar m\nnorth wich\nliquid ation\nare llo\nwalk about\nting ling\npublic art\non earth\nmu ker\ninterrup ting\nil va\nde brief\ncancer ous\nbig sean\nweek night\nt cc\ngene si\nel ka\nci pher\ncali ph\nti eth\nre produce\nkoo kab\nkel lo\naldub x\nshoe maker\nimagin able\nาภ¢\nw bu\nth ay\nstrato sphere\nred stone\npla s\npimp in\nmi p\nlu te\nhatties burg\nhal lowed\nfen wick\ntweetapicture youcantexplain\npro gro\nnot ley\njaw line\ndev ouring\nresi due\nredon do\nmm t\nmccaf frey\nhuman it\ngr m\ndou ghty\në¦ ¬\nwit te\ntil bury\nmen sch\nintellectu ally\ncol ada\nar ad\nðŁĮ ¤\nunderstand able\ngu lati\nghi story\nase m\nram ping\npr is\nmt p\nic ul\ngerrymand ering\nfan nie\ndealer ships\ncoc cus\ncarav aggio\nameli e\nra ger\ntwi sted\nsuccumb ed\nspino sa\nku mari\niu pui\nhorn sby\ncro sse\nc fis\nt ingly\nss ohn\nsab ers\nred cross\nover priced\nni sha\nkat t\nj peg\ninternationaldayof happiness\nfau x\nym c\nug i\ntn z\nsw irls\nstrike out\nst k\nshred der\nninado brev\nhulkho gan\ngh ia\ndiscer ning\nbru yne\n! ....\ntac loban\nr ind\nmajor ca\nle uk\ngrand mothers\ng bu\nbuck inghamshire\nðŁijĮ ðŁı½\nìĽ Įë\nâļĵ ï¸ı@\nphoto synthesis\njugger naut\ndan te\nstick y\nsoft bank\nim mer\nha ber\n! "-\ny ue\nru in\nid m\nhing es\ncricket worldcup\nwisdom wednesday\ntra xx\nold skool\nnow reading\nmar la\nkas per\ngersh win\ndugg ar\nber mond\nyid dish\ntayl ors\nmus graves\nft l\ndun yan\nchrome cast\nðŁ¤© ðŁ¤©\nnc p\nmick elson\nmart en\nmahar shi\ncontracep tive\nà »\nvit ae\nten ni\nstal kers\nmirror less\nexcav ations\ncnbc tv\nchristmass y\ncav ed\nste pan\nsep p\noo dles\nâĹ ĭ\nvil les\nro ving\npan am\nnen shi\nl ö\nbun n\nâļ¡ï¸ı âļ¡ï¸ıâļ¡ï¸ı\nw wa\nkae mia\npre print\nmagi strates\nkam ikaze\nka jal\ninge x\nequ ator\nbox ingday\naw ara\nser ye\nnot ched\nmembran es\nmar an\nhumili ating\nsome one\nsno qual\nsn j\nr pt\npries thood\nman hole\nbur ke\nðŁĺĺðŁĺĺ ðŁĺĺðŁĺĺ\nug c\npim ple\nn aco\nmade inthe\nal em\nzi onists\nwau kesha\nnip sey\nmarch and\n// ///\n⼠Ħ\nto or\nnew ham\nmetamorpho sis\nmag num\ndon ning\nci vit\nbn k\nv oot\nthe v\nsar nia\nsabbat ical\npa ppy\non fire\nleon id\ngo ff\ngi joe\ngel atin\ngarfun kel\ncamoufla ged\nair ship\nparas it\nnca ad\ndor man\nchann ing\nce bit\nat ina\nðŁ¥ ħ\nweare alive\nrall ye\nnightly news\nkiba athai\nfate h\ncodi les\namp he\nyz f\nsu man\ndm z\ncolli ding\nassembly man\nà® ¯\nyear in\nto ga\npo tions\npatric i\nmatter horn\nma so\nkath thi\nkale b\nhashtag roundup\nappo inting\nac g\nstro be\nre twt\no don\nming yu\nla z\nci p\nalex ey\nshradd ha\nschoo lo\nma do\ngh ey\ncurren cy\nmis sus\ningh ome\nglob alist\ndi vo\ncbs la\nbe amer\npier son\nnb supdates\nbeau coup\nbb it\nanom alies\nrally cross\nman gan\nha zing\nbred dit\nsony alpha\nout source\nharam be\nesp ys\nbu x\nbol and\nbench marks\nas ka\ntime travel\nprotect the\nmoor head\nkar ate\njag er\ngri ffey\nex port\ncraf ty\naw ild\narche ology\nand mail\npad u\nham i\ndraf thouse\nde ane\nyugo slavia\nwall paper\ntyran no\nquar k\nlic ences\nadmit tedly\ny re\nlau rie\nfore sight\nal yn\nðŁIJ ¥\nyogy akarta\nwar gaming\ntyre se\nromel u\nrevolution izing\nlil le\ning in\nah q\nxi ao\nti ffin\nteacher sday\nsau stralia\nmid western\ngel e\nfin chley\nfantastic beasts\ncla s\nâĢ £\nmountain bike\nl ates\nðŁĶ IJ\nscu der\nre direct\nher bie\nge sh\nfrat ernal\nran chi\nmodu s\nmar bled\ng ans\nf ss\ncompli mented\nclean water\num rah\nrock in\nmal achi\nlasag ne\ngee zer\nf ated\ndu be\nde jan\nas ante\nanti semitic\nshan ed\nrou sh\nresent ment\npokemon go\nmi ths\ncatal ysis\nsor cere\nrati fied\njewe led\ngo swami\ncho ppy\nbra r\nar ay\na wh\nzo omed\nsu breddit\nstric ter\nshort cake\nonlin ecraft\nnes bitt\nnepale se\nknick ers\nhotro d\nd pm\nbc b\nba ren\nagne z\nâľ ¦\nu co\ns best\nk dvr\nðŁį į\nparam ount\nmar lon\nmachine gun\nit ers\ndo berman\nattack on\nac orns\nro stov\nre gained\npy r\nout board\nam ol\nre sa\nig lobal\nhill on\nf kn\ncrowd sourcing\nrc p\nlo rena\ne ow\nd mu\nðŁijĮ ðŁĺį\ntony abbott\nsw b\nhu blot\nhom mes\ngal vin\nvat os\nun biased\nterrac ed\noc ta\nmel hor\nilayathal apathy\nf lead\nburgl ars\nelectr on\ncam brian\naure ate\nali b\nunder valued\nt mr\nour ce\nja er\nous al\nlen oir\nðŁĮ Ģ\nthan et\nr aring\nquix ote\nloc ator\nla porte\nendocr ino\nchange makers\nbo dh\nso hail\nkam il\nfu sions\ncompri ses\nranger over\npau lie\nmush room\ngo shen\nfr nd\nerc ise\nbur t\nstrath clyde\nnorth umbria\nkeepp ounding\nk cal\nhtg awm\ngerman y\nfar thest\neng lewood\nblock buster\nwor shipped\ngeor g\ncondu it\nweir der\nunder water\nspe y\nshi pp\nsam aj\nfon ia\nðŁĶµ âļªï¸ı\nçµ µ\nyehun dinon\nwell ington\ns ood\ndog gies\nwa ites\nss ac\nse ep\nreas surance\nram sgate\ndi us\ncon fer\nat too\nìĺ ģ\nvaness a\nus as\nobserv ational\nna st\nmis carriage\nio i\nec up\naf oundation\nlive at\ngram ps\ngigi hadid\nend am\nbu z\naspe edway\nren é\npin hole\nmy day\nmendel ssohn\nk bc\ndowney jr\nti gger\nspe x\nradio show\nft r\nØ ¹\nthe series\nshivan gi\nsenate majldr\noak wood\ni mi\nchuk wu\nasi a\nwitz ki\nsee ley\nro deo\npin point\nmod ded\nhome m\ngor i\ngb pusd\nun timely\nsh atta\nsevery where\nnic hole\nden ce\nðŁijıðŁijı ðŁijıðŁijı\nwhit t\nreali dad\nkin en\nin or\nfad er\ndri fted\ndef leppard\nä¸ĸ çķ\nsling shot\nka iz\ncer o\nblac kex\nap na\naaaa aaa\nðŁ¤¦ ðŁı»âĢįâĻĢï¸ı\nver acruz\nshe ph\npi awards\nà´ ¿\nwill i\nvisit norway\nthe voic\nswee ties\nroyal airforce\npic nic\nlin z\nhar wood\ncla rendon\nsuper foods\nstri ves\nridic ul\nincar nate\nabsa prem\ntoronto police\nond that\nloo sen\nde ws\nje st\nir cle\nchu ms\nbri stow\nzan te\nmulla hs\nmi as\nha bbo\nà Ń\nz aza\nwar lord\nshab ab\nsero tonin\nren berg\non coming\nex cre\nev ada\nb cos\nun dying\nspecial ised\nsirius xm\nques adilla\nopen science\nkar olina\ndil la\nu fa\nmir chi\njuventus fc\nj sa\ndio de\ncommand ed\ncbs baltimore\nbe ys\nas kar\nart collector\nam ira\nwho dat\nt wn\npo ppers\nbl ame\nu mber\nsword fish\nlam ini\nfor america\nfal cone\nenvisi oned\nder anged\nwh r\nt fs\nseag rass\nse fton\non di\nkemp er\nju do\ndo pest\ndisar mament\nantag onist\nali m\nak p\nsm er\nrisk management\noo c\nfan ni\neclip se\ncurric ular\nca stel\nbal le\nate a\nar by\nte quil\nk ander\ngoal keeping\ncra igh\nbb h\nun itarian\nmaas ai\njust ine\nbe gu\narc gis\nsr b\nsouth all\nmus ée\njuli anna\nexce ed\nauditi oned\naneur ysm\nac customed\nthi erry\nsyl vie\nitu r\nhumming birds\nfortnite game\nent ley\ncro hns\ncl oning\nchak ras\nc ely\n== =\nwhit er\nrose tte\nphi r\nko bayashi\nkir kle\ngri st\ndisproportion ately\ncorin th\nbu c\nav aya\nwe iz\nvo i\ns iti\nmin ha\nmeticul ously\nk si\nherring bone\nevery one\nwork man\nnorth shore\nmor dor\nir ving\nhammer ing\nscien cen\nnine ties\nmar shawn\nl illie\nfor tu\nf elling\ncro codiles\nwi den\ntiger pride\nrou ss\npl r\nos ab\no ski\ngu zz\nfen ced\nend fgm\ndin es\ntr in\nsto ic\nmy er\nk ass\nk ama\neye glasses\nbol an\nbob marley\nation ary\nair tel\npro ye\nmad den\ninhe rently\nbush fire\nble acher\nbeautyandthe beast\nre ak\nop c\nlex is\nho bi\neu genie\nbar ter\nbar bra\nĥ âĸ\nà §\nwa e\npo ppa\nlong standing\nindestruc tible\nembar ked\nco ppa\nbel los\nteslamo tors\ninfluen ster\nimmac ul\nhav n\nchu g\napple bee\nmal lo\nje di\ner rr\nö zil\nmorri stown\nmo bbed\ngun ter\nfoo tie\ne ce\nbun d\nu ae\nso ka\nra bid\nlu pu\ndestiny thegame\nclass men\nbo thers\nar ah\nze phy\nmini stering\nhe ire\nfo caccia\ndistric ting\ncros stown\nðŁij© ðŁı»âĢį\nsop ro\nsnu ggled\nsho al\nch kin\nari anna\nthu ggin\nthor pe\nmother ship\nf end\ncam ille\narch i\ntor ches\nsi smo\ndome ter\ncur tis\ntar ragon\noxi di\nm ellor\ni rena\nhead y\nentr ances\nbre mont\nbn ppo\ntro tting\nsang am\nno d\ndaugh ter\ncold well\nbuff y\nbbc proms\nann once\ntt tt\nem ce\nculin ary\nbre scia\nbor uto\nbig p\nbettercall saul\nven er\ntor neo\nrodri gues\nde pra\nstam il\nðŁı Ħ\nsalv aged\nmadein america\nfu gee\ncomic relief\nanu eva\nâĺºï¸ı âĺºï¸ı\nyou ve\nrooster teeth\nmur thy\nlan za\nja xx\ninvo ke\nign ite\nfi ori\nboston globe\nðŁı Ĵ\njesuschri st\ncgi ar\nðŁĹ ŀ\nw fd\ns gc\nkow loon\ndeloit te\nthe cat\nsval bard\nrickand morty\nnun o\njun cker\nimplic it\nhar sha\nghou ls\nend rick\nbow es\nte y\nte ign\nrin ks\no ce\nmetaph or\nish ly\nintern al\nin clin\nday out\nsil age\npar ang\nny n\nmurfrees boro\nk org\ncin der\nba ji\ntell in\nmic rone\nkang ana\nid x\nðŁĴľðŁĴľ ðŁĴľðŁĴľ\nte ca\nsy co\nmadhyapra desh\nexpe dia\nclo g\nav ol\nu mar\nthe chive\nse izing\npri v\npav ili\np els\nlin de\njam al\nde walt\nalle ys\nì§ Ģ\nsummer reading\norphe um\ngla sto\neurope antour\nci gs\nbeat riz\ntonyabbott mhr\npar le\nkil au\nhit ched\nbere a\nbe holder\nbas sne\narro z\ní Ħ\nsyn ths\nnfl combine\nnew stv\n; ;)\ny ams\nwhom ever\ntor un\nthey re\nsouth west\nshru g\nscot landis\npione ered\nhaul er\nh ss\ndav it\nbe fri\ntro on\nse pang\nlo z\nea p\nay len\nwri t\ntoile tries\nlac ey\nengineer ing\nch vr\nwan ted\nw am\nsilverstone uk\nsi al\nsha sh\npe le\npan to\ngor dy\ng st\nâŀ ¡\nupper deck\nnat chez\nmach e\ncollec tables\nb cuz\nðŁIJ ij\ntin ubu\nsnow shoe\nmoham ed\nmal divi\nmal den\nthankful for\nroyal ascot\nprivate equity\nnine teenth\nhus sey\nbo ggs\nzin ski\nter pen\nson os\nradio therapy\nquic kie\npro vement\nnorth ward\ninns bruck\nflash mob\nexpe di\nboyco tting\nrd guk\no ole\nmar chers\nmand u\ngriev ances\ndiss on\ncall ers\nble mi\nbill gates\nsuni versity\nsen warren\nru d\nros common\npalad ins\nmonday thoughts\nbeer day\nal c\nn tr\nkag ura\njiang su\nflow ery\nconce ding\nche red\nan ay\nĵ ãģ\nâĢĵ âĢĵ\nresto re\nny ard\nmuzaf far\nine za\nesp anto\ncannabis community\nsmithson ian\ns london\nregul ates\nmaking adifference\nat v\nà¹ĢภĽ\nross ini\nre settlement\nini k\nin the\nfo t\ncolor ways\nak en\nur qu\nunder pants\nn ns\nmedic ine\nl lo\nik an\ng acy\nem body\nef ter\nban j\nar f\nâĿĦï¸ıâĿĦï¸ı âĿĦï¸ı\nts r\nmr ss\nfi es\ncor az\nago go\nthen orth\nresolu te\nnas l\nmagaz in\ngr rr\net weets\nbusiness insider\nbench marking\nmontmar tre\nhome stuck\nhe it\ne chin\nac ai\n-- "\nu chicago\nph ra\nm clen\ncumple años\nclo sing\nbald win\npar kes\norni tho\nmi on\nart sed\nouter wear\nfarm to\nendu res\ndor king\nai i\nper severe\no ar\nknight ley\nho hoho\ndemocr at\nbernabe u\nap la\nyam an\nveterin arian\ntin the\nsonsof anarchy\nshad er\nhawaii an\nge tz\nam bb\nðŁĮ ħ\nu mu\nthat smy\none day\ndoor n\ncr aters\ncn ni\nast ate\ncouncil member\nback pain\nad r\nâķIJ âķIJ\nstra ined\nsas su\nglobe andmail\ngeta fe\nfri vol\nfanta stical\nallen de\nthezon ecast\nshipp uden\nsaras wati\nrou ge\npu pper\nmo dena\ngerard way\ngaz elle\ndu sse\ndog friendly\nðŁ¤ĺ ðŁı¾\nt fi\nsam mi\nrow dy\nkinab alu\njagann ath\nu ff\nso da\nsg d\nmum taz\nglo bo\nfaf sa\nb ced\nvisi bly\nminer al\ndi ra\nbees wax\nshail ene\npresti ge\ndissec ting\nbm wi\nb ich\nan tic\nwil hel\ntax scam\nson tour\nor am\nnorth field\nk tv\nher ds\nfu jitsu\nes v\net ch\nbro ms\nborough s\nanchor man\nsmash ing\nj mc\nfra ppe\nct l\nðŁĵ ī\nun ger\nscreen er\nnbc nightlynews\nlay zhang\nhugh jackman\ndevo tee\ndefici ent\ncharli ze\nðŁĶ¥ @\nwater crisis\nvish nu\nt fm\nsof war\nmau ve\nken ji\ndatemy family\ncer u\nbear cat\nsu zi\no ad\nleit rim\niso de\ncre scen\nastro physics\nwc co\nw pt\ntou lon\nto pple\npu c\npe ay\nninj ago\nmanufac tures\ndissi dent\ncol vin\nu ist\ntra i\nt ola\nswan k\nsplat ter\nrobbie williams\nnu ps\nmcn ulty\nlacro ix\nbati m\nðŁij §\nðŁİµ ðŁİ¶\nth elife\ngent ina\ncl at\n( ),\nyou gov\nyehundinon kibaathai\nus g\nre branded\nmar mite\nludic rous\nkc co\nj ft\nhur acan\nhuck leberry\nat ingly\nðŁĩ¨ðŁĩ ´\nthe storm\nrec tomy\nmonstro sity\nmemor ies\nkitt en\nen a\ndough erty\nbt b\nare g\nðŁĺį ðŁĺĬ\nsla v\nmoon lit\nmad d\ndis advantage\ncomm enter\nbram ble\nbor rowers\nbel ow\nstaun ton\nsali va\nkwi k\nken na\nfal si\nedge water\nde ur\nd souza\nd me\ncontradic tion\nstan ning\nsch loss\nsc tv\ni aff\ngolden eye\narchi e\nali khan\nal brecht\naa as\nslo west\nin scriptions\ngirl guiding\nchu ca\nðŁIJĿ ðŁIJĿ\nâĢĶ #\nstyli zed\nsam ford\nph nom\nlong view\njy j\nbu ford\nas n\nwall y\nli en\ndecad ence\ndan e\nbar uch\nry land\nhalli well\ng tb\ng out\nfou l\nf ye\ncur lew\ncon golese\nbhat tachar\nðŁĺĤ ðŁijı\nsla ve\ngli mmer\nd alla\ncy l\nun fccc\ntram way\nti gre\nsin dhi\nob ac\nben et\nbeef y\nstrat os\npregn ancies\nplan te\nel ux\nchennai ipl\nภ«\nwa hab\nout kast\nmanit ou\nlu au\nio u\nhock ney\ncontre ras\nbaby sit\nuh cougar\nmobile app\nmaria sharapova\nexpect ant\nconsoli date\nton al\nsteep ed\nkaz i\nih ate\nfl acco\ne show\ncatholic ism\nar adio\nsack ville\nmackin ac\ni was\nenglish man\ncantbe broken\nbu ble\nunited fc\nron de\npack er\nbristol city\nãĢ °\nsol s\nschur ch\nsak shi\nmeto pera\nme ang\ni vor\nech l\nba an\nðŁĴŀ ðŁĴŀðŁĴŀ\nvin ho\nsm ttt\nprince sa\npor trush\naa o\n= ]\nprofici ent\nlick ed\nig nis\nhead lined\nfast ball\ndo ss\nÐ ¶\nsquir rel\npro c\nplan ned\nizom bie\nitali angp\nhu may\nh town\nco bh\nbar un\nrun g\nres ford\nmo jo\nadop tions\nt la\nshar d\npri vacy\nko in\ndon na\nceph alo\ncent aur\nbau d\nar cel\napol i\nak en\nç ´\nwit chy\ntic ats\nspo x\nreal food\nmac e\nfi fe\nbe ch\nðŁij Ļ\nÙĪ د\nseac rest\nrenfre w\npi xi\nneu f\nentertain ers\nco oney\ncll rs\nbo ing\nwell and\nthe office\nnad ine\ninspired by\ndilig ent\ndevi ant\nr pf\nlin ens\nk news\ninstap lace\nem itting\ndur and\nuuuu u\nströ m\nsp hilly\no dia\nnd tv\njab ba\ning t\nd ceu\nco et\ncl v\npon ders\nparliament arians\nkei sha\nk illi\njae hyun\nc ph\nan un\nsho el\nly tham\nem bi\nbreak out\nanim a\nfaith fully\ncu pe\nceram ic\nam way\nwasser man\nscotlandis now\nme tics\ninstaplace app\ng mc\nðŁ¦ ī\nwater proofing\nresi sts\npar quet\ngo c\nbrave heart\nqu arium\npom ade\npit stop\nng k\nfor g\nbankholiday weekend\nresi dent\nkol o\nhel ic\ngo lov\nfound ational\ne ine\nde tain\ncont end\nbb f\nðŁĺĬðŁĺĬðŁĺĬðŁĺĬ ðŁĺĬðŁĺĬðŁĺĬðŁĺĬ\nãĥ Ĭ\nher ts\nðŁIJ ¦\nvisi oning\nsk storm\nla vi\nran ia\ngo h\nfas cia\ndunyan ews\nchidam baram\nbra zz\nbain bridge\nsp ook\nsno d\nsilver stein\nsav ile\nplat onic\nmsk ajal\ngeta ways\nfri sky\nexplor atory\nu ll\nton ia\nsy r\nstru ts\nspl an\nrec tion\noll yofficial\nn elly\nmalm ö\nconfe rence\nclar o\nbi bby\ntopp scards\nther ight\nmat ricul\nkajol atun\ngl enda\nchurch yard\nbt m\næ ´\nutah jazz\np sat\nhigh line\ndisu sed\nal mo\naf t\nâĻ ¬\ntroubad our\nmull an\nlie ge\nk oma\nhe wson\nwith a\nvent a\nt ched\nshow me\nleg ali\ngift card\nboy band\nal las\nvir at\nspacef light\nou ture\nlie berman\nli kel\ni sha\nhead way\near hart\nbhar ata\nå £\nth as\nrec ce\npa yo\ngab or\nfoun der\ncold war\ncar pet\nag ha\npark nyc\nmis a\nli mass\nlen g\ninfin it\nindeb ted\ndeep state\nbloom sbury\nðŁĸ ĸ\nyay yy\ntoy story\nsb g\nn wa\nlar issa\ngn ar\nresi ding\npenetr ate\nfr itt\nex tro\nclo ak\nsens ations\nrang ers\npur ring\nmskajal aggarwal\nhi ram\nen vious\nde stru\nand heri\nagron omy\nä¸ Ń\nto va\nlock heed\nface timing\nbon ny\nab user\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nro derick\nout perform\nne pa\nir in\nexplain afil\nbuffalo es\nðŁ¥ ģ\nuno dc\ntrespas sing\nto h\nrock music\ndolce amore\non eness\nlob sters\nin tr\nhind sight\nenlar ged\nbrit ons\nago d\nva id\ntt l\nthere after\nso ir\nnat ale\necor ps\nchipot le\nyo k\nga h\nal va\npic s\now sky\ncin ta\nanec dote\nðŁĺĽ ðŁĺĽ\nrein carnation\nple aser\nni q\nmackin non\ncan ber\nwa he\nur bex\nud inese\nselfies unday\nsa hel\nextrac ting\nchampion ship\nbuzz feed\n/ £\nyasi r\nsmi thing\nrela pse\nlibr i\ninclu sion\nfab ian\n!! ...\nðŁĻıðŁı» ðŁĻıðŁı»\nne der\ngu sh\nblen heim\nâĦ ĸ\nyugi oh\nseh gal\npo dol\nje thro\njama al\ng oun\nco zy\nbri gid\nv lc\nroc keting\npin ch\nmaggi ore\nken a\nk ony\nwi ke\nwhistle podu\nstupi dly\nliv able\nlion heart\nlak me\njong dae\nge en\nelectr ics\ncyani de\narc ades\nto kas\nmono poli\nmar key\ndimit ri\ndale ks\nconvers ational\naj c\ntes bury\nste pper\nri as\nrepl enish\nker ou\nimel da\nig eria\nðŁĶ ½\nune qual\nsad dles\nreci fe\nms f\nmal practice\nio dine\ndar ko\nstu esday\nho dge\ndc f\nwal kin\nspe op\npe ering\nokc thunder\njac o\nha snt\nge ico\nbree zes\nberea vement\nðŁķ ·\nlu saka\nirish rugby\nel aw\ntyr rell\nthunder up\ninter acted\ngoooo od\nfar oe\nver mouth\ntren ch\nl rc\neast leigh\ncopernic us\nber dy\nspecial ty\nprostitu te\npo ftheday\nli ster\ngry ffin\ned f\nbra ith\nboo kies\nbid den\nber nier\nac ause\nwas s\nto ku\nrit u\ninternet marketing\nelectr ons\nakan shag\ntv r\nsni ps\npac s\nmu ss\nho da\nfire power\ndrum sticks\nchildhood cancer\nscri bbles\noff i\nvo gel\nt gi\nstar s\nspo st\nse atur\nkoo tenay\ngy al\nban ff\nap ush\nad mk\nsp op\nri stor\nnit ish\nmel lo\nkat erin\ngoo g\naw ol\nai ley\nãĤ ļ\nภĦ\nwal kies\nte j\njar red\ng ley\n" !!!\nø r\nsh andy\nparake et\nme tering\nman ju\nlets movie\nj ls\nj aga\nen shr\nof s\nhoney bee\nfire truck\nad f\nan try\ntom cat\np russia\nli sal\new es\ndu d\nboy d\nanaly zes\nreal life\nhead teacher\na vie\nyu le\nwal lo\nsha g\nm signite\ndeli rious\ncool in\napo s\nw illa\nvilla inous\nhac er\ndece ived\ncv n\nwind ham\nta q\nmplo tbadly\nmee han\nman ner\nmacgy ver\nde pau\nbeer co\narch it\nover looks\nk ard\ng litters\nembe zz\ndan k\natro city\në¸ Ķë\nè ĭ\ntam u\nsul timate\nsouth florida\nnendor oid\nge yser\ndi z\nal ston\nsul fate\nri alto\nrevol ve\no is\ning ress\ngoo od\nask mrn\nwaste ful\nver mic\nun drafted\nso as\nici c\ngod dess\ngill an\ncarpent ers\nstan hope\nscul ture\nr sr\ncr ème\nbri en\nðŁĶ ĵ\nob v\nhi karu\nflo rence\nflat ter\ncontin ual\nart vs\nðŁĩŃ ðŁĩ\nz ale\nww d\nut ely\ntre lief\ntip ster\nsto tt\nst pete\nmuss olini\nmc b\njun o\nan aco\npra deep\nect ady\nãĥ ı\nঠ¨\nz uk\ntwe aked\nhu huhu\nchatur bate\nbo j\na jax\nsubhan allah\nsnar ky\nrw b\nrever b\nhu mes\ngilmore girls\ncel ine\nâĸ ¼\nrak sha\nm to\nintelli gen\nfla pol\nco pia\ncan isi\nbible verse\ntre vino\ntrac i\nthom e\npharmac ies\ngram mar\nen sign\nw miwx\nswach h\nra gged\npar ian\np ff\ngro sso\nadi eu\nâĢĭ \'\nzor ro\nswin ney\nosc eola\nnigeri adecides\nn ma\nmm d\ninsomni ac\nin design\nharley quinn\nfull time\ner z\ncer sei\nmale k\nmac aw\ncling y\nbeero clock\nband han\nðŁĻĪ ðŁĻĪðŁĻĪ\ngulfstream park\nfic he\nentro py\nci led\namaz e\nme us\nie v\nemb lem\nem ate\ndonal dj\nban yan\nakanshag autam\nsave america\nney mar\nmissi ble\nleav en\ncapac itor\nbod hi\nslyther in\nexplainafil mplotbadly\nem re\ne tru\ncohe rence\nschen ectady\npositi onal\nnai arind\nlao gha\njay z\nbro ward\nbat tista\nat te\napple event\nal g\nte ary\nreplic as\npolari zation\nmor ton\ninste iger\ncotsw old\nbrook line\namphi bian\nwho res\nparti san\nmonogram med\nlow land\nlewi ston\nger o\ncam in\nboy gan\nwear in\nunex plained\nm ke\nher tford\nhat cher\nmatu rely\ni be\nac tin\nwol ves\nd fa\nchromato graphy\narri va\nsham rock\nrole model\nlegendsof tomorrow\nprat chett\niom tt\nfranc a\nmakas sar\neliza bethan\ncav an\nir re\nill ini\ngre sham\ng é\nero yale\nant m\nðŁ¤· ðŁı½âĢįâĻĢï¸ı\nu vm\nnetwork rail\nlo tz\nla ston\ninter com\nconduc tors\nai p\nðŁĺį ðŁĺĭ\nthin ly\nmu te\njun myeon\nepo ch\nblack cat\nbir thing\ntar pon\nstil ton\nrobert downeyjr\nqu int\nphilosop hi\nkar gil\nfu elling\ncorp gov\naw scloud\n---- ->\npark run\ndouble tree\nco ted\nari vera\nthe beat\nsapphire now\npro tools\npar chment\nondthat cantbebroken\nni mble\nho ts\nhan di\nthir teenth\npow ders\nmusli mban\nlor is\nhi paa\ndomin ica\ncaramel ised\npan de\nmiami herald\nmedic are\njam est\ninvasi ve\nhalf marathon\nconfigur ations\nbox ingh\naug mentation\nag c\nðŁijĬ ðŁı¾\nvil leg\nun natural\nshoul der\nroo kie\nration ale\nnorther ly\nmotor cade\nmi shap\nmaker faire\nki ernan\nken more\njo em\ninstru mentation\nge stion\ndi ggy\ncell phones\nör de\nvar ad\ntoot sie\nr mt\nparkin son\npakistan zindabad\nne ct\nhorn sup\ngurru choudhary\nfiel ds\ncri m\nblo ated\nvec tors\nt pu\ns that\nr pg\npu d\nkl out\nkau litz\npa sto\nmar ous\nman ge\nkor ra\nko d\ngor ka\nd tc\nbed lam\nb anco\nv cr\nshakespeare an\nsch atz\nder ic\nbaby shower\nmer cat\nfactor ing\n£ £\ngi sh\ndri zzled\nchvr ches\ncha im\n! ".\ntex tile\nmo ssy\nas v\nvi enne\nun suspecting\nqu b\ngt fc\ncor tana\nbal inese\nv rc\nun locks\nprox ies\ndal er\nal issa\nìĿ ¸\nspon dy\ns vegas\nmy stics\nmis c\nmay wards\nmarci ano\nescon dido\naccumul ate\nw acker\ntil da\nsp ines\nna ina\nmit b\nh cl\ncoach ing\nbra v\ntran mere\nsuicidepre vention\nstory lines\nspin y\nreci eve\nkri sty\ndon key\ncur a\ncomp ag\nblo m\narticho kes\nwee b\nwal luk\nssi mo\nradi shes\nmechan ic\naj it\nag olf\nðŁĺĢ ðŁĺĢ\nwyn onna\npax ex\nkon o\nâĻ¦ ï¸ı\ntrip tych\nsouthampton fc\nold ham\ngod z\ngibson guitar\ne ka\ndiol ch\ncu ddy\nche ws\næ ı\nwatch list\nu so\npred snhl\npad ua\nof an\nnever forgotten\nkab hi\nitalian food\nhar mac\ncra g\nclo gged\nb ong\npay ed\nnorman reedus\ncre ature\nwc u\nvalu ables\nrun aways\ncooper ating\nco pious\nsi der\nsenjohn mccain\nda il\nuof t\nunder dogs\nspeed ster\nsk ye\nroyal academy\nprieste ss\nj illian\nh sn\nam ey\nthat ched\nkau l\nil ver\ndwell ings\ndur ante\nap ache\nwo burn\ntanz anian\nsoci able\nsaatchi art\ns wor\njo ann\nji ji\ncan ister\n* __\nwing man\nvit ale\nosmo sis\norgan ically\nnom e\nhand cuffs\nffe st\neup he\ncreep ers\n* !\nwon woo\nspla shing\nsear th\nroll o\nlud hi\nhead ley\nfleetwood mac\ndifferenti ated\nde thr\nbrex ite\nal drin\nzi pp\nsno b\nsf n\nhum mel\nbu ona\naf ox\nwh ok\npilo ting\nml i\nj cp\ngru mps\ndanc er\nc mg\naddic ting\nad dition\nhiberni an\ng ham\nb ame\nðŁį ¼\nsta tham\nsmugg ler\nn tu\nmorning show\nj ö\nin love\nzap ata\nsouther ly\nshir i\nobam as\nletch worth\nhe yy\ng bi\net or\nba iting\nabund antly\nrock port\nph ics\nmetall ur\ndor nan\nt lt\no den\nlets football\nkay leigh\nir ate\ngoog lec\nfa ked\ndwell er\ndu tt\nber k\nrobb o\nlot ine\ni yc\nhey man\nâĪ Ģ\nme cum\njam mu\ndefence man\ncarth age\nmoham ad\nill an\nd hol\nbrown lee\nven us\nrapp ort\nmck el\nhead wear\ngot ta\nâĺħâĺħ âĺħ\nwe es\nven kai\nn gr\nm twx\njai hind\nberk ley\nax eem\nye ager\nw pial\nmatern al\ngre ys\nfor love\ndaily mail\ncincin nati\nchau tau\nawarri or\nzü rich\nww os\nstream er\nperi shed\npearl harbor\npe ggy\nonline shop\nme cfs\nvish was\nsre es\npo re\nichi go\nar gento\nwa ive\nproble m\npat ched\nnowh iring\nk pk\nfc porto\ndo on\nwhopp er\ntri bal\nsier ran\npor te\nbassne ctar\naf ol\na sted\nwit ney\ninst alike\ndel ine\ncil ic\nbud light\nbetter ment\nab lu\npe corino\nand ria\nìĽĮë ĦĪ\nver t\nuni er\ntic elli\nre max\nmain street\nkick ball\ncoinci de\nbook lover\naver t\nsouth america\nsav ille\noriz ons\nkun le\nkul karni\nger ty\nfor better\neil ge\ndimin ish\nmcen roe\nmb poli\nkn x\nim possi\ngrat u\ndoppelg än\ncre atine\nbe safe\nðŁĴķ ðŁĺĺ\nsweet water\nreg ine\npy aar\nmeh di\nexplan atory\ndr ill\ndeco ded\ndanger ous\nci ab\nuk business\noo b\nmit re\nmetr on\nkop i\ngros jean\nfranch ising\ncow ley\nvan qui\ntheologi an\nre ho\npubl icist\npistachi os\nlocal news\nge ck\ndor ks\nch h\nay res\nriver side\nin continence\nfear some\naster oids\nmen is\netsy retwt\nbuck ner\ntr ing\ntom ar\nsi ste\naspir in\nâĽĦ ï¸ı\nreclin er\nproduct design\nchim neys\nalu it\nå º\nti ously\nr wd\npe m\nnickel back\nmclaren f\nly ra\ninv ents\ncu rio\nciren cester\nand gold\n� �\nãĢ IJ\nठ¹\ntime sup\nseag ate\npurdu e\npul ley\npepper dine\nali ya\nà³ ģ\nz hi\nting le\npo ked\nhunt ley\ngo dogs\nfa kel\n" """\ntake your\nre writing\nceleri ac\nappro vals\nve rer\ntoom uch\nmis demeanor\nly mp\ngar ts\nfer ia\nculmin ation\nbayone tta\ny f\nmoo res\nje ju\nef i\nconserv ative\nbase camp\nab aseball\ntom ar\nsensi bility\nr lc\npap as\njcol enc\nware houses\nv ashi\ntransp o\nspho to\npoo ped\nglit ches\nren i\npre et\nlma ooooo\nhu f\nst inging\nsne aked\nre plays\nr hi\ninter racial\nbu cking\ntax ing\nsig nature\nparty time\nkid die\ninverte brates\nimpro bable\ngastro intestinal\nto ki\ntang les\nom ap\nloo d\ngold blum\ngle be\nec enter\near ners\nsi belius\npo los\nover taken\ndaysof christmas\ncross rail\ncob webs\nbir la\nbil let\nz x\nvis i\nun folded\nste ele\nschwe insteiger\nrak hi\nmar lo\nfe tty\ncn u\nwar nock\nspoke s\nna shua\nh ci\nway lon\nph t\njan es\nim al\nðŁĮŀ ðŁĮŀ\nover grown\nmonday blues\nl yo\nho yas\ndeter rent\ncrimin ology\nanc on\nwork hard\nwel don\nnag y\nmac omb\nlin ux\ndap at\nca shed\nbe is\nth b\npremi ere\nny sc\njan son\ninstitu tion\nban ish\nb hawan\nal pradesh\nve lez\nspo oner\ngret chen\nfin edining\ndwar ves\ndrive safe\ndishon ored\nas so\nver anda\nty rion\nstri ppers\nnxt takeover\nelectri fied\nsd b\npal moil\nn sync\nk ith\nhart nett\ngil berto\nfl ate\ncar in\nunder grads\ntun ga\ntot w\ns be\nmei ji\nleg ere\nl lyn\nhead board\nfru c\nbirken head\nalgon quin\nwee ding\nshe ikh\nposse sses\nop ent\nlove able\neso teric\nbigo ted\nana heim\nwel le\nvigor ous\ntab la\nsp el\npar nas\nland line\ng po\nbrush less\nble au\nau ger\nlaunce ston\nhr man\nfav a\nemployee engagement\nsus ana\nof erta\ndari us\ncrown e\nðŁĵ ½\nw top\nte thered\nman et\ngu te\ngrim mie\nforza juve\ncho ppers\nbere aved\nandhra pradesh\nal bor\nweather ing\nran gi\nout chea\nmi zation\nfro me\ned vard\nbat aan\nvic ar\ntrump jr\nsea shepherd\nlo cos\ndun king\ncrypto graphy\nmat ron\nbo ggling\nbeck enham\nwi x\npat ernal\nhun tress\nherd smen\nbi sping\nav ati\nac d\nun married\nturt leneck\ntar un\nste ez\nse in\nlockheed martin\nit takes\ninsur gents\nbotan ical\nbis mil\nun speak\no gre\nbolson aro\nbethe best\nsa heb\ncathedr als\ncaptain cy\nâĨ ij\nt cd\nse villa\nðŁĺĪ ðŁĺĪðŁĺĪ\nw pi\nscra pping\nprote st\npi dou\nmel ba\nhouston texans\nbur dens\napp ly\nìĸ ´\ntypho on\nr ink\nj bj\nflip grid\ncom te\ncarriage way\nradi op\npic nics\non as\nham burgers\ngo red\ndrin king\nbloom ed\nsho stak\nmul tim\ngh en\nb ss\nafil m\nâŃ ķï¸ı\nz hi\nthe projec\nrel ati\npr at\ndj py\ncarl ile\nsy mp\nsad d\noral health\nmus i\nka vi\nhetero sexual\nabo x\nðŁļ «\nvis on\ntele communication\nr nr\npu la\nna ir\nmccrack en\nhazel nuts\ngre ig\nflamboy ant\nfiver r\naussi eed\nswa c\nsel va\noth ello\nor ville\nis ch\ning es\nfamily history\ncourse work\nchal ice\ncat ed\nbli sters\nxy lo\nthe p\nsk ennedy\nschool girl\nki v\nk nick\nfu me\nbri gg\nbk lyn\nuw madison\nstumb les\nstu pend\nstag nant\nlax is\ning en\ncam corder\ntzu yu\nsat chat\nprohi bit\nheis enberg\nden iz\naad mi\ntheli on\nsty lin\nreinst ated\nhe ur\nffici el\nconfi denti\nca z\nâĻ¥ï¸ıâĻ¥ï¸ı âĻ¥ï¸ı\nte cum\nsus anne\nn anna\nla guardia\nking sman\ning in\ngil ber\nf eng\nephe mera\nenf ants\nchom sky\nchi k\nbre anna\nuk r\nsar an\nr ting\npa checo\ndel and\nopti mise\nkee gan\ncaliph ate\nari z\nz it\nwest side\nul la\nto it\nshif ters\nsh river\npan i\nmust fall\neth ically\nbr no\nin cess\nhu sh\nhappine ss\nfar qu\nfai rest\nf ka\neli m\necumen ical\nec ity\ndre dging\ndc fcfans\nam ichi\nå Į\nsp ak\nsati sh\npu cks\nmatch making\ngo enka\nea sement\nci der\nc mu\nb z\naqu as\nðŁĶ Ĩ\n{ #\nsmoke house\nseparati sts\nsaf fron\nma at\nl loren\niro quo\ncor ns\ncassi dy\nah met\nz hou\nck man\nyor i\nsocial ite\npro mise\nplo tted\nmetic ulous\nfluore scence\nse wing\nsa it\nhunting don\ngi gat\ncascad ing\natl hawks\nue fa\nnor i\nis son\niac aucus\ngir a\nder ail\nbad boy\nway to\ntoo wo\nse u\nrath ore\npra shant\nol ay\noce ana\nle vin\nin dent\nheavy weights\nguer illa\ncor o\nalay sia\nx ing\nuc ous\nstorm zy\nsky light\nsen dai\nsch s\npa il\nmac miller\nleo dicaprio\nhell fire\ng dansk\nfa han\naa w\nsouth well\nram bler\npersi sts\nbrut alist\nan men\ntari k\nse oul\npopsic les\nman sour\ndaes ung\ncarra sco\nsas a\nmat tie\nmaro on\nlever aged\nkom odo\nh sc\nfac toftheday\ncur ses\naff in\nðŁĮ ĭ\nà ²\nyvon ne\nw mur\nmeadow lands\ngra vel\nfa hey\ncze chia\ntupper ware\nmar awi\nlac azette\nhero ics\nfar i\ndel aware\npe cial\npancre atic\nout and\nla zz\ne vel\ntoom ey\ntam pere\nsquid ward\nsop a\nshar man\ner nest\nblack pool\nao ife\nair i\ny eri\nsig mar\nni han\nliz ard\nhom ed\ndry den\nchu b\nblac ke\naldu blo\nre iss\nolympi acos\nlove story\nlent icular\nlan gue\njcc aylen\ni hc\nban ked\ntrum pets\nsx m\nob inson\nma homes\nk nes\ndissemin ation\npe derson\nor bs\nner dist\nlar ies\nfon te\nexpedition ary\nex a\ndam sel\nchi ang\nab on\nâľĬ ðŁı½\nta v\nsil o\nplan ing\nny wx\nm ú\ndata sets\nc rick\nye ay\nvol e\nslin ky\nm srp\nc pp\nbex ley\nve dra\nopen rp\nmysti que\nmicro phones\ndra ghi\natri al\n?? )\nyu ki\nxenob lade\nwords worth\nu sted\ninfluencer marketing\nds g\nas ingh\nroz ay\nrail ings\nm ks\nkan an\nintimi date\nbat ted\nbarunsob ti\nasho ka\nanne curtissmith\nso ares\nmercen ary\nlg f\neyel low\nembar ks\nssi ans\nlung cancer\nin fini\nec c\nbrun son\nbloom er\nar can\nwalla by\ntr ici\nshowr unner\nr dg\nnet to\nmi zes\nerup t\ndur ban\nbaby y\ntric ycle\nsam smith\npre z\npe pe\ngal low\ng day\ndist illing\nðŁijĮ ðŁijį\nðŁIJ ļ\ntw ic\nsee e\njob seekers\nwhy ilove\nposter ior\nli rr\nfreed man\ne ge\ndo xy\ncur y\nang al\nsuzu ki\nmc qu\nct w\nantic hri\nstu f\nspring er\npow ell\nom aha\nmarri ed\ngo home\ng vt\nfox trot\nuc p\now er\nfit ch\ncon nie\nwander lust\nsym bio\nsunny day\nmic ah\nhaye k\ncor mac\nboj angles\né es\nright fully\non a\nnor ah\nk cc\nhillary for\nh mp\nbru in\nath lone\naction news\nì¤ Ģ\nse hen\npu lau\npriest ley\nposthum ous\npe do\nnai doc\nling ard\nle ben\njum per\n... -\npet tic\nob serves\nnuest ros\nnow smoking\nnight cap\nmc p\nlan downers\nk ta\neng ad\nele x\nalle z\nw z\nun ai\nmd f\njard ine\nal ax\nwh aley\ntec no\nson dheim\njunky ard\ninsu rer\ne hl\nde vote\ncar ra\nca id\nca diz\nar thi\nus ch\ntyour self\nper n\nnatgeo travel\nic ism\namo g\nscuderi af\nque m\npow wow\nkur tz\nhead bands\ngla zer\ngetwell soon\ngam enight\neuthan asia\ncatap ul\nasy mp\nsol ano\nred hill\npu ffed\nap ura\nallstar game\nye sp\nsal war\nnag asaki\nmedieval twitter\nloo sen\ninst ax\ni sti\ngo si\ncontempl ative\nchanc ell\nappo inte\ntal ley\ncorn well\nwar dens\nv ate\nsori ano\nrad ley\npu a\nm cro\ninktober day\nero th\nconstip ation\nðŁ¤Ļ ðŁı»\nwil mer\nvani er\nval lado\ntic ons\nreconc ile\nmort als\nli bby\nh dp\nyu gyeom\nym ac\nun bound\nsch ach\nsb sb\nplastic free\nnapo le\nmum mi\nligh test\nlam ent\nde vised\nun intentional\nsheskinda hot\nsaint s\nplace making\npaste uri\nke ir\nkab oom\nin san\ndool ittle\ncassi us\nte va\nshutt le\nrow dies\ndra k\nbren na\nblu m\nki ii\nker ton\nderiv ative\nbu ts\nbar zani\nador bs\nad ami\nzu cker\ntime isnow\nsu lli\nsat i\nsabar imala\nmin na\n- >:\nðŁ¤ ķ\nstu r\nprincer oyce\nmarvel studios\nitali ana\nhahahah ha\ngg ard\nflu tes\nxx xxxx\npin ski\nn pd\nmust see\nimmort als\ngar b\nfi estas\ndor a\nbi bles\nangu ish\nsco trail\npa se\nlazi z\nivan ovic\nchronic illness\nar me\nzu lu\ntech stars\nro cher\nric ar\nplo y\nglar ing\ndes antis\ncancel ing\nab ha\n; *\n. "#\nðŁĺĬ @\ny ch\nvas i\nskybet champ\nsha una\nke ty\ngoggle box\nbalcon ies\nag as\nun tamed\nt ce\nne i\nmontgom ery\nmin ot\nlombar dia\nbrain washed\nbo tha\nblock cha\nâĺºï¸ı ðŁĴķ\nte te\nstar tin\nric hs\nnew sma\nfab les\nfa rer\nde feat\ncy an\ncompan ion\nbio diesel\nben g\nðŁĴ¦ ðŁĴ¦ðŁĴ¦\nmail man\nlin cs\nfc bayer\nbla sters\nbaccal aureate\nattle boro\nvic eg\nlimass ol\nisak hi\nhimy m\nfranca is\nda real\nbush craft\nann ou\nz aky\nvie ja\nkirk by\nca ste\na en\nzd net\nfac et\nali x\nè °\nraj nathsingh\nn ini\nmc cloud\nil ano\ndu ous\ndil jit\ndal lah\ncycl ical\ncur acao\nâĢĭ !\nwr k\nwest boro\nrat o\nr z\nne gra\nland mark\njohn stown\ninterfer ing\nhann an\nduc ated\nzin ke\ntamar ind\nsub title\nro eth\nle at\nkar ls\nka hoot\ninsta art\nhi aleah\nembi id\ndrum line\nassess or\nanore xia\n~~ ~~\nwemb ley\nra jap\nouni versity\njal al\ncopy cat\nak as\nr jd\nu hhhh\nre flux\nmor mon\nmb f\nlucin da\nj drf\nfon taine\ndefend the\ncrack ling\në Ł\nuk housing\ntb m\nshi vers\npri m\nper in\nin for\nh ba\nfurry art\ncav ani\nale se\nacce ssion\nzin ta\nwr ongs\nworldre fugee\ntam bour\nreb ates\nple ases\nparamilit ary\nool ong\nl mc\nfacilit ates\nespan yol\ncar ling\nk of\nhu is\nbrew er\na hahahaha\nwill son\nsh ure\nsain z\nplay hard\nlu p\nlau b\ngour d\ndun ked\nvi vino\nsw restling\npi en\no ks\nl leg\neuv res\ndo zier\ncanadi en\nblood stock\nbac all\nठħ\nvol ver\ne sti\ndo sto\ncar b\nu pping\nsay fie\nro she\nm ru\nemo tional\ndit alia\nbook shelves\nab oo\ns lane\non tem\nmon drian\nlaogha ire\nds f\nconflic ted\ncharlotte town\nðŁĵĬ :\nwhites nake\nuni fying\ntsi pras\nsmar ter\nfron ti\nf dic\nemb ers\ndece iving\nbel air\nac kered\nur su\ntaste ful\nsti let\npas ok\nk sc\ninv ari\nin gof\ndar tist\nclin ician\nchef life\nbla b\navi ary\nðŁĸ IJ\nstream ing\nout ings\nnatural beauty\ngil roy\ndu ets\nanimal welfare\nad air\nsounder sfc\nsashab ank\nro lando\nqu aker\nme ses\nka jal\njesuis charlie\nbrucele e\nu albany\nre ts\ninstall ers\nilo cos\nfin ca\nar kan\nðŁĺ¡ ðŁĺ¡\nshru ti\nsha qu\nleak age\ncy cla\nbre aded\nander sson\nth reading\npolaro ids\nkorean updates\nhard ball\nflock bn\ncw g\nsauer kraut\nos we\nine w\ndu ped\nà¸ŃภĻ\nun reasonable\ntour billon\ntat su\npab st\noptimis ation\nin significant\nil ah\ncn tr\n!!!! "\nsl f\nra pap\no dor\nmasse ffect\nlac lippers\nur sing\nreco very\nne ff\nmon do\ngymna sts\nfin negan\nct m\nbro wsers\nw ert\npag et\nou d\nong kir\nnas sar\nmind ful\nk si\nbak i\n] )\nðŁĺľ ðŁĺľðŁĺľ\nnon chal\nmen e\nly cra\nbay view\nbarn um\nâĢ¼ï¸ı âĢ¼ï¸ıâĢ¼ï¸ı\nvirtu ous\ntre es\npal ak\nmid century\nkel le\njof frey\nho ppers\ntor os\nse pia\npay itforward\nminim ise\nfresh en\nel u\nd pp\nce us\nå° ij\nyu ta\nton ian\nthe king\nte jas\nrand all\nme up\ngut sy\ndor ms\nch ore\n½ ĺ\ntsu i\nthu mping\ns va\ngirl scouts\nbla h\nðŁĺĤ ðŁĴĢ\nstor yof\nske g\nsan am\nkumb h\nic ts\ngo lem\ncoffee house\nbe more\ntweet fleet\ntol stoy\npaul sen\nfilm noir\ndeduc tions\nbear ded\nbe len\nbe ke\nÙĬ ÙĪ\nwin win\nopau lo\nda is\namo eba\nsun y\nlondon derry\ngil ly\ndavi dj\ncraf ter\nwater colours\ntriple h\nsuper tuesday\npapy rus\nfoo di\ndemil ov\nchristma stime\nber tie\nv ities\nto il\nsky lark\nmi pim\nfoodand wine\nfl c\nusa in\nte ers\nrom com\nmorph ed\nho cke\nhem lock\nfire storm\ncomp te\nbo dle\nvis xx\nscor ched\nre ams\njones boro\nchoo ps\ncheeri os\nðŁĨ Ļ\nâ ħ\nn ity\nmiri am\nme trou\nman de\nindie comics\nbree ze\nboom in\nbol sho\nandroid dev\naero dynamic\nsm en\nkri spy\nin nu\nim ps\nham id\nfas a\nemper ors\neli sha\nëĶ Ķ\nin q\ni zzy\nbre sson\nãĥ³ãĥ Ģ\nsyndic ated\nsashabank swwe\nou a\nkah ne\njune teenth\ngo tigers\ndiljit dosanjh\ncan tal\nball a\nasc ended\nv ga\nt ass\nmade it\nhennes sey\ndistri butes\ntop man\nti ago\nthe game\nnav as\nmur at\nmtvlak pop\nhol ley\nbau bles\nam rita\n/ ?\nìĤ ¬\nëĭ ¤\nâĿ Ģ\nk ä\ncel lo\nbio fuel\nashu tosh\nadop ter\n] ]\nðŁĺİ ðŁijį\nsw y\npete y\nhome ownership\ngo van\necol lege\nbres lin\nbbc strictly\naga i\nyum i\nwil lett\nw isn\ntr visxx\nsolsk jaer\nso vie\nsle uth\not ley\nm ame\nhoney bees\nbal dy\nðŁĺİ #\nun na\nti more\nthe ti\nprogre ss\nk was\njama at\nh fx\ncrime fiction\nc ado\nbad d\nanu bis\nê te\nnom a\nh ps\nvintage jewelry\nto fino\nstra vinsky\ngo ffin\ngh q\nef fe\nch acha\ncam eos\nn ci\nlim m\ninvic ta\nfle urs\nen cu\nbrilli ant\nban sal\nalan is\nwan ee\nspr inting\nlong mont\nklar oline\nfeed ing\nðŁ¥° ðŁ¥°\nun sustainable\ntw of\nluci us\nld sconf\nhubb a\nfri o\nde hra\nur in\ntre me\nn mc\ncom es\nbun bury\nb cu\nad ina\n£ )\nza b\nske ptic\nshop rite\nsand o\nre shaping\nmagne to\nkel ley\nilove you\ncri pple\ncontain er\nwham my\nwfa aweather\ntechno logist\nhl man\ndynam os\ncru ze\nble s\nati d\nork shire\ntt an\npoyn ter\npac a\nmar mo\nhyun dai\nwi eld\nsabrin aann\nquick books\npetro chemical\nnol an\nles den\nmc lisse\nlit chfield\ngur ls\ndone gal\ndebut ant\ncom is\nam ul\nvigne sh\nshi ge\nre portage\npru dence\npoten cy\npan hellenic\nme ms\nkling on\nimpre za\neri es\ncash flow\nwinne bago\nuter ine\nss k\ndo bby\ncanv ases\nvau deville\npradhan bjp\nmyth os\nmedi ocr\nmattb omer\ng ns\nfinal ised\nelection night\nd pradhanbjp\ncoch ran\ncalm ly\namag azine\nç§ ģ\nwareness month\ntar ga\nta hun\nsche tta\nmu tter\nliber t\nhal low\nde ities\nchrysan the\nc ms\nam ents\nsabrinaann lynn\nri ghted\nr wot\nko i\nha feez\ng dt\nul ls\nu vu\nol adi\nmetro parks\nit ness\nextingui shed\nsimpli stic\npl ath\nmenag erie\nkcr w\ncam bi\nðŁĺį ðŁĴĸ\nworldrefugee day\nkel vin\ni message\nemo s\nah ca\nsk illing\nshare this\nov sky\nmcin nes\ninter city\ninnov ates\ngor die\ng ons\nfusil iers\nduques ne\nartofli ving\nadvance d\nph ane\noli va\nmet is\nmal loy\njer rys\nfu ming\nfollow for\nf bla\neyel id\nak enya\nac ara\nyu va\nx code\nwyn wood\ntor te\nte gan\nsuperint end\nsh inde\nly ne\nhay market\nengland cricket\nat z\nðŁĴľ ðŁĴĻ\nspeaker pelosi\npon zi\nole miss\nmen ter\nkeo gh\ndo td\nbun t\nbdn mb\nare y\nmathemat icians\nfi ance\nce cili\nspot the\npilo ted\nescor ting\nav ali\nale e\nðŁ¤Ĺ ðŁ¤ĹðŁ¤Ĺ\nweapon ry\ntrapp ist\ntho l\nsur rog\nreci ationday\nplain field\nphi les\nos as\nmi kayla\nma ham\nfavour ite\nbl ane\nba sto\nauer bach\nvit esse\none republic\ndi ma\ncaer nar\nwe trust\nsa jid\npeek aboo\nmam moth\nhatch ery\nh re\ngrand dad\ndail ym\ncorrec ts\ncaliforni ans\në ĮĢ\nster ile\nland sat\nin fielder\nimperson ating\nhypothe tical\nठĨ\nul ta\nthe xfactor\npas sat\nnw r\nhe ss\natlanta falcons\nah madi\nâĹ Ħ\ntu lip\nti ra\nthis week\nspar tak\not f\nl enews\nat ical\nnewsp erth\nha ge\ncar box\nÅ «\nt pb\nsucces strain\nsel man\nsal umni\nmor te\nmor ro\nlu k\nelo ise\ncust serv\nðŁĸ ¼\nri bo\nf tisland\ndo ble\ncu ma\nclinical trials\nbla ding\nbergam ot\nti zed\nsi v\nday ever\nby o\navat ars\nalle giant\nðŁĺį ðŁĺŃ\nyar ra\nwelcome tothe\num no\ntur ing\ntinker bell\nter ton\nswo oning\nregre tting\npin nac\npat rol\niv ar\nim manuel\nig lia\nbar ds\nvit torio\nrac in\npark side\nktr trs\ngu el\nðŁ¤ ¯\nwhitt ington\nsanje ev\ns festival\no rel\nmiami open\njan es\nintensi fied\nig ar\nderek theweather\nbarbe que\nðŁ¤ IJ\nâĢ İ\nyun us\nny post\nabudha bigp\nsemin oles\nground work\nfu ss\neamon n\ndu ol\ncol ympics\nchi an\nbo oms\nani ac\n~ *\ny omi\nthankful thursday\ntech tuesday\nla ur\niphone x\nha aa\nfla va\ne ku\nd all\ncor tes\ncare w\nblun ts\nðŁļ ¶\nîĦ Ĩ\nval tter\nun written\ntop sy\nsom al\nre generate\nman chu\nhun nam\nhoo ts\ne com\nðŁIJ Ń\nÚ Ĩ\ngn or\ngl ens\nbartol o\navi d\nantibio tic\nanc i\nstar key\nru he\npractic al\npenny wise\no cular\njim marous\ncalvin harris\nane mon\nãģ Ĥ\ntat ts\nsuff er\nsp ics\non kyo\no jai\ngreg orio\nbig elow\nath i\nan ta\nðŁĩ²ðŁĩ ½\nzo olander\nsha adi\nkho v\ndi zzy\nann um\nwo m\nth orium\nsummari zes\nscam paign\nkc tv\nju mb\nbit z\nsi al\nr mit\npromp ting\nf cm\nby me\nbron ies\nwj z\nti ya\nri az\nre sign\nprovinci als\ngo vs\nbrock ton\nãĤ ¬\nz orn\nola the\nleh mann\njuan ita\ng dr\ndis bur\ntab ling\npi azz\nper plex\nmilit ar\ngin seng\nfred di\nfire birds\nf ags\ndig g\naug sburg\nac as\n. &\nðŁ¤ Ł\nstabili zer\nsa thy\nre gt\nni ker\nmode sty\nfo garty\ncap p\nbal oo\nbal ac\nar oy\nal corn\nagu sta\nun zi\nstoo pid\npue blo\nmicro chip\nk affe\ncut lass\nclin tock\ntu il\nstartup life\nspeci ale\npp pp\nmi ent\nillumin ates\ne spe\nd der\npla stered\npas sive\no jo\nnay lor\ngo te\nsp and\nrush ers\nme b\nlyn ne\nkyle busch\ngic lee\nee g\ndestroy ers\ncap rice\nas mr\nab f\npreak ness\norphe us\nni bs\nko ji\nbe sse\nac anada\nyear sfor\nthi em\nsan cho\nphilli ps\nne f\nlocal food\nki en\ninver clyde\nden ergy\nst paul\nplu r\nother worldly\nli er\nl q\ndepos ited\nalope cia\nëĭĪ ìĹĺ\np bs\nmagne tism\nlong weekend\nl ssc\nfav oured\nfa ç\nce y\nric hey\nmoom in\nmole sted\nlife less\nin hibition\nfa k\ncat lovers\nblu el\nle ot\nbeau lieu\ntou ted\nthe fts\ni frs\nhome stead\ngg yu\ncy g\nwritten river\npe ña\nov ar\no bu\nneb preps\nkerou ac\nforevery one\nbol ling\nï £\nwu han\nun til\nsemi finalist\npersu aded\nnew berry\nmutil ation\nmedi um\nkr t\ncon da\nxox oxo\nti po\nlo th\nj il\ngo eagles\ndab ang\nyay y\nwe hr\nther ings\nja eh\ndang an\nwe pt\nol der\nmcla chlan\nmagnus sen\ndispers al\ncap gemini\nðŁİģ ðŁİī\nstark ville\nor lan\nabor tion\nt outes\nlegal tech\nlead lap\nhanni gan\nas ers\nver lander\nsw bb\ns com\nlittle ton\nfe h\nempower ing\ndead wood\nal go\nñ as\nval eyellow\npatti son\nd abad\nbuck land\nro han\npu du\nma ari\nine fficient\ncra ppie\nch swx\nbr ca\nz anne\nshostak ovich\nhy una\nde acons\ncanadien smtl\nbyr nes\nabandon ment\nâļ Ķ\npresi ded\npredic tive\nper ma\nmnu chin\nmaccab i\nha shim\ndie te\nantiqu es\nmt m\nmm da\njohan sen\nex change\nclut tered\nti vism\nlove less\nid ler\nbb va\nam arie\nall ll\nair liner\nyen naiarind\nvern acular\ntec tonic\npur gatory\nphoto shoots\nor man\nmel ina\nkhawa ja\nken tish\neb m\nchrissy teigen\nðŁIJ ĩ\nun resolved\nultram an\nthe heraldsun\nren ch\ncab ling\nbix by\nbeck brom\n´ ï¸ı\nthe ism\nth un\nsimp les\npopul ous\npad ding\nmar on\ncrun ch\ncatamar an\nbe est\nzoo s\nsush ma\nrel les\nmccr ory\nge f\nev ra\nrev lon\noo ak\nmit ro\nki os\nðŁĺĤ âĿ¤\nðŁĺ¹ ðŁĺ¹\nw z\nstra di\ngrou ped\nge x\nfamily law\neu an\near my\nconfi g\nabdul la\nðŁĵ ŀ\nðŁĴĵ ðŁĴĵðŁĴĵ\nshe ith\nquote stoliveby\nof fic\nalli anz\nzal mi\ntenny son\nstor age\npol led\nmac ao\nlips comb\nim er\ndj khaled\ncancer research\nbbcin tro\nup f\nmu es\nma gritte\nhyper loop\nflu ency\nedmonton oilers\nco vey\nbel low\nbar ba\npau ley\netu de\ne it\nbroo ding\nat ori\nðŁĩŃ ðŁĩ·\ntooth less\nha worth\nge b\nbur p\nbi bb\nzin da\ntro ts\nca shing\nbe ep\nðŁĩ¯ðŁĩ ²\n¡ ľ\nwar r\nshri mps\npay able\ndimini shing\nb tr\nå ¯\nr cm\nouro cean\nno ts\nmil i\nj deep\nduc ati\nbak shi\ntraff ickers\nta hini\npro am\nho yer\ntom ic\nn ce\nmar ron\nki st\nkemp ton\ncal abas\nc vd\n^ )/\nðŁı Ķ\nwor sen\nside board\nsad o\nrock on\nij in\nh mc\nðŁĩ¿ ðŁĩ¦\nwater islife\nte ix\nsty ler\nsarde gna\noper atic\nnl poli\nhoff mann\ncom anche\nboat ers\nðŁIJ ¼\nï¸ıâĥ£ .\nnot ches\ng ash\nexcav ated\ndom me\ndese cr\nchar ing\nart and\n!! ]\nsur fer\nmow bray\nmat lab\nkati ec\ninside out\na shar\nðŁij Ĥ\nëı Ħ\nvon n\nun apologetic\nseven fold\nni ak\nmis syou\nkab uki\nhar tn\ncare ll\ncal ic\nbat ley\nap it\n" //\ntr ical\nstra han\nse tia\nmain frame\nlove parkrun\nkait lyn\nbo vine\nalej andro\nz us\ntw oo\nmal ts\ndr p\ncath ay\nðŁijį ðŁijĮ\nzan u\nvideo grapher\nvez da\nthou sand\ntar an\nrein vigor\ninspir ation\ngrou per\ndd dd\ncol ds\nchur ning\nbe seen\nautomo tive\n* #\nver son\nnumer o\nmichael kors\nka ala\nfotogra fie\nbc f\nur f\ntan trums\nro sales\nmin ate\nki va\nil in\nde fied\nathle ticism\ntu cks\nthrow backs\nroth ko\nro gues\nper idot\nnew seum\nnational petday\nerdo ÄŁan\nerasmu splus\ncad die\nbe heading\nspectacul arly\nsp rain\nseg way\npost card\nmano har\ning p\nhe aney\nschuyl kill\ns anger\nmigra ines\nm st\ngor mley\nebene zer\nbattle born\nðŁĺı ðŁĺĤ\number to\nsm k\nsaturday night\npalm springs\neye son\ndre cords\nclari fied\nâĦ¢ ï¸ı\nterr ors\nstati stically\npar tofthe\nnaw azu\ndisc ourage\nbou gain\nyan kee\nwish ful\nsla shing\noni ous\niri dium\nff el\nelev ating\ncrew sc\ncraft shout\nbr anco\nac ri\nabstract painting\nbro oms\nðŁĺij ðŁĺij\nun masked\nsuper ficial\npine y\npar king\nour ney\nlauren s\nhydro pon\nhand y\nd ells\ncel ina\nau de\nat ico\nðŁ§ Ļ\nre di\nprofootball hof\nnb s\nfa ints\nar aja\nwin kle\nun tol\nseaf ood\nscot ts\nkee per\ni feel\ngo wan\ng auguin\nfam ers\nbü sum\nbrown low\nam ul\nìĺ ¤\nwal liams\ntsu ki\nseñ or\nsch indler\nmur phys\nlaugha ble\ngor d\nescal ate\ne oc\nye swe\nun solicited\nspra wl\nle bowski\nhe mel\ngrow lers\ngar uda\nap rons\nthel ine\nnor throp\nnab j\nkin sey\nhor as\ndallas stars\nchit ty\nbu si\nbar do\nul is\nstraight ening\nsd l\nra yo\nmirac ulous\nko c\nhar die\ndo y\ndani ella\ncostu me\nt ss\nst iller\nplu mb\non demand\ncot ter\nw dw\nuh f\ntoday s\ns sh\ns illa\nroblox dev\nre districting\nlo de\nkh or\ncover ings\nba w\nali express\npeace day\nmen o\nmarin ade\nkear ns\nhow ler\nhar pers\nau ge\nalla hu\nsa z\nro well\nrevi ves\npul is\npre ppy\nillion aire\nic el\nchev elle\nç Ł\nvix ens\nredbull racing\nplac es\npal os\nos ke\nmid season\nmendo cino\nk ron\ngeni us\ngay nor\nvic tim\nsn itch\nhyper ion\ngood food\nsking dom\nmediocr ity\nlive t\nku wa\ni work\nha gia\nfromthe archives\nchen o\nbann er\nah d\n+ #\nrelax es\nmal foy\nfo sse\nfire places\ndar pa\ncorin thian\nðŁı ¢\nwarran ted\num d\nsoci et\nof love\ngun ther\nde main\nvol ts\nti zi\nklo of\nith waite\nhar is\nh ky\nfirsta id\nbee b\nav ic\nmul lah\nlim es\nj rs\nhipp os\nfelici ano\nwhe e\nun plug\nr ng\npren tice\nmor inga\nmer ah\nma sque\nk mbc\nj hon\nfare well\nbor ic\n.... ..#\nðŁĺģ ðŁijį\nìĥĿìĿ¼ ì¶ķíķĺíķ´\nâĢ ¿\nmas se\nhurricane harvey\nde vere\ncy nic\nyaz idi\nro ld\npon toon\nmirac ulously\nh cv\ngar da\ng mu\nder ton\nd ink\ncoy h\nav ing\nâĤ ¦\nth win\nmo wed\nmartin sville\nmal lik\nlife sciences\nkiba at\nke ym\nem r\ndur k\ncoun tering\ncor vallis\nbro t\nbaro da\nw any\nvijay awada\nsy ty\nr ill\noy ama\nole miss\nmor aine\nloom is\nkd trey\nis c\nindi as\nhau lage\neng le\ncre s\nc ct\nbe you\nstand ar\nnumer acy\nl pl\nbru schetta\nwi k\nq sl\npha sed\nmix cloud\nfi facom\ncomp ile\nÌ Ħ\npent agram\nmonday mood\nfinanci als\ndo th\ndebilit ating\nard t\nut u\ntru gby\nstre tch\nsp al\nsan tosh\nme st\nlo real\ngen ting\ncre o\nair cadets\nðŁķ ·\nwi ff\ntri os\ntou rer\nrhi annon\no hhhhh\nkier an\njames maslow\nflock a\ne ww\nang ar\nab di\nv hf\nsound system\nmi ura\nmanipul ating\nino cul\ngovin da\nden o\nbirthday girl\nbad man\nak ura\nab n\nнÑĭÐ µ\nzand t\npar dew\nmo ja\nmisogy ni\nlind ley\nempire state\nejec tion\natac ama\nwhi ppet\ntu cc\ntimm ons\nps x\nnovem bre\nna it\nminic amp\nexc ruci\ncaffe inated\nsmoo ve\nrevo ke\nmccar ron\ninter sect\nduol ingo\nch aching\nbrun ch\nìĹIJ ìĿ´\nе Ð\nw alling\ntake shi\nshowus your\nni da\njimmy kimmel\nh ri\ndi ed\nclou ded\nsap ar\nra don\npractic e\npim ms\nkan a\nhead space\ngat i\nfrustr ations\nanno ys\n____ __\nro te\nper tinent\northodon tics\nbe kasi\naeronau tical\nwei wei\nvic ki\nrel son\nra he\nmar ry\ndo ak\nchan ted\nbbc countryfile\nuk gif\nqu iri\nqu ag\nmuch ach\nloren z\nk roos\nfor your\nfar away\ndark souls\nso k\ns land\nk for\nfuture ready\ncar din\nadvent uring\nzambo anga\nyon ghwa\nu mma\nkan an\nhand yman\nfi duci\nedge wood\ndomestic ated\nconsu lar\nwn d\nsuper hit\npa cho\nmono chromatic\nim bu\ngla ad\ndar ken\ncor ti\nbyo d\nbar at\n({} )\nwein berg\nthe chase\nor ge\nmiy agi\nj ali\nin ac\nen atics\nban ished\nb fg\nwheel ers\nneo liberal\nmi mics\nenfor cer\nwe aning\npy p\ni pm\nher ni\ncla flin\nchitec ts\ncarbo hydrates\nae i\nwork week\nver ity\nsleepy hollow\nsani bel\nper due\nglobal bc\nbin ds\nsty ro\nshow stopper\npar able\ni dism\nhin ata\nfore casted\ndu ffel\nde cent\nbott omed\nbbci player\nat elle\nanthropo logist\nsee able\nre creates\nraven na\npu ffins\nmand al\nfla ps\ncou sin\ncool ness\nche tan\ncbs miami\nao te\nai leen\nu twx\nu di\nram bling\no ggi\nne en\nmeteor ology\nir respective\nilli ers\ndomin ick\ncann oli\nadjour ned\nâĿ¤âĿ¤ âĿ¤âĿ¤âĿ¤\nwy p\nste au\no cial\nk hay\nh mv\nene x\ndj life\nu ko\ntro pes\nswar tz\npu yo\nplay house\npatient safety\nlabou rers\nite a\ne wa\ndeal oftheday\nbog dan\nwild star\nwed g\nthe gap\npa ki\nis bell\ndevo id\naw w\nas b\nwas pi\nte fl\nsver ige\nqui eres\nmo en\nasi o\nafri ka\nvi agra\ntwitter verse\nsyour friendship\npry ce\nmon on\nelm hurst\nbring iton\nvideom tv\ntam er\njalli kattu\nfoodie friday\nfederic amog\nextrac ur\ncal len\nanton y\nâĺĢï¸ıâĺĢï¸ı âĺĢï¸ı\nta ichi\nrishi kesh\npand ana\nn ung\nla ver\ngaul tier\nfair ways\nd ello\nalcat el\nz le\nre frac\nprote omics\npent at\nor bits\nmor gue\nmaver ick\nkand ahar\nissu ance\nintertwin ed\ni ren\ngit mo\nfaz al\nerr atic\ndor mit\nbeauti fy\n( (:\nyou n\nmx gp\nit zy\ndam en\ncolorec tal\nco sm\nchri sk\nc ita\napologi zing\nîĦ Ĩ\nte tra\nsaoir se\npenit enti\nman deville\nlo dge\nja xon\nj la\naph rodi\nalter bridge\nç ¦\nte dd\nre fit\ninjec ting\ndi stro\nbrig ham\nyear challenge\nra he\nhit men\nha bi\ngrammat ical\ngeorge michael\nbro x\nbo ck\nam la\ntour life\nstry ker\np all\nmarqu ise\ngher ty\nel z\ncla pper\ncataw ba\ntisthe season\nscrip tw\nma doka\nint ently\ngee king\ngalac tic\ndo the\nbl c\nap tor\nanci ente\nal icec\nÙĬ ÙĨ\nwool y\nralph lauren\njane austen\nhun ky\ndry wall\nchen in\nat n\nanticor ruption\nthree some\nthe t\nmetal core\nli ga\nlex icon\neura sia\ndor sethour\ndaily mail\nvel vet\nmou lton\ncolle tte\nbra ai\nben ning\nasi acup\nwor ded\nsocial work\nshu man\ns ich\nment a\nkin sale\ni hansika\ndu cey\ndif fuse\ncur sing\ncordu roy\nå ²\nvelve ty\nur inal\ntucker carlson\ntemper ance\nfro ggy\naf cv\nshan ty\nl ner\ngood rich\nge j\neli x\nef ood\nb of\nartvs artist\nvo wel\nsut cliffe\nsta v\nse ous\nra ines\nmasto don\nbooka day\ntag alog\nridge wood\nprogressi vely\nlock smith\nkan er\ndic kie\ncel los\nbreak downs\nbo ssy\nba al\naveng ing\nsky landers\nfa jar\nci u\nbe aks\nb ere\nðŁĴķ ðŁĺį\nsu fficiently\nmay weather\nde scar\nbil i\ntat o\nrevolution aries\nkwa wesome\nem g\ncad ill\nc bre\nðŁij Ķ\nwheel chair\nten a\nr amaz\njo kingly\nhar lem\ngo knights\nenu mer\ndili p\ncon serving\nbeckbrom fl\nbat avia\nag gregation\nta ip\nstat ure\nselfish ness\nscuderiaf errari\nke u\nin sati\nfix it\neric garner\nentr ant\nâĢĶ "\nÑ ĩ\nwi ley\nty nd\npa ke\ninfl ict\nbu law\nblack more\nsacramento kings\nol ta\nker r\ngra dio\nbro snan\nse on\npo ws\npatho gen\nfra zer\nen large\nathe on\nware housing\nur se\nfil ings\ndis content\nche t\nwri gh\nvacation ing\nta rek\nstr angle\nnic ki\nident ity\ndhan i\nd ary\nconstruc tions\ncagli ari\nage o\na fia\nwedding dress\nsch ed\nper rin\nme ur\nin art\nwor c\nun settled\nmini bus\nmat ric\nchrist ened\nbell inger\nmo xie\nkar bala\ne hn\nat tainable\nta va\nsw ells\nro da\npi stol\np z\nlis burn\nk roll\nfcbayer nen\nbel lion\nro byn\ngrou pie\nan ant\nĥâĸ ĥâĸ\nri at\nly me\nju te\nhall oumi\nglu t\ncor te\nvas sar\nthen and\nterro ir\nring tone\nmusta ine\nhomer oom\nfu tbol\nfr in\nbo ba\nbasil don\nto ews\nsummer fun\nit sa\nin ia\nim plying\nhark ness\ngn u\ndeplo yments\nbir dc\nbar my\nì ¢ħ\nsten son\nroman a\nnote pad\nme mon\ncellu lite\nby gone\nator y\nwood lawn\nthevamp s\nla sses\nembaras syourbestfriend\naffection ately\nws j\nvision aries\nren te\npo iti\nhann es\nha ger\nge me\ndistribu tions\nbas sad\nwaveleng th\nvan n\nor me\nneighbour hoods\njersey city\nfu te\ncar adele\nbru iser\nam ed\nsub a\nbas so\nðŁĻĮðŁı» ðŁĻĮðŁı»\në· Ķ\nâ¬ĩï¸ıâ¬ĩï¸ı â¬ĩï¸ı\nss unday\nsli fe\nskar sg\nli an\ngallo ping\nboc ce\ntou che\nro my\nou la\nn ll\nmo ir\nle mony\nis ine\nhoo ver\nevacu ees\ndd national\naddic tions\nðŁĵ İ\nri ker\nnca a\nka ia\nh anya\ndayofthe girl\ncrust ace\nacrob at\nwhite field\nvill anueva\nvallado lid\ns mor\ns ico\nro ping\nopen mic\ngen ia\nfast lane\neci gs\ndod ds\nboard man\nzin edine\nu che\nq at\nn abo\nm wa\nkon rad\nknock outs\ni of\nco lic\nweight loss\nw pb\nshri ke\nre vert\nlibrary congress\ngate fold\nåĨ Ĩ\nse ad\nsam u\npiran ha\nom ena\ng aven\ndayo ff\ncray ola\ny ai\nunder sea\nshap ers\nperl man\nhy rule\ndi manche\nâĻ łï¸ı\nyour take\nsung jae\nple c\no ik\nneil tyson\njam on\nid le\ni go\ni bra\ncast illa\nbrem ner\nbot w\nðŁĺį âĿ¤\npre fab\nmen orca\nmaine mendoza\nglori fied\ndivyas pandana\ndetermin ants\nblack sburg\nìĽ IJ\nmake red\nly in\nic w\nfilip ina\nest i\ndel ves\ndat uk\nabsolu te\nwhal ers\ntt al\nspaw ned\nnewin dian\nmix er\nlead off\nkash etty\nha ddad\ngau ahar\nf ct\neis ner\nate in\nw sm\nth eni\nschool children\nrel ls\norchestr ated\nocta ve\nob sessions\nmeg adrive\njab i\nideo logies\nhar tt\nfe sto\nboo ting\nband h\nbacter ium\nwon g\ntw ing\nlepro sy\nk vit\nbye lection\nbat chel\nalter nat\nreli ed\nke el\nfresh ener\nec lan\ncor i\nchi ko\naw ed\nanil kapoor\nwhis k\nvar o\nshi o\nsan ia\nlaure ates\nj rpg\nguineap ig\ngrizz ly\ndoppelg anger\nbar rows\na hon\nðŁijĩðŁı» ðŁijĩðŁı»\nÎ ´\nye v\nwoo tton\nsn ps\nre collection\nma al\nket an\nfe west\nfar az\ncd w\nbi f\nshah baz\nqui er\nhust ling\nhern don\ndeu ter\ncl u\nadul tery\nru it\ngre na\ngn omes\nfree hand\nref ills\npo tting\ndiagno sing\nban nister\nal ms\nag et\nsam rat\ns vi\npe tri\no virus\nmid lothian\nëį °\nscal ability\nme tac\njust us\nindividu ality\nusa c\nthe karanpatel\ns bar\nre shape\npa war\njf k\nis sac\ncustom ary\nbol der\nÎ º\nr mx\npla i\nber nice\nar cana\nntv news\nmelan cho\nh ö\nbro aden\nandali olo\nðŁķ ĸ\nze h\nww t\nus ma\nsubstan ce\nray man\nkr ati\nde ze\nbron er\nðŁijį @\nze ec\nx wx\nsil very\nkac ey\nic ardi\net works\nba st\naap a\nðŁĶ Ľ\nvap our\nsmu le\nhu ang\nend ar\ndis located\ncari be\n) ....\nðŁĶ¥ .\nvo to\ntu tan\ntele metry\npa karmy\nopini on\no tome\nnz pol\nis en\ne amon\nco bbled\ncit rine\naudit ory\nween ie\nuk snow\nlong itudinal\nhar pers\ngni er\nfasten ers\nem met\ncross bow\ncau tionary\nbre aching\nyam una\nwash i\nswit zer\nswee tly\nspar is\nsp ilt\nnig am\nindian food\nfin alize\nbach ata\nwi w\nspe wing\nra do\ndh c\nan ow\nkis se\ngo frogs\nalpac as\nâĻ ĺ\nred grave\nnew era\nkid der\nhel ios\ndel on\nc anna\nðŁİ ª\nxi on\nstone man\npolyure thane\nni do\nmr ng\nmac a\niso topes\nco fc\ntwit pic\nround trip\nnumer ology\nn ooooo\nmarc marquez\njust ly\nga ir\nfrench bulldog\nfish and\nfelix stowe\ner k\nbag e\nag itation\ntwit s\nmoment arily\nwi st\nsaira jdeep\nn tu\nmur o\nmc gi\nman hood\nman ford\nlove eee\nl ta\nha dri\nfer ro\ndoro thea\nbeach body\narri ba\nangu illa\nvape fam\nspres ley\nsli mmer\nsday time\nophthal mo\nlac ing\nj ür\ngrin del\ndin ah\nce x\nc sun\nbreath s\nbra bham\nwar f\nsp ang\nku bota\nhay ne\nh mo\ngv su\ngo sa\nfun nies\ncre a\nzak ir\nstru mmer\nkur tis\nh kt\nch aka\nbach man\nb jer\nadventure travel\ny ves\ntor r\nnitt any\nhi mes\ncen ota\nbay ern\nиР²\nur ses\nsn ags\nsaura bh\nnico sia\nnick ed\nin shaallah\nfriend liest\never note\naustri angp\nar mou\nanthropo logie\nskag it\nshrou ded\nlittle mix\nhello kitty\neli z\nbr é\napothe cary\namphi bians\ntro p\ntr t\nsuc ces\nrup ture\nmetrou k\nky t\ngla sto\ng int\ncongratul atory\nvolunte ersweek\nvideo clip\nswoo sh\nneu x\nman power\nformat ting\nfl r\nfer nando\ndeal ings\nthequeen mzansi\nshawar ma\nshand ong\nhurricane irma\ncon vul\nyo han\ntr us\nre forming\nr ter\nlax mi\nho hen\nfu turo\ndown grade\ndehra dun\nboo ts\nb ct\naaaaaaaa aaaaaaaa\nðŁĺĺ @\nshill ings\ns ge\nou le\ne gon\ndu pree\ndri bbling\ncontradic tory\ncanton ese\navar ro\nze enews\ny adi\nwas atch\nth alas\nrv smtown\no ap\nma dinah\nber ton\néŃ Ķ\nter yx\nss ant\nsc av\nrealmadri den\npark s\nome tre\nhl f\nre signing\nki ana\nk cs\ngal ine\nel dredge\nco han\nanthropo cene\nðŁļ Ļ\nãĤ »\nthings that\nome ga\nom bo\nny an\nle gia\ninstrument als\nfirstdayof spring\necuad orian\ndic es\nchautau qua\nchas m\nðŁijį ðŁı¾\nwit ten\nwang i\nno bles\nchan el\ncastle ford\nbloss om\nwhole heartedly\nv ab\nun aids\npal tan\noff c\nmeta physical\ncor net\ncar bine\nacknowledge ment\nradio city\nmal ach\nw whl\ntotal ity\nr sp\npower up\nmar tel\nice day\ngo ings\ng me\nfamily day\nes k\ncb sdaytime\nyam ada\nwn y\nspe th\nos walt\nman heim\nmake comics\nin securities\nici us\nha ge\nâĸº âĸº\nwon ho\nm action\nlo zano\nk uk\njar ry\nindi visible\nin nit\ngo er\nff i\ndut chess\ncle mons\ncla ssed\ncham i\nback end\nwat u\nwar games\nvan illa\nru bin\nneop rene\nlo x\ngly phs\ndevelop ment\nchar ger\ncesar o\nx c\nvan guard\npoe hler\npau ses\np sc\nmis bah\nmad ura\neli very\nde coy\nd ouro\ncoast path\nbiop hy\nìķĦìĿ´ì ½ĺ\nwith drawing\nschwei z\nsarde sairajdeep\nsan ji\nproven ance\npic ker\nnade em\nhe hehehe\nform by\nen ed\nelvi spresley\nku du\nke at\nkam eez\ncurios ities\ncr amped\nchildre ss\nwra ppers\nwolf man\nst ell\npassion fruit\nno sh\nni eve\nfang irls\navon dale\nz ace\nsar ang\npreserv atives\nlo co\nig l\nhand set\nhai lee\nge i\ng be\ndistin ctly\nbring in\nf enix\nenf ant\nelast ic\ndon o\ncommer ce\nbudd ha\nwh ang\nsz cz\nroa dies\nretin al\nmc ghee\nhalli day\ncu tie\nslu m\ncosmon aut\nyoshi da\nt ney\nt ge\nsm riti\nd ls\nat orio\nali e\nìĤ¬ëŀ ij\ntink ering\nske le\nrath bone\npr g\nphon ec\nmc w\nlifetime tv\nlead up\ndy r\nspho tos\npu ffer\nprospec ting\nosa urus\nnv m\nmor phs\nmaur ice\nm show\nle grand\niran protests\ncartoon network\nbet i\nacrylic painting\nab id\nģภģà¸\nðŁĩºðŁĩ ¦\nè res\nwait ingfor\nmin has\nleh enga\nbag ans\na or\nmultil ateral\nlig ne\nhot shots\nde classified\nwish ers\ntiss ot\nmess aged\nlo on\nkul tur\nkil ometer\nital o\nfer rero\nco pier\nbar net\nshal lot\nsea view\ndri ven\ncom press\nchic ano\nbou vier\nâĺ ®\ntime flies\nsal ty\nrother ham\nrex ha\nni al\ni story\nh town\nchi v\nafro beat\nyellow knife\nvil s\nva sive\nsin fonia\nponty pri\nhou zz\ndi ble\nâĹ ¼\nwine making\nw ca\nvan re\nscho oner\nos r\nna se\nmi zu\nklo bu\njourn aling\nfa ker\nemmanuel macron\nan jun\nwin t\nj ari\nimpin v\nearth athon\ndi ffers\nc gm\nsupp lic\nstay in\nsieg fried\nni val\nj ith\nho cking\nu hr\nshab u\nhot test\ng any\nbigre d\nðŁ¦ Ģ\nï¸ İ\nswe des\npupp etry\nprin se\nmc donald\nfran cia\nat ino\nar yn\nultr alight\nthe j\nra dar\npre caution\nly a\nkasper sky\njeff eries\nin fir\ngaz zetta\nface less\ndiver ting\nchrome books\nagh a\nab normally\nÙ ģ\nsho win\nshab a\npsy chic\nja unt\nde formed\nawan inews\na ily\nunfore seen\npicture ireland\nn gt\ndown y\ndalhou sie\ncouncil woman\ncor nyn\nbet sey\nwing span\npar id\nming ling\nloc us\nin no\nhusk er\nfl ys\ncarroll ton\ntr icity\nscra ped\nsafar icom\noccup ations\nnawaz sharif\nhoo ves\ncathar ines\nag ger\nà¸Ńภ£\nwad dle\nsyl vain\nst johns\nso yl\nol ds\ng ack\nfire men\nfin o\nen tex\nde constructed\nbc p\nasser t\nب ص\nwh ow\nvari an\nne sta\nmax well\nkru se\ndr b\ncool ant\naw kins\nal et\nab rown\nðŁijĮ @\nsmashbro sultimate\nir rig\ncobble stone\ncas anova\nbuzz ed\ntele kom\nshould nt\npt p\nmemor ia\ncham isa\nalme ida\nwi reless\nre visits\nno ize\nne go\nla garde\nis th\nis ac\nextingui sher\nes an\nw cd\nse ful\ndead lock\nðŁĺħ ðŁĺĤ\nwen atchee\nsla g\nsen za\no in\nne hill\nko vind\nkan ter\njo be\nci a\ncat ers\nagh i\nsuni ons\nsop er\nsli z\npac cio\nmo sh\nma ddy\nlo rence\nherb icide\ngrati fication\ncu it\nbar bell\n? ".\nl pd\nkil mer\ncar no\nball entine\nsh iner\nne tta\nloo kat\nil ocks\niam the\nch ola\nul an\ntr fc\ntermin ally\nori st\no gle\nlight bulb\nzo or\nweb store\nwait ing\nrender ings\npoetry month\nparach u\nminiature monday\nmetro link\nm ple\nkre w\nempha sized\ncar rot\níĺ ķ\nvari us\nroman ticism\nmahesh babu\nlake show\njol y\ncormor ant\nbreak in\nag ni\nv av\nshack leton\npo of\nmass ager\nman ay\nm br\nkag awa\nbrew ery\natt ila\nade d\npav lova\nlan ning\nking khan\ni ata\nfl our\ndun ning\naz awa\nare th\nyee haw\nshel tering\nse bi\nru pts\npin i\nnar rates\nfar rar\ncho kes\nbo ssa\nsnoo ki\nsep tum\np ounce\nmy team\nmy n\nmetaph ors\nmag ine\nleaven worth\nlay man\nlat ch\nhi jacking\nhard away\ngu gu\ngodbless america\ndil ip\ncla r\nbrun o\nا٠Ħ\nwer ks\nvision zero\nt whi\nsei ko\nibm watson\nemul sion\nbho ys\nws vn\nvoice mail\nv cu\nrobo tic\nro k\no woc\nmari ecla\ncric h\nav c\nsu bi\nshivangi joshi\nhai da\ns keeper\nmid ler\nkn ackered\nkirk patrick\nkil leen\ni fc\ny ala\nvege tarians\nsub terran\nshat ter\nmdc ps\nmax ine\nmat ta\namic hele\npro claims\npri sma\nh dl\nfor de\nfo ams\nend less\nbill eric\nan si\nti rana\nsmoo thing\nroun ders\nman ics\nkoo kie\ninvin ci\nari ad\nadop ters\ntimess quare\nta ec\nsco li\ns wash\nou tt\no sho\ngas co\nfo c\ndru pal\ncoy w\nbus king\nbat ti\nĸ ï¸ı\nðŁĺ© ðŁĺŃ\ntwal ker\nthe vote\no ha\nman on\nkri t\njose p\ne inste\ncontex tual\ncaradele vingne\nwee zy\nsom er\nro an\npro ton\noke anos\nhalo gen\ngerman gp\nchoc taw\nta q\nsyste matically\nsha shi\nom ens\nmad dison\nfocu s\ness ay\nair bag\ntsh wane\nscho ice\npr é\nhed wig\ndeze en\nab dic\nðŁĴ°ðŁĴ° ðŁĴ°\nvaid ya\nholist ic\ndown ing\ndesal ination\nde are\nadole scence\nou trun\nnu di\nmá s\nindie author\nf agan\ndof theday\nconce ive\nchest nuts\narch diocese\nac are\nworld war\ngun g\ng ada\ncel ts\nas una\nà® ¨\nun cu\nsun ggyu\nseaf arers\nred field\npis ses\nodd ity\nblow in\n( \':\nà° Ĥ\nr q\nnan ak\niri er\nha velo\ncri key\nchase elliott\nc mr\nbar atheon\nsat the\nnewindian xpress\nimple ment\ndiv ul\ndelu ge\nbla en\nbe el\nìĽĮëĦĪ ìĽIJ\nul timo\nstained glass\nro lex\npla it\nnarcissi sm\nmi gno\nmal abar\nleu kaemia\ning up\nhot ch\nd cr\nchath am\nblanc pa\nti pper\nglas shouse\ndrag ster\ndil apid\nanim ators\nw fla\ntoi let\npi o\nparatro opers\nmi stic\nhir sh\nguru gram\nĦ Ī\nvie ux\nsub sea\nquin lan\nnie der\nnes n\nli day\nlau t\nampli fiers\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃ\nw ami\nover crowded\nfir s\nd nd\ncarto onists\nbarre tto\nwh eni\nuproo ted\nstun ting\nspital fields\nsmur fs\nperfor ated\nn fa\nkios ks\nhim chan\nfli pper\ndaily deal\nbrand new\nðŁ¤ ¸\níĪ ¬\nre mb\nmm mmmmm\niber ian\nfreak y\nfalk land\nart news\nak ha\nðŁĺ ¶\nthe cure\nstrath cona\nsel fe\nomar keting\nom ani\nfor tw\nbrad dock\nðŁĺĮ ðŁĺĮ\nðŁĶ´ ðŁĶ´\nsan remo\nhu ma\nguil lotine\nfoot bal\ndun lap\ndre a\ncast away\nbut ch\nsl ant\nrout ledge\non sen\nlitur gical\ngrunt led\ndiscovern i\nbou che\nand am\nðŁı ¥\ntuss auds\nthink pad\nsuper group\nsummer solstice\nque sto\nnotice ably\nfi bres\nende d\ncolly more\nbuzz in\nai k\nw ate\nvivi an\nstav anger\nre produ\npancre as\ngar cetti\nceme teries\nbird song\narith metic\nten is\nsoo thes\npost modern\nmul holland\ncn j\nbi agio\nar tapp\nantichri st\nyol and\nso be\nrun time\npuri fied\nprou st\njo m\ngodd am\nfar id\ncru yff\nðŁij ¨\nun ig\nta chi\nsyn chro\npa sir\nob la\nlind t\nle de\ndist iller\ncry o\nca h\natro cious\nãĥ ©\nx en\nwi dow\nveg gie\nscre wing\nroman reigns\nker nels\ncream fields\nak ala\nwri sts\nwork sheet\nmar su\nmar nie\nmac o\nio d\ncon volu\nar les\n. ðŁĴķ\nmo te\nj ds\ners for\ndu ty\ndiv ina\nanimal alphabets\naccu weather\nwest minster\nquin cy\npou ting\nn live\nlat our\nketch um\ngi le\nÅ Ľ\nwood bine\nparagra phs\nnad da\nac tic\nwhite sides\nung u\nsom ber\nmin ot\nlati fah\nhorror news\nhero isl\ngem ma\nsky train\nni em\nne urs\nmon line\njay hawk\nfe cha\nfast company\nce m\narmedforce sday\n! "\nsupre mely\nst exas\npremi o\npal mi\nnie to\nn ge\nabe g\nâĺ ģ\nx r\nreno wn\nmor ten\nga sh\nap j\në¹ ħ\nwhats the\nrain y\nconceiv able\naf db\nt live\nshi itake\nr mw\nom alley\nke ving\nstun tin\nespino sa\nde br\nconstant in\nart show\nze wski\nz ander\nsummer school\nmo rena\nferr ar\nd wight\nboko haram\nslo ths\nshill ong\nky e\nkry st\nequ atorial\ncapital weather\nbi onic\nbc i\nbb mf\narche ological\naly son\nacquaint ance\n!!!!!!!! !!!!!\nz ina\nye ong\nth ali\nred car\niti zen\nhe cho\ngri gio\ndu sky\nde grassi\nbermond sey\nb nwt\naram co\nab ut\nwine makers\ntu al\nrhetor ical\nhesit ant\nay aan\nat op\nap ha\nsel kirk\nsd v\nneck tie\njo inted\njo fficial\nhi bern\nfle xi\ndow ry\nchap stick\nx anth\nla ren\nfla shed\neg x\nbin ay\nagnez mo\nzu mab\nra at\nmat suri\nly wood\njose f\nhar ald\nbal sam\nðŁıĥ âĢįâĻĢï¸ı\nshannon leto\nsa aho\ns anne\nmo ans\ngott alent\ndam us\nco e\nbam ber\nswallow tail\nsnat ching\nsharpen er\nligam ents\nka in\nevan escence\nappalach ia\nà° ¨\nthe ir\nskag gs\nsau st\npartic k\nlin ks\njohn legend\ni bo\ngn an\ntwit t\nn fp\nem b\ndoub ters\nbi ak\nad ria\nâı °\nsegun do\nsapi ens\ncm h\nyadav akhilesh\nwin i\nt pt\nron d\nmau rer\nmargi ela\nman olo\njec ts\nha wn\ngreen point\nev on\natlé tico\nscam med\nn nw\nkey less\ni he\nhol den\nattackon titan\nvoo doo\nthi an\ntau pe\nnal ang\nme ath\nje i\ni ann\nhr tech\ndar lin\nblackex cellence\nbest fans\nb wa\nðŁĺī #\nvo z\nrup tured\nmam ac\nm bu\nlu gar\nindeli ble\nhe bert\nal aa\nseag les\nruck sack\ndav y\ncopy writer\nam ok\nab sa\nror o\nq amar\nnew wave\nmultip lier\nmc adams\nly chee\nlatel ateshow\nhi ke\ngen er\ndra ken\ncul lo\nas cap\nwhere are\nradi ate\npower star\nms w\nhon do\ngas light\nbre y\naz oo\nat erials\nãĥ £\nshe boygan\nregi ster\nquinnipi ac\npedro sa\nmu ffs\nhabit able\nbuck head\ntaun ting\nprinci pe\nna ar\nhi ba\nduck tales\nbritish columbia\nsug i\nroad block\npic kin\nop tera\nle os\nil ford\nhand picked\nda shed\nbal los\nacceler ates\nun orthodox\ntrend line\nsy cho\nhex ham\nev ita\nmalar key\ndor mer\nbri x\nalici a\nadel phi\nro ssa\nplu mbers\nnewe gg\nnai res\njo dha\nimpover ished\nh mmmmm\ngal en\nem v\ndefend ants\nðŁİ ³\nway farer\nto ca\nste vien\nsli go\nperci val\njk corden\ng pl\naer of\nac es\nyester year\nsc as\nsalam anca\nrey na\npv fc\np tr\nharry styles\ndan n\nãģ ¾\nbelle za\nalo y\nab alone\nxian limm\nhur r\nhot topic\nhome ware\neas ports\nclashof clans\nber ti\nan ad\nv ca\nst ach\nsquare pants\nshin zo\ncor ks\nðŁĨ ĵ\nwhat syour\nsh ey\nra af\npri mus\nnarc issus\nmassi ve\nklobu char\njor nada\nben elux\na ou\nâĿ¤ï¸ı ðŁĩºðŁĩ¸\ntre acle\ntion alism\nst oun\nsab o\njalape ños\ndar kk\nci ma\nbu ku\nbridge t\nbeha ves\nwim mer\nnational gallery\nmis conception\nepi ste\nb na\nani vers\nus ka\nu soc\nne ocon\nly e\nkang in\ncry baby\ncler ken\ncar m\nre ga\npar ameter\nover taking\nnu man\nmor nin\njob fairy\nha f\nfil o\nexceed ingly\nend point\nb kapoor\nan x\namaz in\nsau teed\nmal ick\nlu gano\nfront row\ndi en\nØ§Ø ¨\nys se\nsti pul\nsr m\nsc roll\nrever se\nno tal\nkey boar\nimmort alized\ncom d\narch way\naficion ado\nup heav\nta ker\nm ä\nhou rof\ndog show\nmo oring\nmeat less\nking scol\nhe ter\nhand maid\ncani ff\nbo ssing\namaz ons\nx lm\nsav it\nice cube\ndon te\nwoo oo\nven trilo\nsy ring\nsen or\npondic herry\nplan ck\npar ov\np ening\nmcdon agh\ndwind ling\ndar fur\ncredit ors\ncra zed\ncr j\nan ong\nmar coni\ndevi led\ncarmar then\nbik ram\nðŁij ª\nvig or\nv fb\ntro ss\nto th\npe u\nin paradise\ndev out\nque tz\nmi dr\nhag ya\nfu sing\ndispla y\nben teke\namir ite\nty rol\ntom atic\ntic ke\nro bredo\nkum kumb\nhurricane matthew\ngrand canyon\nchapar ral\ncat ania\ncar ousell\nseri al\nseme sters\nreper cussions\nouach ita\nmoon shot\nic les\nhow doyou\nd sen\ncomix ology\nchildren in\nrichard branson\nread er\np so\ng dragon\nfar ro\nski pton\nshoe gaze\nni dhi\nkö ln\ngreen wald\nsmu ggle\nshel led\nsh of\nhern ando\nedu ard\nam is\nvau lt\nmore llo\nm ll\ninter generational\ni ab\ndon agh\nbur kin\nä¸ĸçķ Į\nâľĮ ðŁı¾\nvenezu el\nv ato\nsto pover\nsom bra\nsal ad\npav ers\ni bi\nbeaver ton\naerial photography\naber g\nåŃ IJ\nwy ck\nprogro ck\nni vel\nmc do\nland rover\nesc a\nbis d\nðŁĵ· :@\ns gr\nre stin\nnar uto\nlongre ads\ndeliber ation\na ight\nðŁĺ ¦\nssi ma\nri bbed\nintro verts\nend re\nah r\nðŁİ¶ ðŁİµ\ná rez\nsqu i\npark life\nmo se\ndal its\ncalm ness\nbc t\nangeli que\nun surprisingly\nun necessarily\ntor ched\nsw u\nsof i\nreimbur sement\nqu inox\nmay e\ncy stic\nclt traffic\nac ed\nxi ang\nwaz iri\nsupper club\nse ti\npa oli\nol on\nkr g\ning at\nu stad\nu gl\ntwhi ddleston\nphine as\ning rosso\ndigital nomad\nar to\nver milion\nval po\nsch om\npenetr ating\nky at\nhand woven\nfle mington\n( =)\nw tae\ntent acion\nste em\nshri e\nmp l\nic am\ni pan\nation ally\nðŁį ³\nth k\nreti re\nre mission\nre done\nphar ma\nove chkin\nit sm\ndonaldj trumpjr\ncrack er\nbarist as\nari ah\napp liqu\naote aroa\nab scon\nwest wick\nveriz on\nsydney fc\nenthr alling\nchad ha\nbn n\nbi stro\nðŁį ĩ\ntrans missions\nstraigh tened\nmol in\nletsgo bucs\njordan knight\ngro ff\nfreel ancing\nfin gered\ncar show\nac in\nnt fc\nklam ath\nhitch ens\ngee bung\nel vin\ncre amed\nbourgo gne\npie monte\nj su\nha bana\ngran turismo\naqu at\n** ****\n!! .\nzhe jiang\ntwol ves\nq wer\nmb urg\nim partial\nhor d\nhar ps\ngr r\ng illum\ndar by\nb ens\nap b\nair lifted\npale onto\nno things\ngr unt\nc sb\nat ree\nafgh ans\nðŁĩºðŁĩ¸ @\nsupport local\nsub stitutes\ngu la\nba ju\nate gate\namig as\nab ell\nve m\ntw ing\no don\nlong hair\nis ley\ngu tters\ngre ase\ng fa\nfu mi\nwul f\nse ase\npost code\ne gal\nchampion scup\nc sis\nali yah\ny rf\nw saz\nsr fc\nme gyn\nmag net\nkno wns\ni hs\ndrug store\nbiomechan ics\naver a\nwimble don\nslu ggish\nsi mmer\nscience museum\nqué bec\nnok xl\nman do\nk lub\ngran bluef\ndü sseldorf\ncol ab\nch ars\nboo ger\ntin nit\nra fferty\nne k\nmo v\nhand out\nei u\ncat skills\nbusiness intelligence\nboywith luv\nraik konen\nrachel le\npro g\nmt pol\nmccre ary\ncom pote\nchild marriage\naa at\nâľ ¾\nzak zaky\nwomens rights\ntre port\ntramp led\nno tb\nm ri\nlucas film\nlo stin\nlaw son\njun cke\njuncke reu\nho tty\nsyr inge\nsu ds\nst ooth\nka ar\nity uk\ninter play\nhon dar\nho gan\nfu ssy\nexal ted\nen crusted\nc bo\nabsor bs\nãĥ ij\nter tainment\nstyro foam\nreali stically\nn pg\nmen orah\nmcgin n\nlan dish\ni ki\nhr p\nc chs\nyo self\nshi vika\npetro l\nmorphe brushes\nmen os\nmck agan\nk uni\ngob let\ndavi do\nbeau t\nbart enders\nðŁį» ðŁį»\nwest moreland\nwar planes\npy ne\nprinci pled\npen sive\npar s\nneed to\nmar salis\nlocal e\nharper collin\ngi v\nap riv\nal tos\nzace fron\nz at\ntakeme back\nsridevi bkapoor\npy ar\npla w\nexpend itures\nde bug\nðŁĺ´ ðŁĺ´ðŁĺ´\nz ok\ns itec\nne fer\nn na\nki ely\nco ty\nanim ation\nan war\nye shua\nroyal operahouse\nnf v\ncur t\nbeat le\n........ .......\nä ¾\nâĢ į\nsy phil\nsy an\nop ts\nlu ang\nhol yoke\nen tel\ndo terra\nbl und\nanag ement\nalum pur\nsi ra\nreiter ates\nparad is\nkpk updates\ne ased\ncommand ant\nande ren\nĻ ï¸ı\ntoo ts\nnott ingham\nley fc\nec i\nec d\ncomp iling\nbm supdates\nberdy ch\nar ron\nval der\nstri kingly\nsnoo zing\nsi ento\nnikki haley\nmar lies\nic illin\nfemin inity\nfat boy\ncal dera\nbon ey\nboat show\naffiliate marketing\nðŁ¦ Ĩ\nwin nie\nwin dies\nune ducated\nmac aroons\niiii iiii\ncritic ise\ncoron el\nbeng a\ntwitter ati\np cl\nn mb\nles bian\njacqu eline\nhom bres\nencan to\ndog slife\nsuppor tour\nral ston\ncine plex\nðŁ¤ĺ ðŁ¤ĺ\nwork horse\ntour nage\nsa at\nnew sasia\nk ish\nindic ative\nchat ty\ncali pari\nblin dly\nstreet photo\nslu mped\nreservo irs\nlac tic\nble ts\nw tt\nta jinder\nsobr ang\nro the\nla uri\nidi oms\nhor ts\ncran brook\ncb f\nbulaw ayo\nau ro\nze a\nsouthe ast\npar ale\ning alls\ndrawing august\nco existence\nðŁĺī .\ntin sel\nsyn chro\nstedd fod\nsh et\nrp gs\npoppy legion\nout loud\nin dr\neli jah\nelectric vehicles\nco wh\nchit ra\nas ahe\nyu mmm\nvene ws\nswach h\npc p\nover ride\nmu z\nk ada\nel bert\ndu sty\ncon cussions\nbrazili ans\nar ame\nsna il\nout burst\nni hr\nmun do\njean nette\nhar greaves\nfin sbury\nfa yo\ndylan obrien\nse ssion\nsd m\nsc run\nprocrastin ating\ngol dy\nbrid lington\n________________ ________\ntr uly\nmon ies\njour no\nhalcy on\nfer b\nex mouth\nall day\nsoft ness\nits all\nhard style\nbo yl\naz adi\nuni formed\nsix nations\nsekar pandian\nnikon usa\nnc i\nmaster of\nice bergs\nhair pin\ndemilov ato\ndeben hams\ncrowd fund\nash croft\nang ering\n: )!\nstu ffers\npushawards maywards\np yo\nm tu\nhand ley\né »\nu on\ntobi as\ntal aq\nsig ner\nru sted\nno zom\nmagni fying\ndivi der\nal de\n:) ))))\n!! ..\nภ¶\nठ¡\npo ons\noil field\ndo tty\nair bags\nsl urs\nrapap ort\nms me\nklon dike\n. >\nwhy not\ntw omen\nreboun ding\nmi ken\nho dl\nfru ition\ndo er\ncin que\ncertain ties\nâĢĶ -\ntiss erie\ntheprojec ttv\nse ducation\njewell ery\nin between\nimpre ssively\nhair y\nfloo red\nflo wered\nde carbon\nbari atric\nadar shan\nãģ ı\nwater ford\ntre stle\ntann ins\nmo in\ngi sts\ng be\nbrande is\nboo b\nbehavi or\nb pi\nacade m\nyam aguchi\npenitenti ary\nmosc ato\ndusse hra\ndemocr acies\nbla key\nbad dies\nazte ca\nar cy\ntru ely\nsqu ab\nghazi abad\nbu gging\nbal vin\nam nh\nâŀ¡ï¸ı âŀ¡ï¸ı\nาภĻ\nri aa\nmennon ite\nice ps\nhey wood\nwe fly\nsig nat\nshatta wale\nshab irah\nmoor ish\nmen tee\nhudson valley\nbas mati\n? ),\ntigh trope\nsor i\nraj sekarpandian\nne manja\nlu zer\nfre t\nen list\nel dridge\ne hh\nbett ingtips\napple sauce\nðŁĻı âĿ¤ï¸ı\nâĹ ķ\ntrumpp ence\nsol berg\npo inte\nero ar\nenergi zer\ndeath penalty\nch iro\nww l\nfla u\nevol ves\nà ¦\nther ain\nslo g\nsk ova\nrc mp\nkumkumb hagya\ngo dolphin\ncamber well\nbe ading\nax ing\nz ki\nwar blers\nune qui\ntoowo omba\nsalt lake\npanam ap\nny p\nmc cord\nlight year\nje fe\nitu tion\nhydropon ics\ncar paccio\nsho spital\nmai da\nindi erock\ncu enca\nbati sta\nall access\n____ ____\nì µ\nsab e\nmy life\ne dex\nber ne\nav ings\nani ello\nstor onto\npre aches\nhead piece\nhair dressers\nf sc\nex patri\ndana white\nts f\ntal eb\nstein beck\npin der\nmol l\nlu ge\nlil kim\njin woo\ncamp ing\nbroc ade\nal locate\nï¸ıâĥ£ :\náµ ĥ\nout takes\nmonte video\nlom b\nfun ke\nflet ch\nê³ ł\nz nation\nvi Äĩ\nve sted\nshabirah luwalia\npur su\no ath\nnas r\nmer cato\ndave y\n= "\nwi red\nuni do\nt ili\nre ston\nfren te\ndi aled\ncf pb\n/ âĢ¦\nvel our\nsle u\no ren\nmad ina\nken worth\nkell yanne\nenchant ment\nb ce\nav ana\nana than\n! ðŁijį\nðŁijĬ ðŁijĬðŁijĬ\nðŁĮ ®\nur b\nsar ap\nreli a\nknes set\ncy p\nchan neled\ncaball ero\nbcli ons\nv ella\npri sing\npine wood\nn ane\ninsi des\ngorge ously\nflet cher\nal jazeera\npre cep\nper vasive\npen arth\nmam my\nkins ella\nconnor franta\ncolla bs\nahmad shahzad\nw tm\nmercan tile\nloop ing\nloo ky\ni got\nfa jr\ns dotcom\npat naik\ndo brev\nbor os\nad erie\nstell ar\nliv re\nimpre ssi\nda hil\nbas ing\nwedding photography\nstu pa\nor z\nmar ky\nmag da\nid len\ngrat in\ndies els\ncas ino\nappe aled\nmachinegun kelly\nm ct\nbeck man\nat water\nëĭ¤ ëĭĪìĹĺ\ntur i\nst david\nsre bren\nsmo k\npu yal\nmor pinoy\ninter st\nyou uuuu\nyo der\nroo i\nrith vik\nre payment\nrat cliffe\nlaw ren\nflatt ened\ncu so\nar tic\ntal en\nsig nees\nhart mann\nev ac\ndri vin\nclo ves\nab lation\nyy yyyyy\nthro tt\nth é\nsw f\nsqu ig\njhal ak\nig nit\ncalabas as\nal one\nðŁĺģ ðŁĺĤ\nÄŁ lu\nthrow ers\nsway ze\nsrees anth\nsex iness\ngen ji\nalgi ers\nz oro\nroa die\nposse ssing\nparas ol\nover watch\no dm\nmal mo\nec khart\ndesi st\ncall me\n) &\n! ðŁĴĻ\nðŁĺĥ ðŁĺĥ\ntas a\nnor vina\nkom o\ni kaw\nbrutal ism\nbar aka\ntablec loth\nout pouring\nlovel ace\nguar da\nga vi\ncirca dian\nba q\numb o\ntri gon\nthe f\ntc dsb\nta ku\nsni pes\nprotag onists\npar kin\ndas adarshan\ncur ried\nc ne\nst ico\nro ja\nor p\nnoton fire\ndragonball super\ndac ia\nblue monday\nb fs\nare e\nany how\nadopt adog\në ±\nåŃ IJ\ny ur\nsyl vani\nrip ken\nore a\nmilton keynes\nla it\nje z\ngay lord\ng ase\nedam ame\nba iled\nv ry\nsi ds\nrain storm\nemer alds\ncent ra\nbecky lynch\nà® ³\n §\nviceg and\nthen or\ntem bre\no tw\njad ines\nain sley\npetal uma\nnz wine\nha emo\ndor ky\nãħĭãħĭ ãħĭãħĭ\nãĥ¼ãĥ Ī\nutili zes\nshaned awson\nri ze\nhar ts\nha gar\neffici encies\ndeu ces\ndef tones\ncentr ally\nwildlife trusts\nn fr\ngt fo\ncuis ines\nboeing airplanes\nãĤ ¤\nv su\ntreas u\ntam pon\nsth lm\nstaf fie\nsimr an\nsh ey\nhome wood\ndougla s\ntn tweeters\nspoo ked\nin ag\ni pl\nguang dong\nculmin ating\nbotan ics\nbha v\nyl ation\nvery where\nvel y\nten ner\nru bies\nnar ita\nmuje res\nkar ol\nfa o\ncusto dial\nuof g\nra heel\nplac ard\nlawn mower\nja ar\nation ist\nâľ ¿\nun accompanied\nsleep in\nside car\nqatar airways\nfright fest\nblu me\nbatt lec\ntampab ay\nsyn gent\npend le\ni bom\nhu er\nhead gear\ncosmo polit\nwal ther\ntranspho bia\nsan gi\nor da\nhexag onal\nhb cu\ngryffin dor\ndisrup tions\nber lu\nark ham\napp el\nðŁı ı\nwash room\npo y\npk r\nnew sies\nmon ahan\nf ene\ne mas\ndispo sed\nthe moment\nshir a\nkuma si\nhypno therapy\ndhan an\nang ler\nwh et\nvo u\nnewh ampshire\nmanchester united\nmam as\nif you\nhor sey\nh ma\ngin sberg\nde po\ntran scri\ntajinder bagga\noun i\nlees burg\nk imp\nhappy weekend\nen coding\nbru ton\nbroo ker\nbroo ches\nbor k\nang lais\nîĢ ¢\nst eves\nsk t\nnegr oni\nhir i\ne ber\ndic tion\namal fic\ntho tels\nsom i\nshap er\nq asim\ninvigor ating\ngan try\nfle er\ncc m\nblue water\natro phy\nìĨĮëħ Ģ\ntourde france\nfet ched\nche aters\ncentr icity\narmp it\nyu cca\ntax reform\nsnu g\nma up\nli go\nhr mann\nfu ses\nunder represented\nstrath more\nseab ird\ngulf port\ndam sel\ncolli er\naz er\na online\nworldfood day\nsil vio\nnz d\nnach a\ngr illo\nfair fax\nbook blogger\nzam o\nwork bench\nwe do\ntraditional art\nthel ight\nrain forests\nor phic\nl ma\nko z\nindiffe rent\ngu apo\ncw m\nconspir acies\nbrum hour\nbe el\nvari eg\npay et\nis ang\ngo sport\nempan adas\nconver ged\nam ping\nwom bat\nwa u\nthe way\nmerci er\nmccar ty\nitt y\nis beautiful\nhu w\nwas ser\ns first\noni stic\nmtvbrkpop bts\ngalvani zed\nei ghts\nðŁ¤ ł\nma ac\nkel ving\ngrindel wald\nco sas\ncalab ar\nar aw\n# #\nðŁIJ ²\ntag sfor\npur rs\nnai ledit\nmsh sl\nk ore\nham mett\nec ret\ndra goon\nd cm\nclo i\nv ics\ntrail blazing\nloc ation\nlati f\nislam i\ngeh ry\nff xiv\ndai quiri\nchipotle tweets\nbha gw\nab end\nðŁļ ļ\ntre x\nshre ya\nre gen\nqu illo\nnoon an\ncan ciones\nâĺĢï¸ı âĺĢï¸ı\nwa heed\nu ggs\nni et\ngo da\nfra il\ndis gruntled\napp u\nanti a\nak ha\nun sg\nsuper charger\nquoti ent\nq l\nnon na\nne ely\nm cauley\ng fx\nford ham\nfar ns\n⼠ħï¸ı\nto ke\nteam moth\nsr x\nordin ary\nmini mizing\nborough market\nbeckylynch wwe\naz an\nappro ving\nyiel ded\nwe remember\nmetro polit\nhere ford\nfor rest\ner ne\ndar la\nsp rocket\nsl en\noutsi der\nkas kade\niam cardib\nhon our\nfom c\nfia formulae\nev is\n! ðŁĺģ\nvan loon\nfif ties\nsun gai\nsil encing\npop corn\np sm\nou sh\nnigh tri\nnaam kar\nel ing\ncup cake\nbo te\nam ac\nack le\nscar lett\nsaf ar\npl f\nn pg\nmsi sodia\nmen lo\nmc ps\nlu thor\nh hi\nb sn\nature uk\nvoice less\nuttar pradesh\nqu raishi\npover ty\nl fi\nkis singer\nbon aparte\nat eli\nsur bhi\nre designing\nma dan\nha id\nfi stula\ndra pe\ncar ded\nasi mov\npear se\np tl\ninfu se\nenor th\nclu j\nchri scol\ncat riona\ntr d\nthingsto do\ntat u\nsil vi\nschaf er\nq at\nnaz ar\nman ts\njab ari\nfi ddle\nbaby boy\nal politics\nturi st\nsur ly\nre purpose\npare ce\nmen dy\nku ching\niso m\nanime expo\nag ung\na achen\nðŁİħ ðŁı»\nâľ ı\nÐ ¸\npesh awar\npe plum\nn fu\nliqu orice\ninte stine\ningh ouse\nfooth ill\náµ ī\nvegan uary\nskep ticism\noo p\ngor on\nak at\nak ai\nðŁijī ðŁijīðŁijī\nthe t\nsport ster\nph ire\nn fs\ncere digi\nartif icially\nv rs\nl bor\neri ver\ncant stop\nbead le\nbao bab\nðŁĶ ĭ\nðŁ¥ Ī\nner dy\nmedi ab\nfly rts\nf ty\ncraf ters\nar dern\nwl f\nsr hr\ns ft\nmac ros\nid it\nhard man\nham eed\nco da\nboo kie\narri eta\nsketch notes\npr u\no tor\ngranbluef antasy\nco by\nuniversal hub\nthere samay\nspor tif\nri h\npper ton\nmal le\nike ja\ndeut ch\naudio visual\nati ans\nsar ai\nmik ko\nfal z\ndest ine\ncow bell\ncarav ans\nðŁIJ¶ âĿ¤ï¸ı\nâĤ ±\nsad c\npari shi\nno won\nme ads\nde vious\nta ÅŁ\nsal one\nq h\noo fficial\nfriday fact\neasth ampton\naq a\nv sk\nsch ap\nras mus\not us\nosteo arthritis\norangu tans\nconcier to\ncit ym\nah s\nun loaded\nsidd aram\nle as\nha gger\ngam bar\nðŁĴĥ ðŁı¼\nun spoken\ntuesday tip\nnative plants\ngran blue\nfic ci\ncart els\nðŁİħ ðŁİĦ\nà ¬\nwi ggles\nsheph ard\nsar andon\nsaku rai\nlumi ere\nhuman e\ndapp er\ncal med\nth abo\ntaylor made\npo si\nmi ston\nhoo ch\nfreedom of\national park\nai lee\nsophi abush\nsc mp\nquick silver\nhan teo\nðŁĮ» ðŁĮ»\nsab ah\nremedi al\nknick er\nexc els\ndau gherty\nalex ia\nsque e\nmatri mon\nmad di\nkun war\nhell raiser\nhar uka\ngi es\nevolu tion\ncoo ke\nbell at\nari elle\nak hil\nactive wear\ntak sim\nmari ab\nkun dal\ngar cÃŃa\ncon esto\nclick er\nthir ty\nsub strate\nra ye\npro league\np gc\ngc se\ngain with\nct n\nconsu mes\nvi ks\nstupid dope\nsmi a\nsfor th\nlifel ong\nkha bib\nga ea\nden o\nbrink ley\narmy selcaday\nðŁķĬ ï¸ı\nðŁİ ²\nãģ ĭãĤ\nww f\nwheel er\nsurrog acy\nsqu int\nmarc ello\nlolli pops\nic ole\nchel t\ntravel with\nread ying\nfur ness\ney elids\nevening standard\nd ll\nwhe e\np ks\nom gggg\nlogi stical\nhun gama\ner ve\ncor ked\nbrig ades\nbook loversday\nðŁijįðŁı» ðŁijįðŁı»\nwh ockey\ntu ttle\nson ko\nros anna\nnon i\nin atureuk\ntr f\nsk ated\nscri pp\nmad verse\njo ked\ni bc\ner ri\ndaph ne\ncollec tion\naw ood\nabdu laziz\nãĤ º\nvas und\nvapor wave\nmo res\nli ger\nis ing\nintru sive\nak mal\nä ¿\nãĥ Ŀ\nweather ly\nw la\nschen ker\nruth ie\neye care\neco tourism\ndi ap\ncross stitch\nbenton ville\nbarstool bigcat\nati que\naf re\nad ama\né Ŀ\nni ghty\nlon i\nkk u\nfunko pop\nev oo\nec at\nche alth\naz quez\npolyne sia\nnat ge\nmicro fiber\nmi o\nmanag ement\nking sof\nits ch\nenlar gement\nemer gent\ne od\nbarri er\nacor p\nteas poon\ntb sp\nstat t\nsquat ting\nr fp\npas cale\np flu\nma el\njawa har\nda id\ncon ey\nvo s\nsa un\ngoo ding\ng andy\ncogn itive\ny dd\nvis ser\ntri m\nsu pe\nso ared\nsix th\nrizz oli\nmi kas\nkat arina\ngulli ble\nas pin\nalexand ri\ntri fle\ntomi ho\nsha in\nnn nnn\nmand ar\nj ink\ngu tenberg\ndiscover ireland\nc kie\nweg mans\nwedding day\nv ail\nso tom\nmusic thaman\nkil i\nka ke\nci el\nbt cusd\nbe wil\nâĿ ģ\nunder side\nq b\ninquis itive\nhar relson\ngut feld\nforevery child\nduc ci\ncan ap\nag un\nĮ Ģ\nwee per\nwc ws\nspe w\nri ra\npimp les\nmother nature\nmin seok\nleav y\nit aryan\nir k\nday um\ncristo bal\ncat acom\nalti ma\nty pos\noff beat\nnc su\nin tox\nhur ri\ngow dy\ngo an\nedu c\nd mn\nber ly\nlow country\nin set\nhom ey\nhelp forheroes\ngr out\nfl ung\nf enty\nelimin ator\nbro ly\nbal th\n ±\nwag ner\nsm ell\niv ana\nin ds\nhi ga\nha vas\nfed cup\nfe sts\nf mcg\neigh teenth\ndaw es\ncan arias\nâĿ¤ @\nswa hili\nsurrey bc\nredd ick\ncamar aderie\nanimal cruelty\nvali ant\nshou jo\ndun lop\n[ [\ntwitter bestfandom\nsho spice\nma al\nke eler\nju les\nfood photography\nf locks\ndangan ronpa\nresponsi ble\noh no\noctu bre\nmo leg\ncan el\nbri dle\nad ream\ntalla ght\nqu ens\nlink age\nla de\nclam ps\nal maty\nðŁıĨ #\nver dad\nsu i\nringof honor\nmix tape\nmai dens\nlem ire\ncen se\nber nd\naw ww\ntom hanks\nhome opathic\ndis ick\nbethany mota\nbahra ingp\nait ken\nðŁİ¶ ðŁİ¶ðŁİ¶\nzi pline\ntwi ggy\nstead man\nss aint\nsd d\nsch ka\npreven tion\nmike brown\nl land\n!! ??\nsle m\nsenate gop\nos an\nheire ss\ngi ii\nfo w\nbur ney\nas wan\ns ja\nmour a\nhump ty\ncutt ings\ncra w\nan ky\nsp ed\nrunning man\npdx traffic\ndigital isation\ndeple ted\nchurch of\nstaf a\nss j\nsoom piawards\nse der\npete buttigieg\nper f\nle ym\nburg laries\navi va\nar thouse\nðŁĴ ¿\ny lona\nto cks\nss mith\nsam thaan\nrec en\npro bowl\novers old\neuro pa\nvaj payee\nor say\nof m\nmyle skennedy\nmethodo logies\nko jo\nhistory teacher\ngu j\ndre m\ncap ella\nbun yan\ns apol\nparti do\nju gs\nhun za\ndan se\nbobb le\nyar is\nskir k\nlaugh ing\nj ell\nhoursof lemans\nfram ingham\nda eh\nch anda\nu ab\ntam pons\nre pair\nne ko\nkw o\ngood time\nag in\nwe have\nrenfre w\nqu att\nmul cair\njeff ers\ncater ham\nview points\nsf su\nkindergar teners\ngartner sym\nel ong\nc wl\nbr rrr\nðŁ§ IJ\nå° ı\nro then\npil bara\nolo red\nmy heart\nmand ates\nma ith\nbarbe cu\nadag gubati\nad oring\n( £)\nðŁĩ¬ðŁĩ§ ðŁĩ¬ðŁĩ§\ntra dar\nmy ung\nmove ment\nbr r\nblogg ers\nare z\naller genic\nâĿ¤ï¸ı ðŁĺĬ\nwomens fashion\nton kin\nrakh ine\nrajas than\nlich tenstein\ni ad\ng sx\nexc elled\neli se\ns blog\nl bi\nkine sis\nis ometric\nenthr alled\ne il\nduc ing\ndri zzy\nclar issa\nto pic\nsumm itt\nridd led\nmag nate\nfi anna\neu er\nbook my\nali enation\n---- --\nyuv raj\nvon ne\ntn r\nten ey\nshin ing\nrhe in\npo to\npen ed\nnew book\nkel len\njack sons\nflat bed\nel ah\ncre do\ncor nered\nzu g\nwad ers\nsub hash\nsmol lett\np sa\nmm c\nmar rakesh\ngir is\nelast icity\ndisney channel\ncarbon ara\nbi ar\nanc ourt\nsunny leone\nmv g\nmun roe\nmeat free\nmac y\nhe matology\nev enti\nx cel\nus agi\nstock bridge\nstar board\nr pd\nmad hu\nle ma\nboise state\nafrican union\nê°ķ ëĭ¤ëĭĪìĹĺ\n好ãģįãģª 人ãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ\nyu mmy\nwin ans\nran jan\nno du\nn gay\nmk x\nmassac red\nkoo k\naidan turner\nadi um\nðŁİ¨ :\nìĭ ľë\nà¥ĩ _\nsunny vale\nra jab\npr d\nkat un\nign ites\nharvard biz\nes y\ndeep a\nat own\nðŁĩ¨ðŁĩ ±\ntoronto fc\nsc v\nre ni\not g\nneymar jr\nmar mot\nkal on\nio p\nequ in\necho ing\nc du\nbis i\nbeau jol\nbarric aded\namar athon\nx ps\nts wim\nsuper car\nmagical kenya\nl pa\nkri eg\nbe sser\nwaziri stan\nsave slives\npro kabaddi\nor t\nmü ller\nmi ui\nha zza\nem es\nanimal sin\nâŃIJâŃIJ âŃIJ\nunited nations\ntc f\nse gg\nnsp cc\nka o\ninter modal\ngill is\nfri ar\ndanis notonfire\nba hru\namen ity\nlike wise\njard ins\nill at\nidlen omore\ngwyne dd\ngo ol\ncess ation\nam ay\nnat su\nga vel\nfran gi\ndun n\nati va\nand el\ntur pin\nsh ind\nmo hr\nma ggi\nking man\nheart burn\nh fc\nglu co\nf ll\nb nw\nam ae\naffirm ative\n,, ,,,\nvideo graphy\nsal esp\nn º\njo er\njap on\nf ylde\nbu a\nanush kashetty\nwin chester\nscon to\nno tyour\nm é\nkual alumpur\njuli anne\nju r\nfour seasons\ndev itt\ncur sive\nchiang mai\nasp ca\nam ico\nad joining\nsta c\nkee ley\njo i\nhal low\ngo y\nem f\ndill i\ndiag on\ncb sd\ncal o\nwar ring\nsurvivor series\nstol l\nstay strong\nqu y\nmoo kie\nm ally\nhospit able\ngirl problems\nexquis itely\ndrive in\ndown turn\nd modeling\nco pping\ncad y\nbr ough\nb ould\n$ ,\nvisit portugal\nsubver sive\nrun ny\noti v\nmusc ulo\nk illie\nin habit\nhand stand\nfil le\nro coco\nl ge\nfacebook live\neu vre\nblack friday\nthrombo sis\nstandre ws\nr gs\nmie expert\nlu sa\nfra sier\nepi genetics\nbant u\nartistson instagram\nðŁĴĸ ⾨\no sos\nipo h\ncardio logist\né ¦\nwhite wash\nri que\npeter bilt\npencil drawing\nnumb ering\nmon tag\ng ell\ndr t\ncra shers\nani mo\níĶĦë ¡ľ\ntravel skills\nro ped\nfore sted\ned is\nbr l\nbo ol\nsn out\nsd c\nreli eves\nram in\nha usa\namp us\nmar itz\niniti ates\ndero gatory\ncaru ana\nbol i\ntian anmen\nshiv sena\nopho tos\nol ice\nli feli\nden iro\nann unciation\nzar o\nxxx tentacion\nsto cha\nspac er\nsco field\nrai pur\nno ctis\njam mers\ngra fting\ndent on\nbaira vaa\n- /\nðŁħ ±\nz onal\nz ille\nvagab ond\nshoe box\nregre ssive\nkel d\njo elle\nhome stand\ncan you\nanup amp\nplay mobil\np á\nkra uss\njame el\ne uk\nbra s\nsu med\nsto ys\nsting rays\nstat ue\nremember them\nrefe re\nprodu kt\no asi\nmary jane\nhong ki\nel mira\nconduc tive\nchar io\nbu kowski\nðŁĮ¹ ðŁĮ¹\ntibet ans\ntcr wp\nsmall ville\npor tal\nlove whereyou\nie bc\ngor ham\ncommunic ators\ncl acton\ncat ford\nat an\nðŁĩ° ðŁĩ\nstor ies\nshattawale gh\nre sorted\npad stow\np wr\ngrey cup\nfou cau\nfor tis\ncurren t\nco sted\nchong qing\nta vish\nta illi\nste arns\nle murs\niri t\ngad sden\nep r\nbe stow\nappen dix\namalfic oast\ntruc kee\nther un\nth nk\nt fios\nmon tero\nmin ous\nhar yan\nep fl\ndy kes\nde fund\ntim kaine\nrose mont\nli vi\nla usd\njo vic\nghan ai\nboston strong\nam ama\nz ent\nush ka\nswan queen\nmis match\nmillen nia\njaw ans\nel va\nan ee\nadmi rers\nro lo\noptic gaming\nmuch love\ni ha\ndot ca\ndig by\nag al\nadul ting\nç§ģ ãģ®\nv la\ntun bridge\nsur bit\nno ho\nla fc\njerry brown\ngil insky\nfb pe\neli ad\ndo good\ndark matter\nban de\nyu my\nw thr\ntemper ament\np wa\nou ija\nno sey\nnapp a\nhoun slow\nh cp\ngoo den\namerican art\n% +\nsouth lake\nron an\nreg gie\nmarth as\nkir in\nde a\ncu toff\n\\ \\\nðŁĹ º\nðŁĩ¦ ðŁĩª\nte vez\nshel don\nragh u\npush kin\npassi oned\nnar ayan\nilli ons\nhol din\nc sos\nanupamp kher\në ¶\nz et\nvo stok\nvo gt\nsupport the\nsr ar\nmour ners\nlaun dro\nk cam\nco hen\nclass ically\npss st\nhassel hoff\nfa erie\nblack mon\nac tin\ntribu te\nfil me\nexpir y\nd mc\natur n\nvoy age\nold field\nmkh itaryan\nlean er\njerrybrown gov\nis enough\ne ft\nc suf\nbu ca\nbatter y\nb gc\nðŁĮ Ľ\nsae ed\nocean front\nmichael j\nk ross\nfla ky\ncompost able\nau den\nu tion\nt ite\nroyal baby\nrod ger\noch re\ndisproportion ate\ndevon hour\ndand en\nda ar\nbas ins\nb tec\npe mbs\nkhal e\ngra b\ndun ia\nclo gs\nbe ath\nter man\nshut down\nre pose\nraj endra\nquar te\nnational catday\nmir i\nma q\nlok sabha\nhyper rts\nðŁij ¹\nsuper woman\nsris ri\noro sa\nmother sday\nhill sdale\neni us\ndisc red\nbel aru\nbar ring\nav as\namble side\nãĤ ¨\nrot ational\npseu don\npodol ski\nom l\nno body\nnap alm\nhigh tower\ncran king\nbrew pub\nðŁĶ ij\nÙ ī\nzer os\nur ham\nslo pe\nsl ings\nom phe\nmel i\nflyn n\nerit rean\nbri and\nbel lo\naly cia\nag ap\ntari an\nsc ant\nplu cked\np lowed\nolu tions\no kee\nle sm\ninter vie\ngall er\nent ice\nax x\nwo b\nugand ans\nnit ty\nm kii\nlin field\nine pt\nbo sco\nautom ating\nas ketball\nane gi\nsmar ty\nlingu ine\nbb cle\nðŁijī @\ntinnit us\nm vs\nko ons\nk lia\nic as\ngg mu\nde ren\ncamel back\nwk bw\nsta ad\nso res\nis ola\nen ps\ncy n\nced ric\nber gha\nte f\nslur pee\nme thinks\nle ann\nhor des\nenergy storage\nalternati vely\nai ims\nðŁĻĮðŁı¼ ðŁĻĮðŁı¼\nwar an\nwai sted\nman ip\nmadri gal\nde ye\nbon hams\nstupi dest\nri ghty\norg and\njust for\nj na\nipo b\ngra af\nfab ol\ndiagno ses\nbio dynamic\n[ +\nÅŁ k\nro bby\njewell er\nexacer b\nspo ty\nskop je\nsid ney\nshadowhunter stv\npaw tucket\nom nia\nn ong\nlyce um\ningu ishable\nfree form\nconcep t\nalco tt\nsh weta\ns sex\nmorpinoy biga\nmarilyn monroe\nic ol\ndi allo\nalli gators\nsop hila\npa hang\nmascar pone\nfrapp uccino\nclar ita\nzil low\nup bringing\nso ch\nsin nott\nn q\nman os\nj tbc\ni will\nhan an\nflamen go\nfar go\ndoctor strange\ncull man\nash ima\nad den\ntutan kham\nseren o\nry zen\nru mba\nom agh\nmonol ith\ncu ous\nconst ab\nun read\ndemon ium\nbismil lah\nap as\nab aby\nte g\nli que\njo son\njim in\njal isco\nint i\ngran by\ng fw\nari at\nstil t\nsor tie\nsof ie\nre th\ngw ynn\nflex in\nfa ireland\ndispen sing\ncra in\nðŁİīðŁİī ðŁİīðŁİī\nãģ į\ntre mors\nterr ine\npresidenti al\nmoder nis\nkkkk k\ngyne co\ngran ul\nafro jack\nunic ode\nsoci als\nsh ec\nscal ise\nre entry\nnew stalk\nm wan\nli abilities\nle athers\ngur ung\ngis ele\ncont ouring\nak l\na ene\ntt g\nther mal\nt wor\nnishi kori\ncor tland\nco sheriff\nus vi\ntsn hockey\nsj u\np lowing\nnotori ously\nmenopau sal\nmal ted\nma thers\nkettle bell\nis best\nconstitu encies\nche ts\nwith standing\nsport sm\nop al\nnh k\nhu mps\nedmon dson\ncall i\narte m\nðŁ¦ ĥ\nscho tt\nre ticul\nke ele\nhu f\nhi ma\nar ton\nar os\ntim m\nsc su\nru mp\noc sb\nhealthy life\nct u\nbasic income\nandro ids\nwhitec ap\nreck oned\nom ir\nlouis ville\nju mia\nó r\nsanje ev\nran adaggubati\nra ki\npil la\ndeci duous\ncarab ao\nbon aventure\nbel ight\nthe fall\no ineza\nkeyboar dist\nimpeach ed\nfais alabad\nclow ning\nbrooklyn nets\napp lec\npetri e\nn ma\ni isuper\nfoot loose\nchakra borty\ncal or\nar thu\nÙģ ÙĦس\npag an\nn pm\nn co\nlind berg\njenni e\ng outes\ndu ma\ncul ts\n! ??\ntic es\nscot gov\npad mav\nmam a\nhelsin ki\nfnf jb\nel am\nco bbles\nvolu sia\nper oxide\nom is\nnew lands\nhound stooth\nga eilge\nso happy\nre agan\no en\nforthe kids\nciab atta\nbal ham\naf un\nvicegand ako\nv alli\nsen i\nmete o\nliving room\nko dy\nhust le\nharle quins\nbe ka\nag new\níĶ¼ ëĭĪ\nÊ °\nwr d\nusain bolt\nunder card\ntheori sts\nth century\nnu ance\nn lex\nmccul loch\nlight ness\nfridaynight lights\ne stor\n! ðŁĺī\nìłķ êµŃ\nÑģ ÑĤ\nyn t\nwe ald\nster man\npro vocation\nnik ko\nmi gli\nmax on\nhol lins\nfli x\nenvironment alist\nen camp\ncho reo\nï ¹\nwb g\nsh eroes\nridd ance\nparagli ding\nobsc ura\njames arthur\ndeep ens\ndeb au\nchar geon\nboot suk\nbook shops\nar px\nami sh\nam ay\nvit ri\nsc ad\nlac key\nf ateful\ndo your\ncabo chon\nblo x\nann el\nam ato\nwe sty\nsprink ling\nrain coat\nong c\nle vy\nii iii\ndr gn\nìĿ Ģ\nwet suit\nwe imar\nmag ica\nla ff\nkaz akh\nflo of\ndul wich\ndinner ware\ndifferen t\ndan and\ncellu lose\nðŁĺĭ ðŁĺĭ\ntri dent\nthe grand\nscro ssed\np sac\nme hr\nmark us\nmarau der\nk up\nin col\nemir ate\ndam o\ncom mi\nbu shy\nìĿ¸ íĶ¼ëĭĪ\nwa iling\ntheli fe\nso der\nprovin ce\npol ter\npe ake\nopening ceremony\nnca atf\nkei thur\nbi v\nav ast\nandaliolo isa\nwol le\nshi kari\npau ld\nmon son\nmedit ative\niq aluit\nim pur\ncri st\ncopac abana\nun true\nuc b\nover heating\nkale y\niisuper womani\nho si\nd wn\ncu tee\ncler ical\nbro gan\nbemid ji\nðŁ¥ µ\nspiderman ps\nsax ony\nreal james\nmu see\nka po\nj ure\niam ahmadshahzad\ni y\nesc uch\nvic kie\nrazor back\nnar rowed\nmat ts\nmangan ese\nkil ometre\niisuperwomani i\nda ws\nbeat down\nbb d\nÙģÙĦس Ø·\nvil as\ntu dors\np ka\nmis ch\nlen berg\nep onymous\nðŁĴ ł\nslo o\nk gw\nfreight liner\ndiscre dit\nchi er\nbur sa\nben ched\nuni bet\nsingapore gp\nnoo se\njingle ball\ngra ppa\nblack cat\nanu rag\nwest cdnag\nup sc\nru ti\nros setti\nr mh\nphilipp a\noun ty\ngau di\neffe cted\nco ward\nðŁı į\n⾨ ðŁĴķ\nzer matt\nstartup india\nshindi g\nre test\nprev ailed\nmill ones\nlight box\nbrim stone\nand ry\nal ene\ná º\nwre tched\nthe g\nsky pe\nhungar i\ndepic tions\ndan bury\ncra zier\ncamer oun\nas kin\nacademic ally\nwatch out\ntheal thy\nmac ca\nhoney moon\nf wm\nesp y\ndar is\nci as\ncanadi angp\nwil ko\nwa hoo\nkam ran\ngood fellas\nfluctu ations\nchi o\nch ka\nìµ ľ\nwc pss\nsiddaram aiah\ngi allo\ndefl ategate\nbla zin\na ima\nsan de\npit as\nkraf twerk\nhel ion\nfi p\nar bro\nðŁĺ¡ðŁĺ¡ ðŁĺ¡\nðŁıĢðŁıĢ ðŁıĢ\nra it\nra gaz\nom on\nfri sky\nbur rata\nðŁıĥ âĢįâĻĤï¸ı\nwa v\nukrain ians\ntor ta\nsn ook\nsimpli fying\nside bar\nreflex ology\nrb w\nqu ers\nphe asants\nnor r\nno ws\nko tak\nko on\nfu tura\nepi x\nba chao\nع ÙĦ\nscy cling\nsa ini\nresu ming\nph ons\njapanese gp\ngur dwara\nfarns worth\nbitcoin cash\nå ł\ntori es\nti ga\nlgbtq ia\nla chey\nko si\nim ro\ngol drush\nfi ley\nfet sy\nfer ran\nair force\nðŁĺī ðŁĺīðŁĺī\ntri vedi\ntor tell\nsch mid\npanamap apers\nley te\nguil ty\ngolov kin\ncla uses\ncanary islands\nber mann\nas qu\na he\ntun de\nmiscell aneous\nmay es\nchi x\nca den\nav alon\nash anegi\nðŁIJ §\nworld war\ntid bits\nse w\npadu cah\ngoo den\ngirls generation\ngir ar\nexter n\nexemp tions\nch alo\nbur lap\nbi ja\nb mt\ntrich y\nshe art\nsb r\nr ls\npo it\nmuhammad u\nmer cies\nlow poly\nkame ham\njür gen\nchab lis\nbil ingu\nbi ot\nbal y\nsay ye\npatt en\nma this\nlam pp\njag r\nfrag ility\nerec t\ndi maggio\ncreep ed\nch re\nati ous\nðŁĴĻðŁĴĻ ðŁĴĻðŁĴĻ\nvi per\nss in\nr ü\npar do\nlight stick\nkidder minster\ncon don\nab uri\nðŁİĤ ðŁİĤ\nver million\nti wa\nlaz uli\nla sc\nirregular ities\ngin za\ncle ve\nall ace\nafter glow\nz k\nsnee zing\nnfl x\nmoun table\ninfiltr ated\nfra ilty\nfle ets\ncom pa\ncec ile\ncar n\níķ ´\nus mle\nsla vic\nse ema\nmarys ville\nit weet\nhal ton\neng ler\ndd t\nbook bloggers\nب ÙĬ\nv na\nut sav\nt ville\nha sty\ngra di\nfl ore\nbab i\nb bie\nar na\nðŁĩ®ðŁĩ ©\nwof ford\nta vis\nsummari zed\nphil a\nmccle llan\nm xm\nlit tering\nemir ati\ncan tona\nbet te\nan tares\nag n\npepper corn\nmotor bikes\nim poses\nenfor ce\ncal de\nvin tages\nkin ge\nja f\ngo stanford\nfac ials\nchand eliers\nreflec tor\nptx official\npaleo art\nnational signingday\ng gio\ndi am\ncooper atives\nple in\nkun is\nfc cla\ndeterior ation\nc pe\nbel cher\nann ac\nan dean\nthel ance\nsor o\nsh asa\nrecur rence\nplay set\npee bles\nn ars\nentertain ment\ncitizen s\nalej andra\nreli ably\nreason sto\nkut cher\ngeograph y\nfran kin\nfet tucc\nedwar ds\ndelu ca\nd ger\nå± ±\nyo e\nwl wt\nsierran evada\nsha ha\nsear le\nse pp\nsan gh\nreinst ate\nnic hi\ngratuit ous\ngra eme\nephe meral\nchep stow\nc mc\nar able\n>>>> >>>\ny als\nwi el\ntrum bull\nshri mp\nrhe tt\npen tathlon\nlle well\nin organic\nin accessible\nhead dress\nhaz ara\ne gi\ncontrac tual\ncompu ticket\nswim suits\nsledge hammer\npu di\nmarc in\nli smo\nla ins\ncor nu\nchick as\nsnap backs\nsal vo\nraz ors\nra pped\nhe ms\ngab bi\nfr ith\nequestri an\nek won\ndesol ation\ncw m\nval paraiso\nte lec\ntam ron\nsuper fly\nsitu ational\nsh k\nmou sep\ncu da\nâĺĦ ï¸ı\nske pta\nqi ang\nol sson\nnp fl\nmau i\nintegr ity\nig ns\ndesign week\ncor mack\nbusc ando\nba ile\nðŁIJ¶ ðŁIJ¾\nãĥ ¥\nul ina\ntast ing\nkoo ten\nah p\nunil ateral\nspring bok\npurple pride\nox tail\nn rs\nfr itter\nbur ry\narch e\nak am\nuk sopro\nspec tion\nsa kho\nratt an\npo ste\nnew sa\nkil bride\nhbl psl\nhandmade jewelry\ncon nach\nbill deblasio\ntoxic ology\northo doxy\nnew car\nlar ke\ngodof war\nf of\ndar m\nadmir alty\ns bay\nparthen on\npaedo phile\nor ly\nmo et\njackson wang\nj se\niroquo is\ngor da\nbest dayever\n! ðŁĺİ\nzig zag\nthat describe\nstar fleet\nmac allan\ninterven tional\nes in\nsnu bbed\nprecau tionary\norlan doc\nno one\ngill ard\ngar van\nfl icking\nfa ver\ncal dy\nar shad\nvo ix\nstru del\nnu ances\nne in\nkro shan\nken seth\nciu dad\nbel fort\naver ted\nâĿĦï¸ı âĿĦï¸ı\nvar ney\nth il\nswi sher\nspec ter\nlom l\nkin ok\nitys c\nfrag mented\nde in\nbag ong\ntz bach\nreb be\nre issued\nmar gie\nlu ff\nfr ack\nfil les\nex oske\nblue birds\nðŁijıðŁı½ ðŁijıðŁı½\nthri ve\noffici ale\nm schar\nfreak show\nbour n\nal fie\nacre age\nú n\nwag en\nstevien icks\nspan dek\nsi bs\nscu f\ns not\nolive oil\nliber o\nkitesur fing\ners ack\ncar lin\ncapre se\né ĺ\nrhy ming\nred dead\npe aky\npal ay\nmuseum modernart\nmc coy\nla very\nla gged\nker b\ngriff on\neis enberg\ncondu cive\naa and\nãĤ ī\npuc cini\nnorth star\nlg b\nleadup chat\njo h\nintran et\nhu sk\nfur nishing\nwith holding\nnew ze\nmo tte\nmet policeuk\ndec aying\nbaseball hall\nar utz\nalien ware\nà¸Ńภĩ\nuit m\nsur renders\nsuper charge\nra fe\nme than\nger rit\ncow en\ntor ri\ntal lied\nsriti anne\nsho ah\nmc master\nlun ching\nli sab\nis my\nhay abusa\nfol ger\ntremb lay\nni se\nmoss ad\nkry pton\nas amoah\nann enberg\nt ween\nni alls\nmul ls\nmay the\nloves you\nleon ardo\ni ol\nhar kin\ncircum cision\næı ı\noper as\nmoose heads\nheart beats\ndu athlon\nassassin ate\narmen iang\nrott weiler\nnorth york\nmicro sd\nim ic\nh ant\ngru ff\ngaff ney\ncre dential\nbnpp ari\nbeech craft\n?? ?"\nti mon\nlose weight\nist ically\nhouse plants\ne ef\ndun k\ncosmo logy\ncam ara\napart ner\nâĿ¤ï¸ı ðŁĴĻ\nwester os\ntheri ver\nt wee\nke yser\ninser tion\nf pga\nexpla iner\ndi dd\n. ðŁijį\nstair well\npu ckett\npor ky\npat nam\nfle es\nder ay\ntro tt\nten by\nnutt all\ndaf bama\ncomm ends\ncar les\nc pg\nðŁĩ¦ ðŁĩº\nz eller\nsj c\npalmer ston\nno bu\nni le\nflu e\ncr é\nam jad\nìļ Ķ\nup ad\nq ay\npop star\nov sk\nmatch maker\nlef ties\njeb bush\nin ked\nge un\nf ite\neco boost\nbrit on\nblancpa ingt\nasym metrical\nðŁ¤£ðŁ¤£ ðŁ¤£ðŁ¤£\nw yer\nto shi\ns fire\nq nh\nmain enatics\nhou this\nher ons\nfem me\nc tb\nī ´\nwinnin gest\nro is\npon d\noned ay\nmun na\nld l\nge ant\nfocu ssing\nev sky\ndo gan\nash y\nweare r\nth app\nsantho sh\nsal for\nram allah\nr bc\npin scher\nnoun s\nmün chen\nkeithur ban\nhead stone\nfoodfor thought\nbrent fordfc\nandalu sia\nthalai vaa\nsuspici ously\nsc tweets\noo re\nkon dap\nkin ase\ndisney parks\ncru de\ncom mie\nraje ev\nmid life\nme ag\nmari posa\nlisten ing\nka ha\njet lovers\ncer vic\nyor ton\nwalk the\ntell tale\nson nen\nsit ka\nscru ff\npro vol\nki x\ndi ese\ncamar illo\nau sunions\nÙ IJ\nt ards\nresource ful\nnb k\nmoo ch\nmar ÃŃa\nmanof steel\nil volo\nger ardo\nate x\nag allery\n* ~\nyo p\ntten berg\nthunder ing\nrab bi\nplay boy\npe ddling\nmorph ing\nmenstru ation\nhe ster\nfr ito\neu se\ndavi dd\nbeauty blogger\nsoul talk\nny ong\nmar ple\njer vis\ngho se\ncul ver\natle ti\nun successfully\nrefuge ecrisis\nr sf\nj aff\ngram bling\nenter tains\nc sharp\nbarbar ians\nat well\nv é\nun ending\nt pd\nsanc tum\nreverb nation\nper c\nonly at\nmee eee\nlot sa\nkel man\ndam ask\nanim o\nthumb nails\nprote afire\nme ir\nbull itt\nbi ase\nann ad\ntele port\nsthel ens\nsa way\nraw ls\no cho\nmorg ana\nh inged\ngra hame\nch ha\naj as\nun sc\nland slides\ncur ds\nblizz ard\nar ching\nãĥ İ\nvit t\nun ison\nske e\npin ter\nnu ma\nmelis sam\nintox ication\ngamep ad\nfluffy fursday\nemp ties\ndalla sma\ncompens ated\nwj xt\nte ther\nrhy me\nreal saltlife\nony c\nmeso theli\nke et\nfin dyou\nboun ded\nyuv strong\nsco il\npr y\npp f\nnys na\nher on\ngran canaria\nfra iche\nd uni\naureli us\nal un\nal anna\ntal lu\nro am\nnaamkar ann\nmer ges\nlit trell\nko b\nhi dd\ngrave stone\nge c\ned an\nduplic ation\ncast ings\nbio energy\nbi p\nthr ones\nthail and\ns don\npom pano\npig gies\nmoo res\nit wednesday\nis al\nfl x\nfaz eclan\nash tray\naf y\nacham pionship\nzz ini\ntrue blood\nsa dio\nra rer\nnew england\nne who\nmi h\nli fer\nhemorrha ge\nfree standing\nza idi\nyü rek\nr lfc\nmo sby\nmar gol\nbra ined\nber gamo\nðŁį· ðŁį·\noxy moron\nlooo ove\ninstru cting\ng ago\ncurti ss\narutz sheva\nali ga\nal ake\nwhit eness\nstate police\no po\nmark s\ngeh rig\nembed ding\ndebun king\nca ren\nai red\nâĢ º\nvilla ger\nsweet dreams\nsub tropical\nprodukt fang\npick up\npartisan ship\nmus grave\nmouth ful\nmob ley\nempha sizing\navenger sin\nar ron\naci di\nwad dell\nstor tford\nra ym\npo irier\nkeep going\nkari shma\niam andalioloisa\nhammer stein\ncrossfit games\nwhistle blowers\ntoyo tar\nit w\nhe on\ngly ph\na era\nze c\nvolkswag en\nvivi dly\nt act\nstru tting\nhu erta\ngro ssed\ngiro ditalia\nep t\nbb r\namazon uk\nalto ona\nðŁIJ Ħ\nprime video\nn sm\nkings way\nshay mitch\nrocke ted\npo lok\nnhl flyers\nla bon\nk arel\ndon gh\ncheese steak\nb tt\natay lor\nah on\nvocali sts\nstocki sts\nsoir ée\nsat ay\nn bac\nmodel o\nmelo dious\ngha stly\nan en\na ita\nâĿ¤ï¸ı ðŁĴĭ\nsk its\nmar ky\nic ke\neuro cup\ndge e\nwhal en\nw cnc\nthe jeepmafia\ntear th\nmurray field\nlakel and\ngo cats\nfur t\ncongr at\nv air\nther mia\nsnoqual mie\nsk ri\nj q\ngeo de\nf locking\nav ak\nart z\nyou sef\nvi gn\ntre n\nt ür\nrejuven ating\nmaje stic\nlay er\nim passioned\nfel ted\nfac up\ncruci fix\nrac on\nprop ylene\nprag ya\nmer ion\nmaj lis\nlumin osity\nli fer\nko eman\ngold cup\nfamilies belong\net ly\nchri ssie\nwhere i\npre sa\nmues li\nkit sune\ni wan\nhat sune\nen cer\nchang a\nsoren sen\nha ste\nbrook side\nade pt\nãĥ ķ\nwater bury\nw man\nnew some\nana x\nðŁĮĪ ðŁĮĪ\ntunbridge wells\nthu le\nmanas sas\nlur ks\nle ting\nk mov\nho ss\nhel ton\nab ell\nðŁį Ĩ\nâĺ¹ ï¸ı\nsch ir\nlan dof\nhu ay\nga ol\nðŁİ ŀ\nyl er\ntre ati\nth ay\ntex pre\nspla shes\nshan ah\nscar amu\nrrrr rr\nody sse\nkuz net\nir reversible\ncu fc\ncon tri\nw ys\nstam pa\nperfect shot\npanam era\nlom as\ndiab ol\nchief skingdom\nact sof\nðŁĺ± ðŁĺį\nti gres\nsing along\nsilk road\nmal vern\nkis sonline\ngujar at\ndesh mukh\nanne cy\ntele phony\nre vis\npa ak\nmi kk\nm hc\nhy nd\nhol stein\nho garth\ngry phon\ncute animals\nclassic fm\nble ms\nsk ind\nscre amer\nmusic producer\nendo don\nem en\nav anti\nrhode island\nmedicare forall\nmd x\nla belle\name dia\nalbe marle\nðŁij Ĺ\nthan h\nsi f\npre viewed\no sinbajo\nmm k\nis an\nge de\ne del\ncommon sense\nclown fish\nbas al\nana is\nìŀ ¥\ny vr\nvie ws\nthel and\nsy l\npre schoolers\nj omo\nhoo sier\nfotogra f\nelong ated\náµ ī\npa inst\nna han\ncenota ph\nwh p\nti vist\ns words\nreleasethe memo\nmika ela\nle duc\neng li\nder n\nbrown field\naf n\na version\nâĿ¤ï¸ı ðŁĴļ\nwen de\nmosa ic\nmargin ally\nma zi\nku ll\nharb inger\ncocac ol\nar apa\napl enty\nus an\nto zer\ntai me\nsick lec\nlife lessons\nkirk uk\nkat elyn\nga an\nag lio\nå¤ ©\nâĸ Ķ\nutil ising\ns fan\nprovol one\nper n\nmon astic\nmi go\nlu mens\nhoo die\nes me\ndare devils\nais les\nsph one\nrou th\np nb\nover lapping\nor ds\nnorwe gian\nir fan\nhus q\ngoo fball\nd zi\ncro ce\ncap i\nbu sk\nus djpy\nsy man\nlondon er\nky un\nhospital ised\nfelic itated\nwildlife day\nreven ant\nre tic\npo cky\npi zar\nos d\nne ment\nmi sta\nmanu ka\nlin gh\ng ned\nevangel icals\ncy dia\nðŁİĥ ðŁİĥ\nðŁ¦ Į\ntopo graphy\nss cotland\npor tico\nmore tti\nmor de\nk q\ncolori st\nassi es\nae o\na hern\nseap lane\nred bridge\nra ft\nomo vie\nl viv\nkl f\njewel er\ngg wp\nfalcon er\ndi plo\nall american\nðŁĺ ¯\nðŁĴ Ń\nto ba\nsrar auf\nmo ar\nma una\nlic ht\nkla srarauf\ndora emon\nbar is\nðŁĩ¨ðŁĩ ¿\nsy ch\npun tland\npar ade\nobsc ured\njiha dis\ne tti\ncap tioned\nbab oon\ntic on\nstor i\nrespec tyourself\npu tri\np ce\nnpg london\nmar cell\nclari fying\nchapp y\nca as\nbroad casted\nnikk or\ne bc\ncli ppings\nyan kovic\nsh ali\nsanjose sharks\nsalt water\nre tty\nprescri be\nperil ous\nla fd\njon o\ncam ber\nbra ke\n// //\nxin hua\ntre mor\nthe david\nscann ers\nsan gh\nlubric ant\nit za\ndaun tless\nsolo ists\nnighthaw k\ngolf channel\ngo rey\ngin kgo\ndiet itians\nann as\nðŁij¼ ðŁı¼\nâĨ IJ\nwall ingford\nvisit england\ntom ford\nthrif ty\nsher aton\nrite ish\nridel ondon\npersi sted\npan er\nma ir\nic ao\nhi jack\ng so\nblo em\nbant ams\nway side\ntor toi\nt dot\nstupend ous\npark shinhye\nmer man\nmar zi\njab s\nglasto fest\nco fe\nbrah man\nboon dock\napostro phe\nðŁijıðŁijı ðŁijı\nzak aria\nyar row\nwor den\nph l\nom my\nli bt\nhall am\nha yes\ngun slinger\ngir oux\nfrei ghter\ncannabino ids\ntorn ado\nra fre\npor th\nor ban\nnewmusic alert\nitsyour wales\ncelebr ation\nÑĢ а\ntho t\ntar leton\nt cl\nri fe\nmann heim\nludhi ana\nkero sene\njud son\ne qt\ndisrup tors\ndg p\ncr ac\nbeati ful\nbarunsobti says\nau p\nandre am\nvet te\nswar a\nshort ening\nmob b\nf hm\nbhak ti\naz usa\nyu ba\nys u\nwedg wood\nsmi reland\nsm alling\nsh m\nn ino\nhourof code\nfood blog\nebon y\ndag gers\nv da\ntri pper\nshi elding\nour future\nman ama\nd bc\nche x\ncandi ds\nìĦ ľ\nаР»\nsu spending\nstro ll\nconglomer ate\nxbox share\nw had\nuphol ding\nk sp\nic sc\nhow lin\nha inan\ngiftsfor her\ndoes nt\nbellat wins\nanim at\nmy nameis\nlau ded\nland t\nla sik\njen morrison\ninstaf ood\ndud ley\ndelic ately\nbiggbos stamil\na island\ny ani\nwro claw\nsel enium\nru ise\nri poff\nra ab\nprospec tus\nnu bian\nmis fortune\nin focus\nich en\nhh n\nfl w\ncru ces\nbu hay\nwol ds\ntoo oo\nrow ing\npen nine\npar son\nmagnific ence\nm elia\nlo or\nkam oto\nhi mm\ngood woo\nbuck ling\nboy friend\nvolunteer ism\ntwitch tv\nregi mental\npet te\nnew son\nne po\nnar i\nhen ney\ngag s\next inguish\nds w\nbalance forbetter\nay tay\nabo realis\nye ahhhh\nwash able\nlang ham\ninfo comm\nfiance e\net n\nchem ically\nannivers aries\nå ĵ\nto ve\nspon ges\nsi mbu\nsh ir\nsand storm\npull in\nhigh rise\nave ga\naddition ally\nvi har\nne mato\nmicro max\nfe ira\nenab ler\nconduc tivity\nchri sg\nìĬ¤ íĬ¸\npos ner\npha ge\nha dh\ncolli ery\nch els\nbur lington\nant man\nal v\nun fao\nstorm troopers\nsmy the\nsc ough\ng lyn\nfan expo\nel kins\napat rick\nðŁĩªðŁĩ ¬\npro fu\nan them\ntou ssaint\nti go\nswi g\nom iya\nof champions\nkir chen\ngargo yle\nf nr\neat eries\nbra xton\nbleed green\nano brien\n! ?"\nwali d\nti xs\nsho wn\nrr c\nlo de\nhungari angp\ngott fried\nforsy the\nboo king\nab ooks\nwal pole\nve the\nte ds\nstr angel\npad dles\nom gg\nmun n\ngri sw\ngri mm\ngl er\nde bon\ncoom bs\nchief tain\nur ls\ntake that\nstill life\nre ch\nluf tw\nkang daniel\nflood lights\nenough isenough\nbra i\na ek\nðŁĴ° ðŁĴ°\nworldr x\nwe sthe\nthr i\nscree ching\nobel isk\nmy elo\niz i\nh sp\nfute bol\nem bry\nðŁı½ âĢįâĻĢï¸ı\nristor ante\npa isa\nny y\nmobil ity\ninfor mant\nchristmas gifts\nwy ch\njenmorrison live\ngru eling\nblu ee\nviswas am\nth ng\ntaste buds\nt gi\nrack ers\nokla ed\nmu sed\nmr f\nmol ine\ngiftfor her\nfettucc ine\ndistingui shing\ncomple ments\nc ce\nwi x\nwal trip\nvirgin ia\numb il\nstra sse\ns vit\nre mi\nle sp\nfeb vre\ncu se\nchri sl\n.. (\ntw u\nspecul ate\nru tter\nobe dient\nmÄģ ori\nmo dal\nlan de\nkla xon\ng ere\nclau stro\nauto biographical\nac s\nðŁĺĬðŁĺĬ ðŁĺĬðŁĺĬ\nãĤ ĭ\nstar lings\nlur k\nblack magic\nbart news\nath abas\npress release\nphil o\npat el\nou lt\nmagell an\nlen ation\nfor progress\nfin nair\ncow girls\nsat sang\npenn ines\nlo tro\nkvit ova\ngro ssly\nfer ment\ndu chess\ndo is\nb hu\nsal ter\npresu mp\nlock er\nkrun gy\ning ar\ner vin\neffi gy\ndur st\naraf at\nw ma\nrevolution ized\nq r\npo pl\nlur cher\nk ora\ngoo fing\natur ner\ntrans link\nt ard\nsu baru\nsn ba\nridge way\npet es\ning ram\nescal ade\ncup head\nbul an\nanchor down\nðŁĴģ ðŁı½\nðŁijĩ ðŁı½\nze an\nwish bone\njimi hendrix\nj post\ninjec tor\nhom in\nh ine\ndr acon\nbeni off\nbaby doll\n\' ).\nwoo o\nur sa\nthesp ian\nmik kelsen\nlow o\nki yo\ngetin spired\nfor bidden\ncan aries\nble us\nbibli ophile\nspla shed\nseis mo\ns view\nprohi bits\nnar cos\nnan twich\nmil led\ngian luca\ncat stagram\nbo ge\nar it\nmid winter\njosh groban\ncat lover\nca sement\nadvoc ated\nact now\nzu shi\nratat ouille\nmom oa\nenti als\ncou ches\ncollege football\ncis d\nced ars\nbra gg\nìľ Ħë\nwen g\nnuig alway\nno ona\nmer rell\nlu o\nju in\nheg de\ngun pla\ndi ma\ndah lone\nbr z\nbj ym\nwal sh\nteach ers\npap illon\nmo gu\nkru ger\nk elling\nimpur ities\ndon ga\ncasca dia\nbot l\nale y\n.. :)\n® ,\nsandwich ed\nsag aftra\nmor mons\nire ne\nir un\ndru cker\nalexand ra\naap i\nðŁij¨ ðŁı»âĢį\n๠Ĩ\nze ko\nlangue doc\nju mma\ninfir mary\nf ice\ne ers\nder matologist\ncu cina\ncontradic tions\ncol ino\nco ley\nay ya\n<< <<\nw tsp\nthe who\nsl inging\nrappor teur\nor gy\ng cats\ndavid bowie\nbag gins\nab hor\nsoo hyun\nrevers es\nr ya\nou de\nmaha bharata\nigle sia\nford performance\nec mwf\ndispat ches\ncheno weth\nìĿ¸íĶ¼ëĭĪ íĬ¸\nver tex\nshab ana\nreho both\nrand yorton\npi ste\nom ber\nol ondon\nob scen\nha chi\nvisit britain\nthel ost\nre affirms\nmor g\nm sm\nlet the\njan itor\nim pedi\nfuer te\ndhoo m\ncbc mb\nben and\narmeniang enocide\nte vin\nste aler\nq aland\nlec rae\nlat ent\ndisappear ances\nbe to\nas kew\nalab use\nshar ky\nsc r\nsat ter\nsa ward\nresurrec t\nreper tory\nra ver\nmulticul turalism\nliber ator\nkri sh\nhor acio\nhell yeah\nhal lie\neuro basket\ncin der\namar ket\ntu dor\nsou k\nomor ph\nmar tha\nlo pe\nhur t\nbm f\nadvoc ate\nun willing\nun licensed\nrabb is\npuyal lup\npar rot\nhail wv\ngri ss\nen cased\nconfir m\nchee ch\nam bi\nsix teenth\nrescue dogs\nremo vals\nreg gio\npl under\npainte d\nla ve\nk pl\niti ves\nexempli fies\ncron ies\në¸Ķë ŀ\nvogue team\ntv g\nopening night\nmcgin ley\ngod less\ner asure\nde bian\nbo whun\nãĢ ½ï¸ı\nsy bil\nri me\npo tro\ngeaux tigers\nel sin\ndahlone ga\ncomedy central\nclu be\nbuy back\nbl end\n!!! ...\nw yan\nturk meni\npu ro\nprodig al\npit bulls\nmat ric\nk appa\nil yn\nhe heh\nfil er\nf enders\nwk d\nqu ora\nfau t\ncou ps\nco stanza\nann avy\nâĿ ¯\nmin x\nimplic ated\nhandker chief\nep d\ne ker\nbel fas\nac umen\nsc al\npi de\nnew man\ninspir on\nfox tel\nclean air\nchihuahu as\nc zak\nðŁİĦ ðŁİģ\nword press\nthisisd sp\nsigni fies\nmanne quins\ngra ven\ndingh y\nbro lin\ns kie\npuzz led\nmerci less\ngro mit\nfier y\nexpand able\nequi val\nbut toned\nðŁı¼ âĢį\nyel fie\ny tes\nlamar r\ngro m\nfor peace\ncp t\nca str\nbeat box\nbak elite\nwrong doing\nresusc itation\nhan ford\ngo bi\ndepart mental\ncycli c\nan um\ná ī\nri shab\nmce wan\nkang an\nencoun tering\nbat ra\nsh rey\nli at\nlean startup\ncliff hanger\nchir ping\nc va\napple podcasts\nad trip\nabsur dity\n:: ::\nw ku\nso das\nsa ku\nprioriti zing\nnetflix uk\nmar zio\nken n\ndermat itis\nðŁĴļ ðŁĴĽ\nwhim sy\nvapori zer\ntre ks\ntele scopic\nscam mer\npre sci\nme tag\niri on\nfeature tte\nbe f\na ath\n⤠µ\nwork ers\nsur ry\nri us\nmyth busters\nlu ll\ncoo gan\ncerve za\nbeauti fication\naty pical\nan az\nzen fone\nx xiii\nti gre\nlor n\nl to\neccle stone\nder t\nbo fficial\nvir gins\nuten sil\nto efl\nsub woofer\npur nima\nnak ba\nmo hawk\nguatem alan\nexperim ent\nencom passes\nbotan ic\nbad shah\nservic enow\npass age\noxid ative\nme f\nma us\nho ga\ngimb al\ngent ile\ners ons\ndoro thy\nburle son\nboo zer\nà° ²\nwipe out\nvari ance\nsc c\no boe\ngun z\ngran di\ncountry men\ncohe sive\nansw er\ná Ĭ\nway nero\nti mur\nshuff ling\nple c\nhunter hayes\nbasti en\nbankno tes\nvast ava\nu hs\npun chy\npent a\nmarketing strategy\nhein z\nfrau ds\nfoam posite\nee a\nchry salis\nbo as\nðŁĶĬ ðŁĶĬ\ntouri smireland\nsarko zy\nprint maker\nkian lawley\nhu ddled\ndu sseldorf\nchron ological\ncat box\ny ali\nsch lu\nsc ast\nmun go\nlon er\njel lies\ng agar\ndat or\nbo ils\nber i\nandro gy\nwood burn\nwinter olympics\nvene w\ntre monti\nsupp le\nsouth wold\nplu shies\nover shadowed\ntemb lor\nst w\nspra gue\nre discovering\nol lie\nma thur\nlall ana\nk tb\nero tic\nburger king\nbiz party\néģ ĵ\nup ta\nthisi se\niniti ating\nimag ed\ngo army\ncrooked hillary\ncro well\narab i\namher st\nðŁijį ðŁĺĬ\nzi ppy\nx ctf\nwe ah\ntrickor treat\nteix eira\nreluct antly\nmamat aofficial\nfreder ik\nfor gives\nfly er\nclair voy\nacy cling\nðŁij °\nsi ppy\nschu yler\nin voluntary\nh ite\ngl ories\nfac ial\nas you\nark ali\num bra\nsta dio\no iled\nnad ler\ncharli es\nabol itionist\nwar io\nt ct\nsqua shed\nno way\nmegan e\nkon ta\nin doctrin\nhowar th\naz uma\nale house\nacti ves\nach an\nstand outs\nsear ing\nharinge y\ngr ana\nexoplan ets\ncab ar\nap ach\nstre p\nsquare enix\npin ky\npet its\nne gre\nmorph ine\nmer on\ne on\ndro pper\nd pw\nar aj\nadi o\nyu eng\nsur facing\nsc ampi\nsa if\nrut ledge\nmen cap\nim practical\ncharlie puth\nze tti\nsaw grass\nrox ie\nmul ling\nhu w\neng chat\ndr j\nclub man\nbo tics\nav ell\nu cm\ntecum seh\nre runs\nop on\nome trics\nman x\njes y\nin laid\ngrazi ano\nch ella\ncal derdale\nall red\nภ¸\nsea water\nmo les\nlauren t\nkra us\nground hog\nfeder alist\nda es\nx peri\nst elle\npati os\no tra\nnt ds\nn bl\nmitch el\nkingof the\nki ley\nhom en\nge tre\ndise mbo\nden sely\ncolumb o\ncarbon ated\naf ra\nwa ilers\nro pa\non top\nne f\nmou ss\nm hs\nind veng\nfan boys\nbas kin\n" .....\nju manji\ngr w\ngovernor ate\ngen flynn\nfl i\nep au\ncont ador\nca di\naa ja\nzu zu\nta kingly\nspecial ise\nsc lass\ns fe\nra ic\nluftw affe\nhack en\ngar bo\nand field\nam li\nalcan tara\ntb il\ntamiz ha\nom m\nne ma\nnatural gas\nli man\nhand s\nfil min\nboom box\nvol l\nun apologe\nswif ties\nste els\nsar ro\nnar rowing\nj ll\nfoo te\nei leen\nbasel world\næ ī\nwil kie\nwes tham\nturkmeni stan\nth wick\nt asking\nsil vers\nrepe l\nre arranged\nout puts\nmiy amoto\nmiti gating\nilo va\nfe ss\nfast back\ncul lin\nche ch\ncb d\n! ðŁļ¨\nvisu alized\ntru man\nse ager\nsd wx\nco bo\nwor ry\nstrate gic\npok al\nmi p\nfro y\nex cision\nang ell\nðŁij¨âĢį ðŁij©âĢį\nzz or\nsubterran ean\npom p\nmesotheli oma\nli ao\nir at\ni ap\ngod addy\net en\ndragon age\ncatch up\n# (\ntum ours\nthe star\nrho ads\npi gg\nori anthi\njeep ers\ninfra structures\nhar shad\nhal os\nha ver\nday al\nb si\nb se\nac yday\nsl m\nmu jer\nmor atorium\nmon go\nlo is\nbw f\nspani ard\nmusculo skeletal\nmis ra\ni ks\n!! :)\nwi eder\ns á\nn ts\nmoo g\nci bo\nyr sof\nyoung and\nye son\nw myb\nsvet lana\nmam o\njy pe\ndor sal\naf zal\nre cherche\nra gu\nhy dari\nhin os\nacrob atic\nup tick\ntel ugu\nso so\nrad hi\nmu guru\ninfe ct\ngosp els\ndown es\nded ness\nðŁį¾ ðŁį¾\nxen ophobic\nra kow\npe h\nmedi as\nju s\ndv c\nðŁIJ ŀ\ntrack side\ntess ell\nrhy l\npoli shes\nmal nourished\nlar va\nicon ic\nhol der\nfor ç\nfar ron\nchev al\ncas sis\nc ich\nball ant\nwester ns\ntu tu\ntat ters\nrich t\nneander thal\njo akim\ninsati able\nhoar der\nfran ky\nfla v\nwomensmar ch\ntraff icked\nthe gathering\nte eth\nsho ving\nper cy\non so\nnic hk\nnancy ajram\nkir stie\njab bar\ngr ingo\nfair trade\ndemo iselle\nsch a\nmadam e\nbrah ma\nag am\næĿ± äº\nyoshi ki\nsouthern most\nra po\npre eti\nou g\nmc shane\nmani k\nkad er\ncar ole\nbol ger\nðŁIJ ı\ntattoo ing\nsketch note\npoker stars\nip tv\ncb u\nank ita\nı @\nsat uk\nregur git\nph oning\no akes\nneu ville\njor don\nbre uer\nas sini\nap en\ntran g\nte w\nmn g\nm te\nm so\nky ri\ngossip girl\nb ck\nab ro\nwy er\nventure beat\nmesopotam ia\nin crimin\nhel mand\nha iti\nha it\ngro sse\ndar den\ncli matic\nç§ģãģ® ä¸ĸçķĮ\nwh e\nsm ill\nrising star\npercent ages\nmu ddy\nmodu lar\nkit ted\nje une\nis in\nincur red\nfir stre\ncommunic ated\nbt sin\nðŁ¤¦ âĢįâĻĢï¸ı\nzapp os\nwin es\ntortoi se\nswan sea\nshoot around\nri ding\nhi ga\ndi van\natt led\nstiff ness\nstereo typical\nsatur n\nphilipp ine\nmati as\nkhar toum\nj dt\nhend rik\nconsul ted\name c\nx finity\nvoic es\nun grateful\nlizz ie\nlar p\neur onews\nac n\nru mah\npan icked\nmen u\nla grange\ngo lions\ngam eday\ndk ny\nwinter ing\nwill never\nte us\nt vac\nsu ma\nsanctu aries\nin justices\nfi ore\ndance music\nán dez\nzeal ous\nrobin hood\nriver bank\nman zano\ngy i\ngati ss\nfritt ata\nenthusi ast\nclu se\nba res\nto po\nspartan race\nsha key\nsh ue\nqueens ferry\nmur ri\ni biz\nhurrican ef\nhi mi\nflow chart\ndilu ted\nac sports\nï ·\np sp\noc y\ninc ite\ncorn elia\nco very\nsim ile\nscuder ia\nrot ator\nop to\nhar ish\neaster sunday\ndish one\nch back\nðŁı İ\nwest point\nst eller\nsearch able\npad ang\nmon goose\nmalcol m\nhanni bal\ngr n\nfar ting\nemili ano\nmay berry\ngal braith\nex pulsion\ndow ne\ncongreg ational\nbar bie\nyb nl\noladi po\nnus rat\nmor nington\nmaurit ania\nkag ut\nk th\nju ror\nhib bert\nd va\nbri k\nschnei der\nmotley crue\nlive your\nhospital ity\ngul ation\nfor ty\nfaç ade\nfair port\nely sium\nde ion\ncome backs\ncli part\nad af\nw pp\nun restricted\ntop anga\ntony stewart\nrare disease\nou trage\nmen ow\ngand ol\nas al\nambigu ity\ntt alk\nsti m\nre used\nmar lin\nil han\nfle dg\neun ji\nchi le\nby nr\n+ !\nzom ato\nwed ge\nnewly wed\nmis management\nmi f\nm alling\nlo fts\nho or\nfield hockey\nbally mena\nbal las\níĻ Ķ\nyo ff\nworld healthday\ntin der\nship man\npa ok\nnhl flames\nma kayla\nbay t\nsto ve\nru dder\nraj at\nra iler\npen e\nmercedesam g\nim on\ni ee\nbrow der\nadren al\nx ed\nskeg ness\nsill iness\nsc lassic\npe pa\nfit t\ndiss olution\ncopa america\nbook lets\nate urs\nasahe b\naln wick\nthe hobby\ntaran aki\nshan k\nrep john\nour ses\nmobili zing\niso tope\ngan z\nðŁķ ¯\nvis count\nval les\nv se\nsk enya\nschau b\nplay mate\npark scanada\nma ren\nju wa\nbu mb\nbe rea\nam orph\nwaist coat\npiti ful\nna ji\nl fl\ning news\nt mobile\nnami bian\njan sson\nhand son\nev n\ncatbox sunday\nbhak ts\nspe y\nsky rocket\never t\ny ab\nwen n\nve k\ntravel photo\nti ere\nski ppy\nsa ab\nqui er\npayo ff\nmiller lite\nj ps\nemb attled\nel ma\ndepos itory\ncomplac ency\nco h\nansel mo\nshow ings\nshi ro\nse ger\np fl\nmat ti\nknight sbridge\ndumb arton\ncon son\nbee ston\nasci i\nworldre cord\ntim mins\nmen ssoccer\nkilau ea\njo van\ndeni ers\nbeach side\ntran scripts\npunjab i\npre ssion\non ov\nmusic hall\njam ar\nerr one\nep en\ndemocr atic\ncontra band\n& ...\nsu mp\nsk ov\nray ne\nmur ali\nm eric\ned ays\ncu test\ncon roe\nbra unf\nab in\nðŁĺĤ ðŁijį\nsyl van\nprocrastin ate\nla var\nfing al\nak ind\nadmi res\nठĹ\ntreat ers\ntre mbling\nral phie\np bis\nhand outs\nsam o\nli one\ngriev ance\nco tes\ncaliforni a\nbis cotti\nstock ton\nsitec ore\npodi atry\nin ky\nic ici\nfil lets\nfail te\ne pub\ndomin ik\nday trading\nbraunf els\num b\ntro phic\ntric olor\nther ules\nspl c\nse con\npaint brush\nor ry\nni zam\nnat weets\nmetal head\nmam moo\nesopha geal\nde celer\nallthe way\nac at\nyn g\nsh elly\npoi rot\nmon cri\nfra z\nðŁij ®\nå¹ ´\nyul in\nutil ise\ntak is\nstilet tos\nri v\nrein carn\nre imagine\npl p\nner t\nki shi\nkaiser tone\nga iner\ndier ksb\ndeptof defense\ncut throat\nchuk ka\nblack friars\nalam bert\nak vari\nad om\nwr ld\nwkr n\nw pl\ntale za\nta unt\nspey side\npunch line\noriginal character\nmaz el\nhelp ing\nhar ries\nbl aring\nbag ger\naccommod ating\npredecess ors\nperis cope\nle ish\nd illa\nconfe ssional\nth yo\nsho pper\nroyal visit\nmeridi an\nme is\nlovethe darts\nkitchen aid\niti onal\nit son\nhin de\nha ss\ngigat own\nfri ghts\nfeast day\nðŁIJ ĵ\nsi ima\nray burn\nmercedes benz\nford nation\ncont ented\napp i\nre butt\nqui k\nqu and\nmuguru za\nl ss\nkan colle\nip r\nfo wey\ndirec tives\ncar is\ncan nock\nat ment\nair flow\nwest pac\nwdy t\ntrave sty\nthe artof\ns fi\nre ale\npa ws\nnew song\nnapol itano\nmess er\nlo fo\nke dar\ndavid guetta\nastu te\nðŁij¸ ðŁı¼\nta an\nferri ss\nbu chan\namuse veni\nsho vels\nnewsle tters\nho tly\nhen sley\nge dd\ng ingham\nesc am\ndrum roll\ncar dle\nâĻ ł\nspir ito\nspeci fic\nskill s\nleg alizing\ndaw ood\nbb cn\n{ "\nzo oming\nval erian\ntand on\nsk un\npark view\npaper craft\nmr c\ncon traction\nbeautiful destinations\ntas er\nshaw ks\nsalt lake\nple y\npessi mistic\njae ger\nide e\ngor ges\ngar am\nclo thing\ncl ink\ncent enni\nali ab\nta sters\nsit ges\nmo shi\nji iva\nhar borough\nfirstworld problems\natri sts\n# $\nðŁį ¿\nun professional\ntre ach\nteam work\ns ills\ngaz ette\nfinger scrossed\nb pc\nundeni ably\nth g\nmo hand\nkagut amuseveni\nhaw ken\ners world\ndaily art\nbalay age\nwatch us\nth ame\nsustainable development\nre iter\nol ica\nlucy hale\nku ba\nfoucau lt\ncrime stoppers\ncre pt\nchoo sel\nas w\nambassad or\n. ðŁĻı\nu omo\nki me\ncheck points\nwing ate\nsau ber\nnor ton\nmei ster\nlec oul\nkar yn\nduc a\ncor te\nak aya\na sic\nshort stories\ngol ly\nelli sts\nbour se\nstrol ls\nniagar afalls\nnewyear s\nn ines\nlor ain\nle win\ngeor die\nath lon\nun knowingly\nhan go\nbo dice\nbay onet\ntu mi\nstr ick\nr ity\nmis susa\nle el\ngarth brooks\nf mc\nas ss\ns ate\nron ics\nguer re\nger u\nexfoli ating\na ak\nwoo ten\nsubur bia\nse wer\nmecklen burg\nken shin\ndj o\nde wi\ncol ston\nblue star\nblanc pain\ntransc ends\nte ma\nscrib able\nschi ele\nmo ff\nis sey\nindi ab\ncu bed\ncand i\nalp has\nalle ge\nðŁ ĥ\nr he\np fp\nnew west\nlack aw\nh ree\ncru mbles\nal ap\nwthr com\nto kio\nstate side\nsit is\nse vern\nro mb\nico se\ngri sham\nfla gging\ncom posure\ncathe ter\ncan ines\nðŁį Ĺ\nz la\nv ander\nmom oland\nhil ux\ngar nished\ncoven try\nbi gi\nstu cco\noo ty\nkac ey\nguess the\ngoose berry\nfor it\ndeath match\nali bre\naf ari\nab cs\nval our\nsush ant\nra hal\npubl ics\nlati mer\nk oop\nh iss\ngo oner\ng pc\nf tv\ncon front\nc ada\narchi ving\napo logist\nå Ĵ\nØ§Ø ¨\nstl wx\nsmall holder\nreta iling\nrecording studio\nof sky\nle le\ndesol ate\nalgorith mic\níķ ľ\nwy k\nvers ed\ntre spass\ntake it\npr aline\nnue stras\nmat thar\nli psy\nky lian\nfli pp\nfa wards\nclar ine\nall lll\nsta ar\nscaramu cci\nreas sure\nkir ch\nj cp\ncommend able\nbank roll\nbaf fling\nangel a\nðŁĸ Į\ntre mont\nspook tacular\nraj kot\nkent a\nhome stay\nho even\nfontaine bleau\ndecapit ated\nar abe\napril ia\nthorn hill\ntat t\nsi bir\nno limits\nnewze aland\nnaz ir\nmorph in\nla ken\nhinch cliffe\ngor se\ngaz prom\nfit n\ndefici encies\nd ool\nbohemi an\nar ad\nz ax\ntambour ine\nsp elman\nmulti modal\nmilleni als\nmelt zer\nhenry cavill\nhan ia\nw zz\nsever us\nplanned parenthood\nni b\nmultip lied\ncal lum\nbe inspired\nðŁĺĤ ðŁĺ©\nyq g\nuk weather\nlaundro mat\nkir stin\nip i\nfair ground\ndi vision\nd ando\nbe als\nbased god\nâģ£ âģ£\nwhis kies\nweak ens\nto watch\nte pp\nseash ell\npa inter\no ast\ninde scribable\ng ani\nel rufai\ndevil ish\nbo capsule\nbha ji\nyeez us\nwork sop\nques ad\nphosp hor\nmo ffe\nlan z\nindi scri\nid d\ngiz modo\nel pas\nco als\nchim era\ncarbo hydrate\nam oment\nsta at\nsof tener\nshrin ks\nplate lets\nok la\ndi b\ndeplor ables\ncar ling\ncal gar\nbreath takingly\nann n\nðŁijĮ ðŁĺĤ\nж ив\nze m\nwhite haven\nwe isse\nvirat kohli\nsc ap\nfir ma\nco rea\nc mi\nðŁķ °\nðŁı ij\npn p\nmess er\ngue sting\ngran tee\ngi st\nche ater\nbur na\nak im\nuni birmingham\nkan di\nher tha\nfeli pe\nb bery\nsuper dome\nos f\nmid town\nletter box\nla far\njuni o\nfood trucks\nfish man\nâĺĿ ï¸ı\nwest bengal\nu up\nspla yer\npatri k\nman gan\nkram pus\nhyalur onic\nfra un\ncuri ou\ncharl ton\nbike share\nbah ay\nstuden tath\nn ant\nd hillon\ncre ssi\nar ta\ntwitch streamer\nsnake skin\nsaura bh\npre maturely\nfrankin cense\nconden ser\ncapp ado\ntweetab ondthatcantbebroken\nti ms\nman cave\njal en\nhand i\ncafer acer\nbar ger\nas ena\n" >\nwic can\nver de\nstanding rock\npuri fying\npaste ur\ngal t\nfc king\ndierksb entley\ncar away\nbatt lero\nasse m\nad week\nðŁIJ Ľ\nus am\nthor pes\nsupervis ory\nsc lub\npas saic\nmil la\nform al\n° )\ntravel theworld\nti sha\npic t\nper oni\nlore to\nku y\nff m\nwatch this\nu lam\nmedit ations\nemb assy\nbir o\nwheel chairs\nsu pers\nsi me\nrun corn\nne to\nke ke\nhun ts\ndonut day\nci ders\nbrief ings\nbren ton\nãĥķãĤ¡ ãĤ¤\nwe den\ntumul tuous\ntr ine\nshaqu ille\nran goon\npal pable\ngeri atric\nea stere\ncfb playoff\nbrun ner\napro pos\nðŁĩµðŁĩ °\nw fm\ntee ter\nod f\nnov artis\nni jme\nn tw\nmatsu moto\nintersec tionality\nham ed\ncontex tu\navengersin finity\nsd ale\nnat o\nmac gregor\ngar ber\nele m\nc ps\nbay elsa\nback fired\nanal ge\nni u\nmini aturi\nli fers\nke dah\nai mee\nad dy\nðŁĺĤ ðŁĺħ\nwp tv\ntrouble some\nli ani\ndeep water\nðŁı ł\nwor sley\nw un\nsi sley\ns fight\nmai mane\nlong itude\nec lare\nck a\ncabine try\nbrook lands\nanastasi a\nvonne gut\nswat h\nscience week\nmutu a\ncan oes\nbrun n\naishwaryar ai\nvesu vius\ntravel bloggers\ntraumati zed\nte din\nshaf tesbury\nprow ler\nni bble\nmi ko\nes mer\ncrock pot\nwaynero oney\nun harmed\nspell bound\ns ram\nplay suit\nman che\nfraud sters\nfore shore\ndu gan\nask the\nvol go\nsav ant\npar si\nol le\nlook s\nfu mi\nfais al\nexor cism\ncandi da\nwl w\nvin yasa\nvent v\nurban ization\ntam imi\nsports betting\nshar ma\nrejo icing\ngla sse\ndar aa\nd fat\nbb j\nbankno te\nanonym ity\nwhi zz\nshiv ratri\nri vas\npopo vich\nmil dew\njimmy kimmel\ngon er\nfrag mentation\ne aves\naffi davit\nnott m\nfa ires\ndr l\ndeeplear n\nde scu\ncare lli\nbra bant\n-__ _-\nðŁĵ Ħ\nthe hungergames\nschem ing\nro tisserie\nri pa\npresent e\nover crowding\nfear lessly\ncer rone\nvic theatre\nukbusiness rt\nsubstitu ted\nshut outs\npau lette\npal ing\nola unch\nhenne pin\nbow man\na was\nyaw ning\nwith am\nvs fashionshow\nver ture\ntra b\nth ath\nst peter\nross endale\nmay an\nheritage day\nf mi\nca ith\nbel gra\ntavi stock\nsur ged\nstr am\nra tha\nprem rugby\nny cacc\nmor ay\nfiftyshades darker\nfayo se\nen actment\nconden sation\ncarra gher\nbritish vogue\nbom ba\napric ots\nalessi o\nwar tho\nsex es\npra veen\nlis berger\nki bum\nfrac tional\new tn\nconco ction\ncater ina\nam aker\nsymbi osis\nsupre mo\nsesame street\npolok wane\nnew burgh\nkhal i\nk agan\ndi pp\nbroad bent\nboni face\nauror aborealis\nภĸ\nsub way\nscreen printing\nh ati\ndc universe\nvicar age\nu ah\ntiger zinda\nstol en\nspace man\nsam ple\npil kington\nmedi ator\nlu mps\njoyful leaders\ne ason\nbe agles\nparen ting\npadra ig\nobli que\nma es\ninst ar\nhar git\ngen ie\nde em\ncbs sports\nback stop\nvern ay\nt sur\nrock hall\nnight stand\nmusc lecar\njourn alis\neff erve\ndo zer\ndarken ed\ncu per\ncol ne\nbrook ings\nworld premiere\nvel ma\nsouth dakota\nsh inning\ns ically\nle er\nelo ck\ndi pika\nwinni peg\nwa an\nvaccin ate\nsi ms\nsho x\nq t\noli o\nnet ball\nmc as\nmagni fique\nma ples\ni kar\nhow ells\nv ence\nrichar dd\npur ina\nmend ra\nje z\nim is\nh tt\nforthelove of\nfight night\nexhi b\nearth bound\ne sol\nbutter worth\nblo c\nbi ol\nbefore you\nãĤ¹ãĥ Ī\n¡ ¡¡\nwc th\ntom mie\nth art\nstra ys\nspeop le\nsh we\nsea hawk\npp et\nol ler\nn si\nme tv\nma kar\nkur ta\nk xip\nk nysna\nfriend zone\nde scan\nbint ang\nas pire\naquari ums\np mr\none perfectshot\nnon linear\nnom ura\nnichk hun\nhe yyy\nfaf bulldog\ndu ane\nall u\nun sig\npower bi\nmill brook\nlion sgate\nbut lins\nbe o\nal ok\nsuspici ons\nr ins\nmid nite\nmam an\nel way\ne bi\nast i\nal ah\nwi ther\nsenn heiser\nplym uni\npan icking\nnight photography\nlecoul tre\nharri et\nclerken well\nci da\nchick adee\ncar tney\ncap tained\nbe te\nam ee\nðŁ¤Ļ ðŁı½\nwhat chu\nscream queens\nk mt\nen heimer\ndont be\nder ive\ndavi dar\ncr and\nëĵ ľë\nâļ ķï¸ı\nwi thr\npe cos\nmar kie\nhat teras\ngarden a\narti stic\nstony brook\npra xis\none w\ngar nered\ne gor\ncrew neck\nbn f\nacon ference\nzoo logical\nu ic\nswe b\nmen ard\nmayo clinic\nlin css\nhu ggins\ndl f\naward winning\nwrest led\ntranqu ill\nre voir\nre charging\npro fo\npro claiming\np tole\njimmykimmel live\ngman ews\ndouche bag\ncle m\nce ylon\naccent ed\naaaa and\nu ks\nsymboli ze\nswan age\nsafety week\nmo si\nlaw fully\nira d\nidit arod\nhen rico\nfir a\nâĻ¥ .\nwak o\nvo ye\nsusp enders\nprobab ilities\nox ley\nhye ong\ngru yere\nauto cad\naccumul ations\n(- :\nðŁĸ¥ ï¸ı\nver os\ntough mudder\nthwar ted\nshor ten\nkoo zie\nkameham eha\njung les\nide ation\nhill ar\nel tham\nchem in\nassini bo\nar cane\nan ai\nab bot\nðŁĮ ĩ\nye un\nsubpo ena\nselvar ag\nred box\nfe eney\nf wc\nab is\n: (\nðŁı½ âĢį\nðŁĩ¿ ðŁĩ\n| âĢ¦\nto read\nmill inery\nle ssi\nfeu dal\nfajar do\ncyn di\nchronic le\nboyl ston\nbeautiful day\nwj sn\nw md\nva g\ntech n\nsumat ran\npre sales\nmind body\nlikefor like\nchro mium\ncha it\nab aker\n~ )\npre ma\nnadin elu\nmissmar is\nmen del\nman sion\nkle enex\nji yong\nin of\nentry way\nbump ers\nau k\nê ±\nstal bans\nrs v\npaddle boarding\nle as\nevo que\nenginak yürek\nem al\ndang elo\nberg dahl\naz ad\namphe tamine\nç «\nz rh\nx ddd\npuzz ling\nmont serrat\nman ns\njesu ss\nhatt a\ncanon ical\nx z\nlun dy\nleav ed\njo dha\nepic fail\nel wood\ndu ali\nconver ters\na et\n!! \'\nz is\nwal z\nv vs\nslo ping\nno str\nmel li\ngraphic novel\ndol o\ncork screw\nul uru\nthe way\nsto k\nspell binding\nru be\nro den\nre ay\ngu shing\nbra wn\nav at\nsu mac\npis sarro\nmano ir\nly nette\ncomprehen sible\nabsor bent\nwinter solstice\nthe q\nshare r\nmur ali\nmm urd\nmd l\nlight skin\ngg g\nel ny\nconsoli dating\ncommand ment\nbur dened\nbin ders\nasi atic\nÎ »\num bro\nsuicide girls\nrail uk\nn ale\nmissmaris racal\nmaster chef\nde generate\nboo sh\naze alia\nunited way\ntechnical analysis\nt ended\nspo kes\nsheep skin\nram ayana\nqueen ie\nje f\ni ana\nh indi\ngra pple\nel itist\nel ap\nd pc\nd mv\nbet cha\nb ape\nðŁijĩ ðŁı¾\nton gs\nshoton iphone\nreli shing\nre pra\npowder puff\nos man\nbu tty\nba ie\naco ke\nthe w\nre making\npl atters\nper jury\nni zam\nmovie poster\nfredri k\nfa sten\nener ge\nel don\nbird day\nwy att\nwh atta\nuygh ur\ntx motorspeedway\nstrau ght\nsta de\npe kka\nki k\ncri spin\ncat t\nayushman nk\nðŁĮ ľ\nweather ford\nvern al\nta stiest\nsuspen sions\ns ada\nperfec tionist\njo go\ndel ving\ncon chit\n. ⾨\ntop friends\nsummar ies\nste wie\nscrat cher\npre sets\nmar ana\nher mano\ng dn\nedm family\nbug sy\nus ical\nste tho\nqu ities\nlin ings\nking swood\ndhar ma\nwil k\nou lu\nori ous\nor om\noptometri st\none se\ner rand\nend y\ndoo bie\ncoo ki\nber tram\nakvari stan\ntorto ises\ntatters alls\nric ular\np ough\nok tober\nnyx cosmetics\nlo oooooooo\nhoi sted\nho des\ndw t\ndist illers\nday light\ncoeli ac\nbo bro\narra igned\ntag uig\nsf pd\npres sure\nflaw lessly\nev geny\nconscienti ous\nbuc ci\nwe can\nthem all\nplu ck\npless ness\nme v\nlab ly\nit te\nar v\nab lack\nwt k\nup tempo\nstil ts\nsma c\njaf fe\nhur ri\nhta fc\nhead quartered\ngul ch\ng ca\nwith drew\nselfle ss\nmeh mood\nla bo\nsunderland afc\nst ens\npotat o\npic card\no go\nmer vyn\nma se\nkoenig segg\nilu str\nhom opho\nhari bo\ndi ario\ncalvin klein\nle ec\nc sharp\napat ow\nal bury\nyellow ish\ny tv\nut ley\nro san\nram snfl\nnational coffeeday\nkuro sawa\njudg ments\nit si\nidio m\nho led\ncl ank\ncitiz ent\ncandi dat\nae g\nwom p\nthe opening\nthe bhf\nshar da\nnorth van\nnas scom\nmm p\ninqu iring\nglu t\ndar te\nsin pics\nsas cha\nre pp\ndo go\nbag gies\nu ottawa\ntu ber\nstor my\nst lv\nre it\nre fil\npalay eroyale\nomo juwa\nmy suru\nlo li\nbio science\nang ello\nace o\nãħ İ\nvictor ians\ntyr ann\ntit o\nsand hill\nous se\nmoneti zation\nmo ka\niz mir\ngr ins\ngentle man\ndisson ance\ndeep avali\ndanic apatrick\npresident trump\npar mar\npain killers\npag asa\norigin ates\nnex us\naspir ants\nwhatever ittakes\nstock well\nste alth\ns de\nl bf\nign an\nher z\ngon da\nfu sc\nfe dor\ndra x\nd arian\nca thr\nama al\nyu t\nspl ice\ns attar\nre sses\nmt f\ninter acts\ninfiltr ate\nhapp end\nden ounces\ncar row\nvir gil\nv vip\nti bles\noce arch\ncour ant\nz adar\nwille ms\nu ze\nsympath ies\nrevi val\npe ase\nou fc\ngren fell\nglobe trotters\ng lin\nfur thering\nfla pper\nwar ds\nraven a\nmit su\neu g\ncated ral\nbex ar\nbe douin\nzi oso\ny aaay\nsg t\nrefin ement\nmol ine\nlam y\nd lamini\nclimate strike\nbythe sea\nbrat ton\nav r\nah ill\nad an\nwolf son\nm ne\nci ak\nchar d\nbright side\nâ¬ĩï¸ı â¬ĩï¸ı\nà¸ļ าà¸\nsch l\nsaniti zer\nmaster plan\nla vish\nkar ant\nhull city\ngur kha\ngat lin\ncom cast\nbi ar\nb ww\nak bar\nx eno\nwo wo\nspin al\nper ts\nic ent\nfamil ial\nally brooke\nà ²\nz oro\nver te\nse mp\nsab ato\nrela p\npuerto vallarta\npe dre\npat ria\nmoo dle\nmake me\nim porter\nfish tank\nf yo\nco pi\nbicy cling\nawil son\nabove andbeyond\nwa ar\ntat a\nsmallbusiness saturday\nrhi an\nko ya\ngr ation\ndict ates\nd tn\nbe it\nðŁ¤ĺ ðŁı½\nx eon\nson akshi\nsch en\nratt led\npro long\ng pp\nfast track\ndr anath\nde central\ncopp ell\nbreath ed\nðŁ¥ İ\nwho dun\nsubmer sible\nscallo ped\nr itten\nmal don\nl hd\njust another\njoseph s\nhope well\nfa stand\ndhar na\nclar ice\nwalk off\nunspeak able\nsp ac\nsoap box\nross r\njay son\nce ps\naf faire\nad minister\nx clusive\ntar f\nspecial ising\nkir ill\nhand som\ndaytime emmys\ncongress men\nceredigi on\nca ix\napc nigeria\nal al\nâĺº âĺºâĺº\nru ps\npop music\nmr and\ngold man\ngi vens\nde ffo\nart sand\nalu a\nviv atech\ntarra gona\nshak in\nsa irport\nrecap ture\npat r\nmano har\nlaw rie\nhi ver\nash am\nÃŃ s\nther m\nsim mon\nreligi ously\nopul ence\nnawazu ddin\nmc ca\nla sso\nbir a\ny ami\ny af\ntele photo\nsu sten\nsego via\nrio de\ngo han\nf bu\ney bl\nclic quot\nbu x\nber ley\nâŀ Ķ\nwal mart\nsar war\nr fs\np ylon\nmign ola\ngo pokes\ncu oco\ncar li\nappreciation week\nanti um\nali yev\nĬãģ Ĺ\nwordsof wisdom\nwi ggly\nwa di\nu do\nstrand ing\nsto bart\nshadesof grey\nport noy\nport illo\npa sties\nmi spr\nmam elo\nlor ax\nla ire\njanos kians\nham dan\ndisc ern\ncountry life\nai les\nt cher\nsail fish\nsaf i\npro fil\nnothing ness\nn ri\nhar iri\ngrou cho\nfar outa\nev m\nenthusiast ically\nen da\ndu sk\ndread nought\ncru mp\ncoul da\ncerti fied\nbot ticelli\nba x\nau me\nske tt\nsc b\nrose hill\nmb c\nisra eli\nh ne\ngreat day\nfolk fest\nfaire y\ner ink\nen ry\ncraw ford\nbroms grove\nbo drum\ntravel channel\nsar dar\nrec tify\nnewsa del\nmicro be\ninci dentally\nin still\nfe cal\neu gene\ndru gged\nb man\nwhoo pi\nun a\ntwi z\nstreet view\nour day\nnicar agu\nmr k\nmouth ed\nintu it\ningra ham\ngroo ving\ncute ee\nchil tern\nche ol\nboomer sooner\narbro ath\nto ko\nte ab\nsmo ak\nser aph\nsal ert\nre w\npol k\npim ps\nma ho\nik ay\nhe sper\ncit ru\nblack sabbath\nshort fall\nmar a\nib as\neaster ly\nca stiel\nìĨĮëħĢ ìĭľë\në Ĭ\nrein vention\nla vin\njo ong\ncon cur\nclu stering\nbra ver\nba aa\nalge bra\nal ita\naberdeen fc\nwholesal er\nvo et\nvin od\nst alling\ndaun ted\nâĺ ¯\nwalk ways\nsadi stic\nridd les\no ar\nne ves\nmatch y\nlex y\nkine tics\ngil da\nðŁĺĺ ðŁİī\nsant ino\npredic tability\nfo kker\nana ero\nvesp ers\nsy ne\nstock ing\nself help\nr bl\nmak ita\nju ego\nin fidelity\nhei de\ndevi ation\ncur zon\ncom mis\nci bc\nbbc wthr\nba hai\naaaa ah\nðŁĮ ª\nwer ise\ntom mo\nseren ading\nm itten\nloose women\nite e\nic arly\nha va\ngop ats\nufc w\nthe chainsmokers\nt chat\nseab ass\nsan ju\npepp ered\nor illia\nministr yof\ninf ant\nfortune magazine\naugu sto\nais ling\nðŁ¤· ðŁı½âĢįâĻĤï¸ı\nscru bbing\nrac coons\nmon et\nmcke an\njay y\nexperim ented\ncost as\ncam my\nbase ment\nal te\nworshi ppers\nwal eg\nt co\nsier rac\nsanti ago\ns ø\ns ily\ns aga\nk sd\ninj ury\nfi jian\nexeter chiefs\nd ja\ncom erica\nbee cher\nu du\nti ernan\nsol eno\nshow jumping\npurr fect\nmer tens\nfr p\nfeder alism\nconstab ulary\nba shed\nair max\nsyner gies\nshi da\npi ña\nmis lead\nma ud\neye z\nair and\nz of\nwizar ding\nw cha\ntab u\nspo ssible\nsol vers\nred zone\nnhl stats\nne iman\nmile high\nmc vey\nlew y\nlaur amar\nincen tivi\ni stria\ngoti ger\nen amel\nbb on\nalco holics\nðŁĻĦ ðŁĻĦðŁĻĦ\nwe as\ntime pieces\nswee ten\nst ah\nrehear sed\nn wc\nfrontrun ner\nfi vb\nd our\ncataly zed\nbron ch\nblo k\nðŁİħ ðŁı¼\nven do\nra vers\nobi spo\nk alli\niner tia\ng ny\nd ni\nbi hari\nanaheim ducks\naltu ve\nair bus\nac a\nwe sts\nvoc ally\nrati fication\nnj it\nlar son\nizz ard\ni ec\ngb m\ncity wide\ncall an\nbob sled\nbbcwthr watchers\nìľĦë ĦĪ\nsun risers\npediatric ian\npan ning\nnar asi\nliber ian\nend ic\nbase balls\nv anian\num g\ntai ko\nri sd\nmagno lias\nle em\nken ai\nfric ken\ndom ed\nd atta\ncol fax\ncephal us\nadopt me\nwhat a\npre mon\nmass age\ngo buffs\nenor m\ndolla sign\ndal es\nbon aire\nbertie schip\napplau ded\nann n\nwind swept\nss football\nrecover ies\nraj at\npro tru\nhoo kers\nbio security\nãħ¤ãħ¤ãħ¤ãħ¤ ãħ¤ãħ¤ãħ¤ãħ¤\nton o\nselvarag havan\npitt i\nn ro\nl pr\nje vic\ngoog ly\nchar tre\nðŁĮ´ ðŁĮ´\nâłĢâłĢ âłĢ\nu bere\nsb d\nri vi\npo conor\npan ellists\nmatt ingly\nken y\nibe w\nfoolish ness\nfarouta khtar\ndream work\nwhit erab\nwest field\nten ors\nmu sume\nmo rey\nmd traffic\ni af\neasy branches\nch aff\ncarden as\nab vote\nå ¾\ns ours\nmul grew\nme su\nkd ka\nfood truck\nder mal\nchild abuse\ntime share\nse ti\npha se\noka for\nlough lin\njan ine\naround theworld\nॠĭ\nrein forces\njane the\nhel io\nhe man\ndra kes\nc sports\nye ee\nvis iti\nst john\npercu ssionist\nnon violence\nf ase\ndi ac\nbreak y\n" *\nsn b\nsaf ran\npat ching\nnickelo deon\nintru ders\nenlist ment\nel les\ncost ner\ncoo s\nbe sson\nbase less\nappe ase\nsuper se\nsu mit\nsab ian\ngene simmons\ng don\nfrat ern\nemph atic\nd np\nconstra ined\nclee thorpes\ncatal ans\nan ae\nyu en\nsori bada\nsky bet\nsaw dust\ns film\nnag ano\nn ari\nle ong\nla is\nin eligible\nidi bia\ngo dav\ndisper se\nbur man\nan jel\nre za\npough keep\nph oned\nme du\nka ori\nive co\ncom uni\nchinese gp\nchim ps\ntwin kies\no ise\nnatge ophotos\nna irn\nmitochondri a\nju hi\ncy lind\nchurchill downs\nchristma siscoming\natta ching\nar ras\n. ""\ntimb aland\nthe hedgehog\nsustainable fashion\nsumm ing\nmore los\nme tta\nman tan\nkut ch\nevan s\ndazz led\nstu ssy\nroyal family\nroeth lisberger\nprism atic\njam shed\nge s\nbrou ssard\nblue angels\nb mo\nann af\nalis son\nal gal\në ī´\nwal ang\nscar ab\nm ingo\nfruc tose\nforce fully\neu w\ncri er\nbai k\nar ter\nalphabe tical\nal lot\nwaz ir\nto ffe\nopio id\nnon existent\nnephro logy\nmc at\ning it\nhar ts\ndad life\ntx h\ntwit ters\ntross achs\nss oa\nso koto\nrein ce\nreal bread\nray theon\nragha v\nperiodic ally\nmayo gaa\ngio vin\ned on\ndown graded\nde pay\ncostac offee\ncolli ers\ncanu ck\nvo tre\nonthe move\nmargarit aville\nkw az\ngour met\nfoo dre\nexo tics\nde grom\ndaeh wi\nðŁĮ¹ðŁĮ¹ ðŁĮ¹\nte dros\nss rajamouli\nru ble\np news\not one\nny i\nfu ge\ndam an\ndal ert\nas bury\nallow ances\ntel la\nt dr\nspir ulina\nrugby united\nrel ly\npass ers\noooo oh\nmedic ated\nevangel ine\nenti al\nconditi oners\nâĺ Ĥ\nscoli osis\nh ro\ngift guide\ng ally\ndv f\ncru mlin\nmoy nihan\nmo disar\nmaster classes\nmac ular\nbe cau\nbair stow\naun e\nus gbc\nthelion king\noverwhel m\nfoo ter\nand ler\nshe ard\nridge field\nna as\nn so\nm sia\nleg on\nc sp\nbo zo\nautism speaks\nas ch\nðŁĩ¯ ðŁĩµ\nâĿ¤ .\n» »\nzo ella\nsyphil is\nshim ura\nsen tosa\nnew er\nm clou\nkri spies\nim fc\ngar h\ng hazi\ncharle se\nby d\nush ers\nspread sheets\nsel in\nprojec tile\np gm\nover turns\nmust aches\nmun son\nmuchach os\nmol on\nitss sr\nino is\nfanc am\nd cc\nbu dge\npe gged\ning dom\ncymb al\ntul are\nkryp tonite\nino va\nfeed the\nf eni\nci ster\nna eun\nindividu alized\nfi h\nfer al\nef fie\nd so\n???? ????\nsyman tec\nss f\nsma ug\nsi bal\nokee cho\nmd pi\nku di\nho wer\ngar gano\na pren\nâĭ Ĩ\ny is\nw tv\nthorn ton\nsubsi dized\nspeed wagon\npas so\nmat ted\nhargit ay\ngrave send\ngi dd\nfriday fun\ndetec table\nwild lands\nw soc\ntw is\nsan ji\nsam bora\nsal via\nfakh ri\nbella thorne\nak var\nscint illating\nne er\nn usa\nm pl\nleg iti\nku a\nguer re\ngrou ch\nen baum\nej f\ncol la\nwind hoek\nut dfc\ntrey songz\nstra damus\nro sar\nmol ler\nlordof therings\nill ar\ndrex el\ndot tie\ndi straught\nchaper one\nbring your\nbay shore\nam ur\num ph\nstock port\nsitt ing\nradi sson\nok al\njol lof\nhor net\nhavelo ck\nde j\ncab bie\na arti\n° ,\nvan de\nsch wan\nlet cher\nlero ck\nj mu\ndw ells\ndis qualification\nbru s\namaze balls\nðŁ¤ ®\nsc ac\nradi ates\ngrow ling\nge th\net ter\ndis fru\ncolo ssians\ncd w\nan arkali\nalde burgh\nag ot\ns west\nor ro\non l\nmax x\nimman composer\nfro mmy\ndam nation\nd int\nbeer week\ntribu to\ntil ak\nt da\nsavethe children\npim lico\nmississi pp\nmar gau\nak ana\nag ami\nâī §\nwool ley\nreven ge\nover size\nk res\nir ce\nh news\net x\ncon yers\nbill shorten\nban v\nat el\nv sphere\nsule iman\nstack able\npetro v\npale y\npal atine\npa arl\nle ch\nkil patrick\nk shs\nju v\nhit am\nash down\nabomin able\nvar k\nuni an\nu wi\nthel u\nshoot film\nsand lot\npau sing\nl lega\nhor nb\níķ ľ\nठ¤\nÙħ ر\ny ha\nwzz m\nway back\nt suk\nstom achs\nstar i\npizz ahu\npa sted\nnameis nani\nkan to\ncar ley\nbe ur\nðŁĴ¸ ðŁĴ¸\nyn j\nus army\nsen eg\nroa ster\nmo rel\ninthe park\nff acup\ncre an\nbillshorten mp\nann arbor\nabo y\nrock wood\npill sbury\nlu go\nexplor ations\nbroom field\naz mi\natul a\nakvar yum\nshow en\nmc nab\nd ws\nwa see\nnijme gen\njohn kasich\nf pc\ncr at\nêµ ¬\nื à¹Ī\nvelo ve\nrose bud\norche stras\nmortg age\nflate arth\ndailym irror\ncharle stown\nbra ff\nbo ku\nbel kin\nãģ «\nร าà¸\nti is\nsacrif icial\nlo esch\nvide omarketing\nun dul\nsupe rel\nsh as\nmusi q\nki era\nkam en\njam ey\nencan ta\nden u\nar cus\næ Ĵ\nsor kin\nson ali\nros alie\npushaward sliz\nno ord\niam specialized\ncap tioning\nðŁļĢðŁļĢ ðŁļĢ\nsange et\nrashtra pati\nrain yday\nparalym pian\nmust n\nkun e\ngen z\nen viable\nef b\nami ens\nà® ±\nt de\nre painted\nma zer\nlay up\nkeh lani\njor gensen\nder g\ncon chita\nbloem fontein\nall yn\nsynony ms\nsten house\nsli my\nshal ini\nden ier\nassi stive\naquari en\nam bar\nsubram anian\nrebu ke\nmam mam\ning ers\nh itt\ndog fish\ncr l\nam are\nte uil\nsoci alize\nshi z\nrar ities\ne ire\ncincy tennis\nbenet ton\naven atti\nëĵ Ģ\nun geneva\nsaan ich\nr sa\npoconor aceway\np liers\ninter rupts\ndark room\nbau man\naffe ctive\ntou ro\ntag aytay\nsw ole\nsc n\no ston\nmin ah\nlam pung\nconi ston\nbiken yc\nbali ye\nwin i\nspec trum\nh ick\nely se\npet ter\ni sel\nemb assies\ndj iglobal\ndec ca\nchal amet\nan ony\nta ar\nstemc ell\npo sium\nmuen chen\nbblo grt\napp dev\nanirud h\nad ah\ntoler able\nsula iman\nsec network\nrhon j\nprece ded\nob vi\nkp mg\nexclu sive\ncou steau\nune arth\nspace walk\npen der\nil k\nfari ous\nexcited ly\ncommon place\nbin ge\nalec ki\na ert\nw mma\ntransc ei\nsw amin\nsch ec\ns anga\nlec tive\nki pp\ngl itch\nf any\nelli s\neal ing\ndi man\nãĤ¹ ãĤ¿\nÙĨ ÙĪ\nville a\nver ily\nputra jaya\nhead land\nh elly\në ŀ\nun announced\ntechno logically\npushawardsliz quens\nphra im\nmar z\nma scot\nkindness matters\nhu ski\nher ren\namary llis\na isa\nsten osis\nshi ite\nmv fc\nml p\nmirand alambert\nme jia\nlo ger\nlike able\nge vents\ncold field\nbu de\nappli que\n^ *\nwindows ill\nste mming\nsql server\nsh ur\nmschar lotte\nmscharlotte wwe\nkaterin burg\ni spr\nhinter land\nfre i\ner asing\nconcentr ates\nblood bath\nbk lyn\nari ka\nst mary\nprime minister\nparap hern\npa ket\nom ie\nmun d\nmedic a\nlaw yer\nka poor\ngotiger sgo\nenorm ously\ndop ening\ncur l\nang irl\nðŁĩŃ ðŁĩº\nvo tered\noooooooo oo\nom bré\nneer aj\nn vey\nmarcel lus\nmar illion\nel fon\ndro z\nane a\nabre ak\nwont stop\nsof love\nsher idan\nsch utz\nry ne\nold town\nkr p\njype twice\nint end\nghanai ans\nflying tr\ndoppelgän ger\nbro lly\nagn olo\nðŁ¥ ´\nìĦ Ŀ\nyn drome\ny ate\nmic keym\nlife coach\nen ke\ncap that\nb ne\nstere ophon\npal mo\nla et\nfranc ine\nbm x\nâī ¦\nwhit eri\ntil ting\npost production\nknicker bo\nem boli\numbrel la\nri i\nrefu elling\nrally together\nne th\nmatri arch\nlg r\nfore shadowing\neye witness\nðŁĺį ⾨\nu can\nty rants\npav es\nomic ron\nmir r\nmedit ated\ngal atians\ndro m\ncabine t\nbuy now\nskill ful\nsha v\npit bull\nmeand ering\nindic tments\ngu tt\nf ens\nbr ity\nbar f\nìĦ ±\nsu st\nsn ort\nsky ward\nreincarn ated\nposit ano\nneuro pathy\nmag and\nlit tered\nline backers\njule p\ncar tons\nben shapiro\nax l\nðŁIJ ĭ\nrejec ted\no ssi\ngai ther\nen sue\nb gg\nuncontrol lably\nsur bhi\nso de\nsha an\nre join\npre e\nhigg in\ncav s\nyu b\nw hal\nuse rexperience\nspoon ful\nsli ght\nsar in\nsachin ita\nrhodod endron\nrep til\nrel enting\nrefere eing\nparal lax\nmün de\nlea shed\nil ms\ncol onia\nchow dhury\ncer i\nap are\nand son\nðŁİ ¢\nìĬ¤ íĦ\nåľ Ł\nwork loads\nup ers\ntenter den\nsnapp ers\nsm acking\nshe v\nredd itch\nilo v\ndinosa ur\nbi jou\nbankof america\nwag tail\nvi se\nud hay\npic turing\nfestiv us\nexpe c\nep o\nencro ach\nco ding\nba ad\nಠ¦\nwye th\nsc raw\nove re\nn ena\nl z\nj anie\ngar g\ne de\narti fic\nwindow sphone\nver dun\nunder standings\nto g\nsilver ton\nshack les\nho ppin\nfa zio\nelection results\ncbsd fw\nca pel\nbio ethics\nwrong fully\nvel i\nsingul ar\npe sh\no chs\nkat er\nkar li\nhango vers\nflo pped\nfinancial inclusion\nfin ns\nff en\neart g\ne sche\ndy na\nconsecr ated\nce u\nsam bo\ns zy\nreyn old\nmat uring\nlol ly\nlau d\ngel man\ngear sofwar\ng sl\nfledg ling\nepilo gue\ncal led\nbo ssier\nzo id\nyas in\nwhos next\nstabili zed\nspo res\nspi ky\nrol lie\nra vic\nprinse sachinita\nph ds\nmun g\nmamelo di\nmaker bot\nfur by\nfin der\nct fc\nbrun ello\navengersinfinity war\nac cru\nab us\nðŁı Ŀ\nìļ ©\nâľĪï¸ı âľĪï¸ı\nsp u\nse pe\nse aboard\npower puff\nimpre ssion\ngold end\nft f\ne gy\ndrink water\nb int\naffl icted\nÑ ı\nsch on\nrespect the\nram ming\npiñ ata\npark lands\nmath ur\nla vuelta\nfar ia\ndisney cruise\ndeci dedly\nsimul cast\nque bec\np ge\nmit te\nlc pl\nill ing\nhar oon\neu pol\nenh ancer\nder gaard\nard more\naccli mati\ná ĭ\nwat e\ntat oo\nsh g\nod b\nla gan\nequi pping\ndhru v\ncystic fibrosis\nal aac\nðŁĺĴ ðŁĺĴðŁĺĴ\nâĪ Ĵ\nwin theday\ntotal itarian\nit sm\nelle smere\nde kho\ndaugh try\nchildrenin need\nby s\nbak it\ntallade gas\nsupple mentary\nstu ck\npav lo\nobla stoma\nn jo\nmix x\nlan ez\nkrat os\nkay aks\ngar ret\nfavor it\ncivil ised\nam pl\nac ra\n¨¨¨¨ ¨¨¨¨\nwor ley\ntri omphe\nst ak\nporto fino\npin ec\npercent ile\nom ari\nkus ama\ninverte brate\nguild wars\ngu id\nei b\nbo gs\nanaly sed\nsan thanam\nrang ed\nle j\ngains bourg\nfeel goodfriday\nden hall\ncros scountry\nconfeder acy\ncen trum\nblak ely\nbelgi angp\nðŁIJ¾ ðŁIJ¾\nðŁĮ Ń\ny aaa\nup time\nsound wave\nrenfrew shire\npati ala\nmi m\nk adi\nhum bug\nhey day\nfox woods\nfab rizio\nely sian\ndeterior ated\ncover version\nafrika ans\nÌ ²\nsn it\nslo t\nsamsmith world\nr dj\npy aar\nblack hole\nbar man\nabstrac texpre\nxox ox\nwhere by\nm raz\ngreen est\nfly be\ndro wns\ncu mu\nbla m\nal af\nain sworth\ntrump shutdown\nsk at\nset to\nsc outed\nmal ton\nlaw lor\nfini shed\nemo tive\ndynam ite\nar shi\nano e\nжив оÑĤ\nsing let\nsar torial\nni shes\nhel big\nhart ford\nboy le\nðŁį £\nz c\ntuss le\nsti ves\nskir mish\nred to\nphen ology\nmatil das\njen son\nintegr a\nheart ily\ndolly parton\nbreit bartnews\nb mp\nðŁĶ¥ ðŁĺį\nðŁĮ¸ðŁĮ¸ ðŁĮ¸\nway v\nsi stine\npoughkeep sie\noro ssi\nloc kett\nhindu tva\ndead man\naqu it\nðŁį ¬\nâŀĸâŀĸâŀĸâŀĸ âŀĸâŀĸâŀĸâŀĸ\nÑ Ģ\nuni onists\nther oe\nsm elt\nr natweets\nkal u\nfamily guy\nexagger ation\ndes ic\nchate aux\nbirdc age\nbic ol\nanc tuary\nad nan\n" @__\nwent worth\nu ros\nse ss\nse ss\npower ment\nmi sia\nmar ku\ngen itals\nflo g\ndistill ation\nbun dt\nbor tles\nw ile\nscalli ons\nsat t\nimperial college\ngu v\naerob ics\nçµµ æıı\npope yes\npi sta\nneglec ting\nik ki\nhouse boat\nge ary\ndon er\nspear head\nsol aris\nob ili\neur on\ndun stable\në¸Ķëŀ Ļ\nun claimed\nspoo ky\npersi mmon\nit smy\nfight in\nar ley\nz eni\nth yl\nshav es\npredic tably\nme ach\nmay day\nma sti\nhq trivia\nbien venue\nbe bo\nâĿ¤ï¸ı ðŁĺŃ\nô me\nve tch\nval lec\nv dc\nspru it\npat ent\no she\nguru ji\ndo ch\ncor tical\ncashe ws\nbu eller\nbau chi\nsuper ior\nsand r\nr cr\nir in\nhrithi kroshan\nembr yos\ndom ens\ndo per\ncha peau\nðŁij» ðŁİĥ\nyl ine\ny us\nun am\nsu kk\nstoner fam\nrecep tive\nos p\nin ke\nhil ia\ngreen energy\ngor od\ncap er\nc co\nb wc\nredro ck\nra ekwon\ng yo\neu bank\ncomplac ent\nbedro om\nðŁijī ðŁijĪ\n⼠Ī\nживоÑĤ нÑĭе\nwater melons\ntotal divas\nspring dale\nsp edes\nslu shy\nre ve\nnur ser\nmen ez\nbil lab\nad l\nç IJ\nterm ites\nr fu\nlo ll\nip u\ncr acing\nchas se\nzi va\ntrilli ons\nred fish\npat on\nlong champ\nli sd\nfol lo\nfin ex\ndo goftheday\nce do\nadap tor\nwil lem\ntransiti oned\nswee teners\nps vr\nna agin\nla was\nkar no\nguad ag\ngal ena\nexclu si\nconspir ing\nber d\nany ang\nandr ze\ntur an\nstra yed\nspl urge\npersonal finance\nnat bynature\nlegendof zelda\nfood travelchat\ndelu ded\nconce al\nbesto fetsy\nac companies\nab al\nnumer als\nmb laq\ndar rows\nanach ron\name thi\naf ca\nwater color\nunder mines\nsh ish\nparaphern alia\nke gan\nindex es\nhydraul ics\ncl onal\ncampan ia\nc bb\nber gh\n======== ========\n................ ................\nthe par\ntaste fully\nscoo ping\ns fc\nom atic\nmi q\nlv g\nitunes music\neng ar\ndu la\ndra ch\ndn cin\nbloomberg tv\nbever ley\nbak r\nand ha\nâľħ âľħ\no bel\nmah endra\nla j\nkun o\nkhatta k\nk rug\nhu iz\nfen n\ndn ce\ncolino donoghue\nblaz blue\néĩ İ\nvas eline\nun cw\nts w\nsnow shoeing\nrefin eries\npho s\nmuer te\njumbo tron\nin ners\nim mu\ne br\nbri d\nbram ley\nbab son\nat lus\na om\nsim ha\nrip tide\noh saa\ndam pen\nd te\nbahrain i\nvibr ating\nst marys\nredar my\ngui dores\ng di\nfu k\nbo bber\naler ting\n( ^\nver ton\nretar dant\nlet tered\nin vis\nha dd\ngr instead\ne wok\nbefore and\nâĺºï¸ı âĺºï¸ıâĺºï¸ı\nyu me\nthatdescribe syourfriendship\nsuper lative\nsovie ts\noro ck\nlar cen\nhy gge\nhon duran\nhilli er\nhat in\nh pm\nest an\ndecentr alization\nat ology\nandre a\nwi pro\ntypho id\nstub born\nscalli on\nlevit ation\nesc u\ndis sect\ncar done\nbro dy\nay ew\nalab a\nab ras\níĤ¤ ì¦Ī\nsil i\nrock band\nrin con\nmo cs\nkick back\nju ssie\nar ayan\nalai kum\nðŁĺ ¼\nãģ¦ ãĤ\nstr ans\nship sinpics\nree ze\nmat z\nko th\ngun metal\nds n\ndi ved\ncur ley\ncontamin ants\ncatch ing\ntyne mouth\nmy k\nmor neau\nbud gie\napolog ised\nadam s\nðŁĻĭ âĢįâĻĢï¸ı\nãħ ¡\nwork life\nmult nom\nla fferty\ndove cameron\na em\ní ļ\næ ¨\nwhy dont\nsur fs\nst ü\nrepor ter\nrec al\nphotograph yday\np isco\nko y\ngram ma\ndong woo\ncor t\nastro logical\nðŁĩª ðŁĩº\nyou were\nu zu\nti dings\nred bul\npre set\nlamp shade\ninthe air\nicic les\nhol zer\ngi psy\ngc p\ncli x\nbible study\nw sr\nthe dog\ntas sels\nmovi star\nkur ti\nim ed\nicon ocla\nfire dept\ndg in\nant illes\na awards\nsugar loaf\nric ken\nmotiv ations\nili st\nhep worth\nfan meet\ndo an\ndavi ds\nchron ology\nbol in\nat g\n[ !]\nweh be\ntortell ini\nteam dairy\nnew cast\nmanate es\nmag alu\nfre itas\nforwar ded\ncollege of\nbuffal osab\nspor trelief\nsotom ayor\nnbaon tnt\nmatthew mercer\ngovernor ship\nal ger\nwol fe\ntit ch\nstephen athome\nru pa\np onic\norigin ating\nnbc universal\ninfo tech\neu logy\ncar ters\nbum garner\nance y\nyeg dt\nwind surfing\nst ons\npoz nan\nnot ary\nmusic is\nmen shealth\nl pt\nha pur\nel or\ncrun ching\nterr arium\nroyal society\npar ke\nner a\nmuru gan\nmem grizz\njoshu agarcia\nhin ted\nharmon y\nga ur\nflu me\nel rey\ndoc ket\nbe ga\ntwitter nature\ns water\npu gli\nordin ator\none sies\nmu kun\ncru mp\nbur leigh\nar chil\naftere ffects\nstro mberg\npim ento\nmeh ndi\nlo bal\nkin near\nintech nology\nholiday season\ncon summ\ncli ffe\ncer f\nbuffalosab res\n? âĢ¦\ntopo logy\nsu ga\nsne ver\nskep tics\nshinde shil\nru h\nmar at\nll or\nhear thealth\nha vil\nbhar ati\nar ang\nweare united\nw kyt\no tro\nminne tonka\nmal ag\ng sc\nĹ ï¸ı\nun rwa\ntwitternature community\nseym our\nse ar\nr nr\nq ab\nlinkin bio\nku an\nha ku\nch aco\nbutt ler\nbc wine\nsket chers\nshake up\nram m\npol on\nphoto aday\nmosqu itos\nfotograf ÃŃa\nfli ers\nencephal itis\nel as\ndu page\nterra pin\nsath ish\nhar at\ng ell\nfe dor\ndisc ard\nco ole\nam ph\nadop ta\nye z\nty dollasign\nthe win\nsub trac\nroy ston\nonce abc\nod p\ni im\nfa kis\ndiplom as\nbru ising\nvene ers\ntu i\nthesunday times\nshop e\nmoneti ze\nmo ol\nmann kibaat\nkhil adi\nipsw ich\nelectrocu ted\nel do\ncyber space\ncar naby\nãĤ ¢\ntech week\nswing in\nstocha stic\nmall ory\nli r\nland fills\nkala hari\nfa of\nà° ķ\nthis is\nrap sheet\nradi ating\nra pha\np me\nniti aayog\nne gara\nmand al\nkra bi\niam k\nhin ting\nerup tions\ndmit ri\nab ington\nup mc\ntc b\nraj nath\nmulti function\nlec ted\ngrin ds\ndj ian\ncad bury\nburge ss\nbron z\nang la\nac mawards\nyah weh\npu ss\nlei bo\nlanc elot\nbang kok\nback field\nb sm\nas ce\nwhit mer\ntou n\npre ju\nmax preps\nj crew\ned camp\ndeport ations\ncho cs\nbeat sby\nash worth\nza heer\nval ery\ntr ini\nsy sad\nsun dial\nsti p\nsange les\nsan gu\nroman esque\nle al\nlam ents\nhit is\nequi fax\nclu tch\nchi apas\naf sc\nzig lar\nun qualified\ntend in\nstanis laus\nrock chalk\nri vet\nrhon y\nra ppa\nman tras\nfromthe east\ndy ck\nboy f\nbi ome\nba strop\nà´ ¾\ntw ise\nperenni als\nmultiple sclerosis\nmccar thy\ndisper sed\ndau phine\nber ner\naubre y\nxen on\nss outh\nsar ahah\npar in\nmuker ji\nlu ci\nhyo yeon\nevangeli sta\nce asing\nan dis\ntim on\nlu sk\nf ha\nesof instagram\nduke u\ntex tual\nsteff en\nsagu aro\nridic ule\nre unification\nleap day\nkra ine\nidol ssa\nhot shot\nfinancial services\nenvy us\ncon templates\nal ters\nðŁĺ· ðŁĺ·\nðŁĴ¨ ðŁĴ¨ðŁĴ¨\nãĤ Ĭ\ntu gs\nsl er\npro wrestling\npo ck\npatri zi\nnadi ya\nhahahaha h\nbe as\nwan ska\nsle azy\nri ku\nrad nor\nr sv\nnadinelu stre\nman galore\nkil gore\ninno va\ngreen leaf\nad mon\nå¥ ³\nu ously\nsung woon\nsho d\nsal erno\nroller derby\nr tm\npitt a\npau line\nni mitz\nmoores ville\nlan ark\njav its\nindv pak\nhi the\nhere after\ngri pped\nencin itas\nedtech chat\ndo pen\ndemo lishing\nbeck ford\nban h\nðŁĹ ŀï¸ı\nud ice\ntaste less\npromp ter\nnat ter\nmi el\nii hf\nhan over\nguj rat\ndis dain\nb news\naw c\nab g\nãĤ ½\nâĿ ®\ny fm\ntransm itters\ntigh tens\nstel ter\nsc ouse\nsal liance\nir v\nick a\nfa inted\ndethr oned\nbo tte\nsa hil\nrhon a\nproof ed\njuven iles\nisuppor t\ngh ton\nfli r\nchampion ed\nc span\nalde hyde\nzam alek\nwaf ers\nsul tans\nsn apple\nre capping\nn daa\ngov t\nfollowfor follow\ndiscrimin ated\ndg c\nbrid led\nâĸĪ âĸĪ\nfor mance\nfac ades\ndu pe\nde mir\nbl fc\nbiomar ker\nsin st\nry ka\nple i\nny m\nnur tured\nmoi stu\nmal aika\ngh ill\neli os\ncourt ship\ncal mer\nan ey\nag ye\nyose ob\nved anta\nuss ell\num l\ntrick ster\nth ali\npen and\npe et\nob er\nloo kers\nia as\ngam ba\nethno graphy\nbor dering\nbal er\nan en\nwalk man\nthen ation\nri dding\npen rose\nla ssie\nhydro ponic\neast coast\nwwe universe\ntom boy\nto ir\nro dan\np th\non ef\ncare ss\nbee z\nthe comedy\nson goftheday\nsab or\nrten ews\nro hr\npeak y\npare des\nin come\ngre l\nen is\nchocol atier\ncas sa\naon b\nan f\nampli fication\naccom plice\nwel by\nstre wn\nsand well\no for\nkim on\nkim my\nk dp\nik al\nhoo pla\ngan as\nei steddfod\ndrum stick\ndemonstr ator\ncentrifu gal\nbl chat\nìĦ Ŀ\nvit er\nssy dney\nnan om\ndeter red\nanim ating\naeronau tics\nab ull\ntick ling\ntestic les\nsoo t\nsax ena\nqu ine\npet us\nmousep ad\njo ols\ngerman shepherd\nb th\nalabam af\nðŁļ ¬\nðŁĩ¸ðŁĩ ¬\nuof glasgow\ntra bajo\nth ics\nrap tor\npro stitutes\norlandoc itysc\nheart disease\nfirst nations\nbo ces\nãĥ¼ãĥ Ī\nâĩ ¨\nyueng ling\ntalladegas upers\ntab ula\nske l\nre affirm\npan es\nir k\nd oun\nchan tel\nbron t\nwether by\nspec savers\nsch ema\nprecin cts\npan acea\ninf eri\ngint ama\nfir stal\nfin sup\ne studi\nde in\nc á\nyu van\nthe bear\npaley fest\npage ants\nkrist off\nhar dik\nha shanah\ncr g\nbu do\namli ventv\na jan\nðŁķ ¸\nठĸ\nsusten ance\nonlin ed\nnostr ils\nmol ar\nf sl\nente bbe\nde ed\nchival ry\nbib chat\naj mal\nadju sts\n[ !!]\nðŁĺŃ ðŁĴĸ\nw mn\nqu ang\npil lai\nmisogyni stic\nmar bs\nits me\nholy spirit\nh se\ncritic ising\nco ff\ncm w\nchel seaf\nch abad\nad ry\nuru gu\ntom bo\npl u\nmass acres\njack o\nit l\nid capthat\nhl f\ngo red\nchri ssi\nav ani\nanthrac ite\nam ous\nt ity\nsu ggs\nse maine\nsafar icom\npo z\nmey dan\nmedi al\nkan en\nje taime\nil ver\ngu adel\ngre nier\nduchen ne\nale ssia\nabra sive\nwind fall\nt itious\nra yy\nmind blowing\nle b\nkati a\nin charge\nfu d\nchit ra\nalvin foo\nre dress\nme gha\nha grid\ndu champ\ncudd led\nbuc ke\nwoman hood\nvey ron\npat ton\nou is\nlar ch\nj x\nfla via\nbran ched\nbas ses\nagron om\nreach er\nram ses\nra han\nprohib iting\npl er\npe eve\noo zing\nluke warm\nkru sty\nhai lee\nel d\nardu ous\n\' ....\nwatchthis space\nvi ot\nroad runners\nq mjhl\npel le\nned bank\nmos cone\nmam et\nlit is\nkosci elny\nj uri\nj ra\nin am\nhan zo\nhahah haha\ngamer girl\nconsumer ism\nchipp enham\ncenturi ons\nas ya\nancho vies\nste ver\nsk r\nroo ker\nque be\norgan za\nnar ry\nl itu\nkl cc\naccompli shing\nÎ ´\nu she\nsw d\nofficial helly\nmontre ux\nlen ingrad\nic ola\nher kim\nfuer te\ne wn\ndilapid ated\ndau s\ncolli son\ncold war\nboo g\nà³ Ĩ\nto dor\nter mite\nshine down\non ye\nmer ck\nlaw of\ngarden design\nfighter z\nde grading\nbra u\nange red\nal labou\nwra h\nto logist\nsmallbiz satuk\ns wati\nmon gol\nmari age\nman uk\ngold finger\nem mal\ncit rix\nar rhyth\nquadr atic\npat chou\nmcil roy\niteach math\nart v\nØ ¢\nvaldo sta\nto ks\nste ppin\nsal gado\nmoo k\nmaz ar\nirish times\ncomment ating\nbrown ish\nac ism\nãĤ §\nplay list\nol f\nlucha underground\nkol b\ngc f\nðŁijij ðŁijij\nshow rooms\nrafre darrows\non nbc\nmew two\nkondap aar\njud as\nj illa\ngoal scorers\ng autham\ndump trump\nde bra\ncov fefe\nchur ro\nt ando\nly medi\nergon omics\ncapit alists\ncapecod times\nðŁįģ ðŁįĤ\nws of\nsqu ish\nom c\nmeghan markle\nlha sa\njan ney\nhust ings\nphoto set\nkis an\ngard ner\nben zo\nbat am\nz ito\nsub ju\nsar k\npun itive\nmaure en\nkaw ai\ngroupp alestine\nfi j\nen lists\nch ini\nbang a\nw abi\nvit ali\nvalder rama\nsou thea\np ku\nom x\nflori an\ncn d\nbt u\nast ley\nam ai\nach amp\nheath ens\ngo lobos\ndan ia\ncn rs\nauthori ze\nar oo\n. [\nwonder full\nw pl\ntaun ts\nsonom achat\npi otr\npan ache\nmc n\nexper t\ndo than\nalex i\nðŁį ī\níĶĦë¡ľ ëĵĢ\nu calgary\ntigerzinda hai\nspin nin\nshar inge\nmigr ations\nmac don\nma ssie\nkey pad\nkarls ruhe\nili g\nhar issa\nha vok\nfigur ation\nd ld\ncle arest\nbroad cast\nbrit pop\nbiom ed\natt t\narto is\nzh eng\nslu tty\nser c\nro fficial\nplex es\npe du\nmoul ds\nle ek\ndak ot\ndais uke\nchry so\nbon fires\ntick les\nstun t\nsikor sky\ngr d\ndef rau\nchimpan zee\nbha sin\nworshi ping\nw ylde\nw ole\nthejohn abraham\ns re\nra ig\npinst ripe\norient birdclub\nmc morris\nlumin aries\nlou ch\nla shing\ngro omer\nelo we\nclut ching\ncal ving\naccessori ze\nðŁİī @\nthe todayshow\nt ld\nspectro metry\npa ka\nminot aur\nman gi\nkarant acker\nhay stack\nfr d\nef en\ndiabe tics\nbul i\nav s\nandr és\nal ty\nx k\nuni e\nsof itel\nshi do\nriteish d\nmystic ism\nkundal ini\nho te\nho sen\nhin kle\ngood luck\ngo gi\nfried rich\ncon gle\nchap lains\nbur net\nang lian\né «\nston ey\nrede eming\nrandom ness\npr sa\nober on\nnewh ouse\ngonz á\nden im\ndel ph\ncon ic\nan kit\nwolf ram\nwine bar\nunmistak able\npower play\nnag ging\nlincss kies\ngh h\ndesk tops\nbore anaz\nas port\nad wala\níĺ ¸\ntheyre theone\nsal dana\nnes se\nci an\nchemi stry\ncan is\nb hc\nzoo t\nx an\nsylve ster\nici dal\nhmo india\ngav i\ngam ma\ng itt\ncritic isms\nbi do\nbe bold\naashi qui\ntu ff\nstreet life\nro mp\nmonk fish\nmal evol\nlooo ve\nk cl\ngad get\nd bu\nben carson\nail a\nì ¡\nre playing\nnoc turn\nlabe ouf\nj hb\ngame on\nast aire\n% ?\nðŁĺī ðŁĺĤ\nri yad\nnyc parks\nnm su\nly mph\nkwan zaa\nin sg\nhack saw\ngh nessy\ndand ruff\nbasti an\nau ber\natla ssian\nal icious\nwel ker\nris sur\npra h\npit ino\nmt w\nla thtr\njong suk\nin subcontinent\nev elyn\ndav ina\ncri bs\ncre u\ncit ys\nchin chilla\ncanter bury\nadhe sives\ntower of\nsu ite\nrapp ler\nop h\nnew sin\ndon ot\nco ts\nbair n\nãĥ© ãĤ¤ãĥ\nw aging\nsl acker\nsiem en\nsand bags\nof e\nig ars\nhygi en\nhcl dr\nfuerte ventura\nfore see\nf td\nf sm\nev ict\nbun g\nat tica\nwhitecap sfc\nugl iness\nko hn\nin animate\ngaf fi\nfe yn\nempire fox\ndv ent\nco inde\nchuck d\naber gaven\nðŁĻıðŁĻı ðŁĻıðŁĻı\nverse oftheday\ntitan ic\nmicrosof tedu\nl atives\neri ka\nau f\nadjec tives\nðŁĶ´ âļª\nz ari\nxi jinping\nvir ul\nthe ville\ntar ot\nsu va\ns magazine\nri ggins\npy e\nisi er\nder ick\nbarn staple\nthu man\nsprin ters\nr mu\nmexic ana\nloo ters\nlan i\njaeh wan\nhi me\nfr u\neast end\ncr amp\nchar izard\nout ons\nni ppy\nf xx\nd agu\nsky cam\nner kondapaar\nchu gging\nargent ino\nalab i\nâĿ¤ ðŁĴĻ\nu waterloo\nredi aries\nmi da\njar os\nin ching\nhon i\ngold ilocks\ndra pes\nd td\nbi ed\nanemon es\naku mari\nak hil\nyam an\nvel ife\nsurin ame\nru ud\nr hd\nkill zone\ni my\nhur a\nes inc\ncric keting\ncor busier\nbridg ford\nble sse\nas sur\n; "\nwal lah\nup r\nthor in\nsc bwi\nre mus\nol oured\nnews stand\nnew sonline\nmal li\nmahar ash\nli tho\njun ga\nil ies\nfirst friday\ncu evas\nclo sets\nbur j\nbac c\nb hs\nae sop\na alto\nwembley stadium\nwal len\nunder graduates\nstag g\npla stering\nle l\nity fc\nit ur\nim gur\nhomec ooking\nhear se\ng se\neski mos\ndr ys\ndailymail uk\nbi ot\narav ind\nðŁĶ §\nâĿ¤ï¸ı ðŁIJ¶\nâĿ İ\ntapi oca\nsyn cing\nsw p\nmcgin ty\ni wata\nhon ing\nde graded\nboy kin\naurang abad\naun ties\nvienne se\nunexplo red\npal u\nlook alikes\nham sters\nfor taleza\ned am\ndiction aries\ncare y\nty ree\ntom tom\nstra vel\nre aring\nperiph ery\nmcle llan\nju hu\ni je\ngd x\ndent ures\nau gie\narchitec tures\nam ador\nac at\nyu g\nve he\nsh is\nsall ye\nkut v\nimpossi ble\nchat t\nbilleric ay\nwar birds\nturn in\ntol y\nthe mb\nsc lothing\nnbc bayarea\nlun areclipse\nli be\nkin ross\net es\ndar ke\nadvant age\nwing ers\nstri ve\nru se\nmodi fying\nmcilroy rory\nhi ght\nhair loss\ncritic ises\nbob bi\nautonomous vehicles\nar go\n̲ Ì\nsub bar\nspar kle\nsar dine\nran aut\nnu c\nna sional\nlo kom\nimpeach kavanaugh\nfolk lor\ndefen sively\nbigg in\nave da\nغ ر\nubere ats\nsy mon\nmimic king\nini um\neatmore fish\nca zor\nbo ds\na fore\n< ---\nðŁı Ĥ\nwinni pe\ntooth ed\nseren aded\nhar ic\ndrow sy\ndomin oes\ndog finder\ncostab rava\nbob sleigh\nbich on\nall iteracy\nðŁĻĭ âĢįâĻĤï¸ı\nಠ²\nout lier\nn ites\nlanca shire\nidi ocy\nguz mand\nfar ris\ncaernar fon\nbar ney\naz eroth\nau dra\namazon prime\nx haka\nvalent in\ntumb led\nt ph\nretro spect\nrajap ak\nni kes\nnad i\nlu br\ngiov anna\nelek tra\nde ku\ncl b\ncash man\nart lover\nanap hy\n! ðŁĴľ\n⾨ @\nwest virginia\nnur ses\nmac on\nhul k\nheath ers\nach ak\nðŁ¤· ðŁı¾âĢįâĻĤï¸ı\nsp ore\nling ers\nkid ar\nhar poon\ngran dopening\nchel an\nanaero bic\nà °\ntoyotar acing\ntar on\nrays baseball\npilot life\nori vera\nkur u\nc wu\nalan te\nab ate\nwil ber\ntou can\nthe fosters\nshar key\nr illo\nlo per\nlife goals\njam ba\ngall atin\ncoin collecting\nbhatt i\nè¶ ĬãģĹ\nutri ents\ns rd\npo h\no ds\nfun ding\nfili pe\ndigit ale\ncycling life\nc vt\naband ons\ntem pah\ntar sands\nstat a\nsher bet\nprosthe tics\npi ppen\nne sted\nle va\nferr in\nda ho\naf ina\nsports radio\nsam edi\nli ffey\nlex is\ngen eve\ncal lu\nbri st\nbar ty\nbar ic\nyou suf\nit up\nwoking ham\nwizard ry\nwe ster\nsi di\npan sy\nme des\nke ya\nhilary duff\nde barge\ncrani al\nwin esof\nsymph onies\nshe hu\nre sp\nmis ano\nlin der\ninfer nal\nengro ssed\ndallasma vs\ncron kite\nðŁ§ ļ\nãĥ Ĩ\nse vent\nsd avis\npru d\nolu min\nhog manay\ngin n\net ted\ncul kin\ncorro bor\nx ti\nwe ck\nud der\nsta ines\nreig ned\nparticul ate\nnu mmer\ngro sser\ngro g\ngon awaz\nf bc\nencan ta\nce i\n(( ((\nventric ular\ntr k\nta al\no ong\nno vena\nn cr\nlob bies\nini showen\nin oue\ni up\nhallo we\nfore seeable\ncon done\nvegan food\npr ally\nmoun tb\nmi ki\njake tapper\ngra iny\ngil i\ngh s\ngaw ker\nforever more\nexperi en\nex asper\nep lus\nchuck les\ncervic al\nanom tv\nah old\nðŁİŁ ï¸ı:\nsphy nx\nshon da\nra khan\npel vis\nkil burn\nic or\nas at\nyork ville\ntravel diaries\nth ack\nshan th\nsear cy\nn dr\nlooooo oo\nlip gloss\nit achi\nhartn ell\ngar dent\nchriscol fer\nch ies\nbor d\nbla ken\nnep tunia\nmy switzerland\nmu mmy\nd de\ncl twx\nac ek\n: <\nsho ba\nrico chet\nmark up\nfy re\nfire rescue\nchrist en\nal eta\nzo oms\nyoure welcome\nwi gw\nunis outh\ntwil dlife\nsun ning\nsin tra\nseed ling\nru gg\npublic safety\npitch ero\nmm ff\nmid fielders\nkn k\nhyuk jae\nfif teenth\nemb al\nbra zier\nðŁĶ¥ ðŁĴ¯\nsp itta\npa chel\njour dan\ngold mine\nflip board\neric o\naz adi\në¹ Ī\nà® µ\nvisit london\nreco il\nque t\noc up\nni vea\nnew combe\nk ome\nfoss ili\nduck dynasty\ndev ents\ncsharp corner\ncheek bones\naishwaryarai bachchan\nðŁ¤ ¡\næ ĥ\nâĹ ¡\nyar aj\ntre llis\nstra f\nmyrtle beach\nligh thouses\ncr unk\nðŁļĢ ðŁļĢ\nê° Ģ\nunsc athed\ntt ur\nteam sky\nreal y\npin na\northodon tic\nnike sb\nlet me\nlean ed\ngro en\ndono hue\nbra sh\ntraw ler\ntaxi ing\nros sum\nphoto art\npakh tun\norigin ate\nnu ovo\nmore over\nman ti\nmachi av\nlong fellow\ninj ure\nhen y\nces are\nam v\nðŁļ ĺ\nt lv\nru grats\nreg als\npad alecki\nlun ga\nkh wa\njan ette\nfc i\nde tours\ncle ese\nðŁĺĻ ðŁĺĻ\nãĢ ı\ntop gun\npeak challenge\nle thar\ninstitu te\nhemat ite\nfri sk\n( ´\nðŁįº ðŁįº\nvote fifthharmony\nun checked\nth rash\nsassu olo\nra kyat\nproof reading\nnew deal\nma ree\nlo ins\nletour yorkshire\ngodd aughter\nelsin ore\ncompanion ship\nbon fire\nbig time\nbeast fromtheeast\nðŁij ¬\nel salvador\nasse sses\namo ore\nahar ashtra\nadul tswim\nswan sofficial\nstar c\nse wa\nsa xo\nold man\nga on\ncentime ters\nbluef in\nbet way\nast wood\nart sakh\nare al\nag ee\nag ape\nðŁijį ðŁijı\nvul cano\nunrival led\ntues news\nse khar\nsac char\noni an\nkau n\nim position\ngoul burn\nfru m\nfree man\nfou led\nfin all\neger ton\ndri e\nx uan\nvictoria beckham\nver min\ntrun k\ntam aram\nsuper mario\nneed for\nmess in\nme ar\nio g\nfe ces\nce tera\ncab os\ntren tino\nre paint\non etv\noff screen\nniger ia\nmccon nell\nkin ship\nfore igno\nchristma scountdown\nbag well\nçİ ĭ\nyo kai\nyar os\nwad dington\nur band\nreal hughjackman\nr wy\nou ette\nmo res\nllang ol\nfly thew\ndl r\nbis choff\nal ak\nاÙĦ ج\nvent ur\ntab bed\nst ls\nseam aster\nratt ler\npro cure\nnott s\ncon forming\nðŁİ ·\nwilliam stown\nvar ou\ntranquill ity\nth rissur\nsn ark\nsevilla fc\npe asy\npaper backs\nlaw an\nday uk\napp iah\nuri ah\nsom mes\nshowyour hits\nsc ancer\nmal inga\nlauren ce\nhurricanef lorence\nbride tobe\nbri and\nblind folded\nbeg g\nazzur ro\nðŁ¤ ¼\ntu stin\nscy the\nma din\nluxury homes\nker atin\ngw yn\nff d\ndam o\nbt ts\nbe cer\nÎ ²\nwid gets\nvar ner\ntbil isi\nshock wave\nsa hl\nrock wall\nqu eria\nkel le\ninvasive species\nflam ing\nve tri\nsurf boards\nsukho i\nox one\nmm l\nfr act\nc sul\nಠ¤\nw ss\nsar u\nro by\nra bin\nmyan c\nerup ting\ndes ro\nci aa\nac ro\nthyro idism\nschla fly\nparksand rec\nmut ated\nlifeis strange\ngh y\nford mustang\ndor ney\ncat o\nbody guards\nani els\nè¶ĬãģĹ ãģ®\nsl g\ns iting\nresear ches\nlofo ten\ni and\ncop ha\nassemb lage\n; -\nwo t\ntcd dublin\nsten ch\nno sy\nnet worked\nma eda\ngher kin\ncuper tino\ncom o\nwre ak\nshel f\npadmav ati\nmon ti\nlol lies\nho tb\nentren ched\ntron dheim\nsrini vas\nshor ty\nshiv n\nprojec trun\nlow ly\nlin wood\nkier on\neth el\nes ce\nðŁĺī ðŁĺĺ\n ³\nwil ts\nunc tad\nsmar ties\npat t\nne jm\nmad hav\njayalali thaa\ng tv\nthe city\no gle\nmu sing\nmcke own\nmatri x\nf sf\nÑ ĭ\npoinset tia\nmagne tic\nfle as\ned hi\ned bookfest\nbow o\nba har\nx lt\nworking together\nwo a\nwith refugees\nss chools\nscore line\nrun for\nregre tt\nha der\ne it\ncase study\nad ot\nab ha\nðŁĺĨ ðŁĺĨ\ntrac tor\nsub culture\nspecial ises\nsan u\npl tw\nmis led\nmari kina\nmaneu vers\nhoo ps\ngri me\nfort lauderdale\ndy spla\ncel o\naw am\nat our\nË ĺ\nwilliam sport\nsk int\nå¹ ´\nt anna\nshou ses\nrheumato id\npla sty\npa wa\noscar pistorius\nnott ingh\nm we\nlor raine\nkar tel\ni dont\nhar te\nghost adventures\ng listening\nep som\na acc\nãĥ ł\nâĶ Ĭ\nwatch dogs\ntime x\nspec t\nsp aul\nsalute to\nrin se\nqant as\nplur alism\nneil son\nmo ine\nmaha bharat\nmad don\nelectroly tes\ndu ches\nadap ters\nا٠Ĭ\nvalen zuela\nr ca\npit man\no ars\nmicro plastics\nho tt\nho ti\ndou ma\ndimple verse\nder nier\ncommo dores\nb boy\nwor ri\nseung yoon\nor is\nno ban\nmen shealth\ni dy\nhi g\ngreg orian\nf sprint\nconj ure\ncazor la\nbut chery\nad versary\nx amarin\nthorn berry\nt ü\nsw ann\nsta al\nsantac lar\nrepe aled\nquin tu\nqu é\nper tur\nmé tis\nman ning\nic es\ngo ji\nagne tic\nðŁijĭ ðŁijĭ\nzo d\nwal dron\ntree hill\nspo p\nig or\nhal ley\ncotton candy\nar kansas\nacceler ators\nvis alia\ntr iceps\nqing dao\nod ac\nli key\nlat enight\nitv corrie\nempor ia\nelectron ically\ncer ritos\nb ns\nare cords\nad du\nðŁIJ Ĥ\nve dalam\nspar se\non tap\nmonoc le\nla il\ngn t\ncar dia\ncap sic\nbou w\nbear dsley\nbas i\nplan ds\npi et\npersonal trainer\now er\nol as\njanu ary\njack and\nenvironment alists\ndr qadri\ndog fish\nvuel ve\nth waites\nsteff i\nschul man\nles ville\nfood tech\nstephen fry\npos ers\ncur so\ncor bin\nbr uni\nðŁ¤ Ń\ntweet like\nsme tics\nrene e\npost malone\npat ter\np sni\nor no\nll am\ni du\nen tro\nbl ica\nb nd\nthe park\nson atas\nprime day\npaw some\nofficial bsb\ndro wn\ndanger field\nbeach clean\nðŁĺį ðŁĴľ\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nwefly asone\nwa seem\nrac kete\npri des\nop u\ngrand slam\ndolphin project\ncun ard\nzi ppo\nwi les\nsh b\nsan toro\nmuse o\nme mos\ninde xing\ndri est\nbronch itis\narte yart\nworld peace\ntheat ric\nke ely\ninve stor\nfar ru\ndam el\ncriti qu\ncoron et\nchanning tatum\nbody work\nas ser\néĩ ij\nroad ing\nquin te\nnation ale\ngu di\ngreat ful\nfu gees\nadri enne\nsal ish\nquot as\nqu elle\npro team\nneo liberalism\nn elle\nkhal ee\njaw bone\nimpair ments\ngo ggle\ndul la\ndi ari\nblack adder\nven ge\nspro gram\nshe w\nscience magazine\nlind or\nh pi\nforthe people\nfac esof\nfab rice\nef ra\nd ne\ncate rer\ncanisi us\nbu sca\nbran den\nbibli ote\nbee keeper\nation matters\narri a\nðŁĴĸðŁĴĸ ðŁĴĸðŁĴĸ\ny au\nsub ways\nstate ofthe\nsher ri\nrho ea\npatchou li\nlu mpy\nla vor\nhal wa\ncreek side\ncoler aine\ncar bure\nbloom in\nalbu s\nal bers\nta ha\nren ata\npolter geist\nnet gear\nkaz e\ndazz les\ncre mation\nchan baek\ncal oo\nmour ne\nkor o\nha ight\ngas se\nfi m\neg linton\ndesi der\nchri sm\nbat tering\nak onda\nðŁķ ¶\nzip an\nsen tedcruz\nrin go\nre me\nor cs\nmist ook\nmarthas vineyard\nlu th\nli vid\niti l\ner tz\ntag h\nstep dad\nstaten island\nrol la\nriode janeiro\nprovince town\nlu lar\nken e\nexpe l\nboom town\nbh vn\nÎ µ\nsh as\nse is\nquatt ro\np fe\nover use\nmoder ne\nhype beast\nfolk music\nfish tail\nca jon\nang ora\nðŁĴĶðŁĴĶ ðŁĴĶ\nðŁij§ âĢį\nno filter\nmc gann\nlam or\nhist stm\nel los\ncre we\nart nouveau\nam atsu\nac cs\na em\nðŁĺ Ĺ\nðŁĸ Į\nyuk o\nturk ana\ntorch wood\nspi ffy\nsi ii\nsel fridge\nroc ca\nro chel\nmat er\nlife with\nlen i\nkil le\nij s\nhard ness\nben net\nt ml\nson es\nsic ili\nroad to\npric hard\np va\nmidd ay\nchihu ly\nback fires\nak il\nade v\n& /\nâľ ª\nwf my\nsupere agles\nrang as\npy ri\npix ar\npan khurst\nla hore\nho stel\nexpend ables\nel nino\ncircu lar\nbizar ro\nbe bold\nais d\ntre ce\nsr f\norland om\no ed\nny time\nmunster rugby\ninvent ories\ngate house\ngar m\ncamer a\nbe then\nasser tive\nìĨ ¡\nâĿ¤ï¸ı ðŁ§¡\nwe p\nw td\nt mp\ncoven ey\nceil idh\nborn to\naw f\nautom akers\nasi l\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺį\nwol l\nthedaily show\nt dm\nsher man\nscru ggs\nsamo an\nrear view\nover takes\nmad max\ngeo logy\ncondi ments\nby num\n ¤\nwood fc\ntan gi\nsan rio\noo ster\nle u\nk wu\nhiber nate\ncay man\nbewit ched\nali bi\nyou ll\ny fc\nwin ed\nwarat ahs\nspit fires\nsne ha\nlove dublin\nimpul sive\nibra xton\nhop kins\nhar o\nblue jacket\nbee be\nar paio\nðŁij Ħ\nØ§Ø ¹\nve on\ntham mer\nsh ta\npudu cherry\npitch perfect\nme ine\nme gs\nli mp\nj sc\nfu dd\ncan et\nbel k\nacro bat\nó w\nwest meath\nsa opaulo\npro jet\nlam ba\nfrit illary\ner by\ndg al\ndeliver oo\nye eeee\nvul garis\nstart led\nrepe ater\nray ban\nra val\npor que\no han\nni eves\nmur ica\nkenne tt\nhaar lem\ngro he\nconstitu ted\nbest boyband\nèģ ´\ny aga\nturn key\nsx m\nsu raj\nsk poli\ns di\npsycho social\nnar cole\nn and\nlevel up\nleis ure\nkis d\njam ia\nhouse work\ncra dle\ncompost ela\ncomp iler\nanne marie\naleksand r\nsu bic\nseason ally\nking sland\njam b\njal and\nf blogger\ndrey fus\ndin ed\ncron enberg\nconspic uous\nco ton\nca pps\nbo hra\nbo gum\nbal aya\nameric anc\nu mic\npau s\no kie\nmul roney\nmer maid\nmelo drama\nlis more\nit ations\nim mol\nful mer\nbr ining\nbol ero\nbin h\nast y\nwe standwith\nthunder ous\nstub hub\nro by\nr kc\npath um\no ac\nnb r\nmun ir\nlegi ons\njeon ghan\nhabit ation\nge ht\ncappado cia\n( !!!)\nèĭ ±\nyn om\nthe grammys\ntab lo\nrec er\npu ller\nny ack\nnew beginnings\nmaynoo th\ninf low\nen stein\nde ano\ncr in\nconfection ery\nberlu sconi\nash raf\naby te\nâŃIJï¸ıâŃIJï¸ı âŃIJï¸ıâŃIJï¸ı\nwing sup\nsyri za\npresci ent\nnew sad\nnare sh\nlis zt\ngre ath\nextra pol\ndivest ment\ndis orderly\ncu st\nbody weight\nave don\nwalk able\nred fern\npush kar\npro kof\nmind charity\nmarin elife\ndul u\nas son\nwin kel\nto ky\nthe p\nt pr\nrefu ges\nphoe be\nec fc\ncomic con\nbro od\nbr m\nasam sakti\nadulter ated\nqu illa\npol anco\npo vers\nno shame\nmontan o\nkaz u\nham mocks\ngu ana\nel v\nder ange\ndelle mc\nbic on\nbi or\nbean stalk\nve tt\nsaur on\nor bust\nol ic\nli zzy\nik at\nhand cuffed\nfa p\nani an\nac ell\nठŃ\nwhatyou eat\nsyty cd\nstar cinema\ns net\nrat cha\nom b\njohn green\njit as\nh si\nfun time\ne ac\ndad lani\nclean air\nbay e\nzo a\nwo on\nwh smith\nvo wels\nun secured\nsteph on\nst é\nper v\ni aea\nger maine\ndis respected\nbirthday boy\nba on\nas gard\nâľĬ âľĬ\nus atoday\ntri age\ntho ts\nkipp ur\nfam y\nequal pay\ndncin phl\ndel ph\ndd w\nal qaeda\n" +\n௠ĩ\nstr zok\nsh ome\non ward\nkas auti\nhy ping\nexcell ence\ncaric atures\nbblo gger\nay n\nwinter time\nsac co\nor no\nmusical theatre\nla cher\njuni per\nhappy place\nero de\ndt p\ncolor ad\nrak uten\npla ss\nno ite\nmccul lum\nhosi ery\nether idge\nenrique iglesias\ndru id\ndra gan\ncom unic\n( =\nðŁıĪ ðŁıĪðŁıĪ\nuncu lus\ntwee ty\nsquaw ka\np russian\noro ville\nm pe\nker i\ncolin morgan\nay ush\n_ âģ©\n. âĢĶ\nà ¹\nshed d\nshe en\nrose dale\npa chy\nmix mag\nincen diary\ngil git\ncat ac\nbold ness\nambu shed\nalco a\nü n\nso con\nrati fy\nplu ri\non air\nfl p\neng els\neb ner\nbron zer\nbro s\nalig ns\nķ ï¸ı\nì Ķ\nprosecu ting\nprofo sinbajo\nobscur ity\nn tl\nlu ger\ngonzá lez\nepile psy\nbo fa\nali fornia\n\' !!\nãĤ Ĵ\nठ²\nwwe supercard\nwt f\nwin ch\nwee vil\ntwit song\ntv guide\nsupp os\nspir o\ni see\nate ez\nvy as\nsoom pi\nny dailynews\nhand loom\nco bble\nbolsho i\naz ing\naw olf\nan kit\nðŁ¤¦ ðŁı»âĢįâĻĤï¸ı\nway land\ntrack andfield\ntear oom\nscoundre ls\npo b\nover fishing\nen ia\nbar bosa\nalicec ooper\n) *\nwe day\nin activity\nhel lish\ndor dog\naxi om\në¸ĶëŀĻ íķijíģ¬\nthra shed\nsu tter\nstra iner\nso ren\nram o\nope ia\nnikki sixx\nky derby\nflori dian\ncallaway golf\nc ml\nbran ford\nbird house\nbaby face\nthe cho\nsimon cowell\nmove able\nmeatfree monday\nlo red\nlaun chers\nko alas\nkingscol leg\nja v\ngor gonz\nfemin a\ncar mona\nan sky\nz ep\nverte brae\ntime y\nskill susa\nshir in\nser gi\nre gan\npha il\nnorth gate\nmo eller\nkeralafloo ds\nke swick\niti e\nhar psic\nfin cher\ndc l\ncarmar then\namit abh\nalzheimer ssoc\nab jp\npace maker\nore m\nlyca productions\nen sued\nee c\ndonald glover\nbot tega\nwy z\nrun d\npour ri\no dys\nmy ron\nle ti\nla dd\njc ps\nheal ers\ngreys abc\nfair mount\nbru v\nanton in\najay i\nê² ½\nspr inge\npress forprogress\np ase\nlo ons\nkellyanne polls\nic are\nfre da\nfox conn\nde france\nag all\nac ne\n[ âĢ¦\nðŁĮ ij\nv gc\nshow ground\npound land\nolympi que\nmanife sted\nkar as\njack fruit\ninstru ct\nin our\nil ab\nhel sing\nal meria\nì§Ģ 민\nÐ ´\nver ock\ntl m\noc elot\ngas pari\ndata security\ncher ub\nc vb\nbirth ed\nbel voir\nbar rack\nbak lava\nad min\nðŁĺģ .\nun er\ntech ni\nsu ena\nrot ated\npenny dreadful\npel tier\nmic ally\nf naf\ncipri ani\nauto car\nany day\nÃŃ o\nvignesh shivn\nsr u\nre ttes\nmb p\nmarsh alls\nlegi ble\nlabrador ite\ne az\nday ne\ncon val\nci se\nchimic hurri\nblack currant\nbar y\nba ale\nash burn\nðŁļĹ ðŁĴ¨\ny adi\nsu bang\nsave money\non in\nnhl allstar\nk fc\ngrin ders\ngates foundation\nâģ© !\nti dy\nsky lines\nmor land\nfull house\nex l\nevery man\nto ft\npp l\nperpetr ated\nnand ini\nmines weeper\nlove of\ningra ham\nen elson\nda as\ncam pari\nann ul\na art\nðŁļ ¦\nstun tman\nspr inging\nnou vel\nmillion dollar\nin hib\nher der\nentang lement\ndi spl\ncom batting\nbattle star\nwhel p\ntru ssell\nsrebren ica\nrt é\no tica\nmumb les\ner st\ncoc teau\nuc f\nsummer ville\nsuggesti ve\ng pus\nescar p\ned son\ndg asm\ncap ta\nab ir\nzak har\nwoo kie\nvicti mized\nthu pp\nthe book\nstra it\nsports man\nscher zer\nraj kum\nown it\nmc cour\nle ib\nhor ia\nholy field\nexcel ente\nest ilo\nel am\ne ben\ncoyo te\namazon ian\nrocket league\nritten house\npublic lands\nmat ador\nmanife sting\nkar n\nafri end\nw yl\nw lc\nt mb\nqui que\npatriarch al\np sac\nj ago\ngi bby\nde colon\ncontra ption\nbrid ger\nastoni shed\nå ³\nwater sports\ntimeout london\nten o\nquanti fy\nnap time\nmoh fw\nknow sley\nhei fers\ngasco igne\nfree k\nei ffel\ncollar bone\nbrazili an\nvi dad\nuc davis\nr itt\nopen street\nmoun ties\nmin ton\nkryst led\nk uni\nhol ton\nflash point\nduali pa\nwill be\nv alls\nry t\nre issues\nna die\nluhan sk\nl pool\nguil le\ndi strust\ndes man\napo o\nðŁIJ ¤\nsin tl\nrever ie\nma kon\nle ve\njak ob\nhor ni\ndd b\ncam ryn\në ¡ľ\nymoun tains\nwedding photographer\nvit oria\ntome try\ntal ons\nsche in\nran jit\npau lin\npast el\nor atory\nneve rending\nmon fils\nlibrary life\nli si\nindi atv\nbin ks\nbi da\nai kido\nvictor s\ntur day\nsport smen\nshru gged\nsal ves\nre gn\npeer less\npate k\njj ba\nguern sey\nexuber ant\nblack berry\nwel fare\nstu deb\nquay side\nnar ay\nlou don\nf wx\ndise ño\ncel e\nbohe me\nawe b\nantic o\nanthony f\nador ably\naamir khan\nstock pile\npe tty\npas se\npa stu\nmoderni zed\nman z\nle vers\njun tas\ngras shoppers\na stre\nw ta\nthegreat awakening\npas coe\nng k\njen o\nd se\ncla vic\n& \'\nwe faq\nwe care\nsun spot\nrai den\noptic al\nonce acard\njav dekar\nhouse made\nfirst born\nerec tion\nde angelo\nbal ah\nalp ina\nðŁĴķðŁĴķ ðŁĴķðŁĴķ\nsla shes\nra ucous\npal ac\nhey man\ngh ir\nfo yles\ncrou ching\nchanging lives\nau la\nas ghar\napol lon\nab stin\nsan kal\nmonro via\nl alo\nkangan aran\ncar yl\nbirth time\nam ano\nðŁĴĽ ðŁĴľ\nunapologe tically\nsom o\nsh of\nsey i\nprop tech\nong ed\nni hon\nnas ri\nmat tia\nman ik\nlo gar\njur ong\nit ti\nhay dock\ndon russ\ndis respecting\ncarnegie hall\nano dized\n© ï¸ı\ntex po\nss an\nrobin williams\npun che\nmon ero\nmo hair\nmanit ou\ninterst iti\nhome red\nfsprint monday\ntan u\nsu bbing\nshiel ded\nratt ling\nrak itic\nquest love\nman orama\nlook north\njun hyung\nisma el\ngrumpy cat\nfro lic\nescal ators\ndÃŃ as\nde bar\ncolleg elife\ncle v\nbrick work\nbom er\nall ama\ny urt\nvul a\nspreadthe word\nped ics\nlom ax\nl uring\nkr u\nhuman resources\nhe dging\nhar wich\ngoo ber\ncrutch low\ncly ne\ny v\nthessaloni ans\nspir als\nplant ar\nhang man\nhai fa\ngyp sum\ngl p\ngameof thrones\nadvo care\nwa yof\nstar times\nor a\noccu pies\nmisogy nist\nku d\nkello gg\ng under\nfoli um\nemily bett\nbig blue\naw oman\nsp aring\nsop p\npar ound\nmind body\nmail boxes\nla zer\nj so\ngreat british\ngi lead\nf ba\nch aves\nce vents\nc so\naw oke\nal aw\nak ong\nyoung thug\nru ll\npoly styrene\npe ñ\noko ye\nlip stick\nke fir\nhi x\nflu oro\ndi aling\nam ana\ntraxx as\nsu j\nstra m\nsas soon\nmm snippets\nhan if\nfiduci ary\nco stan\nblu shes\nav ale\naf p\n/ \'\nè ĩ\nwedding venue\nuniver se\nshrin ers\nreli ef\nob in\nmike the\nmat os\njo ckey\njam in\nintric ately\nil da\ngli ders\nex xx\nyu lia\nwg me\nw pli\nsc lo\nra ker\npatter n\nob it\nmaster works\nlandsc aped\nl sp\nl ers\nkav ita\nih g\nfly past\nextracur ricular\nend anger\ncape breton\nbra x\nbor row\naction figures\nw bbl\ntal kers\nsau cers\nre adi\nmam mal\nm sport\ni ee\ng hal\nback light\nb ww\nak ane\nsti ve\nmy peakchallenge\nil ana\nsand ed\npi ety\nke es\nhur l\nharry shum\neag s\ndro ids\ndo v\ncity news\nbrai ding\nbarclay scenter\nband era\nภŁ\ny ada\nwedd le\nvarou fakis\nswel tering\nspecial needs\nsjo fficial\nsax ons\nriaz theboss\nrashtrapati bhvn\nmi ms\nkro q\nhar nesses\ng sma\nfreder ik\ndy an\ncolo res\ncentri st\nbrain wash\nbe ow\nay ton\nax o\naureli a\nace vedo\nç¾ İ\nا٠ģ\nyas mine\nstel vio\nscoo by\nmul van\ni got\nendo scopy\ndil bert\nðŁĴħ ðŁı»\nx drive\npower train\nh de\nfoster care\neloqu ently\ncarbon dale\nwh all\nun ing\nti fying\nsuperintend ents\nsm fh\nof tware\nmu tts\nkrystled souza\nfar thing\ntransm itting\nsig net\nportrait photography\no varian\nkit sap\nkar ya\nd alian\nb sb\nb ho\nari zing\nãĥ³ãĥĢ ãĥ¼\nà¹ģภ¥\nsam bal\nnew in\nmusic ed\nmonaster ies\nmarke tresearch\nlovel o\ndi op\ndeta inee\nwhe ate\nsol er\nsa wyer\nred ales\nlan es\ndan zig\nbac chan\nb iss\naustr alis\nab acus\nwhat vegan\nupp sala\ntull amore\nsoci ological\ns van\nru ffin\nnepo tism\nms gs\nke mi\nka hu\nex pun\nec ks\nðŁĺģ ðŁĺģðŁĺģðŁĺģ\nwhit church\nw elive\nun block\nu cr\ntow path\nsen er\nrede ye\nr ch\npear land\no afc\nlamb ton\nimagin ations\nfashion wk\ndaily doodle\nay man\napart ment\ní Ĺ\ntahir ul\nsei do\nok on\no jos\nmu dra\nmor tuary\nis thenew\nfore fathers\nfern dale\ndel phine\ncarre four\nbor gs\nðŁ¥ ¶\ntie fling\nth and\nsel hurst\nre ya\nnei ge\nmi ha\nmedic board\njann at\ni movie\nhol dsworth\ngu en\ngat ari\ngarden ia\ncho bani\nca sta\nben nie\nyule tide\nr se\nproud coach\nlu te\njosh ane\ngu era\ngl ac\nfar mb\nexu des\neng le\nbattle fields\nap akistan\nÙĨ ا\nss gt\nshar pest\npower shot\nmar fa\nlaur am\nharryshum jr\ngo ole\nespan ol\ndis d\ncas sel\ncam ise\nargon ne\nyos bourne\nuk bloggers\nta kay\nm strong\nlubric ants\nkine siology\nkas am\ngame sh\neu ri\ndisc golf\ndev ans\ncha os\nauto desk\nâĿ ¯\nwim ming\nwa id\nvaliant comics\nsimul ating\npo pes\non dor\nmari anna\nlop sided\nisab ela\ngame maker\nflead h\neaster weekend\nbhu mi\nbar ges\nani shin\níĺ ģ\nsand ara\nmay i\nlo es\nkin son\ngodav ari\nb fast\navi onics\nab elle\n. ðŁĺī\nloveyour petday\nkru sh\nimport ers\nfro mage\neast side\ne ey\nc mom\nbo die\nbl x\nul cer\ntm h\nsa ito\nreti ree\nps al\npret ties\nmaritim es\nmagalu f\nm fm\njenson button\nin am\ncar hartt\nbun da\navi gnon\nneed a\nip f\nic le\ndews bury\nbar ker\nandre ww\nðŁĺĿ ðŁĺĿðŁĺĿ\nther mos\nsonic thehedgehog\nm nc\nla vine\nglo u\ncar club\nag gs\nac tional\nac cou\nab cf\ny atta\nvis co\nver bena\nsyner gi\npri mes\nphar ao\np ella\nner uda\nmo tos\nguel ph\ncor re\nbang erz\naw l\nauth ackeray\nall saints\nae v\nun circulated\nste ading\nprecision medicine\no stomy\nmust see\nmediac ell\nkwe si\nju al\nim c\nghet to\nfla vi\nem pathetic\ndip brow\ncriti ques\ncri si\nador n\nðŁ¤ ¬\nstap h\nrol le\nre tur\nbab yyy\nye et\nwild horses\nwel wyn\nstop her\nsee ger\nreiter ated\nnl ds\nlo ge\nhead ings\ngorgonz ola\nen caustic\ndi u\ndi sta\ndam me\nch iron\nbike to\nðŁĮ¸ ðŁĮ¸\nwar is\nusa hockey\nthe placetobe\nsnow boarder\nsheskindahot vma\nsal ome\nowen sboro\nk ler\nim perfection\nif ta\nhouse keeper\ngu v\ngame changers\nest amos\nbu kol\nbom ba\ntol ling\nsteal thy\nsta x\nsketch up\nsc lu\npol and\nmis cha\njin ja\ngre go\nda star\nas al\nar arat\nãĤ¤ ãĥ©\nಠ®\ntw irl\nt ws\npu cci\npar ading\nkal am\nis fahan\nhimach alpradesh\net l\ncopy righted\nco heed\nar kin\nah n\nag ad\nack o\nac op\nðŁļ ľ\nðŁij Ĥ\nâĺºï¸ı ⾨\nyan ew\nun divided\null man\nt q\nst ds\npa sion\nminim alistic\nmenis cus\njo st\nich thyo\ngol e\nwsb k\nspo kane\nleav ing\nkan n\niter ative\ncel ica\nbl arney\nðŁĴ Ĩ\nzz les\nwomenshi story\nvick sburg\nun p\nswa b\nsof tball\nro or\npamp ers\npa ch\nni ya\nneutr ino\nit f\nhaver ford\ngroo vin\nfa thom\nf mx\nart space\nab ounds\nâľĬ ðŁı¼\nt ams\nn ham\nju ggle\njol ene\nbrandy wine\naugu stin\nðŁĴ£ ðŁĴ£\nëī´ ìĿ´\nz is\nsm d\npa del\nni ec\nman fro\nke iser\ngrown up\nblo opers\nbar tow\nad hi\nrun ways\nrang i\nportu gal\npapp as\nmen der\nmal aw\nex ert\namwriting fantasy\nçĶ »\nåĪ Ĩ\ntrek ker\ntele matics\nsf d\npap an\nou tro\noptic ians\nniker unning\nlmfa ooooo\nlal it\niso bel\nfair play\nexpen sed\ncanary wharf\ncall for\nbe ster\nah li\nzambe zi\nut ara\nstru mp\nsal to\npen y\nom id\nobstruc ting\nne re\nkre bs\nglyce mic\next ant\ndominican republic\ncour ting\nar re\nx eno\nren ta\nnew video\nmake the\nhorn bill\ngu ero\nfut sal\nfertili zers\nd di\nconstan tia\nó ¾\ntrustthe process\ntid bit\nte ese\nst ler\nseri als\npr ate\nlan ai\nge ta\nfeu er\nbun dling\ntent acle\nsilen cer\nshort comings\nsafe guards\npal atable\npag ano\nmissi t\nepile ptic\ned h\nde santiago\nbur k\nalab ang\nwsoc tv\nworka holics\nwe iss\nuto pian\nster t\nom ma\nloo o\nlol la\nho on\ngre ggs\nbeat y\nwe br\nup d\nun committed\ntrivi um\nt ce\npine hurst\nmaple wood\ngor gon\nek ta\nanthonyf joshua\nson ar\noste opathic\ngru elling\ndirector siva\nd th\nboye ga\nboli vian\ntan gel\nstrate gy\nst paul\nshel burne\nsch mitz\npla c\npal me\nniti sh\nmom mies\nhuman a\nfern anda\nfaver sham\ndi ana\nchu ckie\nâŃ ķ\nvig nette\nsail ing\npre show\nli gt\nkar loff\nhou sen\nh ft\nem pres\nbe vel\nbe sh\nâĺĥ ï¸ı\nta iling\nsilk screen\npri mal\noff erman\nmil dura\nking sport\nferr ous\ndg en\nchair manship\nðŁĴľ #\nsp outs\nsil ove\nschme ichel\ns lau\nri ken\nmc clintock\nlu strous\nk lau\njumper day\ngo atee\nglobal isation\nari ef\nafter shock\nzi ki\nwe aver\nsmo m\nsa si\nrecor ders\nra is\npear son\nip as\ni pe\nhumber side\nf ce\nbuck y\nbo ars\nwis s\nre ine\nprob st\nph ong\nintellectu al\nhandic rafts\nfd fs\nenterpri sing\ncocc al\ncic lismo\ncarr ara\nb vs\nak c\nðŁļ¨ðŁļ¨ ðŁļ¨ðŁļ¨\nyy ah\nweb shop\nsym biotic\nstu bby\nme phi\nmb ang\ne sea\nbut chered\nu vm\nrevol ting\nmac ca\nhhhh hhhh\ngun tur\nel be\ndragonball z\ncatch phrase\nat tic\nan ee\nvo e\nvio lette\nunra veling\ntu ms\nsubur ban\nstruc turally\nstre ls\nse ch\nre si\npuj ols\npras anna\nom arosa\nnar ro\nlumber jacks\nja an\nfree book\nboss man\nblack ish\nav ali\nãĥķãĤ¡ãĤ¤ ãĥ³ãĥĢãĥ¼\nvo ce\nsearch light\nrejuven ated\npr n\nmar th\ngoal scoring\ngi vers\nga w\nfat ter\nvac ated\nts ons\nta pia\nshri ya\noswe stry\nop ter\nnow all\nmas ss\nlang kawi\njanethe virgin\ncarlo sp\nbudd hi\nbrit ains\nbe eps\nak han\nw ff\nprep on\nnavar re\nkas ar\ngran dest\nelev ation\nele on\nbra ithwaite\nbeaujol ais\nand ante\nาภģ\nyard age\nstal emate\nol lywood\nne ssie\nmam matus\ninf alli\nde ering\ncrude oil\nangu s\nam ex\n!!!!!!!! !!!!!!\nolm sted\nlin n\niri ses\nin xs\nimpac ton\nfaul k\ncurren tly\nba az\nwan ews\nske wed\nshind ong\nre po\np itu\noo ops\nmar zipan\nmar te\nmake sme\nh bs\ngedd es\ng bm\nfirst time\nes ks\nasi ago\nsar copha\nnal oxone\nkab out\ning rid\nglobe trotter\nc sir\nback fire\nba reng\ny w\nsa adi\nq asi\nopportun ity\nni khil\nms v\nmau ri\niron mantri\niron man\ningraham angle\nindie authors\ngrey son\níĭ °\nx mr\nstudio green\nse mma\nridicul ousness\nrec tory\nkon do\ninf ancy\nel clasico\ndeli very\nan caster\nach in\nÌ ¶\nsv pol\nsun o\nsp anner\nsolidar ity\nro hn\neag les\nd ti\nclau dette\nâ¬Ĩ ï¸ı\nxi amen\nword play\nwiki artapp\nv ath\nsur fri\npat anjali\northo pedics\ningu ish\ngle am\neu elections\nepi genetic\ncold water\nay a\nant agon\naer om\nade a\nab as\nÍ Ļ\nze eland\nsig graph\nphon o\nof com\nmar ni\ninve stec\nim not\ngener alized\nfromthe past\nad ob\nâĿ¯ âĿ¯\nwhat doyou\ntheo dor\nstitu te\nsac s\nk app\ndi mas\ncos ford\ncarry on\nbook ends\nai mim\nÍ ľ\nred sox\nk mc\njun cture\ninhal er\nharro gate\nafro beats\nvin cere\nsubli mation\nso ton\npe per\nmid week\nmi zer\nmedve dev\nlombar do\nfineart photography\ncol eridge\nco i\nchu b\ncardi omyo\nbro phy\nbalear ic\naster isk\nar und\nalabamaf tbl\nwrest lec\nun loved\ntime ter\nsav vy\nro sas\nrecy cles\nr cc\nmi speedway\nmat aram\nlund qvist\nlo vie\nfare awards\nclassi que\nboo know\ntr n\npu ddings\npost o\nmagdal en\ndav entry\ncarnival cruise\nbureau crats\nbeforeand after\nb dp\nwe tzel\nspring field\nmosco w\nhepat itis\ngre cia\ngame development\ndro it\ndiversi fying\nclass room\nut an\nup dat\ns itters\nport ada\nou bli\nnovo tel\nnag ar\nkw ang\nkrat om\ncroy don\nax on\nà¸Ļ à¸Ļ\nye vents\nwan aka\ntion less\nt sm\nshab bos\nrefriger ated\nra ku\nom f\nmari en\nlead right\nkla as\nk ering\njen kinson\ninte x\ngro te\ngalaxy note\ndelu sions\nchu mp\ntoys rus\nst pi\nspell man\nsom atic\nred und\nmci ver\nk pi\ninqui res\nicon ography\ndro ck\nastro loger\nabc tv\nu cir\nsu mer\nretri eved\nper vez\nnik las\nkar olin\ninfl at\nhol l\nhand guns\ngood beer\nfood festival\ndivin ation\ndash cam\nbbc doctorwho\nb caa\nłĪ ìĿ´\nì¤ ij\ntri pel\nsizz ler\nro op\nq na\nm gh\nlindsey graham\nlimo ges\nj anna\ngoo oooo\nghe ads\ncuri ously\ncl á\ncantal oupe\nbrook haven\nblin der\nbarri os\nyas sss\nws room\nwinter fell\nv cf\nsu spiri\nst end\nro omy\nr aro\nmarchfor science\nhar dracing\nfc p\nfat wa\nend zone\ndol lop\nru dra\nrio ting\npoul ter\npoche tte\non ds\no ge\nlu igi\nimpro v\ng bf\ndel as\ncan tik\nall you\nwasee mb\nsno hom\nposter ity\npash mina\nnb avote\nmg k\nde shaun\nclark gregg\ncav ing\nั à¹ī\nਠ°\nug m\nmil os\nlive sport\nho vers\ngam blers\nfour th\nform en\nfire up\nfar ing\nexecu tes\ndumb bell\nsu cht\nsny der\nsle d\nscorpi on\nrie gel\nfe asts\nf dp\ndi b\nconne ctor\ncb doil\nar gon\nâĢ¦ )\nu ft\nss ou\nre trace\nms b\nlone star\nkin shasa\njam balaya\nfan z\ncyber ne\nseneg alese\nne ther\nmid ori\nlaw enforcement\njawahar lal\nharper collins\nburning man\nat itis\nadol phe\næ ĭ\nwheel barrow\ntan ah\nsi ff\nsaw mill\nrose bowl\nown er\nnt l\nnathan sykes\nmorten sen\nkan sai\nkajal aggarwal\nhe user\nes auce\ncet ace\n༠ĭ\nwelcome back\ntin c\nsuperel mo\nrepri eve\nprokof iev\npis mo\ngo vic\nen j\ncorri ere\nbel ushi\nali za\nur ya\ntb g\nse va\nnd l\njaf ri\nghost face\nfino alla\nde war\ncolli des\nau sten\nãĢ ľ\nton ey\nthough toftheday\nta kara\nsher ingham\nshakti arora\npal ak\nmut ant\nmk r\nlo ony\nkno tt\nin cest\ngul u\ncri ssc\ncentral parknyc\nc ca\nbar bs\nx ander\nsupp s\nsky y\nsamsung mobile\nnail polish\nmak toum\nle da\nlar der\nfour nier\ndicho tomy\nbigre d\nas un\nale sso\nt dim\nsuz hou\nsong stress\npla sm\nmind sets\nkeer thy\nju k\ni in\nche sts\nanivers ario\nafter shave\nteacher life\nstar fire\nshi vani\npeck ers\npancreatic cancer\nkana wha\ninst inc\nhtc vive\nbulldo zer\nbliss fully\nangel o\nÙĪ ÙĦ\nË ļ\nze es\ntime frame\nshe etz\nser o\nsent ral\npt g\nnc is\nnak o\nlo pez\nhive works\nhany u\nf pa\nenab lement\nelectr ically\ncam ilo\ncaled on\nade yemi\nteam love\nrevolution ise\nmach ined\nfili pp\nfate go\nd hu\nchri sp\nbon afi\nb sw\ntus ks\nrefresh ingly\nmuhar ram\nhigh roller\nfre eland\ndat as\ncru ella\ntwee dy\nsee b\nper k\nmerit orious\nlu do\nl wc\nin dc\nic hoo\nhare wood\nbur rowing\nbur ris\nback waters\nal don\nsun devil\nsne st\nph es\npart i\nka ha\neng l\ncon cu\nbed azz\nðŁĴħ ðŁı¼\ntin ts\nt mg\nshan tae\nnighthaw ks\nni es\nmiraculous ladybug\nming us\nma kings\nlhh atl\njoy news\ni ums\nbystand ers\n!!! ]\nâļ½ âļ½\nwo g\nvive k\ntr attor\nto bler\nsimpli fies\nsc er\nnew z\nlam my\njay ne\nham my\nhair less\ngra u\ngat uck\nfri ghtful\ne au\ndelinqu ent\nchech nya\nari sen\nali ons\n! âĿ¤ï¸ı\nઠ¾\nਠ¿\nve get\ntown sh\nte entit\ntc as\nsoo k\nsl acking\nroman tics\nrock steady\norange ville\nneural networks\nmotor show\nmaya wati\nma hia\nlu sit\nisi ah\ner ken\nch allah\na one\nÐ ³\nö ster\nu aw\nthe matte\nsi go\nro bust\nmo hali\nmi staking\nmaje ed\nle sion\njc penney\nfung icide\ndy k\ncomic bookday\nboba fett\nrow d\npotenti als\npost punk\njig s\ninf lows\ninf ar\nen vis\nds r\nder py\nbig ten\nvast u\nsigni fy\npuer ta\npoo le\nlindi s\nlim itation\ni sps\ndor is\nco satu\nchromo somes\nboo the\nal arm\nðŁĮ Į\nweare uk\nvare la\nsun glass\nsec def\nsavethe bees\ns love\nper missions\nmi zor\nmacro photography\ngirl friend\nemmanu elle\ndes don\ncl m\nchesa peake\ncal is\nbo ps\nðŁ¤ ľ\nv st\nno vices\nme son\nlove our\nitten den\nit r\nir oned\nclu ster\nchar i\ncap sized\nave tt\nasy lum\narrang es\nab angan\nzi er\nyo d\nu sos\nte el\nsne ek\nru der\nori el\nmcne ese\nkill the\nkid ston\njam my\ninexplic able\nho th\ngriffi th\ngalax ie\ndeath stroke\nbut i\nðŁĺį ðŁĺİ\nwick er\nthi essen\nsan gha\npuni shable\npre ma\nme u\ninterpre ts\nida h\nharsh vardhan\ngen naro\nff p\nexhau stive\ne ke\ncha hal\ncatacom bs\namaal mallik\nÙ Ĥ\nut r\nul in\ntab lo\nsouth paw\nsor or\nroad blocks\nren zi\npre term\nlead generation\nhe dy\ngun shots\nfeyn man\ne phraim\nde grade\nd ama\nb cc\nam und\naf in\nðŁĴª #\nðŁİħ ðŁı»\nyand r\ntari q\nstre it\nstore ys\nsky blue\no connor\nnaz ism\nmoun i\nmacar oon\ni bex\ngen ces\ngee tha\nfree press\ndayo ff\ncle at\nbad awi\nan ko\nðŁļ Ĵ\nâĢ ı@\ntornad os\nstra sburg\npost ale\nom ers\nnim bus\nmurri eta\nil yn\nhou ser\nequ ate\neclip sed\ndis liked\naleksand ar\nal oo\naku fo\nâĦ ĥ\nty ron\nt with\nsport sday\nml w\nis l\nin experienced\nhom ily\nex xx\ndepri ve\ndeon tay\ncan ter\nbin di\narab iya\nadap tion\ntu belight\nlo ong\nle ith\nku wtk\nke ta\nka izen\nfro ch\nel ish\nel if\ndun ya\ndiec ast\ncommunic ates\nblack outs\narmen ians\nåĭ Ŀ\ná ķ\nri ke\npark land\nou tri\nnew bridge\nnational donutday\nhender sonville\nhailee steinfeld\nd antes\nco ffman\nz ano\nt lp\nsummari ze\nsud hir\nsole dad\nrami fications\npee te\notak on\nng ss\nloop holes\nle der\ninsomni ac\nh pu\ngag ne\ndhe er\nconst ables\nboom studios\nblock age\nbas sey\nas ad\nal ittle\nac le\nرÙĪ ب\nwhi pp\ntweet master\ntg it\nre manded\nmoff itt\nky an\nkno wh\nkidnapp ers\nki di\nji won\nin abudhabi\ndrive time\ncic ada\nchitt agong\nchallenge cup\nsoul less\npos i\nmorning star\nmanny pacquiao\nfre eride\ncap tor\nbro se\nbak ker\nalli um\nyy y\nxen ia\nwe iland\nvad achen\nse dent\nluxury realestate\nlac er\nkanganaran aut\nire x\nhager stown\nformat ted\nfashioni stas\nec f\ndema go\nclone wars\ncha day\nbook reviews\nay eee\nat trition\nasu per\nam d\nactor leeminho\nabp newstv\nãĢ ĭ\nwr p\nsu al\nstead y\nshim on\nre gener\nphoto sof\nn tsc\nmartin sville\nk vb\nhaw key\nfish bowl\nfil thy\ndin ge\ndar on\ncher on\nbarn acle\narchan a\nut ilit\nus abasketball\nshack le\nol itics\nmel endez\nlat h\ngraph ically\ngeor gin\ndv b\ndig itali\ncô te\ncover dale\nche quer\nassimil ation\nunder appreciated\ntodd ler\nqu arti\npig lets\np ounded\nmom entary\nint eli\nent um\ndal glish\nchop ard\naqu at\nal lam\nra scal\nole mis\nmat era\nlate show\nheff ernan\nex ols\nen emy\ncom stock\nze gna\nwel la\nviol ins\nt ti\nstudeb aker\nscotti a\npash tun\non wisconsin\nnca as\nn lin\nmis anthro\nlul z\ndeco der\ncon lon\ncau sa\nay s\nanaesthe sia\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ı\nvine yard\non it\nko ep\nho echlin\nheart land\nhaw thorn\nfree mason\nblood lines\nbbc f\na ot\n! âłĢ\nye bo\nple ader\nne ssi\nmatt j\nke fal\ndoor s\ncylind rical\ncrumb led\nconve ctive\nbruck ner\nwaseemb adami\nvici ously\ntu bbs\ntreat able\nslide share\nshop lifting\nport landia\nnor cross\nmix ology\nleap frog\ninte stines\nhw dsb\nharness racing\nha igh\nglo bin\nge au\nflori dians\neli quid\ndread locks\ncollap sible\nwest co\nsang at\nrooi bos\nmobile apps\nher vey\nfeature friday\net us\ncor relates\nbiz kit\nank let\nta ff\nstick er\nsof la\nr tf\nproc ter\nphotom ode\nou ge\nme sa\nmal acca\nlar ks\nkot lin\nki hyun\ninaugur ating\ngodre j\ncar le\ncal o\nblack listed\n? ",\nâĶ Ī\ntrouble maker\ntol le\nspot lighting\ns gr\nrep sol\nrangas thal\npan demonium\nfr é\nforti fication\ncusto dians\ncapu chin\nalab aster\nw ound\nun sere\nsal tire\nnow ruz\nn tsb\nmove on\nmahi rakhan\nhead start\ndistin ctions\nannex ation\nðŁĴĿ ðŁĴĿ\nyas ser\nwestham utd\nth ong\nsab road\nro ld\npo bl\noc p\nloun ges\nl fp\ngo ffs\nfranco phone\ndevo tions\nd ni\nalex i\ntur ous\ntaj mahal\nse ad\nram ach\nneo classical\nl anny\nhal p\nðŁļ £\nsuperst itious\nshow y\nrelay forlife\npi sto\npart ite\nno dding\nit n\ngra smere\nfor zam\nfire emblem\nethno graphic\ndie hl\nder i\ndat i\ncam bma\nbr anca\napo li\nstructure fire\nspark ling\nn sta\nkosci us\njoo st\nhorizon zero\ngun nar\nder ives\ndc ps\ncre mat\nchoc ta\ncay uga\nble mish\nbi olumin\nbar co\nal ky\na health\nu aa\nsub mariner\nquot able\nponder osa\nnan omat\nmeen akshi\njojo ba\nim als\ngu ia\ndig is\nder ich\ncorti sol\ncoach j\nbra gs\nbenef itted\nðŁĩµðŁĩ ¸\nðŁ¥ ij\nwol fie\ntn es\nquick en\nlov u\njam m\nit sin\nfe es\nbecause of\nðŁİī #\nsa ket\noli a\nke ds\nhappy diwali\nful fills\nent omo\ncle xa\nanc ity\nalon ga\n! ;)\nwilliam shatner\nsunday supper\nsun ita\nsh anna\nrep in\nmar l\nmadd i\nkis sy\nke mal\nk fan\njak ub\nhoff enheim\nha ko\nfron tera\ndanden ong\ncooper tire\ncau tiously\nbon gs\nb him\nangr ily\naldu bi\nz p\nsnu ggly\nsas kia\npreci ous\nprakash javdekar\ninfin iti\nin roads\ncur bs\ncat i\nbu stin\nblack women\nben j\nballo oning\nbali k\nðŁļ ĵ\nthin blueline\nther yan\nthe justice\nshipy ards\nli bros\nj ase\ngre tna\nfi ba\nche khov\navl news\nune sco\ntr g\nro dol\nri ppin\npit to\npad lock\nno tan\nnic he\nink ling\nhaver hill\ncro hn\nchicago tribune\nback flip\nty p\nthursday thought\nsocial good\nre ise\npw g\nnor r\nnepal earthquake\nmin y\nmetho d\nliving wage\njon gup\nduke of\ncub ism\nb ough\nâľĬ ðŁı¿\nâĥ£ .\nyoun gs\nyaz oo\nwhi sper\ntre cords\nsu erte\nme tax\nlong list\nkub ica\nindv nz\ney y\ncla ren\nbread crumbs\nzig gy\nyu suke\nwin king\ntt rell\npa pel\nm sps\ngb ps\nwag on\nut p\nthel ondon\ntang ent\nstandard news\nsouth beach\nsece ssion\nfri c\nfelici dad\nev alley\nen bridge\ncour sera\nchro m\ncanni balism\nburn ham\nbill i\nbeau champ\naccent ure\nðŁIJ Ī\nu mesh\nto vey\nsmile day\npass the\nlar i\njas mine\nhodg kin\ngaf fe\nforest service\nf mc\nenth used\ndis advantages\ncur ren\nbl ended\në ©\n¿ ?\nunivers es\ntweetab ond\ntau po\ns las\npan ahon\noccu piers\nil len\nec y\ndro ppings\nboo yah\nbar as\nba cha\naf r\nภ³\nwi u\nprece dence\no gier\nnca aw\nmanohar parrikar\nmac aque\nio a\ngh man\nfrance sc\nburj khalifa\nbog dan\nav ala\ntrans for\nsto go\npon to\nn sn\nch achi\ncatholic twitter\nyy t\nun environment\nsof ar\npen ance\nmole station\nmassi f\nline ker\nkcam exico\nbuil der\nbak ken\napic ture\nsi res\nsav oy\nrelin qui\nmu ñ\nmag con\nk her\ni aa\nfo ther\nfam a\neditori als\nchel sey\nâĿĹ âĿĹ\nz inn\nw ud\nsel fre\nschau mburg\nlo carno\ndar cy\nco star\naustr o\nâĿ ®\nÅ ¡\nwa ha\nto end\nsus annah\nstag nation\nshi vering\nsau mya\nra gin\npaul wesley\nmaldivi an\ncombin ator\naven ue\n) ~\nâĺķï¸ı âĺķï¸ı\nwhitec ol\nwell come\ntra iled\nste pup\nsmar kets\nsavo ie\nren ard\nrabb itohs\nprefe rential\npanas onic\nnew forest\nka den\nfu en\nfix e\nfar ber\nba ig\nan jan\nzu kic\nuni watch\nunder cut\nsul tana\nretri evers\nramad an\npi xiv\nob b\njun ctions\nhall oran\nendor ser\ndecl an\ncu c\ncardi ac\nbe ath\nba al\nassi dy\nas pires\nadver sely\nwee kes\nun l\ntraining camp\nthene w\nter med\nrec itation\npu cker\nome gle\nki drau\nho cus\ngru ff\nelectr ical\ndoctr ination\ncra bby\ncosme tology\nce spedes\ncarni vores\nbr yo\nblit zer\nbe hr\nb nc\nam bo\nactu ator\nther aces\nstate bound\nstar ts\ndil ated\nburn in\nbir b\nyou saf\nsocial impact\nre gaining\nn ku\nholy week\nh mc\ncrack in\nclich é\nato ire\nwine and\nufcfight pass\nsal va\npen den\nmaryam rajavi\njay e\nhide ki\nar nett\nì¹ ´\nâĿ® âĿ®\nxxxx xxxx\ntomor ow\nto yo\nsun mi\npur sues\nmini figure\nhu ez\nclu bb\nbeingh uman\naqu ila\nab ah\n" -@\ny tfc\ntriple t\nsun belt\nstan dee\nshaw na\nrece ding\np sh\nmaster minds\nllewell yn\nim post\ngeograph ically\nyoun ger\nwer k\nperplex ed\nju z\nima d\nhep tathlon\nhay man\neye sore\ndu hamel\nbrock lesnar\nॠ¤\no scopy\nmor in\nlour d\nhil lel\nflo re\nero berts\ndoge coin\nboard game\nam ond\nðŁĺį ðŁĺ©\nscru m\nly ke\nju illi\nji yeon\ngriss om\nfou ling\nfo addo\nfidel is\nero ded\nen so\ne wr\ndown sizing\naie sec\ntwi x\nthe final\npla sti\nnit o\nnational selfieday\nmalay sians\nli re\nlepi dop\ness o\ndab bing\ncomplic ity\nbre merton\nÙĪر Ø©\nzay ns\nwau sau\nstim es\nslou ch\npis gah\npf ft\nn ans\nmedalli sts\nkar ol\nen sburg\nda aa\narch daily\nalpha retta\nupheav al\npp hoto\npan ig\nfla ir\neras er\nemper or\nbla dder\nbir t\n! ",\nâĹ¾ ï¸ı\nun met\nreu ter\nran cid\npert wee\nlin ds\nkansas speedway\njodha akbar\njersey shore\nheral ded\ndeple tion\ncu taway\ncomplic ation\ncal trans\nant ar\nun see\nu tic\ntw ar\nsp en\nram say\nnav an\nj bs\nhu mm\nherman os\nforever home\ncom prise\n. ðŁijĮ\nãģ ¤\nwin tour\nren tal\nreal paige\npin ching\npharao hs\nor den\nonthe go\nnewyears resolution\nmend ler\nk da\nis ler\ninde pendi\nim iss\ni eee\nhan ky\nda emon\n& #\nðŁĻĪ ðŁĻĪ\nu gg\nprimor dial\nnam mshow\nmamac ita\nku i\nk gf\nemer ick\nd ach\ncm shehbaz\nðŁįĬ ðŁįĬ\nvis ite\ntun atuesday\nshindeshil pas\none direction\nhis ar\nhazel wood\nhaun tingly\nh ley\ngif fords\nfo gg\ned le\nbram hall\nblac kest\nanxi eties\nyer ba\ntem pran\nsound ly\nimperi alist\ngo les\nghaz al\ndisp el\ncoffe elover\nvy bz\nsmall pox\npredictive analytics\nou tofthe\nno kid\nmr robot\ngi udice\neuph oric\nele gy\nda sher\nczecho slovakia\ncensor ing\nburn snight\nvic eroy\nukgif thour\nts am\nsnow mass\nsa ar\nrobb in\nrho d\nmce voy\nmc cauley\njoy ann\ni bar\nfor two\nf cn\ncharlat ans\nc ga\nat onement\naf oo\nad ine\nðŁĸ ¼\nðŁĮ ł\nvideo production\nv kenya\nv fl\nue ber\nneutr als\nnay ak\nlili ana\nla se\nherb aceous\nhe en\nchau vin\nbit sy\nann ap\nw aged\nven kat\ntail ors\nt shirt\nspor ted\nroyal caribbean\npe tunia\nmyr na\nin visi\naf o\nab dsc\nworld wildlifeday\nti gress\nth unders\nh na\ngon or\nclass y\naval dez\npois ons\npar abolic\nnba a\nn ado\nmcnab b\nloc sin\nhallucin o\ngri gor\nenter a\ndin ero\nd icky\nvis itt\nul ver\nsk al\nshort wave\nrae us\npleas anton\nou za\nkre m\nith i\nipad pro\nhi sham\nfill ings\nwh yy\nvio gnier\nu led\nthir l\nscu tt\nm ck\nkab a\nk one\ni shaq\nhome front\neclip ses\ndeau ville\ncaith ness\nber son\naviation photography\nðŁĸ¤ðŁĸ¤ ðŁĸ¤\nvarad kar\nshan kly\nrev ell\nre kindle\nli sac\nlazar o\ng si\ndavid duchovny\nclimate change\ncircul ate\ncan twell\ncan field\nbir ra\nÙħ ÙĨ\njohn legere\nj att\nhenri que\nfro mb\nconcer ted\ncic i\naller gens\nza id\nw ena\nvirgin trains\nsp ina\noro zco\noak dale\nlec tor\nir r\ninquis itor\nine ff\nhow th\nhof mann\ngum mies\ngilli ana\ngel dof\nfinal ising\nchrist church\nÙ ¹\ny id\nwal ken\ntro ck\ntr ong\ntar d\nsasha alexander\nme che\nlatest news\ngay atri\nf mf\nbi ffle\nsu ha\nshore birds\nol do\nlackaw anna\nl grw\ni ic\ngw adar\ncra ve\ncon ga\nb pl\nar ao\næľ ¨\nvend ra\nsilve stre\nrow land\nm power\nja vi\nec lair\ncompart ments\naaron carter\nwh s\ntol o\nsy denham\nsti pe\nskarsg ard\nric kie\nric ans\npay al\noutrage ously\ninciner ator\niam joshuagarcia\nhin dered\nherr mann\ngi ga\ndaw ns\ncf da\nbla zed\nbene detto\nba sha\nred heads\nko da\ni ano\ngh hh\nfre ep\ncu tty\nacknowle dg\nabre w\nðŁ¤¤ ðŁ¤¤\nâļłï¸ı âļłï¸ı\np ä\noc cit\nl gg\nl bd\nkuwa iti\ngb v\nap roud\n******** ********\nug lier\nto know\nswin burne\nsurg ically\nmyo ttawa\nke tamine\nc mn\nan amor\naci vil\nìĨĮëħ Ģ\ntrump ed\ntestic ular\nspen der\nsingh a\nror schach\npad am\nmen i\nle vinson\nkron os\nko ta\nhi stam\nharb ha\near ner\ndo dd\ncapital one\nap ne\nab es\nwc s\nven ation\nthe dark\nsp iller\nrichar dar\nplac enta\nme tv\nlov ren\nitt ing\nin du\ndown syndrome\ndes mond\nbukol asar\nagn st\n. âĢ¢\nuk ti\nspe t\nse ton\nrequ ited\nolive t\nhobb it\ncar is\nbas ra\nban yana\nak ing\nán chez\nya el\ny eni\nun faithful\ntahirul qadri\nstetho scope\nsanta fe\nrot ations\nnar whal\nn berg\nmuse u\nmc caw\nja official\ninfuri ating\nhispanic heritagemonth\ngir dle\ndaw ning\ncon anobrien\nbri sto\nblack coffee\nðŁĽ į\nten sile\nss un\nshe edy\nili stic\ngi on\nc mb\nbhattachar ya\nb æ\nam boy\nton do\ntom oz\nsel ba\nper gola\nokeecho bee\nhou wx\nhe ya\nground sman\ngriev ous\nco tab\narma an\napp g\nstop rush\nse ach\nrussi agate\nme gyn\nin doctrination\nhe ee\nhandi work\ngas sing\nfred rick\nenab lers\ndiabol ical\nchicago history\nbukolasar aki\nuro pa\ntun ney\nsteel er\non der\nly sm\nger wen\nen tails\nas says\nಠķ\nÙħ ÛĮ\nvampi rediaries\nse ig\nran ches\npa vements\nover sees\nmu ffler\nmedi ev\nhuman sof\ngo yal\near nest\ndecep tively\nback packers\nat lan\nww p\nturn ing\nst elling\nsel atan\ns you\npur y\nmasquer ading\nluxu ries\nhar ington\ngil d\nfindyou re\neve sham\nesc row\nery kah\nendeav ours\ncomfor ted\nchant elle\nari ver\nam ey\nwit ted\nstal ingrad\nspill way\nsli mbridge\nshel ved\nreal isation\nmeer ut\ngreen lantern\ngrat z\nflat tery\nef ly\ncy pru\ncount ing\nbookmy show\nat ini\nal bi\nâļ¾ï¸ı âļ¾ï¸ı\nvi render\nvari ety\nsun da\nquot ations\npublic speaking\noffice space\nmi ffy\nmad house\neun hae\nel td\ndro ss\nbuck ler\n⼠µ\nvi bes\nup grade\nu ga\nrag time\npar ro\nknu st\nke ven\ninsul ating\nici on\ngar ba\nel ph\ndel t\nax s\nvis conti\nr tx\npos al\nmy heroacademia\nmm in\ngroundhog day\ncuer vo\nchildhood memories\ncag ney\nbear grylls\nb awa\nwhatvegan seat\nun wto\nun officially\nthibau t\nthe struggle\nraj on\npho spho\njesuss aves\ngur ud\nfur tado\nfligh tradar\nes mol\nel eni\nbletch ley\nan otte\nad ol\nãĥķãĤ¡ãĤ¤ãĥ³ãĥĢãĥ¼ è¶ĬãģĹãģ®\nusp to\nten ured\npor ch\noo ze\nne go\nnbc newyork\nmal ty\nlogger head\nav il\nâĸ ij\ntw g\ntheod or\nquesad illas\npit ted\nmountain top\nml s\nmegap lane\nma sc\njust listed\njo ana\ngeo science\nfos goodwood\ndel o\nconve yed\nb ö\nas ado\nvibr ancy\nsey fried\nscott s\npam pl\nnation wide\nma shaallah\nlog i\nko st\ngo z\ngb k\nfoot note\ndau m\nbam bino\narcel or\nadel ine\ny j\nu ppers\ntransc endent\nthi stle\nstran s\nri mmer\nmoon lighting\nlie ch\ninexplic ably\nin motion\nhead quarter\nguadel oupe\nel um\ndordog ne\ndiamond back\nc td\nðŁijĬ ðŁı½\nwith friends\nspot light\nsplat form\nso beys\nshin obi\nscu ffle\nre sorting\nperi pher\nkak ar\nis sy\nhel ga\ncmom aharashtra\nbo logy\napp legate\nw os\nsway ing\nma uk\nhun ny\ngrand rapids\ngee ky\nfore caster\ne ate\nys r\nto si\nshe af\nsec ts\nrepatri ation\nreal es\npiyu sh\npi as\nmexico gp\nincon gru\ndee side\ncustom ise\nchi kan\nÙĤ رÙĪب\nwil frid\nwi sher\ntopi ary\nsouth yorkshire\ns ge\nreal tree\nnd is\nmarilyn manson\nm of\nkas parov\ngeof frey\nfor ges\naw anda\nwest midlands\nti ppy\nsit ar\nsho al\nshi zu\nroom ing\npuzz le\nmur illo\njes sup\nhur tful\nby un\nbront ë\nb wa\nwork manship\nw nep\num ami\nthe apprentice\nsmoo ch\nse hun\nse ff\nreve rent\npleas ance\nmm k\nher mine\nal art\nthevoice uk\npsychop aths\nor gul\nmor peth\ninger soll\nhydro xy\nhiphop tamizha\nge dy\ncha pe\nat rol\nย ย\nwine day\nwa o\nu news\ntiger shroff\nsom nath\nramm stein\npre neurs\npeter pan\npan jang\nnational championship\nman gal\nfor gery\ndru ids\nðŁįĤ ðŁįģ\nrl wc\npin ner\nnan ce\nguar dra\nbridg water\nbor de\nblack star\natta ining\nag ates\nðŁį ¨\nyau pdates\ntru dy\ntortoise shell\nsch ell\nmeg aphone\njoey logano\njin ki\ninduc es\ngo oners\ngigab yte\ngack t\nescal ates\nclassic movies\nwet land\ntumb les\nistan bul\ni ic\nfran tically\nfore runner\nesh war\nchildre nof\nba aghi\nal ente\nâĢ¦ :\nshab bat\nou ise\nic j\ngi i\nfav ela\ncran ked\nco iled\nbul king\nap am\naf ood\nsir f\nse to\npop culture\nperpetu ally\nli dia\nla pp\nkai ros\ndeaf ening\ncr ate\ncool more\nconve ys\nðŁijĮ ðŁı¾\nvic hy\nsm acks\nletsgo pens\nhu mong\nher m\nemma us\ne and\ncali per\nah hhhhhh\n\\( ^\n~ !!\nyar ch\nuniver so\nste me\nsp ader\npe pit\npe ct\nnight sky\ngla dwell\nflorida keys\ncurb side\ncon joined\nc ville\nbb z\nvisit devon\nsky net\nsas so\nsand ford\nplu mes\nimpost or\nhomes forsale\nhair dontcare\ndisru pts\ncin elli\nsuppre ssing\nspeak up\nseren di\nphil bin\npdp nig\nnon leagu\nne ville\nmtp spride\nmar ci\nlen non\nld p\nkam an\nfront line\never ly\ndo cker\nco vet\nclo ser\nìĬ¤íĬ¸ë łĪìĿ´\næ Ħ\nwin it\nwelove history\nwebcam s\nw mp\nur bang\nsw ood\nstro wman\nport ad\not ts\nobse ss\nmic ra\nir repar\nhelen clar\ncampaign for\nbeck in\nbar ros\nal barn\nad vi\nvar vatos\nske eter\nsit c\nis z\nhygien ist\nen on\ncro ke\ncrich ton\ncar nou\nag round\nâĪ ĩ\nwh izz\nwelove you\nstour bridge\nsentin els\nregal o\nofficial pdpnig\nmyn tra\ngonawaz go\nbu sker\nbio economy\nangle sey\n.. &\n+ /\nz vezda\nunion strong\nte man\nsav o\npolit as\npe tron\norig i\nop ro\nmit ty\nhen nig\ng aku\nforen sic\nfar c\nand an\ntb n\nspeci ale\nsm ite\nsiri ano\npress ley\nox lade\nkingscolleg elon\nkau shik\nholi est\nfu sel\nfre di\ndalmati ans\nbc b\nbat woman\n- ____\nvegas born\nun supervised\nste le\nm ft\nk md\nho shi\ngo vols\nfour nette\nchaun cey\nannivers ary\nsrilan kan\nmil ad\nlac ombe\njake miller\ngall a\nff r\nec to\ncu bby\nbe cher\nri gg\nkra ft\nhin dr\nha tha\nfundament alist\nerat ops\ndun yaupdates\ncor niche\ncongre s\nbumble bees\nblock party\nabsur dly\nwh et\nve ta\nun bridled\nulls water\ntri star\nstr inging\nmickeym ouse\nic ar\nhope lessly\ngu zzi\nfire proof\ndul ce\nd co\ncommon core\ncis se\nbol ted\na bet\nzebra fish\nt ze\nt pm\nswi ped\nsean flanery\nsan ford\npas ay\nnetwork marketing\nmitch el\nmike shinoda\nmediacell ppp\nmach en\nkrispy kreme\nkey ston\nk hon\nhumm els\ngrow thegame\ncamino desantiago\nza z\npeace maker\npay pig\nle yofficial\niu cn\ngri l\ndiony sus\ndinner time\nde ming\ndc fcofficial\nbi ba\namity ville\nðŁĺ¤ ðŁĺ¤\në° Ķ\nwatch tower\nva v\ntel eno\nsto the\nshi pping\nrhe in\np ft\nma aa\nm sci\nitsal labout\nh bc\nfri sco\neast lake\ndark siders\ncroati a\nchar n\nbrah min\nbol ing\nsie h\nsh allo\ns ram\nney land\nnature lover\nmh saa\nmartinsville swy\nm pi\nling ua\nli za\ninst one\nic up\nhu x\nemerging markets\nbur d\namo tors\n! ðŁijĮ\nðŁį ²\nâļ½ï¸ı ðŁıĨ\nâĺº âĻ¥\ntc s\ntaek ook\nsh ina\nq n\nple te\nni mb\nml k\nmil by\nli ma\nkel ce\nj ingles\ngroovy bruce\nfor aged\nct g\nconspir ators\nwind breaker\nwar lords\ntol uca\nlan o\njoyann reid\nil uv\nhoku sai\ngetty museum\nextermin ation\ncro f\nball ina\nðŁķ ij\nà¸Ńภ¢\nofc trendsetter\nmu star\nilli st\nchristi esinc\ncancer awareness\néŁ ³\nภĤ\nyuk on\nw fu\nvintage style\ntel kom\npho tol\nmi stresses\nll cool\nku an\ni fly\nespino za\nduff erin\ndono van\nchil terns\ncal train\nbio grapher\nber nese\nbelie ber\naw ami\nann als\nalber tans\nzing is\nwv wx\nrat ch\nmu ms\nku lit\nkav a\ninter view\ni hl\nemra an\nd li\nc ll\nbroad church\nbl ks\naw wwwww\nannot ations\nvent i\nru bles\npl ondon\nol lo\nmor avian\ninter cess\nintensi fying\ngra vely\ngame week\nflint stone\ndis missing\ndash boards\ncr outons\nbelt line\nðŁĴªðŁı» ðŁĴªðŁı»\nðŁ§ Ģ\nwill ys\ntwitch affiliate\nst nt\nre mun\nout weigh\nnoo ks\nmin dia\ni led\nhome screen\nfurnitu re\nbe om\nazerbai jani\nalley way\n? ]\nðŁĵ ķ\nta chy\nshuttle worth\nquit os\nperi winkle\nmiti gated\nlu mix\nitv news\ni ep\ngaz pacho\ngay i\nen trusted\nem me\ncc n\ncaf f\nbombar ded\nbo chum\ntul sa\np gr\nmic ror\nkur z\nku da\njacob i\ninsur rection\nel ko\neast london\nak ure\nwomen artists\nspin ning\npark dale\nn gi\nlud wig\namar k\nw pri\nrashi da\npod caster\no ster\nku chen\nit es\ngh sa\nfollow us\ndefe cted\ndeci mated\ncomple anno\nc qc\nbeach wear\naw ash\npo ff\nmitch am\nmc clo\nin cit\nhol ic\nev ander\ndy no\ndur an\ndo co\nco efficient\ncalgary stampede\nbig south\nanimal kingdom\næ ±\nwy ch\nte les\nsud hir\nstu ar\ngw ang\ng lynne\neu in\ndav ila\nbir i\nagu as\nðŁİĪ ðŁİĪ\nz adeh\nto st\ntechno logists\nsy th\nsuzi day\nsk l\nrein hard\nmis soni\nmat ely\nhell er\nfa jitas\neu ch\ner go\ncm j\nbo hs\nvape on\ntrace ability\ntom holland\nstac ie\nsapp hires\nsam phire\nre ge\nprin temps\nnic hol\nmultiv it\nmari el\nlo tions\nli ddle\nit stime\nindi as\ngi rish\nforeign policy\nfar ina\nem bry\ndisc ord\naj style\ntw ye\nset te\nphysical therapy\nje ze\nfu ele\nfat bike\nex hor\ncap ra\nb chs\nre dox\npicture books\nme gaz\nme gar\njo sep\ngre ent\ncre ating\nce v\nb fi\nadebay or\nâĢ »\nuw m\nte g\nt ni\nro es\nres tha\nre fra\npc w\noc n\nmole cular\nmi it\nkirkle es\nint x\ngyp sies\ngu da\ngr anger\nger on\nfle ur\nfin kel\nfe ely\nevi an\nend ran\ncat lady\nbiar ritz\nban ky\nyoutu ber\nyanew ade\ntic ia\nsupre mes\nross lyn\npi pit\npassi v\nnc state\nmr chuckd\nmayor ship\nmati sm\neuchar istic\ndw yanewade\nd sc\ncur mu\nboy z\nam ours\nac ms\nyu rion\ntricol our\nsa al\nren aud\nramesh laus\nphotoo ftheweek\nol vi\nocclu sion\nmoul ded\nkour tney\nillumin ations\nali garh\nalas dair\nye yes\nturn tables\nsil ence\nsharpen ed\nre sp\npatric io\npal omar\nkre we\ninternation ale\nemb ert\ndesmo ines\nar ap\namotor sport\nabergaven ny\nðŁİ ¡\ntownsh end\nover doses\nmile split\nmiddle bury\nless on\ni pa\nhat ter\ngeorge galloway\nfla vin\ndisappo intments\nconchit aw\ncantab ria\nblur ring\nbe ec\nast m\nwork able\nty sons\nswing ers\nin humans\ndormit ory\ndc ms\ndaryl dixon\nda shi\nburn um\nym iller\nvill alo\nri bery\nplay room\nm ander\njo a\ndigiti zing\ndar ley\ncloi sters\nbrad paisley\nup enn\nstay strong\nre edy\nmacken zie\nk stp\nj inn\nit g\ninstrument alist\nbuff ed\nbl acc\nabra hams\nzu l\nthisi scle\nrear don\nphoto cards\nper verted\nou ble\nkh ati\nk ly\nis kcon\ngha da\nfr itz\nfa ites\nen etwork\neast bay\ndev con\nd bt\ncountry wide\ncolumb a\nclo the\nalex ab\nิ à¹ī\nwy then\nvinay ak\nsch ick\nru fu\nmaking amur\ngo pi\nec kel\ndoor mat\nca vie\naw ines\nwan ath\nvege tarian\nvan halen\nsa wareness\nrocket man\npan di\nmom mas\nlloren te\nkavan augh\nk ı\nic ro\nde pts\nconti gu\nclaudi us\nven u\nsu ki\nscru pul\nsap a\nmin ce\nman to\ngau lle\nba esy\nati mes\nap alach\nan ana\nug x\nsave alife\nnu ri\nkre uk\nhoney dew\nha de\nfre q\nfarra gut\nfamili arity\ndoo t\nde cou\nba ils\nba ier\naz har\nand ri\nuni form\nth ylene\nspokes woman\nsp ate\nshi on\npresi dio\non key\nncaadi i\nmin woo\nit yof\ngal ette\nfur nish\nfe de\ncedar point\nbrin dle\nbigh it\naccu mulator\n........ ........\nâĿ¤ï¸ı ðŁĴķ\nver na\ntri vikram\nsel y\nnik os\nmoff att\nmake sthe\nj x\ni spower\nhen ce\nelis se\nda unt\ncric info\nback less\naj k\nab ner\nðŁĸ ĸ\nus w\nsei ya\npry dz\np mest\non us\nmic honne\nkap uso\njets go\njaf ar\nhen don\ngoo domens\nem its\negre gious\nconchitaw urst\nbird guides\nber to\naur i\najstyle sorg\nvo tto\nspr out\nseri e\nre finance\nprotectour care\nomo hoy\nne os\nnational poetrymonth\nmin strel\nmin eo\nlighting design\nkin caid\nfoo dis\nfar b\ndiv as\ndavidbowie real\nd wc\nconfu ses\nala unch\nðŁĮŁðŁĮŁ ðŁĮŁðŁĮŁðŁĮŁ\nëĿ ¼\nå Ŀ\nw aker\nri xton\nphilli ppe\no au\nkan ka\ndo cher\nthem out\nsm it\nseaco ast\nscott morrison\nro magna\nmc part\nlife savers\nl bw\nhu me\ner v\nding dong\ncon us\ncha at\nad al\naco yotes\nðŁĺĬ ðŁİī\náµ Ĺ\ntour ny\nsp ic\nsecon dly\nsamu rai\npo te\nper ovsk\nparkrun uk\nparalym pic\nidri selba\nha pi\ngra v\ngr rl\nfawad khan\ndj snake\nchil ife\ncapt cha\nvol voo\nt ci\nsab ri\npul ver\nonlined ating\nnewarri vals\nmelis sab\nj ala\ndomest ically\ndevon life\naper ol\namare tto\nad olph\nðŁİ «\nìĿ ¼\nwake boarding\nmulti plying\nmoffe tt\nmais y\njo z\nin hab\ngermin ation\ndi dit\ncre pu\nad ella\nðŁıĥ ðŁıĥ\nwen sley\ntwel ve\nspur red\nspoo ks\nspear mint\nsnow mageddon\nselec tors\nsc ms\npar si\nnew listing\nlarge mouth\nkak ashi\ncab elas\nbry ony\nba as\nash ken\napriv acy\nðŁĺģ #\nðŁij» ðŁij»\nwar si\nru te\nmapp le\nfoot paths\nelan tra\ncc cc\nbluejacket snhl\nãĤ ±\ntreati se\nstret chy\nre pro\no din\nit sk\nino y\nhal ei\ngy e\nfronten ac\ncaptiv ate\nax o\namy jackson\na pre\nðŁĺĢ #\nzoo ey\nw faa\nthen et\nsqu awk\nschu le\ns warming\nplan tains\nofficial livepd\nkam u\nhom et\nhel pin\nhar de\ng sb\nchas in\ntu ts\nphilosophi es\nosc ale\norchi d\noceano graphy\nmod ding\nl sh\nfirstre spon\neduc ate\ndemo ted\ncomp ad\nco gs\nâĨ ĵ\nwolf pack\nwen del\nw gs\ntooth brushes\nth ame\nra hat\npet ter\npad ova\nmel ly\nmar aming\nma sen\nky lee\ninvest iture\nhow es\nhol st\nblockcha intechnology\nz app\nstar wood\nsan born\nsam osa\nmuh lenberg\nmc ve\nloop y\nir ty\nhyper x\nfri el\ncr ony\nbo bi\nbest ofthe\nber o\nbee feat\nano che\nwil w\nta pering\nself defense\nle vis\nivo ire\niti ba\nedinburgh uni\ncamber ley\nboo ster\nas soc\nalta f\nadaf ruit\nðŁĮ ½\nye ssi\nver ma\nsan dia\nrefrac tory\nre organization\nph ul\npe ti\nme izu\nhat ec\ngc ses\ngam ous\nai za\ntw ick\nti ki\nstar boy\nsign or\nsh pk\npractic ality\nom me\nmail chimp\nma bry\nju ssi\nju a\nho ke\nextru sion\ndirt bag\nchin os\nìĬ¤íĬ¸ëłĪìĿ´ íĤ¤ì¦Ī\nsu fficiency\nslat tery\nsaving lives\nri ss\npro bin\nnew bery\niz ind\nit p\nhb r\ndaz n\nbio sciences\nber line\nahu ja\nw yo\num f\ntx ed\notta waf\nor land\nnapole onic\nmoly neux\nmain event\nlax man\nkut ty\nic hung\nhusq varna\nhuawe i\nferrari friday\nak syon\n. ):\ntru sses\nscottmorrison mp\nrepe aling\nr dy\npizz agate\nphil at\nmalach ite\nl q\nju ss\nden se\ncar path\nðŁĩ ¾\nwr f\nwho scored\nvolgo grad\nvisit greece\nvi el\nv cc\ntagsfor likes\nshi fty\nrotor ua\nopportun e\nnaq vi\nna eem\nmo stre\nle mu\nhill ingdon\ncup boards\nbon ed\nabsen tia\nห à¸Ļ\ntri pe\nte th\nschoice awards\nranveer singh\nilford photo\nhl mann\ndeep sea\nber us\nb ta\naku mar\nâĺ Ħ\nt pl\nstudio life\nstimul i\nsec pompeo\nrepur posing\nre strain\norgan ises\nop l\nmidcentury modern\nforza horizon\nco cos\nbik elife\nbeckin sale\nar aki\nÑ Į\nwany ama\nw chs\nvi ens\ntribul ations\nrip ening\npro grama\nphoto challenge\nl era\nembry onic\nde yes\nt th\nspread love\nsnu ff\nsand bar\nsac a\ns ánchez\nri mini\nph ants\njuic er\nfor sberg\neh ren\nchocolate day\nc to\nb anna\naust ell\nar mand\nðŁIJ ī\nze i\nur als\nob f\nbarnsley fc\na hou\nwind ward\nsu sie\nsketch books\nregi o\npha l\npar an\nign iting\ngri a\ncb m\nbc w\nal thea\nâĩ ¢\nsafe co\nrand stad\npra dio\nmakeup by\nhowit zer\nfoo sball\nfe eh\ndesign showcase\ncla rence\navi an\nani dhi\nwelcome home\nush l\nrecomm s\nparv ati\nn pf\nlindseygraham sc\nglen non\ngain z\ndomen ica\ndis agreements\ndar row\nc ff\nau chi\ntype script\nthe alth\nste rer\nss ens\nsine ma\nre treating\nplin th\nic l\nhen do\nden euve\ncolour pop\nch t\nburger day\nbor rows\nano v\nad age\nthe white\nstr ano\nrealjames woods\nonlyin mn\nmodernis ation\nmast ectomy\nlate ch\nkhu malo\nhorizonzero dawn\ng ak\nfu ja\nflo cked\nfier cest\nex pat\netsy chaching\ncoon hound\ncal endu\nban ting\nðŁİ £\ntreason ous\nten ancy\nstatist ician\noccup ational\nnun ca\nlau da\ngram ercy\nflu ttering\nble vins\nacidi fication\nðŁĺĤðŁĺĤ ðŁĺŃ\nwest mid\nw inging\nuk parliament\nsc tr\nmach akos\ngo jetsgo\nearly years\neagle pride\nda fuq\ncot te\ncospla yed\ncarol la\ncap y\nbo leh\naa rena\nwi dens\nthor ragnarok\npa jh\nn ellis\ng tf\nìŬ ìŀIJ\nro ddick\nlev ant\nky rie\nemb er\nc gs\namae chi\nwh cd\nsoo ty\nsni ffer\nsl c\nseem ing\nmadri d\nit ating\nis lav\ngirls with\nelectr icians\ndo ings\ndal en\nd gy\ncu ss\ncon fer\nbusc emi\nbrat wurst\nan sar\nabstractexpre ssionism\na india\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nul li\ntele vision\nsol on\npri ming\npersi b\npap ryka\nol ac\no bie\nn ade\nmultic olored\nim mune\nhu x\nholy head\nhen k\nfel led\ndiam ante\ncla udine\nchar l\nbut z\n( âĢ¦\nyurion ice\nvel as\nuk r\nthe beast\nsy ah\nst ourism\nso co\nsnohom ish\nsin o\nsiddhar tha\nrho dium\nren n\nred shift\nna ise\nmutil ated\nkhale esi\nka abil\nj aded\nhen chman\nga st\ndiscern ment\ncourt ne\nbig green\nbi plane\nbe ano\nanti po\ntu lisa\nsion ary\nre written\noy u\nll oris\nkra sinski\njan ice\nfranc s\nfamiliesbelong together\ncricket aus\nco si\nbu sey\nade m\ntal o\nshow girls\nsen ess\npad hyay\nop el\nmoss berg\nman zo\ninterior decor\nf les\nday y\ncu e\nber ia\nठ§\ntou chy\ntennes sean\nmac lachlan\nfa inting\nden omination\nci encia\nca poe\nall caps\nal ade\nè Ī\nठ·\nthe tford\nso bel\nradio thon\npostp ones\nine urope\nharve sts\nedin burg\ndexter ity\ndar rin\nbho j\ntil ley\nth ore\nroman cing\nrealpaige wwe\nr atti\nproble ms\nnor se\nkre wella\nja ket\nir cus\nhalf penny\nchit o\nbun ton\nbu u\nboun ty\ny rs\nste u\nro ald\nresto cking\nqld votes\nou i\nnay arivera\nlabou rer\nis ak\ni bo\ncoc ina\naer on\nad show\nsur rendering\nlen nox\nhindu stani\ngop taxscam\ncar itas\nbyr ne\nbo gle\nalways learning\næ¥ ½\ntitan up\nstarmagic ball\nsna res\nmultnom ah\nlap u\ninterce ssion\nher barium\ngreg son\nfuri ously\nfly wheel\neck ler\ndel tag\nd aco\nbreak outs\nalaska air\nîIJ ĺ\nâļ¡ âļ¡\nzam boni\nsuit cases\nstri pe\nroto world\nno bility\ninf ill\ndynam ically\nch é\nband aid\nangel i\na org\nsheh zad\ns office\npu pa\nph or\npajh wok\npag er\nnatu red\nmis used\niam ejf\nhast ing\ne chop\ndever akonda\ndaniel ricciardo\ncr one\ncoet zee\nar ms\nar as\nðŁĺİ ðŁijĮ\në¦ °\næĸ ¹\nั à¹Ī\nwonder fu\nwhy not\nta re\nsu mit\nslo an\nsa shes\nperin atal\nman ek\nguer lain\ngar man\negyp tology\ndo ghouse\nappar ition\nac cre\nuten a\numm er\nskim ming\nri re\nnf pa\nne tapp\nmi sta\nmang aniello\ndon nell\ncit adel\naxl rose\nad obo\nacrobat ics\naci os\nðŁĶ ¬\nuk ong\ntro yer\nthi one\nt ase\ns fashion\npar ikh\nmono graph\nja ish\nhor ford\nh qs\nfoot sc\ncol ini\nðŁ§ ĺ\nure a\nstol tenberg\nma an\nindex ed\nhydro ly\nhin kley\nadel rio\nab solution\nØ «\ntil burg\nsa ppy\nreplic ated\nree bok\npat erno\nnand am\ni pe\nhome base\ncoun tr\ncbee bies\nboot le\nuof sc\nseduc ed\nscan lon\npriorit ise\npc n\nor ks\noccupy hk\nnan ay\nmil o\nmao ist\ngenoci dal\nex tractor\ncon lan\nbro k\nav ir\napp an\nwar ra\nstri x\nsedi mentary\nreal ty\nps w\nparis jetaime\nm can\nli um\nli aquat\njo shi\ninquirer dotnet\nha gen\neste fan\ncoinci dental\nbett is\nðŁħ °\nwinter ishere\nre unions\nnu ss\nmix tures\nmir amichi\nla pi\nko pe\nkir chner\nkel i\nemur phy\nde tti\nd q\nconfe ssion\nç ģ\nâĿ¤ï¸ı ðŁĻı\nw de\nu stream\nswamp y\nsub missive\nsleep wear\nout back\non ond\nin corporation\nfan friday\ndesch utes\ncush man\ncour tenay\nblon don\nÙģÙĦسط ÙĬÙĨ\nst george\nsp ag\nsic le\nsh ins\nresul t\nka ik\nj ms\nget cha\nfo lie\ndepo k\ncri p\nbit stamp\nazz am\nan bar\nãĢ °\nu pm\nph thal\nover tones\ngame show\nes r\nduf fie\ncas sad\nsi ssi\nscru bbed\nron n\nren n\npath os\nmur mur\nkul deep\ngril led\ngal o\nez ra\next end\ndav an\ncl f\nbeha r\navant garde\nam far\nach ill\nvolvo car\nvisit florida\nsea ford\nprote stor\npl dt\ngir ling\nfc d\nbi zzy\nash benzo\naquap onics\nwh alley\nvet ted\nte ment\ntal ks\nsuper drug\nsun coast\nsav elives\nsam y\npro duk\nlec tronics\nje suit\nii hf\ngan sett\ndat aprivacy\ncircu mc\nc ch\nbe o\nbay ley\nak ot\ntwi sty\nton ians\nskir ting\ns golf\nphil pott\nk mh\nin world\ngo or\ndu s\ndevon port\nd ago\ncommunity engagement\nac ta\nw wed\nscot parl\nsc ut\ns bt\nrichardar mitage\no den\nnol l\njan mash\nhy an\ngreen houses\ngoo p\nexcruci ating\ndur i\ndas ilva\nd ich\nc pr\nalgebra ic\nwar am\nth ins\nsho ddy\nsad der\nplum lee\npay wall\nod our\nmp ton\nkic au\nkan sen\njubi lee\nexce ssively\neuro fighter\ndri ps\ndiage o\ndaf t\ncat alan\ncam girl\nðĿ ļ\nra kim\not ay\nmob ster\nleg lass\nkp is\nen el\ncrush wednesday\nchakra var\nar ranger\nxtre me\nsali ent\nkar lo\nher manus\nchlor ophy\nbang sie\nun affected\nplein air\npink ish\np yl\nn cle\nhead lamp\nhay worth\nfun a\nfore urope\nfloun der\ncork gaa\ncompress ors\nan anya\nyoo chun\nu shistory\nstrike force\nste ine\nsocial security\nre makes\npim ping\nnau ght\nmoh sin\nmem bered\nle yes\nihs net\nd ner\nclu mp\nâĸ ½\nz sl\nsi red\nkrp kab\ncapital reports\nbu ries\nangry birds\ntwin ned\nroy er\npu reb\npand ering\nne gi\nmen tees\njoh ny\ngru bby\nb ine\nvie wings\nvel asco\ntec no\nsk is\npun ny\nprimary care\npo key\npar lay\nllangol len\nju ghead\ngraphic designer\nfashion friday\nendocrino logy\nb way\naldubx dtby\nthought fully\nsoft ening\nmy ard\njudge me\nh unch\ng ss\ng sm\ncarmarthen shire\nvol k\nsp atula\nsin dh\nshan mu\nkn are\nip d\nhar penden\nh up\nfab ul\nencom passing\nann amari\nwith held\nvin t\nto ty\nsi den\nren se\nregi me\npv sindhu\nmiddle school\nmel ine\nmau er\nlu thier\nkk ar\njusti fying\nint an\nill iteracy\nher ty\ngil len\ngeek and\nelectro de\ndry ness\ncan ons\nbar ca\narab ella\nup for\ntre mble\nthematte spinosa\nsocial enterprise\nscoo p\nre to\nran es\npu tts\nprojectrun way\npp h\nlar ue\njar re\nhomo gene\ngeo logic\nfaj ita\ndon do\nden nison\ndemetri us\nbeth nal\na hahahah\nt fclive\ns iti\nroe buck\npen ni\npal tz\nol af\nkat zen\nhome office\nexpan sions\neat aly\ncan te\nboyband ph\nap titude\nambu latory\nwa pp\nt mom\nsaddle back\nre focus\nngo zi\nmb ach\nmah mud\nloaf er\niam dj\nga etz\nd wn\nclash royale\nbe resford\nan keny\nagi ikay\nà¸Ħภ£\nwack en\nther ide\nsher win\nrule of\nren u\npre pare\nnaf isa\nmix on\nke sari\ngirls rock\nclassi fying\nbri e\nboo ker\nblo x\nstar gate\nsor rell\nsop e\nsam hain\nrocke f\nnozom i\nlikel y\ninter locking\ngrace ffa\ngq magazine\ndu bbo\ndie ppe\ncoinde sk\nbroad stairs\nano a\nanaco stia\nal au\ntemper a\nsque al\nselfle ssly\nrivier amaya\nrhe um\nmolon labe\nlin i\nko st\nincu rable\nfe ige\nca water\nber is\nbarre ra\nwol l\nta reen\nome thing\nhumong ous\nha ut\ng wa\neu k\ne pa\nconfidenti ality\nbe az\nðŁĺį ðŁIJ¶\nðŁIJ ®\nx lp\nsm dh\nju pp\nhierarch ical\nf sr\nev a\neng g\ndisinfe ct\ndis arm\nbot ton\nbab ble\nðŁİ º\nword less\nvirtual photography\ntwin kling\ntennes se\nsch wal\nsam p\nrece ssed\nou b\nlec tion\nj id\nha up\nco ho\ncarlosp ena\nswachhb harat\nstip end\nsalesp erson\nrb g\nprow se\noccup ant\nmedi ate\nfix ers\ncu ore\nar fa\nðŁĻı ðŁĻĮ\nà ª\ntori kelly\nsi fication\nnu e\nneuro scientist\nlive wire\nlin dale\nlan vin\njeremi h\nherkim er\ncutt ing\ncho k\ncab ral\nbil ic\nbig timer\nâĻ¥ .âĻ¥\nvolvoo cean\nsten o\nneha kakkar\nhoo da\nfor o\ndisney springs\ndam per\nchap lain\ncal zone\nbrad man\nalyss avaldez\nwhir ling\nwh ack\nwall flower\nwake board\nun turned\nstab ler\nsp dc\npar am\npad man\nodd ities\nl cl\nimti az\ng mr\neugen io\ndi feren\nc ella\naeri als\nyoung life\nsee in\npran ab\nlaksh mi\nkent uc\njohn mayer\nfree download\nfod map\ntop golf\ntomoda chilife\nto ole\nsiste ma\nn ny\nmcgin nis\nkru mah\nishi i\nhyung won\ngeri atrics\nf fa\ncl erics\naqu a\nworklife balance\nw bir\nthe saurus\nsibl ingday\nru mbles\nridd ler\npro let\now t\nmc q\nma dar\nlo isa\ngue te\nds max\ndir tiest\ndi stru\nconi fer\ncen tering\nprote ge\nnat alya\nkur di\nho ka\ngan pati\nfeeh ily\ncad ero\nag ric\n⬠Ĩ\nwor sens\nwar rick\nthe k\nsouth end\ns yed\nplo rer\np ili\nn é\nim ura\nhen sel\nfili buster\ncity walk\nbrexit shambles\nba ked\namic us\nwild land\nwag en\nthad deus\nsh atters\nlu po\nkar u\nig al\nhutch ins\nhar ie\nbra wl\nbay liss\nbaske tb\nðŁĺ¥ ðŁĺ¥\nwestin ghouse\nun knowns\ntimo th\npi sts\nman gos\nmal di\nkasauti izind\nite ja\ninterior designer\nhor ry\ndro mo\nch all\ncavie zel\n[âĢ¦ ]\nviro logy\nspice jet\nsoftware development\nse uss\nschool girls\nmac an\nl bp\nkoval ev\nhitch hiker\nfi brill\nface app\ndra sh\ncircum ference\nannot ation\nwow za\nsuper annu\nsnow mob\nsi sco\npel opon\nlor ries\ngar neau\nchicag omed\nc mx\nbrasil ia\nan ok\nal fa\n( ^\nthro p\nshr ink\nman si\nl las\nkitchen design\nis lington\ninstall ments\ngab a\ndele tion\ntwee ts\nran jit\npost gre\nny j\nmonte go\nlipo suction\nkut z\nha que\ngir lon\nba illy\narre tt\nagre eable\nðŁIJ ½\nwrist let\nvadi m\ntat ar\nsibir sk\nl boro\nhoo ah\nho wrah\ney o\nbi ere\nb do\nal ev\nvo ight\nmete ors\nlymph atic\nlive well\nli shes\nkr ill\ni barra\ngreet ing\nen ric\neldo ret\nbren den\nangel ico\nafore mentioned\nèģ´ ãģĦ\nwe ald\nun isa\nsta dia\no cha\nn iner\nmait re\ni ki\ncur bing\nchri scor\nbo gnor\nbird ing\nbaton rouge\nallo a\nt ka\nshoo p\nreser ve\npar tie\nopportuni stic\nma scher\nka di\nep il\nconce des\nb hn\nwo ks\nt lr\nt dd\nshul tz\nne vin\nlou ie\nhyde park\nhero d\naz am\nal q\nâ¬ĩ â¬ĩ\nweb developer\nuc sf\nte dge\nsuppor tyour\nrastaf ari\nlin ic\nis ai\nic ri\nhege mony\nbeow ulf\nartic ulation\nap ir\nsee k\nsap lings\nmuja hi\nmid del\nku do\ninter sex\nhigh tech\naf am\n# -\nyearin review\nqui ver\npost grad\npho today\nni vers\nmy baby\nmi ed\nmeche len\nky ush\ninclu siveness\ngn ss\ndv t\ndastar dly\ndal key\nclo th\nchi evo\nawe e\ntre llo\nti reland\npupp et\nmetro s\nj hun\nhorizon te\ngom be\ngastro pub\ngari baldi\nfon dness\ne ley\ndo tch\ndart moor\ncott rell\naxi os\nasi e\nØ§Ø ±\nyoutube gaming\nwash wizards\nt andy\nsumer ian\nser b\nsecrets anta\npedal board\nmizor am\nli days\ndraken sberg\ndic kies\ncourte ous\ncar mack\nbor on\naf k\nêµ ¬\nwilde beest\nvictor inox\nshan nen\nseun ghoon\npy rex\nproje kt\npri x\nmoccas in\nkuz ma\nfloren tino\nbachelore tte\nwan k\nve sh\nug ar\ns network\nmy new\nmari u\nmanu ela\nk nut\njo ão\nindv saus\nil ham\nhal ford\ngoode ats\ndg r\nbun ker\nblues kies\namas sa\nðŁı į\nwh urst\nsmar tly\nsh rap\nseaw all\nschool boy\nor ator\nnot d\nma ac\nlive music\nin yo\nhowar du\ndor sett\naudio logy\nðŁĶ« ðŁĶ«\nvote kathryn\nvol ga\nsta shed\nserendi pit\nse led\np cd\nlam y\nko dal\nglo b\ncm f\nchrysanthe mum\nchocol at\nblack box\nspo iler\nsof itel\nsmo ck\npla st\npa this\nobstruc tive\nkrist of\nhisto logy\nh ird\nflu i\nfeather stone\nch aya\nbox x\ntoys for\nrobe son\npostcard sto\nn gin\nmerri man\nkh oury\nexist enti\nbo les\nbe b\nbb qs\nìľ ł\ntwitter support\nsw asan\nsh ura\nraven claw\njp nadda\nfindyoure pic\nd out\ncutt lefish\nye shiva\nr giii\nparliament arian\no gg\nmodi in\nmarath a\nhoo ping\ndo gra\nd ard\nchar dy\ncal on\nap ati\nak ennedy\nwe f\nsoc keye\nshane filan\nsedent ary\nsan aya\nri gi\nre produced\nr ought\northodon tist\nner dv\nen raged\ndo young\ncalu met\nbor rego\nboo gie\naa as\nzom ba\nworld tour\nunder belly\nun ob\ntom m\nmal tings\nhr d\nex ple\ncu le\ncis d\nchi bok\nchan son\nbusiness news\nbrune ttes\nbluff ton\naqui fer\nrange finder\nmakingamur derer\nma go\ngran ular\ndon n\ncressi da\ncr ans\ncapac itors\nc dr\narizon acoyotes\nve es\nta ko\nsu pa\nslope style\nseat belts\npron oun\nmen thol\nknigh thood\nkey ed\nji ffy\nissa quah\nide o\nende ar\nchop e\nbo red\nan at\nz any\nuss sa\nse mple\nrider ship\nmariecla ire\nkra v\ndrys dale\ndeb i\ncongre so\nc cu\nðŁ¥ Ĺ\nç¥ ĸ\nworm hole\nteen agec\nstandardi zation\nperse phone\nperfect game\nough s\nl pool\nhahahaha hahahahaha\ngw ali\ndo dged\ncru tch\nco ped\nclo gging\nbe ver\nband mates\nven to\nti fo\nrd x\npavili ons\nnip sey\nis las\nil frac\nhan sol\ngrisw old\nemanu ele\ndevo e\nbull ring\nat ala\nãĥ¼ãĥ ³\nwin ecountry\nstal warts\nnot ations\nmacin tyre\njob fair\nje sper\nin ne\nholm firth\nhoi sting\ngeh lot\ngagar in\nfla red\nbou logne\naw o\nagas si\nafran klin\nxox ox\nwn l\nwaw ine\nwash u\ntop model\ntain ers\nsu cha\nsi aa\nough ta\nkil ig\nguana ju\ngo do\ngar n\nfly air\nff ff\ndec i\nbri dle\nbran ning\nblu estone\nbl r\nìĺ Ī\nsynchron icity\nspl unk\nmel chi\nmc tavish\nloot crate\nicic le\nhot wheels\ngo y\ndie z\ndar vish\nble ep\narab ica\nÍ Ł\nz ka\nschi av\nmy cology\nkumar aswamy\nedwin a\nati v\n^_ ^\nðŁij ĸ\ny ac\nwey bridge\nti mor\nsi ke\nroman i\nro ther\nquint an\nham pi\nfla c\nco vent\ncham in\nc sm\nbour get\nðŁĺİ .\nwind ell\nwaf a\nstan ak\nseab rook\nsan chez\nrussi angp\nre arrange\npen tium\npaki stani\nnfl playoffs\nmo hit\nmari am\nmar ne\nfour four\nconesto ga\nco ff\nbus quets\nar jen\nðŁĴľðŁĴľ ðŁĴľðŁĴľ\nðŁ¤ ³\nvirender sehwag\nvaleri e\nsemi finalists\nlower case\nkhu sh\nin vocation\nhc sm\ndunlop btcc\nbla u\nbarb ary\nauctione er\nac cu\nx lix\nwater spout\nw pd\nvand enberg\nswe en\nin soles\ndel os\ncutt ack\ncar ru\nbyr ds\nblack widow\nath in\na ç\nyol ks\ntan go\nsto cke\nno is\nmk t\nmiya ke\nmc dougall\nmanish malhotra\nfon d\nfare ham\nby l\nand is\nan gui\nad as\nðŁĮ ¬\nwil ley\nswim dive\nshoo ter\nse wers\nsch efter\nos b\nmm b\njane oineza\njami es\ncolli sion\nchron ically\nbo jan\naro ss\nts l\ntories out\nsens ical\nol ins\nofficial r\nlife quotes\nkarnat aka\nhir u\ncir cas\namo vie\nsports book\nsangi ovese\nravin dra\nprof iting\npro gen\npois son\nji day\nbm wm\nthis week\nsynchron ised\nsou ff\npeople of\no campo\nnorwich cityfc\nmt k\nmor phic\nlor o\nk home\nidenti fiable\nic ula\nflint stones\nbibli ography\nà´ ¤\nvent e\nunite the\nter ill\npamph lets\nnas aj\nmd g\nl ı\nker rang\nk bc\nfer ran\ncu bans\nbiz awards\nun winding\nswe g\nru mmy\nresur faced\nocon ee\nnat as\njo iner\ni oc\ngra ys\nchop on\ncarol ing\nbe p\nterrori zing\nslack hq\nsch mal\nra du\nponte fract\npi aget\np yn\no gp\no edi\nel ven\ndigital signage\nan ight\na arts\n$ ...\nworld rugby\nwb ko\nti verton\nth ati\ntar tu\nsk ink\nsharinge conomy\nsal lie\nrecipro cal\npropon ent\npoe tics\no q\nnovo sibirsk\nnb stv\nmini stry\nme unier\nlyn ched\nje tair\nin fighting\nhello bangsie\nbook list\nas apo\nðŁĴĺ ðŁĴĺ\nìł Ħ\nwy den\nwareness day\nta wat\nt ph\nsky hawks\npersonali zed\nme za\nint ouch\nfü r\nfranca ise\ndejav u\nde spo\nbur ks\nastro dome\nv mc\nuncontrol lable\nth ie\nspike lee\npark city\nmatri mony\nho pen\nh x\nbrook ing\nbre aux\nap ace\nalicein wonderland\naj am\nac pa\n; )\nâĤ¬ .\nve sta\ntri d\noffici ate\nnatu recomms\nmient ras\nlan gh\nim measurable\ngif tof\nfash ola\ncandle lit\nbal der\nbaj rangi\nagre en\ny aar\ntee pee\nre structure\nrc si\nmis cre\nlu rie\nlibert adores\nli ssa\ngeordie shore\ngent leness\nflo gging\nbre win\nbahu bali\nand ere\nad ana\nãģ £\nvil lar\nucl an\ntyr one\ntro dden\nsub zero\nscol lection\nnu bia\nna in\nmen de\njubil ant\ngre gh\nfreedom day\nfin ery\ndeuter onomy\nbyu football\nbrain erd\nbour sin\nben ven\nbelgra via\nar una\napp state\ntrattor ia\npolye thylene\nnikon photography\nmarc ella\nfn f\nfilm twitter\nfar si\nback hand\nè ı\nvel t\ntwin k\nsau sage\nsar ban\nreproduc ción\nmo dis\njo ta\ncad do\nad don\nvis akha\nthu mper\nsy x\np dr\noil sands\nmar oo\nm soccer\nhen a\nglen fidd\nethical fashion\nemo ticon\ncam embert\nbe il\nar ro\nab x\nvian ney\nsweat er\nsu bar\nsh w\nraredisease day\nmeang irls\nle win\nim planted\nhun han\nha kk\nfit life\nei gen\near a\nbur de\nbloss omed\nÙ İ\nu con\nty o\nsta p\npru dent\np fs\njar man\nfire stone\nblund ell\nðŁijıðŁı¾ ðŁijıðŁı¾\nnam ed\nkei ko\nju b\nide x\nhemo philia\neverton fc\nede ma\nd be\ncor gis\nðŁİ »\nto que\nrambl ings\npor zingis\nor chy\nmi rad\nland mines\nkom ets\nhi ddle\ngo team\nfyo dor\nescarp ment\ndu k\ndn f\nbro deur\nas ki\nan ks\na ee\nun framed\nrich land\nra di\nma qu\nleinster rugby\nkali mantan\nhit ching\neconomic times\ndump ty\ncraw ls\nasado waisi\nas oci\nas and\nto bey\npoetry community\nofficial bhafc\nmon alisa\njag er\nha x\nh ff\nflat ware\nduc king\ndi vi\nbio chemical\nðŁĴ ij\ní Ŀ\nsu o\nsl k\npredic ament\nnerdv ana\nm live\nle von\ngaither sburg\ncom ox\nby water\nðŁıĨ @\nvaul ting\nto ta\nthel onious\npre cari\nios dev\nhon king\nher nan\nh ice\nenchil ada\nen reproducción\nda ed\nbi ki\nbau ble\nband it\nwe c\nvenge ful\ntobler one\ntay ler\nschar ity\nrevit alizing\nr vs\nr rs\nlove craf\nk age\nei bar\ndysle xic\ncro lla\nchit ral\nðŁijijðŁijij ðŁijij\nx vii\nwil la\ntang lewood\nta iga\nsu football\nsqu ier\nsas sen\nper rier\nn ld\nko lo\nconservation ist\nc fe\nblock busters\nan ah\nü ber\nsun ba\nsty our\nsmil in\npillow talk\nle pas\nkru pp\nhosp ices\nhel ipad\nfil i\ndro sophila\nbo som\nyennaiarind haal\nuk in\nstandup comedy\nsni ping\nsand castle\nqu avo\nnom bre\nn la\nman tar\ngu bler\ngr ano\nelo y\nd bh\ncy r\ncar pal\nbor i\nair france\naali zardari\nðŁĩ° ðŁĩª\nyak o\nun women\nsundance fest\nsmall mouth\nseash ells\no waisi\nmul doon\ncuis inart\nbo gie\nbas soon\nan jan\nrock o\npo ste\npim entel\npe avey\nnos fer\nkir che\ninter pol\nhaji me\nen l\nar ak\nðŁĺ¹ðŁĺ¹ ðŁĺ¹\nеР¹\nÏ Ĩ\nwoo fers\nvo tive\nver dant\nu leta\ntrum pe\nship wrecks\nshim my\nsc ats\nsalut ations\ns anna\npat ani\nnag s\nindi gn\ngaffi gan\neag an\ncr v\nbad r\nant and\nannu ity\nthe afric\nterrori st\nsol ana\nrape seed\npoo ping\nm chs\nfast food\nemul ation\nelev ates\nde sean\nwel yn\nw yo\nth birthday\nspeed boat\npinstri pe\noneof akind\nmaritz burg\nk hai\nj nj\ngil ani\nchri sw\nay our\nap il\na ini\nðŁİ Ĺ\nv ln\nther sc\nsw en\nrestor ations\nreiter ate\nphoto call\nob p\nny p\nm hp\nfil mb\nd aps\nðŁIJ Į\nz ec\nuniof nottingham\ntra shing\nstra ub\nsequ al\nry back\nro thes\nmummi fied\nmillenni um\nmarsh field\nj cs\nis art\nhugh es\ngau cho\ndefen sible\nce mented\nbor land\nbon nets\nðŁİĤðŁİĤ ðŁİĤ\nwonder wall\nwim ps\nvivo ipl\ntallu lah\ntaec yeon\nsport sawards\nsher brooke\nq sa\npin ck\nph r\noun ty\nnu ala\nkung fu\nhel sing\ndalry mple\nate acher\nanimal crossing\nafc wimbledon\n] -\nseven teenth\nsaip an\nku o\nka an\nin ta\nhuss ain\nepi thelial\nden iso\nas kan\nwam bach\nsu ko\nson oran\nsn ola\npr ong\nplu g\nnb cs\nmt u\nlogar ith\nlocal es\nkelle her\nkat ch\nflu ff\ncr yer\ncont ours\ncon jec\nce real\ncalendu la\na icc\nåij ¨\ntent atively\ntempran illo\nsuccu mb\nsouth ward\nraj jat\nr fl\npar ham\nny our\nmy p\nmur ry\nligh thear\nin time\ngag gle\nf lim\ncity hall\nceme x\nbrexite ers\nbi glo\nat ly\nห ล\nwomen insport\nun invited\ntown es\nthe botanics\nsensu ality\nsc el\npre occupied\nonlin ec\nmen ai\nlong term\nle ich\nland y\nig ong\nconservation ists\nblack light\naz aren\narchitec tural\nðŁijĪ ðŁı»\nu et\ntu red\nstal ybridge\nr za\nperfectgame usa\npap adop\nmotion less\nmil t\ndi el\ncre at\nblack birds\nbal eno\natt itude\nabout lastnight\nãģ ¯\nrespir ation\nre defines\npic c\npale stine\nnow tv\nm cuban\nlo ka\ngman etwork\nchi z\nangu age\nalli ed\nalicia keys\nw ning\nus se\nthe people\nsd t\nreson ant\nnyc mayor\nn bt\nhoo pers\ndon ned\ndo sed\nd illi\ncentre piece\nblog spot\ntu so\nt mo\nmd na\nland rieu\nkann ur\nka rena\nin slee\ngiu lio\nalle lu\nak un\nthejustice dept\nsimm ering\nro ly\no ki\nnh at\nmetal work\nhou ten\ncontag ion\naka worldwide\nå İ\nãĥķãĤ¡ãĤ¤ãĥ³ãĥĢãĥ¼è¶ĬãģĹãģ® ç§ģãģ®ä¸ĸçķĮ\nunder tones\nsun daes\npi os\non de\no intment\nmo bo\nkev lar\nket te\ning lori\nic ano\ni ag\nhay festival\ndoctor ow\nchir ps\nbill board\n! ðŁijı\nâĢ¼ ï¸İ\nyear n\nven er\nul te\ntreat yoself\nton ys\nsom os\ns man\noreilly factor\nlaparo scopic\nhah haha\nfree se\ndomin ator\nchau cer\nch lamy\nbirdsof prey\narmed forces\naero dynamics\nad ors\nvol com\nvancouver island\nthe killers\nob fusc\nmú sica\nlil bthe\nlilbthe basedgod\ngor akh\nfool proof\netsy gifts\ncho d\nbu e\nac p\nðŁĺ© âĿ¤ï¸ı\nwar r\nvapor max\nsr tc\nsen ayan\nri man\nonond aga\non ference\nmetro plex\nmcgill u\nkath ie\nkak o\nje tting\nget out\nfuja irah\nfertil iser\nex propri\neli ght\ndon tt\ncar jacking\nbi ri\nbal de\ny ella\nwil ton\nwheat grass\nvani shes\nthel on\nsedi ments\npu yol\npostcardsto voters\nmu to\nmiss america\nley la\nlen ovo\njusti fies\nin co\near plugs\nbur o\nblue prints\nb school\nver and\nou k\nny giants\njo vo\ndeter rence\ndc cc\ncon diment\nan l\nwor cs\nv di\ntt d\nmoor land\nlun acy\ninti mately\nidio syn\nbod min\nbelli ge\n. ðŁĺİ\nwork sheets\nwil led\nulster rugby\nth july\nteen age\nsuper janella\nsty lings\nsh ingly\np spk\nost asis\nom sk\nn acc\nmi ren\nko bi\nim ola\nfe f\nbil le\nbb mp\nae ther\n! ðŁĴ¥\ntear gas\ntapp an\nsig ourney\nsam ira\npap hos\nkat weets\nhocken heim\ngen ghis\ngate keeper\nacap ella\nâľĮï¸ı âľĮï¸ı\nunrival ed\nsla ven\nrussell crowe\npy rr\npoo ja\nni z\nmike tyson\nlero i\nlan sman\nfran sch\nend violence\ndon y\ndian ade\nbour que\nb tv\nanci ents\nab dallah\nðŁĵį @\nðŁĴµ ðŁĴµ\nz os\nwozni ak\nwer ri\nsin jar\nin visibility\ncor si\ncen to\nar ine\nadebay o\n⼠Ī\npur p\nn bab\nmari ee\nma sta\nly les\nl chs\ni ak\nde gan\ncreu set\nco ppin\nblu eri\nbag us\nai on\nwh ut\nurban fantasy\nstephen amell\nsnod grass\nsand hurst\npool party\nplat form\nplan king\np ona\nno sleep\nmr sa\nluci ana\nlive show\njais almer\nit smore\nfinish line\nfilm maker\nfc f\ne bol\ndestru ct\nan sele\nsuppre ssor\nspit zer\nreal berta\npl iny\nnr t\nnfl pa\nlal aland\neric hards\nbil tong\nand ai\nak ro\nwar hawks\nredund ancy\nq ian\npu shups\ngrou pies\ngel lar\ncom inghome\nclan destine\nchait anya\nan ys\nab aya\ntx dot\nsu ble\nr du\nmigh tiest\nmccre e\njurisdic tions\nhu dd\nhans ard\nflo rent\nd ce\ncolla bro\nch oma\nbar sand\nadi se\nv ago\ntic keted\nth p\nst lucia\nsnow pack\nsher borne\nration ing\npromote horror\nmobil ise\nluxury hotel\nkand la\nk awak\nho se\nhe dley\ndr yers\ncre scent\nab or\nw sa\nsu le\nsister ly\nre bar\nramaz an\nlong mire\ninhal ation\ndissol ves\ncommerci alization\ncha ine\ncarri on\ncam erica\nboo galoo\nbig deal\nb let\naspir ant\nur gh\ntiru pati\nsl acrosse\nsb ach\npoor people\noo gie\nki ambu\njab lon\nhow ls\nb hardwaj\nb ds\nant u\na aw\nðŁĶ Ķ\né ľ\nvan v\nplussi ze\nlink later\nlin lithgow\nkla ss\nfinoalla fine\nenvir ons\nbren nan\nappeti zing\n$$ $$\n$ !\nwa pol\ntu fc\nther o\nsivak arthi\nsi va\nplastic free\nmy hero\nla gh\nfau sto\nev c\ncross overs\nbn sf\nbern thal\nau li\nìĿ ĺ\ntin sley\nti sch\nstraigh tener\nscotty mccreery\nrece p\npun ky\nno to\nin pics\nhappy day\ncriteri um\nbikelife dotch\nworldcup final\nto let\nshin kansen\npopu late\norche stration\nnaku foaddo\nlindis farne\nlat akia\nintegr ations\nig c\nib g\nhopp us\nfood lover\neng ard\ndu ds\ndf b\ndepau w\nbel af\nbc n\nbar c\nba sie\nas sad\naf resh\nðŁĺĺðŁĺĺ ðŁĺĺðŁĺĺðŁĺĺ\nya ay\nsar sour\nric ardo\nprophe cies\npower boat\nom r\nnewh omes\nmagic thegathering\nm dr\nlokom otiv\nli ii\njä ger\nju egos\niter ations\ninclin ation\nig ne\ngro gan\nfu sco\ncran ks\nbe sos\nâģ© \'\ntric eratops\nspic y\nspac ers\nscri bbled\nreach able\nover ground\nmicrosoft teams\nm hm\ng mt\nfuture is\nfell ini\nfel ines\nfab s\ncri ssy\nca il\nbook worms\nbo do\nar rington\nðŁĺı ðŁĺı\ny ameen\nsa kamoto\nre ared\nnu ys\nmarket cap\nmail lot\ninhi bit\nfilmo graphy\nfalcon ry\nengag em\nde faced\ncar at\nbuc keye\nbay front\nbangalore ashram\natp worldtour\nam un\nad om\ny ate\nmediac ityuk\nj fl\ngun ung\nfre s\nche on\nbagh dadi\nbab at\naug ment\nari sta\nalk official\nê· ¸ë\nwie sel\ntrin idad\nsof summer\norp ington\nnose bleed\njay me\nfoot locker\nem pathi\nbo bi\nanti bes\nansele lg\naerob atic\nðŁİ ĩ\nãĥ¼ãĥ «\nâĺĨ âĺĨ\nwater works\nwater logged\nno bar\nn cd\nka huna\nis ar\nfli rts\nd mb\ncp us\ncoo kers\ncas co\nc fi\nband ain\nayo dhya\naj man\nsurf in\no carina\ngu tter\nfries land\ncast rol\nbon plan\nbe so\nà¹Ħภ¡\nven ter\nspr oul\nsport back\nsp j\nparti zan\noc ket\nmathur a\nm fl\nha poel\ngre i\ng mf\ndru p\ncover art\ncontra dict\nay ub\nanselelg ort\nabse il\nwar bird\ntro ma\nph ro\nnerv ously\nkw ch\nkun j\nj illy\nid b\nhundred th\nhal alan\ndece it\nca wl\nbon t\ntash kent\nph lebo\nmarch forlife\nmar red\nl cr\nkrish namur\nhe bei\nfra g\nbill ballentine\nbha gya\naugust ana\nanastasia beverlyhills\namc cartney\níĻ Ķ\nth all\nta thletics\nstu es\nst anc\nre als\nol ino\nn tn\njet lag\nhi ii\naller gy\nwn bl\nsuit ors\nsin bad\nscotland team\nsal combe\nroll back\nrey no\npoint less\npl ou\nocto pu\nn xp\nhy po\nhappy bday\nbou dreau\nalla ah\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥\nworld star\nthe wire\nt gc\nsun trust\nsore ness\nsk ap\nsci o\nre started\nlow lands\nlewis ville\ngastron omic\nexpir ing\ndefl ation\nde tox\ncu s\nblu est\nti rade\nschol l\nprof en\npol itic\npo sen\npar cs\nliber tad\nla ye\njan ic\nher ing\nhae morrha\nen cino\ncal ori\nandre j\nanatoli a\nðŁĮŁ #\nunfor gi\ntab i\nshad i\nopar ks\nmy world\nho dor\nazaren ka\nðŁĵ ľ\nvic firth\ntre vi\ntran shuman\nsquir tle\nspeci alization\nread e\nra kes\none treehill\nmu khtar\nmar ymount\nkaz u\nk wai\nic er\ngla ssy\nforfe it\nfelic ity\nf els\ndual shock\nde fra\ncer i\nas phy\nang ri\nঠ¬\nworldof outlaws\nta or\nslic er\nna si\nmis se\nlock the\njen kin\nfriday sfor\nfasten er\ndream force\nbloom sday\nbl ck\nbiop harma\napple jack\n: ///\n. ðŁĴĻ\nval ero\nuri be\nun doing\ntw w\nto tnes\ntic les\ntech fest\nsun nier\nstream lining\ns gi\noffen sively\nlund gren\nlc sm\ninhal ing\nenci as\ncr on\ncomment aries\ncode ine\ncly ro\nbr n\nbo wel\ntutankham un\nspru ce\nsky walk\npang olin\nmod ine\nmen ta\nlan cet\nhorizon tally\ngu rira\ngrant gust\ngas par\nfreder icks\ncurv ature\ncam bio\nask is\néŃĶ éģĵ\nu cs\ntcm ff\nsen or\npu dge\nmal dini\nkirk d\nken berg\nkam pung\niri a\ncotab ato\nbay onne\nanesthe si\nand ron\nðŁij ©\nzen o\nstock man\nsk an\nr pc\non canvas\nmtvbrkpop exo\nci re\nband ages\naurang zeb\na star\nðŁĻĮðŁĻĮ ðŁĻĮðŁĻĮ\nðŁĻĮðŁı¾ ðŁĻĮðŁı¾\nà· Ĭ\nyeg wx\nw mt\nvolvoocean race\nvari etal\nsimpli fication\nrock climbing\nmis matched\nh nd\ngeome trical\ndh sgov\ndanger uss\ncenter ville\nble acher\nar quette\nafc bournemouth\nâļ Ĵ\nty bee\ntre d\nthur good\noast al\nnax os\nmainst ay\nkar rue\njoaqu in\niff i\nic re\nhover board\nevic tions\ndun more\nd ado\nboth ell\ntwee zers\nse ep\nry lee\npower ade\nmur phys\nlang chat\nexecution er\ncamp out\nbice ster\næ ·\nà¸ŃภĻ\nzo ey\nle ach\nguide dogs\nfi bro\nef x\nbi el\nbe fitting\nðŁį ı\nworkhard playhard\nsojour n\nsav am\nrss org\nni i\nnay eon\nli han\nh bu\ngab bar\neng lund\ne space\ncitizent vkenya\naw ah\nab bit\n-- #\nthor ny\nsqu aring\nra wal\nlou der\nli sar\nlex ington\nintro spective\nguin ness\ndaily telegraph\nco pland\ncen o\nvi zio\ntransplan ted\nshi z\nros ari\nml khattar\nindie dev\nhuck nall\nfe ct\nembr yo\ndy l\ndi go\ndg n\nam dg\nal locations\nðŁ¦ ĩ\nãĥ Ĵ\nsym one\nseason ably\nno stra\nmee ke\nloud speaker\njam bo\nbo got\nbeck ley\nscep tical\nsa hm\nparame tric\noc tor\nnn pc\nlogan henderson\nlimb urg\nlak as\ngor ton\ndrone photography\ndeb ate\nchar me\ncele stron\ncan tu\navi on\nab in\néŃĶéģĵ ç¥ĸ\néŃĶéģĵç¥ĸ å¸\nx terra\nwe x\nwal worth\ntra di\nteam coopertire\nsin aloa\nr anda\npu tih\nphysio therapist\nover falls\nor omo\nny islanders\nmmi w\nla ki\ngo av\ngee ked\nfan e\nenu ff\ndr at\nal evel\nyu vi\nvol pe\nstren uous\nshaq iri\nshaf i\noun a\nmu fasa\nju i\nhappy ness\nem pe\neg l\ndegra sse\ncomple tions\nchili peppers\nbi dders\nðŁĸ¤ ðŁĸ¤\nys gol\ny ano\nur at\nun attractive\nscienti fic\nsam pai\nre vels\nou ma\nnic ation\nly don\nin voices\nfer v\nexpe dite\ndangeruss wilson\ncumb rian\ncram ming\ncaption this\nbas spro\nan au\nak it\nair crafts\nvis ita\nshi ps\nout grown\nnorth cote\nkair i\nk nut\nini sts\ndio go\ndc united\ncur ler\ncellu loid\nballer inas\narapa hoe\nyn h\nup ma\ntrue blue\nt pg\nste via\nsever ino\nrajjat tokas\nr ational\npol kad\nos in\nnasaj pl\nmann schaft\nmanipul ative\nkayo de\nk ray\nhur ry\neuph or\neduc ates\ncu cam\ncor don\nblack hat\nb side\nane o\nai admk\nadri anna\ntie breaker\nsouth side\nparam singh\nkoko bop\nkaffe e\nin croy\nicon f\nhealth news\ndistin c\nbigtimer ush\nwi aa\ntore tto\nto wel\nthelittle things\ntele fon\nsmor gas\nsmo ked\npositive thinking\non theroad\nmusic production\nmar ab\nkasautiizind agiikay\nhahahaha hahah\nfr antz\nempty the\ne ffin\ncu eto\ncross ing\nace of\nðŁijħ ðŁĴ¦\nâķ ±\nsorcere ss\no ad\nni aller\nnh ms\nmu gged\nmetro pole\nkau st\nhit man\ncroche ting\ncrimin ality\n⼠½ï¸ı\nsme ars\nmir ko\nleep ace\nkirkd borne\nkaz oo\nkan ina\nham sa\nennis killen\ne scri\ndi shed\ncr na\nbo iz\nbest nine\nâĿ¤ï¸ı ðŁĺĤ\nwise st\nvou cher\nvac uu\ntac ks\nsouth land\nridic uled\nrasp utin\nport ability\npat ine\nmus ket\nla ya\ngh ese\nfree form\nflu ently\nferre tti\nchand on\nch oux\nbli p\nbetra ying\nbet tie\narte ta\nall night\nun ica\ntoom any\nte mer\nswitch foot\nsme ared\ns vs\nquir ks\nprin sloo\nnorthern soul\nexcit ing\ndwar f\ndo tte\nde ven\ncorro sive\nci b\ncerti fy\nbam burgh\nak op\nsi bly\nsherlock holmes\nro to\nre turno\nre launched\noutlaw ed\nnat archives\nmon so\nlo tt\nlo ire\ndetroit pistons\ndel ly\ncoward ice\nat ur\nvi ki\ntion ate\nte v\nspeci fics\nse ale\nparth samthaan\nmist ral\nmea india\nlent z\nlasal le\nis g\ngu llo\ncull en\nche tte\nbillab ong\nat at\naspir ational\nair jordan\nweb gl\nwa stage\nunderwhel ming\nufcfight night\ntre yarch\nsu cess\nru islip\nop tus\nno regrets\nmar r\nloo e\nit sy\nhandic raft\ngraph ql\nfen cer\nener o\ndun hill\ndre search\nbe thel\nari ed\ntim peake\nscandal abc\nre visi\npu ffin\nph um\nmemor ized\nka han\nhale storm\nep al\ndublin airport\nw ca\nvic er\nthaw ks\nso to\nshu ck\npureb red\npere ra\nmug ello\nl fcc\nki vu\nfre hley\ne brd\nclack amas\nche vel\nðŁijį .\nwoo young\nsti hl\nshow times\njane way\ne be\ncir c\nblast fromthepast\nbig ben\nbel grave\nv force\nskim med\nsan ofi\nr cn\nout number\nmont fort\nmajor ly\nf bi\ncob blers\ncave at\nasse ur\nadel sol\nwel o\nur ns\ntor ii\nmor rho\nman nered\nlymedi sease\ndg t\nâľĿ ï¸ı\nwoo ps\nur ch\ntane ja\ntal al\nsnor kelling\nsas se\nric one\nnu thin\nn art\nme ck\nlan tern\nker ridge\ni ram\nher re\nfollowyour nola\nflexi ble\nep at\ne day\ndun de\nde id\ndal v\ncul lum\ncoinci des\nbern hardt\nbe friend\nand han\ntik tok\nranch life\npor phy\nol ito\nnew southwales\nnak a\nmove mber\nlen z\nkim bo\nkids books\nken nington\nk ase\nfan shawe\nce ballos\ncapac itive\nbro ek\nbom a\nbattle for\nba ap\nðŁĹ£ ðŁĹ£\nãĤ¸ãĥ ¥\nwar field\nvas ily\nt sc\nse mo\nprince of\nle tic\ncack ling\nbett ina\nb ms\nè Ĺ\näº º\n{ @\nscor ch\nsau v\ns disease\nrev amping\npiyush goyal\npe chak\nnac ion\nmn statefair\nmag al\nla fleur\nisol ating\ni au\ngal gadot\ncd ne\nbill maher\nbeg ley\nba io\nwest australia\nvul gar\ntv b\ntar lac\nstenc ils\nsch lei\nnormali ze\nme anie\njo elo\nhereto stay\ndy ne\ncre at\nchartre use\naj mer\nstorm team\nriver o\nre spe\npaner ai\npale mbang\nlu ty\nlo athe\njudg mental\nhuff le\nhr c\nhh c\neu il\nc illian\nbr p\nall natural\naar p\nyo gis\nxan adu\nuw f\ntopp led\nse ers\nophi les\nmo sque\nm ame\nju er\njan asen\nguanaju ato\nemploy ment\nbryan cranston\nberne se\nbbcintro ducing\nad eni\nØ ¸\nyan k\nwr angling\nwind farm\nwebr tc\ntr one\ntimber line\nthe cube\nteam chevy\ntac tical\npur p\no steen\ning rown\ngilgit baltistan\ngau thier\nfee ble\nder went\nbra chy\nami ento\nðŁIJ ³\nvy ch\nthe boy\nsky blues\npo acher\nnico lette\nna az\ndit ka\nÎ ¹\nyoun gin\nwas ps\ntu ks\nstat ic\nmakeaw ish\nhouseof commons\nher sh\necr chat\nde ji\nac ru\nxi u\nvs sea\nu vic\ntt weets\nsthel en\npr ana\noc ado\nob jet\nnegli gent\nko tor\nkar yak\nflax seed\ndaf fy\nconve x\naristo crat\nwhist ler\nvas cular\ntheone show\nstandre w\nsouth field\nscreen writers\nkan hai\nathe i\nto you\nsam y\nsag rada\nring ers\nopp enheimer\nmono gatari\nm wave\nj angan\ngil gamesh\ndai ley\nd ancy\nboo by\nbbc looknorth\nsw asth\nsound design\nsci am\nsadh na\npret enders\nout en\nmis sm\nma guk\nike da\ngil lette\nel fman\ndefl ated\ncol u\nbuddhi sts\nav u\nwith pride\nwc bs\nt mb\nt ld\nsydney swans\nswan ted\nst acker\npratt pratt\nnan oscale\nlil acs\nju ul\nhigh street\nfren d\nfer ru\nde ve\ncon klin\nun relenting\ntrans actional\nstro mb\ns ach\nreligious freedom\nn tm\nn ela\nlu i\nh iller\nflo tation\nen cy\ndisrup tor\nci er\ncas per\nbul la\nbet ti\nw tn\nursu line\nup silon\nthur mond\nsplat fest\nsal o\np gc\nmm h\nmakesthe dreamwork\nlean in\nka ji\ngro ping\ng cc\nd ening\ncol ter\nar al\nanni gan\na week\nðŁĻĮ ðŁĺį\nx abi\nu wc\ntrue social\ntimb ersfc\nrich mon\nprattpratt pratt\nny am\nlo thian\nleot ard\nj ma\nitu te\nek ay\nechin acea\ndur acell\nìĹ °\ntro feo\nshe tra\nshang hai\nsab i\nqu inter\nnhl canes\nme rer\nly nyrd\nlin del\nlawof attraction\nlam ela\nkho sla\nhas set\nfinger nails\nend angering\ndro plet\ndies er\ncont ac\ncenter pieces\na sharma\nðŁijĩðŁijĩ ðŁijĩðŁijĩ\nvero truesocial\nsegun da\nplum met\npan ch\nmal le\nli sav\nhi bit\nh ru\ng ct\nbon amassa\nblu th\nbackto work\naphi ds\nti bility\nsc ount\nra pt\nplace holder\nlane way\nfo stered\nfo red\nfi el\nemplo i\neme ka\nca k\nante ater\n!!!! !\nthe ist\ntech o\ntec mo\nsw best\nsu da\nsky hawk\nse itz\ns academy\npra j\nplac ards\npivo ts\nmountain biking\njum mah\njj f\nig ata\neu co\nde constructing\nd ft\nal mond\nweis z\nvi j\nto li\nsouth wark\nslo tted\nra gin\npro actively\nobste trics\nnorth woods\nnh of\njeune sse\nae um\ntv p\nthero ck\nsym metric\nso afx\nseag lass\nnon league\nnight crawler\nm de\nky uu\nkl ance\nkab balah\ncri sis\nchemical physics\nanarch ism\nå¤ ľ\ntr m\nsmo res\nsa xton\nre construct\npettic oat\nout scored\nmini mum\nluci atas\nluciatas san\nloy alists\nligh thouse\nlake ville\nindustri e\nic aew\ni ie\nho gging\nfro mm\nephe sus\ndur rell\nblood shot\nbeech wood\namerican cancer\nach allenge\nv cg\ntom ellis\ntempor ada\nsel la\nmorri gan\nlom ography\nli der\ngooglec loud\nger ie\nfe ild\nev os\ncine world\nbha bhi\namy schumer\nafsc me\nvic toire\nvi a\nsub i\nna sir\nmulti ples\nlu stig\nlat timore\nk cb\ni din\nguy ss\ndi stressing\nðŁijį ðŁı½\nwil f\ntom bola\ntigh tened\nsl peeps\nsig ye\nsham rocks\nsat z\nqu ec\nno gales\nnew ss\nnatur ale\nk ss\nk cap\net fo\nepic ure\nbbc four\nbarrier reef\nab on\nãĥ Ģ\ntw os\nro id\nre eve\nnatu rema\nmal ac\nm sh\ni jo\nextermin ate\nchou han\ncas i\nyn or\ntele visions\nstorm doris\nspor adic\nsoli hull\nsoci alizing\nsh amp\npnpp atrol\nout fest\nit orial\nidh lig\nhow land\nch ur\nbelgi que\nand ran\nw mf\ntan nehill\nta ye\ns thu\nro que\nrik ki\nra dium\npat er\npac sun\np cusa\nobli ge\nob vi\nn sf\nmi es\nmc busted\nlingu ist\nli ppy\ndi ms\nce g\ncanni bals\ncandid ly\nbarre tto\nscholast ic\nq fs\npropri etor\npaci fier\noffici alu\nnott m\nmexic ano\nmar yann\nla hm\ngrand parent\nforz amotorsport\nformula oneworld\nburn leyofficial\nbax ter\napal mer\nab loh\nðŁĸ Ĭ\nwh ittle\nthrowback thursdays\nsla yers\nma key\nlauramar ano\nathan asi\nap el\nvo is\nvi ves\ntur nips\nsnor e\npl ines\nor do\nmac rame\nir b\nhl n\nglobal dev\nfuss ball\nevol ve\nepit aph\ndang les\ndalrymple will\ncarn elian\nas cd\nana esthetic\nÊ ĸ\nun du\nshabbat shalom\nridd ick\nol ney\nli da\nlal un\nim possibly\nher at\ngroom smen\ngay le\nco ffs\ncapoe ira\ncan ta\nbak eries\nvik ki\ntu ra\nt ne\npl zz\nper ky\npeace and\nord way\nn anc\nla vin\ndoo d\ndigi byte\ncom promises\nco bbs\nat am\nvik tor\nser aph\nre arranging\npil sen\nmarque tte\nmari ob\nfic us\ndo pey\nd ng\ncur ries\nce ec\ncaf cl\nwee ee\nurugu ayan\nru ffi\npre ppers\nh ü\ngob ind\nga stown\nbaham ut\nattrac tiveness\nad ra\nzar ia\nwis p\nsang ster\nribb le\nmo ises\nmartin luther\nleagu er\nle one\nkat v\ninlove with\nencamp ment\nd ct\nba di\nâĥ£ :\nsenior night\nrosel and\nrand al\npampl ona\nlink ages\ninspec tor\nha bibi\nequ is\ndam ing\ncat chin\nbeen ie\nba haha\nal cu\nac ar\nèªķ çĶŁ\nwar ri\ntom morrow\nti oga\nte sla\nsh rooms\norb ital\nmulvan ey\nmu gging\nku i\ndistingui shes\nabnormal ities\na verse\nwb w\nvit us\ntrac ie\nthe end\nt week\nspeed master\nsag ging\nre tainer\npanch oli\nn po\ning ame\nin sk\nhar apan\ndif fraction\ncustom izing\nbuckle up\nare search\ntweet whatyoueat\nshi pla\npon ting\nor us\nnorth america\nlucer o\nlam i\nkit z\ngreen y\nde composition\ndabang g\nbelo ve\nasper ger\nap ai\nantidepress ants\nac tory\n) ".\nyor ku\nyo h\nte res\nsi ft\nred bird\nmovie awards\nli mon\ndispat cher\ncompet ition\nà´ ¨\ntin dall\nskele tor\nqv cuk\npnppatrol plan\nlicen sure\nletter kenny\nleaf leting\ngrate fully\ngorge ousness\ner ste\nb fd\nave tt\naloy sius\now d\nol ine\nnom akeup\nn tas\nman ch\njer oen\nhad don\ngri ggs\ngolden retriever\nfact check\ndigit ised\ndd h\nbella donna\nðŁĺģ ðŁĺį\nw sd\nthe z\nprith vi\nou en\nor ford\nmush taq\nma b\nger a\nfrank ston\nfab led\nf rick\ndeleg ations\næ ©\nxti andela\nper fil\nong we\nmp v\njammu and\nil op\ngeekand sundry\nfi dge\nfeder ated\nda we\ncli f\nblack veil\ntu scar\nspan ky\nor ob\nmoline ux\nmar ano\nma pa\nhol tz\nfret board\nec ac\ndup atta\nbiscu it\nbij oux\nam illo\n+ :\nvolunteer week\nvac ate\nv fd\nself portrait\nnorth dakota\nmull ingar\nmake overs\nhe ke\nh ct\never a\ndeliber ations\nchickas aw\nbo bbing\nbig daddy\naro ck\nৠģ\ntb ar\nsanc tity\nny cha\nmgm grand\njones y\njan go\nfri st\ndi fun\nchouhan shivraj\nad agio\nâĺĢï¸ı #\ny bor\nupl b\nti fa\ns fans\nri ven\npol yam\nol am\ngn am\nfre dd\ndog toworkday\ncr an\ncin que\nbee keepers\nbe ÅŁ\nat au\nar la\nan ah\ny ura\nte rence\nte ck\nsu ge\nre insurance\nplay store\nl ile\nker ns\nhy the\nh tx\ngn ani\ncentenni al\nbu ter\nash ville\nagre at\nach u\na see\nಠ¸\nsus ang\nsuper dry\nsp rime\nsc ity\nre aping\nout sourced\nobstru ct\ngreen room\nfe heroes\nfa in\ncla pped\ncab in\nbe inn\nav ai\nðŁijī #\nvector stock\nteamwork makesthedreamwork\nsha urya\nle ch\nkristen stewart\nin between\ngin ny\nfy c\nfre er\nfr inged\nem itted\ndi ba\ncross bones\ncow ichan\nconve ying\nbolshe vik\nband i\nalexab liss\nador o\nðŁĺį ðŁİī\nwan amaker\nve ena\nsr v\nnit rous\nmor aes\nloving life\nkay ak\niq rtg\nhil d\ncompetiti vely\ncleveland clinic\ncit ron\nar aya\nëĤ ĺ\nuc sc\nrecor deli\npuli sic\npis cat\nmow ry\nma est\nke p\nis ko\nfal lujah\ndun a\ncor byn\nzeit geist\nwedding planner\nspor ttv\nschem atic\nram ya\nra ji\nnapo leon\nmuen ster\nm se\nle bron\njudas priest\nimper ium\ndid nt\nbrecon beacons\nbobb in\nbex ley\nbel k\nà® ª\nÙĪ ÙĬ\nz yl\ny con\nwest africa\nspac es\nory x\noran je\nof w\nodys sey\nn ür\njapanese food\nil lest\ngrind core\ngla dy\nfre ude\nexerc ised\ndiar mid\nda th\ncurren sy\nawe struck\nandrew lincoln\nðŁĴĽ ðŁĸ¤\nãĥķãĤ ©\nyof theday\nvinyl collection\nvancity reynolds\nun compromising\nsu de\nspi ele\nsing karaoke\nrout ers\nrei sen\nred bulls\npriv at\nma day\nlive strong\nk mc\nhar land\ngoo ch\nfi an\nbit moji\naj or\nach ar\nðŁĮ· ðŁĮ·\nwork force\nsoci opath\npro fun\nmer kley\nlove team\nle itch\nkin z\ninflat ables\nge y\ne esc\nchat ta\nal dini\næ ¼\nw aven\nreich stag\noff erson\nnat west\nmoo s\nmid nigh\ngubler nation\ngrind in\ngoal tending\ndu jour\ncom an\ncharlo tten\nbm th\nblooming dales\nappal achi\n:- ).\nðŁĺĺðŁĺĺ ðŁĺĺ\nwill smith\nunexplo ded\nthegood life\ntar ver\nsy es\nsush mit\nstop adani\nsh or\nol and\nmon di\nmeet sworld\nka isoo\nindv sl\nfra ses\ncar in\nbo ve\nðŁķ Ľ\nti pi\nsustain ab\nstrang ling\nprovi den\nol den\nner ium\nmerr ily\njanmash tami\nin famy\ndocher ty\ncassi eclare\ncarnit as\ncar ing\nall thing\nal at\ny onex\nworsen ed\nw aff\ntr onix\nste y\nname is\nmole sting\nma gg\nlow rider\nlo it\njab er\nid ling\ni et\ncra bb\nbeau regard\nau tor\nyousaf zai\nun structured\nsyl lable\nperman ente\no gu\nnu b\nkyrie irving\nkele chi\nhe ther\nf sh\ncsr classics\nchees in\nchandra babu\nbar am\nðŁİīðŁİĬ ðŁİĪ\ntew kesbury\nsuper coach\nprison break\nonco logist\nocu lu\nitz man\nin house\ngo dot\nge aux\nfah lo\ndisneyland today\nbre gman\ntor mented\nnou ve\nmargau x\nmar kov\nloo kit\nkimp ton\nish mael\ngoss elin\ndenti al\ncultural heritage\ncin ch\ncapsic um\nðŁ¦ ij\næ ģ\nyumy um\nstudi ous\nsocial media\nseong wu\nsat ory\nq an\npar rott\nmac ey\nfuner al\nfiery verse\ne bit\ncongle ton\ncom as\nchario ts\nbut thole\nap te\nan et\nador ning\nx hosa\nun women\nun dy\ntalk like\ndhar mendra\nda ele\ncon fines\ncad dy\nbury fc\nav oce\naltru ism\n= )))\n/ ...\nt assi\nscu f\nri a\nrenew als\nrec ited\nque re\npsyched el\now ar\ngeck os\negyp tian\nye p\nseri ou\nrosel le\npublic relations\noak man\nme theny\nmake money\nll ins\nk alo\nho sea\nhau ghton\nha gel\ngram matically\nat ro\narmist iceday\nworldof tanks\nvindic ated\ntriumph ed\nti eri\noni us\nmon cler\nmo ps\nmis ed\nmat ures\ni gem\nhilton hotels\ngeo logists\ndishone sty\ndin ning\nbut te\nalger ie\nðŁĴĻ @\nsym pathis\nrepleni shment\nmd k\nmau mee\nmargin alised\nmanil ow\nkar ta\nim passe\nhy vee\ngreen away\nd st\nba hl\nap ic\naerof lot\nvisakha patnam\nthe wall\nstyle blogger\nsmoke free\nsig mund\nomo to\nleg room\njig gy\nja unes\ngai ety\nfree code\nexpress o\nek man\ndrou ghts\ncu i\nchall a\nber nan\nam pang\nway sto\nvol ante\nti redness\nsen gupta\nscoun cil\nro amed\nmt k\nlinden wood\nl alo\nk lose\njac que\nilhan mn\nhoot suite\nci pd\nampli fy\nðŁĴ¯ ðŁĶ¥\nðŁĴ ³\ntor rington\nne farious\nmuj he\nl ó\nkrug man\nki mani\njammuand kashmir\nin h\nim en\ng bt\nfla vio\ndee mable\nbo sh\nblues fest\nbi on\nas awa\nðŁĩ²ðŁĩ ¦\nvar icose\nton ous\nsurbit on\nssi veness\npre form\npost docs\nn sr\nn le\njun a\niz akaya\ngul liver\nfutu rec\nfa ster\ne of\nbastille dan\napo cry\nðŁĺİ ðŁĶ¥\nðŁĺĤ "\nup start\nro ff\nran cho\npaw paw\nllll ll\nkor an\nhumid or\nher c\nhaw tin\ngoo gl\nchic ory\ncar ro\nax les\nannoun cers\nwhat sfor\nper use\np ml\ndrag me\ndis array\nbelo it\nbar neys\nìķ ¼\nì° ¬\nwestern australia\ntweet perth\npetru cci\noo ga\nmc enter\nmb d\nlawrence ville\nlak sa\nkre is\nke own\nkar at\nfro licking\nfac ulties\ned ra\ndism ay\nde kh\ndavi doff\ncur atorial\nbrue gel\nacro ft\n- :\nðŁĹ ºï¸ı\ny ny\nsp reader\nshare thelove\nlu ca\nlic a\nflower power\nd ka\nclo tted\naton in\nam ori\nðŁIJ ¨\nwood peckers\ntitu lar\nsudo ku\nsd proud\npol ynom\nmu sso\nmi mo\nfigur atively\ncor nea\nak iss\nÑģ к\nza j\nte eming\nsocial es\nn sp\nmo pping\nle bo\nid ina\ni want\nharm reduction\nhar ian\ndarm stadt\narre st\nâļªï¸ı âļ«ï¸ı\nwedding planning\nund ate\nsocial care\nsale speople\nre ck\nra che\nmegyn kelly\nme ille\nger r\nenor th\ncani sters\nc mof\nbi u\nðŁIJ ľ\nuf fi\nrealestate agent\nny times\nmor ial\nmi shima\nken do\nje suits\ninsp ain\nhyun jin\ngastroenter ology\neiffel tower\ncheltenham races\nà® ħ\nwe k\nv logging\nshoo m\nrom mel\nrepre ssed\nnewho pe\nnar rating\nn cd\nmetal gear\ngloss op\nger aint\nfa is\ned ition\ne book\ncoron as\ncar tman\naccor ds\nyoun gg\nun certainties\nsuspiri a\nsal vini\npreeti katweets\nperu gia\nke p\nin shore\nguin nes\ngi ger\nfamily business\nbin aural\nau try\nacron yms\n---- ---\nãĥ ĵ\nx viii\nval di\nurban o\nstar ry\npla ster\nfli rt\nzir con\nun defined\ntre st\nthe gold\nsu árez\nsle ds\nsk elly\nmoderni zing\nmer lin\nli ere\nlam u\nj hel\ngol lum\ncr ysis\nchu la\ncali pers\nca ille\nbri x\nbou lton\nbig finish\nbc r\nbar tending\nworld class\nwelove our\nte emu\nsed ation\nsabot aging\nq lik\npos ada\nmother ing\njer ker\nhello love\ncinnab on\ncan poli\nautom aker\nðŁĻıðŁı¼ ðŁĻıðŁı¼\nwm ns\nvand alised\nul trac\nmon soon\nmiz uki\nlegis l\nju ried\nje anie\nintro spection\nho ggard\ncor rine\nbr ynn\nbell erin\nastro physicist\na bed\nà¹ĢภĶ\nwon ton\nwhok new\nun scheduled\nthe que\nsig a\nricky rozay\npp p\nllcool j\nkeer thy\nkat sina\nk cc\nhop scotch\ndefin ately\nd att\nðŁ¤Ķ ðŁĺĤ\næĿ İ\nwe ill\nshirec c\nqu orum\nnd x\nkha imah\nist g\nge et\nfle ischer\nfidd ling\nexclu sions\nelectro lyte\ndispar ate\nboric ua\nar mas\ntu delft\nte ous\nli de\nleg ality\njil lette\nf hp\nboy scouts\nar jan\nal ami\n௠į\ntat ler\nsteve harvey\nshrap nel\nsf g\nsensiti zation\nmiss world\nle me\nindustri alization\nic ting\nhar man\nfol ate\nden haag\nclo sings\nch are\naru sha\nado c\nus j\nto ying\nsof life\nsna pe\npé rez\npoorpeople scampaign\nno le\nlooooo ol\njit singh\nil b\ngi ans\ndot son\ndo sh\nbra il\nbattlero yale\nðŁĩ·ðŁĩ ´\në Ħ\nÅ Ħ\nthis s\nsn v\nreddead redemption\npal me\npa wel\nno witzki\nnar ayana\nmobile photography\nm sin\nlive at\nle ones\njaclyn hill\neuph rates\nengv pak\ndc ad\nco ffins\nbook launch\nðŁĥ ı\nstrat for\nspeed paint\ns zi\nram in\nperpetr ator\npaint job\nol m\nmr m\nhal ved\nflint shire\neri o\nblaken ey\nbin ky\naqui les\ny out\nwatch able\nw sf\nthe carlospena\nroy le\nri ers\npy d\npiyushgoyal offc\nmagni fication\niso c\nhurrican es\ndiet z\nc wu\nbr ich\nborder collie\nbis son\næ ŀ\nval ance\nu kh\ntruck in\nter y\nrick ards\npest control\nnatu res\nmo fos\nm vb\ngruff alo\nful tron\ne ben\ndoo s\ndar bar\ncar melo\nbusines stips\nbou din\ntranspho bic\nschae ffer\npre cords\nmee tups\nisaac son\ne talk\ndr g\nbarsand melody\naye sha\nau dley\nash tanga\namar anth\nðŁĺ¬ ðŁĺ¬ðŁĺ¬\nðŁIJ ¹\nshap s\nr dp\nmol lywood\nkun dra\nki ba\ndig vijaya\ncycla des\nco il\nback gammon\nb more\nwensley dale\nu ar\nthe house\ntb b\nsha o\nnor ri\nmer alco\nl ée\nis our\nher ak\ngo x\nconsecr ation\nchrisg packham\nchester field\nanimo sity\n! ðŁĺĦ\nìĥ ¤\nya ad\nv x\nta ren\nsyn dergaard\nroad kill\nnat chito\nmountain view\nmin ec\nlighthear ted\nleg is\nilli er\ngrand daughters\nay ed\naqu il\nðŁĮĬðŁĮĬ ðŁĮĬ\nw gbh\ntypo graphic\nthe be\nta cha\nsuc re\nspr att\nrom toronto\nol leyball\nmy st\nlack luster\nkal ash\nilfrac ombe\nil ley\nhon ed\nheyman hustle\ngu ill\ngo tha\ncrystal lo\nbho omi\nâĿ¤ï¸ı ðŁĩºðŁĩ¸\nঠ²\nz oni\nucir vine\nt ga\nro vani\nnipsey hussle\nlun atics\nles vos\nkidrau hl\njovo vich\ncomic s\nbeck yg\narbor day\nad tech\nðŁĶ´ âļª\numbil ical\ntan que\nswag gin\nstor ch\nshow off\nsallye aves\npicture book\nmy rr\njo ele\nhor chata\nel dr\ndil iman\ncmof karnataka\nchoose day\nal ish\nver itable\ntre jo\nran gel\nrail roads\nny sut\nmorphe us\nmasterche fau\nmani ac\nkowal ski\njaz mine\nic ahn\ncredit unions\ncra d\nann ation\nyn ski\nwilhel mina\nsare an\nnosfer atu\ngri ffs\ndias por\nd jash\nd iller\nct p\ncontigu ous\nbottlen ose\nbaha sa\nâĸ¶ ï¸ı\nstal bert\nprofan ity\npharmac y\noc chi\nju co\nishi da\nfe mur\ndi minu\ncomple mented\nclo ts\nbal akrishna\nasv px\nart net\nah ed\nag b\nstanak atic\nshow girl\nresc o\nres ell\nre group\npra vin\nmt news\nmb m\nli ais\nkell erman\nkaz uki\ngr ater\ndis gaea\ndere rs\ndef lect\nconcer tos\nbha dra\nbeig nets\nanak ar\nê° Ģ\nstall ings\nphoto gs\nmusic fans\nmon gol\nmin now\nmam ie\nib jp\ne ta\ncd ma\ncath al\nc mt\narun ning\naquit aine\nwin ery\nto res\nsuper latives\nrecep tac\npar ched\nloun ger\nja ap\ni ia\nhill billies\ngrey stone\nge tover\nfashion ably\nad eno\nyay yyy\nwest bourne\nsu stains\nstar buck\nso so\nsh ner\nrave ena\noned rive\nk town\nin ar\ngw g\ngir ardi\ncec ily\nc ations\nadvers aries\nиР´\nyeo vil\nv allo\nspas ms\nso ton\nra bble\nr ch\nq gis\nn bt\nlake s\nlady smith\nis y\niol ani\niam j\ndrif ters\ncompar atively\ncli pper\nbusiness owner\nbirth date\nbattle field\nym ur\nwinter classic\nvic ari\nsub species\nspe er\nsor ia\nsion er\nsi mcity\no glu\nmar cell\njeremi ah\nho pi\ngar vin\nfurther more\nflo ssing\ndogfish beer\ndiscoun t\ndenomin ator\nblock chains\nb fp\nah at\nðŁķ IJ\ntrow bridge\nstool presidente\nsky rocketing\nsho tt\nshan gril\nro pp\npar ine\nnews line\nm cly\nle sia\nkun duz\nkon o\nk fm\nic er\nhar twell\neng in\nchar ot\nbel per\nas yn\nalter ation\na ish\næ ³\ntranscend ental\nsugar free\nsemiconduc tors\nsau vage\nred devils\nmun dy\nmsle amichele\nmo her\nmilwau kee\nmclen nan\nll ws\nj lin\ngur meet\ng tm\nfarm ville\nf bb\nburge oning\nbelly dance\nba sti\nathabas ca\naran sas\na historyof\nthisi sm\ntek no\nstif tung\nsouth asia\nprom posal\norient ated\nneedle work\nlocal business\nle iter\nif as\nho cane\ngran ary\ndomin ion\nbo go\nbar fi\nabdul lahi\nzane tti\nwoo len\nsi fting\nnatur ally\nlu ongo\njaland har\ninterrup tions\nge u\ngame plan\nfro cks\nfoun ders\nfacup final\ndem convention\nd ici\ncoup é\ncircu ses\nbar gain\nà® £\nup an\ntram mell\ntab led\nseag ames\nrest itution\nq igong\npull out\nopar ty\nno p\nko dan\njuli a\nhal stead\nga the\ndani il\nbat su\nb ng\nab ca\nâĢ¦ ?\nvali dating\ntranscei ver\nre touching\nmindy kaling\nla gu\nke mba\nhi ght\nfibrill ation\ndei ros\ncor man\ncon spired\narcelor mittal\nâĢ ¹\nz ata\nyorkshire hour\nventil ated\nueber tangel\nto ile\nter us\nrho da\nprank ster\nm ston\nlumin ary\nkk rv\nker rang\ngru bb\nbu ki\nbo one\naque ous\nâģł #\nyoung people\nwi ig\nwh ich\nwax aha\nsynony m\nsummer lin\nstruc tural\nsaddle worth\nrush die\npher om\np mr\noli go\nog den\nne hemi\nmichel in\nisrael ites\nhip ster\ngo duke\nfu gue\nevacu ating\nde fer\ncb schicago\nwi v\nspart ner\nsimon son\nselec ta\nrat liff\nra zz\nplainti ffs\nlu coz\nkar st\niw news\nhone ys\nf sen\ndinah jane\ncec elia\nðŁį Ł\nvote leave\ntom daley\ntibur on\nsrini vasan\nroth well\nmon dial\nman chin\nlovecraf tian\nl mc\nha ving\ngun i\nden man\nde ga\nchu y\nbru k\nblue devils\nageo fultron\na ie\n( !!)\nwir ral\ntm f\nskybet league\nra ds\npk d\nneil young\nlad ys\nis ys\nion ian\ninhal ed\nhoodie allen\nellic ott\ncar sten\nal bay\nadi da\nacci dent\nÏ Ħ\nvisual ise\ntre viso\ntra che\nspeed run\nra joy\nprospec t\norlandom agic\nnokid hungry\nmargare tat\nkri ss\nik onics\ngrrr l\ngo hoos\ng sf\ndo ty\napplau ding\nac tu\nëĵ ľ\nsuffra gettes\nstar gat\njonas brothers\nit alien\ng luck\ndeton ated\ncan andai\nbo st\nbegon ia\nbeef cake\nbann at\nanderson cooper\naffor ded\ntravel guide\nstell amccartney\nre spawn\npanig ale\none il\nny ongo\nnike football\nmow gli\nmontan amoment\nmid size\nkel antan\njamm wal\nha se\ngolds mith\nfo den\nda ren\nchild hoo\nald ine\nadri en\nðŁĶ¶ ðŁĶ·\nðŁ¦ į\nss eries\nspear headed\nse xt\nsad hana\nram bam\npe ta\noligar chs\nmc court\nloc s\nðŁĺį ðŁĴķ\nи Ñı\n~ âĻ¡\nyee zy\nwil ks\ntcc andler\nque tball\nposse ssive\nmoff ice\nmedi at\nmateri alism\njon ath\nhat su\nflu ous\ncraf turday\ncar re\nb hala\nam hq\nveloci raptor\nteen vogue\ntable tennis\nse away\npre amp\npn pd\nmc clean\nlabon te\ninvic tus\nic r\nhelp desk\nexclu sivity\netsy uk\nepiso dic\ndat sy\nbu teo\nðŁĮ Ĩ\nye a\nsky box\nsing let\npi f\nor te\nom ara\nman alo\nmac tic\nli sd\nfeder ica\nfati h\nener gia\nel ines\ncoden ame\ncho ckey\nbirth da\nw ssu\nver bier\nush ering\ntalk to\nt me\nro swell\nneuro surgeon\nne pen\nnational siblingday\nmess y\nmascher ano\nk vy\niy i\nhong bin\nflutter shy\nchi i\nay go\ny amaz\nwhit ford\nun welcome\nsi yak\nscri bes\nsad lers\nre imer\nr cr\npaw sox\nparale gal\nmy picmix\nmoo ts\nkirk caldy\nk rum\nische mic\nint z\ngui da\ngh es\ngb w\nfransch hoek\nfinn balor\neast on\nblu ish\natthe disco\nâľ īï¸ı\nye huda\nwi jn\nwag ging\nterri er\nswar th\nstate champs\nstar fighter\nschec ter\nsas soc\npod casters\nomor phic\nma dy\nine bri\ngo pack\nde tv\nd xy\ncra ss\nchag rin\nbur den\nay m\napp soc\nal haji\nz wolle\ntheore tically\ntel ford\nri bera\nproblems night\npo lis\nmel ind\nish an\nindi anc\nga ana\nfood allergy\nequine hour\ndream z\nbi mbo\nalou ettes\nwal dor\ntri angle\nste k\nra imi\nqu ell\nnieu we\nnickelodeon tv\nmohabb atein\nlot l\nliech tenstein\nir p\ngu stin\ndecor ators\ncl ack\nbha ira\ny cles\nwe music\ntrain wreck\nstam kos\nsar tre\nru h\nremin i\npizar ro\nmu scul\nliven ation\njazz festival\nil ence\ni ffy\nconstitu tionally\nb ld\nìĤ ¬\nåī £\nstra ppy\nsever ing\npriv y\noo zes\nnightw ish\nhom ely\ngrin nell\nfantastic four\ndu vernay\nce ts\nay den\nar pur\napar na\nandrew smp\nwyn n\nvet med\ntown homes\ntips for\ntat oo\nste t\nsa iy\nrock hampton\npro choice\npnpd pcr\norgand onation\nn ago\nmeg ali\nk po\njan ef\ni mex\nhet field\ngen et\nfree diving\nfis ker\nfe tu\nep n\ndemocr atically\nchap book\ncas sper\ncarto oning\nbetra ys\nðŁİ ±\nwest bank\nvis es\nsom ali\nsivakarthi keyan\nsc athedral\nreflec tivity\npostgre sql\no fus\nno da\nmu kh\nmitch um\nm fab\nhyster ically\ngi ano\nforce ful\ndebun k\ncru ised\ncic ely\nbrain washing\nak aran\nab ul\nrash tra\npneu mo\noun tain\nmanit owoc\nlo ic\nit all\nik or\nid n\nhu ppert\ngg gggg\nz ite\nthir st\nte an\nstrang led\npeanut butter\npc gamer\nlo ta\nkurt busch\nko stas\nkib ben\njer main\ngab bott\nyas u\nt pe\nry and\nplatt sburgh\nnicole scher\nnb nnews\nmr james\nkauf mann\nit san\nget outdoors\ngam on\neugen ia\ncar man\nbon heur\nanti polo\nðŁ¤¦ ðŁı¼âĢįâĻĢï¸ı\nâłĢâłĢ âłĢâłĢ\nÙĦ ÙĬ\nut as\nsuper man\npickle ball\noptimis ed\nles ford\nko tt\njourney man\ngra bber\nco inte\nbra eden\nbj s\natur k\nad ler\nðŁĴĻ âĿ¤\nwon ga\nwi er\nwartho g\ntribul ation\ntan ker\nstan for\nshev chenko\nregar der\nr int\npun ya\nnab y\nmill ican\nha er\nev alon\ndwar ka\ncyclon enation\nboo gi\nblu ed\ntra vail\nso aker\nplainti ff\nmar kh\nloreal paris\nkovac s\nfis ch\ndi ab\nbrew master\naz ole\nrugby worldcup\nny lon\nnat t\njas si\nigu anas\nflap jack\nenerg ised\ned x\nbuccane er\nbaz ooka\nati l\nar dee\nðŁĮ ¬\nwil mot\nthe stage\nsuper massive\nseva sto\nsc rit\nriver trust\npodi ums\npart iti\nmontag ne\nmer chan\nmeetthe team\nloubout inworld\nkindness day\nheb den\ndur kin\ncynic ism\ncape x\nag ulation\nabid jan\nðŁİī ðŁĴķ\nyo sef\nun avoidable\nsting y\nsoyl ent\nshar am\nre using\noffic er\nmend enhall\nje eves\nhi day\nday soff\nbay swater\nban ned\native art\napril fool\napple wood\napp easement\nallelu ia\ntri o\ntrax source\nss mb\nre publica\nraz r\np ingu\nouri er\nmcgra th\nmagn ac\nk mph\nirrit able\ning roup\nharvard med\nhak una\ngre nad\nero se\ned clv\ndoor steps\ncounter terrorism\nandis les\nà¹ĦภĶ\nwhiterab bit\nwh ill\nvad ra\ntooth pick\nte mber\nsuspen seful\nshar pens\nnatchito ches\nminute men\nmick y\nmer ge\nlibr arian\nlaha ina\njugg ler\njames on\nin ker\ngen x\nfin de\nengra ver\nchi yaan\namon day\naband oned\na ami\ntwitter clarets\nter baru\nspen ce\nshav ings\nsf moma\npar ke\nid ly\ngrena dier\nbu ko\nðŁĺĥ ðŁijį\nðŁķ ¯\ntuesday trivia\nro el\nmul la\nmin ami\nluf kin\nheart s\ngine tta\ng ff\ndise ased\ncute emergency\ncor dell\nchristma sday\ncer ts\nauthent ically\nap ta\nam stel\nwilber force\nwas sily\nvar am\nse daris\nnaz ar\nmori ah\nkis ser\nk ba\nhigh heels\nhh s\ngive blood\nging ers\neti salat\nener gie\ndopp el\ndex perience\ncole gio\nchester fc\nbha iya\nag l\nwe w\nstu y\nss ang\nsal ento\npsy trance\npan ko\npaign ton\nim pt\nhoo se\ngoooo ood\nerink rakow\ndesign boom\nclon tarf\nb per\nafc cup\nabhi shek\nwether spoons\nventil ator\ntweet deck\nstap ler\npow r\nplo vers\nnur i\nnorthan t\nmc garry\nma ur\nlang ley\nkla ine\njusti fiable\nhabitu al\ng soc\nfin est\nextre mer\nexc elling\nen coder\neil ish\nduc kie\nbon ucci\nbct gb\nsi bley\nred hat\nphilharmon ie\npe cs\nmete o\nm ound\nliter acy\nio ka\ni hr\nhyper bolic\nhappy holi\ness er\ncon temp\ncau cuses\nbm th\nym urray\nwhen in\ntw irling\nsex ting\nscar ring\nru den\nru bi\nrom ney\nridge back\nok ka\noff ends\nny mag\nkla ge\nfix ings\nexcav ating\ndigit isation\nam alia\nzam fara\nw kc\nunc aged\ntele tub\npurpose fully\nmex po\nmass governor\nkha di\ncor neal\nbin son\nallot ments\nabur ro\nâĿĹï¸ı âĿĹï¸ıâĿĹï¸ı\nwicked ness\nvaj al\ntw im\ntt weet\ntru es\ntan jung\nsin ned\nrain dance\npriest ly\npra e\np fi\nnon sensical\nmeta irie\nle omin\nha ase\ng nac\neth ic\ndou gi\nbucci gross\nbre y\na etv\n/ =\nzu bair\nzephy r\nvo id\nun ed\nsc ani\nsav oir\nrecom end\nmic ho\nmer ch\nlo cum\njun os\ninstagram mer\ngago sian\neri ous\ncau tions\nbest photo\nan abolic\nag ame\nâĿ¤ï¸ı ðŁIJ¾\nvol ks\nup vc\nterra zzo\nspl icing\nrte one\nmc cray\ng pm\nemoun tains\neast lothian\ndu bz\ndmit ri\nden ning\nc sic\nblood matters\nbaku gou\narame tta\nal pa\nâĻ £\ntravel chat\ntayy ip\nsu et\nrebutt al\nprote a\npontypri dd\npi ac\nper d\nlu ker\nhypo allergenic\nhaha haa\nfun friday\nelisse joson\nat rump\ntom maso\nslo ver\non omics\nmetz ger\nlor ca\nlek ker\nja ipur\ninf ood\ngl ent\nfull metal\ncucam onga\ncu taneous\ncp as\ncoron ation\ncal abre\nbul ging\nb ko\nap sa\n* --\nyo ta\nwo ke\nutil ised\ntin cture\nrhon dda\npc f\nngay on\nmic hi\nmargaretat wood\nld i\nhi ther\nguil ds\ncleve don\nbank side\naf ans\n- >>\nvers i\nv ld\nunder classmen\ntri an\nte v\nstone bridge\nsmi ley\nrinse fm\nreal me\nre affirmed\npla st\noo dyssey\nnei stat\nmedalli ons\nmc kibben\nmbe ki\nhashi moto\nha zzard\nha ther\nele y\nak ko\naf ashion\nwestern sahara\nvilleg as\nsu man\nnor e\nmonte cito\nmari bor\nm ch\nem watson\nbu la\nbas sy\nbar ratt\nyorkshi redales\nware ham\nv pd\nselfless ness\nrefil lable\nom aker\nmb l\nfear nley\nea b\nde marc\nche quered\nbr ze\name ga\n." --\nyar mou\nx series\nri gan\npig mented\npatrizi arametta\npa ppa\nof ah\nmu cus\nlets gor\nleader boards\neff ingham\ndrive ways\ndragon sden\ncl n\ncit ron\nchi esa\nbron wyn\nbrack en\nbl v\nare id\nami stad\nae oli\nae com\nа к\nwax wing\nsz abo\nopeng olf\no berlin\nmac ul\ninf omer\nho de\nge ert\nencapsul ates\ncro mpton\ncon centric\nbil le\nbc jr\nas gar\naired ale\nusa a\ntra gus\nto pher\nreed timmer\nrare books\nper verse\nmo star\nlom an\nll m\nje p\nir ang\nfi br\nf mg\ne ir\nchild line\nbook challenge\nbon o\naugu stin\nat night\nanup am\nðŁĺ² ðŁĺ²\nwhat sup\nu avs\nt ittle\nsw amps\nst petersburg\nso shi\nmar ni\nje je\ninde mn\nhumili ate\ndo ped\ncate chism\nbur bs\nawkward ness\nðŁĻĬ ðŁĻĬ\nðŁIJ¸ âĺķï¸ı\nâľ ĸ\nworld league\nvi di\ntheatre day\ntal is\nt be\nsterili zation\nshaf er\nscal er\nplan ar\nnhl ducks\nmapple thorpe\nget covered\nesopha gus\nem el\ncir o\nbraw ler\nbottlen eck\nðŁĺį ðŁijį\nðŁı¾ âĢįâĻĤï¸ı\nಠĤ\nØ ²\nvin eland\nthr iller\nside burns\nse cours\npit ting\nnu tz\nnj pw\nmogu ls\nmee ch\nine a\nhouston dynamo\ngrav ure\ngor ba\nglyn de\nfri en\ndaw are\ncommemor ations\nbay max\nðŁ¤ «\nxx v\ntran quil\nth um\nspad ina\nsol ly\nmo ti\nmetast asis\nmapu to\nlen se\nim on\nhilde brand\nh sj\nfur man\netsy finds\nesmer alda\ne goti\nd fo\ncham a\nbri el\nbor dered\nðŁĴ« ðŁĴ«\nwido wed\nthro bbing\nthemo in\nta it\nsynchro tron\nstand er\nskate boarder\nsamu ell\npa ire\nfree town\ncsi ro\nber ners\nbar buda\nsqu ash\nso well\nraf ter\nrad ine\noregon ian\nnorthern most\nmo hic\nmaster fully\njar on\ninter sectional\nhass am\nfla grant\nemce eing\ncaptiv a\nbuck led\nze ki\nye oman\nwelsh rugbyunion\ntur ney\ntam aki\nstro llers\nnn r\nmerri am\nlien hardracing\nhi pp\nev ander\ners burg\nerik sson\ncn b\nbas ker\naphra gm\nthe year\nstereo typing\nsensor y\nrovani emi\nlo gues\nkre mer\nfour teenth\nbri ann\nbow ling\nbio logically\nbang z\nb har\narch uleta\na et\nðŁĺ ¿\nðŁĶ´ âļ«ï¸ı\nswit cher\nse gre\nne da\nmountb atten\nla dle\ncatar acts\nb cl\nvarieg ated\nsou d\nshe is\nrad ars\nmistre ated\nmc cal\ngam el\ng pab\nconte ssa\nchri sj\nche ques\nch saa\nbun nings\nambi ente\n~ <\nye ol\nunder mined\ntrans lat\nor to\nol oughlin\noff load\nneuro logist\nmu ba\nmen ong\nm cre\nletic ia\niz u\nhence forth\ngai ther\ne ws\ncer berus\ncar ia\nboy george\nac entre\nzen o\nw ür\nvanessa hudgens\nsushi l\npla z\nma za\nkar dash\ndi va\ndi aphragm\ncloud appsoc\nacci dently\nðŁĴ Ī\nØ§Ø Ń\nsw illiams\nstie boys\nsterling silver\nsi xx\ns bee\nre td\nnorthyork moors\nmin olta\nmigr ation\nma shing\nma sam\nlo ach\nindiedev hour\nga is\nep al\nec l\nbye bye\nbic i\nat elli\nasen sio\nanti o\nala stro\nà° ¤\nun ir\nto asts\nspecific ity\nsma sher\nshop keeper\nram ada\noni e\nn ph\nmeet s\nlular oe\nli sto\nkaf tan\nj mi\nfon tan\ncardiff uni\nbur ro\n! ðŁĻĮ\nvigor ously\nthemoin montrose\nthel asto\nt sang\nslur p\nsed ans\nregre so\nmun k\nlar ds\nha sil\nfra p\nflin ching\ndragon s\ndisappro val\ndel aire\nchu cking\nbe coz\nanarchi sts\nðŁĵ¸ :@\nwic ke\nv axx\ntex oma\ntall a\nsumm ers\nsu si\nro wy\nprovoc ateur\npg achampionship\noko toks\no tv\nmagick ingdom\nkhome ini\nhs sports\nhere tic\nhapp py\nh ito\ngbm fg\nde paul\ncome di\ncoffee morning\ncannon dale\nbra ini\nau robin\ntill am\nplann ing\nph ir\npanic atthedisco\nmc pe\nkanka kee\nful tz\nfm radio\ndissatis fied\ncon gru\nbat ors\nambro sio\nadol fo\nacom be\næĴ ®\nãĤ Ī\ny ona\ntri as\nto yn\nthefuture is\npen icillin\nos lo\nmt gs\nmenong autham\nmed tronic\ninf om\nher ve\ngau l\nessence fest\nblackveil brides\namas sed\naficion ados\naesthe tic\nwo de\nwal lop\nts d\nthermo dynamics\nschool games\nram dev\npal patine\nhom an\ngo vind\ng va\nfe il\nel v\nbjor n\nav u\naaa at\nðŁĻĪ ðŁĻī\ntwin cities\ntri alling\nsi ue\nrelax in\nrapi de\nkal o\ngover ment\ngl ick\nfun fair\nfick le\ne ed\ndre vival\nche o\nbull terrier\nberk lee\nðŁĩºðŁĩ ¬\nçµ µ\ntr yan\nsubstan tive\nsol heim\nsh into\nscotland hour\ns oooooooo\nro he\nril ke\npro mi\nnam az\nmini figures\nfraud ster\nengad get\nbb b\naperiti f\n... "@\n$ -\nðŁĴ¯ %\n» .\nwest cott\nsmo sh\nodd ball\nmee ker\nla wards\nhacken sack\nfr act\nfer menting\nfac s\ner rant\ncall the\nbuen os\nbroad ening\nbar bo\nafl w\nac sa\n⾨ ðŁĴ«\nwoo din\nton awanda\nsin ise\nre ka\nmu rad\nkl is\ningl és\nij f\nham els\ngre gabbott\nf mp\negyp tair\negor aptor\ncsgo giveaway\ncontrac t\nbar nes\ntogether stronger\nsu ze\nslo tt\nrani al\nlamar cus\nhick ory\nexploren l\nbeach club\nyy ccc\nsw all\nsuc on\nstorm chasers\nsound scape\nobjec tively\nnov ich\nni kel\nneur onal\nme aghan\nmanny mua\niber ico\nfer ty\nfa thead\ndol lywood\ndareto dream\nd jen\ncr pd\ncourier mail\nbaon pdx\nvi vre\nthomas rhett\nseal ant\nsa arc\nqu asi\npac o\nmacken zi\nk ole\njohn lewis\nhead rest\ngn ini\ngenerale lection\nben affleck\nzul fiq\ntac om\nspel un\nrun dle\npr ana\nla pped\nkni ghted\ngold fields\ncan oe\nbellar ke\nba hr\namo led\nacro ix\nwilli ston\nwen ch\nvig ny\nti the\nse cul\nsad r\npick ler\nne pean\nmay r\nkarrue che\nis sf\nhan solo\nfri zz\nflood waters\nfari dabad\ndar ya\ncoden ew\ncell ar\nbatchel or\nar co\nak t\n* ...\nðŁijıðŁijı ðŁijıðŁijıðŁijı\næł ¼\nwe will\nun ch\nsni ped\nsat yan\nren fro\nre ena\nrd ma\nra am\niti ative\nhear to\nh mong\nght me\ncine max\nbon obo\natta ches\naf tab\n) âĢĶ\nðŁĴļ âĿ¤ï¸ı\nðŁIJ µ\nâŀ °\nç e\nwe gian\nvin i\ntrans continental\ntear down\ntar as\ntam agot\nsemb lance\npet care\nnotre ally\nmoney maker\nlu can\njazz club\nher tz\ngreat barrierreef\ndec can\nbogot á\na az\nï· º\ntwili o\ntug boat\ntop brew\nse ren\nsantac laus\nroman empire\npr ite\npay outs\nn sg\nn att\ngun d\nbon nies\nback woods\nante tok\nan kh\nali f\nable me\nver dic\nvan camp\ntynd all\nse vier\nscele bration\nro darte\npe scat\npar affin\nkir wan\nisi dro\nio sa\nhun chback\ngas quet\nfl it\nel rod\ncott ag\ncamero onian\nbuck s\nat wain\nðŁijĮ ðŁijı\nðŁį ħ\nsunrise on\nshen hua\nr vd\npr yn\non side\nnom i\nmour n\nkno t\nkha l\niri es\nindependi ente\nguer ri\nffe t\ncal lo\nðŁĵ Į\nâĢ ³\nsj m\ns inter\nrecipro city\npir at\npi do\nnuclear ban\nnag le\ningh e\ngolf club\ngoldman sachs\ngeography teacher\ng mw\ng inge\nfu g\nfrance sco\ncor bis\ncli theroe\nbas co\nalta ir\nal of\nag over\ntu do\ntam per\nster il\nsay s\nri ss\npr unes\nl ck\nin decisive\nguide d\ngou lash\ngold schmidt\ngeaux cajuns\nfo is\ndr ona\nct x\nanup am\nall things\nachri st\nðŁĮ´ âĺĢï¸ı\nãģķãĤ ĵ\nve taffairs\nsar is\nqwer ty\nore illy\nmcgu iness\nje c\nir lam\nh vac\nfor an\nfollow up\nelix ir\nclau sen\nbram all\nbighit ent\nbaum gartner\ny mm\nvan ce\nta pur\ns fa\npre ity\nmach el\ngot g\ndess ert\nclient ele\nbr una\nbo ylan\nal td\nspy der\nspirit week\nsemper fi\nre developed\nr ko\npre face\nmc adoo\nmal kovich\nm mu\nkanan askis\niw obi\nell yn\ndream ville\ndick y\ncoo lio\nchar maine\ncanal rivertrust\nbrown back\nbrac ed\na ena\ntal kin\nsw ot\nsi raj\nsay n\nryan gosling\nole um\nmil denhall\nka dir\ngram m\neng ined\ndont try\ndeath bed\ncor sets\nclose the\naro or\namaz ement\nal akshmi\né u\nupp olice\ntem be\nstev o\nscan lan\nreco de\nma pper\nlux e\nke yn\nhr v\nhorror story\nflaun ting\nem s\ndor je\ndignit as\ndar ul\nchor ley\nchav o\nb hoy\nar us\nac ram\nðŁĹ ½\nuof cincy\nuniversit yo\nte aday\nsal k\npin kerton\nmc all\nman oa\nma kat\nke wl\nit x\nili us\nibu profen\ngo el\ngi glio\nf and\nbau mann\nbastille day\nun balanced\nter rence\nshot els\nrow ena\nra she\npein ture\nmoham med\nmis sc\ngau che\ndaniel son\ncud litz\ncounter act\nca vern\nah soka\nafter show\nwh ot\nunner ving\nto ko\nsho pe\nrise of\nred friday\npobl ano\nnoble sville\nnaturema pr\nmam malian\nma goo\nknow le\njam shed\ngo k\nfo wl\ndh ana\ndand elions\ncu ador\ncolleen b\nco ba\nbug ti\nau guri\nap ad\nam be\nи н\nvin ton\nto vote\nsentim ent\nred chilli\nrar itan\nra quel\nmin ter\nkore atown\nha bl\nfinal ise\nfa ison\nengra vings\nab at\néŃĶéģĵç¥ĸå¸ Ī\nyo gan\nx anax\nwe er\nwahl burgers\ntown ships\nstra gg\nste er\nste de\nsel ive\nmy st\nlu des\nliv onia\nkite boarding\nkemp inski\njoy fully\nj hu\nig ner\ngo har\ncentr ic\nbri bed\nbla zes\nag rit\nver mon\nu cle\nsc ard\npor g\nplex ig\nno plac\nman nion\nj abo\ni aff\ncrest wood\nco org\nco horts\ncla dd\ncan ard\nbi kel\nbannat yne\nban n\nðŁijĩðŁı¼ ðŁijĩðŁı¼\nzi ers\nyesp lease\nsu fi\nspell ings\nquar ant\npa di\nki ff\nend gunviolence\ne ggers\ncon signed\nce au\nbrum bies\nbrit o\naldi uk\nad sor\nabo lish\nwin itwednesday\nthre elions\ntech ies\nsnat ches\nsei ze\npu is\nol mos\nmin chin\nmce wen\nmar ner\nmalam ute\nmade myday\nlabour day\nda ar\ncott age\nban u\nak land\nðŁĻĮ ðŁĻı\nÅ §\nthe wine\nshuff le\ns map\nroad work\nre defin\nmud slide\nleon ie\nhead waters\nhay don\nclyde bank\ncas in\ncardiff cityfc\nber li\nbar bour\nau ston\nab us\nç Į\nyi k\nwa pping\nsun der\nscen ter\npar snips\nno bby\njen i\nicom be\nhpm kt\ngla sne\nga han\nfre ier\nco is\nbru baker\nvis ite\nte sta\nte flon\nroman tically\nmy c\nkir tan\nget some\ncarry on\nasian et\n_ âĢ¦\nwat terson\nwaste management\nroom ba\nred ick\nre mou\nr team\nprince harry\npr ca\npost ings\nnew mexico\nnet galley\nmp loyment\nmil ano\ncry ing\ncd b\ná´ ĩ\nz ang\nweather proof\ntang ling\nstrat ford\nsleep out\nshown u\nnir mala\nn krumah\nmon iz\nlan et\ndel onge\nbox ster\nbij lani\nag upta\na quar\nyoon min\nwin the\nun afraid\nug ent\nsupervis e\nsn u\nshak ib\nsal taire\nru sk\npre fabricated\npentat onix\npe ston\nna stur\nl pin\ngo dal\nfaith full\nenshr ined\ncrusad es\naldu bb\nal ok\nwhole meal\nriz in\nre dri\nor ta\nnutr i\nkelly file\ngen k\nfarm shop\nerken ci\ndu ffle\ndev endra\nci gn\nbc ity\nav ram\nale u\nye ung\nunic ycle\nsp rang\nsi ones\nri parian\nplu ton\npierce the\npha sing\nod dest\nnon o\nnatur alized\nn ls\nmy favorite\nk ran\nic bm\nhom i\ngro cers\ngov christie\nfour some\nfl keys\nd ally\nayour b\nyor g\nwhen you\ntw ang\nti als\nr tel\nnationalbestfriend sday\nmcgu igan\nkath i\ninvo king\nev ading\ndor tiz\ncol borne\nbur qa\nbalu chistan\nand proud\nam ba\nadidas uk\nâĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢ âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢\nuk is\ntra ore\nthen fl\nquarri e\norigin ator\nom nis\nm gh\nknare sborough\nit d\nho yle\ndonat ella\ncho ses\ncapit alization\nare pa\nar ua\nun cann\ntwitter afterdark\nover the\nley va\nle ggy\njohn wick\nher pe\nev ora\nder mato\na wat\nðŁķ Ĺ\nâĿ¤ï¸ı ðŁĸ¤\nภ¿\nwil ted\nthe tonyawards\nsig s\nsha hr\nsel leck\nre van\npan eling\njun ket\nid g\ngol dent\ngaz ian\ndon gle\ncar fax\nat w\n| ||\nwheate ar\nwhe ein\ntabletop games\nspeed way\nsolic iting\nshk reli\nser ia\ns ann\npol anski\non ara\niw f\nindi st\niam nagarjuna\ngre ville\nfan zone\nee ek\ndo vey\nbhar atiya\nastro turf\nantetok oun\namazon music\nall saint\nal amy\nv ora\ntv t\nsy fy\nrob ison\nra zzle\npli skova\noffshore wind\nno id\nnain ital\nma dog\ninter reg\nil bert\nhot elier\ngu gli\nchri shem\nchas ka\nath om\nand om\nvo st\nter p\nsun tory\nsummari zing\nstor mer\nsteve jobs\nst x\nsc dsb\npo tre\nnews boys\nmc crae\nluc ite\nit at\nexcu sable\ndaz s\ncolon na\nb andy\nwar game\nw ans\nvalenci ano\nsa chet\nphx traffic\nphila union\nmumb aim\nmar gret\nfon dation\nexplo realberta\ndefe c\ndavid caruso\na egy\nðŁĶ »\n미 ìĬ¤íĦ\nvir gen\nren dra\nn ack\nmon deo\nlive the\nl sch\nj lt\ndi ka\ncon dors\nberry man\nanc illary\nacor n\nо ÑĢÑ\nwythen shawe\ntobe apartner\ntai z\nstreet light\nstar lin\nsi u\npro sser\nph is\non track\nm wh\nhumanit arian\ntravel ogue\ntrans duc\ntheop ap\nseman tics\nsat work\nsahi h\npas schen\nnik ka\nnarra gansett\nna thy\nman ado\nm po\nl sc\nkcap inoy\nkcapinoy star\ni dd\nge ass\ng onal\nfair field\nd alia\nclean up\nchor ong\nay ang\nyn n\nx fm\nwil a\nren dez\nra vish\nqui ff\npuppete er\nnat asha\ninst on\nfi f\ne star\ndo shi\ncu zzo\ncorre ia\ncole man\nannoy ance\n.. ðŁĺĤ\ná l\nwi ps\ntry st\ntop chef\nspoken word\nsel ah\nmadel yn\nlg fa\ngive me\ne wood\ndon ington\nci gna\nchry stal\ncalic ut\nzimmer mann\ntre et\nspon tane\nsour is\nsag et\npalli ative\nmo jit\nhtafc dotcom\ndre yer\ndev ore\ncycl o\ncor by\nbey hadh\nbanque ting\naber ry\nãĥ ł\nwo ong\ntess er\nss sssss\nshop boys\nscreen caps\nsa dies\nobliter ated\nni as\nmel ty\nknock down\nka ji\nep f\ndin i\nbritish council\nðŁij¯ ðŁij¯\nðŁĩ®ðŁĩ ±\nðŁ¥ ĥ\nwu v\nun opposed\nsw enson\nstu ffy\nspee der\nraw ford\nr gc\nprayfor gaza\npg achamp\np nc\noni sta\nmtv la\nmilitary monday\nk he\nfiel ded\nengagem entr\nen amor\ncas sell\ncad res\narund hati\n.. ??\n⼠¹\nwar ks\nver ny\ntheopap hitis\nsubtle ty\nstat us\nspro blems\nspin n\nsimu lators\nsail boats\nrais man\noc are\nmw angi\nlondon symphony\nfreddie gray\ncon way\nclass act\nbebe rexha\nair bender\nu yo\nthe music\nre did\nqueu eing\nleav in\nkitchen rocknroll\nhau d\nglo ck\nfe ile\nbe vy\nbass master\nbarretto julia\nband on\nabar ça\na ep\n¨ ë²\nz ko\nwe support\ntrol leys\ntranscend ence\ntal esof\nsilver lake\nsharp shooter\nschwe itzer\nreal gdt\noh yeah\nlife blood\nking sme\nheart attack\nglori etta\nextre mity\ncro y\ncom motion\ncollu ded\ncol fer\nchecker board\ncath ay\nbuen dia\nam uses\naa ahhh\n. ðŁĺĺ\nðŁĶ ľ\nwo hoo\ntwitter vforce\nrot ates\nqu els\npizzahu t\npan tai\nor me\nman gesh\nhappy saturday\nh kg\nge station\ncommunic able\ncoast lines\nâĺĨâĺĨ âĺĨ\ny ooooo\nthiru van\nsteve austin\nni azi\ngg anu\nem w\nd itt\nbuff ering\nam ma\nðŁĨ ķ\nwha aaat\nvs gb\nspe ight\nre sis\nm se\nj ho\nib aka\nfro ot\nevalon goria\ndin klage\nbio hazard\nbeli a\nac as\nðŁij ķ\nÐ º\ntw r\nsysad min\nsun burn\nrrrr rrrr\npr ater\nkyush u\ngo by\nconsequ ential\ncome together\nbeÅŁ ik\nbab b\nannak endrick\nðŁ¤ ĸ\nx rd\ntoo good\nseal er\nre ira\nra ut\npet tit\nown tv\nol ler\nmountain dog\nmis sp\ngoodbeer tweet\neuropean union\nefur niture\ndra dio\ndisc ern\ncall ous\nâī¦ )\nut mb\nspur rier\nsoli der\nor bison\nod g\nmic a\nktn kenya\nkoep ka\nic ca\ngau lt\ng x\ng dn\nfor ts\nfil mawards\neu tical\nea g\ndier ks\ncannabino id\nbul bas\n;; ;;\nðŁĸ IJ\nvit toria\nup lift\nunder writing\nsne ad\nsn ell\nre distribution\np do\nno akes\nnarayan an\nj vc\ngram ophone\nfranç ais\nell ery\nconvey ancing\nbi ked\naw we\nab ulous\nwan te\nsh wara\npay son\nlu mumba\nlifeat att\nle ics\niron fist\ngr int\nfigh to\ncopper head\naqu are\nÙģÙĦسطÙĬÙĨ ÙĬ\nwe make\nt ys\nqu t\nplay as\noff a\nne revs\nmust apha\nmeta physics\nmammoo tty\nlegali zeit\njun oon\njan n\nflatt ening\ndu ral\ncam a\nbub ba\nantand dec\nactu allyn\naar ons\nðŁį §\ná IJ\nwi zz\ntwin peak\nsle wis\nparishi oners\noak ham\nmai du\njessica jones\nbay town\naz s\nates sen\nanc ing\nðŁĻĮ ðŁı¿\nðŁĺĢ ðŁijį\nঠ®\nske w\nfi af\nda sha\ncladd agh\nbino cular\nbal le\naz ria\nv ented\nts laq\nsn m\npen chant\nmod ality\ngand hin\nfrivol ous\ndel am\ncc na\nang an\nam os\nalente jo\nacross america\ny ore\ntwee ter\nthe clash\nny lons\nneedfor speed\nmag got\nlion king\nhar id\nh sieh\nfabi en\nul hassan\nui design\nste vi\nsl ats\nretwee et\nradio graphy\npor poise\nman cuso\nlap wing\nki bble\ngram pian\nfai ers\nec nl\ndun phy\ndisney pixar\nde eney\nca pote\nðŁ¦ Ī\nÌ ·\nv int\ntyranno saurus\ntu gal\nsw amped\nsu strans\nsmall town\nseag al\nsalvation army\nready stock\nkri ders\nhen an\ngroom ers\nearth lings\nce da\nbom i\nactuallyn ph\nvand al\nsch rö\npolic eng\nnbc blacklist\nmul ca\njack johnson\neeee eeee\nbri elle\nbrazil gp\nb ages\nwoo gie\nwat tle\nve ley\ntede schi\ntape stries\nstain less\nsb s\npri yad\nparish ilton\nnam pa\nmor rell\nmelo dic\nkam o\nimpro ve\nhill climb\neur or\ndev ant\ndal umni\nchi ellini\nal chem\nak ashi\nvote trump\nsteel heads\nsix pence\npo wn\noffici ated\nnew yor\nmagnum photos\nlin dy\nla yed\nint ar\nimmortal ised\nhall fame\nf hd\ncor dy\nba a\nar ru\nðŁĵį #\nâĮ Ľï¸ı\ntt b\nra pper\npier cer\npe m\nnomin ates\nmarathon training\nle vert\nkodal ine\nel ford\ne gl\ndoyle stown\nay re\nas suring\nyo tu\nvel lum\nup sers\ntg f\nsupple mentation\nphy sorg\nnever stops\nmean est\nmaple story\nkid dy\nincu bus\ngoav sgo\nfic h\ncot illard\ncarmelo anthony\nc ny\nc me\naz pi\nâľ °\nsuf jan\nsneaker head\nsher if\nsa har\nrum mage\nrub instein\nremitt ance\nrail a\nphant asm\nonyour side\nmccut chen\nmain streaming\nit ag\nhoss ain\nend or\nde briefing\ncou ros\nboo tie\nbharat anen\nbaesy stem\naud ited\nam un\nðŁĨĺ ðŁĨĺ\nঠķ\nv apes\nsuperannu ation\nry anc\nrec ourse\nre working\npom pidou\npok hara\nnma ahc\nequip ments\ndo ha\ncham bray\nba ste\nyear lings\nvap ors\ntom kins\ntom hardy\nsan s\nquo tes\npixel ated\nmur tagh\nmd ma\nmau led\nerec tile\ndd j\nbrah man\nblood stream\nalway sin\nai kman\nwhad dup\nun authorised\ntopbrew stues\nsea horses\nremitt ances\nra id\nplay ers\nlee son\njoh nam\nipan ema\ndust bin\ndevan te\nab hay\n! ðŁĺĢ\nun ni\ntar heel\no jib\nmal lett\nmachin ist\ngot chu\ngb l\ne ish\ndiscrimin ating\nbc d\naz tec\navi c\nðŁĴ¥ #\nâĢ¼ï¸ı #\nwool len\ntimm c\nsun se\nst oughton\nsethro gen\nro tten\nro sey\nover lords\nnight shade\nmou ld\nmin c\nmi ele\nline of\nlifeli ke\nglut tony\nfla galine\nfan made\ne art\ndestin o\ndesc artes\nbun dy\nartist as\nwe bradio\nty agi\nthere in\nsu si\nsp rit\nside by\nro isin\npt bo\npro bed\npasschen daele\nn ich\nman as\njor dy\ngwend olyn\nfar rington\nef ury\neamon n\ncu v\nbuzz y\nut tered\nt ally\nsurbhi jyoti\nstu m\nshar an\nq v\npre tender\nji kook\nhol ger\ngh is\nco axial\nche wie\nblue moon\nash bourne\nup cycle\ntes acker\nsy monds\nsilent film\nservice design\npre go\npa wns\none ttes\nnc ss\nmonmouth shire\nlum ley\nlevel led\nfun nels\nflint watercrisis\nflick ering\nedel weiss\ncroke park\ncloud flare\ncis neros\nb appa\nun protected\nsp anned\nsom in\nscore sheet\nlook outs\nlibr ar\njen der\njas am\ng land\nfrench open\ndisclo sures\naz ura\nðŁĺĬ ðŁijĮ\nðŁijı ðŁijį\nwel a\nvit ra\nspine less\nmy way\nle anne\nlat ics\nkri ssy\nk va\ninge sted\nhu bris\nh me\nfurnitu redesign\nf md\ndiscre tionary\nd mm\ncomple to\nbc sm\nbalo gun\nwomanin bizhour\nsom mers\npd m\nol um\no sho\nne en\nmobili zed\nme gas\nincess ant\ngu aj\nga th\nfa ste\ned un\ncol lies\narche type\nad us\nç Ħ\nyo yo\nul lo\nre wilding\nmac ron\nm peg\nkk un\nji ju\nfor senate\ner ud\nedi son\ncom ey\nðŁĵ± :\næ Ģ\nun worthy\ntalk ative\nsc rolled\ns ment\nrainbow six\npin up\np tv\nnc w\nhager ty\ndi xie\ncor delia\ncoles windell\nch ito\nc pim\nali ef\nðŁļ ª\nâľı ï¸ı\nâĢĶâĢĶ âĢĶ\nx ss\nww ltv\ntv l\nsel van\nra gini\nph ore\npar ry\no show\nmar ref\nmam aya\nhigh field\nfis ch\ne amad\ndg allery\ndail ye\nck ont\nce ce\nbuon anotte\nbe ary\nðŁĺĤðŁĺŃ ðŁĺĤðŁĺŃ\nsw ope\nsnow drop\nsin dhu\npet worth\nmur row\nmou st\nmanife stations\ngra dation\ngorba chev\ngh ul\nfc dallas\neuro trip\ndw b\ndom ic\ndatasci entist\nali sta\nac ps\nðŁij µ\nve mos\ntur nar\nthe first\nsu var\nnord ics\ndizz iness\ndit ko\ncomplic ate\ncome on\ncogni zant\ncitro en\nam ory\nðŁĩ®ðŁĩ ¸\nz ela\ny are\nsuper fans\nr ry\nmeas ura\nmari ok\nje ux\ngreen newdeal\ngi um\nd zeko\nbicycli st\napproxim ation\nappli ed\nactu ally\nðŁIJ Ķ\nwwi i\nunder lined\nso ty\nslur ry\nsho ta\nscol ded\no ona\nno ord\nnaturale za\nloveyour self\nkim ura\nhack man\ngo sh\ndru mand\nde jec\nchri sco\ncel le\napr ile\nad ot\nåĨĻ羣 好ãģįãģªäººãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ\nun provoked\ntt ps\nstep father\nsen tra\nro hini\nrabb a\npersonal isation\nmirr oring\nmc mullen\nlun ges\nlat itudes\nkoon tz\nkevin jonas\njimmy johns\nforzam ilan\ncar bons\nach enko\nye sh\nworl dd\nwar sz\nuse fulness\nsu pra\nsol as\nrapp el\nmo sth\nki is\nim bec\nefan dom\ndrou ght\nco ax\nbur saries\nblack bear\nbest oftheday\nar up\nðŁĴĸ ðŁĴķ\nwoo commerce\nwaist line\ntr ini\nsuper liga\nrecur ve\nra ho\nnj ca\nnas r\nmesmer ised\nmer tesacker\nlu ce\nj illi\nim mobile\nde commissioning\nbo ta\n] ...\nvo j\ntibet an\nsponsor ships\nsp ad\nroger scup\nre filled\npune eth\nolivier awards\nnether land\nn whl\nkil kenny\nkedar nath\nkap a\nha shem\nfollow train\neth yl\ndar my\ncr ps\nbay ard\nwre tch\nw mag\nsuper girl\nsu an\nprece ding\nni uk\nmulti faceted\nmali ka\ninsp i\nfr b\nemble matic\ncap uto\nbur ren\nxim en\nul ta\nsmo key\nsi zable\nremain ers\nmesu to\nmen zel\nmc daniels\nis kandar\nfuel cell\nfron ds\nbu xton\nari ba\namericas cup\nam iz\nðŁĴ ²\nx is\nur chins\nsur fl\nsn p\nsee it\nor ra\nnf örde\nlat ex\nkre m\nir v\nhel der\nfore t\necker nförde\ndrum heads\ncar nal\nðŁİŁ ï¸ı\nwhati f\nvas ili\nsuccu bus\ns wales\nret ford\nmon di\nma ina\nlun ge\nla shed\nindie wire\ngla sper\nfresh eyes\nforec ourt\nfan k\ndon n\ndisturb ances\ndenomin ations\nboy ish\narav ind\n( âĤ¬\n⼠Ķï¸ı\nwhe elie\nu plands\nscru ises\npet s\nme chat\nmac am\nlike mike\nlgbt qi\njo li\nido sis\niat se\nhe di\ner oo\neamad den\nê¹Ģ ìŀ¬\nste ered\nrh s\npop sugar\nn ape\nmun nar\nling field\nleban on\nlan te\nkend ricks\njelly bean\nigh ton\nho dder\ngor ky\ngive sback\ndayin wa\ncor tic\nc caa\nbuzz ards\nar awa\naaron rodgers\nãģĵ ãĤĮ\nyearsof onedirection\nwood wind\ntrue to\nsal inity\nre sin\npl ural\nnor cal\nliz quen\nkay ne\ngu rion\ngi org\ngallo ps\nconti go\nchil de\ncar issa\nye oh\nwin ky\nw nu\nson parade\nshow case\nsho walter\nru ston\nnicolas maduro\nnewarri val\nmonster mile\nkumar an\nkad ri\njim cramer\ngu lab\ngravity falls\ng chq\nesper ance\ncur lers\nchamin ade\nbrad field\ntravelchat sa\ntor rens\nrh swis\nree se\nmal vi\nlof ton\nlaw firm\nkp cc\nit ab\nfer i\nel lum\ndiversity and\ncounter point\nchrishem sworth\nchaplain cy\nbiz journal\nbi sp\nbi elsa\nat cha\nassur ances\nak ay\naer lingus\nya yoi\nsode xo\nreme ber\nord nance\nor ation\nlin donesia\njo sey\nhast ily\ngo pin\nfan atic\nel oun\ndepend encies\ncomp ounding\naz aki\nal wefaq\nðŁĺī ðŁijį\nðŁį Ĩ\nvenkai ah\nstimul ated\npp act\npmr outine\npapp ar\nmel oni\nmc gur\nj itters\nit sc\nharsh ly\nham ish\nel ca\ndece mber\nde wy\ncopper field\nbha kt\nbe more\napple seed\nall yn\naby smal\nðŁĺħ ðŁĺħ\nys sen\ntu q\nto ei\nthor ax\nse din\nsar cast\npo way\nor se\njan asena\ncityo flondon\ncat lin\ncar lie\nbie bs\nbc fc\nap y\n[ !!!]\n:- )))\ntrav elling\nraun chy\npim ped\nkat ja\nju tland\nh pl\nfirst day\ncrew life\ncolla bo\nche ong\nche chen\nbl ink\nbernab éu\nban c\nwin x\nur gent\ntul u\nsof c\nrepri ses\npe pin\noptimis ing\ngau chos\ncom bo\nchang wat\nbo ca\nb dm\naudi sport\nðŁįĢ ðŁįĢ\né« ĺ\nwhite house\nsav in\nr so\np bo\nk de\nilli brand\ng sr\nconver ging\nconduc tion\nadequ acy\nab ane\nwood all\ntha ic\ntant alizing\nsoren to\nsatis fies\nrush theband\nrhyth m\nner c\nma ilers\njin hwan\nexem plar\nen acting\ndar r\nd ars\nball o\nagr itech\nðŁĺı ðŁijĮ\nwide body\nu ow\ntur ley\nsab u\nred waver\nperse us\nout do\nnam c\nmm el\nlas z\nkne cht\ninterne tradio\nhaw kn\ney fs\ndur bar\naegy o\n. -.\nw awa\nvenkaiah naidu\nsure fire\nstone walluk\nru slan\nroyal enfield\npollu te\nnatur alization\nmo oning\nli otta\niow ac\nhe yer\neli ver\ndon th\ncal ma\nbri anne\nam ission\naction news\nvish war\ntreach ery\ntalk back\nsav chenko\nri pon\npur vis\nno e\nmne monic\nkol kat\nk oni\njohnny cash\njam el\ngall i\nfer nie\nextr alife\neeee eats\ndom ani\ndann er\ncy b\nbel fry\nðŁİ ¿\nzil djian\nyam aham\ntur lock\nto play\nsi sa\nrho c\npassiv haus\nparatro oper\nju ara\ninsectic ide\nfat boy\nbrigh ouse\nbe cket\nao e\nwel lian\ntim tebow\nthegirl gang\nsu c\nsto watch\nsp iti\nocta vi\njen g\njac aranda\nimprovis ing\nhoo doo\ngry phons\nfri t\nbe ane\nðŁ¤ Ĵ\nyo ka\nwo gan\nwitha view\nun controlled\ntw oman\nti z\nthereal taraji\nrams bottom\nra bles\npen ce\npe per\nmi hal\nman ti\nmal to\nja u\nig ar\nice service\nhosse in\ngen italia\ng age\nfascin ator\nbaz os\nabyss rium\nwe bex\nviole tta\nune lected\nun ashamed\nsor row\nram akrishna\npe f\npay a\nna ev\nmor gon\nl th\nj iri\nf sp\nethnic ities\nelle magazine\nco leg\nali bab\nëª ¨\n⾨ ðŁİĤ\nup fronts\nstoner nation\nstack house\nretali ate\nram apo\npreity zinta\nosc illo\nn pc\ninstam ood\nin ck\nhun ks\nhi b\nfluor ite\ndisc losing\nbr g\nappropri ated\namé rica\ny pe\nway anad\nvi ñ\nv le\ntrin kets\nto to\nsyn bio\nstru th\nse wed\nr ce\npain killer\nnight mare\nloan ee\nimplic ation\nguer in\nfi i\ndeb out\ndal le\nclut tering\nastra zen\nas saf\nafric ana\n# ##\nðŁĩ¨ðŁĩ ³\n⤠µï¸ı\ntex turing\nsteel workers\nstar man\nson n\nscho on\nroo de\nnit in\nmi ah\ninten ding\nhappen in\nhali m\ngun fight\nge ffen\nde pot\nche tt\nam sa\nðŁ¤£ ðŁĺĤ\nyess ssss\nsha ina\nscen e\nsb spop\nrol lin\npenand ink\nour n\nok ami\nmer cure\nme thu\nmari ya\nen closures\ndmn takeover\nathle ta\naggreg ator\nwash out\nsunday sunsets\nre watched\nnr cs\nma shi\nlynd sey\nk adam\nik ka\ni sen\ngc n\nfl un\nent wi\ndiscipl in\nantic a\n. _\nðŁĸ¤ ðŁĴĽ\nvit is\nur laub\ntrans at\ntra inee\ntom petty\nthe powerof\nnext generation\nmo is\nmac er\nliam gallagher\nlev elling\nk aga\nint ell\ngh ard\ndol man\ncu ten\ncla ves\ncam ill\nbur well\nag ia\naccu sers\nà´ ķ\nzak k\nyan cey\nwi jaya\nw rest\nven ables\nte sonline\nsha z\nse gal\nri r\npin us\nphone tic\nnor s\nnatgeo wild\nle asure\nhi an\nham mar\ngoo gl\nga den\nel che\ncab ot\nbu lova\nbah n\nan agram\nagency life\nðŁĺ« ðŁĺ«\nu ña\ntro wel\ntam im\nse me\npap u\nmfab oston\nmarin as\nha de\nevapor ation\ncom miser\nbor sch\nbor ja\nyo del\ntoho ku\nssi ve\nnew marke\nmine head\nmar wan\nmal ari\nm mb\nkor fball\nim part\nhedger ow\nhe uri\ngab bar\nelpas o\ne wu\ncour chevel\ncol qu\nchar ol\nbuzz word\nab vp\nvisual novel\ntac s\nsan ghi\nph all\nper kin\nop hia\nmexican food\nmath ilde\nli do\nhar grove\ngor abbit\nfun house\nenvir on\ne der\nde sen\nconfi dant\nb ya\nay k\nant ina\nan anth\nภ®\n ¦\nyang tze\ntagli atelle\nsr w\nsor ley\nsk ellington\nsever in\ns oooo\nmo ku\nmar ri\niphon ex\ninvo kes\nguil len\nget to\nenti rl\nen cel\ne bro\ndigg ity\ncr itch\nci morelli\nðŁĴľ ðŁĴĽ\nyo ho\nsu deep\nso cool\nsine k\nsee ker\nroy soc\nro ps\nre mington\nre lo\npaul walker\node tte\nmartine z\nlec ture\nlaban pilipinas\nken z\nhibern ating\nflag pole\nfight club\nfer nan\nab ack\ntam iya\nstone hill\nstin k\nsell ing\nre treated\npig tails\npe eler\npar ten\nn ku\nloaf ing\nko vo\ni sie\nferr aris\ncdne con\nc ti\nbi le\nber cow\nbar ing\naugh n\nace res\nter se\nsten de\nrizzoli andisles\nri son\nrav iteja\nph q\nlo ews\njaw ad\ngim me\nfridaysfor future\ncal cite\nby line\nz aya\nwest mont\nv ce\ntt ac\nt ø\nsuper show\nstel ena\nscape goat\nmesuto zil\nmer s\nlivel ove\ng end\ng ann\nfun kad\nevan cho\nconver sing\nak uma\nðŁĴ¤ ðŁĴ¤\nwh itten\nti gnes\nskysports news\nsex press\nrum maging\nov ary\nmu v\nma homies\nha chette\ngi gging\ngi gg\nfel ting\ncon vivi\nblo or\nacoun cil\nಠĹ\nÚ© ا\nz ner\nsc w\nrose mary\nrhswis ley\nrabin dranath\npolari zing\nmel atonin\nlen nie\nleed sr\nke zia\ninfan try\nhe k\ngen nady\ney oung\nchange theworld\nbu te\nbay bay\nassemb les\nðŁ¤ ¢\nwise words\nwe ws\nwas aga\nsw v\nrun k\npul s\nmon iker\nmer o\nhur ried\ngarden ersworld\nfrisky friday\nev b\ncn c\nc mv\nc ati\nactionnews jax\nw st\nshot guns\nscottish labour\nsau stin\nnew single\nmerr ill\nma jer\nkitesur f\nimpecc ably\ngrand fathers\ngo bi\nglu ta\nfe moral\nfa thered\ne sports\ncre spo\nbhagw at\nau coin\naram irez\nang u\nafter care\nw aca\ntrac eable\nsav oring\npurple reign\npas qual\nmay ans\nmaidu guri\nli ens\nim t\nful bright\nf ram\ndomin atrix\nbe my\nai ww\nwal sall\nw res\nti ri\nti ed\nsch engen\nreasons why\nluxury life\nle pore\nkn itters\nhe k\nbibliote ca\nbene factor\nbedazz led\nbbc three\nad g\nðŁĴĻðŁĴĻ ðŁĴĻðŁĴĻ\nsi stas\nsch alk\nroch mn\nr pu\npic ton\npaper weight\nover se\nmat zo\nmasi h\ngwali or\ngau r\nfootball manager\nflin toff\nfitz ro\ndal and\ncrescen do\nbow ery\nateli er\nark ana\nantetokoun mpo\nws fa\nwi zz\nst angs\nro v\npoo kie\nparid hi\nmy lo\nitu ne\nhu ed\ngorabbit ohs\nfred do\ned ical\ndj mag\nbeacon sfield\n( >\nz ep\nwab bit\nu om\nstu bb\nstap o\nsingular ity\np gp\nnehemi ah\nmusic education\nho key\ngun nison\nfri zzy\nfeed ly\nchap man\nch alo\nbien nal\nbelaru sian\naga ins\n> "\nì¹ ľ\nton gan\nth ais\nstor me\nseque stration\ns fra\npsycho active\nol ph\nmi dat\nmarc jacobs\nmar ini\nm ellen\nlayo ff\nkan chi\nhi hihi\ngul zar\nequ us\ncan va\nbellar mine\nbad minton\nanag rams\nðŁķ ĺ\nç ©\nvalenci acf\ntanger ang\nss ociety\nshaw shank\nsche rer\nsc ity\nred v\nra whide\npetr us\nod as\nnsc aa\nman am\nlock yer\nlar ams\nkiri shima\nim petus\ngu lag\nfrench gp\ncu bano\nbil lo\naw in\nasser tion\ntre f\nthe expanse\nraisethe wage\no smo\nmelancho lic\nluci an\nkoo pa\ncor relate\ncolourpop co\nc zer\nbis ky\nbeck with\nall ga\nal ang\nðŁij¶ ðŁı¼\nwhydont wemusic\nunfor giving\nstr ath\nsell in\nron paul\nri sm\nqu ino\nmusic day\nmat ata\nlegion of\nheat nation\ngro ats\nfawad chaudhry\nebit da\nchriscor nell\nadam awa\nาภĩ\nz n\nwaq ar\nvel e\ntreat yourself\nso cratic\npie tro\nnet suite\nleon ards\nlam bert\nkyrgy z\nk cb\nike ji\nhe f\ngfx coach\nfat tah\nfashion blog\nchi story\nb sk\nðŁĺľ ðŁĺľ\nv lm\nshaw cross\nplo p\npixel s\nindy star\nin compatible\nhome brewing\nfri eda\ndun gare\nconsumm ate\ncha eyoung\nbrow ski\nare llano\nar sh\nanni es\n- _\nðŁı½ âĢįâĻĤï¸ı\nteddy bear\nhumane society\ngeo graphers\nfor sake\nde cap\ncom plying\ncol onists\ncar ay\nbu is\nðŁij¶ ðŁı»\nveer am\ntra jan\nto ch\nshyam alan\nri ki\npre neur\npin wheel\nper v\no sei\nits not\niiii ii\nhydro logy\nharam bee\ngossi ping\nfix in\nec mo\nbe art\nar x\nagra wal\nãĥ §\nunivers itas\ntremb lant\nto saurus\nshin ki\nsci oto\nom itted\nmy asu\nlou ghton\nhypo thermia\nee as\ncre mated\naz ale\nas as\n!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!\nwi po\nsuffer ings\nro dr\nnouri shes\nnoban nowall\nme irion\nkle ine\nkan aan\nho ek\nform entera\neng vaus\nck c\nceline dion\nber sih\nae us\na hotels\nz ke\nsch im\npoo dles\npo sible\non ted\nmeri jaan\nluke evans\nlor re\nli ber\nili pp\nher nan\nhaw kesbury\neugen ics\nbates motel\nassam ese\nwin denergy\nver tic\nth aus\nstan field\nperu ana\nnew ick\ngeorge takei\ng mp\nfer me\ndis su\nday mond\ncha el\ncer ia\nai shu\nĤâĸĤâĸĤâĸĤâĸ ĤâĸĤâĸĤâĸĤâĸ\nðŁĴĥ ðŁı¾\nun specified\ntor ry\nsp ousal\nsapol iceservice\nre funded\np andy\nmaster sof\nmadel ine\nm rd\njulian assange\ngon u\ndep ended\ndelmar va\nde commissioned\nde activated\ncom usic\nbir fday\nance day\nalber tsons\nal man\na etna\nyas min\nwhoo pie\nvidy ut\ntv land\ntoo led\nsutton nick\npro mon\nnudi branch\nlm g\nkh ans\njac inda\nheterogene ous\ne zio\ncom pass\ncalibr ated\nbio logics\nben j\nback channel\nv aya\ntra yvon\nsuffe rer\nsnow white\nscre amin\npledge music\npalad ins\nmo va\nm mo\nlan k\nkr rish\ncd ns\nbrown s\nbah nhof\nbabylon ian\nb á\nath ia\narm oury\nad ou\nabo lishing\n== =>\nth us\nquen ching\nproud mom\npre phoo\npheno type\npar atha\nmonte iro\nex hal\nevalu ates\ndrop the\nashi on\nall my\nðŁĴ Ĥ\nyou m\nwriters community\ntye ight\ntren to\nstu bs\nsouthea stasia\nsome place\nper using\npepsi ipl\nno ggin\nmc curry\ngustaf son\nfon si\nchri sy\nar peg\nabram ovich\n... ðŁĺį\nâŃIJ âŃIJ\nuni for\nu af\ntap ings\ntank ard\nsn cf\nsmall town\nsid mouth\nse ta\nrosen baum\nrc f\npay sage\noo th\nmer v\nkit o\nka ito\njewish press\ngo bolts\nfen way\nfc bb\nclu stered\ncap lan\nbo ater\nbeur re\nbar nyard\nanti viral\nz uri\nthorough breds\nsuper boy\npha ges\npar ibas\nour team\nol denburg\nmccas kill\nky ga\nku la\nkk city\njo jos\ngirlswho code\nfar cry\nda ren\nclon mel\nar ci\nalo y\n> .>\nðŁĺį ðŁĴĺ\nviron ment\nul s\nu ssa\nrun ny\nriv ington\npp u\nover worked\nloc i\nis si\ngradi ents\ngol i\ngo eags\ngla iz\ncsul b\ncn l\nash field\nam k\nab ject\nðŁIJ ª\nyou thin\ntable lands\nta de\nsewer age\nsau sal\nro la\npy rite\npalm dale\nmur doch\nlove capetown\nka unas\nhur l\ngib ber\nge stal\nfu mbles\neu banks\ndown tempo\ndae bak\ncra ves\ncal stampeders\ncaber net\nbe yourself\nbay field\nval ken\ntow ner\nterri ble\nsyrian refugees\nsun lit\nsplen did\nsaf b\nrapha elite\npseudon ym\np mp\nnight light\nlo rele\nkiran ks\nin off\nhorror movie\ngr und\ngilli vray\ncol son\ncas well\nbu mba\nØŃ Ùħ\nver batim\nshe h\nscu le\nregime change\nr cd\npla id\nos sett\nmobil isation\nmel d\nmarcel a\nleg day\nick ness\nfo lic\nfarm bureau\nf hc\ndee pp\ncli ft\ncla dies\nbu gged\nadel phia\nshel p\nok av\nnav ami\nmclou ghlin\nfemal eartist\ned r\ne juice\ndissec ted\ndin er\nclean ing\nx tra\nwe tt\nwa ii\nw vb\nvi ana\nve das\ntal le\nstat er\nsale en\nsa iler\ns do\nonas sis\no der\nnitish kumar\nnew garden\nlea ke\nho kie\nh ds\nge w\nfu qua\ndor g\nchlorophy ll\nbrain y\nai bo\nâľį ï¸ı\nâĸĶ âĸĶ\n๠ĭ\nvenezuel ans\nteren gganu\nsyl lab\nsling ers\nshar pe\nsan ce\nre es\nmor k\nmill man\nmick le\nlo ser\njor dyn\nhorse shoes\ngr ath\ndre cht\ndar ley\nbow en\nar beit\naero drome\naditi rao\nðŁĻĮðŁı½ ðŁĻĮðŁı½\n® .\nw dr\nvoll mer\nvis sa\nvermic elli\nv ÃŃ\nun de\nson nen\npo da\nmd wx\nky an\nkilo grams\nj ko\ngran tees\ngin ter\nfor acause\nen coded\nela er\nel sen\nchristma sparty\nalk maar\nоР²\nwed ged\nwar crimes\nwa ja\nvirgin atlantic\nsu bro\nstabili zing\nsc ab\nru f\nolivi a\nmedi o\nmc iner\nje ka\nim onday\nho va\nhier ro\ngrey hound\ngreat day\ngibb ous\ngay travel\nfootsc ray\nfar had\nalon te\nyour say\ntri state\nthe box\nsed don\nsb f\nre sol\nop als\nnay sayers\nmcco wn\nm atia\njab ber\ngg c\nft ar\nfr anti\nf ndn\ness endon\nelyn n\nat it\nthe on\nsom m\nshare mondays\npolish girl\npic ka\npi ped\np mu\nnave en\nmus ch\nlal it\nhollywood bowl\nfow ler\nd ga\ncor on\ncar leton\nbrow ne\nb blf\nas ante\nwr n\nvol ker\nsyste ms\nstate park\nseduc ing\nsan de\nrow lands\nriz wan\npakhtun khwa\nkri st\nka sia\nhudder s\nfrac turing\nf yn\nesmol lett\ndc b\nbrisbane broncos\nbecer ra\nak ir\nðŁĩ ³\ní ĸ\nÚ© ر\nvil les\nresponsi veness\nrain maker\npig skin\nmarti ans\nmariu pol\nh wc\nge h\ngar ra\nfre ire\nflight less\ndi biase\nðŁİĦðŁİĦ ðŁİĦ\nwwww wwww\nti pu\nti amat\nsucces ful\nshi seido\nnas akennedy\nmu x\nmu swell\nmethyl ation\nlive from\nli est\nlavin ia\njes u\nglynde bourne\ng atti\nfro thy\ncoinci dences\nbou lud\nbizar rely\nber nad\navel ino\nast enders\nÌ µ\nv sa\nun finished\nsoci ologist\nseaf arer\npoly glo\npa chi\nki as\nke th\nkarthi k\njac qui\nha ik\ng cl\nferr aro\ncornu copia\nbrock port\narte fact\naj ah\ntrun dle\nsteu ben\np gi\nopportuni st\nmussel burgh\nmat ar\ninnu endo\nhawk man\nh under\nfigu arts\ney ama\nexter nally\ndun gy\ndebu tante\ncon sol\nchand ni\nbin d\nau den\nak ari\naf ood\nãĤ Ĥ\nyu mmmm\nyellow fin\nvolley ball\nto gs\nsidi be\nnür burgring\nnewor der\nlen ient\nlar imer\njustanother dayinwa\nill aries\nhamid mir\nfine gael\nbri enne\nblog tour\nbe ter\nbar to\nard elli\nyotu bazos\ntah itian\nspit als\nsin sider\nsee ing\nparisi en\nover hauled\nop lan\nmic kie\nlong shot\nla pierre\nhoag ie\nheel ziggler\ngi les\nge to\nfossili zed\neu g\ndi ot\nbhar ath\nðŁĺ±ðŁĺ± ðŁĺ±ðŁĺ±\nðŁ¥ ķ\nä¸ ī\nstill man\nredchilli es\npan sies\nnewh orizons\nmouth wash\nmi shaps\nmad dux\nlincoln center\nju mble\nhere for\ndr illers\ncongr at\nchi bi\ncharlese sten\nbreak water\nbig dog\naro se\nviv ant\nrac quetball\npu ffing\nplei ades\npar di\nnar gis\nmichael phelps\nlec ce\nhas sen\nescuch ando\ndun garvan\ndou ce\nde ff\ncy sts\na vide\n⬠ħ\ntr anger\nthe west\nsuri gao\nsn sw\nre touch\nre smi\nr mnp\npeaky blinders\nmu bar\nmi gs\nmi glia\nmerc ado\nkoo ks\ninu yasha\nfirec rackers\ndebau chery\ncress well\ncat suit\ncast a\naim i\ny ne\nv q\nunfa thom\nsp ind\nsi sta\nshay la\ns ago\none minute\nnu ka\nn aki\nleomin ster\nju iced\ninstitu to\nhi ja\ndas a\nco so\nchan ia\ncav anagh\nbe amish\natay ulu\napplic ator\ny v\nvar ane\nuni dos\ntarte cosmetics\nswin dle\nsli eve\nrun disney\nren da\nper ly\np ft\nor gullo\non lookers\nnotal one\njet team\nh spa\ngu ic\nfox boro\nexoske leton\nearth worm\ndas co\ncu ppy\ncro quettes\nbrook dale\nbo lo\nb ht\nav ac\nz sbp\ny alla\nvou ch\nsmo or\nrak shab\npush back\npardon ed\nnews watch\nic ma\ngod se\neu stace\ner aces\ncaesar spalace\nby city\nbun ga\nbu oys\nal iso\nðŁĺĪ ðŁĺĪ\nðŁ¥ĩ ðŁ¥ĩ\nun assuming\nstudi os\np md\nmcclu skey\nkq ed\nhol len\nflash cards\nfinal y\nfam erica\nf ds\ncre dence\ncommonwealth games\nbuilt by\nbri xton\nbar bac\nago v\nå Ł\nà¸Ńภ¡\nyo gini\nwing stop\nvirtu alastro\nstonebwo yb\nstatu ette\nsc ad\nsan juan\nplo sone\npe ga\nop ah\no id\ndg m\ncir rho\ncharm ander\nbur rard\nanti gen\naless andro\nðŁĴĥ ðŁı¾\nwest papua\nw fm\nu mentary\nu fm\nthereal stanlee\nthereal pcb\ntham endment\nt fp\nsteep er\nraff ling\nnicolescher zy\nmaxim ising\nlist ers\nkn c\nke tu\nh itech\ngymna stic\ngoo oooooooo\ndra gic\nde caf\ncor dero\naster ix\naf at\nvisu alizations\nv uk\nsadh guru\nrais ers\npar thi\non ah\noc at\nnav rat\nn pcs\nminu tos\nkin tyre\nfun dy\nextinction rebellion\nbroad side\nbro iled\nbrid port\naard man\nze id\nsun sport\nsle igh\nsg v\nse on\nran ching\nour e\nol p\nmi stress\nmi ff\nme hr\nlym ington\nknowledge ispower\nine ke\ng dl\ncro ker\ncoom bes\ncenta uri\nber ber\nann alise\naditirao hydari\nto pp\nsk r\nsi do\nsch ef\nross dale\nredwaver ising\nq as\nprinces scruises\npap ier\nol v\nmohe gan\nlevit icus\ndun stan\nci e\ncav uto\nðŁĺį ðŁĻĪ\nw mu\nst pat\nsd lp\nsamsun gg\npu tters\npaper cut\nous er\nma sin\nkla us\njohn sen\nfictional death\nexplore archives\nesc on\nedel stein\ndig beth\nchair men\nch ert\ncan elo\ncali entes\nbath rugby\nasvpx rocky\nash mi\nas sed\nys d\ny aqu\nun seat\nun detected\ntwee dle\nstyle z\nsolidi fy\nskull candy\ns loot\nren ss\nmy y\ngive away\nfreu dian\nfluid ity\nfix ie\ndi ren\nde ers\ndani ele\nd ta\nbry de\nbla kes\nben ji\nun boxed\nthir sk\nsi phon\nra val\npark uk\nmoham mad\nmish and\nmajor a\nindist inguishable\ninbetween ers\nimmigr ated\ni watch\nfro d\nfav reau\ndigital media\ncra bb\nconvin ces\nbb age\naerop ress\nwor dy\nthel im\npil af\npand a\nmcla in\nlieb herr\nher me\nhart land\ngrou puk\ne wc\ncompli menting\nchur ra\nbl unt\nbhand ari\nandre wr\nãģ ķ\nwar paint\ntu tto\ntom ball\nspur t\nrescu er\nrein hold\npump rules\nmuscle cars\njo chen\nhar py\ngowan us\ng hai\nen uf\neli an\ncounsell ors\ncarcas sonne\naf ters\n// /\nâĿ¤ï¸ı !\nâĢĵâĢĵ âĢĵâĢĵ\nshoo tin\nqui pe\nn inger\nmy girl\nkof a\nh ach\nfer ris\ndy l\nchoic efandom\nus open\nugh h\nsnet terton\nsi as\ns mat\nracon teur\nr iting\npar roto\none u\nof saa\nk ich\nk agu\ni voted\ngai den\ndog training\ndis sement\nconcor d\ncolor ing\ncareer advice\nat ori\naro tti\nwoo w\nvotekathryn fpp\nun requited\nuc sd\nthir tyeight\ntan ka\nsti pp\nsear chers\nschar les\nsandr ingham\nsac o\nmen sbball\njun ko\nj ho\nfang oria\ndjash ba\nchip set\ncap tives\nbiom aterials\nback ing\nambro sia\nald ous\nãģ Į\nâĿĦ âĿĦ\nwim borne\ntr icking\ntl ds\nq azi\nmelbourne cup\nlord ship\nk loss\ninti fada\ngate au\nf ss\nedmun d\ndebat able\ncivil war\ncast leton\nbb els\nè° ·\nãĤ ®\ntwi zz\ntere rs\nsle aford\nshar mar\nru es\nran gra\npro state\nporti shead\npe ga\noz una\nmad hav\nino id\nhappy anniversary\ne tten\ndemoneti zation\ncryo therapy\ncorru pts\nbre mbo\nban us\napp are\naphrodi siac\nal pe\nade t\nvisi o\ntail wind\nsteeler snation\nsom ers\nrtr naps\nra si\npilip ino\no poty\nmontag u\nmerri on\nlv mh\nlec ter\nkan chan\nfabol ous\nda ad\ncb g\nbulbas aur\n# ,\nðŁİĦ ðŁİĦ\nâĿ¤ï¸ı ðŁĶ¥\nâĻ¥ _\ntit os\nthe spi\nre schedule\npin o\nparroto td\nmy k\nme athe\njou sting\nhockey hallfame\nhcp ss\nguys ss\ngri gor\ndat adri\ndan o\ndam son\naren dt\naero postale\na jan\nðŁĶ´ #\nt ars\nsh ola\nse vier\npiero gi\npe ma\nin undated\nheck ler\ngu ignon\nescap ade\nem mitt\ndebun ks\nann nn\ny ve\nwilliams racing\nshack led\nrn as\nreyn ard\nper ros\npar fu\nor op\nnurser y\nnol te\nmac as\nj inj\nd áil\nciti bank\nchocolate y\ncbs sportsnet\nbott i\nðŁĩµðŁĩ Ń\ntrot sky\ntre view\nthe big\nshoe less\ns brewing\nquar rel\np ellic\nlongh orn\njou bert\njo yof\nill is\ngeorge harrison\ng win\ncomp il\ncamp agne\nbeth page\nb gr\ní İ\nzzzz zz\nty pic\nsarcopha gus\npre nd\nmol inari\nlynn wood\nluci c\nhouse party\nharbha jan\nhall yday\ngram pa\ngos ford\ngator nation\nendangered species\ndi ke\ncs v\ncomp action\nclemen cy\nca iro\nc tures\nðŁĴķ ðŁİī\nv ra\nus ag\nse gw\nnh v\nnegoti ators\nmer yl\nlong island\nlgb thm\nirrig ated\nintellig ently\nhumay un\nhar row\nhar dik\ngul bis\ngera ghty\nfusel age\nclassi est\ncharlotte gshore\nbar tram\nban ts\nap lin\nantiqu arian\nall ank\nab harat\n!! âĿ¤ï¸ı\nâĨĴ @\nsky new\nserv itude\nri mb\nra pa\nport is\non ya\nneed ling\nmagno li\nkath arina\neco was\nbru lee\nbro o\nany on\nanti microbi\naller gen\nwham mer\nwestern bulldogs\nstar key\nspar ty\nrheu matology\nren dell\nph un\np out\nmy o\nlo ol\nki yoko\nicy cles\nhi sham\ngener ale\ngag non\nfitness model\ndev ries\ncon descending\nchristian sen\ncassi opeia\nbi gart\naf remo\nðŁĺĤðŁĺĤ @\ntake back\nstimul ant\nsiri sh\nsilic ate\nrh cp\nprisc illa\nport ation\npic kings\nph ering\nmu ppet\nmo tu\nlost boy\nliveli fe\nin ordin\ngrind house\ncol bert\nch onews\n!! :\nãĥ į\nâĿĦï¸ı âĽĦï¸ı\nzu mb\nww u\nvi bram\ntra verse\nsqu atters\nsandy hook\nsaf f\noper able\niraq is\ninstru cts\nhotb ed\nfinger less\nen ame\ncul ling\ncla wed\ncam is\nbe que\nback splash\napocaly p\nĿ ¼\nsand burg\nresi a\nrepul sive\nqueen su\nperse polis\nom ag\nn elli\nminor ity\nme sen\nli sp\nla ku\nhor seri\nha im\nextre m\nd mt\nam am\nðŁ¤Ĺ ðŁ¤Ĺ\nzachary levi\nwis bech\nut f\nrule book\nmel on\nko on\nkh oo\nk ame\njj watt\nimit ates\nhe ine\nha vering\nelk horn\nco sproject\naldub big\n ¬\nwat auga\nqueen of\nphotoo f\nparaphra se\nmol oney\nmcve igh\nlap sed\nkim soohyun\nker o\njennifer winget\njason derulo\ngo goi\nfish net\nfest us\ne tam\nden i\nbe eld\nðŁĶ Ń\nðŁıĨðŁıĨ ðŁıĨðŁıĨ\nt mm\nshar ps\nrichardd awkins\nrev d\nrag doll\nnorth port\ni was\ngw ent\ndun away\nduff mckagan\nbr f\nas pi\nacon gress\nwar head\nw mc\nv sb\ntec tonics\nta ki\nste pin\nslo b\nre at\nram m\nrace forlife\nperma frost\nni kova\nnew age\nnb cc\nk hair\ncy pres\ncollege bound\nbungal ows\nbrain health\nbad rin\nà¸Ńภ¢\ntu h\nstreet scape\nsnick er\nshoe string\nseacoast online\nscar l\nred neck\npu ddin\npost war\nnormal cy\nmobi us\nman airport\nl hs\nkrati ka\nin el\nhom mage\nhar uki\ng wr\nfas d\nend poverty\nem path\nctv news\ncho wski\nagu stus\nac aci\nâľį ðŁı»\ntad poles\nsw ane\nst man\nsher rod\nscot ties\npy m\noster ia\nned bank\nma ar\nleon idas\nla ssi\njeze bel\nje h\ninform ations\nfeliz lunes\ncommu tes\nci stern\nbo car\nblack er\nakin dele\nah oops\nðŁĴĻ ⾨\nÎ ¼\nway finding\nw oun\ntend ons\nswi ping\nsmi thy\nside kicks\nred start\nra ith\npt w\npre requisite\nn ti\nmitt el\nkw k\nhand maid\nfren s\nboo hoo\nbal ti\narte sian\nammon ite\nðŁĴIJ ðŁĴIJ\nz ena\nwarr nam\nval do\ntu pper\nshot show\nru mbo\npoe sia\nn ha\nmp loyed\nlion pride\nl tg\nkaiz er\ngru mble\nfin lay\nend lich\negre ts\necon dev\nchlo eg\nalo vel\nafi b\nü e\nzoo keeper\nwe believe\nvers al\nra ked\npoliti k\nom u\nn ff\nmu sky\nkath ak\njack kirby\nj ell\niron bridge\nin ab\nil se\nil f\nen suite\nde ira\nchange the\nblah nik\nbin ny\nauthor itarianism\nadd ario\nab do\nwildlife crime\nun productive\nthe shelf\nsou mya\nsoleno id\nre surface\npro geny\nout fitted\nne mann\nlam o\ninnov ative\ng do\nforest of\nfam e\nam ars\nadmir al\nðŁĩ·ðŁĩ ¸\nwear orange\nutr gv\nt mann\nstur t\nsm ita\nsit coms\nsit ara\nshani atwain\nrangasthal am\npe dition\nlo ggins\nlife hacks\nlan sky\nit sli\ninfo tainment\nhol lander\ngo wer\ng mat\nfore casters\nd ack\nabre ast\na if\nâľ §\nwester ville\ntheat reco\nste yer\nsp ite\nsam ad\nra sk\nple bis\np vam\nlar ne\nkoo t\nkill joys\nig ital\nent z\nðŁĺŃ ðŁĴĻ\nworld juniors\nstre aking\ns worthy\ns les\ns du\nread venture\nprabhu pada\npan elling\nnat ick\nli anne\ngre cian\ncondomin iums\ncam as\nbur dock\nbe m\nðŁİ Ĵ\nìĨ Į\nâĻ łï¸ı\nwri gley\nvan adium\nthe dead\nsti val\nsteve z\nsh ink\nsaint john\nren ae\npres su\np anned\nmat tw\nju ssi\nhill song\nharrison burg\nexagger ating\ncrum pets\nash leigh\napha sia\nach il\n___ ^\nwb pictures\nvalentine sday\nun godly\nru mble\nric he\npun x\npren der\npet shopboys\nmp ong\nliqu ors\nlion fish\nka hani\njan esville\nhom icides\ngar yline\nfla pping\nfive thirtyeight\nempor io\necker t\nbo hm\ntab ul\nt storm\nsw l\nstarmagic phils\nsound city\nsof tail\nso i\nsheffiel duni\nre joins\nperform ing\noh my\nmari anne\nlan yards\njan oski\nab original\n⾨⾨ ⾨⾨\nus ask\nte tons\nspani ards\nsk elli\nshop aholic\npost box\npoly propylene\nor mond\nlau der\nlast man\nkr k\nf art\neli k\ndo ff\ncli m\ncat life\ncas sy\naf ta\nwhol eness\nwer un\ntiffany young\nthai food\nriot fest\nre starting\npill ay\nlor rie\nle do\ninf antino\nbi fur\nali gn\nac el\n( +)\nðŁĶª ðŁĶª\nwe hr\nste ppe\nstat on\nsi ed\nsher wood\npic ar\npalom ino\nmp w\nme her\nmack y\nlati sm\nhome wares\nfre und\nfin ner\nfalse hood\nero ses\ner ster\nencapsul ated\nen tra\nec am\nbrown stone\nbrain tu\nbed and\nband b\nbal ven\nðŁĺª ðŁĺª\nveri fying\nsto sur\nsp leen\nscoun ty\nready tor\npe aty\npan tages\npal it\nmuseum selfie\nmilit arized\nly le\nll sif\ngr annies\ngaryline ker\ned g\nber ne\nw engen\ntoy in\ntin en\nsky view\nr mc\nn oooooo\nlib spill\nleyton stone\njama is\nimper man\nim min\nhall yu\ngal es\nf si\nde ye\nbra id\nber ths\nbar z\nbake house\nb ttf\nav illa\nðŁ¦ Ĭ\nwizar do\nthegreat khalid\nsouth ie\npur ging\np ago\nmu mble\nmo co\nmand zukic\nkat v\njay araj\ngav inde\nfore hand\nel aide\ndistill eries\nani el\nali enable\nal cal\nak kar\nadvis able\nunil ag\nsial kot\nschro der\nsc or\npe ws\nnh p\nmon is\nmd anderson\nles bos\nkasab ian\nink l\nheart strings\nfreder ic\neh y\ndrop ship\nbian ca\nadhe sion\nvor one\ntumb lers\nt reading\npoly carbonate\npapadop oulos\non this\nmer cia\nludo gore\nkoo ky\nklu ber\nhe mato\ngar on\ndepo ts\ndan son\nbo seman\nac q\nðŁĺį ðŁĴŀ\nå Ĭ\nwomen leaders\nwi est\nokav ango\nmathemat ically\nmar isol\njack al\ngum by\nel az\ndu is\nbrown university\nbiaf rans\nban go\nwn cn\nw ily\nus m\num h\nthra wn\nsath yaraj\nricken backer\nprox ima\npor ches\nover seer\nmeri den\nma jum\nlt fc\nleg ge\nkir ke\nking z\nhar low\ncor nette\nbirthday y\nansw all\ntime zone\nsmart contracts\nsi do\nro day\nmendi ola\nhou ma\ngu ang\ngran dio\ndil aik\ncontradic ts\ncardi al\ncad rought\nbreakfast club\n* (\nâľ Ŀ\nâĺ ĥ\ntrin it\ntom ato\nsix ty\nrefu tes\nphant asy\nperpetu ate\nol c\nny cosmos\nneedle point\nmilan ese\ngoog leglass\ngold stone\nfle tt\nev ar\nde kh\ncas ings\nbic ic\nbi ddle\nat ay\nar z\nar rl\nä¾ ¡\nvirgin ian\nteam followback\nspan thers\nsiyak eram\nshu g\nprince sse\npo em\nmu ka\nmetro logy\nmajor crimes\nla res\nla byu\nki ffin\nkar o\nkah lil\ngay pride\ng app\nfire base\nevery town\ne su\ncust exp\naf faires\nðŁĴĶ ðŁĺŃ\nsec toral\nprod mgmt\nomni um\nlindsey stirling\nki pper\ngar rix\nfreel ance\nexplo res\nclimate emergency\nbu rak\nb com\nav eni\nair fix\nx jr\nwan ton\nun sw\ntur kiye\nteacher appreciationweek\nsar ay\npay ment\nparam us\nneuro degenerative\nkumar vishwas\ninter nets\nfri gi\ndy nia\ndid cot\nde formation\nasset store\nantibiotic resistance\nwa ver\nvel ocity\nted by\ntat tered\nsuz ette\nstom per\nsm outh\nrs g\nplant ings\nott olen\nmel low\nlife and\nlad bach\nkat es\ninfl ate\nhead in\nhe ung\nfr inges\nfood banks\ndepreci ation\nchipmun ks\nbro ski\nale ister\nac ito\nëĿ¼ ìĿ´\ntin ction\ntaf rica\nsau ro\nrio ters\nraila odinga\nqueu ed\nout stretched\none time\nni y\nleg olas\njun ky\nfo il\ndu as\ndah mer\ncell ent\nbull er\nbt posse\nas ket\nun cc\nsnow bird\nrhin oplasty\noro ad\nmala hide\nlu ma\nla four\nking wood\nkentucky weather\njun hoe\ninter planetary\nhar ada\nfla ppy\nek g\ndi fc\ncool pix\nchar ade\nbl ant\nvene zi\nsw m\nsen ko\nsamsungg alax\nrun yon\nparty poker\nparmigi ano\nmoder ators\nme ac\nlu sso\nlive chonews\nken nard\nig in\nh mo\nfren chart\nexxx otica\ndo err\n; )))\n" <\nðŁĺĺ ðŁĴĭ\nó s\nworm wood\nwith hold\nvell ore\nstan cia\nr ma\nphil ae\nmocking jay\nmag en\nluke cage\nkur d\nhearing loss\ngau ri\ne spor\nden ounced\nclean sed\ncay ce\ncash el\nboo ing\nathen aeum\nart station\nais dproud\na qi\nðŁĴľ @\nv liet\ntx s\ntamaram c\nspin ks\nsmall wood\nsi th\nsevere weather\nny sph\nmorning motivation\nfor lorn\ncar ino\nbul len\nb bott\nðŁĴ Ĵ\nste go\nsmith son\nres se\npar ise\nlevit ating\nhaw ick\ngo bert\nfl s\ncor ding\nbu ell\nbbce astenders\narctic monkeys\nangel us\nðŁĶ´âļªï¸ı ðŁĶµ\nwin stead\nvor acious\nup coming\ntn hs\nsof london\non me\no rec\nmunch kins\nli x\nkookab urra\nhyper car\nhe sh\ngow rie\ngen es\nfilm works\ndev illiers\ndaily deals\nco pilot\nbad gley\nalex andro\nagr arian\nworshi per\nvor tex\nup loader\ntribe chat\ntex ash\nsu che\nr dm\no possum\nhal ve\nfer mi\ne bt\nder on\nchee ky\nandre ss\nzin da\nyard ley\nwhit acre\nu os\ntwith aca\ntrophy hunting\nsy a\nspa ghet\npixels website\nox for\nnewbury port\nmier coles\nget ready\nflor in\nev ely\ncity con\nargent in\nåĭĿ è²\ntsar naev\ntati an\nsymb ol\nspar c\nsou ffle\nskid more\nsh restha\nru pan\nrehabil itate\nratche ts\npp age\npla za\npb x\nop ark\nma ille\nlilli es\nle be\nlari at\nkapam ily\naaaa aaaa\n)) ))))\nì¡ °\nwee i\nvibr ator\nta kan\nscifi art\nles mis\nkb tribechat\njant ar\netru scan\nesc alante\nedu chat\ndy che\ndi shoom\nbal once\nak ye\n! ðŁĴĸ\nwriters fest\ntimi glia\ntime less\nthi op\nsyn apse\nsop ho\nsh ula\nrepu di\npu rab\nori ver\nof ford\nmonster jam\nm ph\nle mak\nincumb ents\nhar dee\nety mology\neey ore\ndu du\ndo van\ncou leurs\ncon served\ncodenew bie\nco ton\ncau sal\naudubon society\nalle gra\nal eph\nðŁİ¤ ðŁİ¶\nworl demo\nwest country\ntouri st\ntost ada\nran khan\nplat te\nou el\nnz herald\nnu a\nnouvel le\nno th\nnew by\nmo salah\nkidnapp er\nhe morrho\nhar lingen\ngat o\nent ric\ndot com\ncolor less\nchir u\nan kar\nê Ĵ\nvijay antony\ntt ura\nsenate dems\nmh sm\nja une\nhoo tie\nhan e\nfriend liness\nfre shair\nformul ations\nfit ri\ndr do\ndee pa\nc int\nc illo\nbathro be\n. |\nಠł\ny ello\nwhite man\nrust ling\nper ley\nmush kil\nlead ville\njust ina\nj rm\nira ins\ngro an\nfu ton\nde tt\ndamn day\nd mac\nca hu\nblack foot\napar ks\naf lock\nadun ham\nðŁĴĽ âĿ¤ï¸ı\nzi pped\nsn avy\nqu ater\nmus c\nmal ai\ning am\ngi let\nge et\nel ich\ncrow borough\nchan woo\nbobi wine\na ali\nðŁĺį ðŁĴĹ\nwith it\nwin ec\nweing arten\nwebsite design\nvo v\nut tox\nsequ encer\nsc su\nsave children\nsat yam\nsa eng\ns ace\nri be\npos sums\nnon ton\ninstag rams\nh da\ndw drums\ncommercial realestate\nauth oring\napple tv\nðŁ¤ŀ ðŁı»\nzwe ig\nwyan dotte\nu bu\nthe dj\nsilve stri\nsil t\npre pper\npay less\npax west\nlog itech\nlec tured\nl tw\nkari sh\nj dk\nh tf\ncheng ladbach\nanup ama\na field\nðŁĴĸðŁĴĸ ðŁĴĸðŁĴĸ\nv illian\ntw ars\npro pped\nmin den\nlay am\nlady antebellum\nktb ffh\nha iga\ne www\ndelic atessen\nchill ico\nbroad moor\nanthropom orphic\nale ks\nsef ton\nron nies\nplant sci\nper ini\npay ton\norchar d\nm pm\nk ym\njan ovic\ngolden boy\nf ana\ndynamite comics\ndorje shugden\ncr inge\nco ombe\nation of\nactiv a\nç ·\nyou are\nren zo\nman spla\nkelving rove\nkat ara\nham den\nfurn aces\nfavor ably\nf wp\ncoch on\nÍ¡ °\nzak kw\nwealth management\ntouch stone\nresi stance\nras ool\nprivate jet\nofficialu om\nlc f\nkit ch\nketo sis\nit alie\nhy enas\ngrati fying\nfutur ity\nb di\nðŁIJ ĩ\nëłĪ ëĵľë\nvol ine\ntiger s\ntamaramc cleary\npotter more\non elove\nmc fly\nm ffl\nlibr aries\nj zarif\nirish bizparty\nhy thm\nhon a\nhail state\ngal le\nfail ings\nbrand is\nbr ons\nw ry\nve sper\nuch el\nta is\nspro te\nser ato\nsave water\nre des\npsyched elic\nmiss guided\nlin na\nla vie\ngui dic\ngreen span\ngor ing\ngold water\nfi bau\nfan mily\ndro go\ncr c\nchee to\nbo son\nyu ka\nwnu krt\nweb master\nstate farm\nsp ero\nony mus\nmel aye\nlou i\ni fm\nengro ssing\nempirestate bldg\ndissol ving\nboo tle\nblue bonnet\nb mr\nthr ace\nps ch\npic sart\nper fom\nnuf field\nnar rate\nmay u\nl tu\nelder berry\ndibu jo\ndesc ence\nbuoy ancy\nbay lee\nbald ness\nar ish\nani ght\naj hl\nactiv ator\nz hong\nvorone zh\nsing a\nroad trip\nproperty management\nple tt\npin inf\nmultic hannel\nmill sap\nmale model\nma shaba\nlubr ication\nloc ate\nkin nick\nkid z\nfe h\ndefund pp\ndd icombe\ncu tch\nchun gha\nbard stown\n> $\nyear sand\nveu ve\nunit edin\np ire\noxi dized\nor ada\nmug ler\nmom sen\nmatur ation\nkol be\ngl engar\nfather sday\nfarm workers\nfamily planning\nfact sheet\ndilla shaw\ndigic el\nc whl\nc sur\nc ite\nand read\n* ^*\nðŁĵ ħ\nã Ħ\nâŃIJâŃIJ âŃIJâŃIJâŃIJ\nphoto contest\nn ü\nlat te\nkwaz ulu\nici ou\nhy lton\nghost town\nfunkad elic\nfor theday\nfen nec\neviden ced\ndo ce\ndige sted\ncor sten\nback drops\nun said\nsupermari oodyssey\nretro spec\noligar ch\nmispr on\nla as\nil logical\ngalli ano\nflash fiction\nclou dera\ncab oose\nbrian mb\nbon bon\nac ep\nðŁ¥ ī\nâĻ¡âĻ¡ âĻ¡âĻ¡\nthunder cat\nsmoo thest\nsing e\nsi eve\nsa ko\npar co\nmuse elou\nmiy uki\nmag gots\nled better\nit ous\nintegr ator\ngrow with\ngir t\nfal a\nday an\narden nes\nag ence\ntrias sic\nsamuell jackson\npainter ly\nnar d\nmcm comiccon\nmari anas\nmahon ing\ni est\ni ba\nhills borough\ngreg gutfeld\ngenealo gical\ng ys\nem pi\nde spi\nbla ire\nanciente gypt\nalo vers\nac lu\nä» Ĭ\nоР³\ntt x\nsy ke\nq ai\npad ron\nma her\nit so\nfa wr\nde ee\ncarmel ite\n# "\nwo i\nurban isation\ntheli br\ns daily\npri ve\nmy ers\nk vm\nic hand\nfol au\next inguish\nedger ton\ndaf oe\naro va\nâĿ¤ ðŁĴĭ\nº c\nyy carts\nseab ed\npal acios\nme ik\nmck ay\nmb ti\nma stin\nlu pe\nlove u\nle ero\nlc ps\nine quity\nfastand furious\nbund aberg\nbu do\nap ort\nðŁĺį ðŁijı\nwilli enelson\nut el\ntri force\nteas dale\nspell ing\nshi h\nsan down\nmer sin\nkh at\nincit ement\nho smer\nha ier\nfollow me\ndo ggy\ndeer hunting\nday sun\nd no\nchristian kane\ncandel abra\n*__ *\nte gan\nslu mber\nscrib bling\nran di\nplat ini\nn sl\nmo relia\nmel amine\nle ee\nkash ima\nh nl\nbox y\naudi olaunch\nad ro\n= (\nyahoo finance\nsho ai\nout smar\nmen ding\nma ks\nki ing\njami ro\ngn l\ngio vani\ngain ers\nent rap\nduplic ated\ndublin town\ndar lo\nc sh\nbreastcancer awarenessmonth\nbaff les\nåĭĿè² ł\nun justly\nste mmed\nsmol dering\npd fs\nmen do\nmcdon nell\nlat on\nlar yn\ning field\nhell eni\nhead z\nfron ting\ne wen\ndur rant\ncas s\naf oto\nâľĮï¸ı #\nw cm\nverton ghen\nve ils\nste wed\nspan k\nsen ews\nselec tively\nsan usi\nretin ol\nre build\nprou do\npene tra\noo pam\nnar c\nmillenni al\nm clo\nkat z\ninter ned\nhot docs\nfor honor\nfitt ingly\nfan gio\nfal lo\negyp t\nconstitu tion\nchri stos\n$ âĢ¦\nÎ µ\nwatch making\nwat an\nverte brate\nsand a\nnu mba\nmikethe miz\nmans bestfriend\nleedsr hinos\nle sm\nkal an\nin ah\nb han\nadmini stering\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\nঠ¤\nغر د\nz ot\nsup streamers\nshab by\npachel bel\nmer k\nki da\ninte ger\nhear ne\ngoodwoo drevival\ncro oner\ncl ings\nðŁ¤· ðŁı¼âĢįâĻĤï¸ı\nt kach\nsoo ke\nsony pictures\nros acea\npsycho logically\npl srt\nligh twood\nlib ations\nj ony\nhome style\ngeophy sics\ndisco verer\ndes se\nbu ie\nbbc tennis\nbar ri\nastoni shingly\narre ars\nand drive\nad vices\nx fl\nweightloss journey\ntyne castle\ntran k\nsweep stake\nsw wap\nruss west\nla ure\nicant breathe\nhol len\nha ptic\ngo ty\nfri zz\nbay o\nb ich\nar au\nâĶģâĶģ âĶģâĶģ\nvol tron\nvis cose\nun scripted\ntwe ens\ntor res\ntak umi\nswansea uni\nstav ros\nrold an\nrev ents\nre da\nrc gp\nng ong\nmeteoro logists\nmarl ene\nkil ns\njanel lemon\ninduc t\nhur ler\nhok age\nhend rickson\nhappy customer\ngow yo\ndag h\nd med\nbron ner\ntrans figuration\ntopo graphic\nthe doors\nshang ha\nsam mam\nsa wn\nrom ita\nre pub\npho logy\npe que\nopen gov\nmul i\nlaz are\nhon cho\nga bel\ndun leavy\ndisembo died\nas pa\naqu es\namitabh bachchan\nad dle\nðŁĵ ¹\nâĿ¤ï¸ı "\nvik toria\nvan zant\nsre sorts\nspoon bill\nsp az\nsho sp\nshau ghnessy\nmdanderson news\nmaking comics\nkal amata\ngri sly\ngr g\ngo g\nencroach ment\nen ate\ndw t\ndi sch\ncu ra\nbuffo on\nbi polar\nb inging\nago stino\nyo ssi\nvalent e\ntram lines\ntal lies\nsydney is\nsun dress\nsci atica\nmay on\nmali k\nitt t\nhar ri\nfr anny\ndrumand bass\ncrypto currency\ncommunity policing\ncom po\nchan i\nbuch holz\nba hu\napex legends\nand l\nan aya\nðŁĮĬ ðŁĮĬ\nâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶ\nyour shot\nswe e\nsummon er\nsul king\nspy ware\nsi stance\nny eri\nmon om\nmar lena\nm nufc\nky ler\nhol z\ngre alish\nfar han\nem outh\ndil ma\nchenna irains\ncam ren\naxx ess\namy loid\nwa aaay\nus man\nsparrow hawk\nporth cawl\npad man\nnysph saa\nnew por\nn mnh\nn dr\nmarch on\nmagh rib\nmac ie\nindv spak\ngar son\ng and\nf anny\nbritish gt\nbit o\nbam berg\nasiap acific\nal w\nal omar\nè ¦\nzu ber\nsausal ito\nro ath\npo table\nmonit or\nmk ts\nmis searth\nme ity\nhar mer\ngin or\nei ji\ncharle magne\nbere ts\nbel tel\napo gee\nan two\nam cham\n________ __\nstead fast\nrot ana\niw gp\nim b\ndisco s\ncontrac tions\ncal listo\nbe great\nan w\na eng\n௠Ĩ\nwalking dead\nth ener\nrem and\nmom entos\nm clu\nlou lou\nkacey musgraves\nhol ler\nfh saa\ndet tori\nde es\ncu boulder\narra ign\nach icago\n= $\nðŁIJ Ĺ\nðŁı¾ âĢį\nzun iga\nwidow maker\ntz at\nsportsp lex\nsla w\nshi pin\nre booted\npr news\nkha kis\nka se\ngam al\nfro ck\nda inik\nbird seye\ntat yana\nsw ac\nste emit\nmc x\nho tri\nfu ries\ncar nes\nbassad or\nat ka\nan mol\nak g\n価 æł¼\nzy deco\nz ouk\nyessi r\ny ck\nty cho\ntot ame\ntor u\ntoo tough\nsyl vanian\nrat i\nnswr l\nn gad\nmartin dale\nm wd\nlegu mes\nkha ya\nho je\ngan net\neco x\naj s\nðŁķ ¸\nwanderlust wednesday\nw ym\ntech nik\nsri kanth\nsoul calibur\nsof india\nring wood\nread more\npsychedel ics\noak ridge\nna dir\nmlb tv\nkareen ak\nishi kawa\nclimate justice\nat test\nabstin ence\nwal low\nt pi\nsel e\nscissor hands\ns do\npo der\npaddy power\nnext level\nkid der\nker alam\nhe ber\nfor this\nban ton\nb him\nam ali\nal gore\ntrafal gar\nthir ties\nswan se\nrol fe\nrang oli\nke z\nja wn\ngo etz\nglo bular\nface timed\nfabi ano\nfab io\ne cht\ncu ticle\nchloeg moretz\ncar io\nblo s\nbap s\nart by\nale em\nzi ed\nwhatyou do\nwel ders\nwater ville\nvt poli\ntourof britain\ntight ness\nten able\nsome on\nsar g\npre sh\nme gg\niow ans\nfrench tech\nei hl\ndeath core\nda ichi\nco com\nchan ak\nb ga\nat eness\na op\n( ^_\nÙĪ ر\nyp sil\ntat su\ntaor mina\nstradi varius\nson ali\npk p\npil lage\nor it\nhe wett\ndug dale\nchi pper\nbusk ers\nblanken ship\ntt ner\nsub tweet\nsh eu\nseason ings\nni thi\nmn m\nl sk\nkay den\nfavor ita\ncu touts\ncoloni ze\nboat sforsale\nðŁĵ ¦\nðŁ¦ ĸ\ny ll\ny hm\nwit tenberg\nt cea\nsteve ston\nsci rocco\nsal ud\nportad own\nn pas\nlo dhi\nke hoe\nk anda\njo en\nivan ov\nhan h\nge f\nanc s\nðŁĴļ #\nye garts\nvege mite\nri ofer\nri go\nmb fw\nmar ki\nmagnific ently\nli steria\nkar zai\ndar ragh\nd prin\nchu ka\ncar as\nc ys\nbe w\nast o\næľ ¬\ntan zan\nsearch engine\nross on\nprab hat\npan tene\nnoti fying\nmo dig\nmicro scopes\nlak elife\nj hene\nfre w\ndom o\nchristmas gift\ncc su\ncas sie\nanc ini\n² ¨ë²\nyo ffice\ntr iti\nthe street\nst aw\nset zer\nre doing\npun ts\non slow\nnv me\nnight gown\nnarco tic\nn its\nhb cus\ngi el\nfarm stead\nding ton\nct vo\ncinnam on\nchatta hoo\nberen ice\naudu sd\næľ¬ åĭĿè²ł\nworldemo jiday\nvie ques\ntruth fully\ntru bisky\nto ss\nt auto\nst event\nshu ll\ns ff\npol arity\noff ing\nmust do\nmc cand\nmagni fied\njor am\ngab or\nf ld\ndanny wood\nc mm\naurobin do\nwood head\nwomen ssoccer\nthe state\nhi roy\nen suing\nac lan\nw aga\nu wp\nu rian\ntar u\nswer ving\nstou ff\nshi mizu\npun ite\npsychop ath\npap aro\nn sca\nmoisturi ser\nkhand el\nfu gel\nfro th\ncocon uto\nca in\nbil al\nx v\ntootough totame\nsuccin ct\nscot twalker\nray mon\npom o\npluton ium\nphen yl\nnd f\nmusic inc\nmarble head\nleg it\nl si\nkan wal\njour n\njesu sis\ngall antry\nfreeform tv\nfo aming\nfish burne\ncrink le\nbur a\nblu em\nbla q\nak wyz\nadap ts\na ip\ntrevor moran\nten i\nsl ate\nscuf gaming\nre printed\nquad ro\npolar vortex\not ol\nmarou ane\nm fr\nis this\nhar ker\nfra zetta\nfon daz\ned c\ndc traffic\ncor ky\ncal las\nbulgar i\nx pro\nwrite up\nwat che\nw ds\nveterin arians\ntuil eries\ntoy photography\nth apa\nstaf fy\nsha i\nseng illibrand\npand an\noo ts\ngrocer y\ngoog les\nfitch burg\neye on\ndre es\ndi zation\ndi eng\nde vise\nd sl\nbook keeper\nbean bag\naer ts\n² ï¸ı\ntake da\nstre as\nsal lah\nroyal mail\nmemor izing\nmar lee\nm sport\ninner peace\ni wc\nge en\nfighto wen\ndra iders\nde spon\nchou dhury\ncan tar\nal ola\nðŁİħ ðŁı¼\nwest indies\nwan stead\nuniv of\nsmi thers\nsel ene\nrose bank\nred necks\nna hyan\nl pu\ninvasi ons\nindependence day\nhar bin\ngri ddle\neri ot\nell wood\ndul ous\ncover reveal\nbel mond\nbeach ed\narchitecture photography\nal stom\n¦ Ī\nun rated\ntu u\ntri met\nsimon pegg\nremou lade\nprover bial\nover berg\nnormal ity\nmor ticia\nkal ra\nfuer za\nfightowen sfight\ndiver sions\nðŁĮ¹ @\nú l\nvo igt\ntal on\nscu ri\nsaw tooth\npen ning\nn sm\nmedi alab\nm ty\nelisa betta\neer ste\ncute sy\nceru lean\nadap tability\nâľ ´ï¸ı\ntumble weed\nthi en\ntex arkana\ntar ch\nt fb\nst aked\nseduc tive\nrogu elike\noste opathy\nos good\neye patch\nami x\n> #\nðŁĺĤ ðŁĺģ\nðŁ§ Ł\ntan ager\nsun way\npoly com\njar musch\nj anta\niber o\ngian luigi\ner win\ndit ty\ncompre ssing\nbrae head\nbo cca\nap hor\nac ey\nyeah that\nwa il\nvap ers\ntyrann ical\nst augustine\nsaf ari\nraj ni\nmin to\nmedi acom\nme ander\nhuman ly\nga illard\nfro om\ndapp led\ncum bia\ncro co\nbol le\nbi ght\nan itta\na stru\nus ana\ntwit ty\ntun ers\npe h\nno es\nni mr\nll f\njay cee\nit en\nik is\nhur led\net r\ne pics\ndro id\ndis land\ncar play\nbriel arson\nar w\nanti septic\nai do\nÏ Ģ\nthelance t\nthel ong\nth ongs\ntart an\nsper fect\nsli ghts\nser ling\nprie to\nmu sso\nkhal ed\nkareenak apoor\nin uk\nfe res\nfan atical\nboy y\nban jar\n( âī§\nãħ İ\nwim p\nti gris\nta ye\npropag ate\npl it\npin ar\nph vote\nparab ens\non ces\nmoo i\nmark down\nm fi\nli fen\nko smos\nka v\njhene aiko\nhello bc\nha qq\ngirar deau\nfe ster\nel gin\nde q\nde ena\nar agon\namazing race\nëłĪëĵľë ²¨ë²\nwu thering\nwhid bey\ntam pico\nsh ami\nri day\nout landish\nitiner aries\ngu ha\ne katerina\ncul vert\nchronic ling\ncar dona\nbecause itsthe\nreci di\nre evaluate\npal u\nm fp\nlun enburg\nkr one\nhyper bole\nhydro carbon\nfr n\nfir kin\ndef er\nbowhun ting\nbird gang\nðŁij¸ ðŁı»\nठ¼\nwrite tip\ntv shows\nsag arika\nray sup\nl so\nhic cup\nha pe\ngu len\ndin wid\nbut lers\nbrock ville\nbang er\nb lec\nad h\nðŁĺ Ł\nðŁijĮðŁı» ðŁijĮðŁı»\nwf sb\nwe ft\ntwer p\nstri ping\nscrupul ous\nsab in\nros lyn\nrev ving\nrack ham\nra ph\nmp as\nm hi\nkor ver\nkar k\njewel led\nheath cote\ndv m\nduma guete\ndoor ways\ndetroit become\ncru soe\nconnoisse urs\nc we\nbrit tain\nblood pressure\nblemi shes\nrepent ant\npi ana\notta wac\nopen follow\nndam endment\nla homa\nkicau promo\nju ste\ninvis align\ninthe house\nindi anews\nibg drgn\ngri gg\ngene seo\nforce awakens\nbode gas\nayk royd\nâĦ¢ .\nye eee\nulta beauty\nu ol\ntomas z\nter berg\ntam ina\nstepp en\nsam m\nq g\npractic um\noro x\nkri stie\ninter governmental\nin ce\ng anna\ndom ino\ndi yar\ndar ter\ncr amp\ncad aver\nbru beck\nbo tu\nyin ka\nspaul ding\nshun ter\nshir di\nsam ia\nrecidi vism\nr to\npi quet\nkis i\nkarli ek\njordan spieth\nip sos\ndr x\ndatsy uk\ncute eee\ncritic schoice\nbernan ke\nas inan\nak ery\nsoren son\nnucle o\nne ice\nmis read\nmax is\nle am\nka ise\ngur r\nfre sca\ncat oftheday\nbirk dale\nwi h\nw ct\nvi aje\nvere in\nspice girls\nsoccer am\nsar am\nreflex es\nkam insky\ngu tta\ngli ano\ndick head\ndepu ty\nas r\nair con\nyu val\nsec gen\nq af\nob in\nnv wx\nmellen camp\nkenne dys\nk pm\nj ini\ni mas\nent wined\nend en\ndyspla sia\ndl m\nbook love\nbon appetit\nwahe guru\nvacuum ing\ntt ler\ntra ut\nsun moon\nro sado\nnew stalk\nko bani\njanellemon ae\nine os\nhouston chron\nhistoric england\ngeo technical\ngag ging\ng tg\ndo ren\ncla ses\nas ai\nap ride\nsuper valu\nstro ker\nsi mm\nscar le\nquo it\nmorbi dity\nlam ma\njo anie\nfinger board\nethnic ally\neson oma\nel ab\ndou bly\nattor ney\nðŁij ´\nviol ent\nmultim illion\nl pr\nk norr\nfac toid\ndou la\nde valuation\nde ker\naw allace\nðŁĩµ ðŁĩª\nyear sold\nvol up\nver lag\ntar avi\nstre eter\nsh bo\nsclero derma\nrabb in\npro x\nmary kay\nlic ht\nl pn\nka as\nj ame\nhaz al\ngru ppe\ncoun table\nbri gg\nah in\nway a\nwalk for\nvi dic\nthe dan\ntar nished\nstand for\nsemic olon\nphy sic\nnaz im\nn cb\nmun ds\nkre uz\ni league\nhy m\ngli des\nfees mustfall\ndr ano\ndis av\ndaw lish\nclassic car\nch olo\nw tg\ntax day\nspec ks\nsen feinstein\nsalom on\npe ppy\npar kh\nnew ssydney\nmul k\nliber alis\nle apt\nke di\nheav ing\ngrand pas\ngno sis\nfiftyshades freed\nedg ware\ndigiti ze\ncel t\ncarnou stie\naa v\nâĻ¥ @\nworld photographyday\ntack le\nswane poel\nsound scapes\nsole watch\nrise ofthe\npe dan\noregon standoff\nnewyear sday\nmir th\nkratika only\nkil la\nje ann\ngir ly\ngate ways\ngall eries\net now\neli ana\ndark seid\ncur bed\nchim amanda\nbit finex\nbell atrix\nand company\nan engineer\na beer\ny fn\nvit or\nvag rant\nsu u\nryerson u\nretrac ement\npal az\nmtvlakpop bts\nim l\ngour mand\ndim sum\ndah lias\nas li\nari sti\nareth afranklin\nam alie\nac r\nwini fred\nven ky\nuni q\nun known\nover done\nnofilter needed\nmu mm\nmark sman\nlin ares\nland care\nkel lie\nferran te\neng i\ncigar chairman\ny k\nshow grounds\nsho ts\nseren ades\nsal inger\nroman ov\nresi dues\nrefre shes\nprop els\nnews mornings\nn mp\nmonte bello\nmat sui\nmake money\nlady bugs\ninter scope\nhouse plant\nfugel sang\nfu hrman\ndu que\ndil ute\nco ss\nc atie\nbar stow\nabu ela\na beats\nwut ang\nwarrior nation\nv tc\nuk an\ntrans vest\nsuper stock\nsu won\nsu ll\nsto cker\nstgeorge sday\nr pl\npin head\nkul u\nkareenakapoor khan\nje wala\ni ffe\nheck en\nglamour mag\ngan ay\ng ous\net an\nel ric\ndisper sion\ncoch lear\nbb p\nanaly tic\namal gam\naf cf\n_ @\nå· Ŀ\nud all\nopioid crisis\nneel am\nmo j\nmethan ol\nlang s\nka oh\niv re\nho z\nhe bri\nash etty\nas port\narson ist\n.. :\nzi ja\ntrac ted\nsolemn ity\nsamo yed\nrapha el\npremon ition\npa ver\nmis demean\nkarliek loss\njor g\nhann i\nga unt\nfork lifts\nee en\ndeath wish\ncw p\ncelebrity news\ncar ty\nbrook wood\nae gon\nwe bbed\npolit o\nph ari\nmiami oh\nmel le\nlind gren\nkath arine\nja qu\nit down\ni em\ngradu ate\ngluta thione\ngardent ags\nfundament alism\neu l\nck less\nchi ri\nbr w\nbla k\nbayley wwe\na pres\nðŁİĤ ðŁİģ\nìĸ ij\nun limited\nsuper fund\nsun id\nrough ness\npam pa\non em\nnong mo\nick son\nhospit alization\ngeophy sical\nfra ge\nfolk life\nfo ley\nfi z\nfa wales\nek h\ndin ar\ncc ps\nben ard\nar up\nzee bo\nvar da\ntou ting\nspace suit\nso aks\nsm rt\nsi gil\nsam aj\npotam us\nmi f\nludogore ts\nlu z\nkit ti\njacqu ie\nio logy\nhar tz\nex hu\nestor il\nduchess of\ncake decorating\nanimal rescue\nadobe summit\nyo ver\nwork house\nwil lo\nstand point\nrockef eller\nrenss elaer\npres stitutes\nn ene\nmaison valentino\nken to\nhail storm\nfre era\ndisapp rove\nco bourg\nar q\nand ru\nê³ µ\nÏ Ĥ\nsel wyn\nocean view\ni book\ndonat elife\ndani ell\nda hiya\ncas sin\nbe em\nwwed aniel\nwwedaniel bryan\nta pen\nstan den\nrainbowsix siege\npan ip\nnoir alley\nnew brunswick\nja ir\nill ation\nd ous\nbrad bery\nbar kha\nane jo\nag ir\nwinter hawks\nthyro id\nout did\nni vin\nmuseelou vre\nlalun asan\ninhi bits\nanti gon\namazon kindle\nun tested\nthunder struck\nstor ks\nsp age\nrun the\nrefur bish\nqu ed\noh y\nlaw and\nl me\nits bayleywwe\nibc show\ngr ü\ndr ams\ndenomin ational\nb fm\nale o\nðŁĴ Ĭ\nðŁİĦ #\nãĤ¹ãĥ Ī\nwn e\nwho dey\nun credited\ntu va\nsyngent a\nsu ther\nsax on\nresu mption\npo gi\npen iel\non wheels\nmagi karp\ni ñ\nharid war\nfuninthe philippines\nframe less\nfer vent\neros now\neradic ated\ndoo dy\ndi av\nce ci\nbr il\nber ge\nare i\nard or\nar sal\nani ma\nalton brown\nðŁ¤ĺ ðŁı¾\nwil ke\nvi aggio\nvas il\nun sold\nstudi op\nspeed ometer\nment ly\nlli ott\njan ata\ngo bucs\ngar ay\ng tp\nfract als\net p\nen bach\nci do\nbe bes\narc teryx\nðŁĴ ı\nwha aat\nventrilo quist\nvel azquez\nun likely\numich football\nsober ano\nsideby side\nsick kids\nr bb\nna hh\nmustsee iran\nmam ta\nluc ina\nll in\nli pped\nj da\ninnis free\nhb p\nfranch ised\nfen nell\never deen\ndeci bel\nchom ping\ncau s\nbon illa\nal pur\nâĻ¥âĻ¥ âĻ¥âĻ¥âĻ¥\nvoucher codes\nree ks\nrand l\npot ash\nnorth yorkshire\nn sb\nlimon cello\nlah ti\nla stest\nke o\nhat rick\nfreera if\nfeliz martes\nextremer ules\ncontracep tives\ncam illa\nbru ch\nbri bing\n........ .........\n⾨ âĿ¤ï¸ı\nwhe c\nspectro meter\nrter adio\npe stle\nma am\nk war\nje mison\njai mie\nj mm\niko yi\nhav ant\ngu tting\ndis banded\ncompe l\nbut tocks\nat birth\nam ann\nsu su\nsk en\nre pos\npetal ing\npechak ucha\nordnance survey\nmis spelling\nkit ak\nig uri\nhal ting\ngou ging\nevis cer\nes and\ndept vetaffairs\ncon man\ncity v\nboer ne\nblooming dale\nb md\nastron au\nðŁijħ ðŁijħ\nwwe hof\nwin ski\nvg punite\nur b\nun usable\nu pan\nlar gs\nhf player\ngri p\ngod ley\ngad ing\nco whide\nweigh ting\nste gen\nst ling\nsomerse thouse\nsh um\nsa kai\ns é\npic h\nmul o\nlt gov\nlan gui\nkh q\njuli o\nj aga\nhe ep\nfig ma\nepide mics\ndaman sara\ncold well\nchro matin\nchic hester\narbor ist\namo vement\nagent carter\nìļ ´\nâĹ Ģ\nÏ Ģ\ntzat ziki\ntas ker\nin appropriately\nhost ilities\ngar r\nepic a\ndisc world\ncra ps\nchristi ane\ncaf és\ntipp ett\nteam b\nstrou dsburg\nrose water\npu ig\nn psl\nmick jagger\nlik able\nig inal\nic ata\nhuawe ip\nguid ing\nfil my\nfer c\nfearthe deer\nembelli shments\ncho e\nch il\nblue book\nbig band\nam sey\nalli ster\n\\ _\nthe sam\nsteveaustin bsr\nspiderman homecoming\nso bie\nrich field\npr ato\nparac ord\no skar\nnon profit\nlar val\nim at\ndaniel andrewsmp\ncly des\nblen heim\nban ne\navin ash\nalad ha\nðŁĵ¢ ðŁĵ¢\nâĦ¢ ,\nzombies quad\nwor f\nvas sil\nsc ada\nprofan e\nover t\nny man\nman zoor\nli vers\nko taku\nkin go\nglit zy\nfre igh\nequi valence\nenv agency\nen sen\nen liven\nden ouncing\ncrest view\ncl ere\ncity beer\nchanc ery\natle tic\nag ang\nwra paround\nv italy\nto remember\nstun ted\nslap stick\nse phar\nop w\nnewyear new\nmay ak\nli ev\nker sh\nfou st\nef g\nbur ge\nau vergne\nðŁı ¹\nëłĪëĵľë²¨ë² ³\nxen omorph\nuk iss\nto ic\nrifle man\nphal lic\nper turb\nleg ac\nisu ke\nhyper baric\nhall er\nelg ort\ndon an\ncon fox\ncar ron\ncab lecar\nbaby daddy\naby tes\nwh nt\nwar zone\ntreasu ries\nswal e\nscal zi\npes ach\np ous\nnorman ikor\nmontal cino\nmid gets\nkourtney kardash\njo dre\nhy person\nhi di\nher by\nhar ra\nguj ran\ngu ppies\nfamily first\nf ach\ncon ical\nch ace\nar mie\nид е\nsoli dly\nshay na\nsegw it\nrough necks\nmay im\nmacro economic\nler oux\nlen adunham\nk tg\nin z\nhend rick\ngui mar\nfurry fandom\ndest itute\nz aire\nsun fish\nro za\nrac esonoma\nr po\nnot withstanding\nis chool\nhydrange as\nham ra\ngenerale lectric\nfon te\nfe w\nfairy house\ncomp tia\nbet as\nbed head\nb drm\nag ini\naaron paul\nðŁļ ©\nðŁĶ¥ âĿ¤ï¸ı\nðŁĶ º\nॠIJ\nw golf\nte ater\nren ter\nre so\nqu are\nparti ality\nlac quered\nkrasno dar\ngo cu\ndyna sties\ndublin city\ncle ef\nban try\nadvent u\nabhi gya\na hai\n) /\nìł ķ\nyarmou k\nwie der\nwal est\nu zo\ntetsu ya\nsuccess factors\nschwar tzman\nne bo\nme ttle\nmc man\nhol kham\ngandhin agar\nesp nc\ne tro\nbo st\nbel u\nav ari\nðŁij ľ\nzombiesquad hq\nwal dman\nwa cha\nv tv\nsh hhhh\nrussi a\nra itt\nprest wich\nnormanikor dei\nmar zano\nlu as\nliqu or\nlig and\nk ck\nk anna\ninsta video\ngul shan\nge oc\nfright en\ndr tedros\ndie mannschaft\ncheese board\nbiom imic\nan ze\nag oo\nvi b\ntu le\ntele pathy\nsd j\nraaj jain\nhumber to\ngo ku\nfourfour two\nden berry\nco weta\nbur go\nalbin ism\nac án\nvasund har\nto bin\nsol ange\nsof tens\nshadow run\npro mis\npre fix\nparalle l\np fd\nmore ira\nlarcen y\nkann ad\nj cw\nhl m\nher ne\ngrand in\ngi deon\ng lynd\nfertili zation\nfc w\ndun woody\ndeserve dly\nby ung\nbar king\nar har\n... $\nwu shu\nvital i\ntoo ooo\ns theatre\nren ditions\npto sis\npar ley\no ja\nna x\nli vi\njetair ways\nindian railways\nhand washing\nguidic elli\nel ottery\nche sters\nbern ini\nb cr\nart fully\nal mere\nab leness\nzimmer n\nwestand together\nnew vision\nnew belgium\nmit zi\nlux ur\nluc cio\nku mble\nis aw\nhe sa\ngom vfc\ngh today\nfrench montana\ncro sley\nce b\ncaro winds\nbal do\nb ps\nadder all\nw gm\nve era\nvai o\ntaur anga\nta shi\nspi king\nsch winn\nor ica\nof o\njay am\nim patiently\nfinal sweek\nfe thi\nfa wsl\ncu pe\ncla shing\nbrett eldredge\nbookof mormon\nap al\nac tress\nac amp\n>>>>>>>> >>>>>>>>\nâĺĢï¸ı ðŁĮ´\nื à¹ī\nvest ment\nswi pes\nstep mom\nste dman\nsr n\nsa warenessmonth\nredchillies ent\npri zm\npal ais\nnd football\nlea ver\nin paris\ni pos\ngive blood\nelse vier\nel lus\nde ann\nclu ck\nber wyn\n!!!!!!!! !!!!!!!\nview fromthe\nun founded\nto da\ntin ge\nta itt\nod ors\nmu di\nmoney ball\nmax ie\nherpe tology\ngad i\nfortw ayne\ndrey fuss\ndissatis faction\ncare rs\nadel ante\nâľĤ ï¸ı\nè ge\nten ement\nssss ssss\nsnor lax\nsc ymru\npersonal development\nma dero\nkor d\nki shi\nit re\nimplo sion\nfu x\neque stria\nei vissa\nchic ha\nå ¨\nÄ ĵ\ntu bers\ntin a\nthe ads\ntamagot chi\nsy k\nsun n\nsd ar\nsammam ish\nrene ga\nprun us\nponti f\npier rot\noak mont\nkur i\njoo heon\nhoward stern\nhe o\nge stapo\ngas kets\ngab bard\nconven er\nbrazz ers\nbol ly\nbajrangi bhaijaan\n" :"\nðŁij ·\nwi dened\nwatch maker\nvit ru\nun ico\nrough ing\npoly phen\nm the\nled by\nin tv\nh vy\nend is\ncumber land\ncn traveler\nchoreo graphers\nchan te\nbar nier\nbar di\në n\nto ting\npa stry\no hi\nmis eric\nm venkaiahnaidu\nkum amoto\nkis sme\nkin es\niq rar\nh gh\nenvisi oning\nc acci\nbla ss\nbeauty tips\nather osc\nx cel\nthe standard\nsou q\nram er\npregn ancy\nperiscope co\nn scc\nmariok art\nlass ics\nko shi\nk itu\nflo yds\ner ma\nendor phins\ne aux\nde compression\nðŁİī ðŁĺĺ\nðŁħ ±ï¸ı\nunfa zed\nte ak\nset ti\nmá laga\nmur ch\nlet go\nis n\nis awesome\ninf lection\nhe cht\ng bc\nfra pp\ncombu stible\ncali ph\nblack mirror\nat last\nðŁĻĦ ðŁĺĤ\nview finder\nus af\nun ta\ntommy hilfiger\nso wer\nrug ged\nnav in\nlu ks\nloyal ty\nhs football\nharry and\ngal eria\nfic titious\nfair hope\ncroche t\nal ver\nðŁĻĥ ðŁĻĥ\nwf mu\ntel enor\ntai wo\nsb w\nsam pauk\nreal saltlake\nreac tionary\nprogre ssions\nmakeit count\nis om\ninst an\nib h\nholo grams\nham pered\ngame grumps\ndole zal\ndi wali\ncutie pie\nch ung\ncal low\nbe coming\nag irl\nae gon\nwelsh man\nwel ove\nweap onized\nslaugh tering\nrepre ssive\nq m\noptic ian\nmilk man\nkazoo ie\nindemn ity\nimit ated\nform aldehyde\nchlamy dia\ncar radine\nbur gun\nam ah\nè į\nاÙĦ ÙĦ\nú s\nvent oux\nthel aw\nthe bridge\nswed u\nsir pat\ns medley\nnov ate\nnectar ine\nmuir head\nmam adou\nii um\nglend al\nfon ten\neas ley\ncre sts\ncol wyn\nchelse ac\ncart wheel\nbead work\na jac\nz official\nun seasonably\nt singh\nsul fide\nsteam ers\nra uf\npredic tors\nphe v\nlg c\nimo gen\nic chio\nhallucin ations\ndev ry\ncrow bar\nbri sco\nbonafi de\nball ondor\nb wv\nb hr\natt as\nwar horse\nv ss\nun due\nteletub bies\nstate less\npom o\nohio state\noffici ally\nno ddy\nn rel\nmu layam\nmix radio\nindigenou speople\nhu q\ngolds miths\nfin ales\nf ti\ndra ven\ncorn eli\narchitecture mw\nå ĥ\nâļ ł\nwi j\nvietnam war\nth acker\nsub set\nsk g\npun x\npre made\nox bow\nop cw\nmo ba\nman an\nmal lee\nkra kat\ninf on\nhu tto\nen car\nann eli\naer c\nwick i\nun sweetened\ntar dy\nshil ton\nq ts\nper ri\non ite\nofficial corkgaa\nnf hs\nlit mus\nlan ie\nkul ture\nkend al\nja emin\nis not\ninnovate uk\ngran ite\ngavinde graw\nfor far\ndiss enting\ncouple goals\nbr ano\nbill ingham\nbi ffy\nwhitney museum\nwh d\nvadachen nai\ntin ned\nsi bility\nsea ver\nre cast\npru sa\northop a\nmulti dimensional\nmick foley\nk ory\nit am\nhaifa wehbe\ndiar rhoea\nchau d\nbrun el\nðŁı Ľ\nðŁ§ ľ\nwallo ps\nun helpful\nthecar ousell\ntex press\nterpen es\nstereophon ics\nsh ic\nquanti fying\nplay ball\nnh art\nlo so\nkeep calm\nine s\nin coherent\nheat map\nhayes grier\ngrizz led\nglycer in\ngin u\nex changer\nauto bahn\nam me\nam fam\nag lobal\nðŁĻıðŁı¾ ðŁĻıðŁı¾\nwork ington\nunder scores\nsu ju\nsti mu\nn ft\nmus lin\nmani sha\ngran ad\nforza inter\nend cancer\neli est\nder bies\nby law\nbran agh\nben assi\nat man\nasapo fficial\nv festival\ntt tttt\nto ps\nsu mo\nsi ak\nrin ne\nplay test\np ba\nom ission\nna ke\nmu ji\nmu i\nmajor lazer\nholocaust memorialday\nh any\nguay aquil\ngoodday atlanta\nforever alone\ndisco gs\ncro x\ncon cave\ncalde cott\nar ap\nwind surf\nteenagec ancer\nreali gnment\nrav elling\nram adi\nrall ye\nqu id\nprest wick\nmilli meter\njud icial\nintric acies\nfear n\ndur ch\nbur ly\nbigart boost\nas part\nãĥĥ ãĥĪ\nÊ» i\ntr ous\nslovak ian\nred land\nnev ans\nmi ggy\nm pp\nje y\nhaw kers\nedi th\neccle ston\ndespic ableme\ndeir dre\nad sense\n... ðŁ¤Ķ\n. ðŁĺģ\nภĵ\nà® ´\nvi ation\nthe usa\nsirpat stew\nsad at\nre ylo\npsycho analysis\npo demos\npap aw\nncaadi ii\nmc cool\nmay be\nher z\ngive syou\ndun blane\ncnn brk\nb xl\nao d\namerican express\naliab hatt\nìķ ¼\nÚ ©\nwheel base\nvar und\nuntouch ables\nthu d\nsqu awk\nriofer dy\nre assured\nr ted\nph p\npan do\no dot\nlate ch\nla hiri\nl sm\nken zi\neh lers\ne ko\ndro ves\ncopernic use\nbe tten\nbe ti\name e\n) _\nvibr ate\nto pa\ntel o\nson nets\nseam er\nre aves\npoly gamy\npan zer\nmilit arization\nmandal orian\nh ingham\nelfon theshelf\ndom ore\ncontamin ate\ncon s\nash ar\nakam ai\náµĴ áµ\nà® ĩ\nzach arias\nwy re\nundul ating\nthank fulness\nstar sand\nr mb\nneed n\nn our\nminig olf\nmarch of\nm ings\nje u\nfr yday\nfau l\neamadden nfl\ndoor man\ncom passion\nbiker ide\nay yy\nðŁıģ ðŁıģ\nठ¦\nwad dup\nug lies\nti aras\nther ia\nsoul cycle\ns bli\nran cic\npsychi atrists\npis o\np ve\np tx\nnu it\nmar as\njama ican\nilli am\nholling sworth\nheir looms\nhallmark movie\nemir ate\nchimpan zees\nsweett ooth\nself made\nru mpus\npl on\nland es\nlaid law\nken ham\ninsp ira\nhh m\ncook stown\ncon ran\ncm ll\nclyde sdale\nc mas\nberli oz\nbel mar\napal ooza\nantwo ord\nale wis\nت ص\nó n\nwesth our\nv tec\nun wrap\nsnoo ping\nshe es\nproof read\npride and\nom eters\nmani p\nking sville\nimpacton pop\nhi biki\nfal un\nevo ice\nash ura\naer ation\na ana\nwheelie wednesday\nwarrior s\nw enders\nv fa\nup side\ntech summit\nsli ms\nphil hecken\nl mu\nkun s\nkon da\nkol hapur\ng pd\nembroi der\ndemetri a\ncar dy\nblue jay\nbay es\n% ...\nঠ¯\nze alo\nwend i\nv ats\nunforgi vable\nms ft\nmin haj\nm hockey\nkab an\nju kes\ndracon ian\ndamsel fly\nbhagav ad\nbernese mountaindog\ntosc ano\nter rap\nte vents\nte an\nsl n\nshare able\nrestaur ateur\nok cupid\nmodern family\nmei sel\nmcal pine\nkeerthy suresh\nhaiku challenge\nfire dup\nfer i\nail sa\nadop tion\nwies enthal\nwhat sin\nugh hh\nte jano\ntar ry\nsnat cher\npremi os\npeter man\np mot\nnch saa\nme ter\nkit out\ngre inke\nfa had\ndispen se\ndd l\nbru dda\nah lul\nz uko\nwh er\nway s\ntid ore\nstaf fs\nron de\nmon olithic\nlolo lolo\nleigh ton\nkaoh si\nhersh el\nfoo s\ncha sh\ncentri sm\ncen sors\nboo z\nbloom ers\nblack top\nathen ian\nyou saf\nsun dried\nstouff ville\nsj ws\nrenais sance\nre don\nra gan\nplun ger\nma bles\njosel ine\ninfu sions\nhig ham\nheart soup\nee b\ne bike\nde wine\ncomer cial\nb va\nan ons\n!! "@\nðŁĵ¸ |\nãħłãħł ãħłãħł\nö l\ny aaaay\nworld smileday\nusc is\nth as\ntem po\ntaravi kapoor\nstereo scopic\nshus wap\nsco ff\nq aw\nover stock\noppre ssors\nmil d\nhi aw\nh ous\neviden ce\nek taravikapoor\ndream scape\ndar an\ncle burne\ncla shed\nben ig\nbau sch\namer on\naly son\nafri day\nadel son\nac og\nabi des\nðŁıĥ âĢįâĻĢï¸ı\nâĢ¢ )\nwaron drugs\nvisual studio\nvis ors\ntheart bond\nth usi\nswe st\nsp hd\nsoy inka\nsor lando\nsadh guru\nra isa\npe ds\nozz yosbourne\noccupy gezi\nlo ke\nke ast\nh wasa\nfashion tech\nem ichael\nec rash\ndifferenti ating\ncollec t\nchi st\nbart shealth\nb dd\nase an\nag ü\nz ang\nwales coastpath\nw ten\nthresh olds\ntatoo ine\ntan king\nsch ner\nrock fish\npro bono\nphoto gram\nne ye\nnar gis\nmarie curi\ngau d\nco fe\nchristi ana\nberk ham\nbebold forchange\nbe ery\nb chl\narchi ves\nar bys\nãģĭãĤ ī\npower bank\npas ko\nnefer titi\nnasr allah\nmaur ici\nmary se\nmah jong\nj he\nit aylor\nfree ze\nfatal moves\ndispat chers\nbuck horn\nate day\nasi r\nar bour\ná´ Ģ\nturf grass\ntu gger\ntrack nation\ntopo fthe\ntoen ails\nsof ar\npic hu\nong ar\nna seem\nklin smann\nip w\nimpro perly\nim parting\ngood will\ngat tuso\nexer cise\nescu ela\nde jong\nbridge tte\nbloo p\nabull dog\nâĹ ĩ\n௠ĭ\nw bs\nv elling\ntu pp\nspun ky\nsl fl\nsin f\nrad he\np tero\nmartin truex\nmad u\nle mar\nka ws\nje ta\nit na\nfu jian\ncruis enor\nboot sy\nat la\nastrazen eca\nal ani\ntriple j\ntri z\nresc in\nproye cto\nomme gang\nmake rere\nko en\nhar iv\nexcell ently\ncab rio\nbe han\nba shes\nðŁijī ðŁı¿\nthe smiths\nthe scotsman\ntak oma\nsath ya\nr ri\npu bg\npi anists\npatri c\np bm\nnov us\nnj wx\nmcke on\nmang led\nm dot\nkir ti\nkar yo\ninformat ica\nhis lop\ngu apos\nfren chy\nfranco ise\nfor business\nextra dited\ndeci phering\ncremat orium\ncolor ation\nble ecker\nbell is\nðŁĽ ł\nzi o\nun saturated\nsarato v\nridg eline\nrare bir\nr sherman\norti gas\nnu h\nmetaphor ical\nm gc\njab ra\nhom os\nganesh chaturthi\nfoam rad\nde ac\nd br\nbbcle eds\nar ran\nðŁĴ¦ ðŁĴ¦\nz ama\nvol beat\nur ple\nthick ening\nreduc er\npp able\nnw f\nib g\ngeo de\nform ica\ndis ra\namir mateen\nadar sh\n\' \'.\nðŁĩ¨ðŁĩ Ń\nwhis ker\nv ars\nsunny deol\nsar fraz\nrun nings\nresi sters\npi relli\nmustaf i\nmus ici\nmc combs\nliken ed\ni ep\nhu u\nhover craft\nhome steading\nhalla day\ngreen beauty\nf adi\ncalis then\nbox e\naf aso\ná´ ı\nwunder bar\nwhatyou love\nvar nished\nv aw\ntoom uch\nst marys\npro sen\npere tti\nmu so\nmo bo\nmistre atment\nlo dd\nkno tweed\nim magine\nhydr ants\nhe se\ngirl scout\ngerman ic\nbu cci\naustralian labor\naddi son\nv ru\nv pc\ns fox\nrepa ira\npo wai\nparanormal romance\no tero\nno so\nni pper\nmen ko\ni op\nem poli\ncory monteith\ncol ts\nbest place\nat kin\nç Ī\nwoo s\nwest man\nw bay\nve ti\nun regulated\nthe blaze\ntan ja\nschri stmas\npower plant\npocon os\npleas ure\npa sts\nofficial csa\nnabe el\nme iner\nlo ath\nli pids\nkom atsu\niy engar\nhit list\nem cees\ncar lit\narron dissement\nanky lo\nal bac\nafric aday\nठĵ\nwaxaha chie\ntransfer able\ntiti an\ntar des\nsus ann\nshel bourne\nsf mta\npizz aday\nper ris\nparen ts\nor ting\nop tion\nnyc council\nmore to\nmill ington\nhur witz\neve online\ndayofthe year\ndaes ang\nda bears\ncar nations\nar ae\nðŁĺĺ #\nðŁĺ©ðŁĺ© ðŁĺ©ðŁĺ©\nãĤ·ãĥ §\nwra p\nvari o\nthe mighty\ntas mani\nso go\nsierrac lub\nneu ve\nmay ed\nma demoiselle\nlu ne\nk lux\nhoe down\nglene agles\ndi ga\ndee dee\nd cd\nco vers\nblack thorn\nbass line\nbad ass\nalife time\næĿ± æĸ¹\nâĢ¦ \'\nwild man\nu pre\nt are\nstroll call\nsoor aj\nsmart watches\nro tors\nradi ocity\nq army\nmi res\nmi ac\nme deiros\nmabu hay\nkrau thammer\njaz zed\nin ny\nhai der\nf dot\neli ka\nchal ky\ncelebr ant\nз аÐ\nvas cul\nsli braries\nsas ol\npyl ons\npom me\npal pit\nol factory\nmissing person\nkell in\ninf j\nfantasy land\ner j\nbeÅŁik taÅŁ\nb st\naw aaz\narraign ment\nwood ville\nsu priya\nseri o\nsapar li\nre va\npalm sunday\nkeen um\ngri eg\neye health\neast sussex\ndol or\nderers fc\ndand ridge\ncor gan\ncontr arian\ncomm ited\nblan ton\nathei strollcall\nam mon\nac te\nðŁļ¨ #\nðŁIJ Ģ\nãĥ ľ\nà £\nthe dream\nscon ce\nsc orn\now c\nn agu\nmort ars\nme sti\nmassi mo\nlat or\njohnlewis retail\nj world\nislam ophobic\nho ey\nglu tes\ned avis\nduf field\nboiler makers\nba illie\nac ampbell\nðŁĮº ðŁĮº\nwonderfu lindonesia\nu iowa\ntor bay\nshi geru\nsare coming\npu edo\nim printed\nhomeof cricket\ngh alib\ndrou in\ndi di\naprilfool sday\nðŁijĮ ðŁĴ¯\nwool lim\nto lex\nsynchron ous\nrag gedy\nquarti er\npenetra ble\nnew post\nk sdk\nh cr\nchar ds\ncall out\nca ip\nagu in\nzo ë\nz un\nyou ve\nurqu hart\nthunder clap\nsingle malt\nsequ ined\nmornin ge\nmor tis\nlu ga\nlib or\nli si\nken net\nkell ys\njail house\niqrar ulhassan\nham mad\ngrey joy\ngorge ous\ngi el\ndelle mc\ncun ha\n?? ?)\nðŁĮ Ŀ\nval lab\nv é\nsub surface\nsl its\nperson ification\nperfu me\nolympi a\nmik lan\nkel pies\njo ko\nh kane\ndoo h\ndialec ts\ncruisenor wegian\nconnach trugby\nbuc key\nan cho\nðŁĵ£ ðŁĵ£\nâĤ ©\nzak at\nwur z\nwestco aste\nvac aciones\ntel fer\nsch ou\nroll tribe\npinstri pes\non ine\nmusli mah\nleather back\nla ziest\ni drc\nfox la\nfis cally\never last\neuro vision\nela ar\ndream league\ncorn ing\ncarre ras\nbu ech\nbru den\nbridg north\nbrek ky\nbat ang\nacu ity\nwu z\nthur les\nthor ne\nshaw k\nshak o\nse gel\nres ins\nrajapak sa\nquint in\npurp lish\nmcgra dy\nk sl\njam meh\nilo u\nescap ism\ne well\ne mar\ndefra govuk\nconfigu rable\nbu dur\nblue bloods\nbecauseitsthe cup\naw en\nashraf ghani\nðŁĴľ ⾨\nvehe mently\nv ries\nun se\ntu tte\nstan wawrinka\nro lo\nre home\nrashi d\npre side\none pride\nole k\nn sh\nmug shots\nmu ggle\nma sia\nli ot\nju lexis\nhelleni stic\nham let\ngr ating\nforfe iture\nfat one\ndivor cing\nde porte\nbritish flowers\nbor go\nbb ca\nan sa\nÃŃ guez\nwor tham\ntr w\ntele phones\nsur plu\nsque aling\nsab c\nken e\nhu gg\ng ath\nface mask\nelastic search\ndaysun til\ncr t\ncheese burgers\ncast elli\nbusch gardens\nbu cker\nbhu tan\namber alert\nall llll\naccom od\nðŁĺİ ðŁĺį\nðŁıĭ ï¸ı\nwomenin biz\nwith her\nwa el\ntech talk\norang ery\nne ots\nim plant\nil ani\nha gi\nfool ery\ndonat ello\ndo sis\nde frost\nco host\nchristmas jumperday\ncham pa\nbreak age\nal so\nacademy awards\nac iam\nwar hawk\nse ys\nrodol fo\npizza express\npec toral\nmon str\nmag ome\nitz hak\niam stevent\ngeop ark\nfal do\nf fier\nembelli shment\nelectric vehicle\ndeliber ating\nde mille\ncat ello\nar yo\n% "\nðŁĺ §\nðŁĴ Ĥ\nworld bank\nwillnever getover\nuro vision\ntribu ne\nthu b\nsky lights\nre et\nol use\nmccoy dl\nmc bride\nly la\njohn shopkins\niceland air\ni vi\nge tac\ngam ut\nfu fu\ndiv ing\ndescar ga\nctv morning\ncorrup tion\nclint bowyer\nchar on\nbull i\nboney ard\nblind fold\nbe ca\nax e\nartist ically\naf ra\nðŁĮ IJ\num kc\nui uc\nten or\ntam sin\nski ff\nsi ar\nplo v\nphoto shopping\npeter head\npe des\nonline business\nno bis\nmum ford\nje bel\nilove sydney\ngy ros\nema baras\ndi mmer\nda hyun\nco xon\nas ds\naf ton\nword smith\nwhit by\nup with\ntuf nell\npi en\nnr j\nkak is\nhr va\nghos n\nget me\ngar of\nft x\ndeta il\ndemp ire\nbomb shells\nbnppari bas\nben chers\nabbrevi ation\nåľ °\nwoe fully\nway ward\nshizu oka\nsche ese\nqpr fc\nprosecu tions\npc g\nori enting\nnanop ore\nmon ta\nlimous in\nla ther\nkry stal\nhor ology\nh ks\ngeo sciences\ndelhi police\nalo gy\nwaz a\nupperdeck hockey\nshar mila\nse pat\nrock fest\nran ji\npd illon\nmusa shi\nmumbai rains\nmi zz\nmccand less\nmahesh wari\nma vin\nfol lett\nde young\ncon figuring\ncbc ns\nðŁĮ ķ\nye i\nwhat sup\nvivac ious\ntru tv\ntre sp\ntagh euer\nt veit\npat oran\nnswr fs\nmu mps\nmi reland\nleed sunited\ngau ze\nefferve scent\nde mont\ncham plin\ncanyon lands\nboss lady\nbo az\nat noon\n⼠ªï¸ı\nvel u\nu wa\nter a\nsportsc aster\nsme g\ns loop\npininf arina\npe ori\no ire\nmur r\ngla de\nflood plain\nesri uc\neco logically\ncier ra\ncar bo\nbu stos\nb dr\nun wrapping\nta stier\nshop online\nsch lo\nsau dia\nrun r\npod squad\nnm pol\nmoccas ins\nmix ta\nmi shaw\nmam oru\njin der\ngin obili\nf kin\nep as\nbu z\nbel tr\nbar ran\nav ance\nage orge\nzx spectrum\nthor o\nox en\nnoble man\nmobil ised\nmin ato\nmanche go\nil lop\nhel ix\ng local\netch ings\nenergy transition\ndj b\ndead beat\ncul p\ncor ps\ncheap ly\ncarru thers\nbig boss\nb ny\nar ray\nand u\nack man\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃ\ntsu basa\nstrong women\nriver bend\nreale stat\nnvi diage\nn abc\nme dea\nko el\nkefal onia\nkar una\ninvo icing\nigu o\ni ola\nham strings\nhah n\nfresh man\nflat mate\nferre ts\ndi ppin\ndez bryant\nde regulation\ncrab apple\nbo va\nari ki\nðŁĵ Ģ\nä¸Ģ æľ¬åĭĿè²ł\nà¸Ļ à¹Ģà¸\nvijay fan\nt du\nsli dell\nsi won\nserv ing\nsam os\nsa ker\nriti ka\nnaw ab\nmer le\njar rod\njames gunn\ni anc\nhiro shige\nhil t\ngreen sburg\ngilli brand\ngibber ish\nfire and\nfin ch\nbing ley\nbi di\nbati ste\n» ,\nwiden er\nwash ere\nwait list\ntraver sing\ntooth ache\nsr r\nspir aling\nspace port\nra hane\nprithvi raj\npower line\nplumme ted\npien aar\nmo ven\nmac i\nlat oya\nkil ly\ngu thealth\nex olu\nemp ir\nec ake\ndirection er\nðŁĺįðŁĺį ðŁĺĺ\nz ta\ny eng\nted der\nsurfri der\nstone street\nmicro organisms\nmar ra\nman ly\nlovel i\nlee jongsuk\nlabra doodle\nhy at\nheen an\nhar v\ngwyn ne\ngalvan ised\nalam os\na ami\në¬ ´\ntoby mac\ntheno ise\nstronger in\nselfie with\nse edy\nsc alex\nsaurabh raajjain\nq ash\nnew girl\nmccut cheon\nmadewith paper\nlo le\nhe ure\nfet tered\nel it\ndur in\nde cs\ncoffe elovers\nchil tern\ncal aver\nble ach\nad block\nac wri\nworri some\nwi than\nvic enza\nushu aia\nunder lines\ntax able\ntanzan ite\nt elle\nsa ith\nl wa\nkr ant\nj anc\nharne ssed\nhadri answall\nh isa\ngw p\nfam itsu\nex tran\ndux bury\nd aci\ncow boys\nair tattoo\nag io\nacqu ittal\nsouth african\nski jumping\nshan gr\npostp onement\nplo s\nparo dies\nnr dc\nmar z\nlynd hurst\nle ón\nki ele\njo res\nhb k\nhb g\ncoconuto il\ncar bone\n- [\nyaz idis\nvijay an\nurban sketchers\nsub traction\nna je\nlin dam\ngran it\ncourage ously\nchillico the\ncarpen ter\nbarn stable\nagu y\nwo y\nur r\nt sun\nstar ting\nro ssy\nprin cely\npin c\nmak si\nluty ens\nker rie\nke tones\nit was\nisab elle\nilove dn\nhubb ell\neuthan ized\neid aladha\nci h\nchapp ie\nce ans\nanthro con\n! ðŁĺĥ\nzar ry\nwb ff\nwag amama\ntravel er\nthi st\ntbl st\nsleepy head\nshau kat\nscar ry\nqu orn\nporter house\nnu ck\nmu gen\nlet splay\nl mt\njo eye\nhereford hour\nd row\nbunny men\nbra ham\nblow fish\nbiop la\nbee zy\nba char\nam na\nà© Ģ\nyemen is\ny ola\ntr b\nsur tees\nsc af\nsa quon\nsa j\nquintess entially\npertur bed\np mg\nottolen ghi\nno fthe\nnew ness\nn elli\nmar ish\nk illu\ng tas\ndari o\ncan ales\nadi ge\na thology\nwich it\nvos ges\nsweet corn\nshear water\nschul te\nsch uh\nruleof law\nre played\nland ing\nlampp ost\nhyder abad\nfo co\nen listing\nelectro pop\nd fm\nbuoy ant\nbewit ching\nbethen ny\naryn go\nac offee\na world\nun cool\ntl chat\nther u\nswin don\npang asinan\nox ing\nne stl\nmp s\nmic o\nmb it\nlet them\nho ge\nfore sters\nfl aring\ndivin ely\nde ano\nbron n\nbl m\nand az\nai ai\nty us\ntn bc\nst j\nsnu bs\nshun ned\nsee ya\nrodri gue\npi ppi\nmish ka\nhoro scopes\nharb ors\ngge tt\ngame over\nfl gov\nemp r\neldr itch\nclemson fb\nch ri\ncate rers\ncar ine\nban zai\nauthentic ated\nano ka\nali d\nalex oloughlin\nadam schefter\n! ?!?!\nwere ld\nwa il\nrock it\npa stic\nle by\nkel pie\nj ln\nfe tch\nd afc\nðŁĴ ·\nðŁİĤ ðŁİĪ\nz ild\nwolf hound\nwa st\nthe talk\nsar geant\nno reen\nmom mie\njor is\nhen ch\ndoctor s\ncom ida\ncolo red\naggreg ates\n⼠ħ\nâĶ ĥ\nw ll\nto ka\ntipper ary\nsuper villain\nshou se\nsach sen\npracti sed\npi ons\npen sa\nnk la\niq baale\ninfan til\nhuffle puff\nhomo gen\nher ders\nhaz lewood\nha q\nflyair nz\nelg ato\ndu chy\ndemp ster\nday na\nd aga\ncp f\nbiele ma\nald ana\nmass y\nleather head\nkur z\ni ar\nh cc\ngra sping\ngan nett\nexplores ask\nðŁĻıðŁı½ ðŁĻıðŁı½\nÙ ©\nvox el\nvig go\ntw ay\nthunder cats\nthru way\nstar ke\nshepp ey\nplat ts\nno val\nk pr\njohn cornyn\nh sf\ngu ppy\nfitzro via\nfe stuk\nenfor cers\nde con\nchall ange\nbodh is\nbet ch\nbeach comber\nðŁĶ ¨\nun corked\nterr aria\nstone house\nslee povers\nshe th\npuls ating\npan os\np of\njulie plec\ngodal ming\never more\ncli pse\ncal les\nbio blitz\nbi olo\nbi ggins\nbang tan\naw nings\nali stair\nîģ ĸ\nypsil anti\nwtn h\nwe ver\nvarun tej\nsi willnevergetover\nsan fran\nsab athia\npers and\nogil vy\nne opla\nnand it\nman no\nlac a\nkar r\nim plantation\ni big\nelin or\ndu bb\nar dro\naf ca\ny ric\nwest cork\nvic ks\nvaleri o\ntrin am\nscep tre\nrusty rockets\nosc uro\nno daysoff\nkvy at\nkhu x\nic ha\nho ge\nhaz are\nhan eda\ngugu dan\nfr mr\nfireup chips\nfer mil\nfay sal\nbrit ann\nbran stad\nben del\nart inez\nam bar\nak wx\nw smv\ntow ski\nti am\ntam many\nstep mother\nre dre\npas chal\nn fd\nmotor happy\nmarion ette\nlitt lec\nkeeping it\ngri eved\ngl r\nfit a\nf of\ncoloni als\nchevro let\ncanop ies\ncan ale\nad z\nðŁIJ Ĩ\nðĿIJ ¨\nye aren\nultra book\ntruck load\nto tt\nt gr\nsx c\nsick o\nscru bber\nsant ander\nrepubli k\npost mates\npic stv\nperovsk ite\nmost wanted\nml g\nme k\nlabor dayweekend\nkir t\nka f\nheart breakers\ngym khana\nfl ange\nes rc\nd pd\nbush els\nban field\nðŁij¨âĢįðŁij©âĢį ðŁij§âĢį\nula ganay\nthen ational\nsp ly\nshari ah\nsh fly\nradi ated\nordin ances\noffe l\nmar bling\nlink up\nlike me\nke effe\nk tn\njack daniels\nher m\nhenri ksen\nhen shaw\nhan sa\nguaran teeing\ngi ster\nfin minindia\ndest abil\ndental care\ndad ar\nd tg\nbc ndp\narchite k\nà® °\nvincen nes\nspino za\nsold ado\nsale sian\nmal uma\nlyn sey\nhit s\nfamil ie\nc ingly\n> :)\nâĺĿ ðŁı¼\ntam ils\nphoto shop\npe art\npalliative care\nmar tie\nlagun itas\nknuck lehead\nj pop\ninf er\nep am\ncor ded\nche mise\ncal atra\nblo ons\nðŁĺįðŁĺį ðŁĺĺðŁĺĺ\nz ima\nww r\ntour n\nt sub\nsinu log\nr na\np ith\nmarj ory\nlisten in\nl gus\nkil im\nhome ostasis\nhal lett\nguil foyle\ngri g\ngo har\nging i\nfre ts\nca ked\nbul b\nbike packing\nband anas\nally son\nag gro\nwag oner\nv te\nurban i\ntu tus\ntoo faced\nthe musketeers\nten et\nspoo fing\nse es\nsan fl\nqu ash\nprism acol\nper ton\npe ddle\nmk z\nmer cs\nkon ia\ninci dental\ngimm icks\nfur r\nerkenci ku\ndra wn\ndevil s\ncont in\nburkin afaso\nbelaf onte\nðŁ¥º ðŁ¥º\nwit ting\nstef ani\nsat com\nole h\nkru l\njoshu atree\nhy omin\ngest ational\nblack bear\nbird watching\nbai lee\nare al\nak as\nðŁĩ¾ ðŁĩª\nãĢ° ãĢ°\nyaku bu\nty n\nthin nest\nsand bach\np msl\noo da\nme so\nmaster node\nmahin dr\nla ferrari\nice hogs\ng pp\nfor ney\nbrant ley\nbl ick\nari za\nal il\nðŁĺŃ .\nðŁĺIJ ðŁĺIJ\nðŁİĥ ðŁij»\nwicke dly\nw fan\nthecomedy store\nta pos\nsensu ous\nse ul\nrol ly\nre sent\npon ta\npleas urable\non el\nmilitary history\njhan si\nje wski\ninfl amed\ngod like\neic hel\ndres sup\ndist al\ncru d\nbun gle\nbol sa\nboiler maker\nas ch\nabo ys\nà© ģ\nzam ani\nur man\ntic ino\nthegood wife\nthecat reviewer\ntaylor caniff\nsri vastava\nriver boat\nrandom actsof\npen e\npc sos\nor zo\nny ias\nny ers\nmontp elier\nmigh tier\nla autoshow\nku li\nkal ani\nju ta\nin comprehensible\ni believe\nhunger ford\ngam boa\nfore sth\ndee gan\nday break\ncr ouse\ncarp fishing\ncan i\nboy zone\nblo ating\nbil as\nbharatanen enu\nan ac\namo red\nðŁĸ ķ\ny kj\nw mas\nti red\nse apor\nro i\npe tt\nop kins\nmulti sport\nineff able\nin capac\ni ji\nfat ass\nes lone\ndocument ary\nclip board\nani mas\nang sty\nam ou\nag irls\n---------------- --------\n ¼\nucl an\nthe witcher\nthat awkward\nshut tered\nsen ergy\npres stv\npor scher\nmis aki\nke zi\ninser ting\nha veli\ne ap\ndispo sals\ndi keh\nda egu\ncur rants\ncro pper\ncharol ais\nc una\nas f\nyorkshire day\nvilla iny\nve ga\nruben stein\nrack space\npr onged\npon i\now ings\nnikol ay\nne sh\nmu mu\nmck end\nma ka\nly s\nkis sing\nk offee\njon jo\nindi ec\nincon spic\nfl atten\nex h\nessential oil\nec are\ndock ery\ndis illu\nd wan\ncoer cion\n^ ___^\nsuper gt\nsne ij\nreal mike\npar taking\nmichael b\nman cha\nlak me\njab al\ngreen s\ndoyou know\ndis ation\ncur tain\ncat skill\nbelieve tour\namalgam ation\nag itated\nun registered\nsl at\nsha ho\nou thouse\nmel in\nku stom\njc poa\ngrenfell tower\nes ar\ner yn\neff lu\ncau very\nc sa\nâĸ Ī\nur is\ntraver tine\nthevoic eau\nteen top\npry de\nple isto\npan tries\npack the\nor r\nntv kenya\nmahin dra\nkar los\njuli us\nih ana\nharle quin\ngi fu\ngen stein\nder ails\ncoted azur\ncontrol now\nbi kin\nbc ferries\nbb ca\nðŁĺĶ ðŁĺĶðŁĺĶ\nðŁķ µï¸ı\nðŁĮ§ ï¸ı\nzulfiq ar\nzero es\nwester nu\nvit iculture\nver don\nteen mom\nsun oco\nsnat chers\nshorth and\npo real\nnet z\nme do\nmark ruffalo\nlo kesh\nled ley\nknit ter\ninsta story\nfishand chips\nfat i\ndi mon\nbk b\nartstation hq\nvis cous\nrehabil itated\npin kett\nnot meus\nne scafe\nj ka\ngareth bale\nco ch\naustral asia\nale ssi\nadi pose\na ou\nðŁĻı âĿ¤\nà¸ļาภĹ\nviz sla\ntw n\nto pi\nschwar tz\nscep tic\nred is\npo sto\npieter sen\nn sa\nlu mi\nfavour it\nde throne\ncy d\nyoun gh\ntan ked\nstrick er\nstrategi zing\nsho pee\nraj ah\nnic om\nmarch ant\nkam ra\njoong ki\nis ur\nipad games\ni fu\ngreen space\ngen cy\ne sport\ndin c\ncru k\nbis sell\nbec ca\nay t\naq ours\nandy bvb\nðŁİ Į\nÅ «\nwin ked\nwelling borough\ntwitch sharer\nseg all\nre cht\np tt\nor dia\nopen text\nmatthew daddario\nlast day\nkat sucon\njust ins\ninvo ked\ndk pol\ncac ophon\nbre yer\nbeck en\naz ar\nars ène\nari o\nageof sigmar\nvillalo bos\ntorch light\nsaltlake city\npon ty\npiece of\nnw l\nne gev\nl ente\nl ci\nk wok\ne gh\ndise mbar\ncor sage\nconsi sten\ncharli ec\nbow ness\nblo at\nbel tand\nantic oup\nðŁĴĵ ðŁĴĵ\nshul man\nsho ver\nsha shi\nretire ment\nremo tes\nre wa\nr ci\nprotec tionism\nob d\nmr l\nmountain side\nmit el\nlet stal\njami emc\nhil de\nhey its\ngerman wings\nflex es\nbush el\nblu dge\nand hi\nage ism\nab owl\nwhi ley\nun reported\nter prise\ntam pines\nsom bre\nselfie for\nsd mf\nsciencen ews\nradi ators\nperiodon tal\nny la\nnascar hall\nmer z\nmechan ical\nmade of\ni wish\ne akins\ncapi strano\nangel ine\nai ja\n?? !!!\nty ra\nth aroor\nseat ac\nred men\nred fored\npl b\nmodal ities\nli ms\nincroy able\nhol lows\ngu ing\nflann els\ncu miklan\nchel yab\nbjö rn\nbb its\nðŁ¥ ŀ\nwill ingham\nv tech\ntrek kers\ntr al\ntel cos\nst wee\nrepresent in\nred hot\nnepal quake\nnanomat erials\nminn elli\nlau ter\nkon ta\nkail ua\njo cks\nhi eld\nfanta stique\nfal ta\nechi dna\ncler gy\ncl oned\ncalatra va\nbe prepared\nbat ts\nbak o\nanch al\nà® ®\nyu u\ntennes see\nta chi\nsnap matic\nseam stress\nsab lon\nrie del\nri kers\nrakshab andhan\nqu asar\nnach baliye\nmorecam be\nko koro\nepi k\ndi marco\nday sout\nblum house\na vision\nìĹ ´\nãĥĥ ãĤ¯\nvish alkofficial\ntho th\ns girl\nro zier\npainting warhammer\nobserv ant\nnie wski\nl ous\njan ey\nitch at\nge bouw\ngam elan\nfin nan\nday star\ndance moms\ncrou ch\ncity police\nch up\narchi medes\nam aka\nalien ated\nworld vision\nusa af\ntuni sie\nre constructing\npag li\nover seen\nn lr\nmin of\nil ish\nglu m\nf pd\net ze\ne bu\nde ft\nconqui st\nbc storm\nbag ue\nal te\nah our\nãĥ Ħ\nzi en\nwork life\nva ing\nur inals\ntren to\nsou ness\nshopper shour\nprovi dent\nnew ood\nle sean\nle hill\niron wood\nic ab\nib t\nia af\nha pless\ngar ag\nfibro ids\ndishon or\nday challenge\ncurve ball\ncrow ther\ncn f\ncataly st\nbal to\nà Ł\nvel aik\nsu ey\nsi ed\nshav in\nsant as\npro prie\nkeen ly\nj ima\nextre madura\ndifferen ce\ncham an\ná ħ\nzor an\ny ari\nx w\nwh acked\nun diagnosed\ntrade marked\nshrun ken\nsap ling\nrevel stoke\nmu la\nmarqu and\nman irat\nir reverent\ninternational yogaday\nhai kyuu\ngl or\ngh ari\ndone channel\ncau k\nawaken ings\nventil ating\nt list\nsu wan\nsam ir\nrain drop\nquat ro\npro fi\npolar bear\nnormali zation\nmcle more\nmb as\nmath ru\nmar ino\nman ya\nmaic hard\nlittlebig planet\nintermedi aries\ni hm\nher rick\nhel les\nemer ge\nconsequ ently\nay az\nallga ier\nvote themout\nvisco sity\ntu mp\nti ber\ntar ps\ntake uchi\nt illery\nspecial offer\nshop now\nparmigi ana\nparisi enne\no sso\nminneso tans\nmicro chipped\nmerci lessly\nkaw an\nkar li\nindi gestion\nin vert\nhan uman\nhali k\nguar dsman\ngood tobe\nger ani\nero dgers\nemer cury\ndesp ised\ncu pof\nbir n\nbbc wm\nb town\nðŁIJ Ĵ\nws g\nwi thered\nwho vian\nvel d\nthal le\nt ach\nsub standard\nstock dale\nsal ar\noba femi\ng ine\nfal ter\ndisal lowed\nbook blog\nbl v\nawesom en\nâĢĶâĢĶ âĢĶâĢĶ\nyellow jackets\nwoo ow\nwater brew\nun tapp\nspeed test\nsin action\nsch elling\nsa ic\nru pi\nre fried\nline sman\nk se\nfi v\neuphe mism\ndo bie\nbur go\nanupama here\nåĪĨ ä¸Ģæľ¬åĭĿè²ł\nvol te\ntruste d\nstates men\npre release\npag ina\nosp rey\nop reps\noec d\nnorth view\nint ol\nhow ser\nhaw i\nevapor ated\ncros by\ncor rer\ncine mark\nbur ling\nbiom es\nbhag wan\nbedand breakfast\nb union\naure us\nam z\n⼠·\nwre kin\nwinter green\nwalang pasok\ntraf ford\ntn ick\nsun burnt\nsf jazz\nremembrance sunday\nr tn\npi rie\nnor n\nnew ts\nla ika\nknock in\nju mi\nfertili zed\nf ns\nel ang\nchange over\ncanandai gua\nargon auts\nur s\nso cin\nske wer\nsioux sie\nsince rest\nsaif alikhan\njav anese\nfe sto\ne ren\ndog gos\ndescan so\nbody building\naid s\nyu to\ntab ata\nstry der\nse red\nscre ed\nphon ie\nphen ia\no er\nmach a\njeong yeon\njen nette\nin saf\ngloucester rugby\nda igle\nbollywood news\nbiop rin\nbay nes\nautumn watch\ní į\næ° ´\nãĥ ½\nusc ap\ntol u\nthe score\nthe brave\nover used\nmyo cardial\nku biak\ngraph y\nfast net\neth ylene\nenjoy life\nda ikon\nchir p\nbe inte\nur vashi\ntro cks\nshi ki\nse id\npri ya\npasteuri zed\nma en\nlu gan\nle ann\nho ddle\ng we\nfran zen\ndyk stra\ncar ding\nbum rah\nberk shires\nbed spread\nax ton\nafremo v\nк а\nwe ire\nse my\nro sin\nra es\njor din\nflo pping\naffin itweet\nabse iling\n; ).\n& ,\nðŁĻĭ ðŁı»\nys f\nwake man\nteign mouth\nsyring es\nsy p\nse kar\nsav ind\npo co\npanther a\norient al\nmyo pia\nmind less\nmed twitter\nman se\nlog on\nlis ch\nju wan\ninter active\nintegr ated\nha pha\ngigan te\nen compass\nd ce\ncr ane\ncol ate\nchil is\nchelyab insk\nbridg it\nashwin i\nalt press\nðŁĻı ðŁı¿\nyoak am\nwoo zi\nvets get\nvetsget scanning\nspin nin\nsa ida\nreptil ian\npinot age\nok ayama\nman hunter\nkle pto\njarry d\nip sum\nii it\nhi rez\nger rit\nfr ill\neuro millions\nc mm\nadic hie\nðŁĻı #\nðŁĺ ¾\në ł\nthur t\ntheli ght\nstra bane\nsko kie\nsk al\nrid ley\nre introduce\npro ge\npaul ding\nopen studios\nli se\nla velle\ngo stars\nev ille\nename led\ncorpu schri\nclau de\ncir que\ncin é\nchild like\nbobs burgers\nbi ersack\nal jaz\nwen lock\nthen ame\ntele portation\ntaste the\nsomething new\ns je\nricky pdillon\npy l\nox in\nom kar\nnau ld\nmile sdavis\nlaw al\nkha bar\nke mang\njor die\nhomo sexuals\neuro stat\nd do\ncor rhi\nala qsa\nðŁĨ Ĵ\ntransiti on\nni ge\nmx n\nmam iya\nm ki\nkings ford\nhe yyyy\nformul ate\ndar dan\nd reading\ncb sphilly\ncashi ers\nbra ver\nater alism\nabbo ts\n] \'\ná ¥\ntrick ery\nter me\nspi sil\nspace time\nsimple mente\nsc ac\nru sa\nra za\nore tti\nmon ico\nmax imo\nla ia\nholt by\nham ann\ner is\nener gie\nduf ner\ncha eyeon\ncanap és\nab t\nvo re\nthread less\nstorm watch\nshre w\nre loading\nph leg\nlewin sky\niu fb\ngel ly\ncross ley\nam iller\nal pert\nว ว\nzand voort\nworship ful\nwoman sday\nwg tn\nultr amarathon\nty la\ntat ty\nsupportour troops\nnumer ic\nnom en\nnewsp aper\nnet book\nmeridi en\nmagome dov\nleav itt\nislam orada\nflouri shes\ncook off\nconvin cingly\nchoco bo\ncamero ons\nbo ggy\nawa ke\nallfor one\nai fe\nà¸ĻภĹ\nwel comeback\ntrit ons\nschoolboy q\npew pew\nmor onic\nmail day\nlaure us\nk sr\njer maine\nj rn\ngun nery\new b\nbe is\nap ap\nðŁļ £\nushe red\nswild cats\nsp here\nsecon f\nra jan\npun y\npi po\nma ffe\nlesp aul\nlar naca\nil orin\nhu guen\nhate m\nfor mosa\nchri sd\nc jp\nbla zing\nbarak at\nah t\naga th\nac cts\n` `\nìĶ ¨\nwester ners\nvilla in\nun responsive\ntu scu\nsof ia\nsli ther\nsh mu\nsen doff\nquarri es\nninj atur\njaff na\njacqu es\nintensi fication\nil ang\ngu b\nglad bach\nero ding\nenv agency\nelec t\nci pes\nchat el\nca ñ\nbtsx amas\nam h\naber nathy\nðŁĹ ¡\nta ze\nsthlm tech\nstein meier\nsing led\nsal ta\npleisto cene\npix abay\nmel k\nma theny\nm hu\nintere sting\never green\neng l\nem sc\ncz w\namir kingkhan\n" @/\nwhats next\nthe empire\nswith out\nss as\nsay onara\nsave d\ns women\nrite sh\nrepleni shed\npo il\npecu li\nlu vin\nin or\nic ac\ne os\ncryp tom\ncra p\nch evening\nbristol uni\nboe heim\nbewil dered\nzano tti\nye wear\ntre acy\ntc w\nscu pp\nsant amaria\nrc car\nh gc\nfaith less\ndo como\nch ug\ncal oric\nbureau cratic\nanth apuram\nyeg traffic\nwellcome trust\nwe ve\nvac aville\nump iring\nson unig\nroad america\nqu itter\npic story\npag en\noak en\nmiro slav\nmasterche fuk\nlou se\nlon eliest\nhar ney\ngal eri\nga shi\nfi fam\neti ha\nd tr\nbab o\nabi ola\n. $\nwit ching\nwi erd\nwarner bros\ntou rette\nseung kwan\nrefriger ators\npost al\npics depot\npar an\nmega force\nm golf\nle imer\nl wb\nkhe dira\nje y\nha asf\ngra hn\ngerald ton\nen actus\neat drink\ncat en\nbrat z\nbian con\nb ge\nwha dd\nw so\nthe food\nsubbar aj\nsty lo\nsecre tion\nr do\nmichi el\nko b\nhay ashi\nhaw keye\nfull screen\ndinwid die\nde fund\ncullin an\ncloud less\nbl g\nãħłãħł ãħł\nwr on\nweight lifter\nteam dcs\nte ve\nstudent s\nsr ry\nsan key\npinec rest\nmu sta\nkas ama\njan ath\nfren z\nforthe win\nev ga\nbath time\nauto zone\nall out\nafter work\nðŁıĪ ðŁıĪ\nz epp\ntempe h\nsiob han\nsho hei\nrez nor\nrarebir daler\npeter sfield\nnon binary\nna hl\nmer gency\nkar sh\ngu er\netsy handmade\ndin the\ncrock ery\ncri ss\nbroad sheet\nblack town\nbalac lava\nathin ai\n" @.\nâĻ ©\nwor rell\nwal le\nstpi india\nro mi\nrel ink\nq ty\npent land\nngin x\nmo xley\nmar ten\nmar cos\nm sla\njar row\nin ton\nhuff po\nhe ave\nflow ers\nfc cincinnati\ndr kumarvishwas\nbrain injury\nblue planet\nbed ded\nann u\nanag i\nâĢİ #\nzen desk\nwin dle\nven ue\nthe color\ntg v\nt bex\nst pauls\nsan dow\nparish ad\nof cal\nnorth coast\nmujahi deen\nmu mm\nmiit omo\nlin ce\nksd knews\nkat ona\njud waa\njou le\nim all\nheart ening\nhead canon\ngou rock\ngolf course\nfan photo\ner of\ndro cks\ndime bag\ndavid lynch\ncur itiba\naz ov\naft union\n" ]\nâŀ¡ï¸ı :\nâĺ Ķ\nwil lesden\nwg tn\ntrek kie\nsx swedu\nsta vern\nsh f\nru mbling\nre counting\npot ence\nmo stra\nluch alibre\nlower show\nkab ila\nhir ani\ngavin newsom\ndur r\nchicag om\nbi ma\nber ni\nbab oy\narri e\nðŁĻĥðŁĻĥ ðŁĻĥ\nاÙĦ ÙĤ\ny pj\nvis itu\nv pl\nphil omena\nper pend\not sego\non zo\nn bi\nmetabol omics\nmac ri\nll n\nkap i\nju ries\nindiscri minate\nhosse ini\nhal vor\ngoldeng irls\ngargo yles\nf bu\nequ ates\ndu moulin\nchi ma\nchar is\nal derson\nâļ½âļ½ âļ½\nâļªï¸ı ðŁĶ´\nww wwww\nvick ery\nu lus\nu eno\nspol itics\nsol aire\nso hio\nsar ang\nsaf ter\nprotec tion\npeabo dy\nmol lie\nl fg\nkail ash\nk kriders\nitu ate\ningle se\nhand sets\ndrag way\ncar pedi\ncar ib\naz el\nzag ato\nstreet z\nps g\npl atten\npal las\nmapu tra\nhoo ky\nflame thrower\nelly wood\ndir tb\ndig ans\ncli o\nchal ce\ncap ris\nbook oftheday\nam ra\nam ite\nwor thing\nwis c\nwho soever\nv bc\ntom eter\nstac i\nsouff lé\nshoul dered\nship wrecked\nsethu pathi\nsch loss\no dern\njess a\nga fe\ng cu\ndar gah\nab dou\nðŁĴĽ ðŁĴĻðŁĴľ\nwomen and\nvern is\ntam asha\nre pr\nrarebirdaler tuk\npoiti er\nlive install\nle ly\nkla ssi\nkha i\nd bd\ncl in\ncann ery\nbirch wood\nbeck er\nat ara\nanamor phic\namerican horrorstory\ntur bot\nthunder dome\nter remo\nsize able\nr fd\nmus ics\nmask ell\nl bl\nkap adia\ngam bian\ncar vajal\nbl unders\naker man\nwi the\ntembe akenya\nsi mar\nri jiju\nq w\npress o\npr ins\npad dlers\nmorgan stanley\nmali ki\nlin ne\nin j\nhistory museum\ndat af\ncou lis\ncor onal\ncompla in\nbe gum\namo e\nai me\na hier\nåĮ Ĺ\nwc i\nve ster\nuni vers\nuil state\nser kis\nr dg\nohh ill\nni gg\nne sco\nmccla ren\nli zar\nk het\nindi annavy\nhis ense\nfi ably\ndo ze\ndigiti zer\ncardiff city\naw ssummit\nas ami\nãģ ¿\nâŀ ¨\nxk cd\nw ounding\nste ff\nni shi\nmun ger\nmil ks\nmanife sts\nman ju\nfront lines\nfro id\nfri ended\nfall colors\ndu san\ndream cometrue\nda iries\nd nc\nп ей\nzer man\ntomor o\nthe aviators\nsing ed\nshelby ville\nsch wab\nport lao\nplov div\npi pa\nover coat\nmuk ka\nmarke table\nma zza\nk lum\nis as\nginu wine\nfortun er\ndur g\ndri vel\nclaus ura\ncardiomyo pathy\nbrisban eroar\nbo des\nbak ery\nb dl\nwo donga\nwi shi\nutr ition\nther ain\nseman gat\nsali h\npo catello\np â\nolympu suk\noc kets\ninci sive\nfas cial\ndr dre\ncushi oned\nconcert photography\ncathar tic\ncarol ina\nc ze\nbunde stag\nbas se\nban on\nb fr\nb afc\naltrin cham\nwestcoaste agles\nvictor ias\ntar aba\nrock smith\nrizz oli\npe cking\nmy lan\nf pi\ndazz ler\ndav es\nconjun c\ncal f\nassoci ating\nworld book\nsafe ties\ns fo\nr jal\nnovel a\nmonash uni\nmi do\nmeth amphetamine\nluci d\nle mond\nk bo\ninnis fil\nglen core\ndu sh\nbuck ingham\nbo ssed\nbhu shan\nbb cdp\natlantic city\nac kie\nðŁ¤© ðŁ¤©ðŁ¤©\nçľ Ł\nwasps rugby\nus fs\nur umi\no vid\nmonster hunter\nma aa\nkant ar\njer om\ni photo\nho si\nbeefeat er\na ef\nðŁĩ¨ðŁĩ º\nðŁ¤ Ŀ\nwater stone\nvit ili\ntail gat\nsqu es\npro phy\nmendel sohn\nlazy sunday\nkaizer chiefs\njoh o\nilli ps\nhau gh\nha kan\nfortn um\ndro bot\ndo wager\ndo ily\ncfis d\ncanon photography\nbry son\nbri erley\nan sible\nam persand\ntall is\nsummer holidays\nsof icial\nsa wing\nriver bed\nq mul\npo zo\nonen ation\nnah j\nmon davi\nkop p\nh db\ncolumbi a\nco burg\nbar rell\nbankholiday monday\nas sn\nang ara\nandy warhol\namend i\naffili ations\nabsen ces\nðŁĴªðŁı¼ ðŁĴªðŁı¼\nâĶ Ĥ\nwin sor\nvictor ville\nuk awa\ntor sion\ntau t\nsport sin\nski ed\nshab ba\nsab in\npopul ace\nnir up\nmari elle\nli mping\nkaohsi ung\nhigh ly\nh fa\nforç abarça\nflam in\ndon is\nde iro\ncharacter ize\ncay o\nb he\nano tha\nach o\nðŁĺı ðŁĺį\nwind proof\nuw g\nup lifted\nun tv\nshum pert\nos oph\nmr kt\nmi amic\nme dev\nmaser ati\nlevit ate\njack s\ngr at\nfru tti\ndee ks\ncor oman\napar k\níĶ Ħ\nâľĮ ðŁı½\nyor ku\ntra fic\nsur charge\nstro gan\nster o\nste acher\nshad ers\nru tte\nroadto omaha\npo dge\nou trigger\no wo\nnarrow boat\nmu ggles\nmo hun\nket chikan\nkawar tha\nj cm\nine scap\niguo dala\nhang gang\ngra do\ncolle n\ncn h\ncla sse\ncir co\ncar afe\nboon docks\nðŁ¤Ķ #\nwheel house\nout crop\nnith ya\nni hil\nm per\ngad v\nd rick\ncowh erd\nclear view\ncatalo gues\nbit torrent\naf el\nyo be\nwrong ed\nu maru\ntom s\nstat ler\nsle eds\nsal uki\nropp ongi\npi ston\nnot so\nna ilers\nheterogene ity\ngra sse\neddie hearn\ncle e\nbau delaire\nyellow ston\nvintage fashion\nur mston\ntrevor noah\nti veros\ntar yn\nsul ley\nqot sa\npay ne\nno wak\nnevers ay\nn zo\nmedical cannabis\nmagell anic\nkeepit inthe\ning rained\nin l\nim penetrable\ni fr\nfor u\nflouri shed\nem mam\ne steel\nba ikal\nasse tt\napp development\nal con\naj ag\nzo on\nv anya\nshe kar\nschizophre nic\npp pp\nnew books\nmon real\nmight ily\nman bij\nlau trec\nke eling\nho omans\ngod smack\nd vi\nbo gut\nbene detti\nau ma\napprehen sive\nðŁĴģ ðŁı¼\nwoo bin\nsof ig\nshepp arton\nsa ira\npro t\npetit es\nms gr\nmaddie ziegler\nfu zzy\nfu kin\nf te\ncheck lists\nc fe\nau der\nanimal planet\nyas achi\nwan n\nti poftheday\nsubsi stence\nss a\nscrat chy\nmor oni\nkle z\nestre llas\neg f\ncreed ence\nconsi dine\ncandy man\nbull frog\nam ash\nðŁĮ ¤\nØ§Ø ª\ny assi\nspri ze\nsick ly\nsab s\nro we\nro sco\nplumme ting\npi ven\noooooooo ooo\nni rav\nna bel\nmoo cs\nman ors\nloit ering\nlib dem\ngi acom\nerik son\nden bigh\ncur cumin\nbi har\nar ob\nac cc\n¿ ï¸ı\nwall st\ntri but\nsuscep tibility\nsgo fficial\nre solves\npig gott\np end\nmb aa\njohn nie\njob sin\niri global\ninqu inn\ngav askar\nfl amed\nes ss\necc mid\ndi acon\ndetroitbecome human\nc cio\nbronco scountry\nberg kamp\n" ðŁĺĤ\nyach ty\nsurvivor ship\nst itt\ns open\npt sa\nmo er\nlec o\nkgw news\nhel la\ngrand national\nett one\nesthe tics\ndent ure\ncorn meal\nbt f\nbeat plasticpollution\nani sh\namand ak\nðŁIJ¶ ðŁIJ¶\nta pa\nso iled\nshou trts\nnol a\nno sh\nn wan\nlove me\nli zz\ngene sis\ngas ser\ngag ner\nfre donia\nfa q\neuph onium\ndissi dents\ndev t\ncol angelo\ncirrho sis\ncas sia\nbr ack\nap ink\nadverti ses\nпей заÐ\nyo lo\nu is\ntay tay\nsub titled\npar se\nny ce\nno ve\nmor zine\nmar imba\nmac eo\nlanc er\niam beckyg\ni know\nh ml\ngo lic\nexoner ated\neco chic\ndis agreed\ncy non\nbruden ell\nðŁijī ðŁı»\nwin sor\ntv o\ntul la\ntranqu ili\ntown home\nsport media\nsel ig\nsebasti en\nsa jj\nresili ent\nre joint\nr hum\noneminute briefs\nna oki\nke shav\nkam chat\nkah f\njeff lemire\nco rel\nbo gen\n... ??\nðŁ¥ ļ\nwish in\nwild ness\nwe bbing\nwales online\nvent ana\ntrash can\nspor tage\nna it\nló pez\nirr fan\ni ago\nhl hockey\nhad dish\nfug itives\nfree stuff\nf bm\ney ck\nbi mini\nanakar ylle\nail ment\nacadi ana\naal borg\ntae il\nstylish ly\nsaran ac\nrepublic an\nlinke din\nl na\nkirk ham\ngor ams\ngoogle edu\ngetty sport\nener gi\nding ell\ncom eau\nco pes\nclimate march\ncal ver\nbro d\nas mara\nab j\nðŁĵ ¬\nาภ¡\nпейзаР¶\nw dsd\nvaing lor\nstap hy\nsoo m\nrangra siya\nra bb\nprie bus\npre f\npessi mism\nmega store\nku ku\njoey mcintyre\nin fact\nharsh est\nha x\ndont drink\ndock side\ndifferenti ates\ndalry mple\nconstra int\nbuck thorn\nami ya\nä t\nyeahthat greenville\nworld animal\ntri ppers\nsav ills\nquer cus\npsal ter\npow dery\nparine eti\nover took\noscill ator\nnor throp\nni igata\nms x\nmine field\nliber a\nk att\nh gs\ngyne cology\nglori fying\nfor tin\nelliott wave\nech r\ndenver channel\nb mr\nas cott\nab ul\nvu du\nvisit ca\nte ve\ntara strong\nstone haven\nsm its\nshow a\nrep tour\nrayy an\npuni shes\npol dark\nmu laney\nmu cky\nlife s\nlever ages\nland mine\nkick stand\nka aba\nig u\ngu shes\ngreen wall\ngr ans\ngo sforth\nfair ing\ndies es\nchape co\nchaffe e\nbritt ney\nblo bs\nbat wing\nav entu\nangelique kerber\nì ¿\nاÙĦ ØŃ\nyellow tail\nstu ous\nsorren tino\nsc ular\npura vida\npiggy back\npav an\npast i\non gress\no hr\nmore e\nlaet itia\nje tz\nid week\nfal kirk\nemphasi ses\narig ato\nabhin av\nìĨĮëħĢìĭľë ĮĢ\nva isakhi\ntrinam ool\ntake ak\nstre tton\nslim line\nski ppers\nro on\nri ends\nprat ap\no log\nm wr\nlouisi an\nlok pal\ninfalli ble\nfan fave\nen dish\nembrace the\ndistor t\nde wa\ncher t\nbull head\nbry don\nauto parts\nåĽ ½\nwor li\ntex el\nreign ited\nquir k\nqu ila\nprocu red\npick ling\npan athinai\no he\nnigh trts\nmall ards\nlob bied\nlady like\nkid sin\nhh of\nh mh\ncro ft\nclose out\ncl k\nband z\nagra ha\nad ela\nðŁ¤¦ ðŁı½âĢįâĻĢï¸ı\né ķ\nwoo die\nup l\nthorn bury\nthiruvan anthapuram\nther mals\nsh ames\nse un\nren u\nque ers\npost natal\npanch ay\nmcg lynn\nkeralab o\njump ing\njon i\nits janeoineza\nglu tin\nflo rez\neveryday sexism\nee ting\nd cre\ncher o\ncentr alia\ncentr ale\nbon k\nbeauti fying\nam usic\naf ern\nac ure\nðŁĺĴ ðŁĺĴ\nun gu\nthrash metal\npelican snba\nmo ley\nmis am\nmake over\nloud speakers\nlifelong learning\njoy sms\nima gem\nic ho\nhu lu\nhover fly\nfoo duk\nfinancial times\nconven es\nbo gan\najith kumar\nac cola\nun capped\nr ws\npav illon\nnew job\nnay yar\nmccle lland\nlan ter\nkar n\ngo iu\ngame spot\ney yy\nero oms\ndun ford\ndi reland\nde ire\nca stron\nay es\nav ar\namb iti\nale gria\nãĥ ¬\nâĶĪ âĶĪ\nsummer land\nmor ing\nmarch ing\nke ying\njeni fer\nhun dley\nhick en\nhave fun\nfo y\nbett ing\nba che\nล าà¸\nØ ¥\nÃ¥ rd\nwerri bee\nv ba\nstaat soper\nsong kran\nscand i\nre zz\np mf\nn flu\nlo onie\nl rs\nku ech\nkrist aps\nkar ang\nhey it\ngur l\nfreel ander\nflo ater\ndy o\nbe ady\n. ,,\nÅ ĵ\nwai ving\nts in\ntru mbo\ntoen ail\nstar dust\nse ki\nrichmond bc\npunc tured\nprotest ants\npropon ents\now usu\norange burg\nofficial wrc\no ju\nnade shot\nle tran\nkir ti\nkex po\nin gest\nidi ol\ngh el\nfictionaldeath siwillnevergetover\nf pj\nescape e\ndianade p\nv lad\ntitos vodka\nte so\nser na\nscar bto\nrobo tech\nreturn march\nr mr\nmodisar kar\nman gas\nma hot\nlan ky\nl gs\nkel sea\ning live\nho ffa\nglobal ism\ngb bo\ng itex\neco logists\ndev ening\ndarkk night\ncour tau\ncatalo gs\nbha ya\nvir unga\nv ta\nun punished\nspectac led\nsi ghtly\nsemin arians\nrole models\nro ble\npaw nee\npalmi eri\nn ter\nm sa\nin stock\ngan is\nf hs\nene e\ncastell ano\nbun cha\nbl enders\nर त\nwca x\nuuuu uu\nus dt\nstrat um\nser gior\nri ad\nprender gast\nmuni z\nmagni fy\nkah n\nin considerate\nher ma\nhar nett\ngye ong\nginor mous\ngar ra\ncontempl ated\nchit own\naun ay\nalla h\nulster uni\nsting er\nsho to\nsh urst\nprofess orship\nprit am\npi af\npe dometer\nmomo fuku\nmissy elliott\nmas oo\nloh ri\ninfu sing\ngustaf sson\ndg ar\nco ord\nclock tower\ncl orox\nbro kaw\nboxingh eads\nba hahaha\nab ba\nwitt ingly\nuo it\nsteuben ville\nsie te\nsco l\nre tract\nre ce\npre scrip\nnorth devon\nlam bic\njack rabbit\ndough boy\ndo remi\nd ff\ncalabre se\nbre i\nbbc breaking\nar ce\naper tura\na jr\nൠģ\nww week\ntour neys\nsoft shell\nsc news\nori ans\none goal\nnyc feelings\nli ban\nlash ley\nk eli\ninterven ed\ni idx\nfut ility\ndu sit\ndisillu sioned\nchina sea\nche if\nath u\nam my\na ichi\n" $\nĺ ï¸ı\nwhat com\nw ani\nte ahouse\ntat amotors\nste ws\nso led\nsin us\nscram bles\nretri eving\npe as\np nw\nowen jones\nmetal working\nla hey\nl man\nl ct\nkk b\nk hel\ngo ven\nfor sk\nfl ation\nclon ak\ncan tt\ncan lit\nbur han\naur is\nwarner archive\ntorpe does\nte agas\nstat em\nsm iler\nsha rec\nsan die\nrc sd\nprofu sely\npo spisil\nopp of\nml r\nli bra\nki xi\nine uk\nedge of\ncrow ne\ncri bbage\ncastle bar\nbook cover\nan heuser\nì¹ľ 구\nâļ¡ï¸ı âļ¡ï¸ı\ntter dam\nts itsi\ntri balism\nst je\nsnag ging\nri den\nre press\nr we\npre clinical\npat ap\nom and\nmu su\ndel tas\ncun ard\ncre wed\nbath y\nar mes\nam ino\níĥľ íĺķ\nzaf ar\nyan ke\nti was\nrous seff\nro tarians\npol ina\nhic cups\nhall andale\ng add\nelectro lux\neas a\nduchen e\nding y\nd xc\ncity centre\nche sham\ncaloo can\nant am\ntiem bre\nrela is\nrefin ancing\npre stat\notter bein\nmul hern\nlin er\nha irex\nfel ons\nde ducation\nsurviv alist\nri u\nr ra\nmil ken\nlouis farrakhan\nlam bie\nkom i\nhassan rouhani\nharpers bazaar\ngre iner\nfoo se\ndi leep\nbay ne\nbaham ian\narin en\nðŁijĭ ðŁı½\nwild about\nwell man\nunder score\nun democratic\nu tta\ntr h\nta eny\nstri ding\nsil lu\nsal li\nsa avn\nradic alisation\nrachman inov\not en\nmedi al\nm nc\nlot sof\nku hl\nkov ac\nkor ner\ninstaf ashion\ninfatu ated\nhar un\ngujran wala\nfan ia\ndor n\ndo work\nconfor mist\nbe ena\nantidepress ant\nalfre do\na ang\nðŁį ¤\nwar ring\nwal ru\nvo sa\nthru xton\nthe dragon\nsenior bowl\nree der\nraven swood\npro té\npag ans\nome tti\no des\nng v\nna hu\nmultit ask\nmr g\nmarket screener\ngreat returnmarch\nfesti vity\nchang in\ncat ty\ncad u\nc ta\nannab el\nan tti\nallot ted\nðŁIJ ħ\níĶĦë¡ľëĵĢ ìĬ¤\nun install\nsteam ship\nsou le\nsan go\nopp olo\nol ap\nnicaragu an\nmixta pez\nlas se\nkran z\nkhair ykj\nkar sten\nj rc\ninfiltr ating\nglan ville\nfreecode camp\nfox new\nel ation\nedtech team\nclow ney\nby nes\nbis bee\nad av\na unch\nðŁij ¾\nye w\nway yy\nwa ir\ntyler g\nthursday aesthetic\nstra il\nst room\nshor ting\nread out\npri mero\npic hai\npg ce\npar rilla\npar dons\nnat us\nmanirat nam\nlo kal\nlef thand\nking fish\njun hui\nisa ak\nindi scre\ngorakh pur\ngoing to\nfar ted\neast gate\ndemysti fying\nde ek\nd wan\ncompil ations\ncel a\ncath arine\nbook pro\nbl p\n! ðŁĻı\nðŁıİ ï¸ı\nãģĬ çµµæıı\nâĢĵ @\nyun hyeong\nyi wa\nwd bj\ntourism day\nterri fy\nspecul ating\nser u\npal umbo\npal grave\nor wellian\nnithi in\nlu pine\nliais ons\nh wang\ngb g\nfi sho\ned chat\nchristmasin july\nantic ancer\nys k\ntor c\ntom es\nta pas\nsu st\nstag gered\nshanmu gh\nseason of\ns mond\nqu ally\no sun\nnou ghts\nmm w\nleg gett\nkabo b\nhu mi\nha fez\nh dc\nfin ne\nevery damnday\ncw l\ncurren ces\nbige ast\nash more\nar and\nad pi\nabsor ber\nwil ders\npaparo ach\nme ma\nmac rae\nlaw y\nkar is\njä ger\ninter nazionale\nheart month\nfreck le\nfinanci er\nen gi\ncoast mag\ncharacter istically\nbur ford\nbour guignon\nb ph\nar bonne\nap in\nsty les\nsl icker\ns mas\nro cio\npyth ons\npur beck\npil a\npatter ning\nover saw\nky ung\nke gaard\nim balances\nhin dering\nhead stones\nhar to\nga ster\nfab ia\neuro p\ndone ws\nde du\nconsci ous\ncas bah\nc mn\nbever idge\nðĿIJ¨ ðĿIJ\nู à¹ī\nw sh\ntv line\ntri ste\ntany abur\nsolidi fied\nsnow balls\nsmir ks\nsize more\nshu ayi\nsam an\nris me\npot m\nporsch es\np ining\nni sts\nnar mada\nn dc\nma wson\nkhandel wal\njeremy scott\ninfatu ation\nfor congress\nfon z\nanom al\nãģ Ļ\nv anda\nrec at\npan cies\nnumb ing\nno doubt\nnewmexico true\nmis mo\nlat ers\nlac tate\nko ck\ngustav us\ngat ecra\nfujifilm x\nforce d\nf bo\ndon ni\nconven tion\nber on\nâĿ¤âĿ¤âĿ¤âĿ¤ âĿ¤âĿ¤âĿ¤âĿ¤\nठ¥\nzo v\nyo semit\nwolf gang\nshu ster\nrudy ard\npres se\nic en\nfun nel\ncryp tid\nback roads\nat aturk\nar ga\nyamaz aki\ntrento antonio\ntrave münde\ntele serye\nshrop shire\nsco ast\nsb st\nresc ence\npi es\nop tioned\no ssie\nnick las\nlow y\njoey badass\ni hi\ng its\ncuv ée\nct xwx\ncat arina\ncalisthen ics\nc bu\nbuzz horn\nbil ia\nâĿ¤ ðŁĺĬ\nа ÑĢ\nwin wood\nunder paid\ntran sa\nsum lin\nshan kill\nsepar ator\npat an\nno fear\nnau m\nmetr orail\nlam poon\nke shi\nian mckellen\nhe garty\nflan ker\nencry pt\ndilu tion\nchattahoo chee\nam ellywood\nz ino\nym ca\nwildlife refuge\nthre es\nteach able\nsydneyis skyblue\nswami ji\nrow th\nneed ful\nnano tech\nmicrone sia\ngo greek\ngandhi ji\nen right\nedit able\ncin ia\ncarbox y\nble u\nach ine\nwall decor\nvitam ind\nvibr ational\nrodr ÃŃguez\nredd warf\nre gains\nmac laren\nleh rer\nla uper\nkhar kiv\nj if\nin usa\nher mana\ngur das\nembezz lement\ndomin us\ndh b\ncar ro\nbloo died\nari sto\naravind ha\naf ree\n? :)\nðŁĻı .\nðŁįĢðŁįĢ ðŁįĢ\nzol tan\nwine time\nw ach\nterrap ins\ntat ton\nsycam ores\nssi onists\nplau ction\npir an\npick ard\nper sson\nolu fsen\nnet ty\nne etu\nmean s\nlu ft\njoo x\ngu is\nful la\nev ant\nbt k\nboxing news\nas mile\nanim ity\nan up\nyan uko\nwareness week\nvel de\nval ais\nupl ink\nsar faraz\nrin gette\npublic library\nmill icent\nmcder mid\nlet ang\nlee filters\nil p\nflam me\ne gs\ndecor ates\nbr indi\nbea stieboys\nbark sdale\nalbor an\n! /\nâľ ´\nè ve\nwomen sequal\nut ama\nu igh\nshoel aces\nse kai\nre trial\nr kelly\nperi yar\npast as\nna o\nmonte pul\nmichael gove\ngode acs\neno ise\ndizz ying\ncho ta\nche ong\nbegu iling\nale gacy\n... âĿ¤ï¸ı\nðŁĺĤðŁĺĤ .\nðŁİĪðŁİĪ ðŁİĪ\nâĺ Ĥ\nworkout wednesday\nw ft\nu zi\nu ve\ntn q\nsubstanti ated\nsu x\nst c\nshankar shanmugh\nplo s\nplay group\nphilharmon ia\np cie\nn vc\nme on\njer zy\nis ds\nif y\nhut son\nfe ig\nfare ed\nentrap ment\neh f\nd sson\ncut lets\ncur ragh\nchlor o\nbizar readventure\nðŁİ Ĺ\nwy ld\nwies baden\nunis wag\ntur rets\ntre m\nsor aya\npg l\nnu kem\nlucy lawless\nhaute couture\ngoogle doodle\ncan nes\nby ram\nbo ch\naz eem\nalbi hariv\nah sfx\n!! ðŁĺį\nyu ge\nwhit ley\nwest sussex\nus ola\ntn m\nsen edd\nresemb led\nread abook\nre develop\npri a\nparaly sed\nn intend\nmy photo\nmass on\nlori ent\njan ak\nim prison\nheart failure\ngo wen\ngar rard\ndumb bells\ndiscre pancy\nam pe\nÑ Ĩ\nwr ds\nwe itzman\nviol adavis\nverma elen\ntweet chat\nsubsidi sed\nshi g\nsf h\nsamson ite\nri sc\nre dit\nq doba\nnv da\ne let\ncontinu a\nco kes\nba jan\nam iri\n:(( ((\nðŁĩºðŁĩ ¾\nver dasco\nthat matter\nschnei derman\nrebec cam\nre mor\nquie test\npulit zer\nprinci pality\npre rog\npr ssa\nmonta igne\nlo tus\nkar te\nk assel\nhy phen\nho ang\ng aga\nfruit cake\nfan te\new f\nel fs\neate mu\ndefense less\ncaw ley\nair d\nðŁĻĪðŁĻī ðŁĻĬ\nâĻª âĻ«\nth ich\nt sk\nsu is\nstat in\nrr t\nrand hawa\npsychopath ic\npetra eus\nnow showing\nlu u\nlittle hampton\nhere is\nha zi\ngreen bay\ngli ac\nem pren\ndun drum\ndi ac\ndemo graphy\ncoul thard\naustralian coins\napply now\na ham\n.... !!!\nvidyut jammwal\nun leaded\nun friendly\nun favorable\nug by\nth doctor\nrac c\nquiz up\nq ol\npeac ecorps\npas scode\noedi pus\nnotic ia\nmari ka\nmal la\nki official\nkhur ana\nke on\nkaw ai\nka sim\nhi f\nger alt\nay ut\nar ara\nap x\nyou go\nwer the\nt ila\nstol ler\nstam per\nsf dn\nsch ick\nsat suma\nraf bbmf\nr ter\npolice week\npen field\np de\nnit to\nmono po\nlive united\nlib dem\nin sole\ni official\nher sey\ndoubt fire\ndis mayed\ndic hro\nchar don\ncal v\nad ra\nzi ppers\ntri ste\nsm alley\nscal y\nram y\nit ens\ni one\neeee ee\ndu ps\nde cries\ncriticalrole art\nbug gies\nboc cia\nbigh ero\nargent ine\nalyss a\nz eu\nwest view\nvo ta\nun sealed\nteenchoice fox\ntam ir\nsympo sia\nssang yong\nsolve ig\nofe urope\nni pped\nmol dy\nkom en\nken ley\nk ws\nhar pist\ngon na\ndh all\ndesh pande\ncruci ate\ncoroman del\nbo ssi\n... <\nðŁĺį ðŁĺģ\nðŁĺĩ ðŁĺĩðŁĺĩ\nunfathom able\nul ter\ntrit on\ntorto rella\nthumb sup\nten ets\nten ergy\ntan quer\nsoo kie\nscuri osity\nsar don\nsar ath\nri mmed\npolkad ot\nom ak\nle se\nke te\nk una\njun aid\ngr iner\ngolden rod\ngig antes\nful crum\nell an\ndi ani\ncurrently reading\nbroad view\nber al\nam bode\n< )\nðŁij© ðŁı¼âĢį\nâĮ £\nwr angler\nweek nights\nunder foot\ntwit ching\nturn berry\nsu dir\nss is\nshangr ila\nser rated\nsea forth\nrubber maid\nrive ted\nread ers\nre marked\np bloggers\nout flows\nnon verbal\nni v\nnabo kov\nhuman ity\nfin den\ner f\ndas soc\nd vs\nauction update\nas la\nangel ina\n.... ..@\n( ?\nthe ak\nste ffy\nlu blin\nk win\ng ago\nfull metal\nfor bes\nell ars\ndd is\ncar mina\nby d\nboardgame geek\nber wick\nauto bot\nas ura\nap hex\nander pump\nair brushed\nyour way\nwil more\ntur ki\nsi a\ns later\nro ared\npur itan\nom ori\nnbc philadelphia\nmor cha\nmi me\nku char\nken newick\nkb ps\nindie book\nhen do\nft th\nflo of\nbru sco\nben elli\nasser ting\naqu atic\nठ£\nsur real\nst kil\nshet land\nsed bergh\nscots magazine\nri za\nplaylist live\npa il\nmi us\nmh k\nlor as\nleicester tigers\nlc g\nhul la\nhu ms\nhelp me\ngin and\nea f\ndungare es\ndon tw\ndeterior ate\ndar cey\ndal al\nd wr\nconspir acy\nch ere\nbander as\nall iteration\n* âĢ¢\nâŀ Ł\nxen overse\nwheel in\nu al\ntur bos\nsfor kids\nsaturday kitchen\ns ja\nrand olph\npr b\nou w\no in\nnew look\nnd wx\nlew ski\nincur sion\ngr rrr\ncar shal\nbuc ca\nban an\nasset management\narau jo\napo logists\naf ly\nðŁijģ ï¸ı\nyou got\nwax es\ntoile try\nstow away\nste adi\nstandup to\nsi ski\nsel tine\nschool s\npho t\nmiamis up\nlore tto\nlam ba\nkr ita\nib nlive\nhin dley\nfrank ford\nexfoli ation\ndiabe tes\nde cer\ncra gs\nbin dings\nbat cave\naj j\nwo www\nwaveleng ths\nw abe\ntoysfor tots\nrash mika\npizz o\npha ser\nore l\nmusso orie\nla pp\nhit t\nhappy independenceday\nga ius\ncolon oscopy\nang ing\nadidas football\nyon o\nwhit eli\nton ks\nstumb le\nsolemn ly\nru r\nragh un\nqi ao\npay gap\nmal an\nlisav anderpump\nku be\nk son\nib l\nhomemade tools\ngw h\nfavor ing\nec lamp\ndeven ter\ndeceit ful\ndag en\ncur ling\ncan ey\nbig brother\nbau s\nah ri\nwinter sun\nwilli es\nwi bw\ntwer k\ntable spoon\nt eli\nsze chuan\nsuper tramp\nreminis ces\nrally finland\nquizz ing\npapa johns\nnaco gdo\nmccre a\ni zzie\nfitz william\nfal le\nde j\ndar relle\ncanti lever\nbusiness women\nbush fires\nyas sin\nvander pump\nth als\nt dn\nri ko\nproce dur\nopti k\nomo vies\nnai doo\nminute man\nkasey kahne\nfo olin\nex chequer\ncorn rows\nblack mailed\nbl at\nbil derberg\nar twalk\nðŁļ Į\nðŁIJ Ļ\nëĭ ¬\nå §\nye eee\nthaw ing\nshak ir\nra zed\npitto drie\np atta\nmccre ady\njack i\ninside the\nfla m\ncan am\ncamp sites\nban nock\nat si\nar bo\nao g\nanch ine\nvand ana\nsw ade\nshow and\nrishab h\npi raeus\nphar md\nmat son\nm gp\nlau g\nkal inga\ninjec tors\nhypnoti zed\nhil bert\nfric king\ne if\ndu sd\ndo herty\nde bi\ncab a\nbrah maputra\nber rys\nban offee\naf fer\n] ."\nðŁĻıðŁı» ðŁĻıðŁı»ðŁĻıðŁı»\nâľĬ ðŁı»\nz ele\nthom es\nte ide\nsuper marine\nstress ors\nsing ing\nsi bi\nself care\nscalex tric\npres que\npodi atrist\np mb\nnaval ny\nmother ly\nko ku\ningh istory\ndo pen\ncj reform\nchor al\nas amy\nampli fying\nali i\nwater ton\nvw fc\nunex plain\nstrangel ove\nshe sh\nqu bool\npre via\nperson i\noffic in\ngn on\ng ps\nfi est\nfarah khan\nengul fing\nenerg ys\n.. ðŁĺį\nت ع\ny anni\nwarnerbro stv\ntor rid\nsummer sale\nor bis\nmotor cycling\nmojit os\nle jeune\nhippo campus\ngil pin\nflgov scott\nfin dthe\nedwards ville\ndsw d\nd mi\ncur r\nbon neau\nblue eyes\nb bo\nam ills\nwin sford\nweid man\nupcycle d\nsung yeol\nshi shi\nre setting\nravic hand\nr ty\nnt australia\ndham aal\nda res\nd cd\ncb colympics\nbapti sed\nbab yyyy\nadi an\nðŁĽ ģ\nwil ford\nwak aflock\nsp ink\nsie ge\nsad am\nqash qai\nphra sing\nling a\nkin ka\nindigenouspeople sday\nil ie\ngin ho\ngiac ometti\nextru der\ncand or\ncallthe midwife\nbow erman\nbague ttes\nat oz\narche types\nanten nae\nwithout you\nto cin\nth ts\nth aya\nsh int\ns guild\nmusk rat\nmc gre\nman aus\nmag nit\nlun di\nlumin escent\nlap ses\nkin dof\nje han\nif ad\ngu iness\ngreg ori\ngi jon\ngg is\nfoo dgasm\nfloor plan\nf sg\ness ss\ndi marzio\ndd ata\nclu mps\nal at\nãĤ ´\nze en\ny cling\nw eli\ntrou p\ntote bag\nshre ws\nscur ll\nrepjohn lewis\nor te\nma ho\nkaz i\njor dana\nirrit ate\nha vi\nge c\nf ici\navi e\nari jit\nam rit\nam gen\nwre g\nwit a\ntor ide\nti died\nshu bh\nse mua\nride share\nr vc\noutfit oftheday\nnypd news\nnovel ties\nkid cudi\nkhali stan\nk ren\nide c\ngru p\ngon nam\nconne ct\nconfe ssing\ncere bral\nbal am\nash u\nwon k\ntwom bly\nriver ton\nrepaira ble\nre constructive\nra west\nple at\nplay writing\npaul kagame\nnurse sday\nlo dz\nghou lish\ndra xler\ndolom iti\nde te\ncru do\nbilly joel\natom izer\nas ol\nal car\ny cfc\nwe sl\nunder floor\ntre maine\nte tr\nsween ey\nsket chaday\nse ba\ns sec\nrjal ok\nrin der\nrally gb\npr ine\nport as\njam mies\nhorseri ding\ngra phie\ngi menez\ngar oppolo\ngar dai\ney enews\nclun y\ncavan augh\ncal lie\ncal ey\nbrou gham\nberline tta\nben tham\narou sed\nwh aler\nvo les\nty ner\ntwee thearts\ntor na\nsi ap\nshu ja\nsar avan\nsand awana\ns fr\nquik silver\npter odac\npm harper\nob tains\nneo geo\nmog wai\nmid year\nmi kasa\neh ne\ndroit wich\nconservative vw\ncho l\nbigten network\narach no\næ¸ ĭ\nur bo\nu sta\nsub prime\nsle aze\ns ber\nru sia\nneb biolo\nman al\nlun t\nit ori\nis good\nho ard\nhel dens\ngo ve\nfla gg\net at\nemma watson\ncas so\nas aba\naro ha\nam ica\nalfar o\nwer den\ntri glycer\nto ho\nre ema\npunx su\nom nomnom\nol de\nmack in\nli vor\nkw gt\nkh ris\njohn c\nharpsic hord\ngal ent\nfrancis co\ndr g\ncome to\ncater pillar\ncalcu lators\nbbc world\naugu stal\nad sl\ntran spon\ntra eger\nstring ed\nsr hv\nsowe to\nsle ad\nse ur\nsantac ruz\nrun happy\nnhs bartshealth\nken cen\nit all\nhot sauce\ngood fellow\ngian franco\nec ap\nb ening\naha b\ntake flight\nsymbio te\nsou da\nsolar panels\nsi gue\nru bric\nri voli\nrema x\nome gam\nn kandla\nmores by\nmik ado\nmigno let\nmay bank\nman gum\nmakar sankranti\nkam eron\ni ero\nhart pury\ngab ay\nft nhs\never son\ncome dia\ncolor blind\nbe aune\nbank stown\namend ola\n---- ----\nðŁĴĹ ðŁĴĹðŁĴĹðŁĴĹ\nðŁĴª ðŁijĬ\nðŁĩµðŁĩ ¹\nà º\nÑĤ е\nve sting\nup keep\ntraw ling\nteam breezy\nstar scream\nss av\nsper son\nslu mps\nshin ya\nre package\npo were\npo ort\npla b\npic hand\nok kad\no brien\nnu ff\nn ani\nilli am\nharold sinnott\ngreen party\nglen elg\nge er\ndreamleague soccer\ndiso wned\nconstan ce\ncas sandra\nal gui\nty per\ntore ros\ntan us\nswar mapp\nsin dy\nshee ting\nsham si\nsep tiembre\nsar ita\npalae o\nindv swi\nfiel duni\ndavid walliams\ncool down\ncolor ador\ncamise ta\nap ul\nad ac\nwet shaving\nvan hansen\ntw ard\ntou areg\nsyn ced\nstr ang\nsp w\nsh acks\nsati ri\nron it\nreali sts\npramo d\nori ol\nfann in\nen nale\nembro iled\ncul vers\nchat room\nbuff ing\nban e\nac m\nðŁı ĸï¸ı\nwriting life\nvasundhar abjp\nun desirable\ntho ckey\nram anu\npa store\nnin ian\nly tton\nknu dsen\ngg v\nfi z\nemble ms\nemb arc\ndispen sers\nca sid\nasu tra\napp y\nðŁĴŁ ðŁĴŁ\ny ut\nwb ball\nvin icius\npre dation\npa sting\nnoplac elike\nne wark\nmammo gram\nma ji\nluch ador\nilove jax\ni plauction\nespar za\nel ley\ncontempor aries\nclo aked\ncele stia\ncar ola\nbt x\nbrave hearts\nbi ghead\nbenand jerrys\nar len\nap it\nap at\nanjun abeats\nam erika\nãĤ¹ãĥ Ĺ\nا٠Ī\ny aba\nwau kegan\ntw p\ntter man\nstra ddle\nstatec ap\nrash tri\nquarte ts\nplat num\npax aus\nmorg ans\nli baly\nleopard stown\nkro hn\nit security\nhun ty\nhere dia\ngra ined\nexpress oshow\nd he\nak f\n* :\ná Ĺ\nyanuko vych\nty ger\nsun limited\nshealth care\nsc itech\noppre ssor\nm tt\nhe ssen\ngon gs\nfunny picsdepot\nflip side\nfam iglia\ndu o\ncathedr al\nbal anchine\naf pphoto\n.... (\nðŁij Ĵ\ntho o\nseaf loor\nsan kara\nrac ial\nopen air\nner ve\nmat ryo\nkilo gram\nkhal il\nit weets\nhe is\nembo ssing\negg man\nbachar ach\natt va\nðŁĺĭ ðŁĺį\nðŁĩ³ðŁĩ ±\nvox dotcom\nun learn\nsuper cross\nros ita\nre paid\npan ettone\nnor fol\nmii verse\nmari ai\nloud ness\nley den\nj dc\nfm news\nfasci itis\neye glass\neloqu ence\ndaw ned\nchron ometer\nchri swe\ncho i\ncarling ford\nbhar gava\nbbc mtd\nbal tics\nuof m\nty d\nswasth abharat\nstor noway\nshu ffles\nsen o\nreson ated\nre ag\nno via\nmonster cat\nmb ank\nlo te\nkir ito\nhoo ligan\nher up\nh ite\nfox news\nearly modern\nderby shire\nday trip\ncudd le\nconsecu tively\nbli c\nblack out\nbe mis\nar ash\nâĻ¥_ âĻ¥\nvishwar oopam\nvash on\ntrajec tories\nsine ad\nsat ri\npu fc\nnew lyn\nnatu rel\nmin tz\nd pan\ncru k\nbor u\nta ko\nse and\ns america\npri yam\nnavar ra\nmonte cristo\nmill is\ningh ope\nhep atic\nhall in\nfc ity\nelectro chemical\ndr martens\ncj ad\nas rc\nweather ill\nvarund hawan\nteh reek\nstocke xchange\nsko ol\nshi be\nrubi dilaik\nn pe\nmo ko\nma ic\nindi ak\nin takes\nimpedi ment\nil ent\ngo tye\ngetin to\nfing ering\nclau son\nc ni\nbal o\nann andale\nan ju\nan ers\nam g\nal goma\nwomensequal ityday\ntew ks\nsugar land\nprospec tor\nmil ian\nman made\nli iga\nlaz ada\nhum per\nhb v\ngreen bush\nep k\ncon tro\nbiomimic ry\nठĤ\nuk tour\nthe happy\nscro ft\npunxsu taw\non the\nnewmarke trace\nme ca\nlie tta\nitsmore funinthephilippines\nis born\nharinge y\nfri sch\neye candy\nelectro des\ncon ant\nco done\nw br\nsch y\nrad wanska\nnewn an\nnei man\nnb poli\nmegam i\nma da\nlunar newyear\nlei va\ninthe sky\ni vs\nglend ora\nforeigno ffice\nfashion photography\neu ticals\nd kr\nc st\nc ftc\nbri stles\nbic ent\naz family\nai ff\nðŁĴ¥ @\nðŁİ ĸ\nwa aay\nup u\ntho d\nsle dging\nsig ne\noire ach\nnor ad\nnoel gallagher\nnew comb\nma suk\nkra b\nken ner\njet star\nin ert\nhon ore\nglobal ed\nbur pees\nbs v\nbett man\nat sushi\narjun bijlani\nairand space\nab bin\nó r\nsonunig am\nse mat\nro vin\nnat galleries\nnatgalleries sco\nnar co\nmiz rahi\nlero y\nkno pe\nhi ker\nhang ing\ncomple teness\ncha vez\ncab ell\nbil der\nav m\nak y\na are\npretty much\npo ta\nover arching\nor nl\nkovac ic\nken n\nkam ui\nhel f\nhar r\nga stonia\nfo h\nfidd lers\nfac to\naren al\nâĿ ĩ\nzol ciak\ntoyo tag\ntan gier\nspot ligh\nspo ols\nsan bernardino\ns burg\nra pati\np dd\nn age\nmu cking\nj io\nis cool\ni mus\nhassel beck\nhar shad\ngn g\nforex trading\ndu es\nborgh ese\nbi kaner\nam uk\nal wys\nwaist band\nw league\ntot alling\nsummer house\nsrin ath\npun gent\npe dr\npab st\nmulca hy\ninfr inged\nfir daus\nbur ka\nbrian cox\nbi ola\nbc bg\nðŁĺľ ðŁĺĤ\nx el\nsul kin\nsal ve\nrafi ki\npan ky\npag lia\nna aa\nmalibu comics\nlear jet\nlac una\nkeen eland\nkau ff\nher acles\nhair color\nfur st\ncor rin\ncas al\nale h\nب ÙĨ\ny aaaa\nvi ra\nte sy\nstyli stic\nstrong bow\nsport pesa\nsavi o\npyram id\nmay er\nmante gna\nlight sout\nlease hold\nlan n\nkit tel\nkick solution\njet set\nic at\nf gr\ndonttry this\nde jesus\ncw lps\ncharacter ised\nbuzz words\nbail on\nawesom esauce\nasi ana\narticul ating\nabra sion\nðŁ¥° ðŁ¥°ðŁ¥°\nãħ¤ ãħ¤\nÑ Ĥ\nz hong\nworth the\ntalking picstv\nsen goku\nr é\npic o\nnit ric\nmr ti\nmal u\nla ster\njac ke\nis simo\ngra fia\ngame audio\ndown for\ndo something\ndi donato\nd fir\nchal ked\nadi t\naccor hotels\nab rac\nâĺĿ ðŁı»\nwt kr\nwl tx\nvote redto\nve sper\nspur lock\nsc limate\ns mid\nrecen sione\npaper clip\noom ph\nnational birdday\nke shav\nk df\nichoo se\ngmt games\ndi mm\ndan ews\nclo seness\nc se\nal tidore\nafter thought\nzimbabwe ans\nza id\nwizardo foz\nun flattering\nthar p\ntal ong\nsump ter\nstein brenner\nsn w\nsb n\nsat o\npl d\nmar com\nmal ina\nluxury cars\nkho bar\nj ss\nice house\nhicken looper\ndead by\nd loesch\ncas sino\nbudo kan\nbi zz\namar one\ntic e\nsou vla\nsin uses\nseam us\nsamu elson\npre poster\nnews rooms\nmel wood\nmaest ros\nma gus\nlyn x\nkav i\nir f\nhal eso\nget out\nent in\ndog walk\ncu al\nðŁIJIJ ðŁIJIJ\nâĺĢ âĺĢ\nwhat evs\nwex ler\nvi stara\nswag s\nsoc biz\nsneij der\nsm on\nsi se\npr ancing\nle ff\nkhadi ja\nj sm\nhill toppers\nemer il\ndar nold\ncomp o\nchan tic\ncan aan\nbl inn\nðŁĴ© ðŁĴ©\nyork ton\nyl i\nworld building\nw syx\nu hi\nstre l\nstop kavanaugh\nspace ships\nski i\nsel as\nrac oon\npri mula\nplatnum z\nparen tal\npal ah\nnim rod\nmin doro\nmc mullin\nlo in\nil en\nem merson\ncricket merijaan\nze o\nw afl\nthel oud\nspecialty coffee\nsoap y\nsay no\nsab adell\nrosam und\nravi dubey\npray ersfor\npatrick dempsey\nower ri\noc u\nmari as\nlifeis beautiful\ngo tto\nd wee\ncircu latory\nchild less\nbag ay\nawol nation\nanalo gies\naldublo ve\nðŁĻĪ ðŁĴķ\ntroubad ours\ntou te\ntimb ur\nso dy\nsee the\nrachman inoff\nn tt\nmol ars\nmo tta\nlove ukweather\nk ates\nil keston\nhol gate\nhair styling\nfel onies\nchen ille\ncamp grounds\nam asa\nå¤ ©\n© @\nst ape\nsl ung\nrigh ton\nplan es\np oul\nmic ha\nmethu en\nkore y\nke ener\nke ck\njarre ll\nin fidel\nil ona\nherb alist\nff re\ndog meat\ncur sed\ncron k\ncentr a\ncam rose\nbright man\nas ce\nac cade\nabas ket\nys ers\nwy se\nwarsz awa\nvik ander\nver onika\nunfinished business\nsu ter\nsteven age\nstartup grind\nroth stein\nrio olympics\nname plate\nmyrr h\nmer cu\nme aux\nlow nz\nlin seed\nir un\ni aw\ngi ani\nfij inews\nef an\nearly ed\ndetoxi fication\ndeta ins\ncor rado\nburn sville\nbri thday\nbri stle\nbodle ian\nbj j\nbau t\naude mars\nas ys\nðŁĺİ @\nyan ong\ntrayvon martin\nsuf ism\nstern show\nstainless steel\nsp all\nsant ini\nripp on\npanathinai kos\nmusko gee\nloo ts\nlocal elections\nla yan\nkit teh\nkhur shid\nkel son\niron side\nilli c\nhick son\nha aa\ngooden ough\nbrand en\nann ast\nwe ger\nva o\nuk news\ntalking dead\nspi ers\nsculp ture\nridg way\nre sets\nra ved\nnex gen\nnat aka\nligh tened\nlie ber\ninter i\ngoe bbels\ngal lau\nfree play\nbu kan\nat ani\na of\nðŁijĢ ðŁĶ¥\nï¸ıâĥ£ ,\nsy ard\nsqu alls\nran deep\nr nb\nqui el\nproudtobe abulldog\npom eroy\no brig\nmoe bius\nkar ine\njuni e\njou st\njoe ys\njo k\nir y\nha is\ngin o\nester o\ndel ands\ncoo t\nbbcradio wales\nassimil ate\nand ouille\nðŁijįðŁı¼ ðŁijįðŁı¼\nwine fest\nwai heke\nve sic\nstar tribune\nsid well\nscale up\nsc cm\npru ett\nperfec tionism\nnight marish\nnca aw\nnc f\nin bkk\nhirsh horn\nhe tero\ngriff en\ngreen e\nfat test\nfaceof mlb\nel r\nchuck grassley\nchrist oph\nchip tune\nc itt\nbrick ed\nbo ga\nblasphe mous\nber m\nare dux\nthel and\nsk op\nshak er\no ems\nmciner ney\nk ween\ni ppo\ngas ps\ncol mar\ncla xton\ncastan eda\n? ðŁĺį\nðŁ§Ļ âĢįâĻĤï¸ı\nìŀ Ī\nwed ded\nve te\nuka id\ntribut ary\nsyracuse u\nsan pedro\non location\nngr president\nmon oli\nmodig liani\nluxemb urg\nleg anes\niam will\necclesiast ical\ndu plass\nded ham\ncomp els\nblan ch\nbill nye\nâĿ ¦\nâĻ« âĻª\nweight watchers\nwax man\ntede sco\nte zuka\nsneak peak\nrec ir\nran dee\nradio times\npy re\noom pa\nmessi anic\nhawks bill\nha ga\nglen livet\ngil mer\nfabric ate\nedin son\neco smetics\ncolorado springs\nco tte\nbag a\nb ä\nb anta\nantarc tic\nambro sius\na sea\nðŁĺij ðŁĺij\nth il\nte avana\ntam era\nshann ara\nsch aff\ns ence\nrhe e\nre ta\npe al\nmari ach\nkri dge\nic co\nfratern ities\nendic ott\ndere cho\ndam er\ncad mium\nbrick town\nì º\nv pa\ntau s\nta rek\nsun downer\nrose burg\npel agic\npa es\nou nos\nnicol ai\nlindel of\nlibt ards\nleadership development\nlaure ls\nhot star\ngoldend oodle\ngi untol\ndand c\ncros sh\nch ym\ncannab idiol\nbure ss\nbmw motorrad\nblin ky\nbel asco\napol itics\nam bler\nale sha\nðŁĺ® ðŁĺ®\nwhite boards\nwa hoos\nus y\nstro de\nsar as\npro visioning\noni giri\nmay ank\nmal inois\nlow ell\nke chara\nhyperson ic\nherbi vore\nhard castle\nblue star\nbio diversity\nav os\nand white\nware house\nviol ators\nv asha\ntul loch\ntor fa\nth ony\nsh iller\npun tac\nproce ssions\npiec ed\np ca\nmayo clinic\nma shups\nla goons\nin suff\nillustr ative\ngolfclub sforsale\nfrie sen\ndrizz ly\ndo ane\ndeare vanhansen\ncross bar\nbri on\nau rea\naro berts\naqu al\nðŁĻĤ ðŁĻĤ\nweis man\nuz bek\ntraumati sed\nswitch board\nst app\nsmo vement\nsa arinen\nre growth\nra wing\nnu ke\nmelissam c\nhun na\nglasgow warriors\ndict ated\nbv l\nbalonce sto\namar al\nag dq\nvelo ce\nthe hague\ntet ley\ntattoo ed\nson us\nsc india\nsar un\npreemp tive\npr oro\npi dgeon\nmon tel\nmagi k\nke ylor\nine x\nh pt\nf cbd\ncyril ramaphosa\nco ppers\nchri sho\nbur r\nactor jiiva\ntrans verse\nstr one\nstin kin\npil atus\noccupy central\nnephro pathy\nlooo ong\nle ight\nlanguage learning\nl rb\nhy annis\ndi ppy\ncol ville\ncho ate\ncentral coast\ncar illion\ncamp y\nbol dest\nb hay\nall ston\nxplo rer\nwy wx\nw ur\nur so\ntaver na\nsummer nights\nrock dale\nre supply\nqot dapp\npan etta\npal azz\noh well\nmonon oke\nloe we\nlisten to\nl eri\nkun dp\nif p\ni onia\nfro mm\ncé sar\ncu enta\ncol ley\nbe gotten\nang rier\nad are\nabhor rent\n! âĻ¡\nðŁİģ ðŁİģ\nza al\nv sp\nthere min\nsu br\ns doh\nqaland ars\npresi des\nnup tials\nmis behaving\nim ams\nhc mc\nhappy tuesday\nfru iting\ndi abo\ndatam ining\naugustal sina\nan zi\n!!! .\nļ ðĿIJ\nðŁĴķ âĿ¤ï¸ı\nðŁĩ±ðŁĩ §\nëĵ ľ\nwise au\nwe artv\nwar ne\nte pper\nstrategi sts\nstargaz er\nsp ann\nsiss oko\nsal a\nphysical activity\nnewn ham\nna im\nn cel\nme aden\nmar cin\nkay aker\nj iz\nhagger ty\ngun ge\ngu yan\nernie ball\ndi splace\nde el\ncode pend\ncay etano\nay yyyy\nar irang\nadren alin\nachan nel\nston eroses\nsto ga\nsport scars\nsolom ons\nq hu\nph nom\npalla dio\nlun gu\nlo i\nj ari\nhob goblin\ngathe rer\nde volved\ncome and\ncelebr at\nbra inde\nba atar\navie more\nas ky\n: \\\nãģĬçµµæıı ãģį\nuro logical\nun declared\nu ob\nsu ess\nsc ura\nsc ast\nsam en\nroo l\nri pen\nraise your\nra ju\npra bang\npinar ayi\npaign ton\nos int\nlake wood\nkon an\nje ffs\njacob whitesides\nincu bators\nichi ban\nhb l\nfr illy\nfo gerty\nconju res\nain slie\n. ðŁĴľ\nwor te\nwol ters\nwo wow\ntra gic\nteleno vela\nsmar athon\nshaw ols\nsex ta\nsalvation army\nquan tu\npinnac les\non itunes\nnestl é\nmyelo id\nmu y\nmit er\nmeg ac\nmc kee\njo van\nheart break\ngas ped\nfunc tioned\nfreak out\nendthe stigma\ndisab ling\ncarne vale\ncam uto\nbernar di\nðŁĺ¢ ðŁĴĶ\nâľ ³ï¸ı\nÃŃ as\nun ni\nter p\nsin op\npre co\nopi ate\nmen in\nmandu rah\nlon gu\nintegrity tt\nhr tech\ngreat north\nfr nd\neli k\ndad dys\nconstruc tor\nconce ited\ncan em\nðŁĺį "\nsu ll\noper andi\non ster\nmm x\nlost cat\nleg less\nkarim loo\nju ga\nj sp\nhand rail\ngri pen\nglori ous\ndi mming\nbury sted\nbt c\nbe eck\nam ai\nalgui en\nyoun es\nti sham\nstil t\nsoul ful\nsid cup\nseg awa\np ex\nopen shift\nmechan ically\nhd x\nhar tigan\ndhanan jay\ncu atro\ncanal side\nbon gino\nberger ac\nas cle\nan ju\nag low\nag et\n.... !!\nâĺº âĿ¤\ntom er\nthe us\nteac ups\nsa urs\nreal mickfoley\nperman ent\npa chuca\nmatric es\nloud phillips\nkof i\nk ago\ng cr\nflu stered\nde anie\nbloo diest\nbis u\nam ni\nselen ators\nsc ens\nrine hart\nobjec tivity\nmoving forward\nmasa hiro\nmarath oner\nlom i\nlogitech g\nkoin ange\nis wa\ning ues\nhyun gs\nhi ther\nend anger\nele v\nconsu mables\ncaval cade\ncap ilano\nblack beard\narte misia\narian ators\nactor madhavan\nyo c\nun win\nu am\nshahe er\nsci der\ns mbs\np ish\nmy mixtapez\nj oma\nhe yn\ngui do\nfederal reserve\nfair mon\ndist t\ndirec tories\ncab rini\nber ri\nbeau voir\nbe the\na head\ny sle\nwarrnam bool\nup market\ntv personality\ntuesday morning\nschri stie\nsar gon\nre bus\nr bu\npresi den\npow ells\nnfl draft\nnacogdo ches\nmusic group\nkis lands\ninsomniac games\nil or\nexter iors\nend res\nder ot\nde composing\ndas ani\ncamp agnolo\nbut ted\nbr ann\nanti gone\nahistoryof paint\nठ¯\nthim ble\nthe stor\nsul ly\nstarwar sthe\nsc avenging\nred wood\npalah niuk\nnove mber\nmat eria\nlongmire posse\nkerrang magazine\ning els\nindustri alist\ni dai\nghe alth\ndont miss\ndel any\ncook man\nbrain child\nbook nerd\nbland ford\nbackto back\n+ ]\nðŁļ ¿\nye z\nv ash\nun stuck\nsummar ises\npen manship\nmumb o\nminimum wage\nmaz ur\nmar cas\nk ray\nid wx\ngold in\nfollo back\near pers\nÉ ª\nwell being\nvar g\nubis oft\ntom brady\nsome where\nqu ire\npax south\nod ar\nlondon bridge\njustin formmva\nit ar\nha at\ngup tas\ngom or\nglaci er\nge b\ngan ic\ncam ron\nc pap\nbrianmb endis\nbrantley gilbert\nbow doin\nboo z\nale jo\nag at\nâķ °\nth f\nta zar\nsex tet\nsam osas\npl is\npel tz\npedestri an\noo t\nnewh am\nmc williams\nkoinange jeff\nk tr\nji be\ngas lamp\ngar ou\nfit ment\nened ict\nen tail\nduck face\ncoin age\nco ale\ncar very\natho l\naj lee\nafca jax\nðŁĵ ĺ\ntra it\ntor ms\nstri bune\nsnow boards\nshadowhun ters\nsere mban\nprefer able\npesc ara\nnz mustdo\nnar ine\nmultic oloured\nles by\ng att\ney al\nen fin\nday made\ncongre s\nade vi\naccoun ting\n! ðŁĩºðŁĩ¸\nðŁĺ¤ðŁĺ¤ ðŁĺ¤\nË ļ\nz illion\nyel awolf\nun question\nthalai va\nshay e\nsavag ery\npoly cystic\nnh ra\nnc b\nmathis on\nmade a\njay as\nindul ged\nho well\nf mt\nerud ite\ndrash tid\nd anna\ncire bon\nch ander\nca ity\nbay ou\nant en\nalban ese\næµ ·\nâļ ĺ\nzom at\nv si\ntay la\nsultan ate\nsagarika ghose\nrt l\nre eses\nre charged\npla zas\npi eters\npassi one\np mt\nmerry xmas\nmen of\nmarti al\nly can\nku antan\njojos bizarreadventure\nis ac\ncullo den\nchef s\ncam omile\nbean z\nan nette\na itor\nãĢ ½ï¸ı\nà· Ĵ\nwhom ade\nwhi ppin\nsun corp\nru lings\nobl ong\nmarsh mello\nly re\nlive mixtapes\nlafar ge\nje anni\nhot chocolate\nge ty\nfu rio\nfor all\nfall a\nez ral\neun kwang\ncumber nauld\nc gr\nbleacher report\napo pka\nal italia\nagil ent\nðŁĺĢ .\nðŁĩ» ðŁĩª\nwed d\ntro ika\ntorch relay\nterrori ze\nt inge\nt anger\nstat ics\nron y\nre assures\nra ze\npre so\npl am\norph ism\nmatthi eu\nfun chal\nf sn\nest ation\nen el\ne pos\ndist o\nden ys\ndam ore\nda hi\ncar natic\nbur un\nairtel india\nyour self\nwonder woman\nwi eners\ntv m\nswords man\nso ha\nseductive sunday\npet kovic\noil oncanvas\njugg alo\nhu dak\nhome automation\ngu mmi\ngo ch\ngirlsin stem\nfli m\nelectri fy\ndig nity\ncommissi on\ncanon usa\nav ro\namerican u\nag f\na adi\nup and\nunder arm\nteam adidas\nsta westland\nsmd streams\nsingle track\nr sn\nquanti fied\npocket camp\npan kaj\noxy tocin\noutlaw queen\nor rin\nof time\nnigh tof\nke ter\nk sg\njim lee\njeopardi ze\njax a\njanath agar\nj harden\nho isin\nh kd\ngiuntol i\nfra yed\nfor trump\ndoo zy\ndeli ghting\ndel ray\ndair ways\nchir ico\ncar crisis\nc dj\narin ers\nthre sher\nstrictly comed\nsp akistan\nseas capes\nscal pel\nro mulus\npro po\nprin z\npre clu\npat in\nkis sin\nkareen akapoor\ngl eng\nflam borough\ndece mb\nd andy\ncli k\n⼠±\nâĹ »\nwo u\nv oom\nth it\nseven teen\nserv ant\nsar ovar\nsam er\nquinter o\nqadi r\npuj ara\npubli sher\npla sia\nper domo\npc bs\nnau seous\nn gn\nlom poc\njig gly\nir refu\nhero escon\nhe sp\nge er\nf wiw\nexempli fied\nexemp ted\ndo is\nd xd\nbang sam\nban jo\nav n\nwed gie\nthom ason\nsway ed\nsv cs\nspen ny\nslam min\nre starts\norm skirk\nmeadow lark\nmar scuriosity\nman sa\nmaith ri\nma sato\nli saf\nko ehler\nkab e\nja key\ngar lic\nflori o\ndu pont\ndd ler\nation week\narsenal fc\nye k\ny ss\ntrue detective\nthel aw\nsun beams\nschool memories\npra bowo\noi af\nlife times\nlank ford\nk ci\nin sead\nhowdoyou pixels\nfthe year\ndown grades\ndam mam\ncor champs\ncolle gian\naul x\nðŁijĮ .\nwo h\nsc um\nra ham\nplay hearthstone\npagen aud\nnik ola\nmcl ane\nlucoz ade\nlake tahoe\nlac tation\nkno p\nkei fer\njanu zaj\nhome bound\nhol lowed\nheat on\ngor gon\nfur baby\nfox glove\nfau cets\ncolbert lateshow\nbarnet fc\nagar h\n! ðŁĴª\nthab uri\nstatue of\nsnee zed\nsingapore ans\nperth glory\npatho genic\northopa edics\nodysse us\nmq m\nk tg\nfar ouk\ncw f\ncreative bizhour\nbo ice\nbeo grad\nwater parks\nvitam inc\nre broadcast\nph enix\nperfec ta\npalm beach\nni mh\nmy croft\nmu tv\nliber tarians\nlang dale\nl tm\njad u\nine k\nhar macy\ngun day\nfair lane\nentwi stle\ncsur ams\ncanni b\nbu tane\naveni da\nafe ty\n.... )\në§Ī íģ¬\nwax wings\nvideo game\nun daunted\nther yman\nstaple scenter\nplu gge\nnis d\nnab e\nmari el\nlor il\nleather face\nkey ne\nkam o\nhu la\nherb icides\ngw apo\ngrego ire\nflav on\nfion n\nfatt y\ndo ke\ndisab led\ndam ion\ncol as\nche quers\nðŁį ŀ\nðŁħ °\në ´\nzon da\nyuz uru\nwhe aties\nunder took\nu bl\ntu sc\nsonn tag\nraz on\npu kka\npe ssoa\nnab lus\nmus kie\nmisam ental\nlo pen\nlar ch\nlan downer\njame scharles\ngra cht\ngly col\ngi onee\ng cm\ner ob\ncé line\ncay e\nc no\nair liners\nag era\nabdu r\nìĺ ¨\næ· ±\nwing tip\nviolence against\nthrowback tuesday\nsound s\nservic es\nrin aldi\npun ting\nporscher aces\np wr\nluzer n\nind re\nfor humanity\nfair ford\nent rada\ndan mark\nati st\nati me\nand blue\nà ±\nwwe shop\nvitili go\nur bandic\nunder hill\nthisi sour\ntex a\nslan ted\nremote work\nradio shack\nmolo kai\nmid somer\nmb ap\njar od\nih sa\nhar rah\nfir mer\nfa ure\ncla ires\ncar oti\nc ang\nb gp\nassi on\napp u\naf fo\nðŁĺī ðŁĺī\nweb md\nswarth more\nste g\nre efer\nrab ino\npromo code\nplay land\no wain\nmill ersville\nle anna\nkuech ly\nhypo thyroidism\ngreen build\nforthe many\nfair ley\ner ice\ndi sing\ncv g\nbusines stravel\nbrun e\nè ©\nun itas\nsmall youtuber\nnal cs\nmove the\nmorde cai\nmicro bit\njack gilinsky\nir vine\ngraphi x\ngra ha\ng live\nfri pp\ndisgu ising\nchuck todd\namal ai\nzan esville\nworshi ped\nwart burg\nu cu\nstar ter\nsol way\nsag na\nro den\npor tra\nmer cad\nli ane\nit sd\nillumin a\nhu shed\nfc p\nexperim ental\ne ol\ndu val\nchri e\nbelmont stakes\nbeis bol\nant ander\nal fi\nðŁİ¸ ðŁİ¶\nðŁĮ² ðŁĮ²\nwhi pple\nwater aid\nvin b\nun wittingly\nstr ana\nsd wan\nreson able\nnotori ous\nnang arhar\nli sas\nlfc family\nle ic\nhump day\nh mr\ngo the\nevo king\nei der\ndetoxi fy\ncon cili\ncin tiq\nbla is\nbar ris\nau bin\nandri y\nalder weire\nðŁĽ ¡\nðŁij» :\nsand hya\nquar ry\npol ley\noc currences\nnvidiage force\nneverstop exploring\nmo onee\nman ed\nhelenclar kundp\ngag ged\ndescri pt\nda shes\ncl ang\ncar dano\ncan geo\nav ond\nas sa\nwwe sheamus\nwut ang\nwewill rememberthem\nwe know\nvibes only\nvan canucks\nu tiful\ntür kiye\nth l\ntalk talk\nsummer side\nstr itch\nroo tedin\nre ous\nquay le\nobe ying\ngrand sons\ncnn money\nchat sworth\nchar tres\nbr att\nau dia\nae ter\nâĿ ķ\nwarrior pride\nvirtual assistant\nva sia\ntre de\ntalk za\nsal ou\nran ce\nr fi\npir zada\npd b\npa rel\nos ler\noh p\nneed lessly\nmet all\nmeado whall\nmcel wain\nmccull ers\neldor aspeedway\ndele phant\ndel tar\nbudge tary\nalternat or\naddic tion\nys jagan\nwood carving\nu ffici\nturkish airlines\ntriu mp\nstephen ville\nsilhou etted\nshant anu\nscottish fa\nro aches\npe dra\np mc\nnu de\nlooooo ve\nli velo\nkis er\nkar on\nk ma\nho by\ncom pas\ncau x\nbre ch\nauthor ship\nar mer\nðŁıĢ :\nwoe ful\nwode house\nun categorized\ntiwas avage\nstru ck\nros se\nr ps\nprithvi official\nno bs\nkor ma\nken zi\njone stown\njav y\nil it\nga ad\nfe ei\nesp a\nend childmarriage\ndo en\ncooper ates\nci bility\nbigg ar\nalex morgan\nal x\naa ahh\nìłľ ìĿ´\nu ria\nt ve\nso you\nshare my\nrother hithe\npierre pinna\nnts live\nnot en\nni ks\nmark gatiss\nlifeat purdue\nlaw lessness\nlati me\nkru k\nkn b\nhyun day\ngre end\ndin n\ndel aney\nd tl\ncombat ants\nbon gos\nathe ist\nall that\na bet\nðŁĸ Ĭ\nðŁĩ¬ðŁĩ Ń\nwe al\nunderstand ably\nthel ake\nte kno\ntamanna ah\nstreet lights\nsqu an\nshul er\nsh inn\nseth macfarlane\nro stock\nren an\nplu cking\nn vw\nmariai rene\nkor da\nkad y\nitti had\nhov ski\nhobb its\ngr ates\nfern and\ndigital artist\nball fanfave\nbab bar\nalessi acara\ntravel news\nsw g\nsau gus\nrou n\nre booting\npre is\npe ps\nota ku\nnom o\nmce ach\nk official\nk anti\nin sa\nglaiz aredux\nfuller house\nf q\ncw bb\nback line\nactu arial\ní ı\nå ¦\nw pro\nver anomtv\nun happiness\nun developed\ntravi ata\nsynap tic\nsinglet ary\nsharp ness\nse gun\nsam berg\nryan j\nro ca\npin al\npi olo\nper ro\npar khurst\nnc sc\nkri stol\nkat rin\ngra dy\ngn ats\nglyce mia\nfall back\ncyber news\ncor netto\ncatching fire\nbom berman\nar ris\naless and\naccor di\nðĿIJ ŀ\nwat kin\nty co\ntri gg\nta int\nsv m\nstreet cars\nstore house\nsh esthe\nse aly\nrou ges\nr co\nquere taro\npy c\npre zi\no oni\nnyo vest\nmar rao\nmall on\ngio ia\ngau dy\necoun cil\ndan ang\nconfe ssor\nclo ister\nbio engineering\nbac carat\naz central\nta hi\nsport stalk\nri pper\nphoenix raceway\nmon bebe\nmin ds\nmal ad\nkyle larson\nkri shan\nhul ls\nhi att\nh fh\nge tters\nfollic les\nduis burg\ndiss apo\ndele te\ncu bist\ncorn field\ncon ec\ncat an\nag ta\nðŁĺģ âĿ¤ï¸ı\nðŁİĬ ðŁİĬ\nu op\ntyl desley\nstreaming party\nst pi\nsmoke less\nsi gep\nshut up\nscot tho\nrose gold\nreinst atement\npre sti\npil i\nout performed\nlaser jet\nlale ge\nkine tic\nje evan\njam m\nhumb u\ngrand erson\ndress ings\ncr üe\ncal dic\nc cac\nbhar ath\namy g\namoun ted\nâĿĮ âĿĮ\ntol entino\nterrori zed\nsom s\nsah in\nreal bencarson\nre introduced\novarian cancer\nnam ah\nmonte z\nmis fit\nkamp ong\nice age\ngum tree\ngou sa\ngli oblastoma\ngat royd\nfigue res\ner ror\nentertain ments\nec an\ndream boat\ndis membered\ndi mble\ncro m\ncor win\nconspir ator\ncolle tt\nbon ney\napir ateday\nðŁĴ Į\nv ts\ntiff ani\nsof tened\nre collections\npom pad\nmis adventures\nli gab\nkal an\nintermedi ary\nhammer heads\ngal ata\nfrat ton\nea rena\ndin h\nbig bad\nbe hringer\nbab ad\nalder ley\nÄ ij\nswi zzle\nsri ram\nsp hl\nso wn\nrit su\nr ga\npur u\npointless blog\npide mic\nopinion ated\nmo stafa\nmel ange\nheaven ly\nfort nightly\nfirst class\nessay ist\ne ons\ncrump led\ncri ver\nc ór\nbook signing\nbicycli sts\nbb ys\nball ston\nap arelli\namc theatres\nðŁ¤¦ ðŁı½âĢįâĻĤï¸ı\nèĩ ª\nym posium\nwar heads\nwan de\nusc cb\nun suitable\nthomson reuters\nsyndro me\nste tson\nsmart grid\nrut ger\nr nc\npro gs\npre to\npre text\npla gues\npink socks\npathe tically\nmusk ing\nmemories of\nlist e\nkylelarson racin\nja hang\nhos anna\nfollow vintage\ndu ong\nde arie\nbol lards\nbey blade\narchil overs\nantho logies\nãħ ľ\nyo shin\nyeez ys\nvv vv\nthe mike\nstone work\nshuff led\npar c\nosp ina\nmu mmers\nmouse trap\nmaz dar\nh sathletics\nfuture leaders\nf dl\ndon nar\ndisney sea\ncan seco\nab use\n? "-\nâĸª ï¸ı\nาภģà¸\nyofthe week\nuk books\nto sh\nto live\nsemen ya\nseep ing\nsa die\nnon toxic\nn ss\nma dre\nkin k\nkim xi\nki ef\nj angp\nfré dé\nfo low\netiha dairways\ncro s\ncar le\nbou gie\nak leg\nØ§Ø ¡\nw sf\nvali antly\nu pe\ntitus ville\nth ill\nsto wers\nred wave\npan et\no ea\nne mt\nmarketing automation\nm cafe\nla borer\nk tt\niron pigs\nhero clix\ngart ners\nfran ke\nfate h\ncarly rae\ncab ela\nc jr\nbrill ant\nbj b\nback court\nbabe sonparade\nadri anne\nåī į\nz umi\nuk smallbiz\nt zen\nrancher o\npho ton\np tc\nnav ara\nmea gher\nmaced on\njuli ab\nintro verted\ngar issa\nga rena\nf nd\neco s\ndo tie\ndiffu sers\nc tober\nbt vs\nbi deford\nal roker\nab stain\n>>>> >>>>\nðŁIJ ĸ\nw lv\nthe perfect\nsun ami\nretweet tuesday\nragn i\nor ally\nnewsma kers\nne ster\nlon im\nin ra\nido psis\nham es\nh sg\ngra u\nfar a\nfac simile\ndar rel\nd nb\ncraf ter\ncla as\n羣 åī£\nâĶĢâĶĢ âĶĢâĶĢ\nvol tag\nts field\ntech nom\nt and\nstal ban\nst witter\npeace makers\nnoo dle\nnewvision wire\nmonty python\niloven y\nhein lein\nhard son\nge sch\nfri mpong\ndoor ne\ndoctor who\nderma bra\nban que\nadder ley\nãħĭãħĭãħĭãħĭ ãħĭ\nvol t\nvine et\nok in\nno pinion\nker n\nkal goor\nhender son\ngrey ish\ndharam sala\ncurmu dgeon\ncrab be\ncade t\nboden see\nax i\narab ian\nðŁĴľ ðŁĴļ\nworld teachersday\nwil m\nthi eving\nstrol led\nstre pto\nsting ers\nst aves\nsoil health\nsharmar ashmi\nprince strust\npontif ical\npi der\nnu trac\nmeteor ites\nmag z\nma zes\nlu dd\ngrl probs\nfresh eners\nev asive\nendanger ment\ndiab los\nconey island\ncan tata\nbra bus\nbou lt\nboo oo\nat rol\namazon as\nal bom\nag oura\nad dress\nà ¬\nworl de\nwhati s\nser rat\nre pack\npinto fotografia\nper dana\nnoo t\nneuro muscular\nintol erable\nib sen\ngrandio se\nfe tz\ne sher\ndrunken ly\nd back\ncadill ac\nbou l\nbex mader\nak al\nâĶ »\nz ir\nwin star\nvent as\nteapo ts\nteam hendrick\nstick man\nraw food\nol vera\noctag onal\nms dyn\nmo et\nmand alu\nly ne\nle im\nkim brel\ngill ani\nent in\neno ist\ndog fight\nby passing\nbrisban elions\nbir git\nau snavy\nake em\nac v\nâĻ¡âĻ¥ âĻ¡\nâĻ £\nx tc\nwer n\ntu uk\ntapen ade\nsmo ther\nshar o\nroy ale\nreach higher\nprin tables\npaci fist\non or\no ken\nmi ps\nleg en\nj bc\nim h\nhell man\ngri z\ncin c\ncarmel a\nat un\naccentu ate\nti pal\nti ghe\nss ds\nsi ba\nsas aki\nrobb enedict\nresign ations\nquo c\npag anism\noshe aga\nom ur\nnaw al\nmariairene ali\nmack lin\nmach in\nkriti ka\ngran bury\nglo zell\nendo scopic\nda im\nd able\ncu si\ncn p\ncl ann\ncken ya\nbrown band\nbo jack\nze hra\nvote green\nthen yra\nsuperhero day\nse phi\nro sa\nor issa\nmetro bus\nmagand ang\nke ster\ngood man\nfox star\nfer min\neduc ational\neat well\ncolling woodfc\ncap ed\nbww ings\nburn the\nban y\nag enocide\nad x\ntop team\nsycho logy\nspaw ns\nshe ela\nru ffin\nri mary\npuni shments\npan ting\npal es\nnun u\nmal lika\nlip man\nlet itia\njody highroller\nid li\nhot pot\nfranco is\nfer rig\nfa sted\nend es\ndomain names\ndissemin ate\ndisp leasure\ndem ire\ncouncil ors\nciti group\nbougain villea\nbau x\nband mate\nbal list\nðŁķº ðŁı»\nwe sto\nvi als\nuffi zi\nsp ud\nsouther ners\nsolar impulse\nshy ness\nroo o\nre ma\npin ker\npin ay\npal ati\npacific o\nnorthrop grumman\nmatricul ation\nmaster nodes\nln sm\nlaugh in\ngw v\ngui ana\nfis cal\nden ovic\nclifton ville\ncham ps\nâĸ ł\nver hoeven\nthr illist\nta vi\nsynthe size\nstre u\nshih tzu\nroth fuss\nrajkum marrao\nper it\nos orio\noak ridge\nnov oro\nmusi al\nmc comb\nik oro\ni ap\ngh mc\nesp ero\nder ri\nbe tul\nabbey road\nur m\ntony goldwyn\ntaker u\ns onal\npet food\npare kh\nor in\nmo dao\nmen ino\nlove va\nlince cum\nle is\nform is\ndou lton\ncorn flower\nci h\nchair lift\nblog share\nauto trader\namin u\nair power\nwe ig\nta han\ns from\nre apers\npeto skey\nout i\nmeson et\nlo ar\nici est\nheal dsburg\nhe mant\ngom ariners\ngo ong\nfor texas\nfor hire\nfor go\nfa zer\ncor nel\ncancer awarenessmonth\ncan cion\nbo shi\nab ena\nम ह\numb ai\nta ffe\nstas era\nshar ps\nsar torius\ns vo\ns mex\nro co\nneutro gena\nneg at\nmac arena\nlight bulbs\nkam ar\nk aki\njor di\nhc ps\nfre elo\nedi fice\neat er\ndream job\ndisgu ises\ncre di\nðŁĹ ŀ\nw psd\ntalklike apirateday\nrosh ni\nrock lin\nremun eration\nre forestation\npp ls\nphilipp e\npan as\nni ere\nne geri\nn sic\nlong beach\nkenny chesney\njoe budden\njap onica\nhair ston\ngo ths\nfuner ary\nfig ment\nf ps\nemabaras syourbestfriend\ndurg apu\ndul ci\ncraw l\nblo oper\nblizz heroes\nbattle star\nbamboo z\nbail ando\naust intx\në ¥\nÎ ¿\ntide water\ntech radar\nt mn\nstro op\nqueen ofthe\nplebis cite\nom ggggg\nngad c\nnay an\nmi il\nmd pi\nloy alties\nili ad\nil au\nhigh point\ngal ang\ngail simone\nfro u\nepi der\ndynam ism\ncrand all\ncou ture\nbilt more\nadam o\nðŁijĬ ðŁĴ¥\nx prize\nwell er\nway fair\nsym ons\nsky warn\nmen ards\nladies night\nkaz oo\nhin denburg\ngeor gi\nfun da\nd sk\nbren ham\nau ght\nannu cci\në t\nteam sheet\nsho k\nsa org\np silo\now al\noure ux\northo tics\nofex eter\nni ers\nmil am\nmcnam ee\nma def\nlaid back\nl mbo\nkiran bedi\njav on\nha vel\new g\ndol ite\ndar na\nchi eng\nbook binding\nban jos\nab gt\nâľ ¯\nyoo jung\nwee den\nthick ens\nthe secret\nt wa\nswi zz\nsor ter\nsec under\nresi dential\nper y\npalmo live\noculu sri\nnerkondapaar vai\nmu ddled\nlif ton\nknickerbo cker\nke b\ngri dge\nform er\nfo gnini\nen im\ndream like\ncaille botte\nbourne mou\nbar res\nabbrevi ated\n[ $\nÙĩ Ùĩ\nws dot\nwell fleet\nwe ss\nuof g\npic oult\norange army\noph on\nop aths\nohi ou\nmar ton\nl ory\nkeep sakes\njhb traffic\nhutch ings\ngendere quity\nentrepreneur life\ne pee\ndising enu\ndex trous\nðŁ¤ŀ ðŁı¼\nãĥ© ãĥĸ\nwe an\nt cnj\nsunny side\nsouth chinasea\nsolange knowles\nserap him\nsaq ib\nsa thome\nre mit\nr df\npan cit\nour revolution\nop r\nmy corrhi\nmi ike\nmamo vies\nliberalis misamental\njam ila\nhen dy\nhatch lings\nfy fe\nfi aerc\ner am\necclesiast es\nde forest\ncrystalli zed\nbeatsby dre\n) +\né £\nâĸ ¬\nÅ ¼\nwest ph\nun os\ntu olum\nstra hovski\nstop watch\nroad tothe\npl unk\nnon stop\nmohand as\nma saya\nlik ens\nleon ora\nide alism\nhalf pipe\nhak flak\nen ji\ndesi igner\nco si\nbro gue\nbr ith\nbil la\nyam mer\nxi u\nwait angi\nvell yn\ntemp us\nscot tw\nsal ukis\nren ne\nrec ou\nr ft\nqe ii\npun an\npor chetta\not an\nmalcol mx\nleg azpi\nlady birds\nket ts\nhead line\ngrey friars\neu council\neclamp sia\nbri ghts\nbalik papan\narchie comics\na ok\nØ ´\nvs det\nswit ched\nsw it\nstre aker\nst ela\nsojour ner\nsam a\nre ham\nrak shi\nprit chett\nmodao zushi\nleaveno one\nkai ley\njo sie\nhar sher\nham esha\nhal ston\ngenu ine\ngant t\nfor rent\nf me\nexfoli ate\nexc o\ndru sh\ndi um\nchau d\ncarri gan\nav anti\nðĿIJ ļðĿIJ\nwoo oooo\ntwit cam\ntwil son\nschul er\npump er\npro ve\npd k\nmoti v\nmary j\nl mb\nkey blade\njam un\ninvicta fc\nhelen zille\ngome z\nge co\nfi ero\neffec ting\ndisra eli\ndiction ary\ncore tta\ncompul sion\ncolouri st\nat ella\nan ant\nah at\nðŁıĥ ðŁı»\nâķ Ń\nwing o\nturtle day\nsw k\nsv k\nsun less\nstay woke\nstarwar scelebration\nss k\nsam bal\npor gy\npollu ters\npedal ing\nmo een\nming gu\nmb led\nlar ose\nidi opathic\nholy well\nfranco phonie\nfelici aday\near piece\ncitro ën\ncar ies\nbusiness growth\nbu bs\nbree zy\nbig thing\nbend tner\nbank head\nau ssi\narab idopsis\nafa ith\nupd ate\nside winder\nser p\nred hot\nred bone\nrash mi\nradio x\npom pey\nnews agents\nne sh\nkui per\nko td\nkarl lagerfeld\nhun e\nhar po\nfrau ght\nfe brero\ncontempor ain\nben q\nban nock\nb db\naus law\nannihil ated\nacquaint ances\nx n\nwood shop\nstdavid sday\nrow ski\nre le\npar acet\nmiro la\nman college\nki sii\nken ora\ninspire them\nhor ati\nhodg man\nhal ong\nfm ri\neto wah\ndol led\nasap ferg\nab ac\nâĨ ³\ntre au\ntram ps\ntn b\ntime in\nthereal luke\nsrk universe\nskr tel\nshu sh\npeep les\nni yo\nlom ond\nlew ick\nil over\nhy d\nhand lettering\ngood night\ngivesyou wings\ngiuli ano\ngalvani ze\nforget ful\nfill on\nen q\necho ed\ndou sed\ncard holders\nbel ve\nar leg\naf o\nðŁĽ ¬\nì ½\nwater craft\ntw omen\ntu bu\ntren dy\nton ibraxton\nthermom ix\nstraf fic\nsi su\nrac lette\nphal lus\nn sic\nm hl\nke zi\nirish water\nido u\nhe igl\ngc w\neman ating\nema scul\nelias sports\ncon fers\nbay ev\natch ison\nare public\nÛĮ Úº\nweare bc\nvan te\nun lawfully\ntypic al\nthro ck\nsumed h\npro mul\npre d\nphan atic\npen ge\nnew born\nmoor park\nlu ang\nlock up\nlind as\nkir sch\nis wonderful\nger st\ng pr\nfast post\ndiabete suk\ndc p\ncy st\ncon nell\nbo bo\nbig gio\nwitt genstein\nvictori abc\nvi ajes\nthe bes\ntar r\nre ignite\npon yup\nout performing\nmy be\nkr ingle\nkeepitinthe ground\ninterro gated\nghos thun\ngant eng\ndio des\ndhar mamovies\ndevil man\ncarnegi em\nbeu lah\nant or\nðŁĻıðŁĻı ðŁĻıðŁĻı\nvoten o\nu icide\nthe social\nstag n\nst outs\nsoul music\nratt les\nqu be\npru e\nn online\nmoon byul\nmagni fier\nmac neil\nlil ia\nkon stan\nily as\nik shank\nhen stridge\ngu cc\nfaze up\ncor relations\ncham bered\ncaf a\nbraun schwe\nbb cy\nb indi\nam mi\nðŁĴħ ðŁı½\nvi vor\nvare se\nta pir\nspe ach\nschiav one\nsam buru\nrose marie\nq ms\nphilli pe\nover cooked\non point\nmtv teenwolf\nmo cca\nle febvre\njess y\ni gen\nho to\nhead scarf\nhazal kaya\ngar cons\ndru mmer\ncur ricul\nap hid\nam eri\nah ps\nо Ñģ\nwhee zing\ntam pered\nsoul j\nshaz am\npap ill\nnadi adwala\nmor ts\nmil ag\njoburg za\njen nette\nin at\nhoe ffer\nha ylor\ngol dust\nfri uli\nfertil ity\ncon spire\nco ty\ncityof joburgza\nch ac\nbu bu\nðŁĩ¹ ðŁĩ·\nwill and\nwhite washed\nsuri yaf\nsun burned\nsummer vibes\nsr g\nsi re\nse gue\npur ve\npo what\nou ster\nopp ress\no donnell\nmur i\nmarket watch\nka ir\njazz master\nj lc\nhu ss\nger ais\nelo g\ne ject\ncho sen\nboston terrier\nbaahu bali\nઠ°\nxxxx xxx\nton en\nthe family\nsub strates\nsavi ors\nsand banks\nquel wine\npel vic\none onta\nnur ul\nnews live\nn pb\nmat ar\nle eroy\njmi quelwine\nchar ley\nchante relles\nbrack ley\nart as\nap f\naene as\naap tards\nç ¬\ntro po\ntil ton\ntan u\nster ne\nstefan ia\nscar sdale\nra bia\npost mortem\npen ob\nnk jv\nmu sha\nmor rill\nmal functioning\njag dish\nindividu alism\nim presi\nim at\nhusband ry\nhiking adventures\nheritag elottery\nfree assange\ndiyar bak\ncro que\nbear dy\nwest ley\ntruck suk\ntran scribed\nti vo\nshi khar\nshe f\npour quoi\npinck ney\nnam joo\nlexis nex\nladi esof\nkun d\nkeep on\ninspiredby pets\nhe dral\nge ss\nfry denberg\ndominic ana\ndef y\ncour gettes\nbnpparibas open\nall size\nad lington\nabsc ess\nve toed\nv log\nus opengolf\ntin ley\ntech i\nstrictlycomed ancing\nso kol\nsil ences\npic u\np nd\nor un\nor l\nno th\nmeet and\njennifer lawrence\nhuay ra\nhu evos\nfant abulous\nfa ery\nbut land\nbul lah\nbalth azar\nba ster\nar pels\nv hp\nun sightly\nt ny\nsag amore\nri jeka\nresc ent\npokemon sword\nmar rone\nmag alona\nkra bs\nindic t\nher mit\nhem phill\nerkenciku ÅŁ\ne dem\nden zel\nd jer\nbre mer\nblac kie\nbir nie\nbig boy\nbe si\narabe sque\naap ke\na erie\nà° ¸\nॠĪ\nö ping\nweek long\nur ination\nun bothered\ntropic a\ntb k\nsuper saturday\nsi rac\nscri m\nru an\nqu als\npe avy\now w\nnu ova\nnew menu\nlittle things\nlepidop tera\nkil ts\nire v\nfrat er\nfooth old\ndu tyfree\ncorrup ting\ncor aline\nconven or\nconsul ts\ncl amp\ncarrie fisher\nbra himi\nbr annon\nbab by\nap ics\nan thea\nà´ ®\nب ÙĬ\nwou ter\nwest allen\nvi bra\ntsun dere\ntin isto\nthic ket\nter io\nsu z\nsarah k\nph lox\nnick els\nnat sume\nma sandawana\njoh na\ni fl\nextinguish ers\nde spe\ncunard line\ncor ley\nclass man\nchang eling\nbio logy\nap supdate\n???? ?????\n: **\nðŁĻĦ ðŁĻĦ\nw fa\nto we\nthe dress\nthe day\nten emos\nso viet\nsam ine\nqueens way\npho tonic\nn annies\ni ae\nho xton\nhel met\nha be\nexam en\nethere um\ne ks\nde ion\nday project\nball mer\nas me\naber dare\n~ ^^\nwy clef\nu wh\nthe magic\nstan dish\nst ich\nss np\nrc navy\npile up\npedago gical\npav el\np ings\nn mb\nkeyston exl\ngin ni\ngam ers\nfer rier\nex if\ndu plo\ndillon francis\ndash berlin\nchi vers\ncarm ella\nbre chin\nbloom sburg\nar nt\naji thfc\nðŁijıðŁı¼ ðŁijıðŁı¼\nðŁı Ļ\nìĿ´ 민íĺ¸\nthe alex\nt ance\nsoho theatre\nsmart city\nskyline skaters\nro atan\nnu vo\nnouvel les\nms j\njave c\nis let\ninspirethem retweettuesday\ngov au\nge ver\ng ling\ndermabra sion\ncorn flakes\ncoo gee\nck nw\nchul z\ncandy land\nðŁij© ðŁı½âĢį\nwel k\ntr onica\ntex om\nsupercross live\nshin ola\nsan at\npav arotti\npan cake\nlunch break\nic g\nhi bachi\nhead room\nhan gul\ngir aldo\ngen isys\nelo pez\nbed time\nbar won\nakin ator\nahlul bayt\ní Ĩ\nzac brownband\nw cu\nstou demire\nstates ville\nser p\nse dia\nscru b\nschle singer\nrick ard\nrefe c\npropri o\npro cycling\nou ya\nma ston\nhealth tip\nh mm\ngradu ations\nfor tify\nfitz simmons\nfar oe\nfang ir\ncollu ding\nbit umen\naram is\nðŁļ´ âĢįâĻĤï¸ı\nzig er\ny ell\nve ttes\ntree house\ntheor ville\ntelefon ica\nsub version\nsizz les\nshi an\nsecre to\nscot national\nsco ps\nsal ley\npflu ger\npeace ful\nning bo\nmor kel\nmo ise\nkra k\nkn itting\nhul man\ngwyne th\nge z\nfe c\nf ête\nc aceres\nbjö rk\nat twood\nas cor\narmp its\nanimalsin churches\n& -\n̵ Ì\nwales rallygb\ntink off\ntb t\nshin ers\nrock man\nro skil\nram ped\nra bil\nom agazine\nnu st\nntl museum\nmay war\nle wa\nhuer tas\nha gley\nfrigi daire\nflori das\nbu dg\nbrock ley\nbly th\nam ath\nåı ¤\nzin nia\nwyn ton\nwork men\nwag oneer\nru stom\nresi stor\npatt ys\nnew suk\nnan di\nmock ups\nlaid back\njer rod\nj oun\ninglori ous\nhelve tica\ngo transit\nchint skap\nabdul rahman\nðŁijĬ ðŁı¾\nðŁ¥ ĵ\nz adi\nwonder kid\nwad er\nro vell\nrafi que\npi el\nor gre\no da\nnewyork redbulls\nnegro es\nmother well\nli gat\nki a\ninstitu tional\nim pulses\nepi per\ncu ba\ncommiss ary\nbig news\naz is\narse guidores\nwo hl\nwest mount\nvoy ag\nvit i\nvaltter i\ntinisto essel\ntan tra\nsto ddard\nspres ents\npre quels\npran ked\nne gril\nlove eeee\nla kh\njetz t\nhel vellyn\nhar grave\ndun barton\nbuck scounty\nbauer hockey\naw b\nasi fa\nas v\nart print\nar al\n= #\nãĢ °ï¸ı\nô ne\nverme il\nunfur l\ntc disrupt\nsat ch\nsapp hi\nou da\noh c\nna sties\nman liness\nky w\njo sue\ninter op\nimport ation\nher alds\nf nm\neducation forall\ndimitri vegas\nde ana\nday yy\ndatam anagement\ncy no\nct ags\nconfi dence\ncho ge\nchang sha\nchab ot\nbi gh\nbeck i\nbae kho\nb enda\nðŁĶ¥ !\nz ong\nward ell\nu dc\nticket master\nthe ss\nsymboli zing\nsch muck\nsalt illo\nrive ter\npre history\npe ven\npain relief\nover powered\nmis understandings\nmark tremonti\nl ats\nkemp t\nili ve\nh sk\ngir th\neve rest\ndol enz\ndoglo stuk\ncost adelsol\nche ep\nbc age\nbanan arama\nanti etam\nì§Ģ íĽĪ\nthi every\nsp unk\nskel ter\nsecunder abad\nsav arkar\nre upload\npt k\npelle tier\npeep ers\nour self\noku ta\nnever know\nmitsubi shi\nle dges\njohn stamos\nhindr ance\nharmon ize\nfau n\ner ases\nduncan ville\nclassi fications\ncalifor nication\nbarstool sports\nðŁĩ¸ ðŁĩ¦\n¦Ī ìĽIJ\nvs ne\nvil ma\nv ater\nthink big\nstr al\nsta thletics\nspeed y\nselfish ly\nsad dens\npride inlondon\npressuri zed\npre ece\nnicol l\nna ï\nmm pr\nmj f\nmega watt\nl zzy\nl ks\nhou d\nfi zzle\ncole optera\nch aca\ncarcas ses\nyo kai\nym phony\ny one\nww j\nwat cha\nvir g\nscep ticism\nrc ti\nra fin\npic ts\npatron us\nni fty\nmess ner\nmerry gold\nma hila\nlor dy\nhou sley\nhom i\nguadag nino\nglo sses\ngim na\nfil my\ndi ssing\ndaniel j\nci f\nbad ri\nadju vant\ntrek bikes\ntoo funny\nthan g\nten ney\nstri b\nsin ab\nru sev\nrhe umatic\nresiden cies\nren jun\npathan kot\nmil ena\nlin dos\nlibr is\nle mma\nk age\nhy poten\nhur dler\nfanci er\nexpo west\naug gie\nar ted\nan w\naccur acies\na ek\nà¹Ģภ£\nye ahs\nwin some\nun adulterated\ns nel\npublici zed\npren sa\npos y\npatri o\no cre\nne cker\nhann a\ngo lightly\nglenn beck\nexplore r\nel ita\ndi sta\ndelephant day\ndebon air\ndawg pound\ncone jo\ncc v\nbrick man\nbc it\nb pt\nalli a\nab dn\nãģ Ĩ\nâļ¡ï¸ı #\nwet suits\nvad os\nthelasto fus\nsun room\nsin do\nser re\nrob zombie\nregion ally\nra uch\nprs guitars\non elast\nno ct\nnay apakistan\nmu q\nmo vin\nma ite\nleavenoone behind\nlake head\nl vs\njau me\ngre itens\ngr anda\nfirstrespon ders\ndown beat\ndi mash\ncy nd\nct c\ncrimin alization\nchriso donnell\nch b\nc ades\nus al\nting gi\nshon dar\ns rising\nrussell ville\nrp crd\npu es\nntlmuseum sscot\nnick erson\nmika el\nmand an\nmainten ant\nlisten live\nleader shi\nic hin\nhugh ie\nhod son\ngun j\nfirst time\nessendon fc\nd apps\ncrad dock\nby un\nbu ehler\nas signing\nantiqu ated\nad dio\nab acha\n/ âĤ¬\nðŁį ½ï¸ı\nè Į\nzh ny\nrace horses\nob r\nnor co\nmy cen\nmur u\nlen c\nka en\nj mc\nj dr\niran talks\nicha bod\nencel adus\nemmy lou\ndoper ahouse\ndige sting\nday sfor\ncher u\ncast elo\nblack book\nal mirola\nÍ¡ °)\nze iro\nxi o\nun altered\ntra desman\ntiber ius\nspan ked\nsha ho\nsal len\nrabo bank\nma der\nke ren\nirresi sti\ngan on\ng by\nfar fromhome\never e\ndarren atics\nchennai yin\ncedar ville\nbo stic\nbla det\nwhy te\nwa ig\nvi dar\nurbandic tionary\ntal c\nstret ford\nsom bor\nskir mi\nscam ming\nrec ali\npic tou\np lies\nnil erodgers\nlocomo tion\nkar don\nkag iso\niz h\nhon iton\nho wie\ngas ly\ng ci\nent endre\nb ami\nyam ig\nv st\ntran scanada\ntoend abortion\nspondy litis\nsky rocketed\nplayer one\noscar del\noffici all\nnu ms\nmi umi\nlo vi\nland locked\nky les\njuli eta\njac ke\nhard ing\nfine baum\ness ar\nemptythe tanks\ndun gannon\ndesp acito\ncul ly\ncow les\nclover field\nclean ses\ncasca is\nbus k\nbe same\narl berg\nal bie\nag onist\nwolver ine\nvaltteri bottas\ntomoda chi\nthe wild\nthe play\ntermin ating\ntan may\ntall ships\nta queria\nstonebwo y\nsta hp\nsou rav\nsh allows\nra ison\npan day\nnam ath\nmumb aic\nmor ricone\nmedi ators\nlon dra\nh ould\ne mus\ndemi god\ndee per\ndeduc ted\ncru ikshank\ncorrec tor\nchichar ito\ncer cle\nbackthe brits\nasper gers\nas aurus\nacci on\nw ylde\nun dress\ntro ms\ntee hee\nraw son\npollu tes\npi ri\noro so\nni mmo\nme taco\nkill y\njuilli ard\niihf worlds\nhockey canada\ngusta f\nge ddy\nfaul kerson\nf sog\nelizabeth town\ncrowd sourced\ncnn philippines\nba aaa\nash ington\nap ni\naha h\nì ħ\nudhay stalin\ntra eger\nte rest\nspi ros\nso com\npr or\npetre l\nor ita\nnot ables\nnai jap\nmonc ada\nmol t\nmo sel\nmediac rooks\nkari joys\nk ente\nig man\nheal thre\ngoo o\nfro sin\ndo ji\ndan is\ncur i\ncreep show\ncreati vity\ncliff side\nchil islove\ncham ba\ncele ste\nbe tro\naven ir\nare se\nðŁĺĤ ðŁĻĮ\nìķĦìĿ´ì ¦ĪìĽIJ\nu da\nswimming pool\nst impy\nse ol\nsar di\nredu ce\npassion passport\npappar delle\nnit v\nnew collection\nmil burn\nmake my\nkam au\ngo friars\nen core\nellen berger\nden on\ndal by\ncri pps\ncooke ville\nbe u\nbarbac oa\nari ane\nðŁĺĦ #\nzi le\nworld music\nwo wing\nw br\nw ades\nstrogan off\nsax e\ns mee\nmyri am\nmoon light\nmo ko\nmn dassoc\nmirad or\nlobla w\nlam beth\njeff sessions\nhar una\nh yeon\nglu ing\ngame jam\nfascin ates\ndonagh y\ncompens ating\nchennaiyin fc\ncas se\nbi um\nau die\nanag an\nag d\n* -\nthe pink\nsto y\nsli ppy\nscham pion\nsag as\nra sia\nra az\nnon ame\nnb g\nmer gan\nmarin ating\nkr c\nknow sbest\nis enberg\nfa king\ner land\nday swith\ncoloni zed\nat orian\namer sham\n:) :):)\nðŁĻĪ ðŁĻĬ\nðŁİĦ âĿ¤ï¸ı\nyas por\nvan s\nunder class\nstory boards\nso true\nsi bos\nroy ally\npi dgin\nnot as\nmand rake\nmal as\nling ual\nkari us\nk ry\nit sabout\nhugh laurie\nhist sci\ndatac entre\nd hon\nbro iler\nbis was\nbasti a\nas pr\nam tv\nac ry\nê²½ ìĪĺ\nwol fs\nve sta\ntor ship\nt po\nt ela\nsg dq\nsan deep\nsa ia\nru sse\nrandee phoo\npy jama\npre owned\npax man\nknowh ow\nknop fler\ninstitu ted\nhome building\nhol sters\nend polio\ndun ker\nds world\ndo sti\ndixi eland\nberkham sted\nbat son\nbal ert\namand apalmer\nall time\nal ys\nwi relessly\nthank ateacher\nsuperst itions\nsec u\nri vets\npole star\nphotography isart\npenguin random\nolim pico\no cal\nnor ovirus\nmuch hal\nmlp season\nmichigan stateu\nmatryo shka\nlu ms\nlu ann\nkuro ko\nhu th\nfar hank\net as\ndo gged\ndi dy\ndent ity\ndark wave\ncruel ly\ncr inging\ncapit alizing\nbizz are\nbeach boys\namerican gods\nal aves\nzach braff\nun important\nu vb\nthe wrap\nrepleni shing\npin ang\npi guet\npha blet\nper spex\npelopon nese\npe tere\nparacet amol\nmarty n\nlat ingram\nir ala\ngi ada\ngemin itv\ngal ahad\nery thro\nel stree\nconst antino\nch ali\ncar den\nbro wer\nyu chun\nworld wetland\nvibr ant\nuri el\ntim ms\ntanyabur r\ntablo ids\npau lus\npara ben\noz plants\nmanitou lin\nintrin sically\ni ros\nhol by\ngaz es\nfood bank\nflu ted\nfarhank virk\nco ster\nbrian stelter\nbil o\nben atar\narch duke\nwell deserved\nven lo\nv á\nun informed\ntre m\ntrading cards\nsp lu\nshondar himes\nsan ci\nre vision\npunctu ated\npott stown\not rends\nnishi da\nin za\nig es\ng music\nfirstdayof school\nespo o\ncath cart\nc aya\nast ounded\napp el\nam ik\naction bronson\nðŁĮ ¨\nwar craft\nw mmr\nsuper models\nst ich\nspor k\nsc ituate\npal er\nleil ani\nlant ana\nla fit\nkar th\nhorn church\ngat land\nfir ming\nfal low\nden za\nde vising\nday er\ncher ubs\ncab i\nblack comb\nathle tico\nany an\nanten atal\nå ĺ\nÌ ħ\nwi ese\nvig no\ntattoo ist\ns media\ns mbc\nrun way\nresur gent\nre plete\nrd v\nra bly\nr mp\npit ty\npis co\npan erab\nnj e\nlets ride\nl ally\nk lay\nimbi be\nhere tics\nhaw kes\ngo bills\nextra judicial\ncar port\nbird sup\nbf v\nb sy\nappointe es\nè ¨\nãģ ¡\nË ¢\nz iti\nw ence\nuuuu uu\nstev an\nskag en\nsech skies\nrin ds\npu ggle\noni on\nob tu\nmer ito\nkis sel\nking maker\ngoo f\nfab i\nex alt\ndrex ler\nco del\ncan io\nc sir\nbrook land\nbre c\nas king\nas ado\nanimat ronic\nandre am\nalleg any\nacces sto\nyas u\ny cc\nstin the\nsch aaf\npati entex\nnathan son\nmc vie\nmatt goss\nlorele i\nkom bi\ninnocent ly\nillu si\nhosp ice\ngr dc\ncw t\ncoronation street\nc end\nbi ddy\napprehen sion\nanime art\nancient aliens\n. âĢĭ\nâĺº âĺº\nyou version\nvoteredto saveamerica\nvoet bal\nur c\nu gs\nsu mn\nself publishing\nro el\nref illing\nre generating\npeninsu lar\nparker sburg\npan sexual\nmusic uk\nhus kie\nglad ness\nendo thelial\nearth en\ndram atur\nbar negat\naq ha\nani tha\nand al\nal ag\nye quipment\nun failing\ntu dyk\nti mbs\nth old\nstra p\nst ly\nsingle handedly\nsid har\nred hawk\npower ful\npou lton\nphant as\nmaur ya\nmal ai\nload shedding\ni acp\nhamp shire\nh tl\ngirl crush\nfy ne\nfound dog\ndo wer\nander ton\nz ink\nyez idi\nworld photoday\nwhin cup\nuu tah\ntri ggs\nsig nups\nreen act\nrafa h\nn phc\nmin dedness\nmc entire\nkru pa\nkni ghton\nin town\ngrate fulness\ngi one\nen dive\nc ji\nb ws\nare wa\nallank lownz\n. ")\nðŁĴ¤ðŁĴ¤ ðŁĴ¤\n⼠·\nzombies quad\nv fx\nturn stiles\nti guan\nsi kka\nshat ru\nsel o\nsalv ad\nred shank\nr football\none ys\nobam agate\nkal in\nk con\ngree ter\nextend able\nbeg ining\naver age\nari ann\nak om\nðŁĴģ ðŁı»âĢįâĻĢï¸ı\nðŁĩ®ðŁĩ ·\nur p\nuni fied\nu mah\nthe ia\nschre iner\nschaf fer\nsan e\nrejo ices\nportlao ise\nntv uganda\nmin ke\nmassi mili\nmari juan\nlma oooooo\nleis real\njo dor\nimmigration reform\nillusion ist\ni wa\nh tv\nfren chri\nfe ction\ndi ure\ndg ingly\nd banj\ncriminal isation\ncr w\nbu p\nbo ban\nblack women\nav as\nalpine stars\nå ´\nyou ss\ny gg\ntat ay\nstop light\nsick ened\nsen de\nsag ar\noculusri ft\noak ley\nnor den\nmash pee\nliv uni\nkam akura\nheat stroke\ngre ggy\nfo ward\nfc px\nem ura\nden n\ndec ry\ncap ello\nbuc s\nbu ono\nbal khan\nzeit ung\nyounger tv\nwee tab\nsi sy\nse el\nrv life\no ho\nneutr alize\nmerri ment\nm vr\nlong boat\nlay in\nkinder gartners\nhomeand away\nhistorical romance\ngen eliad\neric ho\nasser ts\nabhi man\næĺ İ\nâĮ Ĵ\nwordpress dotcom\nwinter watch\nw gal\nvi da\nvalky ria\nuniversi ade\ntt inger\ntillam ook\ntamar aws\nstra us\nshe ehy\nreit man\nre de\npan gea\nnhl playoffs\nmale e\nma ite\njoseph morgan\nix els\nici er\nfe ist\nfair haven\nepis co\ndat av\ndar ken\ndal matia\ncur zon\ncityof pg\nchec s\nchar lo\ncan tante\nbas c\nandrogy nous\nac risis\nab iz\nãĤ¤ãĥ© ãĤ¹ãĥĪ\nwh er\ntube less\nten ant\ntell tale\nsun dog\nso red\nsigur dsson\nsig rid\nsamsung mobile\nrat ner\nrandeephoo da\nquote softheday\npitts field\nmu tombo\nla wa\nl sl\nj vm\nj ii\ning mar\nhard woods\nhappy girl\ngrace helbig\nglasne vin\nfooty show\nfa wl\nchoo ks\nc and\nbo res\nberser ker\nðŁĴ¥ðŁĴ¥ ðŁĴ¥ðŁĴ¥\ny im\nvo ici\nvai bhav\ntt n\nthat cher\nsupri sed\nsu plex\nsi op\nsen bob\nsa wed\nrr l\nri gat\nq so\npro tour\npat oo\nnat ed\nmis d\nmar ke\nma thon\nker at\nhypno tist\ngo huskies\ng atta\nes group\nem pt\ndol ittle\ndel ancey\ncour bet\nconfer ring\ncarlyrae jepsen\ncanon usa\nbeat ings\na holics\nðŁĺŀ ðŁĺŀ\nverte bral\nstr ac\nstat eline\nregin eval\nregineval casid\nreal blackcoffee\non myo\noffici alo\nmar dan\nlar osa\nk ny\nin conveni\nilove it\nhi ms\nhand ily\nfan n\nfan acc\nf to\nech ever\nde activate\ncn w\ncamis ole\nay outh\nar wen\nall and\nab ot\nðŁĶ ĭ\nwr gb\nwh iny\ntoy fair\nsun glasse\nste x\nskull girls\nrab bids\nof hope\nmumford andsons\nmou ton\nmel vyn\nmc diarmid\nle mont\nki ir\nja wor\nef c\ndyr dek\nbroad com\nbasspro shops\nar bon\nall kpop\nðŁĺİ ðŁĺĤ\nyrs ago\nun dressed\nste pson\nshort ness\nse vic\nrespon dent\nre decorating\npessi mist\nob en\nni f\nlland aff\nke f\nhurricane maria\nh pp\ngrenad ines\nful fil\nexam iners\nequal payday\ndaysof ourlives\nchec kitout\nbell flower\nbefri ended\nbeaver creek\nazerbai jangp\nall sopp\naim an\nwhis ked\nur du\nsho tz\nseque ster\nsau ter\npro tracted\noy w\noun cil\non ight\nnit ride\nnca as\nkim brough\nkh in\nhome forsale\ngra ber\ngol die\nflui dic\nerst while\nder vish\ncon temp\nchild hoods\ncaptain americ\ncade au\nc ft\nbron c\nbri ones\nale vel\nagar den\nadri atico\n\' ),\nðŁį ĸ\nvivid sydney\nup stat\nre elected\nre cluse\nquad ra\nprime knit\nplay fully\npar ik\nny r\nmill iner\nmate o\nkil ian\njin shi\nine quities\nidin amen\nflim sy\nd wayne\nbi dge\nbare foot\nbannock burn\namu st\nag ut\nade kunle\nðŁĺį ðŁĴĭ\nwic ket\ntur rell\ntr all\nstu ttering\nsmo thers\nslu gging\nsl benfica\nsam ut\nsaj jan\nre turner\nran unculus\now asso\nlitho graphy\nle son\njef free\nha das\ngurud wara\ngaspar illa\nffff ff\nfah my\nes ny\ndha ba\nde bru\ncontent strategy\ncanonusa imaging\ncan tin\nbesto ws\nbenz ene\name er\nal mir\nÑ ħ\nw uk\nte ena\nspand au\nsl acks\nshra van\nse er\nru x\nre can\npopp unk\nom arion\nob gyn\nli ppi\ni robot\ngun ship\ngu dang\ngood to\nfor gettable\nel isse\ndis lav\ncc ma\nbud da\nbrod sky\nbritt a\nbon avista\nbet we\narth i\nar vada\nacor ta\nä¸ Ń\ntweet storm\nsal u\nro mu\nperpend icular\npartofthe pride\no dometer\nmoncri ef\nmad lib\nlur ch\nkon go\njam il\ninjec table\nhu y\ngal lego\ng afe\nfreen az\ndunbarton shire\ndisney infinity\nda han\nbar ingo\nballant yne\nba je\nal ors\nab devilliers\nðŁĴķ .\nðŁĩºðŁĩ ²\nyar brough\nwhit erock\nvee am\ntw ales\nsk ai\nsepte mber\nring git\nred sea\nra fred\nquig g\npollin i\nofthe world\nmadein britain\nkz n\nkalin ingrad\nj sw\nhawk nation\nh la\nglen rothes\nem mac\near nit\ndoug ducey\ncondo lee\nas sis\nane es\nacci es\nworl dradio\nveronic amars\ntele prompter\ntee public\nsailor moon\nrat ed\nmon ast\nmark it\nmakon nen\nmad ness\nleh ner\nk ca\ninfo en\ngi ms\nge sso\nfr amer\nfi era\nf sb\ndown ham\ndarshan raval\ndaddys girl\nab hay\nvicari ously\ntwee p\ntom aso\ntik har\nseason ality\nprime val\nonec lub\nnargis fakhri\nme te\nmag fest\nfre ida\nfat ma\ndonington parkuk\ncorpuschri sti\nconfe d\nchuck ling\nbridge town\nb halla\nanticip ates\n! ðŁĺĬ\nzon do\nworl delephantday\nwis ley\nwin c\nunsig ne\nsu cess\nra gg\nq ar\nolim pi\nlinde mann\nkali l\nirrepar able\ngab bie\nfree books\nem lyn\ne brahim\ndam busters\ncu pola\ncham berlin\nbro co\nav atar\nat albihariv\namar nath\naf ish\n.... .."\n" ??\nwb ko\nvel ly\ntho b\nstreas ury\nstop km\nsec tor\nride sharing\nplum mets\nmill ville\nmary beth\nmar bury\nmal ini\nis chia\nim pu\nhaver ford\nhappy womensday\ngh ero\nfo e\nexpe dited\ncharle voix\ncc p\nca o\nbackthe birds\nab bs\nðŁĺĽ ðŁĺĽðŁĺĽ\nÙħ ÙĬ\nwalk athon\nver on\ntra ktor\nton igh\ntes ers\nss ons\nsam and\nrepra p\no bra\nnir mal\nniq ab\nnational park\nmat adors\nmal evich\ng sn\ndun lo\ndh fc\nde tal\nciti field\nce ded\ncait lyn\nausv pak\nart fest\nappropri ating\nall women\nz ella\nweb hosting\nto pra\nsy s\nspiel man\nsnapmatic art\nscent ral\nrefr active\nre frame\npat ern\nmagic rock\nkhush sundar\nhemp field\ngab i\ng war\nfort inet\ndark ening\nchick lit\ncer velo\nbag gio\nap t\nðŁĺĺ ðŁĺĬ\nب ر\n´ ´\nwel ford\nuck field\ntd garden\nspi vey\nseptic eye\nroll wave\nreboun ded\nraf ale\npu rohit\npromon tory\nplu cky\nmuseumo flondon\nmu fc\nmoon walk\nle sham\nkol lam\njessic am\nhead winds\nfre mont\nfla ked\nfit ton\neto ile\nbrain less\nbe tel\nar be\nðŁİģ ðŁİĦ\nâĢĭ âĢĭ\nwei maran\nwat ts\nwagen ingen\nw mo\ntual atin\ntro d\ntil de\nstrategi ze\nstewar dess\nstan sfield\npropor tioned\nper ot\nofficial aldub\nmun da\nmo ong\nmid lands\nmarine tte\nk roc\nham idi\ngri pper\ngob bler\ngo ins\neuphor bia\ndreams cometrue\ndi adora\ndef lection\ncyan obac\ncollin sville\nclaustro phobic\nce dia\ncal lus\nburi ram\nas jad\nà° ®\nuc ine\ntun s\ntory canvass\nsun tan\nste deli\nsensi bilities\nseed less\nsag al\nruby rose\npreten se\nn fb\nmon tes\nlo sal\nlar oche\nkar isma\njen s\ngru dges\nfore al\nexcav ators\nenni o\nemboli sm\nel dora\ndi able\ncou se\ncor ic\ncarr boro\naa e\na oyama\nzo zeebo\nzar co\nval eri\nuni ofexeter\ntram onto\ntra sk\nt dk\nsubli me\nro ys\nresurrec ting\npro vision\nmari sha\nmare mma\nlooking good\nlex po\nkutz town\nkop itar\njo ed\njay ryan\ninferi ority\nhil le\ngol da\nfashion police\nfairy land\nex im\neuro pol\nclif bar\ncir illo\nbrit to\natul lah\nagor as\naccu radio\n. »\nwood turning\nun disturbed\nuk h\nsp liff\nsher rill\nsh elli\nsale stips\nsa chi\ns ld\nradio logist\no sten\nnan ette\nmiami dade\nlat ic\nkil roy\nki zer\nkh en\nke shar\nj ci\ngreen building\ng md\nfemen ino\nempan ada\ncandle sticks\nbye bye\nbul loch\nblo tter\naround the\nalli ving\nwal u\num or\nther ton\ntal war\nss mann\nsha ile\nrun t\nro ze\np ander\nny lander\nno zzles\nnaga i\nmaz das\nmartin i\nly ca\nloving it\nki owa\neras ers\ncas save\nbis co\nam ini\níį ¼\nti gard\nth ig\nstateof mind\nslu ice\nsitting bourne\nsham bhala\nred list\nquiet ness\no iq\nnbas ummer\nmetax as\nmat ts\nmar ling\nma ad\nli ed\nj ina\ninter laken\ninte xas\nhand shakes\ngall bladder\ng br\nfar relly\nboston college\nasyn chron\nar le\nantiques roadshow\nand ed\nan ahi\nador ns\nxi ang\nworld vision\nwood hall\nrutger su\nro main\npronoun cing\npiec ing\nnai vasha\nmishaw aka\nlamp work\njay ce\nivan hoe\nindivisible team\nidol master\ngab s\nfinal level\nfe tc\nf jb\ndi sses\ndecision making\ncro stini\ncour sing\ncar ves\nan tof\nwine spectator\nver it\nun kind\nspinn aker\nsle p\nseper ate\npre loved\nous mane\nmin econ\nmal zahn\nlove day\nlav azza\nkl inger\nkac i\nfor us\nf ú\nf se\net tore\ndeer hunter\ncand ela\nbobble heads\nbel tre\nban do\nbab i\nb illu\nacu te\nz sl\nwat ling\ntele com\nt gm\nsurpri se\nsuper valu\nsevier ville\nsch o\nsa hi\nren dang\nregi a\nperpetu ating\npar veen\nmood board\nmer lo\nme go\nkom al\nki efer\nin extric\ni dar\nhu ish\ngon do\nfoot notes\ncham bord\nblizz ards\nbbc africa\nb fc\naq aba\nais d\nðŁĽ ¸\nwal nut\nun selfish\nuf ti\ntimoth ée\ntewks bury\nsumm ation\nstephen asmith\nso dom\nselec cion\nro ya\nrepa ire\nprosp ero\npha i\nou ston\no zy\nmel vin\nlove thi\nlamp shades\nkh t\nk eng\nir ua\nin cur\niam steveharvey\nhowe y\nhom icidal\nhe cker\nfeed backs\ndu pon\nde be\nblood thirsty\nar ni\nand uil\nÄ «\ny eng\nwe izen\nspringh ill\nsp rig\nsch ler\nnp bot\nmin aret\nmaha shivratri\nlittlemix offic\nle van\nlab ours\njj ong\niko shi\nhy olyn\nhat o\nha sten\nd mn\ncycl amen\nchicag op\nblack heart\nbl yn\nbarne veld\nambi valent\nðŁ¥ Ľ\nw bal\ntu ft\nsun downers\nsubsi diaries\nset tembre\nrel td\nplan ed\nmar mara\nmad town\nliv uni\njar dim\njan is\nharry hausen\neu a\nest reno\ndo able\ndissi dia\ndis ordered\nca at\nannoy ingly\nal ax\nÄ į\nww y\nwr ing\nur ner\ntwee d\ntw ire\nthought fulness\nsho ji\nsar co\npho gat\nohio ans\nny rr\nnov a\nnorth westernu\nnac ac\nmour ned\nmam mukka\nmal tesers\nlan sing\nedin boro\ndr ones\ndepra vity\nconor maynard\ncherry blossom\nch oli\nbiophy sics\nasse en\n( /\nvi ento\nsri man\nsf chronicle\nschol z\nrow lett\nribb on\nren ga\nrec tal\nrascal flatts\nmi v\nmateri alize\nmag say\nkoo p\ninvinci bles\nimacele brity\nhello ween\ngor ica\ngi ge\nfire starter\nfe p\nenqui res\nbe jeweled\nang ana\nalbu mo\nsi sulu\nsand paper\nre designs\nraff i\nquad ril\nover paid\nn gw\nmegam all\nmac ie\nhe avies\nha aaa\nh itec\nf dd\nby catch\nbla in\nax stv\nar ocks\nðŁ¦ģ ðŁ¦ģ\nwor ke\nve stas\nshin di\npercep tive\np wm\nncss bethebest\nnavig ators\nlu men\nligh tup\nkak amega\njake owen\nin conceivable\nha gee\ngreen hills\ngot land\ngarda ÃŃ\ndocu sign\ndalla spd\ncom mas\nbra gged\nbiz arre\nbat ov\nag nes\naam u\nÄ Ł\nulaganay agan\ns ited\nriver ina\npalo alto\no shie\nnever more\nn land\nmc coys\nmaxim al\nho bie\nh cg\nfrome arth\nexor bit\nexe ge\ncopy rights\nclear field\nclai mants\ncau sation\nbu stam\nboo zy\nbon hoeffer\nbam m\naw ur\n?! ??\nwholesal ers\nsuper sunday\nrichar do\nre packaged\npr iti\npenguin ukbooks\npas aden\not m\nnigh y\nmi ao\nmaz ari\nka oru\nju sth\nincre ment\ngreen man\nglenfidd ich\nfor st\nf ourier\neste e\ne speci\ndallas news\ncuad rado\nc pl\nbu chi\nbrace bridge\nben guet\nbella ire\nb heem\naro oms\nabi ke\nÑģ п\ntoyo tac\nthir u\nteam envyus\nstar sky\nsol ent\nsmar ty\nshine y\nric ki\npenn sylvani\nmontepul ciano\nme sports\nkail a\nj one\nine u\ngun controlnow\ngo slings\nfoot fall\nfar rier\nel ucas\nel nella\nde composed\nch andy\nblack ford\nbeat rix\nalma gro\nadden dum\nad ress\nabduc t\nvidy alaya\nvent us\ntrol ley\ntin tag\nspeci alt\nroo sting\npur ported\npa sta\nopenstreet map\nmu ang\nmaxim ili\nled bury\nkel seab\nkat u\nk weli\nis ra\nhoard ings\ngc b\nfu ze\nfriendship goals\ncyr illic\ncreepy pasta\nce zanne\nbon zo\nbo thy\nblur ry\naziz ansari\nami right\nys weden\nwoj ci\nva shi\nthevamps james\nstee pest\nshahi di\npuneeth rajkumar\npack aging\nover valued\nmu tha\nmotor ised\nmend i\nla an\nk old\njas pers\nidinamen zel\ni vers\ngas ping\nelec tors\ndur rani\ncol li\nchi est\nch utes\nbmw motorsport\nblo bby\nwend t\nweek ende\nus weekly\ntype faces\ntor ts\nspr i\nprank sters\npancre atitis\npak ka\nim pro\nheart day\nhab sburg\nfresco es\nexpedi achat\ncar pooling\nbe jealous\na iga\nðŁĺĤ ðŁĺľ\nðŁĴķ ðŁĴĸ\nys c\nw annab\ntra ger\ntor us\nthe bar\nsy nes\nswi the\nsubordin ate\nsin clar\nsi ab\nsel ing\nscienti st\ns rule\nre told\nr inge\nprofe ss\npra chi\nnat al\nma soud\nma ble\nlou pe\nload ers\nj wt\nice vic\nhebri dean\nfountain pen\nfet ches\nde ems\nchild labour\nbo ren\nadu ba\nvi f\ntorpe do\nsla inte\nsar ada\nono van\nmaxine waters\nmach u\nintra venous\nhousel dn\ngwang ju\ngeo graphies\ngal eries\nfein berg\ne my\ncross breed\ncre ston\nconsisten cies\ncol ou\nbe mo\nb hel\nau tre\nau ch\nastro biology\nair strip\nag andhi\nadvantage ous\n! ðŁĴĹ\nx ts\nuzu maki\ntin foil\nteenchoice awards\ntad ashi\nsonymusic south\nsoci ale\nse urat\nsan tee\nre th\nppor tunity\nnewsad elaide\nmol en\nmetallur gy\njamiro quai\nir anga\nhydro therapy\ng les\nfran che\nfra se\neri sts\ndam as\nbiele feld\naller ini\nðŁį Ŀ\ny ax\ntrans media\nsur y\nsummer tour\nsu iza\nsi ra\nsh ada\nreminis cence\npro tists\no soy\nnf ld\nmar mont\nmagic johnson\nlan c\njessic aal\nhur ley\nhad leigh\nha dron\ngui seley\nfo td\nb bau\nau berge\nacti vel\nye m\nvac caro\nunder study\nun fulfilled\nun ca\nsu chet\nseaco ast\nready playerone\nram ey\nplussi ze\npai va\nnewer acap\nmin oz\nm pe\nli ske\nlegion ella\nkom men\nkate y\niv lp\nin m\nhr vat\nfinger ling\nea thealthy\ne jer\ndisinfect ant\ndark horse\ncro que\ncow bridge\nast an\nðŁĶ Ĵ\nðŁĩ» ðŁĩ³\nðŁ¥ ¤\nÙĦ ÙĪ\nun clean\ntuesday treat\ntranscri bing\ntain an\nsing hal\nsher rie\nshako pee\nsarab are\ns ward\nro ams\nr ct\nplane spotter\nol x\noff ame\nn als\nmuñ oz\nme chs\nmaz inger\nm hd\nlen ow\nku bert\nknow the\nhann o\nflat iron\ner ys\nen chant\nconquer ors\ncd x\nbu shido\nbonfire night\nauto bots\naudrey hepburn\nas signs\nak ara\ntit ania\nsub han\nstat oil\nsom alis\npun cher\npe sci\npal as\nnoir vember\nmathru bhumi\nli mber\nfo iling\nffxiv snaps\necoun ty\ndou cet\ndeli c\nble tt\nbar ham\naard vark\n. ðŁĶ¥\nun affordable\num al\nty ke\nthe war\nshe eps\nsc old\nretin opathy\npol ski\nl illi\nk you\njan ina\nindom ie\nhor wood\nho gue\nglob alists\nera iders\nembarc adero\nco ddington\ncanvas sers\nbird seye\nbein sports\nart an\namaz onia\nam studios\nallevi ation\nalas kan\nal vi\nðŁIJ¾ âĿ¤ï¸ı\nಠµ\nà° µ\nyen press\nud f\nthe golden\nt kd\nsequo yah\nsap teched\nray na\nra ad\npy ard\nph m\np yo\noli phant\nmorning news\nmar den\nmandalu yong\nlu mina\nirrefu table\ni wi\ne oy\ndi dier\ndesch amps\ncornwall hour\nbrooking sinst\nbor romeo\nallthe time\nadr ille\nwork spaces\ntrain er\nsu th\nstand swith\nsc ola\nru mm\nquag mire\npad er\nob or\nnu er\nmotor ways\nmohe gan\nmi en\nme mp\nmarke dly\nku chi\nkoth ari\nkelseab allerini\ngi ana\ngeom agnetic\nfu m\nfri se\nen ick\ndi vide\ncyber sec\nclá sico\nbro c\nbe fully\nau stral\natu ral\nyoko ono\nuniversity leeds\nsti glitz\nshre wd\nrestaur ante\noo ja\noh tani\nmonte zuma\nmit i\nmarsh mell\nlo zi\nkkkk kk\ngov mike\nel ane\ne pr\ncra ved\ncr anium\ncc as\nboy ce\nbo gged\nbill erica\nar sen\namp stead\nðŁĺĤ ðŁĺı\nðŁĮŀ ðŁĮŀ\nz j\nwo ve\nwin a\nwalla sey\nw swan\ntin ie\nthr anduil\ntal mud\nstom ach\nsqu ished\nsmall youtuber\nseri en\nsalam anders\ns ness\none big\nlloyd minster\nkim ble\nkas sandra\njoey bats\nhamp son\ngli zzy\ngle d\ngg j\nes cott\nerick a\ne um\nde gale\nda che\nconfis cate\nbul gogi\narthr itis\nali x\naf er\nà®ķ ள\nwar mb\nvander meer\nu in\nso co\noiq fc\nlu gs\nll bean\nke ma\nk rush\nj mp\nhi x\nflori stry\nconvolu ted\ncle a\nchil ies\nar vin\ntin dustry\nth une\nsyri ac\nsurvi ve\nspark lers\nshaho ffice\nsem ites\nsag er\nry le\nre kt\nra ita\nquad ric\npsilo cy\npath ophy\noak well\nni antic\nn acion\nmis using\nlpr tg\nler i\nk music\njet ti\ngod wit\ngn ition\nfer vor\nfel ter\nfe mail\ndream world\ndisc ou\ndestination wedding\nde clutter\ncurly hair\nch hs\nc gc\nbournemou thecho\nbil ge\nac ac\n+ -\nðŁĺī @\nwomen shealth\nwack y\nvan wa\ntwee tuk\nte wari\nte che\nswal edale\nsummar ised\npsych ics\npar os\no euvres\nmill ward\nlong march\nke k\nka sem\nhower ton\ng su\nfon ds\nde posed\ncrack head\nbad en\narri er\nann en\nìŬìŀIJ ì¹ľêµ¬\nâľį ðŁı¼\nzax bys\nz df\nterremo to\ntann in\nse ph\nrebec cas\nprioriti zed\nocta vio\ni funny\nhaqq ani\neu m\nef o\ndan one\nd lo\ncordon ed\nche p\nbel itt\nanat oly\nal h\nste iger\ns friday\npresent able\nmar ama\nman on\nji th\njaf frey\nha sa\nglu tamine\nfre shies\nfoo ts\nel den\ndese ret\nd drive\nclear the\ncampaignfor leo\nbangsam oro\nangla ise\namand at\nåĨĻ 羣\nwi spy\nv fr\nurban ist\ntouch line\ntoffe es\nthe ben\nstri l\nqubool hai\npreci o\nox en\nov sk\nnov ello\nno yes\nmar gre\nlou ghe\njess ical\ngid dens\ngen ome\nchalleng er\ncaroti d\nbly the\nbl am\nbi v\nbam ma\nbally castle\nac am\nâĢ ij\nzab aleta\nwip wednesday\ntwitter india\ntunnel ing\ntrans world\nt ween\nstilt skin\nstab enow\nsarabare illes\nsan desh\nquizz ed\npenob scot\npal ouse\npa an\nof fi\nmer rier\nm we\nk way\nia wn\nem un\negg shell\ncou turi\ncoo ker\nclass less\nchi os\ncag atayulu\nbay reu\nap ie\nan son\nam stel\nagronom ist\nè ±\ny gent\nweare rs\nvla anderen\nvery one\nsp s\npl ers\nnivers ary\nneiman marcus\nma ut\nla gers\nkalgoor lie\ngl t\nge ena\ndictat orial\ncwm bran\nbe ee\nठ«\nw bal\nvit ally\nulver ston\nte tanus\ntab oos\nsthe band\nsta an\nsque als\nseab reeze\nsavag ely\nr mu\np be\nn ke\njo ven\nj mo\nhypo theses\nhen n\nhealth ily\nguil lo\nfeliz jueves\ndn cle\nde de\ncrossh airs\nclow es\nbritish airways\nami ka\nalcar az\n" :\nye aaah\nwol ff\nun reached\ntwiz tid\nturn tab\nsal im\nread ership\nquin ones\nquanti fication\nover lays\nnational cheese\nlow brow\nlang ton\nla fayette\nhorror art\ngr ls\ngib ney\nbow tie\nble phar\nbit co\nband leader\nanarch o\nacker mann\n๠Ĩ\nwall ington\ntab c\nt md\nsm ilers\nri pened\nra ging\nli ri\nlg v\nkn oll\njak u\nim be\nelo him\ndono stia\nd hr\ncyber aware\nchit wood\nðŁijįðŁijį ðŁijįðŁijį\nà© ĩ\ntrill anes\nthought works\nte ared\nsan gel\nout shine\nnr b\nni bbling\nmueller report\nmehboo ba\nm jol\nkali spell\ninv ade\ninf ante\niggy pop\nhigh lighters\ndd dddd\ncontra ils\ncoer ced\nchil dri\ncaterpillar inc\ncad dies\nbeef ed\nbar ajas\naco in\na joy\nðŁĮ °\nwq ad\nwn a\ntwis cone\nsuz an\nsm kt\nsche id\nscham pionship\nsav aus\nsa hy\np sin\nnj transit\nnanop article\nmine strone\nmarshmell omusic\nlanc a\nkings go\ngas kell\nfriday feei\nfel tham\ndraw something\ncri s\ncasablanc as\nver ges\nschwar ber\nrr m\nrise vans\nrevel ry\nrequis ites\nprestat yn\nping pong\nno fx\nnine veh\nnapp ies\nle up\nin decision\ni gre\nho ka\nhass ell\nhard case\ngau dreau\nflex ed\nfat to\neber le\ndissi mil\ndefin itively\ncra ven\ncanu ck\nbest life\nbe better\nam bridge\nach risevans\n¸ .âĢ¢\ny aj\nvi as\nt sh\nsu ji\nsar my\nrose hip\nradi ok\non gan\nner oli\nmi ja\nlong sleeve\nlis beth\ner ocks\nef lower\ndoc ent\nching ford\ncb k\nbyz antium\nam r\n! **\nðŁĶ ĥ\nãĥ Ń\nà µ\ny ma\nwhit estone\nur k\ntheri dge\nsandown park\np bp\nnw p\nno well\nmr david\nmill s\nma gia\nlittle john\nku ra\nko ski\nhur ston\ng night\ncor ina\ncom el\nbe fit\naro y\nab ney\n. âĿŀ\nwiki data\nwar minster\ntro yes\ntodor oki\nstat ins\nre touched\npen ting\nos metics\nnin h\nnick jr\nmin it\nmemory lane\nman cy\nl ce\nkip choge\nkal k\nil hoon\nig ami\nhan rahan\nfridayfeei ing\nfly away\ncoldwell banker\nco ady\ncha el\nbo gge\nar xiv\namar ok\naf ir\nacadi an\nู à¹Ī\nurban outfitters\nun spoiled\ntab riz\nsun deep\nstom pin\nru ido\nrep ton\nre activity\nrav ana\npre debut\nna ito\nmr in\nmill wall\nlind strom\nki bera\njo ve\nintelli gible\ninst as\nindiana jones\nhedge hog\nfre itag\nel ana\ndau sa\ncham ois\nbil lowing\nanti freeze\nalice springs\nðŁį Ħ\nyu su\nwa xy\nwa aaaa\nvir tus\ntin gh\nsoor aj\nsh kh\nsal aried\npray toendabortion\nnor di\nmotor cyclists\nmalevol ent\nig lio\nhomo e\nhere we\nger aldo\nfron d\nfloo daware\nep src\ne prix\ne bel\ndu pri\ncu nei\nameric ann\nðŁĻĮðŁı» ðŁĻĮðŁı»ðŁĻĮðŁı»\nv sc\nthe si\nten bach\ntel kom\nspan x\nsp eller\nni am\nnathan thewanted\nman nar\nm cla\nl alla\nko at\nkar pov\nkar la\njourney to\nhu esca\nho ffer\nguang xi\ngone but\nek ur\negg leston\nca ire\nbo hen\nbarr haven\navoc a\narmy strong\nano di\n??? !!!\nðŁĮ¹ #\nåİ Ł\nâļ ľ\nzi am\nwa th\ntun n\nte p\nscumb ags\nsco ffed\nrol land\nright move\nraim ondi\nque e\npushawards jadines\nnotori ety\nninjatur tles\nke dar\ng sg\nfro wned\nde bo\nd da\ncourt land\nchi seled\nand ad\naf ri\n$$ $$\n" &\nØ °\nzo i\nw ska\ntur lington\nthe young\nser ai\nsec tarianism\nre aper\non ico\nom yel\nnam ur\nink master\nhar vin\ngle b\nfatt ening\nehl ers\ndwar fed\ncom it\ncly burn\nbas sa\nant one\naltern ates\nðŁij ĵ\nðŁIJ ı\nyn ch\ntv week\ntu ta\ntomat illo\nsom mar\nscho en\npv t\nprop ellers\nprior at\nna stics\nma aran\nlu lac\nkin sler\nke mono\nke keke\ngrub hub\ngridi ron\ngir lin\nfe hr\ncovent garden\nboom boom\nbianc adelrio\nbas sin\nabcf pll\nðŁĶ ¦\nyoland aph\nwel ton\nthel ord\nten zin\nsav i\nren ée\nr ne\nphys ician\nnu ig\nnd win\nmichelle visage\nmerck x\nmeasura bly\nmanfro tto\nmagne to\njae bum\ninst at\nin azuma\nhurrican emichael\nhali burton\ng bt\ndisco vere\ndi po\ncas c\nblue bird\nblu efish\nat ali\nart scouncil\nandrze j\nanaphy laxis\namerican made\nalbac ore\nðŁ¤ij ðŁ¤ij\nzav ala\nvacuu ms\nshopee my\nsch nee\nrez oning\nplay makers\npin ups\npart out\nnarcole psy\nnai ro\nmiil kkk\nman owar\nkis met\nhau ght\nfish el\nf anime\ner ici\ned sel\ndutt sanjay\ndun ce\nde music\ncer novich\nbor at\nb days\nang li\nw tp\nsouvla ki\nrec ti\nnah in\nlovewhereyou live\nli gon\njo hal\nim movable\nhil son\nhesper ia\ngn at\nf tt\ness el\nen amored\nelton official\ned a\ndee speak\nd wa\nd don\ncumu lonim\nbe avis\nan ji\naf lgf\nðŁĴ« ⾨\nðŁijĮðŁijĮ ðŁijĮðŁijĮ\nðŁ¦ ī\nоР»\nwm police\nwan ita\nv sd\nuro pe\nup ton\nsure ty\nstef on\nru sten\nrecir cul\npress uring\np ela\nmc alister\nlin na\nl nr\nkri swu\nkim jon\nish ment\nindustrial design\nhr g\nhi mesh\nfer ri\ndel aunay\ncarbure tor\nblu en\na home\nðŁĺī ðŁĺį\nwish art\nup o\ntu it\ntri ennial\nsema show\nram iro\npur posed\nprivate eyenews\nplough ed\nonthe beach\nminne haha\nman ne\ninj al\ngwend oline\ngeor gel\nfle mington\ned b\ndi ouf\ncreation ism\ncran ford\nbin du\nìĹ Ĩ\nè ³\nyn z\nuk g\ntrans iting\nthr itis\nsmu dged\nsi en\nshin in\nsher rod\nrus set\nroman ceno\nrepri sing\nplan er\nphoto bombs\noc f\nmo dic\nkejri wal\nk umi\nhemi spheres\ngoo devening\nfinancial planning\ndy fi\ndistr ito\ncor ian\ncel i\nbur nished\naw el\nart ph\nag ging\nud l\nthedaily beast\ntax ic\nta kuya\nstair cases\nstag ger\nshow me\npre ble\npitu itary\npad gett\nno bun\nmaj o\nlumber ton\nlime house\nleagu ers\nl sat\njam an\nit isation\nhedger ows\ngo pichand\ng eld\ndoub lec\nde bby\ndaily qotdapp\ncu neta\nchri schristie\nchain mail\ncake p\nbir ks\namy klobuchar\nðŁĶ ŀ\nâĢ¹ "\nza ar\ntown hall\ntopo logical\ntimmc graw\nsel on\nsbu x\nquick sand\npin nock\no strava\nmp ath\nle lo\nkar ang\nkag i\njudge ments\nju tsu\ninf antic\ngo kingsgo\nfolk art\nfli pit\never grande\ndav el\ncut ts\ncustom isable\ncon c\ncommit tee\nblueno se\nbelfast giants\nbarn acles\nbar nhart\nb tech\nar mani\nan adol\nagh an\nag ie\nê² Į\né ¢\nyorkshi rec\nvote uk\ntur no\nther mic\nstu di\nsre eni\nsoci ete\nsil ken\nsi rs\nsami yusuf\nqu acks\npren tiss\nnational nightout\nmp k\nmono logues\nmo hawks\nma vi\nish tar\ning our\nhan kins\ng force\nembarrass ingly\nek ay\ndil i\nde boer\nchester tweets\nca pper\nash mole\napp or\nal yankovic\nafter taste\n(* ´\nãĥķãĤ §\nwave form\nwa hid\nun recognizable\nsos fam\nscien cer\nre la\npo thead\nnu buck\nni st\nnai ja\nmot ör\nmo sses\nmc quarrie\nmak ro\nm provement\nluton town\nih ra\nhay y\nfirst post\net ting\ndance day\ncough lan\ncar ti\nber cy\nbarca stuff\nbal ms\naxel rod\nar trave\namit shahoffice\nâľ ĸï¸ı\nØ§Ø ²\nty c\nspeci es\nsenator collins\nre wire\npepper corns\nmo sman\nmer ly\nlo ssi\nkany akumari\nhealth ful\nhe pp\ng wc\ndebr ame\ncoor slight\ncentrifu ge\nbudd has\nbed sheets\nbate son\nb ingen\nanurag kashyap\nãĥ³ãĥ ī\nâļ Ļï¸ı\nyo gesh\ny alls\nwh q\nwait ress\ntortu gas\nstir rups\nstill born\nrcb tweets\npft commenter\npc u\now y\nneer aj\nmar yanne\nmar ga\nlet us\nle chon\nkin t\njoh ny\nja hn\ning apore\nhou lt\nho dak\nhigh ball\nhh h\ne fi\ndosto evsky\nde th\ncustom isation\ncsk v\nclu bbers\nanto ine\naci ously\n ¢\n~ âĻ¥\nyo gap\nw era\nvishal dadlani\nst ena\nquan to\npoyn ton\nopen university\nmusic city\nmaz atlan\nmag pul\nlavor o\nlam as\nkar ak\nho wick\nher me\nfore told\ndaw ah\nchak o\nbron zed\nbron cs\nbro king\nbeard foundation\nba sho\nan museum\na hino\nÑ Į\nwood worker\nwood s\nwoo dro\nwinkle voss\nve toes\ntb buccaneers\nt lc\nspen ser\ns mike\nprof briancox\npomegran ates\no chi\nnight ers\nmete ora\nliber tines\nkamchat ka\nhel ter\ngrass fed\ngod liness\ngermin ate\ngab o\ndu pes\ndead heads\ncroatia fullof\ncoach es\ncas sand\nbram bles\nbiz ness\nbath ory\naw ks\nat ma\nðŁķ ¹\nvisit canberra\nunear thing\nrott nest\nross iter\nr tt\npau lg\nmoul trie\nloan ing\ngreat ormond\ngil ding\nger tru\ngal era\ndiscred ited\nd fe\ncand ler\nani ah\nah sa\nab orig\nyamig autam\ny ie\nthe original\nsun times\nsh n\nsal ahu\nrobin hood\nre introduction\nkap o\njan el\nit each\nintri gues\nfas s\nenter shikari\nen dow\ndoyour job\ncan ova\nau tres\nanglo phone\nab n\nðŁ¤ Ľ\n~~ >\nv ally\nstromb oli\nstar fox\nsmir king\ns su\nring tones\nragha van\npo sta\nnews x\nmc cam\nmatty bra\njag ex\nitali c\ni see\ngoldeng ate\ngirl probs\ngipp snews\nfin borough\ndun c\nde formity\nclam ations\nchand an\nbu ra\nbree ches\nash ford\nanti pasto\nಠ¡\nza hir\nwe rent\nty len\nth inspo\nta kas\nt sen\nsuwan nee\nsor vino\nsold by\nsch amber\nper ty\npas orob\nonly fans\nmic hell\nmc quaid\nja und\ngarri do\nfranchi sees\nfoo ds\nentit lements\nelector al\ncy rano\nconvo ys\nchristma ses\nbapti sms\nðŁĶ ½\nðŁĮŀðŁĮŀ ðŁĮŀ\nÑĤ а\nzipp ered\ntu li\nspeaker boehner\nslam mers\nshake el\nser bs\npotter head\npoe tr\npen test\np noy\nophthal mic\nng u\nlock herup\nlance bass\nl tz\nin numer\ngranger smith\nfacul ty\ndu four\nder ham\ndecou page\ncull is\ncri ps\ncen tos\nblackcat appreciationday\nbal lester\nand juliet\nweare in\nv ax\nv ata\nund son\ntem er\nta ichung\nsun bathe\nsni ffles\nre painting\nnore aster\nnel spruit\nmaster s\nineffe c\nhar as\ngn ar\nff g\nend ing\nem ple\nei shq\ndin as\ndeaf ness\ncor in\nch g\nbly ton\nann coulter\nac utely\nðŁij ¿\nwalk to\nwal o\nshire en\nrestra ints\npoo ches\npdd ancing\npalati al\nnorth westhour\nmotiv ators\nmay ra\nj ury\nin me\nfield park\nexuber ance\ncre ased\ncond é\nc gr\nbor ing\nantic li\nam av\nðŁĺĤ ðŁĺİ\nãĥķãĤ £\nà± ĩ\nwol sey\ntu gg\nso ws\npick wick\npanther nation\nnell ore\nmul sanne\nlime ade\nlee ann\nhul lar\nhere foryou\nhe as\ngi v\nfun with\nfi real\nfascin ate\ndream weaver\ndaniel howell\ncushi oning\ncou leur\nbirdwatching mag\nbar at\nb ation\nail y\nacknowledg ment\nâŀ ¼\nس ÙĬ\nz ine\nws bt\nur thy\nu ce\ntrouble shoot\ntin os\nsuper natural\nstates boro\nshe ree\nseaf oods\nori flame\nneu man\nnau d\nn la\nn ky\nmodel er\nmi av\nle ck\nintu it\nhyper market\nhis sing\nharbour front\ngon ski\ngam ay\ndok ken\nde construction\ncute cats\ncran field\nconfeder ations\nco ex\ncd h\ncar lito\nc moffice\nbar ga\naf fa\nyy am\nwhi shaw\ntrigon ometry\ntal ento\nrothe say\npet m\npa via\nlug nuts\nlu kash\nlash ings\nkali ko\nfe men\ne disto\nbike shop\nape l\nanc ou\nzin hle\nveu ve\ntu ohy\nto td\nsue ño\nstar ck\nsmo del\nrigat oni\nprostate uk\nple bs\nnike basketball\nnarasi mha\nmu sty\nmehboo bam\nmano euvres\nlief eld\ninvictus games\ninfe cting\ni ber\nhor sley\nho om\ngau tier\nfat tuesday\nf pm\nezral evant\nex x\nec ity\nderby day\ncali gula\nboc elli\nbesse mer\nbed bugs\nbeat cancer\nat m\narom agna\nan ica\nðŁĺį âĺºï¸ı\nâı ²ï¸ı\nा à¤Ĥ\nw bur\nul ere\nsk ap\nration ality\npreci ou\npay ee\nny it\nmor tified\nman us\nlon gue\nlets gov\nkerr ville\nhitch hiking\ngood stuff\nfy ingly\nflood light\nfeu ds\nero ad\nend as\ndonny brook\ndeclar ations\nblant yre\nballoon fiesta\naki ha\nver ia\nsu so\nsportsm ed\nsnoo ker\nscience day\nreboun der\npanerab read\nlon ged\nklez mer\ninec nigeria\nhol ker\ngrand addy\nfor no\nfast ening\ne migration\ndri de\ndis location\ndavidar chie\ndar uss\nche viot\nbogge ss\nbarn stormers\nbar tel\nart life\nangel fish\nwomenin music\nwi union\ntravel alberta\nti zen\nst pete\nsp amal\nsexy saturday\nscreen awards\nsch rute\nru mple\nom ele\nnase eru\nnar rati\nn una\nn mu\nmo slem\nmc minn\nmadeinthe usa\nlu jan\nkro enke\nhe pa\nharu hi\ngri pe\near then\ndiverse books\ndan go\nber rien\nb mb\natar decer\nðŁĺļ ðŁĺļðŁĺļ\nñ ez\nyo b\ntrump er\nsoci alist\nsig an\nscher zinger\nsch au\nrefurbi shing\nra gga\nqu ero\nncle x\nmassimili ano\nmand alas\njaund ice\nis right\nir acle\nhrd ministry\ngrand er\ngra ble\nf bn\ndesp atch\nbul bul\nbrasile iro\nbor age\nbend is\nbal zac\nbaad shaho\naku lam\na ahh\nठ¿\nzack ryder\nwr dsb\nwai mea\nup to\ntech review\ntar k\nsp ick\nscaf ell\nsa chets\nrod denberry\nr ø\npl cs\npac ey\nmono type\nlot to\nlich ens\nle pto\nle of\njust the\njuli ag\nj rs\nint c\nin deci\nic dc\nhe ze\ndi anna\ndhru va\ndab ble\ncumulonim bus\nclairvoy ant\ncat on\nbu mi\nbl on\nar ai\na ich\n. âĻ¡\nðŁĺģ ðŁijĮ\nðŁij µ\nyar nold\numh langa\ntra itor\nthe beer\nsun aga\nscar am\nregar de\nnot to\nmil ani\nm me\nle man\nko by\nint u\nhu li\nenergie wende\ndn v\ncor tona\ncar ted\ncalaver as\nc scs\nbro il\nbreak dance\nbirthday party\nwardro bes\nw lu\nv au\ntw t\ntigh test\nthcentury fox\nstartup week\nsports india\nse hir\nsch mu\norient ations\nnv leg\nmidland shour\nly mm\nk ps\nish am\ngish wh\ngeode sic\nest ado\nemer yville\ndu lehill\ndg ates\nden ne\ncou cou\nbun sen\nbo id\nbal k\nado gs\n주 ëħ\nèĬ ±\nzombi ea\nze ch\nwre aking\nsynthe sized\nswir led\nsto o\nske in\nren ounce\nphoto grid\nno pain\nnic obar\nnetwork rail\nmetron ome\nm di\nj ski\nhd v\nhal gh\nh war\ngar l\ne gp\ndic o\ndi ggle\ncon ker\ncat at\nc myk\nbook makers\nbo ding\nang panahon\n________ _\n>> >\n(( ((\nwe ill\nval era\ntruck ing\ntro polis\ntam mi\nso fu\nscho ir\nsch aller\nreadi ed\npou ty\no clock\nnemt sov\nmo rec\nmal te\njudge jeanine\ngro th\nf fie\nbrooklyn museum\nðŁİ ŀ\nwake forest\ntro pa\nthi stime\nsle ek\nrival ry\nq bal\npinstripe pride\nop ti\nme stre\nkings bridge\neso ter\ndanand shay\ncuten ess\nbe amed\nani ya\naf owl\nzhou mi\nvoc acy\nvel and\nvander bil\nstan wyck\nsnowmob iling\nsheu gs\nse us\nsc itech\nsand hills\nrit o\nre serving\nquintan illa\npollin ator\nph s\nper p\nmu ti\nmehboobam ufti\nmatthi js\nmaj ic\nly tle\nki is\nk oun\nili ana\ngo ggins\ngi verny\ngi anni\ngeo grapher\nfu gazi\nfir stalert\nem ic\ndon at\ncro c\ncn x\ncity and\nch acos\ncanadian forces\nbon nard\nbleed ing\nasym metry\namy peruana\n> <\nðŁĴĭ âĿ¤ï¸ı\nwalt disney\nudu pi\nu sher\ntread well\nrit mo\nrev ved\nrash mi\npre ssies\npompad our\npatric ia\nlg d\nko sta\nko balt\nkidi ki\nin cis\nhiman shu\nfi baw\nfan service\ndist ancing\nchav an\ncassave tes\naqu ab\nant ana\nadventure sof\nad tr\nab ut\n[ -\nðŁĴª ðŁı¿\nðŁİĤ ðŁİĪ\nweather tech\nvm ware\nviz media\nvic votes\nut v\nthe mentalist\nten fold\nstun na\nskill fully\npl ent\nother side\nmen sday\nmedical devices\nli sad\nkush al\nkas umi\nk era\njuri spru\ninno cuous\nin conclusive\niamk sgofficial\nhit z\ngri ft\ngo pies\ngam os\ndef ame\ndd lj\ncopernicuse u\ncar low\nbefully informed\narach nid\nap n\namp at\nair crew\nâĹ ¾\nzan elowe\nwh ooo\nwet ter\nwat c\nvs den\nvas u\nu du\nsyllab les\nsurf side\nsur ly\nsg u\nrevital ise\npalpit ations\npadma avat\nmaup in\nmano euv\nlen s\nle beau\nkne ad\ninsuff erable\nhun s\nhome coming\nguitar center\neu geni\nequ it\ne discovery\nbro ma\nbot net\nber ita\nbeinte haa\nand r\nale conomics\nðĿĹ ²\nâĿ¤ï¸ı ðŁİ¶\ná´ Ĺ\nte tsu\nt anda\nsymboli ses\nspontane ity\nsou per\nshan ley\nsan skar\nsab it\nr ils\nr dd\npul len\nple xing\npla guing\nntv tonight\nnorth park\nmax field\nmadhu bala\ninst illed\nhea dies\nhal perin\nearthen ware\ndiscou raging\ncrustace ans\nblack mailing\nauror a\nar der\nagro forestry\nðŁļ ķ\nâŃ ķï¸ı\nyorkshi repost\nval lee\nth ut\ntar di\nsp hero\nskin cancer\nse ms\nsc ant\nsach sen\ns combe\nru hr\nor vis\nnight line\nnes bit\nm sl\nlove food\nkni evel\nitt ance\nim patience\ni vr\nfis alpine\nferrig no\ndedic ations\ncollar ds\nchipp endale\nc ren\nbbc scot\nal ten\nak shar\ny sa\nwal ford\nv so\nucl draw\ntime bomb\ntam pa\nt oun\nsear cher\nran za\npedu to\np ch\nnov ato\nmb storm\nlove sick\nlov sky\nlong worth\nline han\nl va\nhe ures\nfreddi emercury\ner im\nem conf\neli g\ndecent ly\nbrain power\nastar isborn\nzhu hai\nz uni\nwi the\nun in\ntortu ga\nstream ys\nspecul ations\nsol vang\nsmil ing\nseed orf\nsajid javid\nnab a\nmil ford\nmb assy\njim carrey\njay ant\nhippo potamus\nhar kins\ngray scale\ndaily caller\ndai go\ncarpedi em\ncalgary expo\nby rn\nbrek ko\nbre thart\nbr rrrr\nbon is\nan ther\nactu alliving\na ameen\nwhar fe\nvigil antes\nu ee\ntop sail\nthe res\nsoul food\nso cs\nse op\nr bd\npreju dices\npostpon ing\nneander thals\njoh ne\ni pods\nhal es\ned mnangagwa\ncham beau\ncalibr ate\ncal vo\nbul ma\nbobby bones\nbo sse\nbl urs\nbei ber\narn auto\nðŁĺĺ ðŁĺĤ\ntylerg posey\nt als\nsur ulere\nstur gess\nsat nam\nrobb in\nra ster\nobste tric\nnc dot\nms dyn\nmobile marketing\nmel rose\nmaj in\nli kud\nkas bah\ninfl ating\nether ington\ndic i\nat axia\nðŁıĥ âĢįâĻĤï¸ı\nðŁĩŃðŁĩ °\nâĺĢï¸ı ðŁĮĬ\nwunderbar films\nta vern\nsr ila\nsquare space\nsign post\nriff trax\npe qu\nnave ed\nna stiest\nlocal history\nlife skills\nj br\nit now\nipp o\nin bev\ngon salves\ngargan tuan\ng dm\ndrop kick\ndr harshvardhan\nd yo\nconver gent\nci hr\nblueno te\nblack girlsrock\nbefri ending\nb nl\nanadol u\nalca sid\nabhi she\na asa\nvisit novascotia\nun st\ntri un\ntod morden\nsuper center\nstay ing\nrocke ttes\nric flair\npe ac\np janic\np dac\nnon league\nmediterran ean\nlounge wear\nhal al\ngeo chemistry\nfi ra\nfeel good\nfag ans\neff southafrica\ne urs\ndu an\ncircuit ry\nchildrens book\ncaro tene\nbroc colini\nblack day\nbar ret\nball antine\nannu als\nyyyy yyyy\ntm x\ntestic le\nnu man\nmen newsdesk\nletsgov cu\nkids fashion\nkak adu\nh ink\nger tie\nfir me\nfe v\ndon gho\ndiete tics\ndepri ving\ncoolmore stud\nclu e\nche etham\ncat trall\nc ja\nbio chem\nbache let\nb hil\nteentit ans\nsw tor\nstrugg leisreal\nstone brewingco\nsto xx\nrock st\nnil sen\nmuk hi\nmo thra\nmetro pcs\nmael strom\nma zar\nlo oney\nland i\nkay y\nin aba\nikoro du\ng ade\ne migrated\ne iger\ncount ach\nche sil\nbus i\nbreast feed\nbetter with\nbeatthe heat\nbe stro\níĥ Ģ\nwright sville\nwom end\nus ar\ntees dale\nt fi\nscra pes\ns weather\nrun de\nrepe at\npend le\npav lov\nni ang\nline wed\nkaz uo\ngrand final\ngi mli\ncal ton\nbro kered\nbo stick\nbo sley\narrhyth mia\nwak and\nvaill ant\nul alaunch\ntw op\nth ac\nstr ated\nstr ack\nstone chat\nstad t\nsh ingo\nscooby doo\noci c\nmp u\nmira da\nl np\nic ey\nhh t\nhandle bars\ngup till\ne he\nduplic ates\nconsol ing\narti slife\nal x\nacar son\nðŁĨļ :\nâĺºï¸ı ðŁĺĺ\nà ¯\nwork shop\nthegreen party\nth xs\nswoo ping\nskar du\nsiz we\nsas si\nrebe kah\npo es\npap p\npanor amas\nmou sa\nmel an\nmatt son\nlee ward\nkeu ken\nkar un\njoeye ssex\nhobby craft\nhal cruises\ngo ps\ngiu lietta\ndog town\ndat ang\nbu pa\nbow ties\nadvers arial\nðŁĺł ðŁĺł\nðŁį© ðŁį©\nðĿ ĸ\nุ à¹Ī\nzakkw ylde\nyo wl\nun r\nun jab\nthe am\nta shan\nraven ous\nrain n\npe ppery\nmicro grid\nlong line\nkak ao\nintellectual property\nice ster\nhouston isd\nhon oka\ngravit as\nforthe planet\nflu or\nfin kel\nen r\nen cant\ndisc ourses\ndem ers\ncomis key\nbut thead\nbring ing\nafl ame\nwar dle\ntre bek\nstre aky\nsome body\nsci fit\nroch dale\nro fl\nrestaurant week\nprophe sy\nover street\nmill field\nmatti as\nlen to\nkla asen\nke ough\njo ji\nii ac\nga there\nfe ws\nexcep tionalism\ndragon born\ndaw a\nd ants\nch elli\ncanton ment\nblack sails\nbhu tto\nban shees\nau teur\nðŁĴ¯ .\nðŁ¤Ļ ðŁı¾\nzakkwylde bls\ny rago\nwom bats\nwing ard\ntb oll\nplo ve\nphilly police\npat snation\npam ban\nmeren gue\nma hira\nlong leat\nlight sabers\nla ine\nju pil\ni believe\nhour ly\nfli ppers\ne ffy\ndevere ux\ndeire zzor\nbu shing\nbr ined\nbor u\nbi dity\nbi a\nadju ster\nunexplain able\nthe block\nsoftware testing\nsmu ts\nrim mel\npro audio\nper verts\nnsc lc\nnab isco\nmanchu rian\nj cr\nic ant\nhouse democrats\near worm\ndisc olor\ncv m\ncoal ition\nchanak ya\nboe hm\nbla stoma\naldu m\naf on\n? \'"\n... ?"\n* "@\næĹ¥ æľ¬\nwhatsfor dinner\nweetab ix\nun masking\nturn up\ntrade war\nthe sly\ntako yaki\nta pps\nt vo\nsoulj aboy\nsf ed\nsco tu\nrick ville\npend ragon\npeep er\no it\nnorm alized\nno ël\nlake michigan\nhy der\nhaci endo\ngru bs\ngazian tep\nfork sup\nevery man\ndisp leased\ndarley stallions\ncrime watch\nck enzie\nchron i\nbaji rao\nauror as\n@ $\nwy ck\nver hof\nsti le\nsna red\npin arello\nnick o\nn we\nmod ell\nmin ess\nlyric ally\nli ason\nlar ra\nla ges\nkimber ley\nkas sam\njennette mccurdy\ngret sch\ngl ances\nfeu ille\nendo za\ndam ir\ncre er\nblack panther\nbas er\nav t\nwy the\nvisual ising\ntr oughton\nsee ee\nraw lins\npu dong\npu ddle\npl k\nper ignon\now ill\nmisss aig\nmc duffie\nkay akers\nire l\ning ol\ngol son\ngay er\ndeep dale\ncrowd funded\naz o\nawal ker\nasi f\n" ?!\nâĺ® ï¸ı\nzion sville\ntvd family\nsha sha\nsh ko\ns act\nout smart\nnu z\nni ac\nner c\nma iz\nla pin\nkou fax\nji ani\nin ing\nii b\nfreenaz anin\ndes well\ncra ke\nay din\nal monte\nâģ¦ #\nwrest les\nun blocked\ntre al\nten sei\nski pp\nsf aye\nserv in\nrw f\nrodeo houston\nr vi\nnastur tium\nmike and\nhon es\nhe gel\nhaz arde\nget to\nfuture stars\nemo ticons\ndi pi\nde gli\ncul peper\ncat oc\nbu gab\nbo cuse\nâĻ¦ï¸ı âĻ¦ï¸ı\ny se\nworldwetland sday\nvolu metric\nvey ors\nun comfortably\nstumble upon\nsto vall\nstar dew\nsi ro\nshout factory\nsc ca\nro wett\nmetalgear solid\nmal me\nlam pas\nkhati b\nimperson ate\nhome team\nhapp i\nhal fords\ngri maldi\nfri ez\nen vo\ndani e\ncow per\nconce aling\nchannel newsasia\ncen k\nbrussel s\nat ak\nangelina jolie\nvend i\nun obstructed\nthermo plastic\nt ds\nshkh rasheed\nreti ro\nps supt\nphyl lum\nma us\nma doff\nlyn ton\nly so\nkth opkins\njust giving\njou les\neze quiel\neuse bio\nct ms\nconce ssion\nby er\nbook sand\na od\ntu ft\nthespi ans\nst thomas\nsower by\nran tham\nnews network\nmicro cosm\nmaya angelou\nm ka\nko gan\ninclu sions\nhtown takeover\nhil ty\nhar ge\nhapp ys\nh fm\ngra zer\ngd ns\ndigital clou\ndigitalclou dgal\ndero ga\ncar vers\nback hoe\nart studio\nðĿĹ ¼\nx er\nusu al\nthe kid\ntal us\nstu tter\nsh uri\nmcdo wall\nmatch room\nmarcel ine\nman nan\nkel sie\nk ler\nit ol\ngi onal\nfaysal quraishi\nfarqu har\ncooper ated\nabraham lincoln\nðŁĩ¦ ðŁĩ·\nwswan derersfc\nvrin davan\nvivi r\nvau ghan\nsop ra\nscal ping\nquad ro\npit lane\nper ip\nomni potent\nn tn\nmobile games\nlc v\nkej ri\nintercep ts\nfil aments\ned f\nbo eck\narab ic\naff le\nãĥ ª\nÚ Ī\nwrink led\nworship ers\nvibe z\nvari et\nto sin\nsp ica\nshel vey\nschi aparelli\nriot games\npfluger ville\nperme able\nonline store\nme igs\nly ss\njen carlo\nig r\nhr r\nhom elo\nhi jo\nhen ch\ndrashtid hami\ncourte eners\ncor vus\ncine mathe\nar aman\nad ur\nvijay rupan\ntran scen\nthe jazz\nspill ane\nson tag\nsmite game\nsmash words\nsav eluci\nreu ben\npay e\nol entang\nnc sa\nmanj re\nknock off\ninv ite\nge sund\nflash lights\nfau quier\nengar dens\nen r\nel pha\neh san\ncombat ant\nco it\nclydes dales\ncir ce\nchu cked\ncent com\nbi pasha\nbarbar ism\nbaha wal\nay ear\nar slan\nan bu\nãģ® æĹ¥\nà® ľ\nÙģ ÙĬ\nаР²\nvigne ttes\ntur namc\nsab ra\nram part\nra iz\npollin ating\npeuge ot\nperfom ance\npe dag\nout performs\nnew season\nmurch ison\nministryof sound\nmarket places\nkul tur\nk lat\nham blin\nfu bar\nci mm\ncaro ten\ncanon australia\nbo euf\nbibi mbap\nbapti smal\nyour story\nwe my\nvijayrupan ibjp\ntad pole\nsc ud\nsau ter\nph ol\npark race\nmono gamy\nmom en\nmat alan\nkwi buka\nhol bein\nhoff man\nhart son\ngo vote\ngira ud\ngar cinia\nfu i\ncritiqu ing\ncotton tail\nclip trends\ncabe za\nbethe difference\nar ancini\nðŁļ Ľ\nz war\nwhite washing\nweight less\nvide otrends\nvaltter i\nser vi\nnomen cl\nmorris ville\nmilk day\nmale h\nlegal ise\nle ke\nkar as\nincrimin ating\nhydro carbons\nha ftar\ngra uman\ng of\ndiminu tive\ncongreg ations\ncit ric\nchan sung\nbrum mie\nbroke back\nà ´\nvo ile\nunder wire\ntru deau\ntro i\nsteve angello\nste aua\nsr bija\nreliance jio\nperthglory fc\nml scup\nmez ze\nlo stand\nin ck\nhe j\nhaw thorns\nflo ating\nen cum\nempathi ze\ndra ping\ndeli o\ndar wish\ncurricul a\ncold play\nco dec\nbf bs\nbant en\nas sun\nart design\nanup ama\nal films\n] !\nðŁİµ ðŁİµ\ntz in\nthisi sla\nsti fle\nserge ants\nrose parade\nrestin peace\nreasons why\nr mac\np wn\nor wx\nnar rower\nmystic messenger\nmanip al\nluv urself\nla gann\nhe mming\nhe brew\ner furt\ndraw backs\ncoim bra\nbreakout artist\nal ar\nag ay\nactor life\n.... \'\nyasi el\nv ff\nu fs\nthr ong\nspider web\nrussian art\nre fraction\npaddy sday\noy ang\nne do\nnai ve\nlo of\nlat o\nkar m\ninterro gate\ngur up\ncc pa\namar avati\nðŁĴģ ðŁı»\néĥ ¨\nz r\ny alo\nwhet stone\nthri ved\ntc n\npre workout\nonthe hill\nnovi embre\nnavig ational\nmp tourism\nmol ton\nl tl\nko ster\nka el\njyo thika\nin un\nfur stenberg\nfood share\nfi les\nfamili arize\nexempli fy\ndetoxi fying\nche se\nchar lies\ncag le\nbir r\nbiot in\nar ounds\naf am\nðŁ¤¼ âĢįâĻĤï¸ı\nwh iz\nwee dy\nvolu minous\nus dcad\nud get\nthere is\nth andi\nsuper draft\nss os\nsolom id\nsnow plow\nru ge\nrock solid\nre section\nraj dhani\nrain ham\npsy locke\npro line\npassion for\npa ster\nnipp ert\nmedi ap\nma sts\nlock port\nko il\nhor vath\nhair brush\ngi lets\ng ants\nfar fetch\nf xc\ndissi pate\ndebrame ssing\nco sco\nby product\nbraz ile\napho bia\nah gases\n/ /@\nðŁij¯ âĢįâĻĢï¸ı\nthe bell\nsun spots\nscrim mages\nra úl\npoly math\nkum ite\nkhal ili\njon ty\nj ku\nhyper allergic\nhugh ton\nhistam ine\ngul la\ne ib\nd la\ncivil society\nchicago ans\nbu di\nbe ile\naviva prem\nare ers\nann s\nzo or\nyan tra\nvand ross\nval k\nthe truth\nsy oung\nspu blic\nse thu\nrel la\nrefec tory\npi z\npen elope\nku shi\nkangar oo\njan vier\nh lc\nfan sites\ndecep ticon\nclif ford\nchec kat\nbl ouses\nah db\nado g\nxi sts\nvar ia\nthibau lt\nthe power\nsh oring\nscu omo\nresul ts\npot belly\nne ary\nlow ther\nindi eartist\nh als\ngoo s\ngl f\nfel e\ndisingenu ous\ndese mber\ndel acroix\nco ya\nbou le\nb sm\nappet ites\nye ux\nwalt zing\nvac om\nump qua\ntruck er\nsiti o\nsham u\npvam u\nphar m\non ne\njap a\nit ek\nit ad\nin bend\nhugh ley\nhu mi\ngen too\nfree style\nfa in\nf q\ndi zon\nagu stawestland\nach ter\nðŁĶ ģ\nðŁijĬ ðŁijĬ\nðŁ¤¦ ðŁı¾âĢįâĻĤï¸ı\n⼠Ķ\nâĸ ·\ny team\nwis d\nv mt\num w\ntw h\ntt an\nren wick\nre mix\npo polo\npad am\nla er\nkno b\njag ran\nhol bycity\nf dom\neng arden\nbocar aton\nalex x\na ÄŁ\nè ij\nuni ofe\nu wcl\nswin son\nsco p\npe gida\npatter dale\np fm\no if\nmc ity\nmateri ality\nm gi\nla di\nkick boxer\njor n\nfat man\neo ghan\neinste in\ndc n\nch ala\nbullet ins\nbla sey\nbird life\nam ol\nakade mi\nah all\nacor tes\nðŁĴİðŁĴİ ðŁĴİ\nìĹIJìĿ´ íķijíģ¬\nëī´ìĿ´ ìĬ¤íĬ¸\nس ÙĪ\nwi ak\nwen dover\nvan ovic\nval an\ntwin kie\nteam youtube\nso ppy\nscru mmy\nsa ath\nrick les\nra dy\npun kin\npro j\npim m\npete wentz\npal abras\nnews worthy\nnascar onfox\nnan of\nmit osis\nlawn dale\nla die\nla bi\njay anthi\njason isbell\niti me\nhol lands\nh sd\ngam ora\nferr and\nf anned\nem meline\ndol by\ndal oo\nburling ame\nben cher\nballo u\nan ational\nvictori apolice\nv ds\ntah le\nsc olds\nru be\nragaz zi\nparo chial\nno stril\nnewor lean\nlive for\njor ts\nip b\nim plore\nfrigh ten\nem aci\ne ering\ndon nab\ndat u\nch avis\nbenefit beauty\nba ited\naun t\nê· ľ\nwor rall\nwijn aldum\nwag ering\nvel oc\nucd dublin\ntooth picks\nsu raj\nst ec\nsriman thu\nspirit day\nsleeping beauty\nsethro llins\nrec ites\nphilipp s\nper ú\nmcle ish\nmau rier\nma he\nloan er\nkne b\nic bc\nhow den\nhail stones\ndoc fest\nck es\nchina open\ncd baby\nbper rion\nazale as\nalo ka\nwaffle house\nutil isation\nti b\nsi ge\nqu aking\npre zzo\npol ling\nnu its\nmobile game\nmb om\nlife size\nl fb\nki ee\nke hinde\nin semin\nhow l\nhin sdale\nhes key\nfon dest\nfe style\nevil regals\nden bigh\ncri bbs\nbhu van\nbe on\naga dir\nafter all\nye dd\nun fettered\ntheli ving\ntad alal\nsuche tadalal\nmusician ship\nl ali\nky l\nkath ua\nkan tai\nk ds\nit sn\nini b\nhyun joong\nher ps\nhead wind\nhead lamps\nhe pc\ngay est\nfit out\nes in\neric garcetti\nef it\ndown syndrome\ncon sig\nbperrion ni\nbe see\nb sd\nasi k\nal ki\nðŁĽ ©\nঠ¦\nØ§Ø ¯\nto ki\nte ja\nsy arief\nsq u\nrho ades\nresult sday\nprerog ative\npik min\nno z\nmile post\nmc nab\nmass illon\nis sing\nima de\ngr ito\nglobe master\nf dj\ndo dges\ncorin ne\nanthropo logical\n+ "\nzam ir\nty nan\nthenorth face\ntam ang\nsuper imposed\nson d\nsom i\nret ards\npre ying\nperson able\nparadig ms\nmicro s\nmer we\nkit son\nkel by\nhul t\nhand print\nfun icular\nfu me\nform in\nfifty shadesofgrey\nfari da\nescap eroom\neil at\ndep an\ndaw ar\nby blos\nbilli kens\nbed minster\nbad hopper\nawo lowo\nanand ani\nçĶ Ł\nâĹ ĭ\nÅĤ aw\ntib co\nta seer\nstal ag\nspro mo\nsnow shoes\nsick er\nsal om\ns sey\nroof top\npari ah\now asp\nno gain\nnight wear\nnak amoto\nmc ourt\ning lot\nha es\ngo tops\ngo dukes\ng staad\nfe it\near marked\nchinese food\ncats rule\nblack lightning\nbir dof\nbet tere\nbbc south\nas sss\nart for\namo ja\naler t\nwh igs\nur kel\nspray berry\nsol vents\nso v\nroth man\nrec ool\nproc ter\npew research\np ci\nnic hes\nnflu k\nly all\njail avak\nhybrid cloud\nhahahah haha\ngreen peace\ng za\nfreedomof speech\neat your\ne ep\nden ne\ncommu n\ncheri shing\ncc gs\ncbc mtl\nbar as\nwash ten\ntopo graphical\ntoler ating\nsc ool\nno ssa\nnab il\nn ool\nmuzz le\nmis sed\nmg lit\nloop ed\njo taro\njam tarts\ni up\nh ys\nfre re\nf dm\ne mile\ne bp\ndefense men\ncro fton\nchis ora\ncha ren\nbrun ton\nbra vado\nartex hibition\nam ro\nam ac\nadn ams\nðŁ§ ¢\nwy vern\nspam mers\nshu g\nschoo logy\nrec to\npink berry\npak vaus\np di\nor kut\nnat ch\nmr r\nm vt\nl nc\njohn fugelsang\nhur u\nhum bucker\nhorn sey\nhigh more\nh cd\ngods end\ndun nes\ncomm enters\nale b\nadministr ations\na itch\n? !!!!\nðŁĺ¢ ðŁĺŃ\nyu ji\nworldanimal day\nwar by\ntribun als\ntow ne\nsnow pocalypse\ns wine\nrun away\nrob ed\nrad ley\nph ang\nol lers\nofficial wolves\nn li\nm andre\nke it\nke er\nkasi h\nkal pana\nici ously\nhad ley\ndepra ved\ndd as\ncough ed\nco ates\ncher bourg\ncapit ulation\nal tai\nì° ½\nz ow\nwool worth\nwigw am\ntrum pre\npropos itions\npork chop\nover flows\nori ana\nmegal odon\nmeat packing\nmcder mitt\nle graph\nirv ington\ninde cency\nge yer\nfre tless\ndifun dir\ncase in\nben oni\nwat ford\nun ravelling\nuhcougar fb\nthibo deau\nsme aring\nrevisi onist\npi de\nphylo genetic\nlu an\nloren zo\nlong meadow\nlivor no\nkit sil\njoe gibb\nit syn\nher ac\ngreat war\nfree bsd\nfermil ab\ndi still\ncu sh\nclear water\ncan ela\nbrun s\nbish kek\nbig dat\nðŁĴ ¬\nภĭ\nwar th\nver ticals\ntop cybernews\nstat utes\nsob ti\nsni ffed\nsky lab\nshin ty\nro ane\nmentor ing\nmag andhi\nliveon k\nit k\ng mo\nendear ment\neast africa\ndom us\nci w\ncarlo tta\nbos combe\nbath gate\në§Ī ë§Ī\næĿ ¾\nz ny\nvit ara\nv enda\ntwizz lers\ntor d\nspen cers\nsel den\nse bo\nmcar dle\nlasz lo\nl ra\nkarthik subbaraj\nh no\ng fr\nfri gates\nfranki ero\ncorn huskers\nbing bing\nal ite\nภ®\nson us\nren derer\npoint illi\nphil ic\nnovo sel\nlet down\nl cp\nhar v\nfuele dby\nfra w\ner ving\nduke energy\ndan ko\ncircumc ised\nchandra yaan\ncarli sle\ncan onized\nc vr\nbor ine\nbor ge\nbl dgs\na opa\nبص ÙĪرة\nweek of\nturbo prop\ntol bert\ntam ika\nt lan\nseuss ical\nscu ll\nsb h\npp es\npet ar\nmy la\nm busa\nle and\njo gia\nha gi\ngolden hour\nfinger tip\ner rat\ndog life\ncy nic\nchi ral\nb ty\nav irus\nani shi\nag day\nðŁĻĮ ðŁijı\nðŁIJ¶ ðŁĴķ\nthru ster\nth ya\nt wat\nsolic it\nso tl\nsilver tone\nsignor e\nshu ckers\nshi bir\nsha in\nsepul chre\npor irua\npaulin ho\nlisto wel\nla ba\ning with\nho sh\nhar ari\nfirst net\ndischar ging\nde tr\nchi quita\nbullet club\nbachelor inparadise\naudi om\nade eb\n⼠ĵ\nÊ ³\nxx ii\nwoodin ville\nwheni was\ntra shes\nthu man\nte soro\nsupp ers\nspecial ities\nsean ad\nsch at\nra if\nprofessional development\nmi est\nmat osis\nlife science\nkal mar\njuni ata\njump a\nir ctc\nhoor ah\nguess who\ngra fted\nf da\nessi en\ndt lv\ncarpath ian\nca hoots\nbi ps\nalex jones\nal n\nwu pper\nw gr\nuse i\nston ight\nst martin\nrev ellers\nphotogram metry\nparson age\nna oto\nmuff led\nmicha ud\nmetag en\nlee ann\nle ford\nkow ska\nkookab ur\ninvari ably\ngrand central\ngar nacha\nfuture ofeurope\nfrank turner\neye let\ned modo\ndro d\ndre sse\nden nys\nchil aquiles\nbuc co\nbotan ica\nbe ppo\nbar ron\nb ti\nar sed\nak ova\n: }\nyo ak\nx al\nwv tm\nte er\nta pit\nmo vado\nmexic ali\nmay pac\nleav ened\njoegibb sracing\nis sar\ni ag\ngo away\nge ve\nfedex cup\nemphasi se\ndis continue\nden ials\ncostu mer\nby night\nbusc ema\nbi ju\nbay eux\nbar codes\nalco ve\nal ast\nac enter\nðŁĺľ #\nwhodun nit\nvar ga\nus w\ntre s\nti ko\nthe fallen\nsom an\nsocial ising\nshe mar\nsevasto pol\nse cc\ns movies\nrye grass\nreser vist\nre joined\nre factoring\npy roman\nox ted\nnw u\nmagi ster\nlu cena\nlind ner\nide a\nhill house\ngam el\nfranken muth\nfla sher\nemul si\nelection swith\ndemo lishes\ncreati vel\nav ita\n!! ,\nxrp community\ntru sive\nsneak y\nsal an\nog awa\nj aren\nhin son\nen grave\ne itc\ndatab ase\nch he\nbrind ley\nblue jay\nbaux ite\namig urumi\nalfre ton\nactu ators\nabra r\nabduc tions\nðŁijĢ ðŁĺĤ\nâĿ¤ï¸ı \'\n⾨ ðŁĴĸ\nâī ¥\nwright son\nu op\ntober mory\nsupervalu irl\nsport fishing\nsl ates\nsin h\nschedu ler\nsch nabel\nre cumb\nrab bani\npur nell\npower tothe\npersu ading\nnatural england\nmou lt\nme use\nl ans\nhaz ell\ngo oner\ngal leon\nfooth ill\nfav ed\nexhib ition\nem path\nelo die\ndvent ure\nden arius\ndementi afri\ndefe cation\nci x\nchor ro\nbar dugo\nare qu\narbit rage\na defenders\nyah t\nto sk\ntele conference\ntaylormade golf\ntan z\nshaw ls\nred fm\npost secondary\nkri ss\nkaik oura\njuventus fc\nity ours\ni verse\nhi jinks\ngri f\ncol gan\nblueri bbon\nbips luvurself\naltaf hussain\nalam ance\nðŁį ½\nw ux\nun ic\ntr ically\ntam bor\nsuccess ful\nspo wer\nsi rena\nsc roun\nsab ras\nre itz\nphysic ality\npark sville\npar aded\noo per\nne va\nmu gi\nlv motorspeedway\nlog ica\nlec at\nkram er\nk hama\ninfantic ide\nfood lovers\ncivil engineering\nc wd\nc boe\nbrown sburg\naviation lovers\nani dol\nalo ck\nðŁ¦ İ\nâĪ Ĩ\nveri fiable\ntri k\nti ang\nshe go\nself catering\nreimbur se\nprefer ring\npor thar\nmk to\nka am\nfun dac\nfilip ino\ndre lief\nchart mill\ncaf frey\nassinibo ine\nafro punk\nab lo\nwutang clan\nur ry\nuni formity\nt ferriss\nsub pop\nstom pers\nsand r\nsam bar\nsad i\nrobbi es\nrec oup\nr itch\nnational volunteerweek\nn td\nmidd lew\nlau f\nkun ta\nke ppel\nimmun o\nhor wath\nhereis gina\ngoo des\nfaber castell\nef r\ndor ic\ndo da\nde paris\nconju red\ncarol inians\ncali stoga\nben ching\nbat aclan\naf cofficial\nห ม\nร ะ\nwild in\nud acity\ntra dio\ntheo do\nthe is\nt bol\nsque aks\nsmorgas bord\nshawn michaels\npon go\nno stradamus\nnike store\nmor sels\nj ó\nin exor\nigne ous\nig nific\nhodak otb\nheb den\nhay ride\nham on\nge v\ngal an\nchapeco ense\nbun combe\nbu o\nbod acious\nbb ard\nauthori zing\nauctione ers\natta che\nanatom ically\nak id\naf oe\naf fiche\nðŁĵ ¡\nðŁIJ ļ\nyu uri\nye c\nu ja\ntrans fixed\nti bia\nte cho\nsol ilo\nschool work\nroof ers\nre zz\npur veyors\npu z\npokemon sunmoon\nok oro\nmahat magandhi\nlu e\nleban ese\nlaura prepon\nkam enri\nje han\nintersec ting\nhappy humpday\ngolds boro\nga im\nfro lics\nf ads\nencar nacion\nce vic\ncat sof\nburysted munds\nbirthday yy\nat ai\nap ital\nalter yx\nad ua\nyou andme\nt bb\nsupplic ation\nso gno\nrah ma\npuntac ana\npat cho\npa ar\nom it\nnaz anin\nmar kovic\nma ssed\nlegis late\nko irala\nk re\nimbec ile\nhot seat\nhe eded\ngran ules\nge yman\nfran chi\ne pm\nds all\nd tes\ncrepu scular\ncer ise\nbermu dez\nben anti\nay umi\nater ally\nap us\nansw erable\nan pur\nac omohoy\nãģ ij\ny omi\nwing field\ntw all\nthis was\nthereal sambora\nsmooth ness\nroh tak\nprodu ce\npro pen\nprivate er\npa jero\nmre azi\nmou la\nmarku ss\nmaneu vering\nlo ki\nk sw\nju ma\njoshu a\njon freier\nin ion\ncozy mystery\ncor ot\nchicag ol\ncarl son\nb ink\nampl itude\nìĭ ľ\nworldradio day\nwb ca\nth x\nstop bullying\nsat mar\nsa aa\nrock ymoun\nqu ade\npress man\nnabe el\nma sdar\nlic eo\nim passable\nfrod sham\nf du\nex chang\neric bolling\ndick en\ndel on\ncou lee\nconstruc tors\nbri er\nber ardi\nbag pipe\nba j\nb pp\nalder ney\n= -\nðŁļ´ âĢįâĻĢï¸ı\nðŁĩ¿ðŁĩ ¼\nzer rie\nwer d\nstudy in\nsh is\nsch wimmer\nrhi z\npaul smith\noscillo scope\nor ca\nnav as\nnag isa\nn np\nlen ore\nir repre\nima b\nim alt\nhand craft\ngravit ate\ngr anny\ngam u\ng bag\ndis agreeing\ndiar mu\ncor tado\nbring ers\nam ies\nalber ts\nad han\nabram son\nðŁĺĴ ðŁĺĤ\nìĦĿ ì§Ħ\nyoung adult\ny si\nwx w\nther cn\nroc kett\nrb news\nmilwau ke\nlaun dry\njung shin\nhon olu\ngym time\ndv rs\nall livesmatter\ny nez\nxenob lade\nu mat\nsign sof\nprofe sional\no stric\nletter box\nl lap\nke in\njar ring\nhon d\ng tl\nfraun hofer\nfo ort\ndu brow\ncrown theempire\ncincy wx\nc ley\nbaw al\nann al\nadon ai\nðŁĩ ¶\nyu rappa\nwor l\nwei gel\ntrin oma\nsyndic ation\nside walk\nshaan xi\nsci ver\nsaveluci fer\nsar aha\nr sm\nprophy laxis\npine apple\nol bermann\nmo fa\nlori keet\nlec am\niow aspeedway\nexac ting\nent or\nengv nz\ndream house\ndove tail\ndoor stop\nd stv\ncy borgs\nbou gue\nbal on\nawo ken\næ Ĭ\nâĻ¥ âĻ¡\nÃł idhlig\nuc ca\nthenand alfilms\nstop and\nsk b\nsen ryu\nrovin j\npare sh\nn out\nlu gosi\nkro eger\nkon k\nki awah\niy anya\nhawthorn fc\nhaber dash\nfreef all\nfla iling\nexpon ent\nen doc\ndrag queen\ncove red\ncom mies\nchar ice\nch ima\nceme tary\nat ria\nare k\nan jou\nal ented\nac igars\n) --\nvse vil\nverhof stadt\nvar sha\nval ov\nun sworth\nuk on\nshow manship\nseal ofhonor\nph alan\nmel y\nme tered\nmatch day\nk inston\nhs baseball\nhe tty\nfulfil ment\nful ster\nearl ham\ndev ita\nd my\ncontradic ting\nbraini ac\nbon et\nbau l\nbar ong\nastr al\napp er\nan tim\n.... .?\nÊ ¸\nworld toilet\nun um\ntit ling\nsol vable\nsant an\nsa bel\nrall ysweden\nr boy\nocla ure\nnumis matic\nnatural skincare\nnano tubes\nmass dot\nmarcel oclaure\nkitt le\ngreatormond st\ne gm\ndire k\nbos sho\nbj c\nb tw\nb enders\nadel le\nâĿ¤ï¸ı ðŁĮ¹\nye vsky\nw aki\nspon se\nsimil ars\nscol ding\npou dre\npenn dot\noffe e\nmol i\nmc sorley\nma char\ngreen hill\ngon oles\nfreer ange\nengagementr ing\ndundal kfc\ndefibrill ators\nche ick\ncam bo\natx wx\nar mid\nam uro\naber ration\nľ ï¸ı\nðŁĩ§ ðŁĩª\nðŁ¥ Ģ\nwreck ers\nwe stover\nvad is\nun box\nste ver\nspic tures\nsmo kin\nshah nafisa\nnever winter\nnad ar\nmcpart lin\nmayo ress\nmart ÃŃ\nlu cker\nlove cornwall\nlam brusco\nkol n\nismail i\nif tikhar\nh mh\ngood ale\nger ar\ngau ssian\neag er\ndu lux\ndo die\nbvl gari\nals icebucketchallenge\nðŁĺĬ ðŁĴĻ\nਠ¨\nzack snyder\nyi ppie\nworld turtleday\nwind storm\nvin oth\nvene tian\nve olia\nti f\nthan gs\nsteppen wolf\nschi ffer\nsay lor\npo pp\nphilanthro pists\npark bogum\nni va\nne ct\nme hn\nlove ya\nlo zada\nhidden figures\nher men\nfin nish\nfeng shui\nex ude\ncom al\ncabar rus\nbiof ilm\nbam bu\nall endale\nł ãģĭãĤī\nðŁĺĬ ðŁĴľ\nìĤ¬ëŀij íķ´\ntylen ol\ntro it\ntranspor ters\nto pinion\nspi key\nsand or\nrec tangles\nq ian\npreposter ous\np supt\nmb or\ngor dhan\ngl anced\nfigur a\nell chat\ndi mm\ndat ors\nd bo\ncom ically\ncli pe\nbige ast\nbienven ido\nbattlestar galactica\nb hal\nalbert son\nص ر\ntwitter world\ntren ton\ntown houses\nsurger y\nsun bird\nstan niversary\nsicklec ell\nshrink age\nsh and\nsemat ary\nsassen ach\ns food\npu lido\none way\nnose bleeds\nmccr ary\nmar din\nlog book\nkn z\ninjec ts\ninfl icting\nhu da\nhems ley\nhealth ier\ngreat lake\nfree styles\near ley\ncunei form\nclark sburg\nap bio\nan h\naccompli shes\nðŁĺĬ ðŁĻı\nâĿ¤ ï¸İ\nti ra\ntheroo ts\ntex aco\nteach out\nsop with\nsack ler\nroute master\nquil ter\npyth ag\nper dido\npanel list\nopho to\nk pd\nilipp ines\nhow lett\nhau g\ng fl\nfaber ge\nek ka\ne iz\ndream actnow\ncorru pt\nchaffe tz\nbu ggers\naustral asian\nas us\nalon dra\ntwim bos\nto ku\nso hard\nsla yin\nsky watch\nsan som\nofficial gaa\nnow ay\nni mo\nmori moto\nlocal isation\njack y\nfor our\nemb ol\ned j\ndra vi\ncol ai\nci ene\nbar rick\nbal dock\nbab oons\nauto pha\nar nd\nâľ Ĵ\nx lv\nwil mington\nvo ids\nven ise\ntw ingo\nsaint srugby\npep far\nour ay\nop n\noligar chy\nnat an\nn do\nmoun tie\nmadein chelsea\nma ze\nhumboldt strong\nhipp oly\nhello ooo\ngood by\nfrat elli\nev geni\nes mo\nensla vement\nda chau\nchar train\nam entor\n\' âĢĶ\nðŁĻĭ ðŁĻĭ\nت ر\nyl la\nwillow brook\nvideo conferencing\nthen ci\ntat ter\nsw aff\nsp illage\nsi pa\nsev yn\nsa head\nry che\npu sheen\npoly phonic\noc tane\nno irs\nnational gri\nn wi\nlap dog\nl vc\nhun i\nholocau stre\nh wa\nguinnes spro\nflash sale\ndv la\ndav uto\nd sm\nd mf\ncausal ity\ncar illon\nbe cuz\nwa hi\ntintag el\nthe deanambrose\ntat in\nshan n\nsearchengine optimization\npl se\npetiti oning\npand o\no gi\nnucle i\nmissi onal\nmagnific ent\nk ks\nisc out\nimp d\nfa kir\nevil dead\nemul ating\ndish washing\ndes jardins\nclothes line\ncaver sham\nba ikon\nanno u\nani er\nal mu\nah rar\na sexual\n! ðŁĴļ\ny aka\nwish ful\nvi gan\nunisouth ampton\nthe buzz\ntan amon\ntaffe ta\nstopp ard\nsin ker\nsha araw\nschu man\nreck lessly\npro pping\nmaran ello\nma sal\nlol ll\nhoo ooo\nho ban\ngas monkey\ner dem\ndet ach\ndarius rucker\nclean water\nblack heads\nbiop harmac\nbelve dere\nbart lett\nask ren\nðŁĺŃ ðŁĺ©\nðŁĩ· ðŁĩº\ntrav eller\ntor na\ntheop hil\nsuccin ctly\nstan bic\nsmith ville\nsikh ism\nse pa\nrayn or\nplas mic\nover heated\noptimi sts\nmo si\nmeetthe press\nmc so\nlamon tagne\nkirk us\nin ne\nhar vie\nhallucin ation\ngreen ham\ngre xit\ngas karth\nerrone ous\nef arm\ncook son\ncon over\ncon don\ncare n\nburgh ley\nbelfas thour\nbe du\nbash ful\nariad ne\nanim alabuse\nacrob ats\nab ap\nwann acry\nun incorporated\nte b\nspor tnz\nsa ari\nro vio\nrad ler\npra c\npi voting\nph ono\npearl man\nmun day\nmon ch\nmodern slavery\nmi yu\nmd zs\nlife way\nk sm\njas oos\nhor ta\ngalac tus\nfossil fuels\nex us\nend it\nc leg\nbron fman\nbeef steak\nar but\nakiha bara\nðŁķ ĵ\nwomens month\ntorri don\nt je\nspring bank\nspin elli\nshab bir\nrock your\npoc keting\nparliam ents\nmeal prep\nmathemat ica\nmar q\nluxury living\nloo ong\nlar kana\nki zomba\nig cse\nhim mel\nhigh st\nhead lands\ngl m\nda ines\ncorn elis\nbett ys\nbeck mann\nbb ons\nb sp\nar ks\nam iss\n. ðŁĺĤðŁĺĤ\nwol cott\nun accounted\nsub consciously\nsplin ts\nsa onb\nru per\npader born\nn bag\nmid south\nmarch esa\nlu sty\nlu cario\nky go\njuli ette\ninter feres\nhypo xia\ngand u\nfree gle\nfra ggle\nfar ren\nfac i\ncryp tos\nchange therules\ncap iz\nbru ford\nb ge\nat re\nactiv ations\nðŁĹ ¿\nwood craft\nus ama\ntun stall\nso ch\nsm cr\nsin an\nsalfor duni\npunc tual\nproud moment\npr icks\npoe tic\npine cone\noscill ation\nnag i\nmy fav\nmer aki\nman gold\nmakemoney online\nletter head\nk hoo\ninterstiti al\nhyper ten\nhick on\ngul den\ngrey houn\ngalla gher\nfit tipal\nente ast\nend u\necol lection\ndr v\ndis band\ndel f\ndecor um\ncom ikaze\ncob web\nchatter box\nc fos\nbo zz\nbionic le\nar ke\nvoc ate\nvo g\nvai z\nv ry\ntwi stle\nti ba\nthro es\nthe wave\ntender ly\nshaz ams\nsc avengers\nre organized\npropag an\nport meirion\nn gi\nmy chal\nmanipu lator\nlam enting\nkr w\nkilo watt\njubil ation\niron works\nhon y\nhiaw atha\nhel plessness\nhe mb\ngil ad\ngen ovese\nen actu\ndor fman\ncsir onews\ncorri entes\nbore ham\nben ni\nbath house\nath ur\narcade fire\namon te\nal tus\n? (\nyi u\nwk tv\nwer u\nvsp hi\nve stal\nsynthesi zers\nsuper sporttv\nstra de\nsag en\nravichand ran\nrai ya\no doi\nmedi kal\nlive able\nle vity\nkoch har\njessicaal ba\nheral dry\nharryand meghan\nglendal ough\ngil ley\ned n\ndrive club\ndevi ous\ndenu clear\ncy o\ncryo genic\ncho gm\nbu ssel\nbrou ck\nar moire\naj payee\nab ta\na aya\nwool sey\nunearth ly\nultra fast\nspinnin records\nscot te\nres ellers\nread acrossamerica\nn cea\nmcqu ade\nmartha stewart\nloosen ing\nj harris\ngirl talkza\ng bo\nfin nigan\nelias son\nbri ley\nbow land\nboo bie\nblue field\nactu ary\nðŁIJŁ ðŁIJŁ\në¹ħ ìĬ¤\ny pc\ny ager\nun skilled\nu gle\nty pi\ntric ity\ntin ie\nthomas ville\nstran raer\nssf crabb\nssfcrabb itohs\nsk ic\nreic hen\nram e\nraj deep\npu shy\npic ad\np wi\noo f\nnaturo pathic\nn ps\nmccl endon\nkeshar ose\njeremy clarkson\nje ster\nin bred\nh pp\nf cr\nclose ted\nc ton\nash tabula\nan cona\nalla board\nìŀ IJ\nwad dy\nvoyage urs\ntanamon geau\npr r\npon ti\npgc ps\nour g\nmetro id\nlauren laverne\nkri ya\nkohl rabi\nkey bank\nkar ag\nkal ab\nis adora\ngrow nups\nder osa\ndatadri ven\ndan ks\nast one\names bury\nalife style\nภį\nvijaysethu offl\nt shi\nron don\npu s\nplanet jedward\npen alized\nobserv able\nno sso\nnca c\nmon santo\nke se\nka ur\nin en\ni fl\ngreyson chance\ngolds worthy\ngocu bsgo\nfoolish ly\nfat cat\nesqui re\ndise mb\nbon di\nbody con\nbirk beck\nbattle tech\nav ent\nan the\nz cz\nw ä\nw drb\nune ven\nun peacekeeping\nu er\nti gru\nthe vampire\nsorrow ful\nru stle\nru hr\nprint works\npe kin\nomni present\nmusking um\nmool ah\nmid point\nmi hai\nmar cie\njit su\nireland sanci\nham pur\ngh ome\nfro gg\nfix ated\nfer oz\ndead stock\ncity center\ncampe che\nca sia\nbr ampton\nblitz krieg\nat first\nar tur\nushu aiai\nushuaiai biza\nurve di\ntph online\nsympathi zer\nside tracked\nsf gate\npal infoen\nman sur\nly d\nli mos\njacque es\ngun sup\ngli se\nge thin\nfri e\nfen u\ndy spra\ncla ym\nchap a\nc gl\nbar rens\nan isa\nī ï¸ı\nworld tourismday\nw oc\nw ladi\nvan itas\nsudir man\nshab ir\nros icky\npre eminent\npotter ies\npi awur\nne eti\nmy fitnes\nmen or\nmark j\nlove dogs\nk hou\nir anian\ninsi stence\nflexi on\nexorbit ant\ndu ele\ndesk ill\ndd am\ncy tometry\nbox wood\nben avide\nassimil ated\nade e\nÙĦ ÙĦ\n~ ^\ny ps\nw iller\nvali dates\nu kes\ntone itup\ntom ars\nshe ared\nrush ton\nplu gger\npir ro\nnar sissi\nlynd say\nlyn c\nliver ies\nk jr\ninner most\nho tham\nherman miller\nh var\nfanta stico\nec anada\ndd m\ndaily motion\nbed fellows\narbitr arily\nam cham\nye son\nweekend reads\nvast ness\ntre molo\nthe greatest\nsil oam\nsar pong\nsandal sresorts\nr grosjean\npublic transport\npower ing\nneuro tic\nnan as\nmoo lool\nmol itor\nmi am\nm sr\nlou w\nkra v\ngab f\nfier ro\nf mb\ndon lemon\ndel ong\nboro budur\nar nav\nagro ecology\nac to\nwür z\nwil helm\nv ingly\ntravelo dge\nthre ep\nthe irish\nstaf fel\nsta ats\nsnic ket\np gt\nol ab\no sts\nnumer al\nneuro diversity\nmat ters\nla ga\njay ant\njaw breaker\nin lays\nhome builder\ngray don\ngis borne\ngas pard\nfethi ye\nfear thewalkingdead\nek ad\ncrum pet\ncr h\ncc sd\nboar dof\nbackin theday\nðŁĺĦ ðŁijį\nãĢ Į\nvetri maaran\ntri ad\ntough ened\nta hu\nsp litters\nsher riff\npolar is\npe or\nor ab\none year\nnam carey\nmu ito\nmake ityours\nm no\nl ch\njuxta posed\njussi esmollett\nit works\nisthenew black\nirelandsanci enteast\nhar z\ne zz\ndimble by\nde wayne\nde mic\nco ves\ncav y\ncancell ara\nbridge gate\nbougue reau\nbore ham\nbalu strade\nal righty\nðĿĹ ®\nâĻª "\nwj hl\nwi ffle\nwar rington\ntony the\nthi opia\nspir acy\nsp ry\nsocial ise\nshaaraw y\nse dum\nroman esco\nri ssa\nred dog\nrare diseases\nrain i\nplural sight\npau per\no dense\nnavig ated\nmade ley\nlen ape\nk ys\nk afe\nhome buyer\neul cs\ndip tych\ncube sat\nch isle\ncar nar\nbe ko\nbaf fert\nav ai\nع ÙĪد\nzombiea pocalypse\nwit ton\nunequi vocally\ntri angu\nthero ar\nsoccer grlprobs\nroch as\nrevi e\npic ballot\nmeer kats\nkr z\nkq ed\nkon kan\nker stin\ninnumer able\ngu is\ngu ber\nely ria\nbo gu\naly zer\nalphabe tically\nalban ians\nade cco\nðŁIJį ðŁIJį\nÃŃ k\nw under\nte ow\nshi ga\nrick man\nn ph\nmicro brewery\nmi ffed\nmazdas peed\nmarchi sio\nloo b\nlea v\nlaugh ton\nkear ny\nip aded\ni think\nhod der\nglen more\ngle aner\nexper ian\nco bs\ncau tioned\ncab bage\nborder less\nathle isure\nale do\na ard\nðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸\nu tu\ntw al\ntoo ting\nspr a\nsky tower\nsal ado\nrex press\npub med\nom usic\nno fficial\nni hon\ni ams\nh mt\ngoo sen\ngiuli ana\nelpha ba\ndream girls\nconcor ds\nclover dale\ncitru sy\nbra w\nboun ties\nbarang ay\nase prite\nantw on\nan ja\naller gan\nðŁĩ²ðŁĩ ¨\nzal giris\nwesl aco\num sl\ntree top\ntarry town\ntac tically\nslo pp\nsaid haram\nsa wan\nsa kur\npan african\nnot good\nnick j\nmust be\nmul lets\nmiss ary\nmand aue\nlab ors\nkam er\nhe met\ngar rity\ncre ases\nch oline\nbro ch\nblemi shed\nzapp ed\nulter ior\nturf club\nsur fact\nsu leman\nsk n\npre rna\non campus\nnu dging\nn up\nmatrimon ial\nlore tt\nine sday\nin mar\nhydro phobic\nhawkn poke\neury th\nem ts\ndun oon\ncott en\nconstru ed\nbe red\nba sher\nðŁĺĺ .\nðŁį ¼\nz ze\nying luck\ny de\nvit als\nve day\ntropic o\ntra ynor\nticon deroga\nthe farahkhan\nst asi\nss v\nsk lar\nsal icy\nro sne\nrackete ering\npennstate fball\np bi\no ji\no doo\nnew mark\nmy fox\nmor ies\nmarke l\nmar oney\nmac ra\nke izer\nkal ak\nhuman ists\nhazarde den\nfis sion\nfe der\ndy mium\nbuy art\nat co\nash an\nal sa\nal kali\në° °\nà¹Ģภ¥\nver bo\nth air\nsas ol\ns vel\nnu f\nmil lais\nmc cook\nmackin aw\nlight speed\nlethal weapon\nimpal ed\nhoo ten\nhat ers\nfil o\nfantasy baseball\ndel isle\nbu cked\nblo t\nax mi\nash vsevil\naristo cratic\nacro stic\nac rime\n< =\n!!!!!!!! !!!!!!!!\nìĿ Ģ\nw cyb\nvau se\nuw tsd\nsuffo cate\nspecial report\nsemi o\nsat anism\nric or\nra res\npm modi\nlivel ife\nle lla\nir inha\ni Äĩ\nhor o\nher bed\nham mam\nglen view\nextrac tive\ndown loader\nchristian grey\nchae ology\nbur nette\nbow more\nbor ini\nboo geyman\nbig sby\ntu ffy\nth unk\nson air\nsiddi q\nsch nell\nrook ery\nread athon\nong ate\nmen shoops\nmelis sar\nmeal time\nkh ough\nju sta\nger ton\nfal mouth\nes as\ned and\nder ian\nda unt\nd pl\nconserv ator\nconcert gebouw\nchi raq\nchar leroi\nbull fighting\nbon efish\nban stead\nðŁı Į\næ·± å¤ľ\nâľ ī\ntun der\nto ffs\ntheli st\nswar ms\nsnap chat\nsk ra\nshot gun\nsch ee\ns be\npros thesis\npink shirtday\nor adi\none health\nmp ha\nmolin aro\nmoisturi ze\nlac i\nl á\nk ult\nide m\nho bi\ngam eface\nfittipal di\nfilm struck\ned ens\ncow town\ncom media\ncarte ret\nblan cos\nbarbi eri\natra vel\namal u\nalway ss\nal tona\nye katerinburg\ny israel\nwal msley\nw wee\nunder funded\nu cb\ntim ento\nthomas fire\nsho spitals\nshail ene\nsev ak\nru stin\nromantic suspense\nprovo kes\npic ku\npe rel\npe en\npap ad\npaleonto logist\nminneso ta\nkie hls\ninde pth\ne ero\nconcer ting\nco valent\nce st\ncardiff devils\nbro da\nbra k\nash bury\napprais als\nappointe e\ny ir\nxx vi\nworkin ghard\nwing suit\nus borne\nra shes\npatientex perience\nocho cinco\nny l\nnew kirk\nmyfitnes spal\nmade on\nl atta\nhu ys\nga jah\nfinger nail\neart ening\ndrew brees\ndo vico\ndiso wn\ndan ai\ncolori zation\ncatter ick\ncall ing\nbulk head\nbo kuno\nb ice\naul lah\nab ai\nðŁĻĭ ðŁı¼\nı n\nwil ber\nupcycled hour\nswor dar\nsum é\nsteve smith\nsinn fein\nsi dra\nrochel le\nran n\nraim ondo\npolit ico\nph rine\noutdoor sman\nne smith\nnc pa\nnal edi\nmo len\nma show\nm fb\nke bbi\nim mo\nilo ilop\nha itians\ngill iland\nfor christmas\nescar got\ndownload fest\ndev gan\ncolla b\nclonak ilty\nclick able\ncali endo\nc wx\nblackandwhite photo\nbangla desh\nav y\nang ala\naj in\nze b\nusar ugby\ntwitter sisters\nturk sand\ntee ism\nsou let\nse squ\nsculp tors\nrefu te\nreas oned\nq iu\npie day\noyster catcher\noo st\nmo da\nma ach\nkah lua\ng fp\nfr ys\nflood lit\ndul hania\ndan ne\ncro ton\ncol icchio\ncle x\nch boursin\ncb cs\nbern at\nbat um\nì ¼\nëı Ħ\nz ori\nwi thering\nwang ar\nteas poons\nske em\ns gm\nrecuper ating\nrattle snakes\nr sh\npo vich\nmil en\nm out\nki edis\nher mos\nher mon\ngarri son\ngam ist\nga etano\ncu bana\ncru zeiro\nchig well\nato se\nar bu\nannihil ate\nagu ila\nðŁĺĤðŁ¤£ ðŁĺĤ\ny zerman\ny po\nwwer aw\ntw iler\ntal os\nsw p\nsw ab\nshaz ier\nry ans\nr pi\npur ples\nphyto plankton\npha r\npa ise\nmotor homes\nmccour ty\nlun as\nlauren tian\nkol i\njim caviezel\ngen io\nflex friday\nfair lady\nema ar\ndown the\ndevan ey\ncre tin\nca shire\nblu ey\nblo is\nblack jacks\nbarnar dos\naxo lotl\nashvsevil dead\nzyn ga\ntomo fromearth\nsk ine\nse wol\nreu ters\npromp to\npor cello\nper ron\npash to\npaedi atric\noo z\noo kie\nlich ter\nleder hosen\nleather man\njets fc\nippo iloilop\nim pede\nhoward donald\ngent es\nev ms\nel co\ndan tonio\ncoch ise\nchil dish\ná ¸\nvish u\nun berg\nti enne\nt fr\nsir car\nribb it\nr be\npla gne\npike tty\npi rit\npersonal injury\nmy lar\nlzzy hale\nku ria\nfrau en\nfoot stool\nfarmb ill\nfac inelli\nescam bia\ne we\ncw o\nchelseac linton\nchar ades\nand ile\nac kee\nyo soy\nwol d\nusp oli\nus na\nu val\ntusc ola\ntoy ama\nthe sia\ntac it\nsuper ga\nstrang lers\nsteph mcmahon\nsolo travel\nsh ampton\nsa enz\nrobu sta\nre framing\npo ch\nlife insurance\nla day\nkar apar\njur gens\nguild ford\nghir ardelli\nebb s\ndiav olo\ncrowd sale\nchester zoo\nchar r\nbigg boss\nbig cats\nbhan sali\nbad boy\nat sea\nas sent\nÏ ģ\ntrek ked\ntouch pad\ntim buk\nrob portman\nraku ten\npre trial\nparty nextdoor\nos g\no tom\nno yer\nmadd ening\njon son\ninlovewith switzerland\ngro ped\ndiam andis\nbig little\nb me\naw t\nak ingly\nwat sons\nwat p\nvote onedirection\nu hn\ntweetapicture thatdescribesyourfriendship\ntr anny\nson gof\nsim racing\nshe par\nsebasti án\nscarec rows\nsal cedo\no samu\nnurses week\nner ship\nnarsissi st\nn saina\nmole ster\nmachiav elli\nli ek\nlc ms\nip fw\ninfon doro\ninfondoro tweet\ngre tath\ngerani ums\nent v\nearth pix\ndu bh\ndimit ris\ncorner brook\ncor respond\ncic er\nchir py\ncheltenham festival\nbom bus\nb fl\nai den\nadar na\naber ne\na hir\nunt angle\ntu shar\nstein bach\nseñ ora\nschlei fe\noffen bach\nnobel peace\nmargo tro\nhi ac\nge ma\neze kiele\ned ers\ncule bra\ncomor os\nwin stone\nway point\nwar pedtour\ntrick ling\nsu dar\nspring cleaning\nshaf en\npin oe\npg w\nola ju\nleit ner\nle se\nippoiloilop np\ninduc tive\nhhhh hhhhh\ngretath unberg\ngo tto\nexo tica\nerec ting\nea res\ndi ary\nder os\nde meter\nco wie\nche ema\nbooks beseen\nbo to\nbb do\nav aro\nas of\nam mer\na joe\n........ ..........\nviolenceagainst women\nunder weight\nter r\nt sing\nsty l\nstu bb\nspi er\nslack ers\nshal f\npublic an\nplo tter\nos ment\nnuss baum\nmoor fields\nmoney penny\nmal thouse\nlu ka\nlament ations\njai brooks\nhel t\nhahahahahahahaha hahahahahahahaha\ner lang\nemo tion\ndy son\ndro it\ndorse twildlife\ndonkey kong\ndi anne\ncraf ted\ncn m\nbad ham\nay c\nari ate\nðŁIJ ©\nâĶ Ĭ\nü rk\nymc mb\nwat ley\nw toc\nvirgin media\nsuper sonics\nsh it\nsch ilis\nsad da\nrecycla bles\npu shin\npro xi\nper reg\nnew shq\nmother f\nmo red\nmal ak\nlove struck\nkre ss\nimam ali\nhel msley\ngri sel\nflemington vrc\nfar scape\nel ge\nchi rag\nalphon so\n. ".\nðŁĺį ðŁĶ¥\nâļ½ï¸ıâļ½ï¸ı âļ½ï¸ıâļ½ï¸ı\nâī ł\nà¥ĩ à¤Ĥ\ny ayo\nway o\nvi jender\ntamar braxton\ntamarbraxton her\nstudent success\nspi ece\nsker ries\nsha shank\nsche de\npun dit\npt cl\nperse vered\nomg its\nnko tb\nms deskill\nmsdeskill india\nmr na\nmotor sport\nmon ics\nmcgon agall\nkitsil ano\nk vo\njo enbc\njas s\nit em\nilo g\nie h\nfe est\nfavour ited\nfar in\ndebar linea\ncomp ton\ncheryl cole\nbree ch\nbrac kett\nbarrett jackson\nðŁ¤ ¨\nâĺİ ï¸ı\nyaros lav\nus ace\nti do\nsw as\nsn hs\nplu sh\npale olithic\nout set\nnet eller\nnatur alists\nnaje eb\nmi paltan\nmer ce\nlock lear\nley man\nip h\nini x\nin ed\nfre dette\nentomo logist\ndevo tion\ncan g\nboat man\nb bow\nak ou\n;; ;;\n! âĺºï¸ı\nðŁĩ©ðŁĩ ¿\n羣åī£ ãģĬçµµæııãģį\nwist ful\nver afar\nthe time\nshon en\nsaidharam tej\npo kies\nparis i\nno stro\nmonso ons\nmix up\nmith un\nmin oru\nmb ball\nman to\nmagnac arta\nkalash nikov\nhy phen\nfist ful\nexpo se\nday after\nco gic\nco bia\ncin os\nber oi\nber at\nan ki\n\' /\ntre foil\ntb p\ntan en\nsteu ben\nsportsc ards\nskynew saust\npri stin\npay phone\nonto logical\nnikel ab\nmilli ken\nmendo ta\nk lasse\nindi ain\nimp ounded\niam nehakakkar\nhal sted\ngat ling\nfor dre\nfar ne\ndump er\ndi dion\ndecre es\nd ph\nbook suk\nbarber ing\nace c\nðŁĻĪ ðŁĺį\nðŁij ±\nåĨ į\nwinnie the\ntomb stones\nthin ned\nsty a\nsi pho\npseu dom\npropagan dist\npe ct\nover tly\nound ingly\no suna\nnu er\nnk peace\nni gg\nlivel ong\nli ott\nl sg\ngom is\nfarming dale\nec ko\ne iri\ndsw d\ndeton ation\nde voting\nclu n\nburn s\nbring backthe\nbo pper\nber l\nale i\nal ba\nzo iep\nyo yp\ntl eroy\nte res\nsuit ability\nsk ales\nsa inte\nreprodu cibility\npuri jagan\npre ys\npr l\nphy tes\nmo there\nmiy avi\nmc vay\nlo ya\nko ke\ngreen back\ngoo oooooo\ngiant s\nfl studio\nfeather y\nextraordin ary\ndow son\ndefaul ts\ndar wen\nd ms\ncur tin\nclark sdale\nci les\nchan elle\ncassin is\nain u\ná Ł\nya ari\nwall ach\nw tol\nusf ws\ntwing lish\nturn stile\nsunil grover\nsensi bly\nschul ich\npro claim\nprana v\npeter borough\nperreg aux\nper nod\nne use\nm lt\nm ko\nlyn den\nky n\nho ole\nhali de\nha ys\nfriend lier\nfer ment\nf sw\ner ing\nenti sts\ndis ch\ncth agod\nbor iso\nbo wels\nbam bam\nau dis\nangel s\nal arabiya\nðŁĴ ½\nâĿ¤ï¸ı ðŁĴĽðŁĴļðŁĴĻðŁĴľ\nwoo lies\nwdw today\nto pper\nte ap\nsuper computing\nsp angler\nraise high\nqueens ryche\npri sms\nopor to\nmt mte\nmachi da\njan kovic\nin excusable\ngu ile\nfinlay son\ndram edy\ndoo san\ndayofthe dead\ncol gate\ncaddy shack\nbt toronto\nammon ium\nami ami\nðŁİ§ :\nðŁĩ¦ðŁĩ ¿\nzoiep almer\nwant age\nw ma\nvoiceof obrien\nver di\nve o\ntowerof london\nsté phane\nstur ges\nsti ger\nsoci alized\nsie g\nrhy s\npro bert\nover thinking\nole ic\nno a\nmikas ingh\nki per\niv d\ning rich\nhyper active\ngear best\nfollowthe whiterabbit\nfic tions\nec ou\ndarshanraval dz\ncommercial isation\ncatalo ging\nben evento\namund sen\naim lessly\n- &-\nìĥ¤ ìĿ´\nü yü\nvin er\nsutter ink\nsp g\nrotherham iswonderful\nri au\nre deemable\npl lc\npaw sup\nor pol\nle vent\nlan come\nkk an\nish ra\nha stag\ngue ira\nfil bert\neth i\nd su\nbuis ness\nben ik\narre sted\nal lover\nagin court\nwwe games\nunra vels\ntwin sies\ntime management\ntean eck\nscar fs\nr cl\npur ley\npower houses\npo stures\npedro ia\npainst akingly\now let\nope th\nmotör head\nmol de\nhugo boss\ng oud\nfri a\nflo tsam\nel dn\ndan ai\nast side\nap apa\nans ys\n° °\nvikram prabhu\nup endra\nsli ving\nsky uk\nsi hh\nshow stoppers\nsee king\nsc imit\nreading challenge\nra du\npod bean\npiawur tzbach\npel ley\np wn\nos n\nopen banking\nold timer\nol anus\nmel ano\nkensington royal\nfc x\ncp im\ncoss ack\ncomic strip\ncomb ative\nco sida\nce v\ncb w\ncassinis aturn\nari jitsingh\napp o\namee sha\nadobe max\n( $\nðŁij¸ ðŁı½\néĩ ij\nvoc ates\nun habitat\ntur vy\ntro be\ntoday schilis\ntipp ec\nsir te\nsaf es\nru dra\nred white\nph ala\nnag iri\nmultivit amin\nme wes\nlu ttrell\nj ole\nintrac oastal\nin ici\nim fnews\nhand books\nha ft\ngo lo\ncrypto trading\nchar grilled\ncentra al\nbritish bakeoff\nbas set\naust ere\nali wal\nad ini\nyw am\nwor cs\ntran scribe\nto winit\nsou py\nsie w\nshow piece\nshamrock rovers\nsc ry\nrou lade\nre finished\nra vin\npar ter\nou tit\nole ander\noh ms\nneer ja\nmag all\nmachin ima\njob seeker\nfun der\ndistur bs\nbo dine\nbm ps\nas oiaf\nab atement\nìĬĪ íį¼\nworldtoilet day\nvictor iam\nsu ave\nstate university\nsmi l\nsentin el\npunxsutaw ney\npatton oswalt\npad awan\nmodest ly\nminim al\nlass iter\nku b\ningh urst\nhu lt\nho ol\nhierogly phs\nhay ter\nhag ler\nflan igan\nfish town\nfire brand\nfel dy\net b\nem at\nel rey\ndoctor sday\ndc family\ndaily pics\nbro mide\nbal aton\nbaff in\napp raiser\napp omat\naad har\nÑĢа ÑĦ\nyour future\nwar burg\nsummer hill\nro sses\npatrol man\nomyel itis\nmay tag\nmadein france\nka the\ninsur mountable\ninsig ne\nhappy christmas\ngru mp\nfo yt\ndraw this\ndisser vice\ncur va\nbrigh ter\nbrad lee\nar cos\nħ ï¸ı\nì ±\nwand le\nw sw\nuniversity challenge\ntag team\nstel ugu\nsqu otes\nso dex\nscript chat\nril is\nrap monster\nr ind\npre acher\nph rey\nly love\nlur gan\nlark spur\nfair tax\ndro opy\ncomple t\nchristi es\ncarri bean\nbox office\nan eta\naggi es\nðŁ¤ª ðŁ¤ª\n⼠ºï¸ı\nus dot\ntr r\nroa stery\nreson ator\nphenomen ally\nmatt jackson\nley town\nj elli\nic ana\nibi za\nhy n\nguess work\ngoti t\nepiso de\nel veli\ndr kent\nboor man\nber kowitz\nan hui\nah me\n! ðŁıĨ\nðŁļ ¤\nðŁĴĥðŁĴĥ ðŁĴĥðŁĴĥ\nâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\nwater for\nval d\nunder secretary\nstren ds\nsten house\nsoci alization\nsnow globe\nsil van\nromeo andjuliet\nrhode sia\nphnom penh\nou est\nnu thatch\nmonth of\nmm ys\nhierogly phics\nfanci ful\ner ac\ne studio\ncom i\ncab anas\nbioprin ting\nbe ggin\nbak ula\nausv nz\nam ado\n)))) ))))\nwh our\nweimaran er\ntriump hal\nso ju\nserv a\nserp ents\nscu detto\npol qc\noli v\no die\nma hou\nlover boy\nla sa\njeff bezos\nirish examiner\nindie booksbeseen\nill amas\nhel ical\nfear lessness\nezekiele lliott\ne ys\nde gu\ndat are\ncool er\ncointe legraph\nchu gg\ncharacter isation\ncb insights\nca ppy\nbel lucci\nalt ars\n? *\nstevenage fc\nsteel series\nshu b\nshabby chic\nse bago\nscream ing\nreal i\nplu meria\no wat\nmarkuss chulz\njar ra\nil ot\nil lah\nel ight\nedgar wright\ndon cic\ndomestic abuse\ndisinfe ction\nden by\nbull snation\nbel in\nbech tel\nbeau te\nbar bi\nاÙĦ ÙĬ\nwonder land\nvote march\nther anos\nston ing\nshipp ensburg\nsch mel\nsa chat\ns farm\nrafin ha\npo inci\node on\nmeryl streep\nmasam une\nmary anne\nmammo graphy\nm oooo\nlinks ys\nke ez\nka sie\ngel o\ndeid re\ncher well\ncher lloyd\ncardio twitter\ncal z\nboo zing\nbar mouth\nas ma\naquas cape\namus ica\nðŁij¼ ðŁı½\ná¹ £\nzak yn\nxl viii\nwgn news\nti as\ntaken ote\nsyner gy\nstabil isation\nsacri lege\nro ark\nre action\nradic alization\npla sters\nph ala\nom ingo\nnew sprint\nmu ffet\nmr at\nlique fied\nle gui\niz od\nht p\nfrenchri viera\nca hn\narquitec tos\na ari\nðŁķ ¶\nðŁĴ¯ #\nåĽ ½\nâĿ¤ ðŁĴĽ\nا ÛĮ\nvide ocon\nverafar miga\nv min\nupper cut\nuo fu\nspire ites\nsor bonne\nsol t\nsmooth ed\nshiv am\nsand point\nreli evers\nlang u\ni ze\nhow son\nhil ic\nglam is\ng antz\nfle gends\ndispen saries\ndiscoun ting\nchri sb\nber tu\nâĻ« âĻ«\nz ky\nwen zel\nwbc boxing\ntop shelf\nspike tv\nspic er\nsp engler\nsh ate\nsev co\npal mers\nom undson\nner vo\nmarsu pial\nlec kie\nld h\nkili fi\nkiel basa\njerry lawler\nhy eri\nhelp fully\nfinger printing\ne son\ndepend ents\ncyto sis\nchi on\nbom p\nbai lee\nastro gaming\nassassinscre ed\nashmole anmuseum\nan ouk\nalejandro sanz\nal ys\nak kuma\na sec\nðŁĴģ ðŁĴģ\ny annis\nu bon\ntroop ing\nspamal ot\nsn ood\nsa kin\nruth lessly\nremote sensing\nr ines\npp k\npedd ler\nmeet southafrica\nmcminn ville\nmas ri\nma ggs\nkeyn sham\njaun ty\nisrael news\nhell skitchen\nhave yoursay\nhaar p\ndiab y\ndelmar racing\nch ury\ncarav anning\ncan in\nbur pee\nballester os\nar rambam\nar ge\nani am\nand ys\nan nett\nach io\ny f\nwest mids\nultr amarine\ntip tree\nte mu\nst z\nspl int\nshan ker\npil ate\npel i\npanam anian\nnew land\nmu bb\nmis informed\nmer sea\nme ate\nmc stu\nmay fair\nlu pton\nkud row\nke dge\nit ae\nindv wi\niam chris\nen sor\ndien st\nd po\ncyr ille\nbarro so\nari de\nalternati verock\nak ak\nze ta\nwe iser\nthero of\ntani sha\nsuper fruit\nshin suke\nsex smith\nneedto breathe\nmr mark\nmol inos\nmar ussia\nllan beris\nkin ch\njupit er\nho thouse\nglyco lic\nge auga\nfu la\nfish n\nfa fighting\ndar ned\nbin ib\nan airlines\n주 ëĭĪ\nve in\nused gov\ntimeto talk\ntail or\nsuffo cation\nsan lucas\nre ek\nqueen su\nprece des\npen day\npad illa\noc ad\nnopain nogain\nman ton\nlor ing\nli vigno\nketo diet\nk anta\njuli puli\nheral dic\ngiving day\ngabor one\ng pt\nft fc\nf ack\nel agh\ndc g\ncolli erville\nbrit ches\naf w\nðŁijĨ ðŁijĨ\nwater hole\nvladi mir\ntec ate\nswitch blade\nstr t\nsr kians\nshailene woodley\nre fle\nrat ch\nr fm\npre vost\npae dia\nnas arawa\nmug am\nmc gi\nland lady\nlalunasan gre\nki ama\nkeen an\nkan eo\nj rock\nim so\nfl inch\nfix er\nfe mi\nfc bayern\nelectric car\ne chs\ndestin ies\ncav ell\nc vi\nborsch t\nbore lli\n\' [\nðŁ¥ ĭ\nÑ ģ\nÐ ·\nthe is\nthalai v\nstom s\nsco w\nsan kran\nsalon edel\nredd it\npu paid\npas wan\nmar lies\nmagnific at\nma ther\nlisi eux\njamshed pur\nits showtime\nick man\nical ondon\nheck le\ngang land\nep dm\ncur vy\ncre mona\ncolon el\nco aster\ncab rillo\ncab incre\nbig ten\nas z\nalger non\nĦภ²\nune vent\ntwin ing\nton sils\nsso cial\nsouth ridge\nshop ian\npied ra\noo i\nnaka jima\nmusic industry\nmcafe eshow\nmar sters\nliber ace\ngreen ways\ng couros\nfor cible\ndurham bulls\ncru mmy\ncp k\nclam ping\nbri dged\nbiri yani\nac me\nðŁijĪ ðŁı¼\né» Ħ\nwash rooms\nu eda\nswithe xo\nso ds\nsel im\nrau sch\nport stewart\nphi v\npacific rim\nor on\nond ins\nmasu da\nlan ey\nkurt cobain\ni ku\nhe ik\ngir ondins\nfre o\netsy specialt\ndo val\nbur ra\nìĿ Ħ\nìĭ Ŀ\nway zata\nwall er\nw mb\nty an\nsinf oni\nrud dock\nrejec t\nrav ish\nra skin\npre mam\npoly graph\nplayer pro\npen tel\npa ix\non dp\noh rid\nnur magomedov\nmeadow brook\nl ill\nkr all\njac inda\niso u\nie o\ngo tit\nfri dge\nfer d\nec ream\ndisintegr ation\ncultiv ar\ncp b\ncity tv\nbishop s\nbel um\nbb camerica\nbat b\nban ega\nba isakhi\nassembly woman\nyoshi kiofficial\nym nastics\nxmen apocalypse\nwy cliffe\nwater world\nval or\nstreet fashion\nshow boat\nriver keeper\nrealestate investing\npha sma\nnen agh\nmur ciel\nmc andrew\nmatch less\nmack en\nlu ckey\nless than\nic ici\nholiday inn\nhasi dic\ngla w\ng aping\ndi os\ndha k\ncountdownto christmas\nc dd\nboy o\nberk us\nb kc\nare sort\nap ra\nan tos\n>_ >\nðŁĶĬ ðŁĶĬðŁĶĬ\nzet terberg\nvex ed\ntril ateral\ntrans america\nthe sm\nstr act\nsti an\nstern berg\nspl enda\nsh iso\nrat ing\nphotograph e\nou te\nmaran atha\nlen nar\nj oli\nhyun sik\nhoek stra\nhalli burton\nfor days\nfo k\nely see\ndiversityand inclusion\nbutch ering\nbro gues\nbo hr\nared itor\nar ul\napp ts\nadd ington\nvintage toys\nti ppin\nreson ating\nmer ton\nkad ar\nkab ab\nhappy stpatricksday\ngishwh es\ngame z\nfra gran\nee baftas\ndrunk ard\nchaper ones\nasur geon\narnauto vic\nar ow\nãĥ Ļ\nvelo so\ntur co\nt ello\nsth lm\nspati al\nrak is\nraisethe bar\npr ying\nor ris\nol ong\nnever quit\nly u\nlewis burg\nkarun anidhi\ngru po\nflu tist\nfabi ola\nend hunger\ndevelop mentally\ndean ery\nda st\ncu bao\ncou pland\nbv m\nbr attleboro\nbore hole\nbar ked\nav ino\nare ma\nanimal lover\nam ora\nal vor\nun tied\numb i\ntory burch\nthr all\nsv w\nsnow birds\nsheik ha\nri dder\nre ars\nontari ans\nolentang y\nmott led\nma thi\nleich hardt\nkim f\nkeuken hof\njanathagar age\nir say\nhisham mu\nhe ssian\nfest of\nfa hd\nensen ada\nenforce able\ncon cub\nco k\nca world\nbran di\nboi ster\nbar ram\nar pita\nal dgate\nwearen ato\nuch ak\ntoa stie\nte jada\nspin el\nshow biz\nseun ggi\nrajas thani\nr mg\nmon signor\nm radio\nke pa\njudd apatow\nisab ell\ngir on\ngi p\ngam bier\nfal vi\nero y\neli ving\ndis concerting\ncu ellar\ncap illary\nbin ski\nangel os\namo sa\nðŁķ ķ\ntuesday selfie\nte ste\nsuni verse\nsud ha\nsap d\nover population\nnumb ness\nnicol let\nmin o\nmid way\nmag an\nle bon\nkoz hi\nkn ell\nkli psch\nher rin\nhd pe\ncar crash\natlantic council\nand soul\nand son\nam ple\nac w\nx ham\nvo td\nvo ssen\ntrade smen\nsper th\nspear heading\nsky dome\nshin ichi\nregistr ants\nprime iro\np tom\nmou che\nko oning\nkind ling\ngad ge\nful i\nfos dem\ndis qualify\ndan ab\ndae jeon\nd ja\ncom patriot\nchlor op\nblood stained\nbaikon ur\naz in\n... ðŁİ¶\n! ðŁĮŁ\nðŁĮ¿ ðŁĮ¿\nå Ģ\nâĢ¦ @\nwol seley\nwie be\nup surge\ntony robbins\nswan ston\nsal vi\ns ä\nrouss illon\nraj ag\nod ile\nmichael son\nme ted\nlombar dy\nli san\nkait lin\nh sp\nget z\nger ia\ngathere rs\nf elly\nemc world\ned reform\ndor mir\ndish eartening\ncrit ter\ncre ta\nash le\nar ini\nan sley\nactualliving scientist\nâĹ ķ\nwinn able\nuni fi\nte ka\nta stic\nsupermari omaker\nry lands\nraven el\nr le\npy ke\nprun ed\nnam rata\nn qt\nmin ator\nmelissab enoist\nmante ca\ninform a\nhead hunters\nhard ening\nfent y\nest ac\nel kin\neast land\ndal trey\ncountry file\ncomb ate\ncolle tti\narup group\nar ka\nanno poulos\nan kle\nãĥ¼ãĥ ©\nãĤ ĵãģ\nwein berger\nvir o\nthames link\nskim mer\nrush den\nroo y\nram sey\npas sport\nor atorio\nnct m\nmu gi\nma adi\nlitt lerock\nla sor\njunky ard\nfis sure\nfay dee\nfare wells\ndraw down\ndom hn\ndistric tn\ncout ts\ncori olanus\nclam ped\nbumble foot\nay ne\nan it\namit os\nvo hra\nvladi vostok\ntun ities\nsyndro mes\nsymp tomatic\nsun pictures\nsim provement\nreb elling\nquer rey\nphotosof dublin\nno ther\nmin nows\nmatern ity\nko ti\njo vial\ninza ghi\nimp hal\nidio cracy\nha bis\ncele stine\ncall sign\nc cr\n?? ?!\ntranshuman ism\nthe cus\nta ek\nstudentath lete\nsho rey\nsa sharo\nrv n\nrish ta\npac er\nnew ydd\nmol to\nmel ting\nmedi atek\nman jima\nlitt en\nli bres\nkuznet sov\nkir yu\nkarak oram\nkar gil\nill matic\nhafi z\ngan o\nd bi\nd acosta\nchee ked\ncast es\nbab in\nb wb\nay ia\nand country\nwh ig\nthe mba\ntat ra\nstro man\nsmash ville\nscore cards\nrav ello\nran z\npi pi\nner ton\nnational day\nmg sv\nmali gned\nle mmings\nj ev\nintram uros\ninf a\nij en\nhopkins medicine\ngal ant\nfar ring\ndeta ining\nboun cers\narequ ipa\nðŁ¥ §\nze etv\nzal ando\nvo ces\nvil let\nvent uri\nsu do\nsm r\nsil marillion\nshap ing\nsee you\nsam sara\nrod well\nresi ze\nradic chio\nqui ps\npredat or\npar ky\nmanu life\nmahot sav\nm ge\nlat itude\nkrem lin\nkhe er\njay lon\ni den\nha bla\ngru en\nfluctu ate\nflappy bird\nfab le\ndenny hamlin\ncenten ario\nbun ce\nbroom sticks\nan ut\nðŁļ ij\nìĥ ģ\nwid ths\nwaf b\nthe word\nte efury\nspy ro\nshi el\nsch lumber\nsa ppers\nre launching\npal ladi\nmon a\nli q\nkum o\njan ae\nis si\nim ate\ng ile\ne missary\ncoinci ding\nchalce dony\ncal do\napo el\nan ole\naggre ssor\nðŁĹ Ŀ\nà¹Ģภ¥\nw day\nunder pinning\ntroms ø\nte faf\nsuper mom\nstri als\nstory tell\nsco in\ns need\nroo d\nplain ly\npac ade\nne brown\nmtk global\nmargotro bbie\nkir ch\nkhq localnews\njim mies\nholo cene\nhe em\nfu ta\nfetu ses\ndysp hagia\ndayoff all\ncu tbacks\ncb ssunday\ncas soulet\nbul wark\nban al\nan del\nam sat\nyas meen\nwill ful\nwest isbest\nu ds\ntw ice\nthel ab\nstove top\nste es\npatho genesis\norel se\nogil vie\nof the\nof ten\nof ici\nneuro blastoma\nmore ll\nmartÃŃ nez\nloss less\nk lip\nhar land\nhandicapp ing\nhal ima\ngau ghan\ngar ia\ndd ance\ncu man\ncru sts\nchiroprac tors\nben ham\nbaw ling\narthu rian\nallevi ating\nac ole\n---- -->\nðŁĺį !\nâĿ¤ï¸ı âļ½ï¸ı\nঠ¸\nyo jin\nye u\ny pa\nvand en\nv gl\nus ada\ntsingh ua\nthousand th\ntelltale games\nsho jo\nsco ville\nsat ori\nrepe atable\nquent in\nmari me\nmalac añ\nma kai\nlat en\nkin kade\nkil lam\nhit maker\nh th\ngram app\nge um\nfri z\nfe ek\ndaysof activism\nchur ned\nchico pee\nbu j\nbet w\nberk man\nah f\nworl dar\nwomen crushwednesday\nvi kings\nvanqui shed\ntrit onal\nsuper series\nsn afu\nrimb aud\nrally for\nquie ting\nmusic city\nmattybra ps\nmac ias\nlovelo velove\nlees ville\nk chenoweth\njaz min\ninter vening\nilooklike anengineer\nho pp\nho ice\nhex a\ngri ma\ngoo glen\ngener a\ng wan\nder z\nbirken stock\nbend re\nbel en\nbe ira\nath ar\naerob atics\nðŁļ µ\nðŁĺŃ ðŁĴľ\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤ\nwalk away\nvallec ano\nv end\nswtor family\nstro s\nsplat tered\nrobo to\nred wing\nor gin\noak lawn\nnat u\nmclaren auto\nm ti\nit sy\nimmobili er\nido o\nher she\ngir der\ngamel oft\nfaroe islands\neast link\ndo bbins\nbe sok\natri ots\nartic a\naltam ont\nðŁĵ Ĩ\nëį Ķ\nzar ate\nworld champs\nwil tern\ntele mark\ntang le\nste ppers\nsp ha\nsmith field\nsmel ter\nsleep iness\nshor thorn\nse hat\nscast aldi\nricflair nat\nricflairnat rboy\nra un\np cy\nnoon time\nmercy hurst\nlo ling\nlittle field\nit su\nich allenge\nhomopho be\nharmon ix\ngar wood\nfu a\nei p\ndam ani\ncla es\nchal dean\nbrass ica\nbarcelon a\nar tweet\nal om\naj kt\nðŁĶ´ âļ«\nz ita\nz ari\nur der\nstudio ghibli\nsk ys\nshareyour weather\nseag rant\nry k\nou at\nno guchi\nmeeting profs\nman av\nine ar\ngul ly\ngul lah\nguan lin\ngrow up\nfootb al\nexplore tnq\ndel acruz\ncreation ist\nasphy xi\nas ings\nappreh end\nalton towers\n_/ \\_\nyear books\nwhoo pi\nthel ady\ntemp tress\ntatian amas\ntatianamas lany\ntab er\nsur fed\nsheep shead\nru c\nro tax\nra yan\npost mark\nop elika\nolim pia\nno bigdeal\nna sti\nn fib\nmy city\nmoon walker\nmetro linx\nmedev ac\nmal ware\nli gh\nl fr\njah lil\nicecream day\nhon ky\nh ô\ngas ses\nfrom italy\nfc sp\neu erasmusplus\ndol i\ndi mond\ncor bridge\nchic ane\nbully ing\nball z\naggie up\nworld champion\nven eta\nvar ley\nv aren\nswin ford\nstory boarding\nsor um\nshort films\nself driving\nsci reports\nsalv age\nquat re\nprime time\npat mcafeeshow\npand its\nnews max\nma zi\nlo ko\nkan mani\nit ri\nink drawing\nil ha\nhoro witz\nholistic health\nheath y\ngovmike huckabee\ngluco samine\nfredri k\nfran corchamps\nfenerbah çe\ner mann\nen ame\ndor m\ndoit better\nch sler\ncdn hist\nbat shuayi\natmo spheres\nash urst\nant s\nacu pressure\n? .....\n. --\nwhit lam\nunab ated\nu ky\ntu bab\ntear drops\nsor orities\nrekind led\nqu ails\npat re\npad me\nnorth allerton\nn se\nmy nd\nme gha\nk fest\nima i\nhy ang\nfore du\nff un\nfavor ito\nfashion designer\nesz ka\ndisney sm\ncheese cakes\ncd k\nbq quinn\n:-) :-)\nwic kes\nun supported\nsqu inting\nsam iz\npra gati\npk ats\nnab o\nlike this\nle scott\nku fball\nkar imi\nfl ink\neul er\ndv d\nda ke\nbon in\nbha va\nbennet ts\nay cliffe\navali able\narchi vists\nal bar\nçī Ī\nà³ ĭ\nwu f\nwis in\ntrade govuk\nsha fiq\nrey k\nphi fer\now ry\nn chs\nmi strust\nla chen\nkal ki\nje er\nindustri ous\niiii ii\nfor ked\ndot news\ndesp at\ndd ry\ncycl onic\nchief tains\nce des\nbra yer\nboo ba\nblan keted\nanti gu\nalach ua\nðŁĴķ ðŁĺĬ\nutilit arian\nuss i\ntantal ising\nsu hr\nstri per\nsal thill\nre wing\nophon ic\no vember\nni ble\nmc griff\nma hara\nju mla\nink well\ni pt\nhonolu lu\ngreen grass\nfer net\near muffs\nd under\ncoted azur\nbra ves\nboy sen\nasun cion\nal ynn\nðŁĩºðŁĩ ¦\nภł\nyo day\nvi bing\nup do\nuc ci\nso do\nsi rah\nseattle times\nrp dr\nreluct ance\npol ak\not c\nmcco ist\nmalay an\ninfe rences\nin nis\nha shoah\nh ga\ngiov anni\ner ith\ndavin cis\ncompag nie\nchar less\nblue bell\nbern al\nart therapy\nal son\nzan si\nye su\nyan is\ntranscen ding\ntommy flanagan\nswal well\nstick tennis\nsp v\nro ms\nranjit rophy\nprogre so\npro bosc\nnord schleife\nmo jang\nmill work\nmase kela\nlaura bailey\nkaz im\njaeger lecoultre\nin is\nhol ness\nhit omi\ngno l\ngillette stadium\ngett v\nfront end\ndi aper\nd tt\ncountry living\nclo jure\nclark county\nbbcscot weather\nba thers\nac mi\nabe okuta\nðŁijĮ ðŁĴķ\n⼠ª\nwanna one\nun complicated\ntyra banks\ntwitter land\ntro u\ntre a\ntb aker\nre drawing\nno bodies\nnaom ic\nmd gs\nmar wa\nmar ly\nmade for\nm de\nla sters\njen elle\nhairex tensions\ngreen ville\nev h\nec ce\neatemu pkats\ndu ka\ndiscolor ation\nder mott\ndc publicschools\nclen ched\ncart mel\nbrow ner\nbrainde ad\nbenevol ence\nbel vo\nbed worth\nbab ly\nauto dromo\nat ak\narmad ale\n.. "@\næľ Ģ\næ ¯\nto ver\ntn p\nthere tte\nteagas c\nspar adise\nsolst ice\nnott oo\nn kc\nmy oung\nmass aro\nman av\nhin do\nh fd\nfur yk\nestudi antes\nen ay\ndidd ley\ncul led\ncomp as\ncham pers\nbritann ica\nbluer idge\nbill ington\nbe funky\nb ort\naw sm\nang gun\nv ab\ntol ley\nthe don\nted to\nstro king\nsm acc\nshivar atri\nsepul veda\nry del\npoly morph\nphy no\npersonal ise\no ing\nnor ml\nnerc science\nmk dons\nmethodo logical\nmeas ly\nlandsc ap\nkamp f\nhel fer\ngui zhou\ngu ins\nglengar ry\nfo ghorn\nest ella\nembo dying\nday bed\ncategor ically\nbo yes\nbench tm\nbeltand road\nbead les\nbe stre\naric ci\nafar ber\nachri stie\nðŁĺĬ )\nðŁįķðŁįķ ðŁįķ\nx bone\nworshi pper\ntran som\nsn elling\nsavit ri\nsar miento\nsab aton\nre vocation\npd sa\nmol ino\nmin ni\nmen y\nmar at\nmacas kill\nlj mu\nli zzo\nle aker\nl ti\nkimf coates\njit endra\njak ks\nit zel\nimmer sing\nhend ra\ngold rick\ngiovin co\ngal vez\nfood blogger\ncomedi enne\ncircuit americas\nchamber sburg\nbech del\nà° ª\nz ug\nyak itori\nwalk ley\nvocab ul\nserendipit ous\nsa dia\nrug gi\nroo ke\nrit zy\nresur faces\nren veen\nre padam\nrand burg\no vitch\nnko si\nmotherwell fc\nmo tul\nmis interpreted\nmadi rakshi\nle maire\njo you\ninstinc tively\nhench men\nhaddon field\nflavour ful\nex a\nen al\nel um\ndow dy\ndo bb\ncumber some\ncervical cancer\nbuc ssport\nbird watch\nwr anglers\nvi ña\nvesti bular\nsar ma\nop g\nnsm q\nmag ny\nkitch n\nkhan i\nin x\nhu ggy\nhe uss\nhe din\ngn p\ngau teng\ncum be\nconjec ture\ncarshal ton\nbumble bee\nblack cats\nber yl\nbe mused\nbal kan\nat ron\nðŁĩµðŁĩ ±\nาภ¢\nvisit dublin\nvalent i\ntrampol ines\nthenand now\nta hi\nsuss man\nstaff suni\nslo ss\nsinnfein ireland\nsigh tedness\nscar pa\nro ga\nreen acting\npo hl\nplai sir\nparalympic sgb\nnow t\nmill stone\nmidr ange\nle bat\nkun ming\nkhur ram\nkat amar\nkale e\ni shaan\nhy gro\nho jo\ngo z\ngar ni\ngamer rter\nfle ming\ndv s\ndru ze\ndone gan\ndeb at\ncarri er\nben ne\nar thurs\naly syarief\nal hilal\naf flu\nac una\nìĺ ¹\nãĤ ĵ\nyeah hhhh\nxi ong\nx man\nwood haven\nwan athan\nut ler\nu manitoba\ntweet the\ntop soil\ntam angpanahon\nstarwars story\nru ba\npomo doro\nper le\noptimi zer\nmultil ateralism\nmor phe\nman ay\nluxuri ously\nkon ya\njess amine\niowac aucus\nin ay\nguardra il\ngu tt\nf pl\nern akulam\ndimini shes\ndi sa\ncort landt\ncoo lest\ncas ita\ncal vados\nbo ying\nblen z\nbio similars\nbillu ps\nbilling sley\nbe res\nbe brave\nassail ants\nasak usa\nan coats\nac te\næ·±å¤ľ ãģ®\nãĥ¼ãĥ «\nyour best\nwomens fiction\nvibr ates\nve tri\ntsitsi pas\nt plf\nstone ham\nsq a\nsk inst\nru sting\npolic escotland\npet zl\nmore ton\nk rock\njeffre ys\njad on\nfu fa\nfe v\ndonnar umma\ncu jo\nbun ty\nbrighton fringe\nboling brook\nar oos\nanant nag\nam ando\nam adou\nad dle\nðŁĽ °\nðŁĮ ī\nyn ne\nwire tap\nwar hols\nvivi er\nvirtu a\ntv dsb\ntravel in\nsun flower\nretro viral\npre schooler\nmu zzy\nmdc ps\nmary hill\nmand alay\nmah n\nlil durk\nlan den\nla paz\nko te\njac inta\ngun ny\nelap sed\nel son\ndel ap\nde schu\ncu eva\nci ampa\nca dia\nba iling\nay ay\nati ps\namorph ous\nÒ ī\nwe tn\nvi ver\ntb in\nsuper bugs\nspac ed\nsh lomo\nse gas\nsa is\nroskil de\nrag out\npie tr\no euvre\nnorth brook\nmc clar\nma su\nm he\nlitt ler\nli una\nkno tty\nholy land\nh ku\ngate keepers\nfcc ca\nfar ma\nde ka\nctv atlantic\ncro zier\ncomedy club\nco se\nbryan fuller\naw wwww\nðĿIJ ¢\nì¹´ ìĿ´\nzealo ts\nvikas khanna\nthel ook\nterra pin\nsouth ington\nsj ö\nsegal ink\nring wald\npur suit\nporter robinson\nn jor\nn able\nmusic week\nmaneu ver\nloc as\nlat vala\njo esp\njill stein\nje pson\njar omir\ngre ener\ngh lan\nden na\ncre vas\nca ja\nbut kus\nbarbecu ed\nban ia\nba shers\nand als\nðŁļ į\nà ¾\nÙħ ع\nza har\nwa af\nv uni\nun hurt\nsasharo iz\nsar gas\nrag weed\npri mers\npersu asi\nold town\nna sim\nmo sey\nmegab us\nluci ous\nlle ida\nku ka\nke sler\nkaty cats\njuventusfc en\njale el\ngri mac\nform es\necho smith\ndw f\ndeser tification\nchat uchak\nbol land\nbec kett\nbad boys\naustrali angp\namaz igh\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺįðŁĺį\nðŁİĵ ðŁİĵ\nìķĦ ìĬ¤íĬ¸ë\nwoo ing\nwire frame\nwarwick uni\nvere en\ntag a\ns dorf\nruther glen\nri gger\npu renew\nound le\nophthalmo logist\nnov as\nmess age\nlang en\nki ke\njj j\ninstru ctive\nim cr\nhud l\nhahahaha hha\nh nc\ngrow ls\nffe d\nextrac ellular\negal itarian\ndere khough\ncasc ada\ncand lewick\nbra chi\nbi shes\naspen ideas\naro ck\nam gen\naguin aldo\nwit wer\nvi sta\ntaran tu\nstor ie\nstenhouse jr\nskin ner\nsj hl\nsel fi\nse ck\nse basto\nsalt ash\nre turners\npo ach\nparas ailing\npali o\not ti\nnav ya\nman gala\nlil uzi\nl fs\nkier kegaard\nkei ki\nhop sin\ng linda\nfun e\nflying treasures\nfirst dayoffall\nfeed feed\nextrem ities\nchow kidar\nbright future\nbra que\nbodle ian\nabb vie\nwait resses\nvo se\nstreu sel\nsquee zes\nso ham\nsi skin\nscri vener\npied ras\npan ts\noscar noms\nos weiler\nmultin ationals\nmelis sag\nleibo vitz\nkit na\nki h\njan os\nint led\nindustri alized\nhenri k\nglo om\ngilets jaunes\ngar ratt\ndoor darshan\ncu vee\nbu hr\nbbcworld service\nb ita\nausv sa\nard show\nzero hedge\ntwilight zone\ntreas ury\nswind ell\nshaha dat\nse ance\ns lough\nquer ying\nplain view\npas co\np na\nme tu\nmaxi mum\nkur uk\nkare v\nic f\nhur tado\nhiro ki\nhac kett\ngi spr\nchit wan\nchan tal\ncann ae\nband ar\nan pr\nad ley\nacivil war\nðŁĴ ¶\nwater sheds\ntol an\nsee thing\nsain toftheday\nreham khan\nredsox nation\npol man\nnicky byrne\nnew build\nmn r\nlegion naires\nkw ame\nin lombardia\nhur ghada\nge omor\nfra c\nfr fr\nel z\ne warren\ncounter culture\ncol ney\nboondock saints\nble v\nbe proud\nbar dem\nalam w\nye tic\nunivers alist\ntiffany andco\nsi ar\nser pong\npropag ating\npreneur ship\norg ana\non da\nneu en\nly coming\nku ga\nindv sa\nglee fully\nfore boding\nenerg ise\ndr congo\ndiamon dre\nde sar\nd vp\ncuck oos\ncop en\ncoo puk\ncamp bel\ncal pe\nca shes\nber batov\nband ito\nbab ushka\nas sos\nartist s\nan cora\nakat suki\nyearsand years\nw tb\ntwee ting\ntre l\ntransgre ssions\nstru mming\nsomeon eyou\nski athos\nsan on\nsaddle dome\nrunny mede\nru ms\npoo ts\npardon my\nnew son\nnational boyfriend\nmelani el\nmc carter\nlaurabailey vo\nkn br\njop hie\nic se\nhu ddle\ngra zed\ngo blets\nff ner\ncham el\ncedar wood\ncar per\nbex po\nbakh ti\nadverti sing\nðŁıĢ ðŁıĨ\nठ¶\nvicer ylle\nust fccca\nsten gel\nspear fishing\nsheep le\np ke\nnol and\nmee eeee\nmb ol\nleon i\nla than\nkru m\nkan agawa\ngyneco logist\nga ap\nflor is\neu logi\nef p\nec n\ndee j\ncyber men\ncross an\ncoin treau\ncody rhodes\nchori sters\ncar ls\nbelle vue\nasylum seekers\nðŁijį ðŁĺİ\níĻ ĺ\nwomen day\ntrun ning\nto god\ntali esin\nspo oning\nro ve\nproxim al\nmr bobbybones\nmaul din\nkel is\nkaf fir\niw m\nil ai\ngo ssett\ng Ãłidhlig\nfly tying\nf pu\nest evan\ndysp horia\ndosto yevsky\ndecap itation\ndai wa\ncl anton\nci ut\nce menting\nag ara\nðŁIJ ľ\nðŁ¦ ij\nys z\nwel led\nu sso\ntu li\ntok us\nthe futurist\nt illie\nst itt\nsofi acarson\nscrib ner\nrudi mental\nrobert kirkman\nresi stors\nre gon\nram ana\nr nib\npo du\nno tes\nmount sin\ninhabit able\nhu i\ngrom met\nforthe city\nfore stry\nding ers\ndend ritic\nd ins\nbrown stein\nay ahu\n... âĢ¦\nteam coco\nsunday lunch\nsub tract\nsi ssy\nsen ran\nsapi en\nro go\nro f\nreggi ano\nre integration\nre imagines\npl ices\nol on\nogle thorpe\nobjec ted\nmr b\nmotor cars\nmathe w\nma fi\nlil ah\nl pm\nj balvin\ninge stion\ngu lies\ngrun ts\ngior gio\ngi ma\nfre elibrary\nfmp sd\nfe is\nfar k\nfal staff\nexpos é\ndonate aphoto\ndeci ma\ncu c\ncri eff\nco sti\nchoo k\nbridge water\nbab bling\naureli o\narchitec turally\nalt itudes\nalfar ome\nalderweire ld\nyaht zee\nver raz\nupper case\ntro glo\nte il\nst legion\nsli me\nsin hala\nsh uk\nse ps\nschen n\nnc ss\nmart ello\nmar ka\nkhal e\nintelligent sia\nic b\nhapp yn\nepic games\nedward barber\ndy nat\ncolour pop\ncal var\nbur wood\nbo dom\nal tright\nãĤ ĭ\nyoung min\ntrab zon\ntra xx\nsl ington\nsim mered\nren fro\npu ke\nphala en\nnax al\nmx r\nmun iland\nmac i\nior i\nher p\nfx networks\nec to\ndeb ina\nchrisl hayes\ncbs newyork\ncampbell town\nbat esville\nav it\nash wednesday\naco b\nðŁĺĤ ðŁĴ¯\nzi ad\nwo tc\ntu sh\nthe return\ntem kin\nsuspen der\nst j\nst bat\nspe kker\nse án\nquad rup\nor os\nmoh sen\nme jores\nmcbride melissa\niri s\ninsul ate\nholl ering\nhear ns\ngau ging\nfrosin one\nfe bre\nentr anced\nelik kol\ndurgapu ja\ndisney xd\nd max\ncormor ants\ncis c\nchief keef\nc wru\nbutter mere\nbre tta\nboycot ts\nbe al\nà± ĭ\nxanth in\nwannab es\nw me\ntr at\ntoo thy\ntom ography\ntin elli\nth ack\nsw ati\nsoda stream\npul sed\npreserv ative\nn ced\nmon ad\nmo bbing\nmica ela\nmar it\nlor awan\nkhu da\njam o\njackson yb\nill ine\nhor wich\nhen sible\ngol deyes\ngo or\nfitness friday\nf na\nett ner\necho cardio\ndr phil\ndema tha\ncas cade\ncan yaman\nbox car\nbar den\nb nt\n, :\nðŁļ ½\nðŁIJ Ń\nË ¡\nyork s\nun hrc\nun funny\ntrump ers\ntra k\ntoday i\nthesly stallone\ntab ak\nshi l\nseg mented\nse idel\nri ple\nre man\nnep tun\nlie v\nkw ad\nhe swall\ngoe sto\ngad or\ng ones\ng had\nfer gal\ncu rable\ncb cott\nbu tta\nbrick house\nbeat ers\nan m\n# âĿ¤ï¸ı\nvenice beach\nved monton\nteam o\nstedeli jk\npurve yor\nponto toc\npit loch\norange theworld\no isin\nnw bb\nni hr\nnaijap als\nmark r\nko tori\nheit kamp\nhal pern\nha use\ncor s\nchange maker\nai ke\na hahahahaha\nච±\nwil kin\nwak in\nv gma\nun inspired\nsuperbowl sunday\nsport snation\nson wheels\nsha ik\nsel ife\nsat yar\nrestric ts\nmost beautiful\njor ia\njodor owsky\nic ho\nhomogene ous\nhen kel\nhan kook\ngoh mert\ngodz illa\ng we\ng ative\nech os\ndiso bey\ncar milla\nbe head\nðŁĹ ³ï¸ı\nðŁĴģ âĢįâĻĢï¸ı\nìķĦìĬ¤íĬ¸ë ¡ľ\n⼠µï¸ı\nwer ner\nsteve martin\nsn us\nshr ine\nshira zi\nschnau zer\nn ée\nmat ting\nko bach\nkevin spacey\nkeral atourism\nkam iya\nin nyc\ngreen up\ngi golo\ngar lands\ngam ec\nfloor boards\nd gamer\ncoinci ded\nbuli mia\na starwarsstory\ní ľ\nâĺĢï¸ı ðŁĺİ\nಠ¯\nç on\nway yyy\ntakethe crown\nstri b\nserv al\nsa vic\nrown tree\nmn ths\nlong ley\nlagun abeach\nkin folk\nkap iti\nkan tha\nev ah\ndisk on\ndar lo\ncrystallo graphy\ncou n\nchocta ws\nchis nall\ncast leg\ncarab iner\nc pa\nbrock well\nban bridge\n. ãĢĤ\nðŁĩºðŁĩ¸ âĿ¤ï¸ı\nwu ff\nvan den\nun loads\ntheti ser\nshop clues\nri si\nprocter gamble\npom pous\nphoto books\nph ic\nmon clo\nkrav maga\nkeep fighting\nk als\ni ht\nexacer bate\ndh l\nde sil\ncat chand\nbo te\nall and\n:) @\n... ???\nðŁ¤· ðŁı»âĢįâĻĢï¸ı\nwear it\nunderestim ating\nu en\ntw m\nta fa\nscen eso\nru dely\nreal dj\nper re\npe gula\npar at\nor ji\noluse gun\no tha\no af\nloving blogs\nlate ef\nlamin ating\nkingof pop\njames bourne\nj gh\nin ya\nhar ty\nh py\ngore tti\ngo team\nfollic le\nexplor atorium\ne checs\ndt k\nclimat ecrisis\ncan wait\nbrun er\nbeck oning\natherosc lerosis\nall road\nðŁĶ Ī\nwee hawken\nty rod\nti enes\ntail ings\nsur fing\nstam ford\nsilli est\nself driving\nsco splay\nsav ini\nsa kit\nrock of\nre snick\nque an\npic ci\nom ac\nmelani ec\nmccar ran\nmarion spekker\nmag ill\nmad cap\nlie w\nko bold\nkee ch\nits great\nhar ring\ngw ash\nfire wire\nfenu greek\nexagger ate\ndown size\ndavi dro\ncomple menting\nbr inson\nbook marking\nbo chy\naln wick\nalek sandra\nacon vention\nãĤ ²\nyi dol\nwater line\nv co\nthom sen\nscor ned\ns martin\nre union\nre finishing\npu king\nphotom on\nnr g\nn lg\nmegapix els\nlearnto code\nkuri haran\nkis sward\ninter sper\nhi sten\nhae chan\ngo won\ngn ash\nfunc tionally\ne by\ncolla ge\nchris delia\nang in\nanc at\nworl duk\nwee ms\nun ranked\ntraff icker\nthru sters\nta wan\nstü n\nstephan opoulos\nsp reps\nsc ouse\nsa hib\nrec itals\npromo tional\npan nier\nmic he\nme scal\nmar rickville\nmal aise\nher rington\nhallucin ating\nh mg\ngrapp les\ngl int\nge thard\ng dg\nful via\nfow les\nesp er\nen mity\ndream scape\ndon ville\ndab bling\nd sh\ncu ck\nconstitu tionday\nconsci ou\nby way\nbarbar ap\nan elli\nad vice\nðŁijı ðŁİī\nâĤ Ĥ\nб оÐ\nyuk ata\nyogan anda\nway forward\nuk ku\ntwi sters\ntr illo\ntire some\ntho don\nthe jim\ntat as\nquin ce\nquattro porte\npre ening\nperfect wedding\npad dies\np ws\nnick kyrgios\nmumbai kar\nmai read\nl ations\njacinda ardern\nhis d\nh mb\ngi sele\ngener alist\ngel in\ngas lighting\ngainwith xtiandela\nfre unde\nflat ley\nfabric io\nexpre ssion\nduni ya\ndel ores\nbrou wer\nbor ro\nbmth official\nðŁ¤ ´\nãĤ ĵ\nunder growth\ntuesday tips\ntop news\ntil lage\nsceneso fulster\nprince george\npitloch ry\nol me\nok sana\nna ha\nmeg acon\nmat ica\nkh q\nkab b\nfashion style\nenrich es\ncraft brew\nchair man\ncanes football\nc inv\nbe sted\nba ia\nba che\nat oes\nacci dental\nabsolut ely\ná ij\nun spoilt\ntwee tin\nric heli\nre trou\nrat u\nraj ni\nps ys\npo sta\npes ce\nmichael buble\nmc naughton\nmatch stick\nmach ar\nmac dougall\nlur k\nloren zen\nlore m\nlit any\nlen k\nkw ong\nju gular\njhel um\ninescap able\nha zen\nfarmto table\nestim ator\ndo seof\ncri mcourt\ncampan ile\nbri les\nb hoo\nar gin\naq ib\nam ending\nal bin\nagon izing\nðŁİ¶ ðŁİµ\ntwitch share\nthe ed\nspeci esday\nr th\nply m\npatriot snation\noverwatch league\nori ya\nny quist\nnick jacksonyb\nmo thman\nme mentos\nlove whatyoudo\nloo ser\njan itorial\nhemo globin\nhass elt\ngalla cher\nelectro static\ned ch\nannot ate\nandl rai\naan andlrai\na inge\nðŁĹ£ ï¸ı\nðŁijĬ ðŁĴª\nðŁİ¸ ðŁİ¸\nè ¥\nyears of\nwu yifan\nw up\ntheo dora\nter u\nsil i\nr wn\npont chartrain\non tana\nmon ae\nmen ara\nleve sque\nkell ys\nkay cee\nk cac\njun ichi\njoe manganiello\nin america\nhir su\ngraffiti art\ngra fx\ngeor gios\ng eric\nfocu son\nesqu imalt\neas tham\ndrun ks\ndo ku\ndiag on\nde fuse\ncon dit\nchery lofficial\ncast aways\nc jc\nbring onthe\nback track\nîIJĴ îIJĴ\nç ao\nz ic\nwaven ey\ntol les\nto sser\nsilver back\nsav an\nrebel lion\nrandom weather\nour ne\nneen ah\nmonte verdi\nhill is\ngiz aka\nge ms\nemerging tech\neast end\ndev yn\nde humidifier\ndau d\ncom ission\ncampi one\ncalam ities\nas it\nar ney\nðŁĴķ ðŁĴĭ\nê ®\nâĦ¢ :\nzel da\nyu suf\nwin dia\nurin ating\nthe st\nste w\nspring y\nso ga\nsardin ian\nro mer\np tar\no el\nlle welyn\nkyo cera\nkey shia\nhopkin sville\ngreen eville\nexi ge\neric trump\ne aly\nat ale\n/ \\\nyric fm\nwyn dham\numb rell\nth s\nt ented\nsur names\nshilpa shetty\nrtel yricfm\nrecumb ent\nre combin\npit ter\nom ari\nno ster\nno gizaka\nnig th\nmaster work\nlove song\nkozhi kode\njerry seinfeld\nitv thismorning\ni ai\ngive it\nfu so\nfre dy\ndor k\ndit is\ncent e\nca ches\nbalven ie\nan jaan\naj ide\nz hiv\num ali\ntre vi\ntrack pad\nt illy\nsw o\nsouth port\nshopp ixels\nsac kett\nrantham bore\nq as\npa olini\nn lc\nmu tch\nmcke sson\nmc ing\nmanu al\nma sher\nillamas qua\ni ww\nhoste sses\ngrim ace\ngolf digest\ngen dering\nfrom within\neis ley\ndur um\ncr tc\ncon toured\nbook birthday\nald is\nab ú\nðŁ¥ ©\nzul ily\nwac coe\nutil ity\nswar med\nsky tree\nrm hc\npot pourri\nplant life\nmor rie\njock owill\nj eng\nim en\nfly trap\neleven ses\ndog gett\ndo po\nding wall\ncup ca\ncol n\nbic he\nbeat ncds\nbad ge\naun tie\namer rell\nâľĶï¸ı âľĶï¸ı\nyves ant\nweb kinz\nwarri er\nw of\ntu ras\ntin kle\nterri fyingly\nter t\nstu yvesant\nsk us\nriver dance\nrevolution ising\npar ing\npag al\nmull ally\nmck ellar\nmc nish\nle et\nkur la\nken zie\njourne ying\njen kin\nhux table\nhsi en\ngra bbers\ngo leta\nflav oring\nfenway park\nescar dio\ned da\nclu ms\nci mb\nbo dn\nbirthday cake\narc light\nðŁĺİ âĺĢï¸ı\nÅŁ e\nz ef\nwhit elist\nw azz\nvi mal\nti har\nspecu lators\nsin di\nsheh la\nroad master\nrat er\npetti grew\npalaz zo\nover power\nomar athon\nno ora\nmu kul\nmoon child\nmon biot\nlogo type\nlash kar\nkau shal\nju jitsu\njor ginho\njockowill ink\ning out\nhaz leton\nharri man\ngroup love\ndre gs\ndil ation\nde mary\ndar lington\ncounter productive\ncastell anos\ncas satt\ncarly fiorina\nca ines\nburn ell\nar nica\n. ðŁĺĢ\nwo che\nwhitecol lar\ntu tored\nthal asse\nstar crossed\nschool days\nridge crest\nre shma\npublic health\npost master\npegas us\none spn\nnicky romero\nnet zero\nnational geographic\nmineral monday\nmedi as\nlike a\nkwa k\nke pp\njordan peele\nhonor é\nhome stretch\nhock en\nha en\ngla ive\ngany mede\nfranchi see\nfab rica\nelo ad\ndu rex\ndou ala\nbluec laws\nbest dressed\nan andi\naic pa\nðŁijı ðŁijĮ\nâĢ¦ !\nzakyn thos\nuru gan\nuj jain\ntwitch yteam\ntit mouse\nthereal roseanne\ntel lem\nt anti\nsuppre ssant\nsuffra gist\nsu pran\nracing post\npaint work\nof mind\nnyc dailypics\nnin er\nnie meyer\nn va\nmur ti\nmaris ka\nm gi\nlit zer\nklo k\nkent state\njad akiss\nhan dof\nhan de\nger shon\nge kko\nga ja\nfu hr\nen zi\ne pe\ndel auren\ncur ragh\ncolon nade\nbe govic\naquare lle\naor ta\nwilliam sville\nwhat not\nvote btr\ntor k\nti sa\ntam mie\nskysports newshq\nsi ge\nshock proof\ns research\nreh man\nq ade\npumpkin day\nper on\nmp b\nmegh na\nmateri alistic\nlead enhall\nlav ell\nlac c\nintl crimcourt\nimmu table\nhat o\ndw ts\ncent r\nbo di\nbhoj puri\nany ou\nahan nock\nxox o\ntop notch\nsal lam\nsal afi\nred rum\npon o\npis cina\non r\nold days\nmus well\nmerry christma\nmatthe wk\nlocker bie\nki i\nic pc\nhendo polis\ngal rani\nfinger style\ndr seuss\ncollin s\naron ofsky\nannn nd\nach other\nè ¾\nãĤ¸ãĥ £\nâĹ¼ ï¸ı\nÊ ·\nwin o\nwhat ley\nvint ners\nt reads\nstevemartin togo\nsg x\nroth bury\nraj kumar\nquad rang\npro publica\nmetaphor ically\nmat ey\nlife after\nke mer\ni etour\ngou ge\ng fi\nfrees at\nfis d\nelisa beth\neh le\nech ino\ndrive train\ncór doba\ncla ud\ncl wyd\nchaf finch\nbla den\nbad asses\naren o\nam ita\nðŁĺĺ ðŁĴľ\nðŁijı ðŁĻĮ\nwor s\nweare wayne\nw mn\nvictoria justice\ntsa ww\ntram ore\ntecno logia\ntap out\nste inem\nsocial change\nshu tu\nong allery\nobsole scence\nnew tg\nnapp er\nmissing dog\nmil ked\nmachu picchu\nlv n\nlolo lololol\nli day\nle moyne\nkann apolis\njr h\ninter mountain\nibm cloud\nhang eng\nfruit less\nemphasi sing\ndivi ders\ndh t\ndaft punk\nbil as\nanatoli an\nðŁĴĽ ⾨\nzeec inema\ny ae\nunder fire\ntuf te\nstu mpy\nrochester ny\nprou k\npreci pice\npatri ka\nmon de\nlincoln city\niti onists\nin ism\nim m\nice fishing\nduba imall\nden so\ndead pool\ndatac enters\ndarren rovell\nd hol\nco field\ncelebrate monday\ncattle men\nbroo dy\nbroad hurst\nbid vest\nbal sa\nath el\nan ke\nan acortes\nad har\naction aid\n... ?!\nðŁĺĤ ðŁĺĬ\nåĽ ŀ\nw underground\nview able\nseclu sion\nsali da\nriver dogs\nre cline\nquick ness\nol one\nnx ne\nl wf\nko ba\nking stown\nkevin richardson\nkal ani\nju u\ni us\ngafe summit\nestate agents\ne mad\ndeme tri\nborn day\nbent leys\n! ðŁĺį\nyedd yurappa\nvan gi\ntristate wx\nse molina\nro tarian\npou ssin\nphosp ital\nor de\nokal oosa\nnewtg ingrich\nme ar\nlo pa\nlaidback luke\nl fe\njefferson ville\nh sb\ngan assi\nfrédé ric\nfli t\nfla b\nexpect us\nescap ades\ndiscre pancies\nclo ison\ncar sharing\ncado gan\nbird news\nba shment\nag rande\n/ )\nðŁĶ´ ðŁĶ´\nwit tering\nwaynes boro\ntobo ggan\ntn l\ntho rens\ntele pathic\nsport sperson\nsho bha\nse ef\nrit is\nraghu ram\npopl ar\npol onia\npo tu\npark ville\nnomencl ature\nnas cent\nmtv news\nmi dem\nla sco\nku h\njay ate\nip g\nill or\nhor rocks\nho co\ngar forth\nfr itos\nfish monger\nebbs fleet\ndru ck\ndel is\ncolor guard\nble dis\nav ni\nas ker\narti sth\nac ast\n, $\nðŁĻĮ .\nì§Ħ ìĺģ\nzo brist\nza e\nw pu\nv rou\nut tra\ntorpedo ed\nsur o\nste tter\nseaf oam\nsam sun\nring leader\nresusc itate\nrare bit\nr gm\npointilli sm\npen fold\no aa\nmc suk\nma ug\nliveon wlos\nkiwan uka\njohn tory\nhyp no\nga hanna\nfr ing\nend al\nen ation\ndere ham\ndecor ative\ncustomer success\nciene ga\nci marron\nchar o\ncard game\nbra am\nbom bo\nbal in\naircraft forsale\nab ela\n... !!!!\nðŁį» ðŁį»ðŁį»\nâĺºï¸ı ðŁĺį\nا٠ĩ\nwai lea\nunitethe union\ntippec anoe\nsympathi ze\nsuppre sses\nsinus itis\nshale en\nsac c\npro syndicate\npra vda\nph oops\noff grid\nnovel ists\nkx ip\nkol ar\nk ort\nintern at\nh plc\ngu ss\ngan nets\nfeels good\nfan on\nencu entro\ndevil ishly\ncul pepper\ncro quette\ncho on\nban aras\nbad in\nba ji\nari falvi\nai se\nðŁijıðŁı½ðŁijıðŁı½ ðŁijıðŁı½\nðŁİ¶ "\nwi ggy\ntw u\ntri partite\nswa in\nsi van\nre ham\nper plexing\nneve ren\nmorro wind\nmono clonal\nmanu kau\nic ad\ni at\nhy wel\nger bera\ng go\nfra zzled\nesc ul\nel lef\ndj fresh\nconfe ction\nc gp\nast anglia\naldub nation\nad vic\nðŁijĮ âĿ¤ï¸ı\nyu e\nwy ler\nwh ome\nwater less\nuto pi\nunquestion ably\nsalut ation\nnot ching\nmans bridge\nman tel\nmali gn\nlil ongwe\njon ge\niti zation\nhunger strike\nhol ter\nhit the\nf pv\ndy brand\ndun st\ncrumb ly\ncr r\ncity scapes\ncheap trick\ncatalo guing\nborn today\nban gui\nðŁĻĮ âĿ¤ï¸ı\nwin net\nvi xx\nun detectable\nto co\nteam canon\nseatur tles\nsanto sh\nro timi\nrake sh\np illi\nmon otone\nm fa\nm dd\nluc man\nkun z\nkag ami\nhometown hockey\ngiorg i\nfl ings\neu lar\ndown wards\nbrae mar\nben ihana\nbe kaa\nb ors\nb nib\nar ko\n." -@\nðŁĴĥðŁı» ðŁĴĥðŁı»\nîĢ ¢\nìŀ ¬\nwladi mir\nwash ing\nu tero\ntom an\nsuper soul\nsu iko\nsk ou\ns museum\npi h\npen folds\nparnas se\nosoy oos\nomni vore\nml u\nmc minn\nkoda chrome\nkno cker\nharpersbazaar us\nfit for\nep ine\ne bu\ndublincity uni\nde bre\ndav a\nc gt\nboy zi\nadap tive\nsto dd\nshenando ah\ns ella\nrun a\nrickman sworth\nre agents\nprece de\npre meditated\nposter deal\nou chi\none for\nnoti fies\nn awa\nmo by\nmiddle sex\nket one\nillumin ator\nghe art\nfac tored\ness aou\nen visions\ndavi dortiz\nca iman\nbrain wave\nba ine\nba illi\nan ari\nak id\nab ry\nðŁĵ ĵ\nê³ ¤\nâļ½ï¸ı âĿ¤ï¸ı\nvesta via\nun subscribe\nste med\nsp hero\nsound stage\nsol ari\nscrun chie\nregen sburg\npet friendly\nn aff\nmell itus\nm wp\nlump kin\nliluzi vert\nlets getit\nlavish ly\nlaver ne\nl ba\njiggly puff\njd mahama\njac opo\nhermos illo\ngrou chy\ngr nd\nemb u\ndeb ase\ncyg net\ncouturi er\ncan tile\nbuckey enation\nbel monte\nar buckle\nair tight\nðŁĴĸ #\n⼠°\nyeg cc\nye chury\nthat cham\ntele marketing\ntat chell\ntai mur\nsy doperahouse\nre targeting\nper missible\nnotre dam\nmani kar\nkel si\nk pc\njurispru dence\njab alpur\nil way\nholly wills\nhem poil\nharvard health\nh cf\nfro sts\neaves dropping\ncu zz\ncon ews\ncle tus\nbeach wood\nalicein chains\naf ana\nabbott abad\näº ķ\nà® Ļ\nzombi eland\nun playable\ntu o\nsuper highway\nstir rup\nsri sh\nse tx\nrock bridge\nre tails\nquo d\npurch asers\npen shoppe\npashtun s\npan ola\nou ettes\nnai robi\nmenin blazers\nlong bottom\nlo sc\nkü stün\nkeralab lasters\nkaf fe\njackal ope\nis sn\nin consistency\nhug gies\nhock ley\nhedon ism\nhack ing\ngood son\ngo jira\ngil lett\nge ther\ngad fly\nfanta si\nexpan sion\nenri quez\nef es\nd li\ncarnit ine\nbom bard\nbod ys\nbe sigye\nbas ara\naggrav ating\nad hering\nab rera\n; @\në§Īë§Ī 무\nveti ver\ntri athletes\nsu itor\nshi kha\npun tos\np aged\none and\nn wilson\nn atty\nmaternal health\nlat z\nl nd\nkal ai\nka sim\nk ka\njean ette\nin accuracies\nic x\nhu elva\nho ch\ngur un\ngou ld\nexpatri ate\nen jin\ned show\ndu cked\ndiffic ile\nculture night\ncontain eri\ncho pper\ncan vey\nbas splayer\nai ello\nacre w\na ahhh\nðŁĺĤðŁĺĤðŁĺĤ .\nðŁį ļ\nðŁĩ±ðŁĩ °\nï£ «\nw ens\ntransp ired\ntop side\nskysports f\nsix flags\nsh art\nseasi ders\nsas saf\npun cak\npo b\npbs kids\npasser by\nparfu ms\np sd\nol low\nne ill\nmo sse\nmid d\nmag u\nli thi\nke aton\nk won\nho x\neleg ans\nein horn\ncu base\nconce aled\nbourne mouth\nab ata\ntravel life\nthank god\nrelev ancy\nof god\nnu ttin\nmic hy\nmartin elli\nlondon fire\nlin sey\nkx an\nin ada\nhy mes\ngar min\nfun do\nfox borough\nfal setto\neliza be\ne ston\ncu buffs\nco dw\ncast lerock\ncar z\ncal mac\nboycot ted\nbor th\nbal ing\napocry pha\nanz stadium\nade mola\nze sco\nzam or\nwel t\nv alla\nu ve\ntwitch creative\nta virus\nstrad broke\nsteme ducation\nsoder bergh\nsmo ck\nslight ly\nshoel ace\nshab alala\nsabras radio\ns art\nrockst areditor\nred bud\nreal c\nli oni\nimplement ations\nhiroy uki\nhar well\ngu any\nfish friday\nfi af\nelic it\ndli ssing\ndis organized\nbuzz city\nbo panna\nbap homet\nbah ria\navi k\nap ids\nalamo dome\nal cala\nthe east\nthe bi\nspeak out\nso rel\nsel ly\nsch ofe\nsa thi\nrice university\nre joining\npon tus\nout liers\non able\nmd politics\nlun n\nlogi stic\nliske ard\nletsgo ducks\nl ha\nkar ach\njet son\nhur n\nhern ández\ngautam gambhir\ne hhh\ndun gey\ndem is\ndefe ction\ndagu er\nchol ula\ncav alli\ncapri ati\nbol les\nwe aned\ntil ts\nti bbs\nthor son\nth yssen\nquadrup led\npho tons\nny quil\nirrepre ssible\ninst ab\nii p\nholiday ing\nhee hee\ngym pie\nfrene mies\nfero city\nexhib ited\nenvironment alism\nel lish\ndol ant\ncw b\nconfor to\nb ny\naz n\n) ",\nðŁijı #\nðŁįģ ðŁįĤ\nyan dex\nvent nor\nthin section\ntao ist\ntakeak nee\nsi sto\nsebasto pol\nseas ick\nsat yr\nro settes\nnc cc\nmont clair\nmicro focus\nma quette\nkil main\nje mi\ngur jar\ngold frapp\ng ce\ndont buy\ndi ssed\nd model\ncru shers\ncarpe ting\nbuffalo trace\nart work\nar men\nan sett\nan ha\nal ah\né º\nè che\nwes sel\nval ve\ntu v\ntran salt\nsol ym\nsingapore air\nsch ap\nrevit alized\nreg is\npriorit ising\nmin ny\nmi dri\nmcmaster u\nloo g\nkon i\nknow le\nkin ders\ninternation alization\ni he\nfab lab\ned filmfest\ndad on\ncredit union\nci ent\nche ta\nbe kah\nbatt aglia\nag ny\nðŁĴĹ @\nâĿ¤âĿ¤ âĿ¤\nx le\nson top\nso ko\npowhat an\npe try\nour ts\nmo chrie\nlau drup\nl co\nk cl\nhi ye\nhandmaid stale\nf end\ndiade m\nd hara\ncase miro\nbud dah\nano vic\nad sb\nðŁ¥³ ðŁ¥³\n� �\næ Ł\nzam bales\nwheat en\nv scot\nthe legend\npri mos\npri madonna\npri ddy\npas i\nofficial marko\nmust watch\nlou yanong\nla batt\njag ga\niti m\ni ha\nh pr\ngal d\nfounders brewing\nep ers\ne spark\nclou gh\nc tic\nbha gy\nabo at\nðŁijĩ ðŁı¿\nç ļ\nе н\nzoom in\nz oil\nxbox onex\nwa aa\ntis rael\nsw art\nsubpo enas\nstu ckey\nsor did\nsic ario\nsant é\nrog elio\nradic alism\nplay bold\np elli\nop ta\nnu l\nnorm and\nni shan\nmetro losangeles\nmedal ofhonor\nma iam\nley den\nkoko da\nimpregn ated\nim ents\ngw t\ngar ri\nedge hill\ne cet\nd cy\ncu esta\ncol lie\ncali sta\nboxer dog\nbishop sgate\navent urine\natt weet\nak kara\nðŁĴī ðŁĴī\nwork mates\nwal lof\ntown beer\nsouth shore\nroof er\nrib fest\nri et\nreimbur sed\nra zi\nprayer ful\npo pa\npaignton zoo\nout fitter\nni hal\nm fd\nkillu a\nkc ca\niron de\nh ita\nei lean\ne gr\ndin sider\ndi stance\nde shawn\ndart mouth\ncinnab ar\nboo ze\nbi det\n! ^^\nvach eron\nuttox eter\nur fa\nuno cha\ntri stram\nten ough\nstam endment\nsiski you\nser ing\nscottho ying\nrag brai\npay day\no gl\nmcstu ffins\nlbor ouniversity\nkill inge\nimiss you\ngraham rahal\nflip grid\nelectric cars\ncity line\nbr annan\nbad la\nav ola\nannie mac\nad one\n.... .!\nðŁĺ«ðŁĺ« ðŁĺ«\nÑĥ ÑĪ\nwild food\nwic om\nwar ping\nwalu igi\nvi agem\ntr oughs\nspeci fying\nsay aka\npiercethe veil\norig en\nnh d\nma wx\nla han\nk Äģ\nis better\ninhib iting\ni wu\nholy wood\nh fd\ngoosen eck\nga ine\ng our\nfm sa\nf also\ney news\nelope ment\ndew point\nche tty\nca org\nbas qu\nam ra\nafter shocks\ntyler perry\ntread mills\nthen y\nterri fies\nstor r\nstatu ary\nsl tchat\nshuffle board\nserv ation\nsc our\nsam cro\nrif kin\nrebe ca\nre tweeters\npeanut butter\nni ah\nnational beerday\nnas ci\nmous er\nme ji\nlea rena\nkristen sen\nino e\nhe mmer\ngrac evander\ngoo ch\ngo socceroos\ngo j\ne tal\ndomest ication\ndo zing\ndev net\nb mar\namb az\nair bu\nacol lier\nðŁĵ ĥ\nðŁĴ ®\nèªķçĶŁ ç¥Ń\nwest chester\nun friended\nuk raine\ntoll way\nthe americans\nsty dia\nstein metz\nsar ong\nsab ir\nnieu we\nmor mont\nmarry me\nma plin\nkni k\nkni fed\nkash thefuturist\nih f\ng wil\nfun n\ndianna agron\nbry anc\nblues y\nanton ella\nan ar\nðŁĺŃ ðŁĴĹ\nðŁij ³\nðŁİĵ ðŁİī\nਠ¸\nye hu\nwil bon\nto tten\nti zation\nssi s\nsh anti\nsare gam\nsamaj wadi\nrot ted\nrealtor life\nqu alls\nperez hilton\nom gb\nnever settle\nnationalboyfriend day\nmatthar dybrand\nmart z\nlovel ier\nleg omovie\nlat rell\nje sh\niam diddy\nhypo chondri\nho ppe\ngreat night\nfirestone walker\nengv sa\ndr k\ndi of\ncounterfe iting\ncounter attack\nc wc\nbe shear\nar chang\nal mas\nag oo\nðŁĻĮðŁı¼ ðŁĻĮðŁı¼ðŁĻĮðŁı¼\nðŁĩ±ðŁĩ »\nz oll\nton da\nte shwar\nsu ara\nste mon\nse moga\nsau kee\nsage brush\nrunning day\nru eda\nre install\nrancher os\nquean bey\nour home\nobse ssively\nmike e\nke x\nk ila\nin wards\nill man\nhe ske\nhasle mere\nfree birds\ndist anced\nclich y\ncen sure\ncb gb\nb ateau\naspart ame\nalti eri\nad mu\nðŁĴķðŁĴķ ðŁĴķðŁĴķðŁĴķ\nãģĵãĤĮ èģ´ãģĦ\nwhoopi goldberg\nthe chew\nthak ur\ntele text\nsu tro\nspo tt\nsa iz\nrak ash\nprismacol or\npenn jillette\none gin\nmolo tov\nmat sunaga\nma ir\nkristen bell\nkil by\nki z\nine ss\nin cul\nimmun isation\nhur tigru\nhur rell\nholocaustre mem\nhe me\ngirl sbball\nger al\nfo or\nearth works\ndic tation\ndi one\ndead head\nde ts\nbru le\nave dra\nat rust\namp as\n> :(\nt vin\nsigni fying\npon ce\nn gh\nmon grel\nmo sko\nmil ind\njor d\nj df\nide olo\nhari haran\nhan bok\ng ander\net c\ndere ck\nce ca\ncau sally\ncar rol\nbbc cornwall\nap co\nantigon ish\nallo f\naldubeb tamangpanahon\nwarby parker\nwam u\ntrader joes\nter an\nstock yards\nsoon er\nseason al\npra gue\nmost ly\nmedi am\nkul fi\nkor tri\nj mb\ni yan\nhershe ys\nher be\nentr at\ndur kan\ndigital trends\ncot terill\nchante relle\ncen ote\ncantstop wontstop\nbro mpton\nbritish cycling\nbo of\nbo cas\nbayreu th\nb oud\nayo tzin\naw ing\nal ans\nagra phics\nago e\nê¹Ģìŀ¬ ì¤ij\nye vans\nwy mond\nwu xi\nvil sack\nun processed\nse quality\ns foundation\ns bts\npho g\npang s\noc b\nmakeover monday\nloner gan\nlive streamed\nlister ine\nku be\njoe perry\niron clad\nhur ls\ngro ening\nff x\ne set\ndian amary\ncyber tron\nclem ence\nc we\nber gin\nbelli ssima\na op\nwelove bath\nup v\nun consciously\nthe avett\ntashan eishq\ntari fa\nt á\nsport car\nsong sinfo\nsnar l\nsho ves\nsco tref\nreli shes\nprob ationary\npre ity\npark head\nmazer unner\nlin ed\nkan ak\nich u\ni et\nhy pere\nheide gger\ng ms\nesteel auder\nec ook\ndo ws\ncra yon\nclassic ism\nch ail\ncello phane\ncathar sis\nbri stle\nbra thwaite\nboo o\nba az\nar vi\nald red\nag ama\nyou can\nvisit bath\nv fs\ntrust pilot\nstree twise\nrandom ised\nr sw\npur pu\nperman ence\notol aryngo\nme gumi\nmay pole\nlo dg\nlan tau\nkuro da\nkill switch\nits jeremyscott\ninfar ction\ngul lit\ngo shawk\ngeno type\ng ó\nfal tering\ndu ms\nde be\ncorner stone\nchert sey\nbul u\nbu tting\nbol dt\nbo ser\nbay sox\nal ph\nab lett\nãĥķãĤ© ãĥŃ\nÙĪ ÙĨ\nwire tapping\ntom eu\nshapp ening\nrev war\nqhu beka\npla ine\nor adio\nmaynoo th\nlo td\nlets gom\nlee ches\nlarry fitzgerald\nju le\njrs bbq\nhumb leness\nharve sters\ngroo te\ngo saints\ndru zy\nde ws\ndag ga\ncon tu\nbbcn wt\narts fest\nanci c\nyan go\nwoo dridge\ntriple crown\nthe ft\nt ton\nsummer iscoming\nsub text\nso ori\nsarah m\nrefriger ant\nreal preityzinta\nre sourcing\npol amalu\nout land\nnihil ism\nnaw al\nmarig olds\nm ite\ngu ti\ngro sses\ngeni ality\nfear ne\neu referendum\nehlers dan\ndig ne\ncre em\nco design\nblon die\nabbe ville\nðŁĺĺ ðŁĴĸ\nâĶ ³\nw fl\nun flinching\ntrump is\nton ton\nthinsection thursday\nt tam\nsun land\nsr j\nse ast\nre pped\nr studio\nquarant ined\npbc sd\nouter hebrides\noutdoor living\noff re\nneg ation\nmm ering\nmartin freeman\nman cup\nmac ewan\nlobla ws\nlin ke\nkav ya\nkam la\nk lo\nhisten vscot\nhan gry\ngreen wood\ngar in\nflori sts\nflash dance\nfe scue\ndic ey\ndeci mals\nchris froome\ncdn health\nbrit a\nbono bos\nbl ay\nbil lets\nber na\nbarley wine\napit ol\nabb formulae\n⼠ı\nਠ¤\nzieg feld\nwinter bottom\nvo cs\ntou jours\nteam er\nte em\nrohing yas\nra ba\npasorob les\nn cube\nmel in\nmega watts\nmedical device\nkuan lin\nkinder morgan\nimpac to\ngom er\nfu taba\nfu shimi\nemb o\nelu ded\ned man\ndiscre etly\ndan afarber\ncypri ots\ncot illion\nboister ous\nbe ee\nappomat tox\nam strad\nam ers\nal tro\nabhin andan\nwwe tlc\nwork site\nwomenin leadership\nwilliams ruto\nv rt\ntrede gar\ntay y\nsf old\nse te\nril akkuma\npalm trees\nna day\nmil in\nmas ada\nmad res\nlive and\nktg tool\nfir man\netsym ktgtool\ndren the\ndaz ai\nctv montreal\ncre asey\nci en\nbor as\nbeem ji\nand ries\nach amber\nðŁĸ ĭ\nÃ¥ land\nwink les\nwallpaper wednesday\nwalk ability\nw amp\ntre tweets\ntransfer news\nthevampire slayer\nsrimanthu du\nshu bh\nshrews bury\nrei dy\nque sting\npun a\npar cours\npan jabi\nori ente\nopp y\nne em\nmagsay say\nm tech\nm ended\nlondon live\nlog ÃŃa\nleaf sforever\nkry stle\nkrist ine\nissu arez\ninsan e\nemployment law\ncomp ounded\nclin cher\ncarr é\nbethe one\nbeach volleyball\nðŁĺĤðŁĺĤ #\nx press\nvictor i\ntm gt\nsulph ate\nsi mages\nri ffing\nni guel\nne ke\nmouth feel\nmain net\nmac tan\nke met\njohn shop\ninter dependence\nhumor ist\nhawk girl\ngu yer\nfi des\nfab b\ndele o\ndairy queen\nbartol i\nanor ak\n ¾\ny anga\nwood men\nwh is\nwade bridge\nvindic ation\nv so\nuw bb\nu in\nth z\nsun life\nsu as\nsteam whistle\nspoke mon\nspaghet ti\nsnicker doodle\npan ik\non music\nnorth we\nmeach am\nlin nea\nkun ingan\nkann an\nith ia\nid night\nhumboldt broncos\nhick ok\nhershey park\nge ol\nfreder ica\nflu oro\nex uma\ndro ols\ndispar aging\ncon air\ncler k\nbu ick\nbi du\nas ync\nargu ment\nan stey\nwait for\nvz la\nver a\nvand a\nu ot\ntur ke\nthe creator\nte arooms\ntam as\nt shirtday\nsou bry\nsand castles\nre mixing\npleasant ville\nphi le\npark wood\no gc\nn cap\nmoris ot\nmo hs\nmary dale\nmam avote\nkap alua\njustin bieber\nhal sall\ngreate scape\nfar myard\nempowering women\nbra him\nblack burn\nbiaf ran\nbar be\naff able\nó nica\nzombies run\nwi der\nwh ence\nvig our\ntu bal\nstock piling\nstan ton\nshaf ted\nphra sal\no ÄŁlu\nmo wat\nmascar as\nmark levin\nlion head\nj nk\nj ati\nhe mming\ngr ice\nga it\nes wara\nel ora\nehr lich\ndrawthis inyour\ndeu ce\ndan ge\ncoming outday\nb ise\nam ad\naldu bang\nal insky\naggre ssions\nabbrevi ations\nwol dt\nvh sl\ntrueto atlanta\ntheloud house\nsub ha\nstat s\nstanis las\nstag ger\nself build\nsaha bat\ns bo\nrecap it\nrajni kanth\npuri st\npaul stanley\nnau lt\nmsg networks\nmon ts\nmo selle\nmichael strahan\nle may\nky speedway\nkiri bati\ninfin eon\nilau per\nhg se\nhenri kh\ngc as\nfi bs\nfain tly\nencapsul ation\ndham i\nde mer\ncynd ilauper\nbrisbane tennis\nboss anova\narom atics\nðŁı´ âĢį\nà´ Ĥ\nyo d\nx fre\nun concerned\ntu am\nto gram\ntar kovsky\nsyl het\nsy mph\nste g\nschool boys\nscho ck\nsch ill\nsas sa\nsas i\nree led\nre hydration\npsy chon\npro ffe\npon zu\nplay testing\nofficial asroma\nn anny\nmon ie\nmeg ach\nlo wes\nkot tay\nkai den\nk gal\ninter fered\nhydro cephalus\nho fe\ngreen well\nge urope\nfried lander\nflick ed\nfishing life\ndyna stic\ndigital humanities\ndi vino\ndail yui\ncoral reef\ncit rus\nchow dhry\ncapac ity\nbro yles\nber isha\naustin dillon\n:) #\nç »\nste mi\nshoto kan\nsh xt\nsem rush\npoly ps\npap ag\nmo dot\nmarketing digital\nmal lows\nlad ner\ninver ters\nim pair\nfrost burg\nfin is\nenchan tress\nem ol\nd kk\nclean room\ncit inews\nc ck\nbeat mania\nb ican\nali ef\nal bee\nâĿ¤ï¸ıðŁ§¡ ðŁĴĽðŁĴļðŁĴĻðŁĴľ\nüyü küstün\nze v\nygg dra\ny upp\nweb designer\nve tter\ntune up\ntri ffi\nteng ah\nspi ker\nsilen cio\nsat ara\nroll call\nred cliffe\nre routed\nran k\nps news\nper so\nn radio\nn cri\nmun ros\nmitch grassi\nmis er\nmil hist\nmar otta\nmac edo\nlo am\nkim a\nkenne bunk\nkati punan\nin wed\nhighland park\nfar ms\nengul fs\nchym al\ncatho de\nback board\nattach é\nane wh\nakhil akkineni\nè ¿\nw lan\ntend on\nsuvar nab\nstrou d\nsignat ories\nreedtimmer tvn\nmy t\nmohegan sun\nml f\nmarmo set\nletterbox d\nlane gan\nis caring\ninst illing\nine jad\nhiggin botham\ngai ag\nfour thbewithyou\nforti fications\ndj p\ndige stible\ndic h\nbath letics\nayahu asca\nz cash\nyan kton\nwendy williams\ntwom ey\nti x\ntar nish\nsuper lig\nsle ft\nrefugee week\nra st\npan ova\nnectar ines\nmao ists\nmake it\nmade jski\njah re\nitas ca\niam su\nhonour ary\nho ve\nhin ojo\nfrom is\nfl atul\ndown wind\ndom ini\ndark art\ncp w\nci dade\nche gg\ncas am\nca reless\nbuffy thevampireslayer\nboreham wood\nbc tf\nðŁĺĶ ðŁĴĶ\nworld star\nur ine\nsunburn festival\nstrang eness\nsnyder cut\nser ums\nscrew ball\nsauvi gnon\nrust lers\nrag land\nq ed\npo va\npast imes\nover stated\nos l\nne cc\nme ed\nmarydale entrat\nlv mpd\nlin q\nja anu\nick y\ni ghter\nhow toge\nguy fieri\ngro ans\nell oni\nele k\ndax ter\ncor sic\nbread sticks\nandreww k\nai st\nãĥ ¦\nâĿ¤ï¸ı ðŁĴĽ\nาภ£\nwa shoe\nver is\nspoo py\nspe ws\nspark man\nsnee zes\nsn hu\nsilver dale\nseth meyers\nsensiti zed\nsen yor\nsan ton\ns fe\nrosal yn\nplay adel\npe ale\novi ya\nnewcastle jetsfc\nmun dine\nmeetand greet\nm bia\nlooks like\njo vi\njimmy choo\nj ls\nisu mmit\nheritage week\ne chuca\ndro ga\ndream warrior\nce ren\ncaptainameric acivilwar\ncapit alized\nbroad water\nblu est\nbe ppe\nbar dsley\nzild jian\nye mi\nweigh ty\nvas ant\ntu tto\ntex tural\nte b\ntag ma\nstreng thin\nstep ney\nsta u\nsli pper\nsel loff\nradio logists\nmole sey\nlaver ty\nlan er\nky humane\nkatamar ayu\nhay lie\ngod ha\nexc itable\ne gov\ndis arm\nchak rav\nbusiness week\nbil son\nðŁļ Ķ\nðŁĴļ âĿ¤\nìĦ± ìļ°\nwu stl\nwr angle\nve ers\nval polic\ntrue man\ntimbuk tu\nsch ris\nsam s\nsam in\nsalt burn\nre affirming\npu ffer\npp b\npo yet\npar ia\np life\now ww\nmono tony\nlon avala\nl cc\nkir st\nju sty\njan ec\nis ay\nino u\ninci sion\nha segawa\ngust avo\nfn ce\nfag en\neric fisher\neng rish\ndino vember\ndharam shala\ndeutsche bank\nbest jo\n-____ -\nðŁĶ ¼\nðŁį· ðŁį·\nðĿIJŀ ðĿIJ\nula an\ntypho ons\ntree tops\nspra ggan\nsb x\nretur nees\nr ila\npro ff\nplay pen\nperforming arts\nnewar tist\nnd lovu\nnascar playoffs\nmur rell\nmaren go\nma kenzie\nk ays\njun ction\njhal ak\nired ell\ni der\nglo bu\nfor res\nfon tina\nfeel slike\nes n\nepitom izes\ne tive\ndisp elling\ndb x\ncro marty\nco que\nclip studiop\ncher as\nca os\nc pd\nbomba stic\nbed sheet\nav ca\nac im\naay yub\nza o\nvo cm\nva sec\ntic ians\nthom ond\nsta at\nsm un\nsep si\nre ton\npun g\nperi ences\npel ting\npay checks\nome dia\no ban\no ake\nnh wx\nmultil ayer\nmorpho logical\nmedia set\nfran cona\nflat mates\neu gen\nelrey network\ndigital skills\ncross walks\ncol ten\nbv b\naw wa\nandy black\nanand mahindra\nè »\nà¹ĦภĹ\nú a\nz enger\nyn w\nyel chin\nx plore\nwoun ded\nt fully\nsv n\nsky bound\nshu bert\nsg l\nse de\nsan ews\nri ds\npu chong\nost ent\nlive tv\nkeegan allen\ninver sely\ngle aned\nf hi\nedu tech\ndy stonia\ndel r\ndar rell\ncor am\nbou les\nbe vo\nar nott\nanci en\nalo of\nwater stones\nu buffalo\nsweat shop\nsto icism\nspot ted\nshow box\nread ability\nrav age\nraj e\nr ze\npy r\nmip com\nmi edo\nmcdonnell mp\njohn mcdonnellmp\nhead first\nglu ck\nfor india\nfon terra\nfill more\ndu ero\ncam il\nanthropo genic\nand sara\namandat apping\nal lee\nèĹ ¤\ny sp\ny hu\nwinter thur\ntrabzon spor\nsumat era\nsta i\nsix pack\nrum ney\nre style\nple gic\npal lotta\nmusic therapy\nmetal heads\nmaythe fourthbewithyou\nmatth dgamer\nmagi d\nle pen\nl sr\nkim s\nkala ign\njun co\njamie foxx\nit ates\nimagine ering\nil son\ngo snell\nglen ville\ngam ble\nfibre glass\nel dar\ndoing it\nclassic tv\nboo lean\nba yof\nb ster\nart scape\naj p\nzind agi\nvisit cz\nverraz ano\nun scented\nuhur a\nthevamps brad\nthen ame\nsh ama\nserious ly\nsas m\nrose of\nred foo\nra chi\nr bf\nq al\norlando pirates\nmor ra\nmission impossible\nme hl\nj elle\nhilde gard\nge eth\ng nd\nfro sty\nfamily friendly\nchris stapleton\ncb cradio\ncacci atore\nbur ne\nbak tan\naussie grit\nastro world\narchit onic\nan col\nalban o\nwil kin\nvindic tive\ntroglo dy\nti sci\nstandup for\nsm tv\nrelais chateaux\npropen sity\nmmmm mmmm\nli ppo\ngett in\nget better\nfil ia\nem ilion\ne sen\ndol in\ncityof vancouver\ncal oun\ncairngor m\nbay hawks\nate er\namer it\nâļªï¸ı ðŁĶµ\nvi st\ntit ic\nsur rep\nsty linson\nstu sa\nstego saurus\nsonam kapoor\nsau cep\nrat aj\npv l\npike ville\npando cruises\nny phil\nnews space\nnand ita\nn du\nmegam ix\nm musi\nlmfa oooooo\njeff flake\nj anne\nir n\nimplo de\nger da\nfi ras\ncra gg\ncon fig\ncle ave\nch anna\nca stration\nbor gata\nbellige rent\nas cs\nab kiba\nâļłï¸ı âļłï¸ı\nwom w\nti ous\nte sh\nsyl vain\nsummar ising\nsoccer aid\nsk or\nra om\noe il\nnorth norfolk\nmo ët\nmjol nir\nlitt lerock\nle var\nle pt\nkelly rowland\nk hul\njo kic\nio an\nhedge funds\nging a\ngi otto\ndo ink\ndianamary sharpton\ncow den\ncom d\nchon dro\ncal eg\nc sh\nber ns\nameric andream\nwa ster\nv ons\nt fg\nsud ha\nstoo ge\nspl ace\nso chi\nseal ants\nphotom ag\npedag oo\nmc muffin\nmammo grams\nlat ure\ni in\ngram pians\ngemm ell\nfor ager\nev illage\nde toured\nday fiance\ncor ry\ncon notations\nch ink\nbiker un\nar ima\nado on\nìļ ©\nãĥ« ãĥ\nиР¸\nÄ Ļ\nwhywe do\nvillar real\ntwy ford\nthelo cal\ntc cc\nsquee ze\nsi sson\nscoundre l\nsam mi\nplanet newsspace\npeek skill\np cr\none india\nnear pod\nms ba\nmalay alam\njail broken\njag gi\ngrou pe\ngo bulls\ngi ds\ng fe\nfra ga\nfox tail\nfitness goals\nfero ze\nevolu tions\nen trust\necu rie\nden pasar\nculmin ated\nconfis cation\nci oc\nchem nitz\nbron cho\nagu ero\n.... ...#\næ £\nãĤ¢ ãĤ¤\nãģ¦ãĤ ĭãĤ\nvalentine s\nturksand caicos\ntubab üyüküstün\ntour ing\nta von\nstay positive\nstar rs\nsa af\nro isin\npollin ate\nplan ecrash\nphoen ician\no des\nmt z\nmau ro\nmanag e\nlafit te\nl sf\nki ka\nhouse guest\nhispan ici\nfin tan\ndead liest\nctv windsor\ncop p\ncoon awar\ncome froma\nchel ly\ncharn wood\nch up\nbrown ed\nar amark\naerop lanes\nz elle\nwilland grace\nwatson ottawa\nv elli\nun recognisable\nto ti\nti bi\ntalk live\nso st\nshow tim\nser co\nre tort\npd ate\nmoren cy\nmor ita\nmil pitas\nmen udo\nmanag ed\nm wm\nkh saa\nintern acion\nincar nations\nhelle bore\ngas a\nas ra\nalternative facts\nalca zar\nðŁĴ¸ ðŁĴ¸ðŁĴ¸\ná¹ ĩ\nve sey\nunderthe stars\ntre bu\nthisi sa\nsp azio\nsau dades\nruf ous\nrepresent ationmatters\nre wrote\nram esses\nprofe ssed\npay ette\npa quette\nontari oparks\nnam ish\nmill in\nmen dip\nman es\njic hang\nja ide\nice a\nhos ny\nglu tton\nes ke\nes fc\ncabo sanlucas\nbla ine\nbig fm\nben salem\nbc m\name obi\n: [\nÊ Ģ\nwi es\nwak ulla\nthelibr arians\nthe bo\nstrong sville\nsportsman like\nspe aring\nskri pal\nsc aggs\nrepub blica\nq asr\npix ect\nop har\nontari op\nnational lottery\nko ss\nk lassen\nk ere\njungle book\njav an\nintervie wee\nhome maker\nham ara\nha ssett\ngar ages\nfrank sinatra\nfin ning\nengland hockey\ndf n\ndan ske\nd pg\ncraz ily\ncom patriots\nbut an\nbor thwick\nbel anger\nanu sha\nan b\nal mighty\nâĻ ¨ï¸ı\nva stav\ntis ans\nte yana\ntay to\nstay lor\nschen k\nsanc erre\nrecy cling\npriyan kac\npau lma\nmu see\nmonte fiore\nmmusi maimane\nload out\nkis an\nk los\njim watsonottawa\nilo vers\ni ate\nhun ga\nholiday shopping\nh pu\nglo ssier\nform work\nfir dous\nfar well\nfalcon pride\nen our\ncraftbeer hour\nco ren\ncat on\ncar news\nc isa\nbam f\nad k\na hari\nðŁĻĢ ðŁĻĢ\nwall flowers\nvisual arts\nturk men\ntanquer ay\nsol des\nsla dy\nsch nee\nsar ina\nrick grimes\nrevolution ised\npu gets\npra ga\npost ables\nmt scores\nmoder na\nmin are\nmar ula\nman tic\nlong listed\nllu via\nlawren son\nlament able\nkil dare\nfr and\ndri dge\ndevon days\nde gea\ndar c\ndang an\ndal is\ncoral reefs\ncon gee\ncol bie\nbo ji\nbe sity\nbarn well\nak zon\nĥâĸĥâĸ ĥâĸĥâĸ\nØ§Ø ²\nwolf ville\num news\ntran ada\ntin sel\ntar ah\nson gh\nskill set\nsee red\nsad hu\nros anne\nrober tir\npo zz\npo we\nnb p\nlasor da\nl sb\nkun dan\nke b\nja ques\nind superleague\nin oc\nhaku sho\ngri eves\ngov ph\ngi kwang\nf mp\neni or\nditch book\ncut scene\nbergha us\nbander snatch\nant ena\nan adar\nagap anthus\níĤ ¤\nthur ber\nthoro good\nspe zia\nsh eckler\nsea ham\nsc aa\nre learn\npunctu ality\nprop eller\nprayfor paris\npen se\np caa\nos er\nnam ib\nmic hu\nmcclo skey\nmac laine\nlegu me\nla ba\nkc star\nir cuit\niam rashmika\nhe ol\nground skeeper\nflower pot\nf mb\ne online\ndu bose\ndi atri\ncorn ering\nchi ari\ncad ena\ncab an\nbussel ton\nbrock le\nbig ly\nau kerman\ny ellin\nwal der\nut leg\ntahle quah\nshat tuck\nse min\nrosen feld\nrepublic of\nren aul\nre star\nok ine\nn naji\nmumbaim irror\nmar joram\nki elder\njump y\njohn sons\niran regimechange\nin bloom\nhom iny\nho ssa\nhal as\ney c\neff ler\ndynam ix\ndi vot\nden sities\nconceal ment\ncha v\nburi als\nbs official\nbloomsbury books\narmid ale\nador no\n$ /\nðŁ¤ ·\nx wb\nuc sandiego\nteam liquid\ntaze well\nstefan o\nramsay z\npeople power\nnorth sea\nneo dymium\nmultit alented\nm els\nlosange les\nkh u\njo yl\nidy ll\nhouseof lords\nen gram\ndiver ged\ndheer aj\ndash on\nd abo\ncra bbing\ncr ony\ncor rs\nchristmass ale\nam supdates\nallyou nee\nðŁĵ Ħ\nti bi\nryan lochte\nroysoc chem\nro ddy\npor tre\nol av\noh m\no dac\nnewh art\nnbc chicago\nn no\nmont parnasse\nmid ges\nmelbourne fc\nmarin ecorps\nmagicrock brewco\nlu da\nkay lie\ni pac\nhed nes\nhand els\ngameover greggy\nfrau en\nfe as\nerici dle\nend ura\ne hi\ndiarmu id\ncp n\nblue bombers\nanat ole\nab bie\n. (:\nåħ ¥\nãĥĥ ãĤ¯\nü h\nyam agata\nvin as\nvi di\nthro bs\nthe journey\nreli efs\nquiz let\npreco cious\npre fall\npor ation\npe irce\nox x\nno gi\nmallo famerica\nmack ay\nkin card\nke g\nkam m\nis af\ngol maal\ngiveblood nhs\ngha stly\ngh illie\nfo bs\nearth worms\ndeo dato\ncraw dads\nbobb ins\nbeile in\naz ul\nalab s\nach em\n... ðŁĺĬ\nðŁijī ðŁı¼\ntor iyama\ntnt drama\nsherrod brown\nscru tine\nr gt\npoo ps\nobtu se\nny kaa\nmul ching\nmakin ghistory\nlatte art\nlaken heath\njet stream\nir by\nguine vere\nfion a\neni ghts\nde ped\ncat girl\ncarnegiem ellon\nvill ers\nuchi da\nski v\nsi fu\nsc a\nsbspop asia\ns ape\nplane tearth\npic os\npet z\nparsi pp\nmetac ritic\nlu sting\nle tty\nin humanity\nima an\nhaw ke\ngraven hurst\ngrand i\nglu tam\nen gie\ndevin nunes\ndev fest\ncur ving\nbud ha\nave o\natalbihariv ajpayee\nao ka\nagu st\nadri el\naco splay\n* ¨\nìķ Ī\nãĢIJ #\nza die\nwat ney\nwashington ian\nunfor given\nu oc\ntax on\nsul k\nsquat ter\nsp asm\nside bottom\nshut downs\nsand bag\nrun with\nre producing\nr br\npal ast\nop io\nnovoro ssi\nnin aturner\nme shu\nky d\nju rist\njen nab\njami at\nin chem\nhy bris\ngracevander waal\ndav on\ndak ah\ncare ers\ncarbon ite\ncar ley\nbun a\nbal four\namazon video\nal cor\nac is\nðŁĺĤ ðŁĴĻ\nðŁį· #\nðŁ¤ŀ ðŁı½\nìĥ¤ìĿ´ ëĭĪ\nåIJ į\n⼠½ï¸ı\nwee ded\nv tol\ntemp ers\nsc ute\nsaf dar\nreha bbing\npurenew zealand\npul liam\npubli b\npri sma\npoun cey\npolit eness\nmccl at\nmaggi el\nkil mac\njuic eplus\nit sha\ni fa\ni ava\nhir t\nhak one\nfac tually\nexplore more\nell c\ndiscover tasmania\nday lights\ncosmon auts\ncer rito\nburgess dave\nbron chos\nap ter\nani mus\nale g\nab ag\nðŁĺħ )\nwo ky\nwag ers\nwa as\nvan go\nun refined\nu streasury\ntrum prally\ntoo ele\nt acked\nsoldby auctions\nsk ank\nsirac usa\npu mm\nprote us\nparach utes\nor nothing\nolympi atheatre\nmus kies\nmaking memories\nli ard\nge mb\ng ch\nfr its\neu stis\nesc congress\nemotional intelligence\ndi mmed\nculo ttes\nchall is\ncer ner\nbooks thatmatter\nbo das\naperiti vo\nad ice\nðŁĺķ ðŁĺķ\nãģ Ĭãģ\nzip p\nyour mind\nwhe ad\nv ap\nu co\ntrav chat\nthuman ity\nte abreak\nszcz esny\nsynchron ization\nsu stran\nssi o\nske cher\nsati sh\nreconc iling\nrec tified\nra wi\npetro bras\nnu dges\nnom us\nmor ag\nmag de\nhr l\nhel mer\nh lp\nfear on\nfa strack\neuro gamer\ndrunken ness\ndiv ar\nden nard\nd cli\nconserv atoire\nclub app\nbu ty\nbloom ber\nbart els\nbam ako\nangel as\nاÙĦ Ø´\nÌ Ĭ\nu za\nthupp akki\nshu te\nsandra bland\ns assi\nre play\npasi fika\np vi\nmonstro sities\nmalay sian\nmacca bees\nki ps\nimper ator\ngam bo\ng pac\neloun or\nbha g\nิ à¹Ī\nwhit sundays\nvoy agers\nriver head\nnon partisan\nmuri el\nmatsu yama\nmaje stically\nmacro phages\ninsu fficiency\ninhab iting\nilooklike asurgeon\nhigh smith\nguitar ra\ngoti ges\nflu ential\nfai led\nfac man\nde ten\nclement ines\nchu u\ncarolin elucas\nbre be\nbigg le\najay maken\naffo gato\nac abo\nðŁĺį ðŁĺı\nyu ga\nwill mott\nwheel ies\nwee l\nwb ina\nsqu ids\nskeem saam\nscar cely\nproud mama\npoc keted\nplac entia\npenn zoil\npaulstanley live\nnak ano\nmir zas\nmcke ever\nmc michael\nmc flurry\nm dn\nlion sofficial\nlily ach\nle louch\nindi gnation\nhorse head\nfrie sian\nfood drink\neval ley\neric church\ndrum set\nco rel\nbrze zinski\nbit sch\nbanned book\nalar sson\nabscbn news\nyebo ah\nwehr macht\nw out\nuk nikon\ntar heels\nsw y\nsouthern charm\nsof ty\nsmi there\nsk impy\nsk ane\nseatur tle\nse ely\ns fund\ns da\npois oni\nok an\nmn n\nk any\nim possibility\nico tin\nho cks\nhed berg\nhead stock\nhe aped\nflo ss\neng lander\ndelinqu ency\ndebut ants\ncrystal palace\nconven tionally\ncich lid\ncar mody\nboyzi imen\nboth vote\natat ürk\nann ag\nank sha\nair o\nabra xton\nðŁĺ³ ðŁĺį\nðŁij ŀ\nâĺ ł\nyoun tville\ny air\nv cd\ntv f\nte gel\nstor rs\nsi han\nshi fa\nshaz ia\nq az\npicture cumbria\npass more\npa ined\npa bebe\nmar rs\nlu y\nju x\njam at\nhappy thursday\nguing amp\ngrand daddy\nf aya\ndaruss alam\nbol zano\nbol din\nbar is\nax n\nali as\nunder pin\ntu to\ntall i\nstyli sed\nsimp kins\nsantam onic\nry lance\npreserv ation\nppy grewal\npix er\nom t\noireach tas\nobste tr\nnamish taneja\nna res\nmiro tic\nmini me\nm ta\nkaise ki\nities news\nhay ling\ngovernment shutdown\ngo wildcats\ney er\ndra win\ndol f\ndiscover on\ndi bble\ndel la\nd jones\ncrun ches\nclo p\nban yu\nbali stic\nba at\nas alonga\nan tuk\nalber ti\n? ðŁĺı\nðŁij Ķ\nðŁ¥ ĺ\nìĪĺ íĺĦ\nwa ir\nunevent ful\nunbe arab\nsin os\nscottish borders\nq o\npuri fiers\npor i\npl ena\nno pd\nnj siaa\nneu schwan\nneck er\nmun tin\nmill z\nma ith\nlost dogs\nld jam\nlaugh er\nk ml\njal sauk\nirrit ates\nil us\nhr h\nhope for\nham line\nha be\ngoogle analytics\ngod spell\nge x\nedu n\ndreamwarrior pic\ndave mustaine\nche yne\ncel so\ncal umni\nbesti ary\nbankof england\nbab ie\nawil de\nad achi\nunir dg\ntu chel\nthen est\nswar aj\nsedge field\nresor t\nqur anic\nqual ms\nok on\nnak ai\nna oko\nmacau ley\nlocu sts\nleve son\nle sa\nle oni\njuven il\nj ere\niv c\nin ane\nh acc\nguyan ese\ngor tat\ngoal ball\ngo kul\ngho strider\neddie redmayne\ned int\ncor tney\nclaw sup\nba ar\nat ap\nar mament\nanim es\nwat u\nv ski\ntre ve\ntr x\ntimp son\nth wa\ntcs nycmarathon\nsong joongki\nsha po\nsapi enza\nram pride\npdx tst\npatcho gue\np ki\nori be\non uk\nmovie challenge\nmaren morris\nkore as\ni en\nhell omy\nhallo we\nem mi\ndar ke\nco stel\nchat urvedi\ncassa dee\nc sun\nbroken hearted\nbel ag\nan dia\nاÙĦ ب\nvacation rental\nultra boost\ntrun cated\nto pline\nrevolution ary\nram pling\nproudof you\npeace keeper\npe mra\npare to\nmote gi\nmass aging\nje de\nhell fest\nf illi\nen cores\nell amy\ndeb tors\ndayo faction\ncs ra\nbro z\nbook mobile\nbm l\nbar field\napel doorn\nair conditioning\nach ts\nwash times\nut ela\nu ia\nthrough the\nte il\nsri dhar\nsal af\nruido so\nro tat\nro ka\npom pei\nmc d\nmar nier\nmar ga\nlumin eers\nleagueof performance\nken z\ngl ings\ngau tama\nforthe throne\nfor ger\nflam es\nfin landia\nfaul con\nfall fashion\nent revista\nden ard\ndc moments\ncold stream\nchak kar\ncal exico\nbun i\nbi annual\nbar kin\nar ola\naj stream\nâľĪï¸ı âľĪï¸ıâľĪï¸ı\nstu cky\nsn er\nshol ay\npre load\nmodern ise\nkal ki\njo gi\nj pt\nin def\nhen rie\nhavan ese\nhau schka\nham an\ng df\nem acs\ndevi ations\ndean er\nchisle hurst\ncampbell sville\nbu emi\natal ks\nðŁĴļðŁĴļ ðŁĴļðŁĴļ\nðŁij½ ðŁij½\nyou uuuuu\nwomenin medicine\nthen e\ntat v\nsv u\nsla c\nsingle payer\nsanjeev kapoor\npale stra\nork ney\nor ono\nnor well\nmtv india\nmelo die\nla gov\nkri ek\nkashi f\njon z\njeep ney\niu bloomington\nhop kinson\nhigh wire\ngo st\ngho sting\nfren zied\neven ingen\neg ham\ndhan teras\ncla wson\ncamp bells\ncal poly\nashi i\nalek sander\n[ .]\ny ero\nvu eling\nunion ism\nucl g\nu vam\nu pei\ntuolum ne\nthem is\nsummer field\nsu ss\nssi d\nsni per\nse jeong\nsand rine\nreser vists\npe ville\npalme iras\nof d\nni ans\nne uk\nmo el\nm hi\nkim so\nhar borne\ndim mable\ndali o\nclever ley\ncatchand release\nbrac ey\nbe leagu\nbar bra\nart prize\nar ana\nweill cornell\nvi dence\ntax onom\nswash buckling\nsre mmurd\nsoe karno\nsiddi que\nsergio kun\nscu ff\nscrew drivers\nsa avedra\nsa ag\npen ns\novere ating\nnoo bs\nmar vell\nlingh urst\nlau rier\nkel ton\njo ists\nhorowitz la\nhann aford\nfro mp\nflu tie\nfe tty\neric sson\nduc kett\nash ree\naguero sergiokun\nadam horowitzla\nðŁij¨âĢį ðŁį³\nà¹Ģภŀ\nx ell\nvic t\ntvac tress\nsub vert\nspam mer\nsch ade\noore doo\nnicol son\nmu tag\nman iz\nmal avi\nlilyach ty\nky n\nkra borty\nk ady\nj ons\nhy u\nho he\nher name\nh su\ndu ally\ndru k\ndai kin\ncar digans\nbread winner\nbick i\nab lack\n!!! "@\næĸ ĩ\nâĨ ªï¸ı\nzee music\nyiel d\nx ilin\nto pol\nt fd\nstu mping\nsk f\nsd hc\nsau té\nsab le\npo so\npink man\nph ere\nnorth olt\nmonday night\nmalign aggi\nlo to\nle si\njon sson\nindigenous x\nhin n\ngour ds\nglo vers\ngir ard\nessaou ira\nci ales\nbroadway world\nbe lem\nar shad\nðŁijıðŁı½ ðŁijıðŁı½\nyugo slav\nus fw\nug adi\ntestimoni al\nstar mer\nsleu ths\nsla ving\nshrey as\nshe in\nre drew\npan ag\npah lavi\npa kenham\nneu tering\nnar al\njor i\njan h\nig we\ni sherwood\nharge isa\ngu al\ngandhi jayanti\ncopic marker\nche atham\ncandel aria\nba red\napat ite\nani maniacs\nam phora\nadel anto\nabr live\nyh wh\nwhoo p\nvernis sage\ntrini da\nsugar man\nsil ber\nshir ting\nsande ul\nques ada\nproblem solving\npear le\nnu disco\nni zar\nnando suk\nmit ri\nlife e\nl br\nie ga\nide alistic\nhome away\nho ley\nfree mium\neli pe\ned ler\nd ld\ncinque terre\ncentre ville\ncat rina\nc gy\nc bus\nbeau tician\natx traffic\nani o\namerican history\nag v\n. ðŁĺŃ\né ħ\nâľĮ âľĮâľĮ\nâĸ½ `\ny arm\nwkc dogshow\nvelve teen\ntravel leisure\nthe ists\nrobert carlyle\nrir insider\nrachel notley\nra ashi\nqual it\npre conceived\npar lo\nout live\nnational hot\nmagall anes\nma io\nlend l\nle witt\nkra zy\nkir tland\nir am\nim r\nho bos\nhess le\nfriend shipin\nfar c\nev is\nconfe ctions\ncom atose\nch aga\nbi hu\nbas si\nback strom\nalexand ani\nacti o\nyu pp\nyak ult\nwe work\nw cr\nvi enti\nuk m\nti ge\nthe hunt\nthe edge\nsop hy\nsi sig\nsher bert\npur ged\npu sat\npon ca\npo blac\nob ed\nn any\nmissing persons\nling aa\nlat us\nkay tranada\nir m\nhunter sville\ngl itchy\nfa ia\neve do\nea w\ndoc ile\ndetroit gp\nde cryp\ncarrick fergus\nc vo\nble h\nbd ch\nback links\nade st\nwood chuck\nw ch\nu maga\ntol kien\ntheologi ans\nthe bachelor\nstro mbo\nsk ara\nsi z\nsay re\nra ppin\npast es\nof it\nnutri bullet\nnhs ft\nnapo les\nmu gan\nmc men\nmari bel\nmar ker\nm haw\nle elan\nlauren cohan\nkidney disease\nkell an\nke efer\nkach in\nj ts\nj ins\nili ke\ngo bain\nex tram\ndru pa\ndiver ging\ncove ting\nclark ston\nclann ad\ncel yn\ncarolin ian\ncanad are\ncalibr ating\nbis ley\nb pg\nb marketing\nun cooked\ntumb lr\nst ong\nspi zz\nslow food\nsapp ho\nrich mix\nran aayyub\npor tic\npic ante\npand i\nnat ely\nli sette\nlais sez\nkingsc ross\njoon dal\nj tf\nit weet\nincub ate\nill u\nhor vat\nheen im\ngiant spride\nfr action\ndel in\nclay pool\nbul ous\nbo ka\nbir acial\nbenedic tion\name et\në ĦĪ\nyo del\nwangar atta\nstefan ovic\nsp gh\nsno p\nsm oul\nsk ream\nre iser\nre considering\npr f\nout looks\nmsle asalonga\nmi j\nmateri alise\nlib ation\nk ise\njar din\nho yas\nfor b\nflu shes\ndecentral ised\ncar rer\nbarre tte\nbail ona\nard ley\napol lon\nantic i\nðŁ¤ĺ #\næĹ¥ æľ¬\nÙĬ ا\nuni studios\nunfur led\ntat to\nroller blading\nrecu se\nponty pool\nomi dy\noc cas\nnav es\nmusic ph\nmove over\nmas roor\nick off\nhunter ian\ndum fries\ndermal og\ncy tic\nboy er\nask me\nan ina\naggreg ated\n> .\nðŁĮ¼ ðŁĮ¼\nz omg\nyorkshirec cc\nuri sm\ntogether for\nth av\nsub unit\nsu ture\nschn apps\nrosal ina\nre investment\nplanet shakers\nok t\nnpr music\nmoor lands\nle ff\njr nl\njaf fer\nhel looo\nhe ere\ngre endale\ngho sted\nfo zzy\nex moor\nesthe tician\ned om\ndc w\ncrazy richa\ncham blee\ncatholic church\nby laws\nas ou\narm rest\nam ada\nalessand rac\nðŁķ ¹\nâģ ¿\nzer ian\nune ce\nu bin\nstop ing\nstad ler\nsmi k\nre balance\nraw story\nprabha kar\npath finder\npas h\nmimic ry\nmarsh acollier\nlow life\nini sh\nha pa\ngal legos\nelimin ations\ncoqu elin\ncli max\nchi aki\nboot co\nath iy\nalle tti\nallabou tit\nactive snp\n,, ,,,,\nÙĨ د\nzo ids\nxx y\nwar angal\nroo h\nqu b\npc po\npar x\nnv q\nmt x\nmc sally\nmahar ishi\nke on\nislam ia\ni fic\ng attis\nfabric ator\nf pr\nes am\near tha\ndraw bridge\ndon ie\ndean sgate\ndak h\ncul pa\ncran leigh\ncor fe\nclon eclub\nc panel\nbo p\nbelfast cc\nbarre led\nìĬ ¨\nê ¶\nâĨ ª\nviole ta\ntoic itiesnews\nstat uses\nsol dered\nred bird\nr mf\nov ulation\nno ordinary\nniz ami\nmi gas\nlucas oil\nley enda\nlear ned\nlaser disc\njose on\nj lr\nj har\nid fc\nharro ld\ngestal t\nger m\nd bm\ncou g\ncooking with\ncommun it\ncardin ale\nbu gg\nbook cases\nbol stered\nblended learning\nbir do\nbha dra\natra k\nandre ea\nanast acia\nÑĦоÑĤ ог\nwu b\nwrist watches\nstake over\nspir a\nsexy list\nsa pere\nrhi wbina\nrady o\nquantum computing\npin son\nperson alizing\npath finders\nny y\nnag be\nmat zah\nmargar ine\nknock hill\ninfin ito\nic lei\nic ate\nen slave\ndream coat\ndeath note\nct b\ncre ar\ncity winery\ncic illine\nchristi e\ncat man\ncas kett\nbre guet\nblue hens\napa thetic\nani as\nald ine\nðŁĴĭ @\næĿ±äº ¬\nwen o\nwel ter\nvan ek\nu hhhhh\nto cando\nswi fty\nsuriyaf an\nstu tz\nsch eveningen\nper lis\npaulo coelho\nover hang\nlin ley\nhul kenberg\nhot z\nhe man\ngoogle foredu\nfuninthe sun\nfl travelchat\ndynam ical\ndutch men\ndie ter\ndeton ate\nco gan\nboule h\nbenavide z\nan ek\nx js\nwor sted\nwin mau\nwin ded\nwe wan\nta iz\nstep daughter\nsten cia\nso wed\nsi si\nsalut atorian\nryo bi\nphilat elic\noned ream\nnx tuk\nnamo in\nmar can\nmak kal\nlille hammer\nii da\nguil dhall\ng illy\neuro group\nere bus\ndy isi\ndisturb ingly\ncould be\ncom ex\ncl and\nchat field\ncaf cc\nbiancon eri\nbet z\nbar da\naz os\naeoli an\nac tof\n<< <<<\nzhiv ago\nvirgin ians\nvi vam\nuni brow\nti ques\nsten holme\nstel e\nsoundof music\nrevi v\nresc ind\npoblac ion\noscill ating\noo ol\nom as\nnex on\nnew statesman\nne sham\nmu ffin\nmi ere\nmar rero\nma este\nli ans\nleopard stown\nlakme fashionweek\nkin o\nkav u\nhistory vikings\nhair salon\nh cb\ngaz er\nf out\nex ander\nesp ress\nend times\ndra wer\ndocu mental\ncon geniality\nchi ddy\ncharlie hunnam\ncarlton fc\nbutter finger\nbeach soccer\natp finals\n>> <<\nå¥ Ī\nzam an\nthe hockey\nsad da\nroy alist\nrough ed\nross man\nram parts\npunc tures\npor sha\nperipher als\noutdoor learning\nnight watch\nnct c\nmac lin\nma gher\nloud oun\nlittlebig town\nligh tens\nle quipe\nlake superior\nkawar thal\nif sc\nhit ya\nher iot\ngold key\ngaw ain\neh fcl\nee oc\ndig weed\nde tractors\ndat um\ndami ano\ncho be\nauto complete\napp lenews\nair mail\nac char\nwow zers\nwhit ton\nto rey\nstan ly\nsju bb\nsir leaf\nrusten burg\nron en\nrichmix london\npun it\npeople first\npauly d\npan chami\nno emi\nni pping\nmc devitt\nmayor bowser\nmadison ville\nmac dill\nlevis stadium\nje sper\nhyun da\nhydro thermal\nhed lund\nhadas sah\ngoo dread\ngla res\nge ysers\nfrene tic\nfirm ness\nfilip inof\nfeder ations\nexer tion\ne glin\nd pf\ncreative cloud\ncre me\ncon an\nbro thas\nbill cosby\nb ings\nar mer\nap on\naer os\nðŁı¼ âĢįâĻĤï¸ı\níģ ¬\nâĻ¡âĻ¡ âĻ¡âĻ¡\nwar plane\nte ton\nte star\nstarwarsthe forceawakens\nsignat ory\nsho bha\nshi rer\nrh ône\nrepre hensible\nra es\nper ma\nob stin\nnap ster\nmo ses\nmarime kko\niq ra\ni thome\nhun tin\nhun stanton\nhaleso wen\ngal as\ng ica\ndis repair\nbra vos\nawas see\napol o\nalb ace\nac ls\nðŁļ¨ :\nya q\nwhit ef\nw bf\nstewar tha\nsoap stone\nslo th\nru el\nre mender\npe che\nng v\nmu ggin\nme es\nmaken na\nkhoo b\nit jobs\niphone photography\nhu mus\nhoneymoon ers\ngo st\nge stu\nfran conia\nfill the\nen cen\neli verpool\ndisp rove\ndin ck\ncy ru\nchef jose\ncanad ago\nbom be\naloha friday\nê´ Ģ\nwa chu\nup swing\nun occupied\ntuc kered\ntopo f\nto go\nsh ills\nsch itt\nsch eck\nroyce da\nros lin\npu bl\npost office\nor ga\nopeng l\nom adrid\nnal u\nmini mizes\nmeteor ic\nmaryj blige\nmam y\njump suits\nhe ft\nhahahaha hahahahahaha\ngreat devondays\ngen ki\nfla il\nepicure an\ndan sby\ncoffee break\nchar tist\nbun des\nape hu\nap tn\nap aches\nag ios\na aye\nðŁį ¯\nåĺ ī\ntrent bridge\ntor rie\nthi stime\nric ker\nri bena\npo sses\nple be\nph iri\nni vin\nmike bloomberg\nmeh reen\nmartin sburg\nlu cho\nkapil sibal\nkant or\njoey graceffa\nisol de\nis ks\nim vu\nho be\ngis ela\ngene therapy\nf sx\nearnest ly\ndo by\ndisplay port\ndepos iting\nde mba\nbart lesville\nbald acci\nay az\nat mel\nar ang\nal shon\nal fc\naau w\n:" ""\nĽ ï¸ı\nðŁĩ®ðŁĩ³ ðŁĩ®ðŁĩ³\nÉ Ļ\nzo g\nwhere fore\nweb isode\ntravis barker\nte mi\nsynthe tic\nstinger sup\nspra ins\nspecul ated\nsob scura\nsleep walking\nsd u\nprogram m\nne igh\nmur ata\nmi is\nmerri weather\nmar mel\nlul worth\njack septiceye\ni fo\nhe mo\nguest book\nfú tbol\ndais o\nco sponsor\ncharity miles\ncat son\nbou ton\nbelgi ans\navail ing\nat ou\nat ennis\nਠ¹\ntip toe\nthe biancadelrio\nst d\ns wr\nram pal\npriyan kag\nprett iness\npom mes\nout grow\nny fa\nnov ak\nnam ik\nman is\nlo fi\nlivepd fans\nliveon fox\nle ol\nji ao\nis les\nida hot\nhaverford west\nesk o\nelton john\neamonn holmes\ndau k\nconstric tor\nchoose chicago\nbu mbling\nbau me\nband aged\naw amba\nar it\nal ongs\naf finity\nus ns\ntor rence\nthe kiranbedi\nteessi de\nsh antan\nscra pyard\nrade be\nr hc\nouter space\nnf ca\nnbc chicagofire\nmon zo\nme da\nmary poppins\nk db\njug ando\nindent ured\nhoo ting\nhard shell\nghaz ali\ngal it\nfoo dies\nem mie\nee et\nech of\ndru mpf\ndontdrink anddrive\ndol drums\nd ury\ncalli ope\ncaff è\nbr illo\narte mis\nao sta\nand rus\nalessandrac icc\n! ðŁİ¶\nðĿ Ķ\nz ile\nyu sef\nvivi ane\nvi os\nv lt\nv angeli\nun scrupulous\ntrom pe\nto ph\nthorn bridge\nthe gro\nstra ding\nsoul child\nsav el\nricheli eu\nred ruth\npr illy\npor ing\nour world\non ca\nnerv ousness\nnap h\nmc bryde\nlam e\njuicy j\nj fc\nine fficiency\nigh i\nfemin is\nfarring don\ndublin ers\ndj e\ncli psal\ncassadee pope\nbodhis attva\nbar bies\nback page\nas ab\nanci o\nance stry\nall rounder\nafro futurism\nwin et\nwa ah\ntor um\nta vr\nsuperlig aph\nnau man\nmu stered\nly sis\nkra i\nk las\njac kier\nj hon\nima go\nhorn sea\nhed da\nger bil\ndontmiss out\nconserv ators\nconden sing\ncad well\nbru der\nbra he\naf in\n? "\nâı ª\nti fo\nth ara\nsteam roller\nshane west\nsa a\nrye dale\nrou ts\nrecover able\npunche stown\np bn\nour perfectwedding\nopio ide\non on\nobl iterate\nno kom\nnc n\nnam ara\nna seer\nmart ingu\nmar xists\nlasal lian\nkar ky\nint aglio\nhi u\ngou let\ngabbar singh\nfur fest\nflorida state\neditori al\ncnn news\ncal tex\nbush mills\nblan chard\nbel it\nbab as\nðŁĺĪ ðŁĶ¥\n̶ ̲Ì\nvaul ter\ntokus atsu\nti ddy\nstanis lav\nsports woman\nspor tiva\nsor t\nso cha\nq pac\nprime ira\noverwhel ms\nout lying\nott omans\nnm leg\nnk f\nnelson chamisa\nne gri\nmother jones\nmir na\nlove u\nli gier\nku yt\nin ou\ngroo t\ngreat again\nghaz ni\ngh unt\nfal ken\ner om\ncolon isation\ncb h\nc md\nbra vas\nbougain ville\nbeach day\nav chenko\nar ashi\nap ac\nanton elli\nz its\ntre lle\nt sing\nstom ped\nsky racing\nshould be\nshan ice\nsan ur\nrain nwilson\noutsider art\nore ver\nmer kle\nlon d\nla ith\nkiwi fruit\nkillinge ve\nir shad\ninthe morning\ninternational artist\ngoul art\ngla u\nfin efood\ne ki\ndejec ted\ndead lifts\ncoer cive\ncoder re\ncoal itions\ncli ss\nclass ica\ncab aye\nc dd\nbu hler\nbin dra\nbasto gne\nas sey\nwhite wine\nwater quality\nthe dj\nsolar city\nsir tis\nsin ning\nscar ia\nq rs\npy thon\nportugue se\npick guard\npi pi\npath to\nnoti fs\nnl m\nmo sca\nmin sky\nmat ers\nhot tub\nhoo f\nha ws\ng agan\nfo amy\nfan expo\ne wan\ndeci sively\ncolouri sed\ncash in\ncare r\ncallof duty\nblue mix\nbino che\nbel tane\nbel ding\nbe are\nanim ated\nðŁ¤ ®\nâķ ij\nÅ Ĥ\nxylo phone\nwe tin\nw tw\ntime stamp\nsunny brook\nsu bre\nstal ker\nshe el\nseason s\nrootedin oakland\nprivati ze\no hhhhhh\nmarin as\nla zen\ninsp ite\ngood year\ngod z\nfamily vacation\ndiagon ally\ndel hs\ncru ick\nbecken bauer\nat so\nðŁĺ· ðŁĺ·\nwelo vel\nusarmy reserve\nun surpassed\nu ty\ntor tie\nsu mi\nspringe quinox\nsp roles\nriv onia\none ill\noly nyk\nnot be\nmar g\nkurz weil\nitu al\nhand sworth\nham mond\nhaemorrha ge\ngan gre\nfor zan\nfla ke\nfinanci ers\nfashion illustration\nfal i\ncli mes\ncin q\nchampion s\ncecil thelion\naz ion\nash burton\nðŁĽ °ï¸ı\nyo ffs\nwi ston\nvelo ster\nunite here\nun surprising\nu fos\nton ko\nthe punisher\nsudhir chaudhary\nsh mup\nrou sh\npal lett\nomak ase\nnod ded\nne ste\nmilli e\nloui stom\nlam ine\ni believein\ndun kel\nder r\ncap taining\nbowman ville\nbilli ee\nafric as\nadon na\nãħİ ãħİ\n¡ ¡\nzar alarsson\nuk manufacturing\nthe zone\nsun ity\nsuicidepre ven\nstan n\nst johnam\nslo cum\nre caro\npil ger\npar fitt\nmaur itian\nmarac as\nleon or\nki drobot\njuer gen\njob centre\ninter tidal\nhen shall\ngom usic\nfire blade\ners music\nduck duck\ndi zzle\ndain tree\ncour teney\nconden sate\ncom poses\ncc j\ncbc sports\naki ko\nabsen teeism\nzo on\nwin nick\nthe division\ntalen ted\nsong birds\nsam bit\nsam adhi\nrs x\nrob ic\npu ka\npro tons\npatron ising\nomele ttes\nne hra\nmultil ingu\nlovel an\nko le\nkn au\nkam at\nj ica\ninduc tions\nhiphop music\nheide cker\nequal ities\ncoat bridge\nbre nebrown\nbi gro\napolog ising\nâĺ »\nо ÑĢ\nzat anna\nyour voice\nw co\nub ens\nsuzuk icup\nshif frin\nroch ford\nrob gronkowski\nqueen sugar\nq aida\npre scot\npo plin\nph ool\npenetr ated\nolemiss fb\nny ff\nmu ggs\nmonro eville\nmin oan\nmagical realism\nlovin dublin\nlo ths\nlen exa\nky loren\nkof app\niam amyjackson\nhy ou\nhednes ford\ngreen castle\ngi rish\ngi gaf\nfa as\ndu miny\ndev astate\ndee ley\ncav allo\ncasey neistat\nbey hive\nbas sman\nbabat unde\nbab er\nann ina\nam oo\nzu lia\nun warranted\nspen ny\nre homing\nny university\nneon icotin\nmini mized\nly ing\nlit toral\nlear nin\nke van\ni sto\nhyper trophy\nhoney cutt\ngre ve\ngal van\necra ft\ndol phy\ndar ron\ndal last\ncalcul ates\nby rd\nar jo\nalu shta\nabi y\nठ§\nyand ere\nwoo hooo\nwin oo\nuu ut\ntri plex\ntoad stool\nthe struggleisreal\nsou le\nse ger\nsam buca\nre aver\nra gi\npag ar\nozar k\norchestr ating\no pere\nnew forest\nmo have\nma dan\nlu bin\nlo ha\nlac ie\nkr at\nka elin\nisth mus\nhouse guests\ngo derich\nfu shi\nema w\ndefec tors\nd ö\ncolour way\nblues man\nbac i\namers foort\naly st\nach tung\nðŁIJ «\nãĤ¯ ãĥŃ\nty ger\ntown post\nsunday vibes\nsunday business\nsu goi\nquick enden\npoinci ana\nplay fulness\npin ar\npar p\nnom o\nneuro biology\nmul t\nmu re\nmetro trains\nmaug ham\nmarque ss\nk maq\njin xed\njames martin\nil ink\nedge worth\ndelicious food\nde eps\nbal lets\nbail ar\ntall ying\nsuvarnab humi\nstar sportsindia\nshan klin\nse caucus\nsc alab\nsan che\nrobo calls\nre organizing\npwe de\npim s\nol ate\nnas pa\nnam aste\nn te\nlog is\nkr antz\nheck ling\nhate breed\nhaj duk\nfcv afc\nem iller\near nyour\ne hc\ndiamondre sorts\ncri mp\nci ac\ncar no\nbrun swick\nbir ches\naman ecer\nad s\nâĻ¥ "@\nà´ Ł\nvi on\nthese us\nthe hashtag\nslo van\nsk d\nsab yasachi\nreal m\nrai ola\npam yu\np chs\nout boards\nnieu w\nmoor house\nmid stream\nly onne\nleopardstown rc\nleather jacket\nkha yel\nj st\nim pres\nillini football\nhyper ledger\nhair streak\nf agi\nes x\ndor je\ndo bro\ncopic markers\nche son\nblanc s\nbit trex\nben oit\nbarran quilla\nb dubs\nav ilion\né ļ\nÄģ h\nwido wer\nun called\ntab bouleh\nt tered\nste ps\nsk inning\nse bo\nsar um\nru ka\nross er\nri ves\nreal joey\npo pov\nped alling\nmc call\nman ni\nma ile\ninge sting\nheather ton\nhan ami\nger mania\nfla bber\neste pona\nder ren\nde construct\nbuy backs\nbook end\nbook aday\nblack y\nbengal ur\nbar bz\nay anna\nan tra\nak hen\nah ra\nad disab\nacademic twitter\n... ðŁĺ³\nå Ħ\nÙĬÙĪ Ùħ\nzeal anders\nwv prep\nw bb\nse jal\nrossi gnol\npvt ltd\nprint makers\npict spam\npeter loo\npc v\npark zoo\no go\nmitro vic\nmis i\nlove d\nleaders debate\nki f\nker ato\nju e\nhawk pride\ndu it\ncon currently\nchocol atec\ncalmac ferries\nbu escher\nbon spiel\nbiggle swade\nbelo ve\nal ama\n! ðŁĺĭ\nyo gali\nviol ator\nvalpolic ella\nth ave\ntet bury\nt fo\nsway am\nsati rist\nrichar dg\nraj yas\nquadro phenia\npho resis\npert ama\nmon roe\nmacro economics\nlymp he\nle der\njam bi\nhealthe quity\nhatec rime\ngre as\ngil do\nfre m\nfrance sa\nfar kas\ndrug discovery\ndeepp urple\ndeco rex\nbride groom\nbodleian libs\nben es\nbapti ze\nanomal ous\nalle mand\na design\nä¸ Ĭ\nvm fa\ntre von\ntopp ling\ntay ga\nsteff an\nssk roughriders\nsal maan\nrc w\nrc m\npolice brutality\npicker ington\nor ad\nmaxim mag\nm go\nlat os\nlam pe\nkhalee j\nka an\nin safi\nick le\nge in\nfian akis\nff ootball\nexhu med\nemily deschanel\nemb ellish\ne br\ncro fts\nbis sau\nbeaver townbeer\nbe ggs\naltar piece\nal sop\nak kad\nab be\naak ash\n@ :\nðŁĮ Ń\nðŁĩºðŁĩ¸ .\nzer i\nyeh rish\nuefa euro\nstar nes\nsofthe week\nsig i\nsiem reap\nrou ille\nrocke teer\nric ko\nperse id\npac io\nol tl\nmonopo lies\nmo ak\nmill on\nmicro controller\nlu anda\nlook oftheday\nl nb\nk adam\njan ko\nidol m\nich or\nhul ton\nhon eye\nflori dag\nflor issant\nex terminator\ndu puis\ndin fo\nde sco\ncran bourne\ncon cho\nch m\ncal kins\nber tel\naw u\nal una\naim er\nðŁĺĬ ðŁĴĸ\nðŁĮ¹ðŁĮ¹ ðŁĮ¹ðŁĮ¹\nðŁ¦ Ĩ\nãģ¦ãĤĭãĤ ĵãģ\nvi ken\ntwitter carclub\ntwit pic\ntrainee ship\ntis one\ntal en\nsh oma\nsar s\nremo percussion\none ok\non ville\nne whi\nmuntin lupa\nkhe de\njack a\nja se\nis nt\nigu al\nhrvat ska\ngut tering\nfre et\nfoun dry\nfied ler\nfang irl\ndu pdates\ndish patani\nco za\nchu seok\nbraunschwe ig\nbo ole\nban os\nare zzo\nap so\nali p\næĿ±äº ¬\nun satisfied\ntra wl\ntom oko\ntam blyn\nsto we\npuff ball\nn ays\nmarsh alling\nmarqu ardt\nleti zia\nla chie\nl vt\nkid naps\nke em\nfur la\nf uring\neli ghts\ndan aper\nbear s\nbay ani\nball state\nazadi march\naldubeb forlove\nðŁ¤ĺ ðŁ¤ĺðŁ¤ĺ\nwau wat\nulaan baatar\nto eing\nthirl wall\nthen ick\nthe week\nthe queen\nspe k\nsham anic\nres life\nnuf field\nmag lia\nku jo\nkof fie\nkat amari\njan o\nja j\nis ches\nhu fc\nhai b\ngu ice\nge man\nfe tte\nedch atie\ndulci mer\ncondi viso\ncon dor\nbuck fast\nblo o\nbi sexuality\nalar con\nðŁĺį ðŁĻı\nðŁįĵ ðŁįĵ\nìĺ¹ ìĦ±ìļ°\në¹Ħ íĪ¬\nver mont\nun an\nto kai\nte uk\nsports medicine\nschul ze\nsa hir\nroy alo\nque ta\npit er\npir a\npd g\nound table\nnor rie\nmal oof\nm tw\nli zer\nki yom\nji p\nits just\nhas well\ngy le\ngu ar\nent rees\ndd f\ncarto grapher\nbor ger\nbin ns\napple baum\nali ste\naer in\nab ile\nðŁĺ±ðŁĺ± ðŁĺ±ðŁĺ±\nym all\nwol k\nvon ne\nvivi ana\nthero se\nteam spirit\nsto at\nskeleton clique\npn co\npi gging\non trent\no za\nmar chi\nmanc unian\njum mah\ni gel\nhier onymus\nfer rie\nel ston\ne per\ndo ig\nday dreams\ncomi endo\nallu sirish\nade p\n¨ ¨\nyan del\nvi shak\ntogetherwe can\ntel ing\ntann ery\nseaf air\nscho enberg\nre appear\nr hen\nout bursts\nor han\nmotor city\nmans field\nlilly pulitzer\nlg u\nle derer\nfun es\nfle mming\ndis assembled\nda stur\ncar ranza\ncam isa\nbush land\nbolly woo\nbick er\nanae mia\nan jum\nal war\nðŁĺĢ @\nìĬĪíį¼ 주ëĭĪ\nãĥ¼ãĤ º\nà ¹\nwi ven\nwfa achannel\nw pr\nvol ition\nvi en\ntw ani\ntf n\nsupran ational\nstre ak\nstar oftheday\nsr c\nsheikh hasina\nroger s\nred angel\nqueanbey an\nqu as\npenn ants\npeace fulness\nover passes\nmg d\nku wait\nko hin\nhu ber\nhead strong\ngr b\ngift shop\nfloo dgates\ndai hatsu\ncryo gen\ncompli ed\name h\nðŁĴļ ðŁĴľ\nwelsh pool\nvegas baby\nv tr\ntri sk\ntall grass\nsl soccer\nsho veled\nse date\nschool yard\nsac p\nsa chem\nre ville\nrath lin\npublic is\np sk\nmis understand\nmechan ized\nlater ra\nkhatta b\nkemp ton\nke rem\nkaran ka\njur is\njk live\nhin cap\nha ze\nguitar player\ngran ita\ngab bert\ng sx\nesper ando\nero b\ndom ina\ndi q\ndanai gurira\ncapital ise\nbook plate\nbi ka\naus veng\narun vijay\nanec do\n*__ _*\nðŁĺľ )\nðŁĴį ðŁĴį\nðŁĮŁ @\nï£ ¿\nå® ®\nâĿ¤ï¸ı ðŁĴĽðŁĴļ\nâĿ¤ ðŁĴķ\nwren ches\nw out\nulla pool\ntiger day\nstan more\nshop keepers\nsacramento proud\nnam or\nmaras chino\nmammal watching\nma wa\nma af\nlar isa\nkab i\njennifer beals\nirish research\nidoli ze\nhtt yd\nhigh mark\nga ve\nfrequ ented\nec j\ndogg one\ndic ke\nde compress\ndab ba\ndab a\ncomedy fest\nco production\nch igi\ncent relink\nbr û\nartsand crafts\nÎ ½\nvaledic tory\nten do\nsevery one\nprodi gious\npri stina\npathophy siology\npa ho\nneh wal\nma estro\nlondon life\nlad die\nl mr\nky aw\ninter milan\nhel ier\ngood job\nfu mo\nfenty beauty\ned s\ndon ghyun\nce f\nbli ghted\nas sal\nwc g\nwaron women\nvon d\ntwee ks\ntoyn bee\nthi ep\nsteacher sa\nsaw yers\nsau dio\nroche fort\nquand ary\npu be\npenetr ates\nouro boros\no stia\nma hersh\njim iny\nin star\nhead lock\nhe v\ngoal posts\ngeor gie\nfle d\nfaun tleroy\net oo\ndanaper ino\ncastle field\nbuil dyour\nbar gained\nay eeee\nasiap rince\narunvijay no\napi ary\nam peg\nðŁļ ®\nx un\nwh ig\nve vo\nsquare ly\nsqu et\nspar ingly\npas cag\nolympi akos\nob and\nmiddlew ich\nkottay am\ninar ow\nillu st\nhi rise\nhead hunter\nhall marks\ngla x\ngirlswho lift\nfla ppers\nel vish\ncryptocurrency news\nci bul\ncar wyn\nautom ation\nato dd\nand still\naga sta\nà¤Ĥ _\nwhat areyou\nvoyag eur\nv vd\nv awa\nufos facts\nstra ddling\nsnap chatting\nsi pper\nsch ut\nra wa\npower lines\nplit vice\nphar r\none family\nmichelle malkin\nme ze\nme dec\nmc daid\nman tova\nm ws\nles miserables\nlav anya\nk assie\ninter lock\nic ef\nhi fi\nfuj ita\nfo on\ne gen\ndram atics\ncraf ton\nblack pink\nberg dorf\nbeer men\naudi ence\napp ic\nant al\nãģĵãĤĮèģ´ãģĦ ãģ¦ãĤĭãĤĵãģ\nãģĵãĤĮèģ´ãģĦãģ¦ãĤĭãĤĵãģ łãģĭãĤī\nwomen swrestling\nwag g\nwa ite\nvienti ane\ntu bri\ntru ong\nthrow away\nswift lang\nsab ino\nre acquainted\nor ff\nop us\nok azaki\nniam h\nmu ga\nmo yet\nmlb theshow\nmag no\nmad max\nhay fever\ngali fianakis\nfor president\nfoot ings\nfaiz al\nesp ada\ner ase\nencro aching\neleon ora\ndun o\ndre ws\ndate just\ncom rie\ncause way\ncaf tan\nbbc wales\nband t\nba day\nant el\nani on\nam co\n... ðŁĺĤðŁĺĤðŁĺĤ\nðŁĺĤ ðŁĺī\nðŁijĮ âĿ¤\nâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ\nye t\nwell spring\nwander ing\nvisit nepal\nunder line\nspe terson\nso cean\nservice man\nro es\nra yo\nprud hoe\npi aggio\np wp\nout played\nou h\nny dd\nnhl pa\nn zi\nmore ls\nmol le\nmasa ki\nmaj id\nlibrar yof\nlegui zamo\nlarry hogan\nka hi\nindu bai\nhun tly\nho ki\nharbour side\nha shing\ngrain ne\nfor ties\nell ar\ndoctors strike\ncle o\ncap ito\nasser ted\nðŁĴĭ ðŁĴķ\nãĤ·ãĥ £\nyo suke\nu houston\nsue ños\nspo kan\nsi moes\nren contre\nre installed\nre authorization\npress conference\npo logy\npl zzz\npitts ford\nphono graph\nover reach\nnun head\nnil joshi\nmoon beam\nmay ur\nlugan sk\nle hi\njag dish\nilo ves\nh mn\ngriff o\ngold link\nfresh water\ne woks\nchand ran\ncasi mir\ncannes filmfestival\nbush man\nbir ther\nball inger\nb df\nac ke\nðŁıĬ âĢįâĻĢï¸ı\nyan is\nwho are\nver dugo\nthatawkward moment\nsolic itation\nshine on\nsg n\nsegu ir\nscience daily\nsau dade\nry ley\nre traction\nr vr\nom u\no sam\nneo pets\nmarlies live\nmalt by\nly si\nlisam ur\nle ats\nhay nes\nhat chie\nham ming\ngold star\nflabber ga\nfinkel stein\ne mobility\ndevil may\ndag ens\ncen te\nðŁĺİ ðŁĺİðŁĺİðŁĺİ\nyyc food\nven use\ntv nz\nstrati fication\nste pan\nsamar as\nrec t\nre te\nre conditioned\npres sclub\nplant based\np has\non ata\noko cha\nnfu tweets\nnatural stone\nmil ka\nmetabol ites\nmega star\nmahi ma\nlums den\nlen sing\nkool aid\ninsp irit\nim morality\nhor nady\nheck led\nfrees avchenko\nfle uri\nfi annaf\nfab re\ndre her\nde acon\ndam ar\ncrewe alex\ncosmetic surgery\ncom en\ncham bre\ncard board\nb sh\nap layer\nak awa\nðŁĴĽ ðŁĴĻ\nâŀ Ļ\nà¸Ń à¸Ń\nà¸ķ à¹Ĥ\nzac atec\nwater jet\nun itary\ntri athlon\nther oom\nta ze\nsu dah\nston ington\nsta sh\nsp ano\nshi atsu\nshak u\nsen den\npa izo\nneti zen\nnar ok\nmull en\nle manoir\nlali que\nl rp\nin fest\nh day\ngaiag auden\nevapor ative\nen ver\ndu tty\ndomest ics\nc mpd\nbook trust\nbanne ker\nbab ak\nar j\nal anya\n.. *\nwig gum\nwarran ties\nwan o\ntv one\ntin type\nsy ah\nstjohnam bulance\nshi ko\non live\nmoon landing\nlegg i\nlatenight seth\nla vas\njuvent ud\nhart ley\ngra sped\nge ren\ngales burg\nfa sts\nero ica\ndavincis demons\nd fg\ncoffe eco\ncan do\nbuy ing\nbar ang\nac app\n[ :\nðŁij º\nvale ant\nupri ght\nthel p\nsubi aco\nsom ni\nshir k\nsdc india\nsal vos\nsag u\nsad dlers\nrecur sive\npu w\npetro s\nper shore\nou dna\noro chi\nopioide pidemic\nnbat witter\nnathan iel\nmun chin\nmounta inde\nmiscre ants\nmis communication\nmbar ara\nlo rela\nliberalismisamental disorder\nle andra\nkentucky mbb\nje tt\njav el\niri descence\nindi av\nim potent\nhend ri\ngeth se\ndesper ado\ncra dio\ncr x\ncol nago\ncla vier\ncadbury uk\nc sb\name in\nâĿ¤ï¸ı ,\nyoga everydamnday\nwin with\nwest wood\nw eri\nw ce\nun sound\nu wo\ntimor leste\ntat ar\nstreet sof\nstrato spheric\nss man\nspre sent\nspit ze\nsoli man\nsi pped\nsau li\npterodac tyl\nnc u\nnash villec\nmariecuri euk\nmani acal\nm ni\nlove bug\nlength ening\nkw aku\nkud low\nkpop starz\nken yon\nji ve\nhe gan\ngreyhoun dracing\ngo broncos\nformul ating\nfoot balla\nfoodand drink\nflip the\ne stevez\ndi she\nde meaning\ncapy bara\nblu emountains\nble ek\nbilliee ilish\nbi partisanship\naz ania\narmy bowl\na hoe\nâı ±\nwild west\nwhit eface\nver ve\nsung jong\nsunday roast\nsixx am\nshar lene\nshame fully\nse dated\nra pinoe\nr dra\nquo ted\npost paid\nous ins\nobscen ity\nmoust aches\nmidat lantic\nmal achy\nlee man\nla gan\nkot ler\njalap enos\nhyun bin\nhing is\ngi gg\ngam s\ngaiagauden zi\nfair weather\nexcep ted\nduck hunting\ndo vi\nden e\nde my\ncork cityfc\nchem bur\nche ons\nbokuno heroacademia\nbiom ime\nback es\nasu g\narmou ries\nðŁİ¥ ðŁİ¬\nðŁİ ŀï¸ı\nëıĻ ë°©\nãħĭãħĭãħĭãħĭ ãħĭãħĭãħĭãħĭ\nव र\nym ed\nwol laston\nweare family\nunsigne dartist\ntravel tip\ntask master\nsuccu mbs\nstimu lants\nst luke\nsi vas\nshu u\ns ve\non sea\no orah\nlo lli\nlex mark\nke ham\nkar man\njr f\njol ts\niu lia\nhai le\ngar land\nflow y\nfant agraphics\nfan sof\nexolu xion\nex el\nespnc fb\ndr iller\ndogmeat trade\nconsen sual\ncodw wii\nclam shell\nbou illon\nbosh off\nbe for\nar jona\nampli fies\nagric ola\nab ora\nðŁIJ ¿\nwith purpose\ntom oe\nto bar\ntend rils\nslam mer\nrichmond hill\npur ser\npo el\nnuer burgring\nmesser schmitt\nmant le\nm vd\nkirk stall\nkey shawn\nke tel\ninthe uk\nho ppen\ngod parents\ngn ano\ng itta\ng dg\nfle amarket\nfi field\ndown state\ndown sides\nde contamination\ndae woo\nch romeo\nbusine sse\nbritish tennis\nbat anes\navoce t\nalarm ingly\nal ann\nðŁĴĭ âĿ¤\nwight man\nwho ami\nun appreciated\ntou bia\ntf si\nterr an\nta ven\nstol tz\nshemar moore\nsharing iscaring\nring ling\nre gi\npune et\nphi fe\npar ables\npandi raj\nmun de\nmo ke\nmetat ron\ninver sions\nic ap\nha plo\nfu uu\nf ounds\nel gato\ndesi re\nd hal\ncoraz ones\ncol y\nbush ra\nbron ycon\nblack sheep\nbeam iller\nbadas steachersa\naw ang\narch digest\nad at\nÌ¶Ì²Ì ¥\nwhati m\nwas i\nunder performing\nto tt\nth ile\nst anger\nrod stewart\npulp fiction\npolar bear\npear ld\npan ics\nop s\nnord see\nnoo bde\nni mes\nne sa\nnas sau\nmin ette\nmar maris\nlevit town\nleng then\nkaz iranga\nk hid\njuda ica\nic hat\ngo canadago\ngen sler\nfunny bones\ndyisi sit\ndress making\ndj ur\ndevi ate\ncu id\ncrustace an\ncrank shaft\nco bie\nbar one\nb hl\naven kat\nass ate\nac ab\nà¹ģภļ\nÃ¥ s\ny ath\nwaynes ville\nvalley wx\nval ens\ntouri sty\nsuk hum\nsplendid ly\nsi oning\nshiv anna\nser ine\nsar ahe\nsamar inda\nsab ar\nry ano\nring master\nridg eland\nrat cliff\npo gues\noi shi\nne gga\nnam en\nmur ree\nmo omin\nmil ia\nlin um\nkit tie\nki x\ni dent\ng ä\nffun ded\nest ars\nelvi shistory\neco sport\ndress maker\ndc tv\ncostu med\ncon ing\nchi vas\nbin aries\nbaj payee\n! ðŁĺľ\nyel love\nwil s\nwhitt ingham\nsky rim\nreal kevin\nread allaboutit\nr cl\npun o\npar li\nna ghan\nmun e\nmatchroom boxing\nla sd\nkal os\nk ring\nind ye\nhero esof\nham ber\ngg t\nfac ey\ndiab lo\nct vedmonton\nbre de\nbla vat\nbe ssy\nattenti vely\nas ot\naristo crats\nane ws\nðŁĺįðŁĺĺ âĿ¤\ná´ Ľ\nyo ps\nwom ad\nvirgil abloh\nvi vel\nvat raffic\nva art\ntoly mpus\nthe ip\ntas so\nsn ak\nskill india\nsie ben\nrod ham\npr ata\npo ors\npic kn\nneed s\nmx px\nll er\nle ers\nlatic sofficial\nla pointe\nkago shima\nk mb\nju anes\nit our\nhe da\nha kka\ngu gu\ngrowing up\ngold standard\nfen ce\nden r\ncur tesy\ncor ban\nbeh rens\nam isom\nair drops\n- .\nz ville\nyouknow youre\nvi dor\ntsaww assen\nthiswas cle\nsuni elv\nsunielv shetty\nsummer stage\nspark ler\nsise puede\nsag esse\np mk\nnj c\nmephi sto\nlam our\nkg bt\nkaw as\njets ons\nis berg\nhor muz\ngif ted\nfit spiration\nevapor ate\nel ain\ndou se\nchic hen\ncaptiv ates\nbeleagu ered\nas ms\nacup unc\na ec\n@ ____\nut tam\nun wise\ntri xie\ntag g\nstyle awards\nsati e\nsap na\nsan gram\nsam pras\nray donovan\nra zi\npt fe\npir ata\nnew day\nn rd\nmu schamp\nma user\nlamb skin\nker by\niphone only\nilustr acion\nham o\nglo ster\ngi ddings\nful ford\nfilms video\nfe en\ndri p\ncred iting\nclipstudiop aint\ncharles worth\nblock b\nbir ge\nbac o\naz ia\nay ian\narrow filmsvideo\nam w\nac adie\nwith my\nus bc\nto z\nthre l\nrock hold\nrob ing\nreha b\npu yat\npillow case\nperry sburg\nnur tures\nnormali zing\nnee ley\nne eta\nmon ona\nmal m\nm by\nllan de\nli pinski\nlai ki\nkris jenner\nkon ga\nkar ren\nitalian wine\ngu us\nex ci\nema zing\nd ya\nbuo yed\nbick ering\nbette midler\nbed lington\nban ister\nban a\nation tv\nagny aath\n- &\nðŁĻĪ âĿ¤ï¸ı\nãĥĿ ãĥ¼ãĥĪ\nãĥ Ķ\ntip ton\ntal ert\nswitched atbirth\nsu tt\nsp ren\nra sp\nq an\npin eville\npiccad illy\npf hof\nover bought\nnor ma\nnic helle\nnavig ates\nmorbi dly\nmaha devan\nll r\nhop wood\nen field\nem l\ndr yeye\ndee wana\ncar pio\nbiom ole\nbhar ara\nart sc\narre dondo\nac costed\n@ )\nz ini\nwee eee\nunion ville\nted die\nst asis\nspirit u\nradiof ree\npetro glyphs\noliver i\nnaj jar\nmi jn\nmammam ia\nmaid ana\njama icans\nig ang\nife anyi\nic hert\nfore play\nfergu sson\netsy aaa\nde test\nde ke\ncor tisone\nbon bons\nbo tero\nbajpayee manoj\nb te\nade es\nðŁĴ¥ ðŁĶ¥\nðŁıħ ðŁıħ\nwilder ness\ntabletop gaming\nt bbt\nsubmer ge\nso dal\nsi ah\nsexi est\nsen n\nrober tw\nrit on\npro jo\npra ther\novi ya\noj eda\noc ke\nnar u\nmore no\nmor nay\nmarshall town\nkil meade\nja hr\nindepend encia\nindef ati\nin sel\nimagin ary\nhalloween costume\ngeorgi ou\nedu ardo\neast view\ndefen sor\nde joria\nclai rec\nby erly\nat c\nanore xic\nannex ed\nai aa\nï¸ıâĥ£ !\nï s\nww at\nwupper tal\nwheel set\ntru ecol\ntor tas\ntion news\nthre sh\nte vent\nswamin arayan\nrep elling\nreal ron\nre prints\nre directed\nquare sma\npen ne\npat en\nmur k\nmetho dman\nmalaysi a\nlov sk\nlo ir\nkill ington\nke u\nkat en\njo ven\njanu ari\nin law\nhol ts\ngun dam\ngled hill\ngarof alo\nfree thinker\nfather land\nfashion history\nfall acies\nee sh\ndom sherwood\ndesi ring\ncm ha\nbrew fest\nbreak ups\nbig game\nbatman day\nan sah\nalpha bet\n, <\nðŁĺĤðŁĺĤðŁĺĤ @\nâľĮï¸ı @\nwhit est\nwhang anui\nus is\ntsuki ji\nthom ash\nthe toughest\nsummer in\nsing tel\nsimon coveney\nsidd hi\nsi yah\nsen ile\nque remos\npresu mption\npair c\nna at\nmc cann\nmaro oned\nmah alia\nlon ga\nja sta\nj ata\nill hu\nhack aday\ngi zz\nga em\nfin ny\nfault less\nfar rah\nali abbas\nðŁį ľ\nðŁĮ¹ âĿ¤ï¸ı\nÚ© ÛĮ\nس ÙĦ\nzeph aniah\nw dm\nvilla real\nsydney roosters\npap illion\nne had\nmyster i\nmult itudes\nmil s\nmate us\nloughe ed\nle var\nkenny wood\nhouse cat\nham mons\ngw f\ngr ic\ngl ancing\nfrighten ingly\nfree bird\nfetty wap\nfather less\nfai ro\nespn fantasy\ndou gie\nco sho\nchan cel\ncardo so\nbrooks brothers\nanadar ko\nâĦ ĥ\nÐ ±\nzu id\nverand ah\nupan ish\nup north\ntr ona\nsm sports\nskag way\nsigh ed\nshaf fir\nsab ie\nry ang\nre clusive\npyth agoras\npete gui\nnonchal ant\nmud slides\nmor ant\nmclu han\nman school\nku gel\nkirk by\nka ali\njaw ed\nis f\nhelen sburgh\nh series\nfu dd\nfan army\nex claimed\nenter gy\ndyisisit manila\ndi at\ncru se\ncar m\nbreak neck\nbilingu alism\nalways be\naki ba\nad abra\nðŁĺ£ ðŁĺ£\nðŁıĢ ðŁĶ¥\nðĿĹ ¶\nâĸª ï¸İ\nye ducation\nwatche spn\ntrampol ining\ntay side\nso wa\nsh allow\nsema phore\nq ew\nproud teacher\nperry man\nonom ato\nnether realm\nmun y\nmetamor phic\nman tua\nlegg era\nle web\nle ssing\nle per\nke well\njw st\nje el\ngo beach\nfro gger\nforever orange\nedu topia\nchippe was\nc mh\nbrexit party\nbiz et\nbeat king\naw n\nasap h\nanal yser\nade sina\n?! ?!?!?\nðŁ¦ Ģ\nëıĻë°© ìĭł\nÙĥ ÙĦ\nyork dale\nwey burn\nwex ford\nul loa\nu sip\ntre ed\nsx onfox\nsham it\nsephi roth\nsch in\nproper t\nmo ats\njain ism\nillhu emin\nhirsch feld\nemaci ated\neddie izzard\ndemysti fy\ndeck ard\nbush ey\nbuff ers\nappend ic\nant artica\nadi k\nyu kari\nwest shore\nwat sky\nw fs\nvac ature\nsuper moto\nste pp\nroller ball\nroc nation\nran elagh\nr md\nprofessor green\nproduc tively\nperson als\npa jar\nnov onor\nnn n\nni emi\nnew salert\nmal ani\nma sco\nlo petegui\njersey ci\ninj awarrior\ni aapa\ngg p\ndra c\ncomm is\ncoffee with\nchi hiro\ncc ss\nbull finch\nblay ney\naul kner\nar ber\nab dl\nzip car\nyu shin\nwin kel\nvo wing\nune n\nthe ory\nt pc\nt adi\nsho witz\nsherry rehman\nser ta\nreci eving\nr de\nq rt\npollin ated\npear lv\npe th\noff ood\nnorth western\nni der\nman dem\nkennebunk port\nkeep britain\njal alabad\nhowi ed\nfolk tales\nes ra\ndil worth\nchess ington\ncalab ash\nbr k\nbal as\nato z\namaz one\nadam saleh\n\' !!!\nðŁĩ¬ðŁĩ ·\nëĵ ¤\nyl ing\nwyn ter\nwill cox\nvi vere\nvalentine day\ntranspon der\ntitch marsh\ntheavett bros\nsu ce\nski doo\nsk oo\nros ine\nrese da\nperfu med\nout lived\nour ces\none world\nnu dist\nmcr museum\nlake side\nkaneo he\njustice orelse\ninstant aneous\nin co\nhungar oring\ngri moire\ngreat reads\nghastly gastronomy\nger n\nfun fun\nfu c\nfoodblogger ai\ndur ning\ndatav isu\ncri mbo\nclinical trial\ncho tels\ncar berry\nbou dre\nbil ston\nbiblio the\nbab ie\nay aka\nas core\nadele ke\nðŁĶĿ ðŁĶĿ\nðŁı¾ âĢįâĻĢï¸ı\nwe ge\nwashten aw\nwal kon\nw ads\nvic enews\nv hs\nun shak\nthisismy crew\nter adata\ntan door\nsw kly\nstol len\nsno ke\nsni ffs\nshali mar\nseri us\nsare back\nsanc tified\nres ch\npseudo science\nphilly now\nmatthe ws\nmanag ua\nlaun dered\nhou lihan\nhou l\nhou ghton\nhot eliers\nhoo ley\ngo back\nero gers\nelan eri\ne chan\ndur ance\ndj sbu\ndish washers\ndial er\nclever bot\nben ner\nbas sen\nache be\n? ðŁĺī\nãģŃ ãģ£\nãģĵãĤĮèģ´ãģĦãģ¦ãĤĭãĤĵãģłãģĭãĤī ãģŃãģ£\nد ÙĬ\nw bez\nupperdeck sports\nuk storm\ntrun king\nthree uk\ntho ward\nsolo astarwarsstory\nse gam\nschul ler\nsayye shaa\nreposit ories\nram bling\nr aro\nprayfor us\npoli sher\np mk\nown the\nmel drum\nkimon os\nintern als\nine pt\nhuman ely\ngar ters\ng nev\nfug ly\nfor mo\ndispo sing\ncharlat an\ncerebral palsy\nbou ton\nbhutan ese\nassau lt\naran ch\nam hara\nake a\nac cor\n;- ))\nðŁĴİ ðŁĴİ\nze alot\nyr insider\nxrp thestandard\nwend ell\ntram ple\ntour o\ntaver nier\nta fel\nsolic itations\nsh yne\nsf b\nscrib blen\ns brew\nren ch\nra dek\npla its\nonline learning\none less\none ers\nni xa\nneo sho\nmor d\nmo bbin\nmd h\nmb h\nman tic\nma dara\nkof ta\nig naz\nhooten anny\ngl eni\nge tin\nfo ck\nevin rude\nen code\nemanu elaneri\nchon buri\nblind side\nbill yidol\nank ur\naaaaa and\nðŁĴIJðŁĴIJ ðŁĴIJ\nðŁİ °\nม าà¸\nà° ¦\nx xiv\nwri ggle\nwp moy\nvi ani\nve to\ntheme forest\nsuper fluous\nselfe steem\nse lem\nru ffed\nra kul\nptole my\npro fil\nold london\nnewh all\nme isner\nmadam secretary\nlu me\nled ger\nke ir\nhisto gram\nhear say\nhay stacks\ngovernor perry\ngor ry\nghe tt\ngate wood\nfandom memories\neaster bunny\ndouble day\ndegre es\ndecemb erists\nchal font\nbus way\nbase ments\nb ick\nah k\nìĦ¸ íĽĪ\nåĩ º\nzakhar ova\nwh ist\nwen urses\nvicky kaushal\ntwor g\ntransi stors\nthak kar\nt vet\nt no\nsouth wick\nrach id\nr la\npropag andi\npoli sci\npl tworg\noh are\nnov gorod\nneuschwan stein\nnano science\nman nn\nhyun seung\ngandol fini\ng adventures\ndescend ents\nde ta\nborde aux\nbo se\nbeck on\nali dad\nalar ic\nå°ij 女\nym atic\nyav apai\nwhit bread\nwater keeper\ntuuk ka\nti da\nthe greatest\ntamar ack\nsto well\nsky sport\nring gold\nra bacher\nr pe\nponti us\npc dd\noni st\nmince meat\nmattb ellamy\nmar gera\nmar cio\nmaite oficial\nmaach oops\nlifestyle blogger\nlake erie\nkent ridge\nhomestead miami\ngra phia\ngolf news\nfur row\nen tech\ne stos\ne gu\nch imp\ncat rion\nbl ings\nbig fish\nb ava\narmen ian\namazon ite\nal tra\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥\nà¹Ģภķ\nà¸Ĥ à¸Ńà¸ĩ\nz aka\nwarring ah\nu mo\ntough en\nsta si\nsque aking\nsouth coast\nsil at\nsar dis\nsan te\nrichar diii\nr mcf\npunk rock\nnas sr\nn once\nmould ings\nmegali thic\nl ann\nkamenri der\ngetin my\nfl aco\nfab e\nema e\ndwi gh\ndeduc t\ncor vo\nch ato\narche ologists\nar ys\nappropri ateness\nanu j\nalo is\nadrian peterson\nãĥĥãĥ Ī\nvandy ke\ntoho shinki\ntai res\nsundar am\nsal ton\nri hann\npro cor\nnorm ative\nly kke\nlisamur kowski\nligu ori\nleg oland\nkwan kwas\nkar lovic\nkal man\ninsu lator\nhorse manship\nharri ott\net d\nery thr\ner ae\ndg son\ndeple ting\nden son\nchen le\ncand ic\nca thra\nbal u\nart institu\name deo\n\' ?"\nðŁĺį ðŁĺĺðŁĺĺ\nðŁĶ Ľ\nðŁIJ Ħ\nyog endra\nye ap\ntu lia\ntrap music\nthu ram\nthom a\nsling back\nrecuer dos\nram pur\npunch bowl\nprag matism\nphalaen opsis\nper pi\nok k\nna iry\nmah langu\nm ht\nk lip\nhumber college\nhu gues\nhal pin\nhal fling\ngri my\ngovernor va\ngal go\nfol ger\nfla sks\nfirstal ert\nfab ius\nei sen\nchi ppa\ncam elli\nbu sia\nbag g\nba star\namb ard\naliabbas zafar\nzim ba\nyou like\nwych wood\nu ac\nthe summit\nsv d\nshi vak\nre publics\nre assess\npro strate\npray forthe\npal it\noo td\nonmyo ji\nnam ma\nmond ello\nmo xy\nm ld\nlov ich\nlom achenko\nlia oning\nle te\nkas ingh\nju py\ningol stadt\nhipp ie\ngrim lock\ngo wolves\ngallau det\nfernand ina\nfac ile\ned as\ncre sta\ncontrol lable\nblock head\nbel size\nbel ind\nb ck\nappendic itis\nal locates\nyu uki\nvandy boys\nvag anza\nthom a\nsy f\nsy ahu\nste pup\nsp ens\nsch moo\nscep ter\nrho s\npyn chon\npsycho therapist\nphilli e\no ii\nnehad hu\nn sdcindia\nlu h\nlo li\nke c\ninve gas\nhen ness\ngun k\ngin ous\nfit fluential\nen p\nek ko\ndr john\ndd p\ncas ade\ncalder wood\nbur kett\nbuck aroo\nbri gan\nbon ez\naccade mia\nðŁĴģ ðŁı¼âĢįâĻĢï¸ı\nwha aaaa\nwh of\nvolup tuous\nup ra\ntu lo\ntrol lope\ntri ano\ntemp el\nsyn tagma\nsw ays\nstone wall\nstar kid\nserie atim\nsay an\ns xt\nridge view\nreflexi on\npul sing\npoon ch\npearlv puri\non du\nom m\nofficial randl\nnay arit\nmur taza\nmin it\nl ns\nkn elt\nhome pod\nfoster thepeople\ne bf\nder bys\ncyber war\nchal king\nbli gh\nbambooz led\nayo ko\nakzon obel\nاÙĦس عÙĪد\nwh ims\nvolk sk\ntitic aca\ntim perley\nspre ss\nsmu g\nrhi annon\npizz azz\npile ated\npercep tual\nmu shi\nmix uk\nlori en\nkin sley\nindie pop\nhomer uns\nhippo crates\ngre b\ngold coast\nfresno state\ndeli ri\ncoffee maker\nclover leaf\nbr ouk\nbo ther\nam ati\nal annah\nachieve men\naccom plices\nãĥĿãĥ¼ãĥĪ ãĥ¬\nze tec\nzare k\nxenoblade chronicles\nwise guy\nwi ddicombe\nwan khede\nvitri ol\nvin daloo\nty tlive\nte dd\nshare acoke\nsemb ly\nsd h\nsay it\nsan kar\nres ver\nplace sto\nphan euf\npel ton\nno thanks\nnichol l\nnathan ael\nman gano\nleu ko\ninfuri ates\nhypnoti ze\nfrustr ates\nextric ation\nend points\ne sau\ndu dek\ndeer foot\ncomprehen sively\ncandi de\ncamp den\nbm h\nbian che\nbab ies\nassembly member\nany e\né ¹\nzel en\nwednesday want\ntexom awx\nsundeep kishan\nsuc c\nsix words\nsergior amos\nrugby canada\nruck ers\npol ys\nplugge din\nom ura\nnic eville\nmin koff\nmeow th\nkul lu\njet ski\nim ca\nher oku\nhash emi\ngrammar ly\nfier cen\nfa him\nepp group\ndogsare family\nd swt\ncr ittenden\nblack son\nautopha gy\naler tness\nval voline\ntom lin\nthe agu\nsilver smith\nshou ston\nshor ties\nro mina\nqu ina\npub quiz\nprovoc ations\npad dys\nne scac\nn fc\nmichael rapaport\nmic alle\nlife changing\ngeor ger\neric ally\nde wor\nclari dge\nchri ss\ncar yn\nbo sman\nball ack\narbut us\naltam ira\nâľ Ĵï¸ı\nway mo\nvom ited\nu ther\ntorna dic\nstorm tracker\nsprote ction\nrob thomas\npoin tof\npl ana\npa ha\nmontes julia\nmo sher\nmarke to\nmark son\nlar ts\nker ning\njulie bishop\nig ad\nhe ver\nfahad mustafa\nem cc\ndo ber\nd rich\ncul pable\ncrac ow\ncal ri\nbur ros\nblen cathra\nbi on\nbass inet\nat vs\namand ab\nac ted\nðŁij¶ ðŁı½\nðŁIJĿ ðŁIJĿ\nze peda\nwomani zer\nwir tz\nvaish ali\nu wc\nu ting\nsop hos\nsink able\nsilve ster\ns mail\ns lit\npolitici zed\npo ca\npediatric ians\nnick cave\nnemato des\nmelani atrump\nly tham\nlam ination\nko sher\nj co\nin vision\nin box\nheuss aff\nhan doff\ngov tech\ngoldkey comics\ngarage band\ng mi\nfalse hoods\nepic ure\nen dy\ndy ard\nche alth\nbright ling\nbourn ville\nblow ed\nbirken au\nbaster ds\naw bb\natla sobscura\namy freeze\nðŁĩµðŁĩ ·\nâĥ£ ,\nÌ ²\nz om\ntromb onist\nstro me\nshahe ed\nsecon dary\nsavechildren uk\nro bie\nric er\nreu ter\npol perro\np ns\nny phospital\nnorther ners\nmh eller\nman up\nlm k\nkather yn\nheart worm\ngau ld\nfutu rology\nfa wns\ndu du\ndis aron\ncrash bandicoot\ncomb ats\nco ti\nchristi aan\nce elo\ncarp inter\nbm ws\nblood lust\nyak in\ntu an\ntri pling\nthank smom\nspot sylvania\nsand vik\npurch aser\nno where\nmohabb at\nmc goldrick\nkap taan\nit sam\nin built\nillhuemin ati\ni ita\nhir an\nhaiti an\nhail sham\nha young\nfernand inho\nfeliz domingo\neli ot\ndrawthisinyour style\ndorset mag\ndi wan\nbuy er\nb wk\nang olan\nai hl\nag gy\nðŁĺĥ #\në¹ĦíĪ¬ ë¹Ħ\nwbko wx\nunder writer\ntwitter ing\nsun shin\nsub par\nstart with\nri dlr\nrecipro cate\nra van\nparadig m\nou c\nnd g\nmohan ty\nmo zz\nmass ape\nlumin aire\nlgb tiq\nlea therette\nla th\ninve sto\nim in\nik awa\nhard wicke\nfrom tomorrow\nequ il\neco soc\ne manuel\ndesecr ation\nconfe c\ncam b\nbel atedly\nbeat nik\nav atas\nan sell\nacoustic guitar\nwin star\ntarek fatah\nsuper junior\nsom any\nscic hat\nsalt spring\nrichard son\nre forma\nr our\nq os\nprep zone\now i\nmoolool aba\nmati syahu\nla zing\nkle iner\ngr und\ng aki\nform ality\nferri by\ndetermin ism\ncut scenes\nbooking com\nboo oooo\nblu er\nbarclay card\nal ition\naf aye\nadity aroy\nðŁį¾ ðŁİī\nâļ½âļ½ âļ½âļ½\nâģ¦ âģ¦âģ¦@\nа ÑĤ\nyo b\nv rx\nun tv\ntime form\nti ggy\nthe morning\nsun star\nstow market\nru kia\nregrett able\npopul arized\nper dition\npat y\non ism\nnobun aga\nnad ella\nmis ch\njack jackjohnson\niv orian\nhu mer\nherb streit\nhe iro\nhad ji\nfour square\nfaste st\nfanta size\nextor t\ndor nier\ndesign inspiration\ndeep mind\ndav in\nco location\ncin ec\ncatter mole\nanesthe siology\nana bel\nam paign\nall ura\nyal ta\nwur litzer\nwp bf\nthiep val\nthe horror\nth v\nsto b\nqu aye\nport able\nperi sic\npe ut\not way\nob je\nnehadhu pia\nmol dovan\nlog gia\nlar kin\nkyli ecosmetics\nkari uki\njap ati\nj ory\nim the\ngwyneth paltrow\ngrave site\nfutu ren\nfen church\nero ad\nendit movement\nei mear\ne inf\ndavid price\nbo hn\nbeau maris\nau drina\namazing ness\nwy nyard\nw ws\nven e\nvelaik karan\nurban planning\ntyn dale\ntheat rics\nsup my\nst kitts\nse si\nse kol\nscor chers\nprofit eering\npi ro\nperi operative\nover loading\nne edi\nlan sdale\nitsli verpool\nhood lums\nhand el\nha gs\ngoose island\nexciting times\nedge computing\nedgar town\nd tf\nclar ks\nch ads\ncau gh\nburn leyfc\nbur an\nbis muth\nbella hadid\nbe active\nbar tok\nagath achristie\nack royd\nê¹Ģ ìĪĺíĺĦ\nÉ ´\nwil lam\ntam ers\nst m\nsk ys\nshad dix\npar iv\nono ghue\nminu scule\nmai sha\nlu pi\nkat ak\nka ja\njack daw\nillu sive\nhh sgov\ngre ta\ng ool\ng fk\nfamili esto\nfacts matter\ndwar ven\ndont mes\ndiof avatas\ncar swell\nbir kett\namid ala\nalu card\nak il\næ ¬\nwedge wood\nti mc\ntali bk\nswaff ham\nspla yoffs\nspectacul ar\nshe i\nsen in\nsatri ani\nrhode sian\nrashtra pati\nqual icum\nqu am\npotter y\npon chos\npa ja\nne et\nmzan si\nmaul er\nmai sel\nk mg\njackie chan\nimpac tin\nhon ori\ngun dog\nfle abag\ndru mheller\ndr yan\ndo gue\ndioce seof\ncur tail\ncreative writing\nchat elaine\ncar der\nbri z\nber zer\nb itu\narchae o\nadd ons\na all\nzap at\nx ue\nvancouver sun\nvan es\nthe bull\nth hour\ntel uk\nspy gate\nsm rt\nshaw nab\nsc si\nsal alah\nrowy so\nred cros\nrainbow rowell\nradisson blu\nr chs\npratt ville\npoiti ers\npan n\noo ke\nmu ddle\nmor avia\nmichi ana\nky r\nkli ff\nhu ana\nhenry gayle\nhead butt\nhair ball\ng tn\nfu rey\nfram boise\nevangeli zation\nec ard\ndestabili ze\nde me\nby c\nbadrin ath\namp ere\nÛģ ÛĴ\nver ney\nuffici ale\ntb wa\nsof twood\nsoci ale\nrede ems\nq tv\npu bic\nper ches\npeoples votemarch\noni x\nol ith\noh su\nnovel las\nmechat ronics\nlunch ables\nh ings\nglass door\nfc pa\nfanexpo canada\nedex cel\ndict ating\ncourtne ym\nchild splay\ncaloun dra\nbirth mark\nbar na\nalway swith\n/ +\nze is\ny se\nwil fork\nwee ting\nvariet als\nuof r\ntwee talong\nsw ash\nshar ad\nse millon\nru bella\nrap sody\nphd forum\nny ce\nntv atone\nno ice\nni biru\nmu ma\nmic hen\nmeaning fully\nkawarthal akes\njuliebishop mp\nhu at\nha ff\ngri eco\ngibr altar\nfire fly\nf nb\ndakah lo\nbuck cherry\nbcfc tweets\nbak ari\nau dre\nash ly\nandre essen\nai sha\nad duc\nâļ½ï¸ı :\nx uv\ntu tsi\nti go\ntalibk weli\nsquir m\nsound board\nrehear ses\nplanet side\npassage way\nour time\nos stf\nojib we\nnet ter\nne ac\nn kn\nmu ki\nmo ins\nmatri arch\nma stani\nlaven ham\nkiku chi\njan am\nhinojo sa\nfo etus\neye shadows\nenig eria\nec rowd\ndimit ar\ndid ger\ndi efen\ndefrau ding\nbull sh\nbroom stick\nback us\nar gh\nxo los\nsqu amous\nshu ai\nshi ans\nsamo ajoe\nsam ford\ns llc\npriyan k\npio tro\npic slip\nor don\nnol de\nmurciel ago\nlu xion\nlin ds\ninst it\ning laterra\nidoli zed\nhealth insurance\nharmon ia\nh sl\nfinancial freedom\nffici als\neu dora\ncon scription\nclun ky\nchar lee\ncap i\nbannedbook sweek\nbaff le\nback lot\nb mcc\nascend ant\nalu ddin\nðŁijĭ ðŁı»\nðŁIJ ŀ\nzi v\nx tr\nwa ec\nve schwab\ntime e\nthim phu\nsh ree\nr sca\npeto sagan\npalla dino\nold victheatre\nner ding\nmicro beads\nleven shul\nlarch mont\nja ved\nir ation\ninf p\nfarc ical\nf ars\ndono hoe\ndipo log\ncho m\ncarnar von\ncan cha\nbli ghty\nate m\nwpl glocal\nvive gam\nver sum\nur ne\ntwitch sharing\nthap ar\nshri ek\nshaun king\nri is\nre grow\nraz ia\npicture house\nout stand\noo stende\nntn u\nnav arre\nmi micha\nlamin ates\nkilmain ham\nkah le\nic a\ngan za\nfigu ral\nfar miga\nfa th\nextru ded\ncentral asia\nbuck town\nbre ton\nbirthday staroftheday\nbasil icata\narri son\nðŁijĩðŁı¾ ðŁijĩðŁı¾\nwim pey\nweis sman\nvisit maldives\nvic eland\nveget ative\num my\ntop ten\nsp ss\nsom meli\nsky diver\nsaw fish\npartiti oning\nn goron\nn anga\nmono grams\nmercat or\nmary mcdonnell\nlush cosmetics\nlc u\nkhayel itsha\nka ke\nji ya\nit b\nic ff\nhol dup\nfur longs\neric prydz\ncar ys\nbuk ola\nbiennal ear\nbay i\nbari atric\naged care\nâĻ £ï¸ı\nz older\nyes allwomen\nwestern ma\nvaill antuk\nu indy\ntric ho\ntri as\nthe b\ntar paulin\nswing man\nsun kissed\nstump town\nstar tsnow\nsegu ri\nromney ryan\nreal clear\npa chu\nnulli fy\nnewh ol\nmer api\nlauren ti\nkiss fm\nkat er\njugg alos\njarre t\nguil in\ncrun chie\nclimatechange isreal\nbur dick\nbe ales\nba tho\nb gb\nb dt\nadventure land\n! ðŁĺ±\nver on\nthe deverakonda\nsto wed\nsp alletti\nrhy ne\nretrac ted\nrail gun\npi qua\nphonec ase\npatri mon\nnov elli\nn serc\nma dani\nlat am\nkhu t\nindv snz\nheine ken\nguaran ty\ngolden age\nfru mp\nenne agram\ndo wie\ndigital ocean\ndarwin ism\ncri stine\ncoun ten\nchicken pox\ncarry out\nbuen as\nbic arbon\nbi onics\nasci ence\n) "@\nðŁıĨðŁıĨ ðŁıĨðŁıĨðŁıĨ\nçŁ ³\nà¸Ķ à¸Ķ\nxx xl\nwoo oooo\nwom ened\nwa ren\nvi ere\nthun ter\nthor se\nsimon baker\nselfi mprovement\nscul pin\nsch wer\nro hr\nraffa ele\nra yu\nper version\npamp as\nos seo\nog u\nnü rn\nmy i\nmar ter\nle vo\nko kan\nim kona\nili ac\ngoo ooooo\ngal antis\nfed de\nexce sses\ncompac t\ncitizen ry\ncign al\nche am\nap lace\nan jos\namazon books\na av\nwash board\nu tti\ntre ssel\nstro h\nsig ler\ns voice\nride with\nreliance ent\npromethe an\npel ly\nlie ber\nkan azawa\nk se\njohn cusack\nichand ra\nic ona\nh ws\ngo parks\nfire ball\nfanatic ism\nfal li\nde ssa\nde park\nde mann\ncur sors\ncos ito\ncorn us\nchelseaf lowershow\nc ts\nbook maker\nbne traffic\nbb mme\nbaw try\navi v\nau se\nae b\nab lec\nè Ģ\nè se\nyng itis\nver re\nul mer\ntoy land\nto ck\nswill neverknow\nsw va\nstro mae\nstephen hawking\nsequ im\nprop elling\npo index\noun de\nor ourke\nnor vell\nm zee\nliber ally\nle les\nkim o\nhit music\ngetwell soon\nflir ted\nfi red\net ta\ndon go\ncibul kova\nci gi\nci en\nce peda\nbrad street\nboo dle\nbis cay\nantiqu ed\nðŁĴĹðŁĴĹ ðŁĴĹðŁĴĹ\nâı ¬\nÑĦоÑĤог ÑĢаÑĦ\nwork stations\nterre bonne\nta im\nsubli mated\nstv j\nso bama\nsneak ily\nsi sk\nsell s\nscimit ar\ns market\nre ste\nqueen sbury\nper vaiz\nnat m\nmoh ler\nmeth adone\nironde quoit\nic si\ngran ollers\ngil der\nfu jis\nfrie del\ndb fz\ndark shadows\ndaily nation\nd live\ncontra sted\nclau dio\nch ole\ncanal etto\nbor na\nbigh orns\nbehind woods\narak an\nair brushing\nac afe\nèµ ·\nz wir\nz ra\nwor ships\ntruec aller\nss x\nsmithere ens\nsket cher\nre its\nrapi er\npoul sen\nplan b\nmersey rail\nligam x\nl bk\nkim hyunjoong\nk alia\nj ld\nirresisti bly\ninsur ing\nidol atry\nen ice\nelder scroll\ndom browski\ndeltag oo\nbryan adams\nbou ff\nbis sett\nay i\nari b\nali ving\nal sati\nah r\nun sun\ntwit ches\ntotten ham\nto var\nthe crown\nsynergi stic\nsupmy tempo\nsnor ting\nshare tunes\nrigh twing\npos adas\npen rith\npantal oons\non z\nmoon cake\nmemorial cup\nmel isa\nle brun\nla phro\njust like\njac c\nja ina\nice box\ngift cards\ngender gap\nge il\nfish guard\nene a\ndi mer\ndelam ere\nbolshe viks\nbland ing\nbill murray\naqu in\nwinnet ka\nwatson ville\nu dp\nthrott ling\nte pid\nsyn cop\nst ere\nse tit\nov ac\nonthe wall\nmussel man\nmidr and\nmaxi mizes\nmaster ton\nmadon sela\nm elling\nlol lywood\nlap ham\nla throp\nl ps\nith ac\nist ana\nisol ates\nhydro xide\nhal ligan\ngaz gshore\nfu u\nfli c\nf sm\nf ado\ner ji\ncuri os\ncrusad er\nconquist ador\nchel e\nbro wed\nbourgeo isie\nbol lard\nanxi ety\nam ec\nal sina\nðŁĺĿ ðŁĺĿ\nðŁIJİ ðŁIJİ\nðŁ§¡ ðŁ§¡\nìŀ Ń\nâĨ Ĺï¸ı\nyo gam\nyellow card\nwelsh government\nunder tone\ntoday fm\ntan uki\nsx sw\nsun stone\nslu mping\nplay warframe\npe ice\nnole fam\nmy les\nlukas z\nki v\nkemp ire\nhel den\ngopin ath\nfoxstar hindi\nent r\ndeltagoo drem\ndai ya\ncheer full\ncare em\nboon do\nbeno ist\nbaz zi\nbabys itters\nas orock\nartinstitu techi\nari elle\nاÙĦ Ø£\nyoun t\nval is\nuri st\ntwee ple\ntra uma\nt ck\nsuiko den\nsco pus\nry th\nround hay\nre programming\npro sely\nperfect day\npau le\nnegr on\nne co\nministry wcd\nmin ka\nmimicha kraborty\nmadein canada\nly d\nhi o\nher peto\ngi re\nescu cha\nequin ox\ndontmes supmytempo\nde gen\nday dreamer\ncourte san\ncate blanchett\nbar ro\nb hour\narch enemy\nad aa\n. ðŁĩºðŁĩ¸\n! ðŁĺĤðŁĺĤ\nðŁĺĻ ðŁĺĻðŁĺĻ\nwharfe dale\nwall send\ntank top\nsu hail\nspeed ball\nsl cc\nsim z\nsi gel\nsau thor\nsalvador an\nper severing\nnews agent\nna poli\nman olo\nmagu fuli\nlac onia\nkri stal\nkortri jk\njan k\njac a\nft g\nfree all\nfik ile\nfan mail\nese tter\ne ese\ndownfor what\ndoug jones\nd appy\ncur rier\ncroatiafullof life\ncostu ming\ncarpe ted\nc series\nbugab oo\nbol ing\nbas sem\napp l\namo tt\na eu\nðŁĺĬ ðŁĺĤ\nà¹Ģภķ\nts vangi\ntr itt\nspelling bee\nsmall holders\nra ph\nprotru ding\npine al\npee wee\nmin en\nmag is\nla kin\nkaryo tic\nkag eyama\nis ca\ninst alove\nhy ste\nhot pants\ngrun gy\nge ot\ng naw\nfree holder\ndon te\nci al\nbur don\nbump kin\nbrun nen\nali pay\nah hhhhhhh\nacram ento\n) |\nyork university\nvi burnum\nun verified\ntra ylor\nting a\ntheafric amentor\nthe michael\nros ann\npre teen\npre fontaine\npe tras\noz u\nout sole\nmo ylan\nmc adam\nmarkus feehily\nmac fad\nko ichi\nkin smen\nheart breaks\ngil son\nequestrian hour\ndu ta\ndog walking\ndam eron\ncosmopolit an\ncommunic ative\nchim ney\nchick a\nchester be\nbrid ger\nbrick works\nboat life\nad ze\nðŁĽ «\nðŁĴĢðŁĴĢ ðŁĴĢðŁĴĢ\ny erin\nwn yt\nwe sty\ntwit tor\nso g\nse ob\nsa ke\npost uring\nmer l\nmandalay bay\nleonardo dicaprio\nkno wit\njor din\ninf lexi\nim x\nic ai\nhisp ano\nherak lion\nha thor\ngyna ecology\ngu lak\ngib sons\ngerrit sen\nfund able\ndisen franchised\ndevious maids\ncrow es\ncour ted\ncommu ted\ncol well\nare port\naer ator\nya yo\ny la\nwe at\nukr anian\ntruff aut\nthe ming\nta way\nsre ed\nsl ounge\nsky scanner\nsk nights\nshirec cc\nshil pians\nsan tu\nrv ca\nraashi khanna\npy con\nmur mur\nmei ko\nkur th\nkeep moat\nhann am\nflag ell\nfen wick\nen sion\ndra win\ndown force\ndi gger\ndese gregation\nd jim\nbucke thead\nbran n\nbirdseye view\nbel ittle\nbe dri\nbarn hill\nag assi\nðŁĴ ¢\náµ Ĺ\nyu gi\nx zi\nx rt\nva an\nut agawa\nun sinkable\ntwitch play\ntre sa\ntown ley\ntod rick\nstudi om\nsc inema\nrd chat\nquoted daily\npoun ders\npit zer\npaul pogba\npack mas\npacade mic\nole ary\nok api\nnic king\nkey tar\nkay mer\nimmacul ately\nhu leni\nhar b\nh jk\ngoldenboy boxing\nglent oran\nf bt\neter no\nedinburgh castle\nec lark\ndun lin\nclean ly\nci ps\nchop da\nburk hardt\nbis bal\nbil zerian\nap in\nantag onists\nyu ya\nuntapp d\ntyd fil\ntwee ties\ntol u\ntn k\nthe cine\nsun fire\nsude ikis\nsub side\nspur n\nslee pa\nshop indie\nrrrr rrr\nra ii\nprin ted\nofthe game\nle ly\nka veri\nk zoo\njust kidding\nigu azu\nhelsinki uni\nforts ask\nfin ra\ndur den\ndaguer reo\nclu bber\ncat ahou\nbo vey\nas ah\nvr chat\nthu gg\ntele film\nsqu ints\nsk Ã¥\nshock ley\nru scha\nripp ling\nragha vendra\npyro technics\nprogressive house\npen ter\nover de\nni ds\nnewport beach\nmuer to\nmed way\nman te\nla place\nk th\njo lo\ngil dan\ngh b\ndong woon\nde frosting\nd how\nblue gill\n. ðŁ¤Ķ\nðŁı ŀ\nãħłãħłãħłãħł ãħłãħłãħłãħł\nz tv\nyo el\nwine glass\nthink geek\nsuccumb ing\nse ast\nschu tt\nsa ez\ns fl\nri jn\nreform now\npit ney\npe ch\npan jab\nol ling\noff sets\nnoct ilu\nne ga\nmu bi\nmot sepe\nmalaw ian\nloo kin\nle if\nkr acker\nit son\nin au\nev aded\ned camp\ned accessible\ne ich\nd ju\ncolorador apids\nclou dof\nchallenge accepted\nbul ger\nba hut\nar keting\na oun\nðŁĴĹ #\nðŁĴĭ #\nðŁ¤£ðŁ¤£ ðŁ¤£ðŁ¤£ðŁ¤£\nãħ ľ\nz oku\nworldwar ii\nwich ita\nwearein puglia\nur lacher\nunh cr\ntranqu ille\nspear fish\nsaunder son\nsau rav\nsam each\nsaluteto service\nruge ley\nre decorated\nphy te\not so\nori sts\nnex change\nne gate\nme any\njere mie\nholly hock\nhe ys\nguid ry\nfre sn\nearth day\ndefl ate\ncon oco\nchoice internationalartist\ncheck book\ncaric om\nble ue\nbaji raom\naur um\nasu u\nais i\nach ille\nwu vip\nwishful thinking\nwigan warrior\nweg ner\nunice findia\nsumm ative\nrecap tured\npri ve\nperson hood\np anga\nnew jersey\nne squ\nmac chi\nle mentary\ninver urie\ninfra structural\nindependenceday india\nin fringe\nham mon\ngoo der\ngn fnr\ngla ssc\ngh andi\nd ations\nchad wick\ncacophon y\nca rec\nbutter ball\nbu gis\nbe ale\nappic oftheweek\na store\nðŁ¤ ³\nå ģ\n~ ;\nyu ju\nyas ssss\nwater down\nwar machine\ntu ggle\nton nage\nter ly\nspite ful\nspang lish\nsleepy time\nrox ette\nrome sco\nren uka\npu mbaa\npopup shop\nperfec tionists\npalae ontology\nne ces\nnba allstar\nmn d\nmini mus\nmaz u\nmag lev\nlea day\nka ela\njap ur\nith es\ndx b\nby ng\nbuff er\nber glund\nbak in\nalphon sus\nðŁĺģ )\nvi ad\ntrain hard\nthisis the\nt out\nriver men\nraz in\npla ins\npeck in\nling en\nkom ori\nkh rush\nkeepbritain tidy\nkate e\njit u\nidle wild\nheze kiah\nglos birds\ngenetic ist\nfrangi pani\ndev aughn\ncrypto graphic\nc ads\nbu stier\nber ber\nbaby z\nas ari\nam ass\ní ħ\nå± ±\n~~~~ ~\nxim ena\nx cited\nwell nes\nvin ta\nv gm\nunci os\ntorre ira\nthen ia\ntejas swi\nta inte\nschrö dinger\nradio activity\npoo k\nou is\noo tn\nmedi ating\nk able\niss ner\nir ri\ningui stics\nin pink\nin fidel\nham ble\nfra s\nest y\ndair port\ncra pe\ncomp lies\nboat yard\nbatt i\nan thi\nam era\nactu ality\nwest morland\nwe ssel\nve sely\nunear ths\nunderwater photography\nun consci\ntheryan adams\nthe hill\nshu is\nsed ative\nralph s\npic ardo\nonther adio\no ig\no bert\nmom en\nming hao\nmercy me\nmari kana\nmac gowan\nlethar gic\njohno liver\nhar ima\nhaberdash ery\nguzz ler\ngood ger\nfrank l\nfeu er\ndir tier\ncas l\nbol sters\nay ak\nam bit\n! âĺº\nworld childrensday\nwest ville\nun justified\nu hl\nturn stone\ntheni asharma\ntatt ers\nta wi\nsupportsmall er\nstra the\nstin ker\nsm ou\nslam dance\nskil ful\nsauter nes\nram madhav\nr fr\nquat re\nprotec tor\npal am\nnut ley\nmovie pass\nmfl twitterati\nmargol is\nmar leau\nlh saa\nhe wer\nhawai Ê»i\nfellow es\nf ch\netsym nt\ndag ar\ncheer wine\nchange management\nbust ard\nbu h\nbra via\nbel lec\nb pp\napp r\naplayer sprogram\namic ha\naccomod ation\nåŃ ¦\nvan jones\nu stin\ntri x\ntam ia\nsward son\nsiar gao\nshou nen\nrepadam schiff\nrausch enberg\nr ke\nprop ell\npe jic\noc toberfest\no sta\nnew gate\nmo sas\nmer co\nlake districtn\nko sh\nkan on\njo w\nindv ban\nhur tin\nhondar acing\nho pper\nhbo boxing\ngeoff johns\nfru sci\nfis kars\nfelic itation\ndeepak chopra\nddin h\ndat in\ncomuni dad\nch hota\ncarcino genic\nbanjar masin\naut zen\ntw an\ntri bals\nteam bts\nsub buteo\nsr at\nse ta\nsal onga\nper ig\nover powering\nmec cano\nmccl ung\nmar kaz\nke ss\ninve steu\nimpe ded\nian u\nhello fresh\ngtas nap\nextingui shing\nentom atoes\neni x\nedo dyssey\ne mis\ncountry music\nconfront ational\nbin ned\nbhu v\nannot ating\nambed kar\nx bmc\nwho ah\nut sc\ntou l\nth birthday\nsuper yachts\nsul la\nstry per\nsmel ting\nsmar tin\nsal sify\nroberto cavalli\npill box\npga show\nnarro west\nmye dit\nmoss ley\nmil y\njudge mental\nher universe\nhe ver\ngo leaf\nglobal citizen\ngira ffe\nfluctu ating\nfat ales\ncura çao\nclay more\ncap tors\nbu dak\nbrad pitt\nbir n\nba dia\nangi es\nan etwork\nalla gash\nal tho\nal it\nac aba\nab ita\nyu jin\nwonder ment\nturbo tuesday\nsu che\nsi amo\nsho peep\nshopeep h\ns month\npokemonsword shield\npaddle board\nmaz har\nkick started\nker ja\nkear se\nkan chi\nk you\nhoo phall\ngym motivation\ngro ton\nflam ingo\nfair bairn\neury dice\netr ics\nem press\ndispo sse\ndev das\ncy press\nce di\nbat ur\nbar ras\nbal oney\n... ðŁĺī\nðŁı ĸ\nâķ ļ\nಠ¨\nyag ami\nvali ente\ntinie tempah\nthehashtag game\nss oftball\nspiegel tent\nslou chy\nserre mmy\nsa pper\npha edra\npar to\np cc\not u\no este\nnortheast india\nner dalert\nmerri field\nli ff\nkookabur ras\nkitch in\nital o\nhousel ondon\nhan u\nh waiting\ngov nl\nforwar der\nf ath\nequi ps\nconserv atories\nclo velly\nboost mobile\nbic olor\nber ts\nbald rick\nart twit\naccommod ates\nðŁļ ģ\nâĿ£ï¸ı âĿ£ï¸ı\nâĻ ¯\nz berg\nyel ena\nsouth aven\nsou ther\nsketch fest\nsel and\nsc ut\nroll icking\nroad bike\nre amer\nr db\npress office\nna j\nmother care\nmeet stvj\ninver no\nic ould\nhulla baloo\nhell muth\nhall marked\ngri c\nbath tubs\nat b\nìľ ¤\nè £\nâĻ ķ\nà¥ĭ _\nÑĢ о\nzen yatta\nyess cotland\nwh io\nvolksk rant\nun ltd\ntro oper\nti run\nthe cw\nthal amus\ntax man\nst rood\nsn elson\nsm mw\nsen ran\nsec r\nsch ia\nphoto copy\npakv nz\noak lands\no sco\nnu pe\nnam biar\nmur t\nmok sha\nmam ak\nlakedistrictn pa\njosh lia\njay leno\ninter course\ngr ackle\ngen ic\nge tu\nful ci\nfoo trest\nfjor d\ne cha\ndhoo par\ncon ger\ncau ght\nbuck wild\nblo grt\nband shell\nazadimarch pti\namit ab\n. ðŁĴĸ\n% %\nðŁĽ Ģ\nëį° ìĿ´\nëĭ¬ ìĿĺ\nãĤ¸ãĥ §\nzum walt\nz han\nworld con\nwi ec\nwag goner\nuni vision\ntransl ation\nthe bad\ntemper am\nsto pper\nsla ger\nsh q\ns bj\nrcb v\nrb ma\nrashtri ya\npar mo\nmano euvre\nm run\nlucre tia\nip sc\nincol n\nid ine\nhouse hunting\ngidd yup\nepo ch\ndern gate\ndart ington\ncop adelrey\nco piers\nchec a\ncatan zaro\ncarers week\ncam phor\nbustam ante\nbul li\nbou y\nblay lock\nbattlefield v\nbank sia\nascen ds\nas san\nantoni oni\namericann injawarrior\nam ah\nalley ways\naldub meetstvj\nalab ama\nal amitos\nworry ingly\nultra thin\nu emura\ntu sker\nti miso\nta kor\nstaphy lo\nsouthern railuk\nson ice\nsmoul dering\nsmol tz\nsave the\nriver fest\nreading list\nproclaim ers\npo ss\nny d\nni kil\nnbc svu\nn of\nmis behave\nluxury hotels\nlu kin\nlipsy nc\nks la\nko ki\nju elz\nike bana\nhot tie\nhiker chat\nhau ser\ngi ang\nemer g\ncu shy\nbrat ty\nbch wy\nbasketb al\nas q\nanti war\nandalu sian\namherst burg\naber soch\n\' ]\nðŁİīðŁİī ðŁİīðŁİīðŁİī\nwest bridgford\nv nl\nso dhi\nshutter fly\nscar borough\nsau ctions\nsar far\nround abouts\nriseand grind\nric co\nmusic biz\nmari ko\nle cker\nl illa\nktn news\ngeel ani\nfli ppy\ndoo kie\ndomin gos\nclose d\nche o\ncat rin\nblack star\nbe emer\na jun\nðŁĻĮ #\nðŁİ¬ \'\nwarren ton\nvisi bil\ntemple univ\nt ny\nsit ch\nshel ove\nsh ini\nsequ enced\nscu ola\nquad ri\nprocrastin ator\npin kin\npaper boy\nnaturo pathy\nn ouri\nmilli kin\nmac dowell\nlong man\nle tras\nkrist offerson\nkri m\nker as\ning dean\nhousing crisis\nham za\ngra e\ngh r\ng sat\nfac ing\neun ha\ne oi\ncolli der\nbri des\nbeach house\nar mit\nall t\nad den\nãĥ³ãĤ °\nzacatec as\nwelcom escotland\nwa pping\nvoice first\nst ints\nsav or\nroof ing\nro shan\nrec tum\nout weighs\nms by\nmicro array\nmar dy\nkalaign ar\nhand work\nguardian ship\nfore castle\nfen ice\nfabric ations\ner rrr\nene ch\neat at\nds ound\nconsul ting\ncm world\nbroad y\nbreak dancing\nbp cl\nban del\nak ere\nag pur\naf lac\n[ "\nðŁ¤ŀ ðŁı¾\nwhat make\nwakand aforever\nw cracing\nval jean\nun ge\ntwit cho\nt li\nsy o\nstru thers\nsha and\nmar cy\nma be\nl wt\nheim lich\nheather wick\nfrancis cans\nfield work\nest en\ndel tona\ncycle way\nces spool\nbur nett\nbarba resco\naspin all\napor te\n__ .\nâľ °\nzoo logist\nyor ba\nwe ard\nwall in\ntur m\ntimmer mans\nti ong\nthis ss\ntat ers\nsw inger\nson dra\nsi phone\nsecre te\npythag orean\npost modernism\nperfu mery\nover thrown\norac lec\nnews man\nnational pizzaday\nmal u\nm smes\nlede cky\nla brin\nke elan\ni spossible\nholder ness\nhel ge\nharle ch\ngiov ann\nf örde\ner rol\nepi dural\ndongh yuk\ndetr itus\ncor yn\ncapital tv\ncanon ization\nblow back\nberg mann\nbe il\nba thin\naux ili\naggi eland\nðŁıĨ .\nâĿ¤ï¸ı âĺºï¸ı\nyo bo\nxx vii\nwind ass\nwe sker\nwcc b\nwar rant\ntol and\ntele presence\nste ren\nsp ath\nse sto\nsau der\nry den\nqantas wallabies\npriya anand\nparis roubaix\no dr\nnick cannon\nni o\nmagde burg\nlo thar\nkenny omegam\nkaren ina\njon ze\nje ane\niti o\nheath field\nex y\nden ney\ncourtney force\ncer ys\nburn aboy\nbeig net\nbag gs\nash en\nanecdo tal\nwildlife art\ntransc ended\nta via\nstreng then\nshow place\nsanji v\nsal les\nreturno fthe\nprinci pia\npau lista\nok amoto\nnine inch\nmu tu\nmin smere\nmanjre kar\nlebat ardshow\nkene ally\ngh or\neuryth mics\ndub smash\nchiff chaff\nchi kara\nbuil da\nboga erts\nbin nie\nber ner\nasi t\nary as\nanj ali\nagni eszka\nabhi jit\nðŁ¤¦ âĢįâĻĤï¸ı\nzen on\nyour boy\nver ry\nvanda waterfront\nun trained\nun original\num t\nty ro\ntendin itis\nstra ighter\nspring ville\nsimon ds\nshop lifters\nsapere condiviso\nsaint paul\nprowrestling ts\nplum stead\npi stil\nphil om\npetro vic\nne vere\nmultic am\nmo go\nmain ers\nma wra\nkab ayan\nji ka\nhall i\ngar lin\nfuji wara\nfri ston\nfast pass\ndep ooja\nchale ts\nc illi\nbre reton\nbest team\nb ni\nag ens\nwhitec ourt\nwhistle blowing\nwau n\nvre eland\nun dum\nuk tv\ntailli ght\ntag ua\nsé bastien\nretali atory\nremo dsouza\nrb k\nprogno stic\nor ic\non star\nolek sandr\nla al\nkennyomegam anx\njer on\nislam ism\ninsu lar\nhen ning\ngal indo\nf ter\nexple tive\ndocker con\ndesign ating\ndam bi\nculture of\ncr d\ncon me\nchor i\ncar ob\nbookaday uk\nandy burnham\nam ick\naller os\nacom munity\nðŁĴĸ @\nº f\nz music\nyel owo\nwq xr\nwido do\nwar path\nti maru\nssc napoli\nsmu dging\nse itan\nrecur sion\nre homed\nprogen itor\npra shanth\npluto flyby\npeyton list\npend ra\nmus d\nlati mes\nkwan za\nkev yn\njustic ele\njazz music\nin consistencies\nin cas\nin ator\nhoy lake\nhalf moon\ndementi a\ndem ure\ncriticalrole cosplay\ncornwall is\nchuk au\nchhe tri\ncar dale\nbri anc\nb so\nautom aton\nar tha\nanti thesis\nalv arez\nalex ie\n⼠½\nৠĭ\nyu kio\nwcc b\nwash cloth\nvijay diwas\nvenuse swilliams\nv li\ntt ingen\ntro xler\nsor do\nsl x\nshim bun\nshe ene\nrock a\nre training\nra ha\nproof reader\nprolet ariat\npin ta\npedagoo friday\npe der\northo dox\noff shoot\nnu gs\nnewyear sre\nn wac\nmor illo\nman tas\nm ure\nlaw man\nkishi moto\nkenne bec\nk anya\njummah mubarak\nhiro mi\nfan x\neye piece\nesc p\neck stein\ndichro ic\nde aver\ncra pper\ncou riers\ncor us\nchand hok\ncch l\ncas key\nbiggreen egg\nau ss\nag nus\naf rance\n! âĺĢï¸ı\nðŁijĮðŁı¼ ðŁijĮðŁı¼\nè le\nyour anon\nyear wood\nun tie\ntur nit\ntor sten\nthom asian\ntb ats\nswwap niljoshi\nsop retty\nsimple plan\nsil vana\nse ppi\nsat oru\ns love\nph wx\nmom aps\nmir in\nmer curio\nloud wire\nlexisnex is\nko do\nkim mie\nki mi\ning ri\nham leys\ngar misch\neu x\neng al\ne wi\ndemon a\ndaily post\ncul tists\ncolle g\nc sd\nc ason\nbody art\nbeer house\nald wych\nalber ni\n! }\nyel ich\nwater mill\nvisit nc\nunlock able\nun attainable\nu ct\ntraff line\ntas ki\ntal low\nst off\nspace weather\nsnu ff\nsmash burger\nshep p\nsecon do\nschool choice\nriv lin\nradic alized\npug sley\nprime minister\nold navy\no aths\nnt pc\nmuja hid\nmigno gna\nmichi e\nmicalle f\nlusit ania\nlooooo ool\nle vies\nkra ken\nive son\ninte gers\nimmin ently\nif ma\nhorror film\nfpj b\nfluid ics\nf nac\nes th\nel b\neb bets\nci at\nchar it\napo ptosis\nam bos\nðŁĺī âĿ¤ï¸ı\nبص رÙĬ\nti ef\nte i\ntar ja\nt ade\npd n\npascag oula\non asap\nni xie\nnay e\nn me\nmusic india\nmam mary\nlong board\nkrak ów\nken der\nhappy wednesday\ngirl band\nfau stina\nfan arts\ndo tting\ndar m\ncon ium\ncleve leys\nbroke girls\nbr inks\nbas er\nash vili\nasan try\nðŁĴ Ī\nãģķãĤĵ ãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ\nâĹ ĸ\nupp ere\ntwitchtv gaming\nto serve\ntat litu\nt savo\nsigh ing\nsav en\nroyal randwick\nri ks\nr tweets\nplay fair\np mi\nnuff said\nn mi\nlick er\njawor ski\ning ia\nho orn\nharvar dh\ngod child\ndol men\ndog and\nco lette\ncit go\nbru g\nbo asted\nblu ecol\nambi dextrous\nam ins\né o\ntweeta pic\nthur n\nstreet dance\nstau ffer\nscra ppers\npu an\nprotec tionist\npasser sby\npa ia\noxid ant\nnorm als\nnir bhaya\nnavi o\nnac er\nku ip\niri g\nide alist\nhishammu ddinh\ngro ggy\ndaver amsey\nchukau munna\nbla gden\nben ilde\nbarba rella\nauto cratic\nasqu ith\nasham edly\naddisab aba\nxer xes\nwhe alth\nval po\nv yn\ntar ry\ntann adice\nsw cc\nsan ts\nre pulse\nprice isright\nport ola\no zo\no tros\nn gan\nmohan shakti\nmel vins\nmasqu reshi\nmar ven\nmagni fi\nl mi\nkrat z\njeff co\nje v\nintothe badlands\nhumper dinck\nhu masqureshi\nhu acan\ngun ter\ngautam gulati\ngat t\ne or\ncrissc ross\ncre ech\ncoonawar ra\nco ed\ncheer fully\narn dale\napp elle\næĦ Ľ\nwool rich\nvin dol\nuk scouting\nuf confox\nta ito\nt ella\nstu dd\nsi dent\nshel ve\nresver atrol\nprestige diesels\nper fi\nnew world\nna ja\nmr peter\nmay fly\nlit ol\nliberty london\nkale y\nill ya\nhill sides\nhead bangers\nguard smen\nexistenti alism\nen k\nel icious\ndew tour\ndeflec ted\nch lo\nbum per\nbig weekend\nbhu t\naz kaban\nargentine an\nandron icus\nup turn\nu sports\ntri vet\nthe heirs\nthalasse mia\nter rains\nt ates\nsul len\nri ram\nrecombin ant\nre decorate\npp ps\npenguin day\npas ado\nnottingh ill\nne ys\nmugh als\nmind map\nlu q\nken sal\nig inla\nhyster ics\nhermen eu\nheg depooja\nh te\nh li\ngarra way\nfu bu\nf age\ndi de\nday lily\ncri stal\ncraw lers\nchandler riggs\nch eni\ncampan ella\ncaip irinha\ncaf f\nbre tton\nboutique hotel\nbe swick\nav ens\nand black\nvol are\nvick er\nu ca\ntri um\ntoo ley\ntin caps\nsuper bad\nsti fling\nsteel case\nsh ero\nsea hawk\npersist ently\npainst aking\nous d\nnegr ito\nlo vi\nlaksh man\nknow lton\nhol men\ngol dring\ngh or\nevent planning\ncopy right\ncontest india\ncine phile\ncayman islands\ncaf cofficial\nbut thurt\nbre vity\nbat tier\nbas ile\nbare illy\nba isse\name al\nal mon\nï¸ıâĥ£ @\nãĥĹ ãĥŃ\nâķIJ âķ\ná´ ĩ\nÙħ ار\nwh yd\nuniof reading\nunder used\nuber facts\ntwitchplay spokemon\ntest i\nsta ite\nsne xt\nse belius\nsa aho\ns ll\nru lli\nrefu gio\nqu s\npre dominant\npr ats\npotre ro\nperiod ical\npassive house\nof acial\nmoneti zing\nmo ola\nme igh\nmandar ake\nkh ta\nker win\nkaz uya\nk tp\nissar ae\nis y\nini shi\nhelsing borg\nham ada\ngladi olus\ng ort\nfa sti\nequ an\nel fin\ndough nut\ndisappo int\ndef tly\nbook week\nblack listing\nber ahino\nbad water\nas bo\na italia\nðŁĺĺ ðŁĺį\nÙĬ ر\nwra th\nwiki how\nweb be\nvie to\nvid ere\num titi\nu mmmmm\ntrout man\nthum ps\nthisi sc\ntab las\nsub due\nstra ding\nsei bert\ns met\nreleasethe snydercut\nrech ts\npo gue\npagan ini\noo sthu\nnz xt\nna har\nmy re\nmixed reality\nknight s\nkam era\ninteri eur\ninfomer cial\nh plove\nfield museum\nfati mah\nent en\ndiscord app\ndetri ment\ncoffee addict\nchicag os\nbou cher\nboc coni\nbach ia\nave bury\narsen io\nane ury\nago toronto\nðŁĶ İ\nîĦĨ îĦĨ\nwar ung\nvo g\ntwit t\nthe strain\nsil ber\nset ter\nschi ef\nrose wood\nre sta\npenn live\npad docks\not al\no iler\nmis diagnosed\nminec raf\nle ef\nla way\nkin ley\nki shore\nkaran mehra\njail ing\nj angle\nglass blowing\nfau stus\ne bru\ndont cha\ndfb pokal\nde spot\ncutt in\nblan chfield\nbiop sies\nani zation\nalec baldwin\nal var\nðŁĶ¥ ðŁĴ¥\në £\nz au\nwood sy\nu haul\nte oti\ntaste bud\nstom e\nspr it\nso ave\nsim co\nsi dings\nrocke try\nri kerr\nplan eta\npar ivar\nofficial pdc\nnu eces\nnineinch nails\nma zzy\nlec tern\nle ffe\nke illor\nj vp\nindustrial isation\nfl cl\nde od\ncra vens\nben tayga\nbad ness\nba stos\nar bus\nak ame\nade v\n. :-)\nðŁĴĿ ðŁĴĿ\nðŁĴĢ ðŁĺĤ\nðŁijĩðŁı½ ðŁijĩðŁı½\nwhomade my\nweald stone\nvig ner\nsma shers\nsimon schuster\nsil ang\nscreen grab\nsch aden\npre amble\npan elled\np imper\nover turning\nordin arily\nmindy project\nmicro blading\nmicha ell\nmf gday\nmalvi ya\nla gos\nk ado\njer ky\nine t\nh fs\ngigab a\nfr drx\nforte scue\nflo s\nder van\ncrazyricha sians\ncheck outs\nbin ary\nbaltic sea\nandre u\na oh\nðŁĺĤðŁĺĤ ðŁĺŃðŁĺŃ\nË ¢\nü ck\nzare en\nyr dsb\nvenkai ah\nthe irc\nsi ssi\npopul ating\norange bowl\nmrjames may\nmodern ised\nly nott\nli minal\nju alan\ninter agency\nindefati gable\nhi ze\nhc dsb\nhavil and\ngd la\nfe tta\neverybody in\ner p\ned westwick\ndal it\ncu pp\ncritical thinking\nback man\nb fw\nari m\naid u\nðŁİħ ðŁİĦðŁİģ\nиР»\nzou ma\ny von\nworl dis\nwoo zy\nvi um\nurban exploration\ntour guide\ntom foolery\nti mmer\nthri fting\nt ole\nsu ke\nsto ch\nssav elives\nspoke sperson\nshear smith\nrun nin\nro skam\npra deep\npein tre\noo h\nnc ca\nme ep\nmal indi\nm ts\nla var\niv onne\nin ara\nfront side\nfanta sizing\nextrac tions\nenthr oned\nel ve\ndraw back\ncre atin\ncoral gables\nchan try\nblack ley\nbehe st\nzak ir\nver gil\nv san\nty pal\ntran mere\ntor ri\nto ques\ntl x\nther mally\nsil iguri\nsei yuu\nschwarz kopf\nsame tha\npum per\npre production\nparadox es\npan j\nok ano\nneck ties\nnaomic ampbell\nmol son\nmiddle man\nmass i\nmash ima\nmaj ik\nlur ker\nld conf\nla bo\nk fi\nh jel\ng hay\ndon jazzy\ndebat ers\nde vers\ndag s\ncut let\ncole lla\ncan wnt\nbb ctms\nb ka\narm yof\n--- >>\nðŁĻĭ âĢįâĻĢï¸ı\nëĶĶ ìĺ¤\nx au\nwould ve\nvic arious\nven tre\ntre anor\ntra pad\ntouri s\nsu su\nshorth anded\nsed alia\nr sb\nninj awarrior\nnew scientist\nnd re\nmun chen\nmahog any\nk rane\njo balert\nice gov\nheske th\ngored forwomen\nfish bone\nfi bula\nendo scope\ne gh\ncorin na\nblock ages\nart ag\naristo cracy\n. ðŁijĩ\nðŁķ Ļ\nðŁij¨âĢįðŁij©âĢįðŁij§âĢį ðŁij¦\nyn olan\nva un\nu zo\nthe elephant\nted talk\nte sty\nta shan\nta ji\nswis scom\nsun power\nscol ari\nrevol ver\nrash ard\nram blin\nra an\nprin cen\npin afore\npai ste\nonther ise\nnaz ca\nmrin poche\nmonte verde\nmas thead\nma at\nlow en\nkurt angle\njol ley\ninter professional\nguit o\ngan e\nfakel ove\neyeson you\ndo hc\ndd ha\ndavi dal\ncul tof\ncre m\nch aus\ncer ca\ncar and\nbe friends\nbbow t\narter ton\nair venture\nai der\naham sharma\naaaa aah\na ama\nðŁĺijðŁĺij ðŁĺij\nðŁĩ¨ðŁĩ ²\nz han\nwy dad\nwra sse\nwe tv\nw ente\nvel shi\nu hp\nto so\nspe a\nre invent\npun j\npott inger\nor nel\nmitsu i\nmb app\nlulla bies\nlin ville\nkam inski\nk anga\nint angi\nhpe discover\nguen ther\ngi zzard\necon d\ndi gga\nchan hassen\nben adry\nbed ingfield\nbattle ships\nauto expo\namerit rade\nãĥ» )\nâĻ¥ #\nâĢĭ :\ntar anto\nstudent voice\nst ents\nsquee gee\nson ography\nsol f\nsher rie\nsac bee\ns finest\nred nation\npy con\nprocor rpcrd\npin cushion\npersi sting\nnat con\nmvp buzz\nman ews\nla ssa\nja jaja\nill on\nha bra\ngetac tive\nfa ren\ner h\ne redcarpet\ndiabe tic\ncra vat\ncmoffice up\nchor tle\ncare l\ncar phone\ncar luccio\nbaad shah\nak ua\nwater boys\nw mtw\nv room\ntis land\nste ful\ns ÃŃ\nruden ess\nradha krishnan\npost colonial\npo sies\npit fall\nperpi gnan\nper ching\npad dington\nnfu countryside\nmanspla ining\nmadin at\nlett sville\nlam bretta\nla under\nkap atid\njour i\njale bi\ninvicta fights\nhur on\nhe seltine\nhard boiled\ngrave stones\ngel der\nfant asma\ndry land\ndesper ate\nden otes\ncolon ie\ncat chit\ncarter sville\nbl b\nbird bath\nbab ul\nath ome\nai zaw\nาภ§\nz ade\nwish youwere\nwesthe imer\nwegot this\nun tethered\nthe vikaskhanna\nten dering\nswim bikerun\nsky force\nsc ouring\nro sea\nram paging\npal co\nout pacing\noc el\nnow lan\nniall horan\nnegoti ates\nmy news\nmoment um\nmax illo\nl pi\nin my\nhplove craft\nhol loman\nfresh start\net su\ndu jardin\ndu ffer\nd acre\ncr di\ncosho cton\nbro ach\nblo tting\nbe do\nbal asu\nar ousal\nðŁĻĭ ðŁı»âĢįâĻĢï¸ı\nðŁİ¾ ðŁİ¾\nwt cr\nun reserved\nu lic\ntre sco\ntote ms\ntil den\nstylist magazine\nspor tin\nshi van\nsad af\nrow es\nraw ling\nrav ages\nquim by\nqu ary\npra ger\nor omia\nohi op\nodes za\nober oi\nnz warriors\nmor ano\nmon stro\nmign ano\nmaj u\nlit ty\nki hei\njim ny\nim thereal\nham p\nhair piece\nfi ggis\nes ong\nembol dened\ndi oni\ncu pra\ncam an\ncall ander\nbil o\namc bride\nal ow\në¯ ¸ë\nzi zi\nwreck ing\nwo bbles\nwill o\nwen i\nuniof bath\nuki ah\nto kun\nthe matt\nshutter bug\nship men\npu ddy\nprah ran\npost en\npon son\npe yote\npad don\np vs\nnad ya\nmesmeri ze\nmel ayu\nm pho\nlar ri\nkani ka\nkam el\nhipp est\ngo panthers\nfirst lady\nfarm house\ndont giveup\ndispen sation\nconcealed carry\ncitron ella\nches nutt\nbri sk\nboho chic\nbeer festival\nba rents\nauto cross\nar ndt\naccep tably\nðŁIJĿðŁIJĿ ðŁIJĿ\nðŁİĤ ðŁİģ\nyaroslav l\nx pert\nw pt\ntat u\nsteve carell\nski umah\nsal uda\nrothen berg\nrever ted\nre shaped\nr li\npeople sclimate\nnik ah\nlong wood\nlew i\nla jolla\nla chapelle\nkun da\njulianne moore\njichang wook\nholli ster\nfruit vale\nfor gave\nflat line\nfin nick\nedex cel\ndou te\nde tract\nconfec tionary\nchar min\nbru hh\nbri dgers\nbo im\nbo ggle\nbicarbon ate\nbad ami\nav aram\nðŁIJ ²\nÌ ¸\nwolf s\nwhywedo research\nu moja\nsukhum vit\nshrie king\nscoo per\npin tail\nol ha\no stap\nmur al\nmid gard\nmck ayla\nle ps\nin ad\nif pri\nhen man\ngwa ii\ngolden eagles\ngeo location\nfreef ood\nfly high\nextravag ance\ne ji\ndar uma\ncare ssing\nbook sfor\nbon nell\nble ch\nbac illus\nಠ¥\nwhoo per\nwh oooo\nvik ramad\nusch amber\nus kin\ntrojan pride\ntrack xc\ntaylor sville\nsy outh\nstray kids\nspe wed\nsco ffing\nric kety\nre map\npro polis\npo is\nplan che\non te\no bra\nmilit ancy\nmc ferrin\nman nix\nl hc\nkat ter\ninfe ction\nhun s\nguil herme\nforthe future\nfaber books\nend bsl\nedgar do\ndl x\nce sa\nbrick lane\naustrali azoo\nameli or\nagn elli\nÙħ ÙĦ\nya ounde\nvidy ut\nu mang\ntravel bug\nsur in\nsol vay\nsim plex\nshu ka\nse cord\nsa hu\nre illy\npaster nak\npag a\nol lis\nlo hud\nkum quat\nhe wit\nhau gen\ngren del\ngl k\nfo tboll\nf br\ndr acu\ndevi zes\ncur rington\nchun ky\nbrood mare\nbe aked\nbaf f\naero sols\n^ ~^\nðŁĮ ©\nìŀŃ ìĬ¨\nzildjian company\nyou ha\nx f\nva ar\nus amb\nthe fox\nsubstance painter\nstable ford\nsi mo\nred light\npat ting\npag osa\noff loading\nof fu\nmagh reb\nmadele ine\nlad der\nl alli\njun ge\nj ml\nj ago\nin alienable\nim maturity\nhell enic\nhate speech\nfrogg att\nforever young\nflan ks\ncruise ship\ncraig david\nclu tha\nchoke hold\nchick adees\ncarriage works\ncam bie\nber tin\naw it\n) [\nè ¼\nãĥ ¨\náĥ ļ\nzi us\nweb fest\nvoice mails\ntr and\nstre gis\nsla dies\nrub ino\nrafi q\nquit smoking\nmu gu\nmo ira\nmati st\nmaster race\nlin nets\nlaw l\nhead hunter\ngou ver\ngolds gym\ngames workshop\nfranci acorta\nfil son\neth at\ncro hn\ncol ander\ncar sofinstagram\nbu ta\nble st\nb wp\nas occer\nam bur\naf air\nuniof adelaide\nun cler\nu indy\ntow nie\ntin ib\nthe timmcgraw\ntau ghtme\nsynthe sizing\nstrang ler\nstac ia\nshar ry\nse ssed\nrockn roll\nre pubs\nping u\nork spolice\nor éal\nopp enheim\noo ther\no eb\nnor bury\nlang ou\nher cule\nhard wired\ngreen bay\nfor ma\nfol lette\nfiercen ess\nem elis\nden ser\nde urope\ndd f\ndan by\ndag u\ncul tist\nchil la\nbrig antine\nblood sport\namazon deals\nal bon\nÙ ij\nwor thy\ntse mrinpoche\ntool bar\ntiv itis\nti krit\nte rex\ntag es\nsouth bay\nsimon sinek\nsam bil\nrupi ah\nrough trade\nro saries\nra ffy\npoz ole\npolar ised\nphylo geny\nparsipp any\nos de\nol dro\nobey ed\nna jaf\nmy lene\nmoo sa\nmichel a\nmariob atali\njuno awards\nju ez\njab ar\ninst aphoto\ngetit live\nfoo k\nfm la\nfar rer\neviden ces\nennis cor\ndopp io\ndele uze\ncrime prevention\ncleveland art\ncam elia\nbl acking\nbe ac\nbar illa\nar rr\nand newton\nyodel ing\nym d\nvi enne\ntur ban\ntsvangi rai\ntin o\ntas chen\nsli med\nsex toys\nschneider lin\nsavethe planet\nrhett and\nrebel de\nran bu\nnau tan\nmu p\nleish man\nle jos\nke inishi\njer k\njav ur\nj pa\nimmol ation\nh wi\ngr n\nfried kin\nfc g\neuph ori\nesk en\ncypri an\ncosmo logical\ncomra de\ncold ness\nat erial\nash man\napp raised\nai ken\nðŁĩ¸ ðŁĩª\nze bo\nza hara\nwa dia\nunitedwe stand\nunderwhel med\ntouri sma\nto pr\ntam ron\nra sk\npri z\nper spiration\npann u\nme tan\nlor demusic\nki pl\nkar ia\njoondal up\nilo vic\nfor bids\nfi o\ndesro siers\ndarry l\nchristmas shopping\nbajiraom ast\nas anas\nane urin\nalla gash\nalber ton\nacos metics\nðŁıĮï¸ı âĢįâĻĤï¸ı\nðŁį µ\nç ı\nwha aaaat\nw pix\nvege tarianism\nunder lining\ntam al\nstun ners\nsquad ra\nspondy lo\nslow cooker\nski b\nsi wa\nsh aya\ns for\nru ts\nru iz\nrhine beck\nnec ke\nnam ba\nludo vic\nlc n\nkl at\njohn jay\njin go\nj fa\nij m\nha ki\ngo pi\ngir van\ngau ss\nexpat life\ndont stop\ncre denza\nco stam\ncat amount\ncar ville\ncac i\nbicic leta\nabbot ts\nðŁij ³\nâĿ¤ ðŁĻı\nâľħ âľħ\nâĻ¥âĻ¥âĻ¥âĻ¥ âĻ¥âĻ¥âĻ¥âĻ¥\ny vette\nwymond ham\nwack o\ntu ris\nthe tical\nthe offici\nstrat is\nsin clair\nsimon j\nry uji\nrest i\nra gamu\nporth madog\npage antry\nover laid\nnewton ian\nnbas ummer\nmor phy\nme drano\nmass oud\nmam aron\nlu ig\nlor can\nlongre ach\nlon ey\nlions gate\nko ga\nk lara\nir ma\nimpe dance\nhydro gel\nhidd ink\ngore gaon\nfr ink\nemb laz\ndg i\ndark fantasy\ncq uni\ncor pse\ncolon y\ncollo idal\nche shunt\nbuck shot\nboy ds\nba ab\namazon smile\nag waii\naday in\n% ]\nye ye\nwhite hurst\ntoron ado\nthaw ed\nswe eny\nshri gley\nrival ed\nrit ts\nplay date\npep ys\npemb ina\npas olini\nori de\nmit ral\nmccau l\nmar ies\nmac bookpro\njarre au\nincre ments\nhp cl\ngreen screen\ngar dn\nfoun dries\ndoo o\ndispat ching\nched in\nchar mers\nbri ano\nble ak\nbe veled\naw omen\nasi ancup\nanar ancic\nahmad inejad\nyeovil ton\nwill fully\nwater tight\nwater son\nuv acha\nstandardi sed\nsmok ymountains\nsm rookies\nsha ad\nse mble\nscar pe\nsb news\nre mmurd\nqueen sc\nphen yl\npetter sson\npatron ize\nnest ling\nmor ta\nmis ssa\nm elli\nly can\nlocal ities\njo bim\ni oni\nhome builders\nhar f\nh sh\nga sification\nfre snel\nflu g\ne ireann\ndrag con\ndj embe\ndel son\nconfig mgr\nchrist ina\nca ity\nc moh\nbusiness development\nbaltimore sun\nani um\nam adri\nwhot els\nvp debate\ntsu ki\ntra ste\ntimiso ara\nsti ffer\nstat o\nsnoo ty\nshi koku\nreggae music\nrede ye\npur cell\npro getto\npir s\nperl mutations\npar tof\noooooooo oooo\nnational girlfriend\nmontgom erie\nla bi\nkari ba\nin ard\nhar deman\nhal in\ngurup ur\ngu shue\nge stern\nfood bloggers\nen ola\ndy ckman\ndee zy\nd illion\ncon wy\ncis f\nch inst\ncb stv\nblack thorne\nbelag avi\naz lan\nay oub\nat am\nang ina\nalumin a\nðŁĴĦ ðŁĴĭ\nðŁįķ ðŁįķ\nâŀ Ŀ\nzeec ine\nz apper\nwild horse\nu play\ntt c\nterry crews\nsun chat\nspe ke\nslu sh\nse eyour\npeshawar attack\npel ted\npe tul\nomor row\nnizam uddin\nneur one\nmi dair\nmer win\nmegal om\nmc duck\nmariska hargitay\nmaine coon\nkran j\nkev ins\ninter con\nidenti fier\nhale akala\ngro win\ngre ssion\nfrusci ante\nfo zzie\neric clapton\ndri ppy\ndor drecht\ndip set\ncon nick\nban yak\nanderson ville\nan iso\nacur ry\na afp\nÏ Ĩ\nwx brad\nwd tn\nun painted\ntripp ier\ntravel addict\ntar kan\nsuper i\nspiderman farfromhome\nsi ddle\nshu cks\nsan ada\nro st\nra as\npoe ia\nov ate\nold bury\nne yo\nn é\nmor pur\nmix in\nk fox\nine tt\nin ab\nhorton works\nh va\ngo sden\nfay go\ner de\nem h\ndragon force\nday e\ndavie ss\ndark net\nclo the\nby ker\nbi ggy\naudi os\nðŁĵĪ :\nðŁ¤· âĢįâĻĤï¸ı\nÑģ к\nwhit son\nvise grad\nvel led\ntaste makers\nstefan os\nsm s\nover do\nnul l\nne wey\nmin uto\nmil on\nmakeyour mark\nmac chio\nlor in\nlor imer\nko bra\nke cil\njcp sky\nit ag\nham achi\nfree ways\nfo v\nfl inging\ndig al\nblo gg\nbel grano\nbel court\nautom ne\nar rr\nale mania\nad ow\nðŁĴĻ .\në°ķ ì§ĢíĽĪ\nyoung ins\nwith ington\nus amy\nun following\ntunn elling\ntam arin\ntag us\nsuper footy\nstrat en\nspla shy\nspec tru\nsmart doll\npo ps\nout work\nof icial\nnap o\nmir vish\nmetro poli\nme arns\nmav tv\nmarke tin\nm wal\nlevenshul me\nl ho\nknow able\nke itel\njb hifi\ninterce de\nhatch ling\ngo warriors\nfor duk\nex ol\ned to\ndreamscape ph\ndor noch\ncou pero\ncorn el\ncompetiti ve\ncomm ander\ncol let\ncla pp\ncentime tres\nca is\nbubba watson\nbro der\nbren nen\nblit zed\nber als\nay on\nau du\naru ah\nami able\naitch ison\na pop\nðŁķ µ\næĸ °\nâĻ »\nym ama\nw q\nver tu\ntribe caf\ntrans fusions\ntit es\nthereal dj\ntaitt inger\nsummar ise\nshor ts\nsbst df\nremember when\nrammadhav bjp\noco ee\nma sar\nle cular\nlar key\nking fishers\nkimjon gun\nke vor\nk voa\nhel berg\nheal d\nfor success\nen circled\ndan kie\nco fc\nchain link\ncb j\nca chet\nb ams\naustralian army\nall startrek\n¬ë ¸\nzale z\nzain imam\nz anna\nz ala\nyuz uru\nwell y\nun reachable\nu len\ntom king\ntin ting\ntin ny\ntim bre\nthe history\nsy sco\nspr itzer\nspect ating\nsor in\nsioux land\nsher gill\nshad well\nsarath kumar\nsang akkara\nraes remmurd\nquick step\nnight clubs\nmeal worms\nme ager\nle om\nit ri\nhygi eni\nhuss ars\ngoe son\ngid get\nft n\nfat belly\ned ta\nde whurst\ndann o\nda q\ncri sler\ncolumbi asc\nch inn\nbrac co\nblu emo\nbig ny\nbexley heath\nber tone\n: ..\n! ðŁĴĽ\nâģł âģł\nà® İ\nاÙĦج ز\nye hey\nwool ton\nwang sa\ntwit tter\ntul low\ntoler ates\ntik tik\nsuga red\nstar girl\nsouth wood\nskybetleague one\nsee ps\nsajj ad\nsad ar\nru ki\nri dings\npin tof\npi eta\noctopu ses\nnon invasive\nn kt\nmobo awards\nlat ur\nits whatwedo\nis of\nis ba\nij esse\nicha el\nice dogs\nhum vee\ngl sen\ngb chefs\nfrac as\nf á\nen vi\nea v\ndw m\ndori an\ndar n\ncome down\ncla si\ncib sunday\nc dot\nbu tuan\nbob weir\nam ys\nagar za\nac ri\nåı °\nãĤ¸ ãĤ§\nал ÑĥÑĪ\ny agi\nxia omi\nwizard world\nvince staples\nthe walkingdead\nso ke\nsil er\nsheff docfest\nrhe on\nretro wave\nrad ke\nr mac\npu tit\nnissan usa\nmi sper\nmawra hocane\nlindsey vonn\nlam an\nla hinch\nhu uu\nfu ad\nflam ini\nfa hy\nf cu\nde aton\ncy lon\ncr ê\nchi kun\nchi bis\ncel is\ncalri ssian\ncab ra\nbi let\nay esh\nat tock\nade wale\nú l\nz uki\nvi dal\nthur so\nsun anda\nshake shack\nrobert son\nred un\nre balancing\nrag ana\npsilocy bin\nparti r\nny te\nmer rell\nmel ane\nmatt smith\nmanay unk\nl leyton\nju mba\ngw b\nguy ssss\nflori dab\ne bron\ndout zen\ncotte sloe\ncavall ari\ncan ti\nbre ll\nbi gil\nbc ps\nba is\nah ha\n. +\nðŁij¼ ðŁı»\në¯ ¸\nÙĨ ج\nyak ov\nword camp\nwe ssels\nuk hashtags\ntwo some\ntrac ee\ntag le\nsun bury\nspin ney\nsi mas\nshar at\nsep tembre\nran some\nplexig lass\np ng\nni bali\nmor tel\nmahar ani\nkur nool\nkr qe\nkl u\nkick backs\nket u\nkaran singh\nkar tini\nkaleido scopic\ninternational womansday\nice e\ngre ll\nge tolympus\nforthe cure\nfc s\nf ends\nev angel\nestu aries\nchro med\ncer ny\ncatalo gued\ncanad as\ncab are\nbri mley\nb ty\nacom ms\nâľ Ĥ\nzo vic\ntar ia\nstereo gum\nspace balls\nsingle market\nsi wan\nsatyar thi\nsar rain\nrela is\nre stur\nparachu ting\npalom afaith\nnike id\nnau ts\nmal ti\nliber tarianism\nleu co\nle mi\njung frau\nijesse williams\nfri dakahlo\nfawl ty\nedint fest\ndeli verer\nbre ra\nav x\namin aj\nðŁĺģ @\nçĻ º\nãģŃ ãģĵ\nØ ¬\nалÑĥÑĪ ÑĤа\nwal led\ntribu taries\ntobias menzies\nther lands\ntax co\nsc ie\nrepri manded\npud gy\npower tools\npolyglo t\npoll ster\npe les\np soe\nor lean\nmoroc can\nmen no\nmamaron eck\nloril oughlin\nko kop\nkeepthe ban\njulian castro\nhand hel\ngull wing\ngro k\ngi k\ngen na\nge ir\ng ddr\nder ringer\nd sei\ncre sc\ncor vet\nclavic le\nchristma slights\nchhat rapati\nchap ters\ncan iglia\nbutt ress\nbhu sa\n( <\nราภĦา\nyoung justice\nthe athletic\nsuccess story\nso pot\nsav y\nrosne ft\nri pert\nrhi mes\npw me\npol lok\nnirup am\nna deau\nn saa\nn eng\nmu sprime\nmelan in\nmag ners\nkhrush chev\nintrac ranial\nhy ori\nholiday makers\ngoe bel\ngh el\nfour somes\nfal well\nfa sia\nev ski\ndw g\nconing sby\ncinemathe que\ncbstv studios\ncardo zo\ncameron mustgo\nassassinscre edodyssey\nangeli ka\naly te\nðŁĶ ħ\nðŁIJ¾ ðŁIJ¶\nðŁıĨ âļ½ï¸ı\nðŁ¤¦ ðŁı»âĢįâĻĢï¸ı\nà¸ŀ ร\nw end\nviv ah\nure thane\nun funded\nul ar\nu ol\ntur bans\ntal avera\nta di\nsynchron ize\nstil well\nreve ille\nre ye\np co\no ac\nmono gamous\nlove bird\nlav any\nlang ar\nkhair a\nhay lee\nhair by\nfood borne\nfix the\ndru ck\ndocu series\ncon fed\ncity hall\nchu bby\ncalf skin\nbroad gate\nbit urbo\nbe eline\nbarr head\nbar ti\namar th\nãĤ« ãĥ¡\nyoucan doit\nwh acking\nvrin da\nvam si\nunra veled\nty kes\ntoy z\ntoron tomar\nti zing\nthor sten\nthe gef\nss bu\nsou dal\nsab tv\ns only\npollu tant\npedd lers\npe geeks\npas qua\nout fitting\nnup es\nminute beachclean\nmb ar\nlin oleum\nli sk\nlar acroft\nkel apa\nkab uto\njun ji\njel ani\nhome depot\ngla swe\ngla dio\nger ber\nfollo will\ner ato\nene ws\neager ness\ncultiv ator\ncir c\ncar lil\ncap rio\nc ge\nc fg\nbrand in\nblu eraiders\nbin das\nbar g\nattribu table\nðŁIJij ðŁIJij\nðŁIJ¢ ðŁIJ¢\nwal singham\nw da\nvy pe\nsushmit asen\nsp ana\nseven th\nsam path\nrhe ma\nparis nice\nneal on\nmu lat\nmbapp é\nlet ons\nle tra\nki sha\nkeye tv\nkeinishi kori\nk hari\nji mo\nhonor ably\nggg boxing\nekur huleni\ncbc north\ncathay pacific\nbu ba\nbri die\nax y\nani st\nandre scue\nameric ang\nðŁİ¤ ðŁİ¤\nwel ds\ntop con\ntame impala\nstock hol\nsta edt\nsa em\nrin os\nreligi ou\nrekind ling\npr an\nporthar court\nplay az\nphoto de\nopp er\nnl tweets\nmest alla\nmean ey\nku rian\nivy league\ngr illin\nfe kir\ndig itech\ndau x\nchro mic\ncap s\nbun dle\nbehavi our\nbas so\nbang i\nar kle\nagric ole\naer is\nðŁıĬ âĢįâĻĤï¸ı\nðŁĮ ¯\nâĻ¡ ~\nwell park\nwat tage\ntor menting\ntaun ton\ntablec loths\nsub machine\nsu eur\nsonus ood\nsate en\nsam claflin\nsachin pilot\nro p\nre plant\nom gggg\nod do\nnor dea\nnev ins\nnashvillec mt\nmelbourne city\nmari ucci\nmangal uru\nlind ell\njake paul\ni abc\nhurt ling\nhood lum\nh re\ngreek life\ngrapp lers\nglobal goal\ngaz ed\nfranchi sement\nfo glio\nel ms\ndelo ach\ncu uu\ncoupero gers\ncommercial property\ncol um\ncanber ra\nbob tail\nblan kie\nbet victor\narrow verse\nanni ston\nzu bin\ntv onetv\nt mea\nsme thwick\nsme e\nsmall world\nskyl er\nrose mcgowan\nrit ers\nre productions\nphleg m\nnonleagu ecrowd\nnandam uri\nnab ila\nmid shipmen\nmal ham\nlive chat\nlar ain\nl ancing\nki b\ninadver tent\nin life\nhigg inson\nhandsom ely\ngreen lee\ngoo dy\ngo tz\ng posers\nfd m\nencyclo paedia\nen co\ndoug benson\nd tw\ncon tending\ncircu ito\nchar ly\nchaffe y\nball room\nau ster\narch ies\na him\n££ £\nye oman\nx ls\nvo da\nun conference\ntu rok\nto dt\nthro yd\nthe moon\ntal ai\nsymbol ically\nswar agini\nsuffo cated\nsuccess ors\nstream lines\nsh aked\nsei fert\nri so\nprovi dence\npric eline\npolicy making\nply mpton\nphin ney\not ar\nof ootball\nmuch h\nliving room\nku cha\nintegr ators\ngreat dane\ngg ah\nethi er\nel roy\ndra is\ndr mike\nde seo\ncopen hagen\ncaric aturi\nbill kaulitz\nbenadry l\nben thic\nbat as\naminaj mohammed\nys i\nyaa as\ntø p\nswoo ped\nsun shade\nstan tial\nshre ve\nsel wood\nse hr\nsad dening\nri op\nrep elled\nraj ak\npromis cuous\nprioriti zes\nplatte ville\nncaa season\nnbasummer league\nnak shat\nment on\nlie der\nkare t\nka al\njav ad\nital ics\nid sa\nhan bury\nfifa u\nfass binder\ndj paulyd\ndispon ibles\nch ex\nc wi\nblin ked\nbio hacking\nas ur\nâĿ ¥\nwh ky\nuttra khand\ntri bble\nth ak\nta ik\nsin city\nsco ffe\nsaul nier\nriot ous\nric oh\nraw k\nrac s\nolympic torch\nnovosel ic\nnews beat\nmit ter\nmir field\nmay bin\nma har\nlymphe dema\nlove good\nlimb ing\nlemon twittor\nkle en\nk sat\nimg models\nhil aire\nha spel\ngel ert\nffr f\ndo se\ndick enson\ndicho tom\ndel bert\ndc tech\ncommi sion\nc slewis\nb ink\naur yn\nar ica\nabyss inian\nðŁIJ ĵ\næ ¢\nwicom ico\nw bls\nvesti ge\nupad hyay\nun suk\nty pist\nti en\nta kuma\nsoap awards\nshi els\nsaucep an\nsalt ine\nrut land\nre eland\npre dates\npp o\nplac a\nos asuna\nmill town\nmari huana\nmar ro\nkush alt\nkis a\njohn j\njess op\njailavak usa\nino ble\nillumin ate\nheav yequipment\nh ry\ng th\ndim ly\nde sales\nchin atown\nbier stadt\nbeat les\naser rano\nab ly\nðŁıĩ ðŁı»\nye eye\nvid alia\nu ip\nty ron\ntrump ism\ntrouble makers\ntotal itarianism\nthe arjunbijlani\ntermin al\nted med\nsp ack\nscon ces\nru ber\nrapp elling\npu ppers\nplan tronics\npay s\nmrs funnybones\nmodu lator\nmill y\nmandi ri\nm smar\nlaksh mirai\nkam ba\nkal lie\nka un\nk ome\nil ab\nheat sink\nhawk ish\nhalf moon\ngir ders\ngand ang\ndi vis\ndesig ni\ncl dr\nci aran\ncelo teh\ncamp agna\nbestofthe best\nbar ilo\nban dido\nb movie\na ala\nðŁĺį )\nðŁijĪ ðŁijĪ\n ¬\nwil bert\nwi at\nviking river\nus ine\ntou cher\nt ills\nsque amish\nspe e\nshapo valov\nsgo ing\nsaty agraha\nquin cey\npryn ce\npac i\nnew mont\nmis ing\nmi gan\nmetall ic\nmelk sham\nmahon y\nluc kier\nlets goo\nlab h\nla vey\nl ton\nke men\njabber wo\niphon ec\nilay araja\ngi vings\nfatbelly bella\never rr\nengv sl\neli ze\ndre e\ncorr ales\nconjunc tivitis\nchang kyun\nbunde swe\nbis set\nbio chemist\n++ ++\nðŁ¥ Ķ\nÛ Ĵ\nı m\nusp hl\ntow cester\nsc ircle\nsc apa\nsam yang\nro shi\nrin jani\nrho des\nraj cheerfull\nprojec tiles\noul ster\no hai\nne ce\nnav jot\nnat suki\nmark ronson\nmad dog\nla hori\nke agan\ninter woven\ninter league\ni ban\nhof stra\nhi k\ngoleaf sgo\nfoli gno\nex y\nem r\ndu me\ncyber jaya\ncrew man\ncor ben\ncli ma\nchapp aqua\ncel ly\nbo ya\nbi fa\nbank s\napo lis\nan kar\nwest cliff\nweare thepeople\nvo il\nuygh urs\nur kin\ntt le\ntaras enko\nsilver plate\nsign ment\nshin obu\nset ts\nsanjay uvacha\nrefor mist\nor puw\nnuev os\nnet care\nna thi\nmorri sey\nme tuni\nli vy\nlaverne cox\nky te\nkir kin\nkei ji\nit sp\nirr ationally\nin africa\nheter onor\nhapp pp\ngram edia\ngoose berries\ndu pre\ncu bus\ncandidat ure\nca eli\nayotzin apa\nas adu\nar os\nanderson paak\n๠Į\nwar n\nv cats\nunder pins\nu bm\ntj maxx\nthir deye\ntele graaf\ntassi e\nslug fest\nsla de\nsh eng\nrolls royce\nregi ments\npheno types\npetti bone\npalin dro\npabst blueribbon\nold car\nnt sa\nnepen thez\nnat ali\nmo tom\nmal ky\nla peer\nkreuz berg\njyo ti\nit rtg\ninvigor ate\nhoney ed\nf ti\nemory university\nduck man\ndoo dler\ndirec tx\nding le\ncloak room\nchat swood\nbur russ\nbeli al\nanan si\nam s\nak k\nack ley\n:) )))))\nì° ¨\nâļ«ï¸ı ðŁĶ´\nâĹ Ķ\nye tte\nye ssss\nx us\nw sm\nvic en\nv um\ns link\npuri fies\npleas an\nnic olo\nmin uten\nmaker faire\nko blenz\nisi baya\ninter activity\ning club\nhindo stan\nhand prints\ngrac eland\nglee ful\ngi ff\ngh id\nfather ly\nequ alled\ndissimil ar\ncow art\nbra sov\nbou te\napol los\nangle sea\naf cw\nðŁĺĺ ðŁĴĻ\nunder utilized\ntosk ana\ntimbur ton\nsuk kot\nstu por\nsou s\nslu t\nsee mar\nr mi\nqueen sboro\npur pler\nprophe tess\np tion\nor ical\nmou les\nlun den\nlittle wood\nlindsay ell\nlid ded\nlangui shing\nkel o\ninfec tious\nhot box\nfran sisco\nfck in\nevil geniuses\ndrum kit\ndrug by\ndar mian\ncop se\nconson ant\ncann elloni\ncan tera\nbl ore\nbab asaheb\n** *\nðŁĶ´ ðŁĶµ\nðŁIJ¶ ðŁIJ¶ðŁIJ¶\nwaig uru\nw no\nvincent e\nus rowing\nun m\ntoron tor\ntill and\nspra yers\nsik ora\nshare goodness\nsal ama\npi galle\npe co\nofficial slc\nnoi sey\nn aci\nmus ick\nmo en\nlu dgate\nkc chiefs\njit tery\ninterior styling\ninter lo\nib d\nhum safar\nhick am\nher riman\nharvey nichols\ngu ttenberg\nfire fight\nfa hr\nemi lee\neliza jane\ndoo han\ndisney onice\nder showitz\ndenne hy\ndecep ticons\nd ml\ncn ty\nclim ited\nchess board\ncapu ano\nbol as\nbirmingham mail\nbird fair\nback lund\nb anca\napu lia\nanou shka\nago ddard\n. ðŁĺĤðŁĺĤðŁĺĤ\nðŁİ¶ #\nãħ¤ãħ¤ãħ¤ãħ¤ ãħ¤ãħ¤\nâĸ «\nठ¼\nworka holic\nvo xbox\nu daan\ntur ds\ntu ma\ntro tz\nsuppor tn\nstock photo\nsp itt\nsi se\nsawyer frdrx\nroad tor\nre takes\nrapp ahannock\npicnic king\npara pet\np nas\nnordi ques\nni ente\nmil agro\nmarit za\nlu ces\nlossi emouth\nle ef\nkyo ko\nko ppel\nj lo\ninfini x\nhu bei\ngodz ill\nequality forall\nen gulf\ndu uu\ndopp leg\nd als\nbro ss\nbounce back\nbi weekly\nbh x\nbab ar\nan gra\n. ",\nðŁĴĥ ðŁķº\nìļ© íĻĶ\nwel kom\nw ya\nvar ghese\ntri anon\ntime smag\ntib betts\ntherealluke vans\nten sor\nsel vam\nsch open\nri zzle\nre invest\npi ya\nparasit ology\none one\nom gom\nneural gia\nnat omas\nmini game\nmark warner\nlocal ised\nll l\nkat vond\nimmigr ant\nho ho\ngra ig\nfreak ish\nfor mayor\nfif pro\ndra wl\nart sy\nap w\nal tec\nacron is\nãĥ¼ãĥ ł\nس ت\nyggdra sil\nupper classmen\nun mask\ntro ph\nsk itch\nsho shone\nscrib bler\nroof ed\nre ining\nphill is\no zy\nmur ty\nmind storms\nliter atura\nleft field\nl tb\nken ichi\nk atta\ngal aga\nfrankfur ter\nfr t\nfing az\ndown plays\ndhi kr\ncru s\ncon ning\nchad li\ncall backs\napostro phes\nadorn ment\n? ðŁĺĤðŁĺĤ\né¦ Ļ\nza ade\nyeswe can\nyellow claw\nws bradio\nwhel don\ntori als\ntip is\ntestar ossa\nsweden in\nsu meet\nsl sc\nred skinst\nre agh\nnyc schools\nmulti racial\nlu tron\nji va\nhand brake\ngo tch\nglo bies\nembroi der\ne iner\ndisney side\ndarke st\ncurragh race\ncur ative\ncomedy night\nchu chu\nbur l\nbry on\nbirch all\nbar wick\nb nr\naw y\nan tro\nameric ana\nall ers\nðŁİĤðŁİĤ ðŁİĤðŁİĤ\nðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸\nye aah\ny ancy\nwater deep\nun washed\nuk as\ntri alist\ntakor adi\nsun tec\nstanford med\nshr iner\nsa en\npg dm\npakv sl\nof r\nobrig ado\no tho\nmini mums\nlangh orne\nlam m\nksen ia\nk and\nje h\ninyour phone\nherman as\nhan sen\nguadal canal\ngru mbling\ngor dons\nfriendshipin apicture\nflabberga sted\neye witnesses\neun jung\ndrake bell\nden ote\ncolle yville\ncloud foundry\nche sted\ncamar go\nba de\naren ado\nalber tine\nair soft\nç Ŀ\nà¸Ļภ°\nଠ¾\nyear ns\nwire grass\nthorough fare\nter idge\nsco ped\ns bay\nrigo letto\nride out\nreel z\nquin ton\npo ston\npa vi\nmay b\nmar ae\nkh lo\njun kers\njc de\nj evon\nili ans\nid fa\nhub cap\nhop kin\nhig don\ngiac chino\nexter nal\ndn n\ncru iting\ncla wing\nci i\nbrav ura\nbra z\nbeat a\nanti fungal\nðŁĺ´ ðŁĺ´\nðŁĴĻ ðŁĺį\nzay to\ntomking tk\nthi am\ntheri ver\nstu ber\nstrang ford\nscent sy\nru la\npolar bears\npen ess\nno wor\nmarc maron\nmar com\nmaker spaces\njor a\njohnson ville\nje te\nha ben\ngreen army\ngan on\nfox hound\ne gged\ndo logy\ncer ys\nbeat itudes\nbag i\nba sia\nati eri\nacne studios\nðŁį¾ ðŁį¾\nâĻ Ķ\nvampi rella\ntri ver\nth of\ntee j\nsuper cool\nstabil ise\nsit down\nsan ju\nsag an\nsa cher\nram bla\nrag thakur\nra damel\npuffer fish\nplay school\nor pen\nmel lows\nlong ingly\nlin ney\nla xton\nk cp\nhigh five\ngeom atics\nff vii\nent as\nched dar\nch azz\nceri dian\ncardio logists\ncap size\nbrew dog\nbli the\nbecc les\nas ko\nacas sandra\nyor o\ny im\nx lf\nvijay television\nverte brates\ntrans net\ntrans its\ntik ki\nthe ahl\nstar lite\nsi achen\nshe reen\nse el\nsaty ajit\nne ena\nmam moths\nkingsof leon\nkat rine\njit ter\njd morgan\nhomo log\nhl th\ngro en\ngetz laf\ng town\nfluffy basil\nfin ing\nex ofan\never rrr\ndu ffy\ndra bble\ndis arming\nde mian\ncre oso\nchro mia\ncasi ancup\ncapit ano\ncalgar ians\nc ve\nberl anti\nbehavi oral\nbacter i\naw ani\nantic o\nak oz\nachi o\nac aster\nðŁĵ Ĵ\nà¸Ńภļ\nyar borough\nwo je\nwit che\nw mp\nv ire\nta kings\nsp ats\nrise up\nquiz master\npah rump\nnu mp\nnikol aj\nlu ar\nkabo bs\nii hs\nhorse sho\nhi spani\nfoun t\nfl x\nfif tieth\ne gel\ncu gat\ncruci ble\nclose up\ncate ch\ncail lou\nbott ura\nbla ster\nbally mun\nas olo\narray it\nallo gic\n... âĿ¤\nðŁĺĤ ðŁĴĸ\nðŁİħ ðŁİħ\nyyc traffic\nwe were\nunic redit\nun ashamedly\nta ppa\nstre at\nsar oj\nroo ve\nrhe um\nred der\npir amal\nohio statefb\nna sik\nmo tha\nmac ke\nlo han\nlapd hq\nip n\ning al\nhyper local\nhot point\nhoney pot\nfli fe\nfel ine\ndesper ados\ndark stalkers\ncth sfb\nch ora\ncas ale\nban ar\nand ering\naim high\nadrian aci\nadrianaci oci\naan am\n!! ðŁİī\nðŁİī ðŁį¾\n⼠³\nvango gh\ntry p\nst ice\nst f\nsouth bend\npl ats\npare sis\no sw\nmon tra\nmc on\nlac ri\nkho ff\ninevit ability\nhigh speed\nhe ena\nhand rails\nfor tresses\nfi eg\nf wb\nellen sburg\ndre th\ndil g\ncyst itis\nchri sta\nchauffe ured\nbay lis\nahmadi yy\naerop lan\nðŁĩŃðŁĩ ¹\nر ÛĮ\nwindy wilson\nwho doyou\nwar by\nunfur ling\nun ia\nto action\nthrift shop\nthe fat\nsubstitu ting\nsmik kelsen\nshape ways\nre organize\nre appearance\nrad as\nplanet ary\np fg\noosthu izen\nnaz aire\nnam u\nmoor ings\nmen a\nmar jan\nma kha\nlin dau\njay de\nisle worth\nhope lessness\nhol combe\nhel wani\nflipgrid fever\nenv hist\nele f\ncuteness overload\ncreatin ine\nbun c\nblack sea\nbhumi bol\nbeef heart\nban ta\naz evedo\nanton off\n!! <\nâĸ« ï¸ı\ntouri stic\ntol man\nsyn ch\nriver land\nrhettand link\nover heat\nod awson\nmul gee\nlong form\nku k\nintermedi ates\nink scape\nin habits\nici de\nhi stop\nfinancial review\nef teling\ndoor knob\ndent su\nde compose\ncur ritu\nco to\ncamp in\ncamar ines\nbt fc\nbrendon urie\nbrea keven\nbo iii\nbe ker\nall sven\nabhiman yu\na iders\nx li\nusa wrestling\nuni west\ntuscu lum\nthar pe\ntam ra\nstarbuck suk\nsque aker\nscor n\nsa iga\nra shed\npra g\npla ice\npe ppe\npat audi\nnr lgf\nnoplacelike home\nmir ra\nmichel ada\nmelaniec music\nlom u\nlive mint\nla fontaine\nke at\nje mber\nit ai\ninter nationalist\ninst ago\ni etf\nho gar\nher an\ngonor rhea\ngiam atti\nfa jar\nder mpath\nden tro\ndal y\nco en\nbigg a\nanci en\nâĢĭ #\nyo enis\nwomenwho code\nwin elands\nwill mar\ntu gging\ntoo too\ntai ji\nstru e\nsos borne\nsk h\nring thebell\npro wein\npr out\nplay boi\npe on\npash up\nnik off\nmo town\nmo hini\nl alu\nkar ne\nkal ash\nk rsna\ninstitution alized\nhay le\ngan ito\nflesh light\ness en\ner ring\ndram atic\ndn as\ndi ski\ndarlo biz\ncrack nell\ncatholic stl\nbsy bjp\nbra ylon\nayian apa\n(^_ ^)\nâĸ¬âĸ¬âĸ¬âĸ¬ âĸ¬âĸ¬âĸ¬âĸ¬\nà¹ģภ¥\nwyck off\nwu er\nunison tweets\nthermost ats\nte stu\nsupersoul sunday\nst annis\nrim fire\npocket book\npo ko\npeace haven\nmusic life\nmultic hoice\nmi kol\nmari os\nlovel ocal\nlake district\nla ib\nku mail\nkis smy\nhero ileague\ngot thard\nglobal edmonton\ndevotion als\nder ik\nd wane\ncrimin alize\ncos entino\ncoach man\ncer rado\nbu mber\nbo sse\nanimal lovers\nagen arian\n- <\nðŁĵļ ðŁĵļ\nà´ °\nzig gur\nwinx club\nwh yyyy\nw day\nvibr ato\nten news\nte stino\ntaji k\nt sp\nt intern\nsi sal\nrece de\npo vic\nnew product\nnew life\nmelt water\nmanag er\nmalacañ ang\nmake peace\nlaz are\nl our\nkanhai ya\nk ø\njor ah\nholm del\nho wa\nheight en\nhead sup\nhandsome st\nhalei gh\ngreen bank\nfo st\nen zo\ndowning town\ndat sik\ncu zco\ncraigh ead\nclare balding\ncal poly\nbrac o\nbiglittle lies\narte sia\naf fluence\n! ðŁİĦ\n! \'"\nðŁĽį ï¸ı\nðŁij¨âĢį ðŁİĵ\nzz ang\nvulgar ity\nvom usic\ntattoo artist\ntab b\nsos venezuela\nsomerse twt\nshre dders\nsan ches\nrandom izer\npar tri\nover draft\no shima\nn aren\nmc ateer\nmay ers\nlund berg\nlo ook\nkni pe\ninthe sun\ninstin ctive\nin got\nilm fest\nilk ley\nhoo ke\nfer ne\nevapor ates\neno y\ndash ner\nclamp down\nchil a\nboys and\nash mo\nantico agul\n": {"\n! .....\nwre xham\nwr o\ntop sham\ntil son\nthe istic\nstr unk\nstell aris\nsn app\nscrew sc\nsay hername\npi thy\np alli\nosoph y\nnor agami\nne phil\nnatural history\nmusic ales\nmls allstar\nme ant\nmari ju\nma ree\nlovel ock\nlionel richie\nlawrence burg\nkl int\nk offi\njo is\njair o\nith as\nis v\nine twork\nin defensible\nill aria\nhy men\ngunder son\nguan ac\ngru bbs\ngorge ou\ngolf week\ngo hil\ngar ces\nfree tibet\nfol a\nexor c\nemer aude\nel abs\ncurios ity\nchar isse\ncay la\ncan avan\nbrindi si\nare view\nantof agasta\nam obile\nah saa\n:\' ))\nwit tman\nwhi anw\nwhianw amos\nwatch band\nthe whisky\nstone leigh\nsher wani\nsand pit\nsam ira\nru ane\npmo i\npicture perfect\np q\nmoor gate\nmi kare\nmass af\nmandel brot\nman nie\nlong bow\nhel mond\nha ero\ng ning\nf áil\nel mar\ndo tus\ndish ear\ndi endo\ncron ut\nchol la\ncentime ter\nbro adest\nbrigh am\nbor rower\nbodybuilding com\nback ward\nak ah\nâĿĹï¸ı âĿĹï¸ı\nzor ba\nww mt\nwheres mum\ntru enorth\ntranscrip tional\ntan kian\nsi mian\nregin acassandra\npre cept\npin cus\npat ella\nnbc dfw\nmy boy\nmarco polo\nkar ylle\nj di\niv or\ni eri\ngood nigh\ngo el\ngeelong cats\nengel bert\ndin ny\nde ary\ndae jun\nctvo ttawa\nbur khart\nboser oy\nbel haven\nbe lew\nbbc theoneshow\nbarbo za\naston ish\nari f\namp ong\nab sten\na hou\nðŁ Ħ\nyouknow you\nye pp\nwy c\nw kn\nv anni\nun made\ntot ton\nthre ef\nthe script\nsouth am\nshepher dess\nset tee\nri fts\nport adelaide\nnocturn al\nn ly\nlive s\nkish or\nissu u\nin um\nhelf rich\nhay wire\nfe tti\nfau stino\nes ma\ner mine\nend tb\nel ake\ndwi vedi\ndani pedrosa\ncross road\nco lima\ncarac ol\nbow a\nbbcradi oulster\nbab bitt\nanesthesi ologist\nam illion\nair race\nabu elo\nab rand\nðŁĵ ¼\nب د\nyan mar\nwhite people\nwe ts\nwal do\nw sh\nvoting rights\nu albany\ntiny house\ntar zana\ntai ba\nswitch back\nstitt sville\nson ico\nsi v\nserv icio\nschopen hauer\nronit boseroy\nril o\nre aps\npopul i\nplayadel carmen\nplastic ine\npaladins game\npal ang\nover reacting\no ie\nmoore music\nmen lo\nmaxi me\nkuruk shetra\nkathr ine\nka ve\nk ary\nhu ynh\nhe igh\nha rena\nen daal\neli ya\neclip sing\ncruick shank\ncra dock\nbody builders\nbas anti\nanti bullying\nali da\nab ac\n, ....\nðŁįª ðŁįª\nðŁ¤· ðŁı¾âĢįâĻĢï¸ı\nภį\nyello whammer\ny van\nworld kindnessday\nvisit greece\nu men\nstraw bs\nstom ps\nstar light\nsn k\nsign board\nshi man\nsham anism\nscav ino\nrue ben\nque ira\nold house\nodi ous\nny on\nlam pe\nes of\ndur g\ncripp les\ncra ggy\ncol inas\ncnn sotu\nbraver man\nbil ton\nback yards\nb ffl\namp abay\naf front\nðŁIJ Ĺ\nå¼ ł\nze ig\nxx xi\nwo v\nwi geon\nvid ler\nvi pin\nver acity\nunder developed\nul ata\ntu tel\nto omer\nthor burn\nstar cast\nspo iled\nspear man\nsound z\nshe etal\nrever ting\nparaphra sing\nneva eh\nmati es\ni quique\nhy p\nhi ragana\ngiuli anarancic\ngigaf actory\nfree sia\ndl day\ndance party\ncrystal healing\nchit r\ncal stat\nboy den\nalad din\nak shara\nabc family\na edes\n) =\n( ):\nyan k\nwatercolor painting\nus afa\nuniof york\ntwitcho sf\ntoronto argos\nthe brian\ntad caster\nsu kumar\nstv news\nsper mum\nre vi\nra ssa\nprogre s\npri sh\npon dered\nophon es\nnom ar\nnews reader\nnat ic\nn ll\nmil ik\nmil ers\nmeni fee\nleg co\nl dot\nki djo\nhor ley\ngulf of\nfi shin\ncycli sme\ncro re\ncat dog\nbu sing\nbla q\nbike dc\nbarra gan\nane ously\nali zed\nðŁij¸ ðŁı¼\nе ÑĤ\nwol ford\nwarrior cats\nw dd\nthur low\nthor sday\nter mine\ntepp any\nsouth devon\nsky football\nscraw led\nol k\nocr acoke\nobjec tif\no thman\nmu gger\nmean er\nkay e\njoy division\njayson dmx\niz awa\nir vin\ning olf\nhun ker\nhuis man\nho bb\nha py\ngo jacks\nferry man\nfern ández\neth no\ndon aire\ndeplo y\ndan neel\nco sette\ncli mactic\nceph aly\nbro chu\nbon ec\naventu ras\nap mas\nal mira\næ·±å¤ľãģ® 羣åī£ãģĬçµµæııãģį\nಠª\nwhit comb\nwest lands\nvar ina\ntx la\ntit el\nswee ting\nsun cor\nsper ling\nsmith town\nshoe shine\nsg news\npublisher swkly\nper ver\np nd\nny ssa\nnie man\nngr senate\nmonad nock\nl pl\nk ve\njust acard\nindi ra\nhygieni sts\nher mand\nhar dison\nham elin\nha agen\nguardian news\ngrass root\ngn ine\nforthelove of\ner ight\nemblaz oned\ndr ons\nconfront ations\ncell ino\nbar aboo\n. ":\nìłľìĿ´ íĻ\nvibe fm\nvi krant\ntu tt\ntorch bearer\nt ve\nsw elled\nsmo kie\nskate boarders\nshan ties\nsean astin\npaw ty\now ay\nnis sen\nneuro imaging\nmusic lover\nmor ais\nmk v\nmi kan\nmc v\nmar j\nmaison ette\nlt p\nkn x\nkagu ya\njames roday\nhistor io\nherni ated\ngo tg\nfur ore\ndisser tations\nchar la\nbureau crat\nbox score\nbh cosmetics\nall on\n" }\n! \':\nðŁĶ Į\nzam brano\nymm fire\nwitch hunt\nwhoo pee\nwhang arei\nw pf\nvs was\ntra ppers\ntom mi\ntiger nation\ntere za\ntab by\nstevie wonder\nsi uc\nsen si\nprilly bie\npp fa\npoindex ter\npnas news\npern icious\npar men\noba id\nmun ich\nmu di\nmorpur go\nmonc ton\nmi red\nlicen see\nkis sables\nkaransingh grover\njosef newgarden\nj ke\ngif ts\ngad sby\nfle shy\nfalse flag\nf online\ndel ac\ncim goi\nchut z\ncattle ya\nburn notice\nbulldog pride\nb dx\nar ula\nar q\nar da\nanwar ibrahim\n^ ____\nðĿIJ¢ ðĿIJ\nìĿ´ ëĭ¬ìĿĺ\nâĻ ł\nâĢ Į\náµ IJ\n~ .\nwood sman\nw sav\nvel t\nu dd\nthegame awards\nsolo ing\nschlumber ger\nrox ana\nquaker town\nqu eda\npan tan\noz awa\nner vy\nmik ita\nmi jas\nlang lois\nkare lia\nhutch ence\nempire magazine\nemeraude toubia\nel ad\nbott oming\naven u\narm strong\nand ing\nand az\nðŁij¼ ðŁı¼\nãĤ ļ\nà° Ł\nzucker man\ny th\nwolve sup\nwinsor andnewton\nw ati\nso ane\nsin ensis\nri les\nre a\nra wr\npub schools\npor o\nostric hes\nok onom\noceano graphic\noc cer\no oms\nnovo sti\nni dh\nmcmur try\nmake re\nlet tieri\nkur upt\nkil winning\nimp ure\nha jar\ngun ya\ngit lab\ng shock\nedo ardo\ndam p\nchri sle\ncause were\ncatahou la\ncar pus\nc pe\nbull horn\nbeck erman\nbath es\narto flegends\namandak nox\nad ur\naber avon\nç ³\nyu cat\nthorpe park\nthis way\ntam p\ntai ka\nshu ga\ns bag\nr ving\npre forming\nof amily\noak leigh\nno fly\nne ven\nmu ld\nminim ising\nlea key\nlaw es\nky w\nkok kin\nkar nak\nk lg\njessic ani\nhel ms\nhar ini\nhar ika\ngur preet\ngun rights\ngrapp ler\neil idh\ne one\ncon oc\ncasser oles\ncarol kirkwood\nbost wick\nbor laug\nbig boy\nbell ing\narmb ands\nalamo gordo\n!!! :\nðŁĩ¸ðŁĩ ®\níĺ ķ\nwas sail\nty vm\ntu la\nten uous\nsu pr\nstr oup\nsoc sci\nsave timeless\nsau ti\nri al\nre positioning\nre dra\nrd pro\nogun quit\nober hausen\nnas p\nmtv awards\nmo fa\nmen shockey\nme to\nmar cha\nmar ah\nlyric ism\nke qiang\niy ya\nhigh key\ngreen ies\ngrange mouth\ngeology page\nf hl\nde march\nconver tibles\nbron chi\nbilas pur\naz rael\nann ular\nan jana\nambi ent\nalbu feira\nìĭĿ ìĬ¤\nw df\nviter bo\ntesser act\nte ad\nsubsidi ze\nspring fest\nsafe house\nrich y\nre em\npleasee e\npin ko\npen na\npe cha\noften times\nnuev as\nne id\nn ary\nn andy\nmi sprint\nman illa\nlav atory\nlakme fashionwk\nla sci\njy p\nit ai\ninternational isation\ninduc ting\ngom era\ngeorge strait\ngang tok\neri g\nenz ymatic\ndog mom\ndi ppers\nc ti\nbreak beat\nbeau teous\nbal eares\narch on\nappalachi an\nak is\n*-- *\nâĿ Ľ\nwhit ep\nwhatsthe difference\nwel ty\ntipperary gaa\nthe boyz\ntere sted\nsvit olina\nsuppor tw\nsou ped\nse ann\nred hair\npino chet\noxi des\no dc\nna hi\nmusli mb\nmein l\nmcman aman\nmary borough\nmanish paul\nleft behind\nko zak\nkil mister\nkamp en\ning don\nic cb\nhoar ders\ngoss age\nflu min\nfel is\nebb w\ndel fin\ncolumbu screwsc\nbum bum\nb ents\nac larke\nðŁĺĭ #\nymoun i\nwater borne\nwalk den\nva is\numb ridge\ntraste vere\nthey come\nthei et\nten zing\nta as\nscriptw riter\nsam ra\nrah way\npsycho billy\npolice dept\npi pped\nnc cu\nmotor trend\nme shed\nmargre the\nmar wah\nma tha\nly re\nlinna eus\nlibre office\nke vents\nir raw\nianu ragthakur\ni vert\nhe ren\nhan well\nham ps\nguer nica\ngo td\nemelis ande\ndu ddy\ndan ae\ncr ampton\nbrian eno\nblu t\nauto immunity\nðŁĮ´ ðŁĮ´\nvisit oslo\nsain thood\nsa chi\nru mmer\nroblo we\nprohib ited\npre ach\npepit o\noun tains\non dre\nob ello\nmaz in\nmal ka\nlead som\nl orie\nkohin oor\njhon ny\njac i\nir b\nip bes\nhyperten sive\nhu ri\nglow y\nfifam obile\nfer dow\nf gf\nepic entre\ndi ao\ndel man\ncc bc\nbul mers\nbody armor\nbett any\nb bi\nay sha\napic ture\nam all\nyo shino\nworldof dance\nwork tops\nvic olu\nvicolu dovico\nver adio\ntoy box\nto se\nroe hampton\nro ymouni\nren nial\nrath mines\nram al\nphoto realistic\npawn shop\np dd\nmo styn\nmicro electronics\nlef th\nkiz una\nitec ture\nhu ddling\ngre nadine\ngiuse pp\nfa khar\ndo tt\ndo decan\ndiffu sed\ndebor a\nco zza\ncho kers\nchildri ghts\nbrom ley\nblue andgold\nbh of\nbarbra streisand\naustin carlile\nar la\namoun ting\nalo ves\nal vis\nuku leles\nsusan ne\nstun ning\nstok ely\nsolar system\nshear ling\nse ge\nsarang hae\nsa kh\nrv v\nrun around\nroh de\nreceptac le\nreas signed\nquadrang le\nq om\npur na\notter box\nmck it\nmary lin\nleigh centurions\nlee du\nle xx\nla pak\nking kong\nkil more\nkatvond beauty\nhe ta\ngrave digger\ngiving tuesday\nenz ies\ncaul ker\nc vp\nborrow dale\nar ket\nan esthetic\nâĻ¥ âĺº\nxzi bit\nwol laton\nwee se\nuy uni\nturk ington\ntar kin\nsu rest\nsu darshan\nste ach\nsmoo t\nsmo tor\nsa wh\nrising stars\nripp le\nrescin ded\nre ak\nrale y\nr alu\nplac ings\nor vieto\nky ne\nko ren\nk ure\ni spy\nhon neur\nfire watch\nes sec\ndu rai\ndeadliest catch\ndatasci entists\ncredit card\ncox swain\ncorner backs\ncolin firth\nbio tech\nbarilo che\nave e\nac ep\nx japan\nwr dw\nworld heritageday\nwis sam\nwheat sheaf\nwater marked\nviver ito\ntown end\nthro at\nthom tillis\nst lv\nspu rious\nsig ned\nsar c\ns who\nremem br\npress ings\noss ington\nnewsma ker\nnar ang\nliberal aus\nli ffe\nkal as\ngre ati\nga jan\nfunctional ities\nfi ord\nesper anto\nedu tainment\nder rida\ndat t\ncom pare\nco terie\nchakravar thy\ncar vin\ncap com\ncam borne\nbode gas\nben no\nanir udd\nan ted\nal ula\nal liston\nzz top\nyi annopoulos\nwheres the\nwee vils\nwatch the\nvisitgreece gr\ntru ro\ntram iner\nthi stles\nthames mead\ntejasswi prakash\nsuper b\nsumit omo\nstru st\nshi vin\nsh v\nseñ orita\nsd schools\nro or\npom elo\npartner ship\nom ata\nnad ja\nmotor boat\nmi guna\nmaun gan\nle land\njoke ster\nflat out\nfinish strong\ndami ani\ncru gby\ncon serv\nchang elog\ncastle town\naw r\naustri an\namotor show\nafern andes\nach ei\nðŁĮ ij\nvic pro\ntransduc er\ntr ico\nti ro\ntennews qld\ntalle res\nsam aha\nsalt marsh\nrou ble\nrie woldt\nregular ity\nre dribb\nraven scroft\npublic radio\nnwo su\nnodu les\nmark hoppus\nkur sk\nim practical\nharrison ford\ndugg al\ndrau ght\ncol aba\nboo kie\nblu ffing\nbis ch\nbier mann\nbeatrix potter\nbe wick\nbasil isk\nashwin ravi\nar isa\nalz association\nall dog\nal pen\nabnormal ity\naber uni\ntugg lenation\ntu te\ntranmere rovers\nthermom eters\nstin iog\nss oci\nrosel yn\nra sul\npho be\npan aji\norange y\nmango steen\nkun ing\nke im\nkady rov\njupil er\niti zen\nindustri als\nho pps\ngre ca\ngal ina\ngaf fa\nfon so\nfast ened\nfari bault\nf mm\ncomment ate\ncli matology\nci g\nba sten\naustri ans\nal bo\nadi zero\nac en\n!!!! !"\nðŁijİ ðŁijİ\nðŁĮ ĥ\nลาภĶ\nwis sa\nwhat would\nwer ther\nwas son\nvig ils\nud dy\ntt as\ntri alled\nst annes\nslike us\nsli mer\nsal ot\nrelin quish\nrap star\nram zi\npas ch\nou chy\noc l\nngoron goro\nnew ye\nmichael rosen\nmeadow bank\nlevi ed\nlea side\nkr zy\nke uchel\nj ita\nho sta\nhay dn\nhan on\ngri stle\ngirls night\nevalu ator\nec afe\ndylan n\ndid that\nci pe\nchefjose andres\nbud va\nbu e\nbe hati\nbailee madison\nau rel\nasynchron ous\naf casiancup\nðŁIJ Ĥ\nðŁİīðŁİĬ ðŁİī\nãģ Ļ\nà³ ĩ\nÅ Ħ\nzen trum\nwil len\nwater ston\nvivo azzurro\nuniversal studios\ntransplan ting\ntop coat\nta kata\nshe mar\nsen do\nsam paio\nr dt\nport moody\noneok rock\nny ah\nnouvelle photode\nnor mie\nnan u\nmic rons\nle fevre\nkey note\nkah neman\njust a\njung frau\ninterro gating\nglen brook\nem is\ned ger\ndista steful\ndictionary com\nde anne\ndark ness\nd ago\ncé zanne\ncraft manship\ncor des\nchil lax\ncash app\ncard stock\nblur r\nbb src\nayut thaya\narkham knight\nacol lection\nac cia\nab ass\n; __\nyard birds\nw ice\nun assisted\nthe how\nt km\nsud bury\nsee it\nsadhguru jv\npon tar\npol son\nper fusion\npalak kad\nnor iega\nnon stick\nnew supdate\nnature news\nmac ale\nkin ser\njulianne hough\njoseph muscat\nj pc\ninstac art\nilike italy\ni dos\nfri zzle\nform alities\neu fau\nep isd\nchap ati\nbul on\nbu ya\nbla den\nben n\nar ita\nappar itions\nant in\nabed in\nz ot\nverdic ts\nta ffer\nsolan ki\nsnow making\nsle ight\nsch uk\nrubber ized\nrosen borg\nrigi dity\nren al\nrem pel\nray ama\npu ls\npast is\nmel man\nmc dougal\nmarcas ite\nmaha vir\nluxury home\nli or\nlaphro aig\nla familia\nl ø\nkw skenya\nki baki\nkar mic\nju e\njeann ine\nii y\nhouston strong\nhali l\ngyo za\ngo tom\nglu g\nghe gan\nfric tionless\nfic t\nengi klan\nend ales\ndr jd\ncro ome\ncor ing\ncarni vals\ncaly x\ncaity lotz\nbush ra\nbladder cancer\nbee hives\nbang yongguk\nðŁĺĤðŁĺĤ ðŁijĮ\nè¥ ¿\nãĥĪ ãĤ\nöster reich\nxbox e\nvil anova\ntu valu\nti ge\nthre shing\nthomas sanders\nsmoo thie\nsec tioned\nschim mel\nsam wise\npal en\np tb\nnot forgotten\nmcco vey\nlam peter\njohn ston\nio anni\nheadhunter z\nhat su\nh wan\ngian forte\nger wig\nfin ks\nelo u\neli ff\ndyspra xia\ndo heny\ndil se\nchancell ors\nch ford\ncapital official\nbeat o\nba sit\nati enza\n!!!! #\nìļ Ķ\nus k\nup stage\nulti maker\ntower bridge\ntelly chakkar\nsquig gle\nse iler\nse bab\nscape go\nsau x\nre manufactured\nprobosc is\npoke dex\nom et\nofficiald gispr\noc bc\nno ya\nn ort\nmili eu\nlevit an\nlehigh valley\nhyper activity\nhoi berg\ngre ed\nexpend able\nendoc annab\ndol ci\ndo sha\ndevilmay cry\ndeschu tes\ncon ta\ncoc cin\nceremon iously\navi anca\narchitecture lovers\napar icio\nal ga\n] (\nठĪ\ná l\nyellowston enps\nx am\nvadi velu\ntermin ates\nspac emen\nse gui\nschitt screek\nsc media\nrel ent\npu esto\npic kerel\npi vx\nn assim\nkh c\njack als\nishi guro\nisab ella\nindi at\ni mei\ngoo dd\ngol maal\nfashion news\nface it\ndor cas\ncun y\ncli brary\ncent rep\ncath mckenna\ncatchit kansas\nblack wall\nbasker ville\nbahawal pur\nar bol\nam har\nacom pany\nunear ned\ntransvest ite\ntor ching\nthan ku\nsul t\nsine stro\nsho ppin\nsel le\npower tv\npolyphen ols\npel argon\npax ton\nover achiever\nmodi fier\nmichi ko\nme el\nmcmur do\nmaungan ui\nmasch ine\nmas l\nli mate\nker mode\nk mm\njessicani gri\ninver cargill\nindi es\nin cep\niam r\nhyung sik\nhav arti\ngwin nett\ngood game\ngar and\nfan bases\nef ans\ned w\ndr pepper\ndemon stra\ncon migo\ncioc col\ncere bro\ncategori ze\nboth well\nbarre to\nbar ia\nbal rog\nari anne\nanal ima\nabat toir\naaas mtg\nðŁĩ¶ ðŁĩ¦\nìĿ´ëĭ¬ìĿĺ ìĨĮëħĢ\nм ак\nzwir ner\nwestph alia\nwe play\nvi mto\nti que\nst out\nst james\nsp ps\nsiri sh\nshav ers\nsha we\nry ker\nretro fitting\nre boot\npre en\nphalan x\noom ba\nnas scom\nmoment when\nmen ingo\nmas ked\nko wa\nke ets\njat engiklan\nir ked\nintern alized\ndo vic\ndei dre\nclar ins\ncis sy\nc no\nbuck man\nbt p\nbin aryo\nbeel ze\nbapti sts\nauto repair\natt oo\napho to\n" ->:\nâĿ¤ï¸ı )\nwest life\nvince mcmahon\nv ass\nus afric\ntwin ings\ntoast master\ntkach uk\nthe blogger\nshahid masoo\nsen cha\nsavethe crew\nsat night\nriver hawks\nrevi ver\nrad har\npoly gons\npir ated\norganic food\nnigh to\nmur rum\nmil house\nmark ell\nman v\nlac son\nke uka\nk bis\ninfe cts\nhuw stephens\ne tho\ncounten ance\nclar is\nbo sso\nbo sc\nbit defender\nbio char\nand am\namerican legion\nab l\naaaaaaaa a\nðŁİ¶ ðŁİ¤\nys gol\nxal apa\nwest f\nwe want\ntrending now\nton college\nthe word\nteppany aki\nslap shot\nsenior year\nsam m\nridlr mum\nrepatri ated\nreic hert\nphosp holi\nop ines\nmm en\nmau ney\nmangesh kar\nlove this\nlo do\nka sha\njar ry\nin operable\nhol lie\nfran ko\nfa kih\nen schede\nellen pompeo\ndu kakis\nco ste\ncl é\nchrist in\nant as\nannab ella\nalberto contador\nak io\ny tretweets\nwiganwarrior srl\nvi render\ntogether weare\nsw abs\nso a\nsil sil\nreticul ated\npubli que\npool er\nph un\nop b\nokonom iyaki\noffu tt\nnov ara\nmockingjay part\nmiami university\nmetall ics\nle ade\nkra bby\nke em\njos lin\nja ha\nhom erton\ngreat food\ngla zier\ngin ni\nfram lingham\nden nen\nconferen cia\ncity lab\ncari produk\nbol asie\nblue sky\napp am\n: ,\nðŁķ Ķ\nvainglor y\nurband ale\nurban photography\nunconsci onable\nun kle\nubi qu\ntwee tur\ntro ppo\nsunday blogshare\nstewartha asr\nstewarthaasr cng\nste ams\nst joseph\nslo ane\nshi agenocide\nsay e\nsat chat\ns ze\nred car\nr nz\nqu ill\nparis fashionweek\nmichel s\nmalme sbury\nloch leven\nincre ible\nima gen\nhome remedies\nhe fe\nhb f\nfort collins\neinf ach\nea i\ndou jinshi\ndisin fect\ncr antz\nconspic uously\ncole sprouse\nchri scuomo\nchin mayi\ncar pa\nbread board\nbrass ard\nblu sh\narne duncan\namu ck\naku prema\nacet yl\nab dl\nðŁĺ¨ ðŁĺ¨\nz inga\nyasi r\ntup date\ntop ham\ntirun elveli\nthe muppets\nsukh dev\nspani els\nsof theworld\nsn art\nshi bata\nshel drake\nsa hb\nro dy\npark ar\nour moment\nnau seating\nnal c\nmagnific o\nkopp ar\nkin ane\ninthe dark\ni home\nhon nold\nhe cho\ngla vine\ngame over\nfr ye\nfitz simons\nferdow si\ndal ÃŃ\nd ming\nchar mingly\nbuc cle\nbo akye\nbarang aroo\narmi sen\nar cola\nap cc\n? !!\nðŁİ ²\nwool sey\nwh b\nvene cia\nti aa\nteam lh\nstr fc\nsports women\nsph illips\nshay k\nshan tel\nshahidmasoo ddr\nsepul tura\nsc ally\nsarcast ically\ns run\nry oma\nru is\nr bt\nport es\nmock umentary\nmill creek\nmik ki\nkincard ine\nitz ky\nir mo\nip tl\nimbu ed\nhot plate\ngow dy\nfacil ity\nepic ness\ncu ffing\ncohe rently\nco akley\ncard well\nbo ek\nblack list\nbit main\nb ently\nb app\nas su\nah shotel\nadventure sin\nðŁıĥ ðŁĴ¨\n楽 天\nà¹ĢภĶ\ná r\nwi elds\ntiff anys\ntel mo\nte me\nswordar tonline\nsk p\nsalt fish\nru dd\nro xx\nrecei vable\nquestion naires\npros thodon\npre torius\npersonal ity\nok oro\noccu pier\nns ffunded\nmi sto\nmeathe ad\nlife house\nkelly and\nhelly shah\ngrind stone\nfree kick\ne be\ndidger idoo\ncro tone\nclan cashire\nbu lu\nbri ain\nart ans\nab aco\nðŁ¤Ĺ âĿ¤ï¸ı\nvec tra\nunion jworld\ntriple tt\ntmr rw\nther ud\nten ses\nte co\nt god\nsb dc\nryan higa\nritt z\npaint september\nnax als\nmul vey\nmu subi\nmon the\nmn t\nmb ab\nman in\nlor ne\nling fieldpark\nlans down\nkuro saki\nke tv\nhyste rectomy\nhar dees\ngray skull\nexam iner\nes ack\ndigital banking\ncric kle\ncollegi um\ncastle maine\ncan te\nbatt a\nar ds\nain bow\nว ย\nwr ack\nvin atieri\nti gue\nt bird\nsor ties\nsla yer\nsha hb\nse sse\nro dd\nray y\nnap ak\nmoney team\nmb ah\nmateri alized\nlich field\nlam er\nky alami\nkut z\njo ol\nj hoo\nir sc\nen ron\ndown patrick\ndispen sed\ncor um\nchateau briand\nbnw photography\nb wi\nb gn\nat war\nago on\naggie football\nðŁİ¬ ðŁİ¥\nãĤ ģ\nwy ke\nw dr\nun break\nuk f\ntru di\nthe gac\nsubsi dence\nsports bar\nsno tty\nseque ira\nsen ca\nol fo\nnu bes\nnie mann\nmouse hole\nmc queen\nmartinluther king\nmand la\nlal onde\njura do\njan in\nit sour\nintre pid\nhaemo philia\ngeo survey\nfle xo\nend homelessness\ndom enic\nclau dia\nchan e\nce pa\nahu ff\nach ingly\nâĢ¢ @\nyo gal\nwomen power\nwild fire\ntili kum\ntegan andsara\nsurro gates\nsun ning\nstig mas\nss op\nsk unk\nsi son\nshari fs\nsan kofa\nrepu gnant\nrepresent ational\npriyankag andhi\npric eless\npre phoops\npracti ses\npan ahi\nob lak\nnow y\nn do\nmetro centre\nmatt bevin\nli thia\nkeele university\njin ny\nic orn\nherald scotland\nhef fron\nhe wn\nhappybirthday tome\ngl bt\ngear box\ng prs\ng ks\nfol gers\nfar ou\nepen ny\ndev ent\nderwent water\nde val\ndavid hasselhoff\nct m\nchief tain\nch ten\ncaton sville\nback ground\narjun kapoor\nand more\nall ways\nadmi rably\nac um\n?! ?"\nðŁĻĬ ðŁĻĪ\nðŁĺĺ âĿ¤ï¸ı\nðŁĮŁ ⾨\nðŁĮĻ ⾨\nwax work\nun am\nu sca\ntril by\ntrapad rive\ntimber wolf\ntam ba\nsla vin\nsi ana\nsan ka\nroe derer\nrandom house\npro filer\nprint shop\nperse cute\npe up\npe k\npat atas\nnuclear bla\nnews queensland\nnep tune\nnar can\nmiller coors\nloud mouth\nknut son\nkha der\njharris jayaraj\ngender paygap\ngate ch\nfu dge\nev ar\nd tech\ncare llo\nbre cker\nbo ingo\naspir ated\nag el\nìłķ ìļ©íĻĶ\nvod kas\nunited airlines\nunder carriage\nun played\nun interested\ntou pee\ntheli ghts\ntb icycles\nsu go\nste warts\nso ja\nrom sey\npil ato\npe kinge\nmra dam\nmad han\nkeswick bootco\njazz fm\nj q\ninconspic uous\nhi w\ngro u\nglit ched\nger mani\nfollow cii\nfat t\ndmu leicester\ndemarch elier\ndaily drawing\ncyano type\ncy mru\nconcur so\nclive den\nbraam fontein\nbl is\nbir k\nbarri e\napo l\nante aters\nam ri\nðŁĺ° ðŁĺ°\nìĬĪíį¼ì£¼ëĭĪ ìĸ´\nب ÙĪ\nyo pen\nwur zel\nwar locks\nver um\nthelast ship\nss nyder\nsports writer\nso bew\nrelati vism\nquen cher\npan eled\nnr p\nnau gatuck\nnational comingoutday\nnat atorium\nmake th\nleeu warden\ninn ards\ngur dy\nfriends giving\nfree will\neuror ack\ncreoso te\nbottle men\nbb clancashire\nbas ques\nbar well\nast bury\nar ja\nani i\nðŁĺĤ ðŁĺ³\nðŁĩª ðŁĩª\níĻ ©\nundate able\nthedivision game\nsyn cs\nsusann areid\nstan ky\nsquad rons\nspot ter\nson equ\nsaras wat\nro ba\npandor as\np nl\nmf n\nllo ret\nk allis\nj se\ni of\nhym nal\ngol u\ng dynia\nf bd\ndo fe\ndj set\ncyberne tic\nbts festa\nbiglo tter\nbb vacom\nball parks\nbab el\nafter movie\nzig go\nwhatson stage\nwauwat osa\ntur an\nthe vampirediaries\ntele kom\nsu tera\nscor k\nsatell ite\nsar zo\nsange eta\nready made\np town\nonly nikil\nnen okkad\nn ooooooo\nmichen er\nleap fro\nkwa ito\nkrau trock\nkne ading\nkal y\nin icial\nimag er\nhaid ar\nguy ton\ngo blue\ngang ster\nfightfor wynonna\nend rons\ncott ingham\ncentral ised\ncau stralia\nc sforall\nbol la\nbibl ically\nber ch\natt oos\natri ot\nation ism\nashmo lean\nal tura\nak lein\nad vil\nðŁļ §\n௠Ģ\nyan ked\nwood shed\nwar man\nvi vica\ntwee de\ntg n\nsic ily\nrust ica\nrox ane\nrh shampton\npu dding\nol of\no ji\nnas as\nn tb\nlloyd kaufman\nkan ha\njewel ery\nii is\nig inals\ngrun er\nglo bus\nfrey ja\nfounder sday\nelgato gaming\ndo ting\ndel f\ncolon cancer\ncn z\ncharlo ttes\ncaly pse\nby passed\nbreath alyzer\nbk n\nbis d\nbig pharma\naz kals\nand as\nall america\naaron goodwin\nðŁįĶ ðŁįŁ\nyad kin\nwork mate\nwab ash\nvit ter\nvil am\nv xr\ntom mcfly\nsv end\nsurgical strike\nstaur ants\nsh elia\nrspb scotland\nresponsi ve\nre ward\nracec ars\nprimary rocks\npie tra\npay loads\np gf\nom pidou\no lie\nne as\nmel ford\nlurk force\nkonta kt\nkin nock\njor den\ninf lux\nim partiality\nhau han\ngoo t\ngal avant\nga ir\nfe as\nfay sal\nfallow field\ndu bcity\nd squared\ncross dressing\ncit rate\ncere zo\ncarlil loyd\ncampbel town\nbu hl\nboo ka\nblack stock\nbil oba\nbec kie\nb hullar\nanalge sic\nðŁĻıðŁı» âĿ¤ï¸ı\nðŁĸĮ ï¸ı\n» »\nyo an\nya seen\nvi do\nto stit\nswal d\nson ando\nsavi ours\nre shared\nnation ale\nman co\nlove scotland\nleg ally\nhad da\ngist mania\nfull ers\nday lesford\ncolorectal surgery\ncine macon\nblenheim palace\nbal ach\nack bar\nabram ovic\n[ ðŁĵ¸:\nðŁĵĸ :\nzeemusic company\nwith row\nwh yyy\nvas con\nu ec\nst ours\nso arin\nsm fc\nshaleen malhotra\nschö n\ns global\nride ordie\nresident advisor\nray gun\nra bility\npugets ound\nout sold\nonit sha\no iselle\nn scs\nmyle ene\nmurder mystery\nmuba sher\nmill saps\nmath s\nla bu\nko el\nkathy griffin\nkam aru\njais wal\nide apad\nhyatt sville\nhal len\ngun d\ng wan\nfu ma\neducation govuk\ndress like\ndh hs\ncurry wurst\nchoic etv\nbu kuro\nbritt ana\nbrin ker\nbandof brothers\nball player\nalo pez\nภľ\nyes network\nwool dridge\nw gc\nvend redi\ntre ze\ntim farron\nti enda\ntark anian\npender grass\nnikol as\nneighbor hood\nnal anda\nmull ens\nmis elizajane\nmf g\nmerito cracy\nmccar tan\nki ren\njustfor fun\njame so\nil igan\ngo etze\nfe ck\nestate agent\nern ps\nec centricity\ndv bbs\ndragon age\ncom score\nchris mas\ncan one\nbul le\nboard ing\nberen son\nbeagle freedom\nap tos\naleu tian\naldubbig boyz\nëħ ¸\nãĥ³ ãĤ¿\nâı ³\nw ira\nven try\nvas u\nul ita\nty le\nstu ddard\nstreet ball\nspace dotcom\ns icist\npe to\npas sively\npap as\nos muertos\nobjec t\nnu pur\nner lens\nnd b\nn sk\nmm vas\nmin da\nmie shat\nmanag ment\nmad smikkelsen\nma uri\nlu hrmann\nlegal aid\nle ander\nkro es\nk tu\njor daan\nisai as\nib jjf\ngrass roots\nglo bos\ng ch\nfr sa\nfis cher\nel mo\neeee eeeee\ndian ap\ncheap flights\nbill o\nart center\nab idal\nðŁĶ ²\nwen k\nthumb print\nthird man\ntherud ingroup\nthe players\nstat eroom\nsla st\nshire en\nsb snews\nsambal pur\nred ne\nred head\npur ana\npou ille\npimper nel\npar dy\nnobelpeace prize\nmash had\nmake dcli\nko erner\njen ko\njan u\nhurtigru ten\nhow z\nharic ot\ng fm\nfor n\nfar yal\nephe mer\ned dies\ndo lore\nde kha\ndar ci\ncl inte\nchil cott\ncard holder\nbw ana\nbud u\nbo ven\nbed ard\nbe do\nage ge\nðŁĺĬðŁĺĬ ðŁĺĬðŁĺĬðŁĺĬ\nðŁijij ⾨\nwork around\nwalk offame\nuni mas\nthe jeremy\nth picture\nsymboli se\nstor a\nspeciale ffect\nsn hr\nsil v\nsel ve\nscriptw riting\nr su\non iz\nmale y\nli be\nlast word\nguanac aste\ngen entech\ngarden of\nfranco tv\nformal wear\nfore va\nfel t\nez official\nd tu\ncor poreal\ncar ice\nbest practices\nbarri sters\nbarbarap alvin\navi des\nattend ances\nanun cia\nam per\nðŁ§ ł\nì£ ¼\nz and\nwi eg\ntw ings\ntox opla\nton sill\nthisise gypt\nter ras\nshi ekh\nscot stoun\nscol lege\nroyal ton\nrin du\npon ga\nover shadow\nnus antara\nnh tsa\nmilli seconds\nmemor ization\nmari ani\nmakedcli sten\nkis smar\ninfidel s\nfi ano\nenvel op\ndefe ctor\ndar ts\nbt n\nbrock man\nbran dishing\nblow outs\nbless thefall\nbig cat\nb vc\nagover nance\nadd led\nac ou\nîĮ ¨\ny mp\nx biz\ntryan uary\nstan o\nspl inter\nsit ra\nseven dust\ns gh\nrumm enig\nrummenig ge\nri elly\npokemongo app\npla ines\nph b\nna jam\nmira bella\nmi raj\nli pe\nld lc\nkat ah\njanef onda\nj fs\nim ou\ngol lanc\nfragran ce\nfibaw c\nf so\ndig as\ncorn walluk\ncongr atu\nchat tering\ncb so\ncat fishing\nbou ghton\namu thu\nalli simpson\naf v\nðŁļ ĵ\nðŁĺģ ðŁĺĺ\nìķĦ ìĿ´\nyil diz\nyak is\ny combinator\nxi ons\nwil kos\nwb k\ntor ro\nthet dn\nspir alling\nsen ia\nscur vy\nsam an\nquik trip\npasqual ino\npad wa\nom bs\nmillwall fc\nmer tz\nmarse illes\nmad der\nlunch time\nlu th\nli gero\njusti fiably\nj oop\ni mar\ngeorge hw\nfor her\neli vely\nele on\ne gress\ndis miss\ndis engaged\nde ighton\ncoo sa\nco iling\ncancer care\nbriar cliff\nbol u\nboe hringer\nb ft\nay lin\nare ddy\napp ian\nam dev\nam aa\nalexander wang\nðŁı ¸\ny tl\nwonder boy\nwaitress musical\nw us\nvirtual box\nv atten\nucon nwbb\nthing syou\nsuper fine\nsle ater\nsig mas\nsen thil\nschul ich\nsar ia\nrapi do\nra donc\nra bo\npro pyl\npolly anna\nplan k\nmartin amcbride\nkip nis\nkan baru\nhg tv\ngrave yard\nglutin ous\ngi pson\nfre dric\nfou rie\neng es\ne em\ndix ons\ncompac tor\ncom mode\ncold fusion\nce fn\nbrink man\nb gi\nan um\nan issa\nyaho onews\nwood ward\nwar da\nvis or\nvand alizing\nv ati\nun recognized\ntiru mala\ntac king\nt mi\nspe te\nshr ill\nschwe ppes\nsach se\nrho dri\nphotography wx\nper tains\np lier\nnew berg\nmor tad\nmoo die\nmaw lid\nmadein england\nliberty ville\nkop a\njer od\nitu c\ngo leman\nfranç aise\nfood tank\nfab inho\nep y\nep le\nefflu ent\ne wald\nde wey\ncyanobac teria\ncompos iting\nbicent enary\nbergha in\nau i\nafrican ism\n* @\nzac goldsmith\nwood grain\nunder tow\ntonsill itis\nthorn tons\ntar aw\nsp harmacy\nsing lets\nsho gun\nsa unas\nron wyden\nris ch\npo de\npekinge se\npal le\non aldo\nofficial bwfc\nnic h\nnak u\nmodi se\nmi sheard\nmean green\nlis bon\nlig gett\nkate esack\njes olo\njames francotv\ninter red\ninte st\nhorse shoe\ngalatasar ay\ner ol\nener al\ncom bust\nchesterfield fc\nbreak aleg\nbra sco\nbird lovers\nbe ed\nbar an\nbann u\nar mature\nðŁĩ¬ðŁĩ ³\nåĴ Į\nâĤ¬ )\nway man\nw ukong\nus natarchives\ntrans act\ntop tip\nsu varna\nsty ne\nstar wood\nstam mer\nshol lywood\np illing\novers lept\nni gra\nmorgen stern\nmesen chymal\nlagun itas\nkin ah\nke ik\nk usa\nj are\nirish music\nib mb\nhr derby\nhou v\nglen avon\nfire pit\nexecutive goth\ndiet iti\ndi rim\ndi pole\ncraig y\ncor vid\nby utv\nbiolumin escent\nbett endorf\nbell amy\nare ly\nalbace te\nalab amas\nac cel\n` *)\nðŁĹ£ ðŁĹ£ðŁĹ£\nâľĬ ðŁı¿\nà® ¯\ny oni\nwork room\nwoon socket\nward bound\nwak u\nvo ree\nvest ments\ntro oms\ntr at\ntil t\ntham bi\nt ps\nswir ly\nsti mulator\npr and\nmis ss\nmilli an\nlive to\nlasse ter\nla am\njon nie\njin day\njay aram\nin ui\nhinch town\nhal ving\ngu lo\nex ton\ndistor ting\ndeath wish\nchri sm\nce judo\nbo ker\nbe ens\nbarn find\nbaj rangi\nagu ayo\nad waj\nãĤ¤ ãĥ³\né ireann\nwi vind\nvas anth\ntm x\nsympathi zers\nsurvi ving\nspo sa\nspan os\nsece de\nseason finale\nro si\nrep els\nreli quary\nreal life\nradhi kam\npre flight\nportra yals\npark as\noshi om\nom art\nnothing but\nnicol a\nmir ka\nmieshat ate\nme as\nmanufac tur\nman and\nma hil\nl bt\nkab ar\nj ns\nfla s\ndune din\ndown play\nde dede\nde cade\ncreation ists\ncon notation\ncommunity service\ncollege humor\nco stars\nbudge ted\nbu colic\nbroo king\nbo sma\nbo gues\nbli stered\nbeetro ots\nan aa\namericas milhist\nภĸ\nwonder struck\nwar face\ntran sis\ntaka o\nstock stowatch\nsto tts\nsoul ard\nsk han\nro ache\nrho do\nre as\nra pala\npu tted\npollu x\nperme ability\nmul timeter\nmar sha\nmac u\nlu tter\nlor ia\nlobo tomy\nleon hard\nkeith ellison\nke diri\njon snow\njew ry\njen as\nhay ward\nham ari\ngher ini\ney n\ndj inn\ndispl acing\ndiete tic\ndi ggins\ndal vin\ncham bliss\nbody boarding\nbig man\nbatt en\nbaton relay\nanz as\nza ara\nyogali fe\nwe ise\nvi pul\nveuve clicquot\nv uk\ntom ake\nsv ant\nspot lighted\nsky r\nshil paf\nshe pperton\nshape shifter\nshal war\nsen to\nsam martino\ns ops\nroun del\npharmac ological\nodeon cinemas\nmonic a\nme anders\nmak elife\nkom bat\nik ar\nich mann\nhump ing\nhu ddleston\ngul marg\ngha ag\ngel ang\nfor bidding\nf np\nelectroly sis\neen adu\ndra k\nches i\ncen giz\nbuzz saw\nbo hin\nbe cs\nave c\namas sing\nall iter\nair frame\naccu ms\nðŁıĢ #\nzil ker\nz eng\nwr ks\nway de\nus q\nthom s\nthenation all\ntake care\nsriti jha\nsqu aw\nsalonedel mobile\nrobust ness\nquen ched\nquan tic\npropor tionate\npen icu\npatoran king\npal y\npak ora\np min\noz one\nl wr\nl fk\nkind les\nk acy\nincess antly\nil ene\nhenry ford\nhay ao\nha sa\ngroup ings\nfé lix\nfen ner\nes ade\neri shere\nelum elu\neg ghead\ne mini\ndu kan\ndragon boat\ndemocracy now\ndecre pit\nde akins\ndal o\ncy mra\ncontri ved\ncon ny\ncfl gameday\ncalle baut\nbri ous\nbal aji\nas agar\nart sin\na oba\nģ )\nðŁijĭ ðŁı¼\n̶̲̥ Ìħ\nzo es\nwh ic\nwa stel\nvend ome\nunder cover\nturn tup\ntri on\nti mid\ntam o\ntag ine\nsqu el\nson ee\nqua shed\npp c\npi ku\noverestim ate\nout pace\norang enation\nmon tour\nmcclar non\nmadhu r\nma bo\nlove quotes\nlibre tto\nlan ham\njust add\ninter viewers\nhi iii\ngsm np\ngalli um\nga en\nfresh ening\ndre i\ncolorectal cancer\nbo ag\nbar bel\nbak al\n\' \',\nðŁĴķ ðŁĴŀ\nyear long\nwn it\nvodafone in\nvirgin ie\nvi ol\ntran ge\nthe fog\ntab lon\nsen dak\nren ames\nre vin\nrdpro cordillera\npat rolled\npat ri\npan is\npal ates\now u\nmovi ec\nmen des\nmarty scurll\nmana watu\nlsh tm\nlord taylor\nkoso va\nka ise\ni back\nhill y\nh sv\nglobal surgery\nfo gel\nflood water\nenew york\nd gaf\ncommon er\ncode masters\nc ty\nboudre aux\nba ily\naren d\nak osi\na omg\nèī º\nà Ĺ\nwom ble\nwith a\nw tvd\nvotel ittle\nvancouver pd\nusu k\ntt is\ntat ars\ntal at\nsc ath\nsandwich day\nroo ghaag\npre ludes\nponson by\npho tor\np falz\nowat onna\nnational post\nnab oo\nn gan\nmtvawards star\nlo qu\nkrz ysz\nkind t\nkin ki\nkateesack hoff\njoin in\nit sad\ni ws\nfle ec\nfearthe turtle\nf sharp\nele u\ne jac\ndodecan ese\ndo better\nch z\ncalli grapher\nc aci\nbend able\naco a\nðŁĺĵ ðŁĺĵ\nzz ar\nw ga\nuro logist\ntalis ker\nstra ights\nsin igang\nsi biu\nshi mo\nsham us\nroyal welsh\nrow son\nrose ate\nrambl ers\nr cts\npoo ley\npett iness\noverex posed\nmoistu rising\nmeh ra\nmarce au\nmarac aibo\nlo omed\nlo las\nlets fly\nla em\nkick apoo\nin dol\nhen ne\nham tram\nfort nums\nfir hill\nde acs\nch w\ncas sian\nbrû lée\nbeyond meat\nbald ricks\nasdf gh\naqu in\nandali o\nabo l\nðŁĨ ĵ\nzing ano\nyaw l\nvs no\nvoc able\nvill ano\nv dp\ntwi c\nsukk ur\nss lazio\nsh war\nrudi mentary\nrab anne\npur die\npro w\npo tosi\npaley center\nno len\nne vers\nmostre que\nmoor side\nmill wood\nly sander\nli o\nki jiji\nk off\njack whitehall\ning au\nheart beat\nhead ington\nhe afy\nhal pert\ngu ano\ngr f\ndrone stagram\ndrjd rooghaag\ndiamond platnumz\ncruci ally\ncol ly\nchannel stv\nblack money\nbint i\nber rios\navo ir\nau pdates\nasi as\nas sar\nzapp ing\nvisit sunshinecoast\nvic ton\nvi katan\ntx state\nthe bay\nthat girl\nteam pixel\nsu perfe\nsour a\nsli gor\nsi gur\nshepher ds\nschaden freude\nred cat\nram bunc\npou let\npar abel\noscill ations\nnouvellephotode profil\nnational superheroday\nmerchan dis\nm Ã¥\nlife on\nlem ke\nlang it\njami ele\nig na\ni frc\nhu st\nhar rod\nesp ou\ndevon ian\ndetermin ant\nde votes\nd hal\nconfeder ate\nchino is\nbook sare\nbid dul\nbard bits\napple pay\nanna beth\nÃŁ e\nw la\nther it\nsuper leggera\nsign aled\nseme do\nri ba\nretr ato\nor son\nnewsc aster\nnegli gible\nn ú\nmot tram\nmm flint\nmathe us\nmal co\ngran ma\nfox footy\nfinalfantasy xv\nfallo pian\nex tempor\nefl cup\ndisp o\ndat agovernance\ncor g\ncf h\ncart wheels\nbeer cat\nband hav\nbac s\nautisma warenessday\nau ke\nali yu\nâĻ» ï¸ı\nà° Ĺ\nzoo ey\nwe iter\ntel os\ntatsu ya\nswag ged\nstead icam\nsta ithes\nsmi ds\nscan berra\nsau lt\npo ppe\npercol ator\npad re\non netflix\nneta porter\nl antz\nku mara\nig nomin\nhard copy\ngold medal\nga o\nford foundation\nfood pics\nevangeli sts\nempower women\nd hq\ncran ey\ncla ys\nchief ly\ncat ton\ncas sano\nbou chon\nbos elli\nboni ver\nbeg ru\nar tw\nweb pack\nvivi enne\nvar usar\nu texas\nthen u\nthe ac\ntarantu las\nsu sy\nstartu paus\nspar ky\ns vo\nretar dation\nren ergy\npur wo\npostu ral\nover state\nmor te\nmj g\nme ka\nmaster card\nlovewhereyou work\nloven ature\nli ghty\nlasc elles\ning leton\nignific ant\nho ists\ners life\ncu ti\nchoice music\nchee ze\nby b\nber y\nai dy\naberne thy\nðŁĺı ðŁĺĺ\nðŁij ´\nðŁĩ§ðŁĩ ¬\nyu sha\nxer ocon\nwor snop\nu ba\ntit ch\ntion able\nthe fox\nsmo k\nsen so\nrohit shetty\npedic ab\npardonmy take\npa katan\npa avo\nom bia\nmol yb\nmcgur k\nmat tes\nma rella\nliber sek\nla palma\nk latt\nk bs\nk alla\nji de\njablon ski\nindie sel\nin in\nher re\nhead banger\nha koo\ng valan\nen ner\ndir ks\nde facing\ncop as\nco agulation\ncivit as\ncath ie\nbraw ls\nbr annigan\nbengal uru\nbas que\nband saw\nand d\nan chez\nac anthus\nab cac\nØ Į\nwhite christmas\nweas els\nup staged\nunshak able\ntheoffici ala\nsugar hill\nstyle book\nstubborn ly\nsla svegas\nskin en\nse vi\nrandom house\nrand oms\nra vil\nr bjb\nq in\npersi ja\nparti dos\nott bike\nmusic matters\nmol ata\nmohsin khan\nmike lee\nku st\nkru ll\nk aming\nhol dthe\nh ance\ngirl sday\nem sa\neli ghting\ndren ching\ndread lock\ndow chemical\ndecrimin alize\ndecre ed\ndaybreak hitz\nd fat\ncou ric\nbha sh\naw ale\nap uto\nwwe cesaro\nwor sham\nwoo oow\nwinnipe saukee\nwhopp ers\ntoon town\nther olling\nthe gn\nsar to\nre sourced\npw ll\nmus grove\nmu ke\nlo sin\nllll lll\nlek hi\nk jrh\nk dc\nhockey night\nhat soff\nha un\ndream girl\ndinesh dsouza\ndend robi\ncum nock\ncharleston shooting\nchad well\ncer nan\ncade aux\nba chan\natten tions\nal stro\nac oma\nðŁĺĺ ðŁijĮ\nswee test\nsport in\nsony uk\nsobew ff\nsam mich\nrobin lordtaylor\nrei shi\nq arab\not dh\nmono tonous\nme time\nla zier\nki ane\nkat ri\njencarlo smusic\ningo b\nimplant able\nhope and\ngurupur nima\ngri fter\ngor kha\ngive hope\ng adel\nflo res\never bank\nety mo\nesc ada\ndream chaser\ndoo gie\ndeu lo\nda el\nd our\ncore lli\nbeart ooth\naziz i\nau ght\nangle terre\namor os\nak ai\n; )"\nworld penguinday\ntu d\ntor ium\nthim ble\nth atta\nta her\nsp ag\nsou red\nshape of\nsche i\nrub ina\nrookie blue\nro jos\npatoo tie\nnutrition ally\nmutu amadri\nmutuamadri dopen\nmirzas ania\nmark wright\nlar te\nkoscius ko\nkn olls\nkit schy\njonathan r\njawa har\nhi gha\ngood by\ndesi pixer\ndd un\ndak ima\ncicer one\ncan ty\ncair ney\nbor chetta\nbm alik\nbingham ton\nbet sey\nbernie orbust\nben nys\narm field\nanni a\nalla hu\naba shed\nà° ¡\nyuzuru hanyu\nye en\nyar sk\nw bt\nvic mensa\nver dad\nui dai\ntra pani\ntim al\nsul lied\nsooraj pancholi\nslo wh\nshin su\nsen ow\nscar fe\nsab ella\noffice design\nn le\nmubasher lucman\nmick i\nli bro\njuli enne\njo ef\nire lands\ningh our\nhierarch ies\nhailey baldwin\nfri mley\nfavorit ism\neventi de\ndv sa\ndomhn all\ndni pro\ndigit our\ndemocrati zation\ndec tomy\ndal awa\ncre en\ncos me\nconvey ors\nch apple\ncar ryo\nbreck in\nbre mer\nbell sbrewery\nba aaaa\nari ely\nanimal health\nê´Ģ 린\nwhim per\nwest fall\ntv channel\nton ge\nthel oop\ntam ir\nstre aked\nsqu ibb\nspan to\nslip stream\nquir ke\npost impressionism\noper ational\nmcin nis\nmarch é\nlead ingthe\njohn w\ngu ster\nferen tz\ner le\ndar rah\ncriminal ise\ncre search\ncre che\ncoo der\nchap ulte\nbottlen ecks\nbl é\nbelievein yourself\nbel videre\nbbcy ork\nall ens\nal ito\nai zawa\nadop tee\n⾨⾨ ⾨⾨\ntac a\nspray paint\nsmashing pumpkin\nsimul ates\nse wanee\nsac state\nre agent\norno car\nnesham iny\nnar bonne\nn ssf\nn lu\nmy bestfriend\nmu sto\nmari ag\nko ve\nkick flip\njor gen\ngen tile\nfun nest\nfr and\nfle dge\nfa waz\nen more\ndirt bike\ndd ar\nculmin ate\ncomp ound\ncityof sydney\nbran son\nbeauti fied\nbeard less\nb ils\nb azz\nay une\nauton omic\nalli on\naf cu\n. âģł\nðŁ¦ Į\nâŀ ķ\nâķ ²\nâĢ¦ âĢ¦âĢ¦\nyak ut\nwhatdoyou think\nving ton\ntruss ville\ntra g\nte tte\ntaka hiro\ntaip ing\nshare humanity\nrc bc\nprob ation\npp reciationday\npicka xe\nottawac itizen\nnu ria\nnn nnnn\nnicol le\nn was\nmc nuggets\nla zers\nklu ivert\nj va\ngl bl\ngat ton\nfor se\nfor ia\nel speth\ndun mow\nde coys\ndal ziel\ncypres shill\ncu ticles\nbri mmed\nbreak er\nboge ys\nber rye\nber kle\nau sag\narus sett\nap on\naom ori\name hta\nall tech\nabi el\n) .#\nâij ł\nye gevents\nvirginia beach\nupro ot\ntriun fo\nthisi show\nspl iced\nsmack down\nsh appen\nsco ffs\nrt k\nrocket ship\nro ber\nre pub\nra as\npre dawn\np cb\nom v\nmu tya\nmo sen\nmel k\nmckel vie\nmarac ana\nlove shot\nki zz\nka ar\njoy sticks\nj sf\nhether ington\nground swell\ngiar dino\nfus illi\nfreaky friday\nfamili ar\ner v\nemphasi sed\ndj m\ndi rac\ndel ts\nde ut\nconvers es\nclo dagh\nbusinessc ards\nbrown sea\nbi ge\nbattle ford\nb be\nauthor confession\nacl fest\nãĤ¸ãĥ¥ ãĥ³\nà¸ł าà¸\nÅ Ļ\nÄ ĵ\nwit i\nwheat belt\nvi i\nvector art\nup g\nth si\ntestimonial tuesday\nta kap\nsymph ony\nsummer vacation\nshaheer sheikh\nsh te\nrums feld\nrevel ers\nred skin\nrebec cauk\nrat eliff\npred nis\npablo alboran\np dsb\noptic on\nmou lin\nmen don\nleib niz\nleah rebeccauk\nlam ia\nkedge ree\nini quity\nhumidi fiers\ngy lfi\ngun n\ngreen tech\nger ri\ngalli frey\ngaem gyu\nfinanci alliteracy\nfall brook\nfa its\nek ta\ne ot\ndj ent\ndece iver\nde ade\ncor vair\ncom un\nchar my\ncar pool\nblo feld\nbaj pai\natt uned\nalo evera\naha shi\nãĥĩ ãĤ£\ná ĵ\nyas si\ny str\nwwe asuka\nwissa hickon\nwhe len\nwash y\nvb schools\ntra ba\nta ree\nscreen time\nqu ills\noh v\nnath alia\nmir wa\nmagi que\nli ppie\nlebron james\nland or\nj lp\niam lakshmirai\nhans grohe\ngro se\ngreat artwork\ngar ish\nfu ga\nfever ish\nfe tterman\nfan euil\nemph atically\ndan um\ncu u\ncow ling\nconco cted\ncenter for\nbrig nac\nbaaa ack\namar ch\nal shabaab\nach arts\nðŁĶµ âļª\nË ĭ\nvo it\nver min\nun readable\ntre sor\nthi ers\nter is\nsimul ation\nshav n\nsha c\nrule sof\nrock er\nrivi ere\nr mn\npe dis\npal abra\nop acity\nnd su\nmulti level\nmarin os\nlg w\njake quickenden\nhos king\ng ph\nfn q\nfle ish\nfavour ing\nfa an\neye lets\nele s\ndis assembly\ncounter measures\nchikun gunya\ncar one\nc cl\nbr anc\nbl l\nbio gen\nasan chez\narch os\nalvor d\nali anza\nÑĦоÑĤогÑĢаÑĦ ии\nzach ariah\nspe ier\nso sweet\nskid daw\nsalahu ddin\nri endo\npy t\npoor na\nolaju won\nmy our\nmusic ality\nmassaf elipe\nmari ano\nl ge\nkal yn\nin site\nimpeach obama\niaa forg\nha dden\ngot the\nge malto\nfas ano\nevent planner\nen forces\ndream act\ndit avon\ndeulo feu\ncolqu itt\nchand ram\nbreak through\nb vd\nb dd\nasat ru\nantici patory\nannex e\nðŁijij ðŁĴķ\nØ§Ø ¬\nuj ala\nu may\ntit alia\nthenew painting\ntel star\nstron tium\nstir chley\nso ti\nsky lake\nske e\nseduc tively\nscrim shaw\nscre amo\ns ba\nru blev\nroo ty\nreturn to\nren ny\npre ez\npar tha\noik os\nmenom inee\nmc chicken\nlucky girl\nlot teries\nit sar\ninform ally\nillusi onists\nhir ono\ncrutch field\ncraig s\ncoz art\nbulle it\nbu tera\nbrush strokes\nat r\nat plc\narab e\nantam onica\nancou ver\nalast air\níļ ¨\nz ma\nuni ya\ntru k\nthan javur\nsv l\nshaf aq\nscur ry\nren de\nram trucks\nrabi ot\npi dge\nnürn berg\nmegaz ord\nm gwv\nkra ven\njo bber\nip sa\ni fla\nhol li\nherm ès\nhear twood\ngeo cache\nfur i\nforzan apoli\nforzanapoli sempre\nfor greatness\nfly way\nfl d\nfirst weets\ndomin icans\nchaf ing\ncf meu\nca xton\nbotanic garden\nban trophyhunting\naf on\na alt\n"} ,"\nØ ¶\nzz ies\nyed lin\nwiven hoe\nweb comic\nwahoo wa\nvers ace\nun banked\ntu lear\ntop gear\nthe maine\nstra vels\nst ps\nspa int\nsay brook\nrss ur\nplat forming\npadma shri\nold is\no tis\nnic co\nlafour che\nkas ai\njer king\nj ba\ni flix\nhind marsh\nheath cliff\ng war\nfee han\neye of\nex um\ndumb ing\nduc asse\ndu cker\ncol lings\ncb sa\ncanad ensis\nbasqu ecountry\nart adventcalendar\nap un\nanil kohli\nai doo\naf air\nðŁİĥ ðŁİĥ\nîIJ ĺ\nëıĻë°©ìĭł 기\nâĢ¦ âĢ¦.\nwi veng\nwhe ats\nwe il\nuniofe astanglia\ntulo witzki\nthereal ryanhiga\nteam tolex\ntan o\nsummer set\nstart the\nsh nikov\nru thin\nrnc m\nre ssa\nr ä\npri vet\nprakash raaj\npe sca\npart itions\nparam edic\nom ing\nneutr al\nlit itz\nl nd\nkool haas\nkar cher\ninst ate\ni severything\ngu ma\ngrou se\ngn b\nfu p\nfu jin\nfou ad\nflat irons\nfit etv\nelles se\ndre ich\nderange ment\nda hab\ncr ana\ncontor tionist\nchin na\nchange thegame\ncad enza\ncac a\nbrance day\nbout in\nboul anger\nbook able\nban ke\naz y\namand la\nallo way\naccu m\nðŁĻĨ ðŁı»\níķ ĺ\nwi shaw\nwal ley\nur bann\ntweet meso\ntweetmeso hard\nstartup weekend\nsiyah bey\nshawnab ner\nsc cl\ns conference\nru ch\nros ella\nred skin\nradi ol\npv r\nporth leven\npen ciled\npac esetter\nmol nar\nmilitar ism\nmarcel ino\nlove travel\nkr ys\nkie hl\nk oning\njo p\njin an\nincen ti\nin ad\nh gt\ngreeting cards\ngowdy sc\ng mac\ng finity\nfree zers\nex and\neco fashion\ndiffu sing\ndatabase app\nchandra sekhar\ncc ms\nboot camps\nbell eri\nbar bas\nas sou\nart databaseapp\nani pals\nalph am\naer ith\nzo gh\nvirul ent\nts j\ntru x\nstru n\nsl vind\nsi by\nsch ak\nsanc tus\nre fundable\nr win\nplayer unknown\nmoo rea\nmar burg\nlo rescence\nlo ofah\nkiyo saki\nkin c\nket k\nj ola\ninthe making\ninter change\nin ver\ni if\ngru m\ngrei pel\ngo chu\nglamour ous\ngh ua\nele st\nconfi dent\ncolor fully\ncha fee\ncait riona\nbu rak\nbraz o\nb pf\nair n\nack a\nab oot\nðŁĩµðŁĩ ¸\nìº IJ\næĿ±æĸ¹ ç¥ŀ\nà¸ĻภĶ\nwind star\nweb bie\nun trustworthy\ntand on\nsm cc\nsambit swaraj\nsad h\npalin drome\noptometri sts\no the\nneu feld\nne uk\nmp x\nme war\nknight fall\nkindle deals\nk na\njer myn\nhh shk\nguille mot\ngad on\nfer ne\nevans drumheads\ndisappro ves\ncp chat\ncin di\nagassi z\n! ðŁİī\nðŁĴ¨ ðŁĴ¨\nðŁį·ðŁį· ðŁį·\nãĥģ ãĥ£\nx scape\nwilt shire\nwi dge\nun sanitary\nuk biz\nuc cess\nu hoh\ntu areg\ntop drawer\nthe go\nst oli\nsle x\nscro tum\nsa ja\nre wired\npren ton\nport more\npa hoa\nnazar bayev\nnar stie\nnann akuprema\nna stia\nmo issan\nmelo dramatic\nmaz dausa\nmal pas\nma rea\nlin ford\nlan ing\njab ari\nhome spun\nhi stri\nhell bent\nglobal compact\nge tat\nfck n\nfallen kingdom\neee ek\ndev summit\nden ice\ndan z\nbur bage\nbou illa\nblu ed\nbar tra\nali brary\nagen da\n! :-)\nðŁĹ Ĵï¸ı\nà® Ł\nठı\nÙħ ÙĪ\nyou ghal\nwin inghour\nwininghour chat\nwest way\nwarnerbro sent\nw music\ntopa xi\nthe crew\nst offel\nspu bs\nso bers\nshore wood\nsf dc\nsav ita\nredri sing\npune eth\nparadox ical\npar ler\noscar wilde\nnca avb\nna dim\nmemor bilia\nlaiki pia\nki wami\njess glynne\njar rad\nibra him\nholi ka\nhol ston\nhat ay\ngran ados\ngan go\nff fff\nfari ed\ner tl\ne wu\ndissip ation\ndac ty\ncor dray\ncm hc\nci d\ncapital one\nbon ga\nbi aggi\natten burg\nasco c\nano don\nzhen itsyn\nw tc\nw kow\ntit as\nte agan\ntad os\ntablon dean\ntablondean uncios\nsof ts\nsay yid\nsap business\nsam c\nsal ame\nreform ers\nree sh\nran kine\npr grm\npic keting\npel ini\npar my\nout casts\norgan oids\no ag\nmovie making\nmik kel\nme ti\nmatta pan\nm du\nhol lar\nhhshk mohd\ngu tless\nfro wning\ndab ang\ncred itor\ncnd poli\ncar gos\nbid deford\nben field\nbaz o\nay da\nar nab\nam ak\nðŁij ¢\nå³ ¶\nر اÙĨ\nwork books\nwah da\nw brc\nveri fies\ntu j\nth ao\nstr ato\nsophi et\nson al\nregi stries\npk n\np libersek\nnom ercy\nmid sommar\nmi ocic\nmen ial\nmartingu itar\nlove music\nlaugh ter\nkun o\nk tf\ni acc\nhorror fan\nge ingob\ngar nering\nflaw less\nfantas mic\nfamiliesto gether\nex as\nentre prise\nenniscor thy\nend all\ndro yl\ndisgu sts\ncin ders\ncarpinter ia\ncant illon\nbrightling sea\nber the\nbe kind\nbang sar\nantimicrobi al\nai duk\nãĤ Ĭ\nwear ing\nve ur\nu gar\nthe mindyproject\nspirit us\nsp ade\nsen iority\nsalicy lic\nryo ta\nramin karimloo\npat chett\non tein\nmish ti\nly copen\nli bido\nlesmis official\nkal is\nire les\nhabl ando\ngu son\ngaz ans\nfound ationday\nfin ns\nedel brock\ndun wich\ndevon te\nck p\nchris rock\ncanad agames\nbok sburg\nbohemi ans\nbapti zing\nb ju\naziz ah\nau li\nar test\nalter nate\nal mar\nair freight\nabc grandstand\nðŁĺĬ ðŁĴĹ\nç elikkol\nvin z\nvi ajar\nun mitigated\ntrac i\ntor turous\ntaver ns\ntal bots\nstur f\nstar magic\nshi zzle\nshack elford\nse vigny\nsali v\nsa xi\nru thi\nrte sport\npro zac\nnr n\nnc ba\nmor pho\nmiddle ware\nmc vities\nman ion\nkar ly\nj smith\nj fr\niron ore\nhumb ert\nhorse show\nhorse and\nha chi\ngum bel\nglo at\ngil an\nfiord land\nfin u\nf gw\neurop car\ndÃŃ az\ndre view\ndra v\ndont judgeme\ndistribu tive\nches ley\nche sky\nbus ily\nbon gani\narm less\nair boat\nz ut\nyi ann\ntren tham\ntrau mas\nthu y\nthomas mulcair\nthere val\ntar ma\nste ichen\nstarbuck s\nslu gger\nsland ering\nskelli g\nsau chie\ns vod\npot ent\nou zi\nou rown\noi des\nogl ala\noccupational therapy\nnin a\nmine ola\nmascul in\nly ari\nluke goss\nlive blog\nle clair\nlam pang\nlag atta\nin boxes\nhil versum\nhal eem\nhag man\ngsx r\ngor m\ngio chi\nga x\nfrat ello\nfor zaf\nfirst avenue\nfil le\nern ary\nel b\ndw ana\ndra wl\ndhar am\ndev ou\nchab ert\ncarol ers\nayr shire\nato ka\nanam ari\n!!!! @\nâŀ ¸\nê s\nvoic esof\nut g\ntomorrow world\nthenationall ge\nth ors\ntar un\nsyn c\nre ubens\npro ck\nor row\nnath ali\nmy job\nmu tin\nmo el\nmeille ur\nmcdon ell\nmb ri\nmaryanne hobbs\nma dy\nluc ado\nkel lett\nke isuke\nke il\nhan shin\ngare tt\nel sa\ndr ury\ndis ent\ndigit ale\nden nett\ndan foss\nbi wi\nap onte\nðŁĶ· ðŁĶ¶\nzom bi\nyur ts\ny ingly\nvali er\ntf xc\nstu c\nstepin ac\nread in\nrani mukerji\nqu belfast\npir o\nph ole\npf as\nor as\no gi\nnu x\nnot cool\nmarke teers\nma bel\nm res\nlycopen e\nlu en\nld cs\nl ary\nku lam\nkil ter\njumb led\nh ounded\ngo sto\ngiann ini\ne gger\ndowning street\nco ola\nbra am\nbike way\nbe ve\nbar aat\nbak are\nand le\naccre tion\ny one\nwaterloo ville\nwarren point\nu rock\ntrum pet\nthe hindu\nsynes thesia\nstra ya\nsmock alley\nsin y\nsidhar th\nsa hl\nre plug\nre han\nrataj kowski\npseudom onas\nprivate ers\npre pa\nper spir\nox fords\nolu wa\nnd weeksary\nmy celi\nmu ell\nmk hize\nmi sion\nmau ghan\nlo onies\nkn vb\nkie ren\nkha bar\ninsi stent\nidiosyn cratic\ni spa\nhijack ers\nground nut\nglo aming\ngi u\nfen rir\nfel da\nfe ts\ned ict\ndra p\ndel ton\ncrook ston\nchin ko\nchi we\nch ch\nbor gore\nbio logic\nberk ley\nðŁIJ° ðŁIJ°\nت ØŃ\nzi kav\ny awa\nw fg\nved hika\nun organized\nun chman\nstep brothers\nso pp\nsam j\nred ington\nraf museum\npu shers\npresent you\nom ial\nne wed\nnation tv\nn power\nmor tar\nmodi fied\nmeri wether\nmac ari\nloch aber\nlloy ds\nl mm\nku h\nhin ders\ngrl powr\ngra h\ngo gue\nfran king\nfat in\nf hollande\ndom aine\nco pro\ncadu ceus\nbas seth\narsen ault\nanti matter\nano de\nal tis\nach t\nðŁį¾ ðŁ¥Ĥ\nèĬ ±\nw ando\nun deterred\nthel p\ntan cies\nspeed well\nsp lo\nso hee\nsnu gly\nsen so\nsay yed\nsar ak\nroz elle\nrenega de\nor ino\nnutrition month\nnosh aven\nnemato de\nmista jam\nlax alt\nku ji\nkey sight\nk ori\nj manziel\nhuman ize\nhu ac\nhome world\nhol cim\nhe bb\ngreen halgh\nga elic\nfur suits\nfranchi se\nfibr ous\nfacts about\nelin ski\ndu sters\ndar rene\ncr itt\ncor to\ncomic market\ncasso wary\ncameron monaghan\nca ched\nbrick by\natfirst sight\nabraham ic\nðŁĵħ :\nze dek\nyu van\nwinter garden\nwad hwa\ntrain sec\nthe tour\nthe american\nte ac\nso blessed\nsimon sen\nrefu eled\nrealc frampton\nr ff\npe b\nmor ato\nmin strels\nmex co\nlumin aires\nlong mires\nlondon zoo\nla ren\nj z\ninspiring women\nice storm\nhom ony\nhistor i\ngry phon\nglobal fund\ngasmonkey garage\nfire eye\nfin techs\nel brus\ndoc tored\ncy de\ncom au\nclark son\nchuk wu\nchar minar\nchap i\ncadill acs\nbringyour dogtoworkday\nblow up\nbatt ler\nap lay\nan av\namazone cho\namazon studios\nðŁĵ Ĺ\nر س\nyoungand hungry\nunbearab ly\nturbo tax\ntonko tsu\nt gowdysc\nsubsi ded\nsi ff\nshot ton\nshi ma\nsemin ole\nsar ms\nru mer\nqueens lander\npre zzie\nnol ita\nn cia\nmostreque sted\nmichel instar\nlent on\nlaw breakers\nkale o\njourne yed\njay mes\njare t\nin vigil\nhelen yu\ngoogle chrome\ndun keld\ndun ga\ndry dock\ndepre ssion\ndap a\nclement i\nchar u\ncer vix\ncareer fair\nbrooklyn brewery\nben ita\nben de\nbees ley\nbb ces\nbay an\nbar ta\nam ram\nad gita\nãĤ ¶\nâĿ¤âĿ¤âĿ¤âĿ¤ âĿ¤âĿ¤\nzen i\nye gre\nwhe elock\nvis wanathan\nvideo graphers\nvarusar ath\nus at\nuri jah\nu ap\ntric kett\ntri ana\nto sun\nthen ational\nssi e\nrumb lings\nrosen blatt\npil fered\npam uk\np nm\nmicron utrients\nmic heal\nmatch book\nmac and\nlumin escence\nl dr\njo wl\nj fl\nj blm\nitch y\nis na\ninterven es\nho ag\nhill head\nhi der\nh xh\ngr fc\ngle an\ngas kin\nf dr\nenvel oped\ndelav al\nde stress\nde gan\ndar u\nchar i\ncdn pse\ncare takers\nbunk house\nbu star\nbty ste\nbed ell\nbe ak\nbally clare\nal by\nðŁĻĮðŁı¾ ðŁĻĮðŁı¾ðŁĻĮðŁı¾\nðŁĺ¡ðŁĺ¡ ðŁĺ¡ðŁĺ¡\nðŁĴĻ âļ½ï¸ı\nðŁĮ ¨\n« @\nza ghe\nw abc\nthe we\ntech forgood\ntam bay\nstandwith pp\nspartan pride\nsouther ner\nsj d\nshoal haven\nshan xi\nring worm\nri led\npu mice\nptar migan\nponte vedra\npk l\none shot\nmon tane\nmis awa\nmilos raonic\nlo teria\nlittle league\nleam ington\nl cb\nkab ar\nit se\nhere theycome\ngarri ott\nfood fight\net si\ndoctr ines\ndeath by\nc xo\nbumber shoot\nbrum by\nbral ette\nbal and\nbaf tatv\nawa it\nanth onym\nðŁĺĤ ðŁĴģ\nðŁĩ¸ðŁĩ ¾\nyahoo sports\nwei h\nuni onized\ntre svant\ntoor ak\ntic ias\nthought less\nsi thole\nsfor days\nsen y\nsc eo\nsamiz ayn\nsak al\ns ó\nrock wood\nrit enour\nr mt\nprecari ously\npor tedly\nple tcher\nplate au\nor raine\nob server\nno che\nne meth\nnas b\nmire ille\nme zz\nmb ts\nmassape qua\nmarin a\nkirk wall\njr motorsports\njabo deta\ninu vik\ninger many\nindv ssa\nhend rie\nglass man\ngeorge mason\nfudd ruckers\nfir mament\nemb l\ndri pped\ndental health\nd age\ncom piles\nchase z\ncaffe ine\nbug anda\nba v\nal per\nago stini\n) âĻ¡\nðŁĺį ðŁĴļ\næ¸ĭ è°·\nyo ked\nwis niewski\nwi xt\nvegas strong\nva asa\nuni kent\ntor oro\ntoday im\nthel oo\ntam ari\nt anni\nstu der\nssen den\nson da\nsol zhenitsyn\nsky team\nsitt ings\nsho liday\nsand ys\nrav n\nra him\nque rer\noxygen ation\nnbc grimm\nmur alist\nmath are\nmar ham\nma gov\nle ee\nkn j\nk go\niy pt\ninj as\nin an\nibero star\nher bert\ngre molata\ngran th\nglass er\nex ul\nenjo daro\nend angers\neg fr\ndu damel\ndis que\ncompa q\nciti open\ncentrep ompidou\ncathr yn\nby om\nbreak ou\naw u\nassist ant\nash lee\nðŁĺ¢ .\nðŁĴĸ ðŁĺį\nðŁĴª ðŁĺİ\nâĹ ¦\nyou matter\nyo glu\nwin tered\nwid mer\nvaqu ita\nvap ing\nun patriotic\nthe tom\nt ation\nswa thi\nshow off\nsecret smw\nsay les\nric ard\nrepro ach\nrad ham\npul la\nnov ae\nnew bold\nme lections\nmatch box\nmait ra\nma sing\nm views\nle gic\nkel ty\njocel yn\njave dakh\nj hene\nink ya\nhar ter\ngen os\nfus arium\nfirst day\nfif o\nfaul ks\nfast food\nfa eries\nel stra\ndan se\nchey enne\nc mac\nbohemian rhapsody\nbar kan\nargy ll\nannast aciam\nannastaciam p\nag grieved\nðŁĻĮ ðŁİī\næĺ Ł\nâĿ¤ï¸ı ðŁİĦ\nਠķ\nzu erich\nyu helenyu\nx aver\nwarren buffett\nunivers iti\ntol liver\nt pain\nstop motion\nspo etry\nsnor ts\nshoai bmalik\nro va\nre train\nprep talklive\nplan eson\nop ale\nomg adamsaleh\nno dal\nnike sportswear\nner vomusic\nnenokkad ine\nnational pumpkinday\nmon tero\nmc cue\nlouistom linson\nkha dim\nju ts\njens stoltenberg\nilan ds\nije bu\nhow ley\nho tting\nhe h\ngun smoke\ngo crimson\nflat land\nfer o\nep g\nelder scrolls\ndsb math\ndivin er\ndine en\ndem me\nche h\nbo tes\narse hole\nali ans\nag g\nacet one\nðŁĺį ðŁĺĽ\nwhywe march\nwh als\nur prise\nul ysse\ntorontomar lies\nst clair\nspring clean\npran ayama\npneu matics\npat ux\npar athy\noil seed\nnie kerk\nmon dele\nmi strial\nm ni\nlu ri\nkr ld\njim mi\nimpressi onistic\ni lex\nho day\nha kata\ngur ren\ngrow ths\ngar stang\ngal ician\nfood stagram\nfoo do\nflori d\nfitz gibbon\nff v\nf atten\nen chong\ndes con\nde filed\ncur ator\nclou dy\nbur bridge\nbe tters\nbar cell\nban er\nall good\nah rens\nach ild\nÙģ ض\nzar in\nwis on\nval la\nutri ent\ntwit con\ntimothy sykes\nsur realistic\nston ecraft\nshe ek\nshawn formmva\nsave me\nro many\nravi kumar\nram bles\npink out\npac north\nosc a\nof action\nnichol ash\nnev sky\nmu kil\nlang an\nkra emer\nkhan academy\nkar ama\njohn coltrane\niz quier\ningle by\nhash ish\ngho e\nfort worth\nexcu sed\ndundal k\ndugg ery\ndefence hq\nblackpool fc\nb ingle\nair amb\naf le\nðŁĺĭ ðŁĴķ\nðŁİĥðŁİĥ ðŁİĥ\nðŁį¾ðŁį¾ ðŁį¾\n} }\nzo id\ntrue tothe\nthic kest\nthe gazette\nthe beach\nstab bings\nscri bing\nscreen plays\nsavethe arctic\nregi mens\nqad r\npi z\npat sy\noc m\no yl\nmr jame\nmortad ella\nm ve\nkab at\njacqu elyn\nham zah\nglobal calgary\nged ling\nga ijin\nft l\nfound lostdogs\nfa ur\ndec affe\nd mo\ncor nice\nchutz pah\nblun ted\nblak elively\nbhar tiya\nbarne sand\nback pack\nba ila\nan eri\nç ij\nâĿ¤ ðŁijĮ\nâļ« âļª\nzikav irus\ny eller\nwp tz\nwoje spn\nwho i\nway ang\nver so\ntur alist\nthunder bolts\nte ko\ntar leton\ntab let\nsol apur\nsmithsonian mag\nschool lunch\nron stadt\nny primary\nno strand\nmon isha\nmilit aria\nmal lam\nlaz ily\nlamb da\nkrasno yarsk\njoker it\njer nigan\njami ec\ninsectic ides\nhome buying\nhermand ad\ngood latte\ngarden ing\nfu ria\nfrontrun ners\nflatul ence\nfaceli fted\nf naf\neven tos\nemul ated\ndubcity council\nditavon teese\ndir nt\ncon ure\ncabincre w\nben icio\nbamboo zle\nbadger football\narrow writers\nwh anau\nwa seda\nw gp\nw aco\nvete ments\nup b\nt attle\nsm k\npp n\npat er\npan ter\nou rense\nn aco\nmy rick\nmol ko\nmo sin\nlive jasmin\nlede sma\nlabra va\nla joie\nl son\njob site\nin seoul\ni ale\nhelm holtz\nhav nt\ngru ene\ngoss amer\nfrance s\nfire walls\ncolo ssal\ncau pdates\nbloggers blast\nben edi\nbarbar a\nau dax\nas af\nalhamdulil ah\nal uko\nac ed\nå² ¡\nঠª\nاÙĦ Ùĥ\nz ani\nvikas gupta\nur sus\ntwit chy\ntube strike\ntry pto\ntrin os\nthe centre\ntam uc\nsteve yeun\nsp es\nrashi dat\nrang ga\nquin ny\npoo s\npo stie\npe eters\noc inema\noakridge boys\no sk\nn oura\nmostrequested live\nmarche se\nmaj car\nlou den\nlazen by\nlac om\nhigh end\nhal is\ngon calves\ngo doy\nfla re\nfin ial\ndulce maria\ndr jimmy\nda ag\ncredenti aling\nco bber\ncharle ville\ncampan a\nbunk ering\nbuck minster\nbrook stone\nboe tt\nbi jou\nay in\nart majcar\nare f\nact ments\nac esse\nab z\n^. ^\nðŁ¤Ķ .\nwah ine\nw si\ntwit er\ntown square\ntorre vieja\nsuper chargers\nstrike sback\nsouth town\nslip cover\nsi kes\nsho ed\nraven wood\nparabel lum\norme au\nmoon ves\nmil ady\nmatt cardle\nmark cavendish\nld v\nkwe k\nkre ator\nkh atri\njo ba\nhome alone\ngige conomy\nfor tes\nff games\ndi ph\ndespon dent\ndel hic\ncm tawards\nchemi st\ncatac lysm\nbu cher\nall rise\nair bourne\nagli one\naf g\nz he\nwester ner\nweard ale\nwas dale\nvotelittle mixuk\nvi ator\nvasec tomy\nthy ssen\nstoryof mylife\nstan lee\nspor ti\nsin ki\nshu bham\nsha bet\nserpent ineuk\nser an\nsaf ire\nsa adi\nred carpet\nreal kvb\nre try\npeople mag\npar kers\nol lg\nok awa\nna al\nn gp\nmirand asings\njune siphone\ninextric ably\nibu ki\nhe ch\ngong chan\ngaunt lets\nfaken ews\ndoc ter\ndoc g\ndo tti\ndeci mate\ndec ayed\nchar twell\nboon ville\nbal h\nayl mer\nanthem game\nandre arussett\nake over\naf lat\nadm ittance\n!!!!!!!! !!!!!!!!!\nðŁIJ ĭ\níĥ ij\nãĤ¢ ãĥ¼ãĥĪ\nâĺħâĺħâĺħâĺħ âĺĨ\nzey nep\nyn geal\nwai ves\nun plugging\nu spa\ntul si\nthe wcs\nspar sely\nshri mpton\nsel fin\nscoo b\nre bro\nquo in\npreci osa\npoo chie\npatient care\nom arab\nno wra\nmss arah\nmon as\nlack lustre\nkar ter\nkal au\njav ale\njac ey\nin review\nifeel slovenia\nglobal streetart\nglam berts\ngh ockey\ngan ics\ngab bi\nfrustr ate\nfacil ities\nelderscroll sonline\nel din\ndo ga\ndis armed\ndin ium\ncor uña\ncaul k\nbu ah\nben nu\nbeer garden\natt lee\nadol phus\nab im\nðŁĶ´ðŁĶ´ ðŁĶ´\nðŁıĮ ï¸ı\nา à¹Ģà¸\nworld pride\nwil mette\nvaqu eros\ntresp ass\ntas c\ntal bert\nsy al\nshar ples\nschu mer\nroseof tralee\nrob delaney\npu pu\npr dp\nplec trum\nobsc uring\nnash villes\nmiz un\nmc coll\nmaje sties\nlov age\nl sbu\nkind hearted\nkat oomba\nka a\nk iting\nja j\nis cuit\nhot te\nhell hole\nfuji fil\nfree the\nflo gged\nepi pen\ndulu th\ndix son\ndefin it\nde et\nclich es\nchi ette\ncal arts\nbt sport\nbou dic\nben fleet\nbas in\nassate ague\narth quakes\nah atchee\n!!!! )\nvar adero\nthe work\nte ha\nstory brooke\nst weeksary\nsa as\nri el\nreplic ator\nrag sdale\nqu okka\nprophe sied\nple ats\nphoto walk\npastr ana\nmone ys\nlomond trossachs\nler ma\nle eco\nlac an\nhair removal\nglobe business\ngau train\nfu oco\nfrank land\nextraterre strials\neve e\ndissoci ation\nd bongino\ncdc whistleblower\ncavali eri\nby your\nbuter in\nbi dwell\nann alisa\nacceler ate\nðŁĮ ľ\nze ej\nx music\nx clu\nwur tzbach\nwe scra\nwa qt\nu dah\ntable mountain\nsun nis\nspro perty\nsk cbc\nshand ling\nsay eed\nref n\nrambunc tious\nradi ouk\no bre\nneuro scientists\nn st\nmi tha\nmedi acom\nm trench\nlang en\nkon ark\nke gel\njeopar dy\nhurri yat\nhon shu\nh my\ngu ant\nexpe d\nem ay\ncra ske\nchou dry\nchoic es\nator re\nðŁĽ ³\né ¾\nwx yz\nw bai\nup shaw\nude my\nthe tide\nthe adam\nterror ising\nt pn\nsub has\nspraw led\nsport trust\nsp cc\nsol us\nsee der\nsa hitya\nren do\nran kin\nopen innovation\nnasci mento\nnab ors\nmumb ling\nmovi enews\nmedia watch\nmaz ars\nmar abou\nlym pics\nis key\nil ing\nicri sat\nhuman ized\nhamtram ck\nha ah\ngra aff\ngam ecenter\nfr illed\nfac undo\neuron ext\neu caly\nespn cricinfo\ndo oms\nchil cot\nce ms\nbon y\nboard wal\nbatt elle\nbad diel\nam bre\naltru istic\nallsven skan\nago a\nðŁį £\nwreck less\nwing less\nwater ski\nveggie tales\nve ge\nta pu\nsk rill\nsent amu\nsch ism\nsac ra\nric helle\nreprodu cible\nprioriti zation\npais ley\nny cre\nnr ly\nnd fb\nmourn ful\nme ja\nmark ballas\nmalaysi angp\nlock able\nko er\nko dai\nkneb worth\nkim mich\nk ree\nic hu\niam sunnydeol\nhandic apper\ngeor gy\ng tt\nflau bert\ness i\necker d\ndar u\ncole brax\ncliss old\ncle mmons\ncity year\nbro ot\nblack kk\nanti sm\nanne mari\nank lets\nanim ous\nam bon\nadam u\n; ~;\nåĭ ķ\nzer flin\nworld catday\nwo hooo\nwedding cake\nwa vey\nval en\ntouch é\ntor ito\ntit re\nth anda\ntam anna\ntal bott\nstretch able\nstep ford\nss afa\nsk ed\nsch mit\nreduc tive\nre brands\npul ver\nproble ma\npra yag\npag er\np wl\nonep unchman\nno elle\nmar shaw\nmalti poo\nlineof duty\nlac rosse\njones es\nimpractical jokers\nhsi ao\nguill ory\ngio co\ngalent inesday\nfed monton\ndiscer nible\ncur ates\nclarine tist\ncar ner\nbori vali\nblue apron\nbiz tips\nbho gle\nbas zler\nb agram\nar mi\nan acho\naguas calientes\nâĻ Ģ\nzi z\nweather all\nwachu sett\nvo el\ntu sd\ntostit os\ntheo cracy\nthe toronto\ntam ucc\nsequ itur\nsaadi q\nr ones\npoppy appeal\np hey\now sla\no sen\no cot\nnewsc asts\nmol d\nlo dha\nken tish\nitu l\ninnis fail\ngott alove\ngonzale z\nduc ation\nd jr\nchou han\nchar as\ncdw social\ncap tur\nbra ys\naqu inta\nal ber\nad dis\nach ar\nac ela\n_ ]\nâ¬ĩï¸ıâ¬ĩï¸ı â¬ĩï¸ıâ¬ĩï¸ı\nzu b\nv tt\nur sinus\nun lined\ntransis beautiful\nthan ts\nsy e\nsb kb\nrebec cal\nre nia\nplo d\npc sd\nouter banks\nout standing\nmonte se\nmono cular\nmom odu\nmo dano\nmb y\nmatt mc\nmarie osmond\nkra sner\nkonstan z\nk shan\njis c\njen naf\nj lm\ni stock\nhornb lower\nhe ure\ngy atso\nfilm club\nfe ku\nenergy union\nduckduck go\nd eller\nconce als\nbi pin\nbh g\nbe ren\naz mi\nas microbiology\nanthropo logists\nðŁĩ° ðŁĩ·\nਠ¦\nwil mott\nwasi mak\nup in\ntric ot\ntri vago\nti ah\nthegood place\ntest ing\ntemper ley\nsmo di\nship mates\nsadda haq\nsab se\nrin cess\nram is\nquick fire\npom pom\npla skett\npl td\now ned\nover hauling\nold dublintown\nmono chrome\nlo iter\nl pp\nkur unzi\nkhoob surat\nju doka\nholy cross\nho reca\nhawk smoor\ngr ich\ngo bble\nexp els\ner ath\nelu de\nd fd\nclo aking\ncc tr\nc mac\nbon homme\nbo ga\nbas si\nbap t\nash esi\nandrew scheer\nall spice\nac ma\nabrac adabra\nab all\nðŁĺİ ðŁĴª\nà¸ķ ลาà¸Ķ\nzay as\nverme ulen\nupdat er\ntweetyour lockscreen\nsilver tips\ns design\nru chi\nquintess ence\nquetz alco\npul ation\npent acle\npan ton\nnight jar\nmy d\nmouss aka\nmount sinai\nman gle\nmakar ova\nlet smo\njeong guk\ni ef\nhop mancup\nhonor arium\nha sse\ngo sse\ng pg\nfawad akhan\nfair fiel\ndur u\ndream time\ndown river\nculmin ates\ncul shaw\nco topaxi\nchlo rella\nchipp endales\nchatsworth house\nbrit awards\nbr ina\nasymp tomatic\namar aj\nai vaz\nag at\na stern\n! ãĢij\nâĢ ¾\n⤵ï¸ı ⤵ï¸ı\nyu ppie\nwomen lead\nvape community\nun deserving\nt birds\nsun niest\nspring wood\nsp reading\nslow poke\nsee ther\nsche matics\nsa zer\ns grove\nru drak\nran ma\nquoti dien\nober st\no han\nnl rb\nme o\nlen nard\nkon ica\nescu dero\nelli ptic\ndubl iner\ndo brik\ndike mbe\ndesig nations\ndam pened\ncun liffe\ncol burn\nblo go\nbann erman\nwith stood\nwant to\nvanc o\ntwit tb\ntu lo\ntrend setters\ntor ists\nthe drive\ntau b\nsyri acrisis\nstay lor\nskit tish\nsite wide\nsilen thill\nshow reel\nrosson eri\nrip curl\nrevo kes\npor thole\nnorth cott\nno aa\nmusk ok\nmoy les\nmountainde w\nmopar ornocar\nmont ella\nmiddle earth\nliven ation\nissu er\nhuman izing\nhighway man\nhe ee\ngr attis\ngo bigblue\nghost writer\nfood love\nfo tball\nfabian ski\nen si\ndit ton\ndead shot\ncalvar y\nbrown wood\nbest solo\nb ss\napar ker\nan ty\nae z\naccessi ble\naa al\n. ))\n! ðŁĴĭ\nyour i\nwhar ton\nwee tup\nu tre\ntruff led\ntro cadero\ntex ts\nsyndic ates\nstreet s\nstal gia\nskil led\nshro ve\nshin geki\nsauvignon blanc\nro hs\nrex roth\nra us\npi ggly\npc mag\npap y\npal an\nout lasts\noss ining\nmin ecraft\nmccl ane\nlec on\nle ws\nkon zer\nkat eri\nj illy\nj ades\ninstac at\nhenry lau\nhe elan\nhal dane\ngor n\nfrangi pane\never clear\neric afernandes\nel low\nde sy\ncat bird\nbrother s\nbreck sville\nbe ha\nbal kh\nav anza\nau sty\nar ama\nan ello\nan berlin\nabout time\n!!! \'\nâĿ¤ï¸ı âĢį\nâľĬ âľĬâľĬ\nwoo dgate\nwinoo ski\nv old\nturn coat\ntrail run\nti psy\nthibo daux\ntheli um\nthe house\nter os\nstoke ontrent\nsp agna\nsoo th\nsn c\nsli mmed\nsid ley\nschle gel\nry uk\nrive ters\nra kan\nquiet us\nprobab ilistic\npopu ps\npap is\noun ge\nner vosa\nnat us\nmotor point\nmit ford\nmike portnoy\nmed field\nmayo ck\nlyn wood\nlocal music\nlive shere\nlaun dre\nim kristenbell\niheart media\nhar ps\ngo aztecs\ngi vin\ngc saa\ngar bi\nfar sley\nem ons\ndw stweets\ncrou ton\ncoo te\ncaptiv ity\ncake walk\nbud weiser\nbillion th\nbath and\napp sec\nandrew zimmern\naj inkya\n;__ ;\nvisu alab\nus yd\nuniv miami\nthebody shop\nteam exo\nswi l\nshadesof blue\nsh murda\nsenran kagura\nschnit zer\nra elynn\nolivi awilde\nobjec tionable\noak ville\nnis sang\nn lb\nmai ko\njon o\nir relevance\nhollow crown\nhel pin\nharb ours\nelle uk\ndam pening\ncobble stones\nbrooks running\nboysen berry\nboston herald\nbe all\nane mic\nall new\nalder leye\nalan carr\nab w\n!!! :)\nðŁįĮ ðŁįĮ\næ Ķ\nzu ma\nz v\nwinter land\nwild side\nwhere the\nvu j\nun du\ntr onik\nth ando\ntempl ars\ntart ans\nsyl va\nstur gill\nscrew fix\nre discovery\nq os\npetiti oned\nper ce\npan ti\noxid ants\nout buildings\nolivi am\nnis sa\nnew stead\nmilon akis\nmc neal\njobo pening\nhub caps\nhel med\ngrant chester\nfrigh tens\nfin land\nemoun tain\nem eli\nef am\neaster rising\ncour vo\nchar tering\ncari oca\ncan ing\ncam of\nbr acci\nbol tup\nbobro vsky\nbend iciones\nbbc scotland\nat tah\nag ner\nåij¨ å¹´\nzapp afaye\nyul in\nwx w\ntur vey\nthe clonewars\nsh enton\nrashidat laib\nr fd\npu gin\npu edes\nplat ino\npa ik\nnichol a\nn ough\nmou ret\nmal pensa\nkou n\nke von\njit bumba\nji ao\njessic acap\nimperman ence\nic ket\nh anne\nequ inix\ndistr acted\ndis regarded\ndi ah\ncon focal\ncompac ted\nclo ss\ncarat selcaday\ncal lies\ncai roli\nbt son\nbmw usa\nbee ton\nambo seli\nalign ments\nali ghi\nya hu\ny uli\nwater dog\nw cia\ntink ler\nthe star\nthalai van\nte f\nsubli min\nsqu ashes\nsol arium\nsaveour nhs\nra gon\npower breakfast\nphoenix ville\nnel sons\nnaz riya\nmani folds\nm spartner\njir ga\njaco bean\nj rue\nite it\nhon das\ngu eye\ngo yotes\nforest day\ne ton\nderby uni\ndding ston\ndac tyl\ncum bre\ncork town\ncongre gate\ncincinnati zoo\nchal ke\ncado gan\nbreeze way\nbol us\nbernar din\navi da\nal ooza\nyo jimbo\nyash ica\ny app\nwpmoy challenge\nval es\nup draft\nsub nautica\nstic ism\nss rugby\nsr ally\nsli thering\nsli mani\nship ka\nsex tu\nsci fis\nsamsungmobile us\nram at\nr nas\nqueen elizabeth\nprou dd\nplaying cards\npe tes\npark gate\npan vel\nola fur\nmahan ati\nlm f\nkie ffer\nka il\nharmon izing\nhar is\nge onews\ngam bles\negoti stical\ndeac oness\ncu sick\ncruci fy\ncheese man\ncat amounts\nbread stick\nbla g\nat il\nas wj\nabsor bers\nâĿ¤ï¸ı ðŁĴľ\nâļ½ï¸ı ðŁĴĻ\nyo gic\nwil drose\nvidy arthi\nv artan\nuch is\ntw ar\nthink pink\nteam ireland\nsw on\nsho orn\nselec tivity\nsa ola\nron ces\nro it\nrep mike\nra sen\npur portedly\npu skas\npu lang\nplur ality\npi ppo\nphosp hor\npet co\npad locks\nosho di\nmun cy\nlike it\nla ssies\nko ss\nkar ns\nha ki\ngiro la\ng ado\nfiel dre\nej io\ndol ley\ndigi day\ndi om\ndestruc to\ndeci bels\ncoder dojo\ncc s\nbrown ell\nbon ic\naw adi\nath am\nas pas\narag orn\nan oop\n." âĢĶ@\nðŁĴª .\nðŁijĢ .\nâĶ ı\nvisit nland\nunder shirt\nun becoming\ntrans gender\nthelim it\ntat anka\nsu omen\nstpauls london\nshru bbery\nshi fu\ns bir\nre dedication\nplay pokemon\npen man\np hair\noy al\not tum\nnam ie\nn antz\nmio cene\nmin a\nmarcel le\nmali on\nliquid ated\nlampe dusa\nisleof wight\niron stone\nintell fusion\nhe ba\nellen page\ne tro\ndheeraj dhoopar\ndance sport\ncra po\nco ghlan\nclearthe shelters\ncic adas\nchec kyour\nca relessly\nbreaking weather\nbor sa\nbestsolo breakout\nati vo\nani versary\namnesty uk\nal tea\nai guille\naf ka\nabhi jeet\naap g\n] #\nðŁijŃ ðŁijŃ\nìĬĪ ê°Ģ\nzed ong\nwheel ing\nwh oooo\nwestand by\nv cp\nun inspiring\ntoken ization\nto velo\ntea shop\nstrongh olds\nri yal\nre ino\nravin ia\nnot weak\nmarine insight\nlo yee\nkrishnamur ti\njunior doctors\njock strap\njabodeta bek\ngrid locked\ngrant cardone\ngl g\nge se\nge mann\ngas works\nero ticism\ndru s\nconfed cup\nck g\nchristin ec\nchick end\ncaitlin moran\nbrand new\nbike toworkday\nbengalur ufc\nbe sa\nas ano\nðŁĽ Ĵ\nठī\nzav vi\nye ster\nwood field\nwinter ton\nucl h\nsylvi a\nstev el\nsi bat\nshep ton\nshab an\nservice members\nsep ta\nsassaf ras\nsa ther\nraf tery\npress freedomday\nposit ory\npi v\notr b\nnino y\nne of\nnag ra\nn te\nmotor ama\nmom e\nmet in\nm tr\nlis land\nlac tobac\nky iv\nkil bane\nkat em\ninsinu ating\ninfr inging\nho pson\ngreen blatt\ngar nets\nexp ander\ndroyl sden\ncot ash\ncol an\nclou draiders\nclau ghlin\nca jon\nbc p\nbae za\nad hm\nðŁĺĮ ðŁĺĮðŁĺĮ\nðŁİ¶ âĿ¤ï¸ı\nâĻ ¨\nx at\nwaq as\nup standing\nsy ny\nskul leero\nshan be\nsham ir\nscare mongering\ns zo\nro mulan\nre clai\nquadru plets\npro enza\npop vinyl\nplain ville\npbb abscbn\npati o\nover nights\nor sini\nonce always\nold games\nnam on\nmer thy\nmay port\nmat la\nlo vitz\nkul ick\njessicacap shaw\nj wa\nit c\nhou ck\nhappy life\ngrey stones\nfronti spiece\nfound pets\nfer rera\nfanta st\nduck sunlimited\ndoom ben\ndeniz ens\ncostab lanca\ncomi enza\ncli matologist\ncheat sheet\nbrit geosurvey\nble a\nban corp\naquil ino\nann nd\naes a\nad ai\naa sen\nðŁij ĥ\nword stoliveby\nvesic les\nvach on\nunbeliev ers\nun needed\nsof unny\nsinfoni etta\nsi pp\nshin ny\nshel agh\nsame er\nrs gnl\nreal lucylawless\nr wc\nr ccg\npi ps\npaste magazine\nni j\nme tries\nmc gavin\nmc broom\nmal d\nlow rie\nk ericho\njam ma\nin japan\ni fex\nheritag es\nhb h\nh z\ngreen stein\ngotg vol\nga ik\nfront page\nfi endish\nelectrocu tion\ndes sen\ncro ma\ncon sign\nclasi fic\ncir i\nbab er\nair drie\nðŁĺ± ðŁĺĤ\nzi ering\nzerflin music\nye ma\nyam a\nwk ts\nwis sen\nwhir ly\nwedding ideas\nw rens\nv dm\nspin ster\nsoli dari\nsj h\nshe tt\nscot tories\nsar af\nroy all\nraf al\npo h\npirates ofthe\npd q\nomg trolls\nnz veng\nnorth point\nmovi da\nmilk men\nmer ri\nma ines\nlecture ship\nkey rings\njil ted\nhypnoti zing\nhydro xy\nheu sen\nhal con\ngro sir\ngrays lake\ngood life\nfyn bos\nequival ency\neg go\neber hard\ncub bies\ncri sti\ncoo ts\ncan die\nbrain pop\nbatt enberg\navi les\nam fa\n. ðŁĺı\nðŁijĮ ðŁĺĬ\nðŁįģ ðŁįģ\nðŁ¦ Ĥ\nðŁ¤ IJ\nãĥ ĭãĤ\nâļ¾ï¸ı âļ¾ï¸ı\nwas l\nuk team\ntranscend ent\ntendon itis\nsu shil\nson iq\nsig g\nsi sodia\nshut itdown\nreali stic\npurpu rea\npper son\npomer anz\npay o\noral history\nol g\nnonchal antly\nmilton on\nmid summer\nman deep\nmal uku\nlife boats\nhor sel\nglob alized\nfle shed\nel ta\ndo gger\ndishear tened\ndi ko\nden geki\ncone head\ncold brew\nclosethe camps\nchino y\ncbs bigbrother\nca el\nbak ayoko\nas per\nalex andre\nal chemical\nal ane\nade k\n~ *~\nwheelchair tennis\nwaj ir\nvivid cloudof\nvividcloudof wat\nun abashed\nthisi sp\nstra at\nstigmati sm\nsel fa\nric on\npre pper\npearle scent\npac west\nor geron\no kuma\nliber tine\nkw t\nkot la\nkar ai\nk sn\niz he\nhuman istic\ngui se\nfo ton\ner au\nell sbury\nec chi\ndischar ges\ndead lier\ndaylight saving\nbow len\nbal ki\nbail ie\navo ice\nart school\nair lie\nyl land\nye urope\ny eni\nwaga h\nvo ya\nstat ically\nspo de\nsou led\nsocin n\nscholastic uk\nreal hiphop\nqueri do\nps as\npi des\npe lee\npass enger\nom ri\nol ley\nni ms\nn mt\nmo pac\nman ang\nma stro\nm kiii\nlili um\nky ary\nku mud\ninvic tu\nhotch kiss\nfu si\nfro tterdam\nfren kie\nfen land\nfair lawn\net ou\ndor r\ndelu ise\nconcub ine\ncan by\nbaren boim\nbad bad\nambi valence\nalleg an\nx po\nwi ggle\nwhit ty\nvegan hour\ntu dung\ntom asi\nto too\nthy atra\nthankyou thursday\nt dw\nt aga\nss ay\nsrini vasa\nsiddi qi\nsh ly\nround houseldn\nra ser\nr jr\nnor de\nmyth ical\nmel kwe\nlin ch\nkal ah\njes ús\nilla i\nhel ple\ngoodmorning world\ngabrielle u\ndu in\ncrony ism\nchy ler\nboot strapping\nat ol\nar apa\nall ent\nabra zo\naam c\nðŁij ¤\nç o\nwat kin\nu fl\ntom ica\ntaste maker\nsoo thed\nshop local\nsher m\nsell ars\nseasi de\nry delr\npro spe\npier ces\npho tonic\npe hle\np bt\nown your\nop ryland\none timein\nnpl vic\nnon alcoholic\nmor ado\nm gc\nlim ou\nl uni\njo well\niter ror\nink ster\ngru ppo\ngross mont\ngood boy\ngaw ad\nft z\nexpe diti\ners onal\nepsom racecourse\nem men\nedmon son\ncri mping\ncon eflower\ncomple ment\nchis inau\ncal abar\nbrother sosborne\nbeautiful bc\nau be\nari i\nam historymuseum\nalber tus\n? \':\nwir t\nwer m\nthie baud\nsuc i\nset suna\nseo tips\nro xx\nram ire\nproge sterone\npeter sham\npan op\np fe\norigin ale\noooo ooh\nnotthe fake\nnoshaven ovember\nnor i\nnom ics\nnd hakoo\nmm ac\nmau moon\nlu pin\nlo effler\nling erie\nleyden pride\nkinder sley\nkinder chat\nken o\nke strels\nk br\nizz at\nie tta\nhyper space\nhome schoolers\nhesit ated\nh nk\ngre bes\ngomor rah\nfox ton\nfairi sd\neating disorders\ndart board\nda ura\ncy fairisd\nchri smo\nchero v\ncetace ans\ncalum worthy\nben tos\namo on\nak rapo\na forum\n" ......\nâľ ´\nvirgin australia\nvet kin\nun substantiated\nu tra\ntun able\nston ed\nst p\nsp ong\nsn h\nshint aro\nscsu huskies\nrobbin sdale\npre st\npeds icu\nn fi\nmeg turney\nmarin el\nle stat\nlb v\nker sey\nkatiec assidy\njustin welby\nip c\ninternational womenday\nhy orin\nfor lan\nf tbl\nen ny\ncra dling\nchristmas market\nchand i\nbuffe red\nbro u\nben cic\naspen cer\narsen als\naron son\nair cel\nðŁĮ Ĵ\nyeg music\nush our\ntwee tsnow\ntru tv\nthe magicians\nt ä\nsubjec tivity\nsson oma\nshare it\nri vend\nrap tured\npur l\npublic ans\nprou lx\nout lay\no ggy\nnet scape\nnavi mumbai\nmu amba\nmed x\nmagnu son\nken es\nka jang\nk ask\njay pee\nj gr\nits gabrielleu\nimagin arium\nhorri fically\nhello games\nhead long\nhal ili\ngul ben\ngood land\nfoul kes\nfo ch\nfin ned\ner day\ndissip ated\ndeadpool movie\ndakima kura\nd ort\nchad stone\nbook outure\nbiof ilms\nbaf anab\nb co\nas besto\nali g\nactor sathish\nèĭ± èª\nwei der\nvitru vian\nth appen\ntele fun\ntab as\nsummon ers\nsugar ing\nsteel ernation\nspring water\nsla very\nshore lines\nrund gren\nro enick\npiscat away\npapu anew\nn car\nmo gu\nmegap lex\nmatt kenseth\nman than\nlaurenti anu\nla tha\nhong dae\nheim at\ngil ford\ngh ot\nfle ure\nfil ton\neo in\nelizabeth may\nel ander\ndys art\ndeath of\nby ways\nbrush pen\nbmw pga\nau kee\nant il\nangu lo\namyg dala\n$$ .\nðŁĺĮ âĿ¤ï¸ı\nðŁİī ⾨\nweare winter\nw tic\nw shh\nvintage hour\nven ir\nthe ta\nter race\ntee tering\nscri ms\nroot beer\nrik mayall\nra fc\npic ayune\nover party\nover blown\nostap enko\noptim ally\nool ers\nob verse\nnoble sse\nmyfirst tweet\nmother less\nmicro biologist\nmetro schools\nm ations\nlipp mann\nkh en\nion ization\niam ami\nhomes ickness\nhin ton\nh ce\ngw u\ngel b\nfur lan\nforum keralam\nfilmmaker friday\ndistinc tively\ncrowd source\nby en\nblon dies\nbel ay\nar boreal\nak ur\na ford\nðŁĶ ĸ\nwater ship\nvoltron legendary\nul san\nthereal grimmie\nte sa\nstonybrook u\nstar bound\nss si\nsnew video\nsh we\nsc bs\nsar awak\nsangu ine\nrough er\nre release\npro day\nns be\nnorth vancouver\nnorth side\nmyfox la\nmur kowski\nmoo sonee\nmonte vallo\nmohan raja\nmen ang\nmehboo b\nmac aques\njan itors\nhome kit\nfond ation\nfamily tv\nemp y\ne pl\ndun ston\ndon ner\ncowden beath\nbrun dle\nblogg ingtips\nblan ka\nbick ley\nbau r\nbas sano\nau rier\nari zzo\n" ..."\nðŁĻıðŁı¼ ðŁĻıðŁı¼ðŁĻıðŁı¼\nys rcp\nwilson ville\nwheat field\nvo gels\nvig na\nv sl\ntweeter app\nspecial isation\nsong tweeterapp\nsole imani\nsi mula\nsher win\nse ia\nsanat an\nreinvigor ate\nqu arts\npou lenc\nphysi ologist\npas sa\nown thefuture\nov ations\nol dee\noldee ire\nni ue\nn pp\nn joy\nmatthew modine\nlin h\nlam jarred\nke irin\nkasi ak\nha ire\nh pg\ngn n\ngalatasaray sk\nfran ky\neng sub\nen nui\ndishe veled\ndiscrimin ates\ndh s\ncultiv ars\nconco ctions\ncon tempo\ncl anc\nbu cc\nbo bb\nb aug\narchitec ts\nðŁĵ ¨\nye ow\nwieder sehen\nweb ber\nvol le\nvisit ma\nuniversal credit\nstar rett\nsport bike\nscre e\nsan jana\nrssur jewala\nre ssing\npr ings\nplac erville\nphi de\nou sp\norche strate\nor ity\nnorri stown\nnb hatt\nmo yle\nmil lett\nmeshu ggah\nmath ilda\nligamx eng\nkra s\nkip mooremusic\nk ss\nju gaad\nital i\ngon dor\nextra dite\neuro tunnel\neu chre\ndifferenti ator\nd weck\ncru tcher\ncor bi\nco cor\nco ben\ncin na\ncc ny\nboun ding\nboo ch\nbit ly\nb ence\nant ini\naden uga\nðŁİ« :\nwhi ston\nvince cable\nver ratti\ntur ton\ntra ppin\nthisi ss\nthel akes\nthe sea\ntam ago\ntal cum\ntal an\nsuc cotash\nsu ria\nsig ab\nshine e\nselect men\nschar f\nsay ulita\nsan j\nrugg ero\nren sburg\no dish\nne te\nnah da\nn ris\nmo haj\nmathi eu\nmart ineau\nkhadi jah\nkay ano\nkanchi puram\nib mi\ngun ma\ngh all\nform h\nfl acci\nfirst lady\nequ alling\ncorrup tible\nco bi\nci vet\nci era\ncab alleros\nbartol omeo\nav ons\nanjel ica\nal ci\nag t\naf tn\naci dosis\nðŁ¤· ðŁı¼âĢįâĻĢï¸ı\nè IJ\nyyc bike\nx files\nwit suniversity\nweb pages\nwa ard\nval in\nun set\ntypo logy\nsu wanee\nstockport county\nstartrek cbs\nstan e\nshor ted\nri stin\nray ados\npre hospital\npol di\npain swick\nmou n\nmoto america\nido wu\nicec aps\ngod splan\nfre sne\nfor i\nfich tel\nfe te\nf soe\nembarra sses\nebon yi\ndisappro ving\ncomic palooza\ncephalo pod\ncassad y\nbun tu\nbu shi\nbri ang\nana thema\nalter net\nadam m\nad mission\nac nn\n. ¸\nðŁı °\nyo gri\nwh ey\nw cb\nvel ar\nsymph onic\nstar ted\nspide y\nse bring\nsc abs\nsankal p\nprate ek\npleasee ee\nper icles\npater noster\npar ag\nob le\nnr k\nmun dele\nmaxillo facial\nma un\nm jr\nm clar\nkeeneland sales\nk live\nhouse keepers\nher ta\ngu mede\ngor dan\nfil oil\ndor mouse\ndisaron no\ndi shap\nd pc\ncol tford\ncmn hospitals\ncaer leon\nbur gas\nbi shan\nbha ag\nas roma\narmb ar\naccept ances\nâĨ ĺï¸ı\nvit o\nvar gas\nsv f\nsuper fight\nste eg\nsil ke\nno ia\nmichael fassbender\nmat azz\nlax airport\nku bb\nimpal er\nilla in\nhyper pigmentation\nhand ers\nha ken\ngood vibesonly\nfuen girola\nfixer upper\nfinding dory\nf ale\nep ass\ne sters\ndr d\nde mel\nco ir\nclimb ing\ncl attenburg\nchab on\napalach icola\nan tiv\name en\nach ie\na sty\nwomen entrepreneurs\nway sify\nus in\nunion town\nstopthe cull\nsport f\nsper formance\nshow match\nrw th\nreal sociedad\nreadabook day\nran ey\nprosen jitbumba\nper kins\npas cosheriff\npalli ster\nnic ci\nmis representation\nmiddel burg\nmau dsley\nlun gi\nli the\nle fts\nhu at\nhoh ner\ngim let\nge tup\nfood land\nfo gged\neco build\ndee jays\nchimic hanga\nbug bounty\nbe hl\nann ada\nag st\nag fa\nadren al\nðŁijį ðŁĺģ\nwr l\nwor tley\nwilliam levy\nw eng\nun pretty\nu oe\ntugger anong\ntho da\nst michael\nson amoo\nsi apa\nshar ron\nshar pies\nshape shift\nrn li\nrick ross\nri y\nra spy\nq be\npe saro\nparap legic\npanch kula\np summit\nnin anes\nmis adventure\nmb atha\nmarch es\nmar gery\nlod ger\nletit go\nknife crime\nkn p\ning i\ni eds\nfat ca\neh ring\ne by\ndiecast malaysia\nden ia\ncur rumb\ncran well\ncooper ative\ncar tes\nbiomechan ical\nbar letta\naw right\narm ing\nand or\na ash\nyadi er\nwhe en\nwh k\nwat o\nwar ding\nv ns\nura wa\nun determined\nu dm\ntype setting\ntraw lers\nthe square\nt world\nrob it\nr top\npenny stocks\nnic os\nmk b\nmaroo chy\nmanzan ita\nmag ar\nluc ile\nle eming\nix tapa\nhamble ton\nhall statt\nhair i\ngym shark\ng omg\ndun s\ndendrobi um\nde perfil\ncister cian\nci pla\ncharli ed\ncarac al\nboriso v\nav geek\narn cliffe\nano u\nal wa\nðŁij ĥ\nëĿ¼ìĿ´ ê´Ģ린\nç Ĥ\nе ÑĢ\n| ...\nz otto\nwrink ly\nultr arunning\ntric hat\nsy ros\nstr itt\nspider gwen\nso won\nsla ppy\nshekhar gupta\nsel u\nsa hil\npre mi\nplat er\nphone tics\nph led\npeter son\nper sol\np mpt\now x\nnis bet\nna ic\nmor dred\nmon da\nmoha patra\nmess rs\nme ola\nlo chs\nligam x\njust sparkles\njoyl enz\njournalis m\njig ga\nj ore\nig d\nhitch hikers\nharb ison\nhallucino genic\ngoe de\ngg ing\ngarl icky\nfreak onomics\nfr sc\nevangeli stic\nelem chat\ndread central\ndo er\nbu ju\nblood drive\nbeau vais\nbar fly\nark low\nard ine\nzi pping\nz id\nwinter storm\nwedding inspiration\nward our\ntothe top\nthat guy\ntas cam\nsym pho\nstu dley\nseattle storm\nse ey\nsc up\nrevo king\npoon am\npo v\nphilly dotcom\none z\nmar antz\nm tuan\nlack land\nku chi\nkno tes\nki do\nju mu\njo ve\nje ux\njaco bl\nirish music\ninst ra\nindo china\nhy mn\ngreg james\ngold crest\ngingi vitis\nelectr icals\neast ers\ndrif field\ndal liance\ndag upan\ncra il\ncomic sgate\nchinst rap\nce de\ncategor ised\ncap sizes\ncamill eri\nbut chart\nbrom eliad\nbrad well\nbee day\nbe ds\nbarangay ginebra\nb wr\nay so\nyo plait\nwest fal\nwee bly\nun restrained\nteam om\ntang any\nspo leto\nso bo\nsilver line\nredrock sco\nre boots\nramach andran\npap o\nob liqu\nnico ise\nnanom edicine\nmy plate\nmongol s\nmo gherini\nmn ts\nmegal ith\nmac ap\nma ggy\nluis fonsi\nlor g\nkooten ays\nkne pper\nking a\nkar yn\nk to\nj ro\ni hh\nhra b\nhit sm\nguil lem\nghe or\ngeome tric\nfeed back\nfalsi fied\nexacerb ated\ndurban ville\ndin ky\ndi ep\nde pop\ncomp tes\nco sima\nclass dojo\nchoreo graphing\nbub sy\nbet v\nana gh\nadhe red\nìĦ ľ\nyu rek\nwork group\nwin di\nwal lowing\nvalley usd\nun common\nte rel\nsky atlantic\nsi gi\nscra wny\nquestion time\npim co\npe sta\npap worth\nox bridge\nos wald\non z\nmont ville\nmaid stone\nlogi x\nli pper\njc icki\nisra elite\nil ac\ngr illes\ng fr\nfeature film\nfal las\ndw news\ndrew scott\ndd ar\ndavi da\ncraig avon\ncomefroma way\nbrox bourne\natri athlon\nappu ram\nðŁĺģ ðŁĺĬ\nvacuum ed\nun seen\ntrick y\ntri ght\ntor ff\ntachy cardia\nstandar disation\nst day\nsje arthquakes\nscore boards\nsco ter\nronan official\nrit ch\nra gu\nps ers\npopul ation\npaedo philes\nover supply\noc dsb\nny topinion\nnicky hayden\nne stor\nnau gh\nn devon\nmorgan ite\nman al\nmakk al\nlim ps\nj ellic\nhayley kiyoko\nharro ds\nger vinho\nfaking it\nfab u\ness ere\ncrime family\nci vi\nche ever\ncharter house\ncal avera\ncabbage town\nbutter ick\nbiglotter y\nbene teau\nba bette\nat ua\nab abes\n... :-)\nðŁı ĵ\nwest mead\nwest ford\nvoice overs\nun motivated\nt ander\nstand free\nsi biza\nshop front\nsha am\nsc ross\nsawh ney\nsau gatuck\nre claims\nr ht\nquart zite\nplough man\nparab ola\nmon ade\nmolyb den\nmarks manship\nmari ja\nmahesh nbhatt\nker ch\ninvent or\nhun ke\nhr n\nhou sec\ngary sinise\nevery where\nequival ents\nelu des\nebook deal\ne ge\ndo ona\ndex press\ndaniel aruah\ncoch lear\ncircum vent\nchapulte pec\nchamp neys\nblackkk lansman\nap ie\nam yl\nall ys\nðŁĴĽ #\nðŁij» ðŁij»\nwriting prompt\nval ar\nun tidy\nsush ant\nsport chek\nspad eny\ns gen\nread the\nquarter master\nprati k\npo th\npat aki\nng supereagles\nnc bi\nmand ating\nmag er\nloch head\nkam ar\nimper vious\nhel len\nhe u\ngi ang\ngeni ushour\nferv our\nfast break\nexor di\nexhilar ation\neurope o\nenvis aged\ned gars\near drums\ndiabete sday\ncor tese\nchri smur\ncan ali\nbap a\nðŁij¶ ðŁı¼\nðŁĮĪðŁĮĪ ðŁĮĪ\nwark worth\nvra bel\nvintagec lothing\nu im\ntime a\nsouth view\nshol t\nsett le\nrc g\nra ws\npre positions\npr ama\npencil art\nout for\nos valdo\nore y\nni oh\nnabeel rajab\nmed gar\nlif ford\nkol sch\nkaz uma\nit sb\nilove cornwalluk\nheritag emw\ngra p\ngall eri\nfor dgt\nflo y\nfel stead\nf ony\nentr ée\ndy sen\ncustom made\ncole shill\ncar vel\ncam m\nbrun chc\nbmr tg\nblue coat\nbiggbos stelugu\nal pena\nafrican american\nafoto deperfil\n-- ,\nâĺĦ ï¸ı\nâģ¦ @_\nzz ari\nwood stock\nvisit the\ntrypto phan\nton katsu\ntol d\nstay in\nst aci\nsm ale\nsiber ian\nrunner sworld\npil on\non th\nnun nery\nnbc chicagopd\nmy ke\nmp cc\nmilli pede\nmark man\ninfo security\nil aria\nhul st\nhorri ble\ngli mmering\nge she\nfoam cc\neure ka\ne glise\ne buka\nd allin\ncru elest\ncol lo\nchri sma\nchi arelli\nbuen avista\nbraintu mour\natlas v\nathom pson\nadi za\nad ance\nze sti\nyosemit enps\nwa fel\nve ined\nv ball\nurijah faber\nthanksgiving with\nstu pe\nsn krs\nslen derman\nsi ku\nretail tuesday\nrepul sed\nre occurring\nra ed\nqu tub\nplac ido\nnayanth arau\nmutual funds\nmi fid\nmer ve\nmat atu\nmah wah\nkri stel\nket ter\nindi ant\ngroun dup\ngiftsfor him\ng do\nfume tti\nfa sig\ndak ar\nd bp\ncroo kes\ncom per\nclue let\ncit é\nchris van\ncc sa\nbritish redcross\nbone head\nblanchard stown\nbbcradio scot\nbab ington\nba is\nall time\n] ;\n. ðŁijı\næĿ±æĸ¹ç¥ŀ èµ·\nâļ½ï¸ı @\nzil ch\nyn i\ntri sta\nti wi\nthe team\nsy phon\nstellen bosch\nselec tion\nsand well\nri bcage\npest ilence\nmh mm\nmention someone\nmb ale\nmade me\nka uri\nhero ically\nhar um\ngon nabe\nfield day\nec ats\ndroo g\ndo di\ndevast atingly\ndemarc ation\ndaw id\ncom pra\nco die\nck l\nchil well\ncherry blossoms\ncb fc\nbet u\narn alds\nad ger\nðĿĺ ģ\nöz demir\nyogri shir\nyear old\nyakis oba\ntri ennale\nto pen\nti enen\nthong thursday\nthere ale\nsá bado\nsso white\nso yy\npu sci\nprivati sed\nphysi os\np tf\nover active\nob on\nmodu late\nmember monday\nmc nairy\nmai read\nlex press\nken worthy\nke shia\nkati emc\nkap it\nk icc\ngo omba\ngo blin\nfo lies\nfar mall\neye con\ndispen ses\ndi aph\nbro y\nbre r\nbal combe\nart scentre\napplec ross\naldubi yamin\naali yah\nëĤĺ ìĿ¸\nz una\nwil le\nstock room\nsk rona\nsister patriots\nsd aughter\nriver wood\npuig demont\npolitical prisoners\npharmaceu tical\npal atin\nnorthumb rian\nninanes bitt\nnewstalk fm\nmole skin\nle hane\nksen ias\nkhor asan\nkat u\njab ber\nj ón\nit ttt\nini sta\nic kel\nhahahaha hahahah\ngn ite\ngit te\nfan cave\nexc ell\nencum bered\neden project\ndism ount\nchris webby\nbody positive\nbc sd\nash land\nang mering\nðŁĴľðŁĴľ ðŁĴľðŁĴľðŁĴľ\nठļ\nÛģ ÛĮÚº\né ry\nzzzz zzz\nzet as\nwoolsey fire\nvis ital\nve ja\nuniof hull\ntric kier\ntoon z\ntom be\nthe of\nstep toe\nsten o\nsp ake\nsho sports\nsam ark\ns bur\npriv at\npower lifter\nmc sweeney\nlongh ouse\nkitchen ette\nimpeach able\nhy nde\ngu shers\ngre mio\nde merit\ndaf ydd\ncarcino gen\nbulb ous\nbudd in\nboy yy\nbla sto\nbertr and\nbandhav garh\nare cibo\nar shavin\nal mora\n! >\nðŁĺĤðŁĺŃ ðŁĺĤðŁĺŃðŁĺĤ\nçĶ »\nxen ophon\nver dot\nton gar\nsto ssel\nsanjay dutt\nroad side\nrevi ve\nrebu kes\nrc v\np we\nover flowed\nonet ough\noik awa\nni fe\nnfl onfox\nmiya jima\nmg f\nmadewith love\nleg aspi\nlac as\nkae de\nk fm\nhilari e\nheath land\nhaw ker\nhack y\ngor ill\ngl vc\ngate shead\nfli k\nenergye fficient\nem mer\nele mans\neg gheads\nec rew\ncorri b\nbot any\nbol sover\nbar oni\nb we\nalpha ville\na world\nzur ita\nun injured\nuk zn\ntri kes\nti ket\nthick ened\ntele scoping\nta ung\nsunglasse sday\nsun shines\nsmoo ches\nsh ate\nservice dog\nrhodod endrons\nrepubli que\nrating theraces\nq urbani\np ma\nno amnesty\nnashvilles ounds\nlucas arts\nlove child\nlot ton\nli bel\nkar men\nkad in\nidy ll\niam johnoliver\nhold out\nhaup t\ngroom sman\ngri mmers\ngl ay\ngee chee\nflap jacks\nfir med\nf pf\neurope aid\nenam elled\neco sse\necker sley\ndon mar\ndisco theque\nd mar\ncad w\nbri oni\nballin colli\navalan ches\nalt adena\nðŁĺŃ ðŁĴĺ\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤ\nðŁijĩðŁijĩ ðŁijĩðŁijĩðŁijĩ\nðŁİī ðŁį»\nðŁĩ§ðŁĩ Ń\nzul fi\nyogrishir amdev\nwu stl\nwhite throat\nven ere\nun furnished\nun changing\ntruck loads\nthe artist\nsummer jam\nsr ite\nroyalwelsh show\nro don\nrickie fowler\nreson ance\nre scheduling\nr witherspoon\nquar les\npin n\npil cher\np kc\np conf\nomar u\nofficial pompey\nmu ting\nmla denovic\nmi wa\nmb da\nmar v\nkit ana\njar l\nintu bation\nher metic\nha ise\ngl vc\nfirst warn\net weet\nbreakou tedu\nbor din\nbee gees\nbarbar ossa\nas chools\nan elka\namic able\nameric ane\nam ap\na jones\nâģ£ âģ£âģ£\nzi zek\nzell weger\nviz caya\nvisit mexico\ntruck tuesday\ntrab zon\nthe joker\nsham bolic\nsali vary\nrico harena\nre writes\nprin ny\nporti mao\npha eton\npar bat\np sh\nnorman ton\nmemor ise\nmar got\nmalle able\nmade easy\nker ley\nk pn\nizhe vsk\nitt f\nid c\nhau z\nhan am\nfu gate\nfoo ters\nfalling water\nfaken ham\ndavid labrava\ndab boor\ncros scut\ncarni vale\ncamer ata\nbridg it\nçµ IJ\nâļ °ï¸ı\nâĸ¶ âĸ¶\nप र\nwin canton\nwair arapa\nvolcan os\nveterin ary\nupside down\nua allamerica\nthe wanted\ntao yuan\nt elli\nszcz ec\nstu g\nsp c\nsmat tering\nsel vi\nse jour\nscar boro\nri sc\nr iner\no red\nncaas oftball\nmo jom\nmit sloan\nmak sim\nlur ay\nlong ton\nlitho graphs\nley kis\njo by\nha chette\ng yor\nfor tress\nf outs\ne om\ndissemin ating\ndatavisu alization\nconoco phillips\nchoice awards\nchitr aloka\nca afb\nbur in\nbis son\nben o\nbbc suffolk\nathur sday\naravindha sametha\nad hoc\nab lue\nðŁĮĪ ðŁĮĪ\nãĤ ģ\nworld class\nwin du\nvisit kent\ntubri dy\ntra choma\ntake alot\nshore bird\nsho ko\nshe aserrano\nsex perience\nrefor med\nrece ssive\nre purchase\nre heat\npu trid\npb con\no thr\no som\nnorther ner\nnit rile\nnew relic\nn endo\nmwan za\nmv c\nmoreto come\nme co\nlac o\nhud dy\ngar ners\nfresh offthe\nfind hour\ner mene\ne more\ndv ar\ndog meat\ndenver post\ndemon ize\ndan il\ncar sen\nbouilla baisse\nblo gher\nat andon\nalibab agroup\nðŁİĪ ðŁİĤ\nðŁį¦ ðŁį¦\nz ameen\ny ata\nvideo shoot\nvenkate sh\nthe tis\ntemper ing\nstra thro\nstodd art\nsel sey\nru ises\nri ski\nre house\npuzz ler\npr é\npo phobia\nper iment\npav an\npare ja\non ur\nmi sting\nmelkwe g\nmc gee\nlo omer\nkumail n\ngn awing\near nt\ndismiss als\ndegan arseguidores\ndai ichi\ndad u\nd za\nchang sub\ncarryon blogging\nboardwal kempire\nblurry face\nbarn wood\nbalo chi\nb hin\namra pali\nadam devine\nacom pan\nab ro\n~~~~~~~~ ~~~~~~~~\nwo jcicki\nve ik\nuser names\nton park\nsuper bird\nstring fellow\nstel o\nsephar dic\nper umal\npat ah\nnorth ville\nnoctur no\nnaom h\nnad ra\nmv m\nmanzan illa\nku cherov\nkir il\nk michelle\nip al\nin ster\nhub bub\nhr rr\ngu stan\nfy p\neli on\ndizzy wright\ndisc ours\ndabboor at\ncu tely\nbrain ard\nbeat boxing\nban as\nas kari\nabo xing\nyou ll\nworld mag\nw ms\nurin ate\nthunder snow\nsuper bloodmoon\nsm sa\nskulleero z\nsick les\nsh inj\nsesse gnon\nsamuel sson\nru din\nroad racing\nriver hounds\nride au\nra iz\nprephoo p\nporto frotterdam\npolling stations\npoll sters\npap el\nottawaf ury\nnure yev\nmethod ical\nle ix\njame sk\nin situ\nho sed\nhet alia\ngreen acres\ngoo good\nfé ile\nfri bourg\nfrankie j\nend ay\ndispl aces\ndee red\nbluestar zone\nbhubanes war\nbeli ke\nbag by\natar get\nas ay\nariann ahuff\nag adh\nab ria\n[ (\nâŀ¡ï¸ı âŀ¡ï¸ıâŀ¡ï¸ı\nyoung man\nweekend kav\nvi das\nvar is\ntot ter\ntest bed\nt pp\nswe tt\nsoo s\nrut ledge\nreddog susie\nrecer tification\npriyam ani\npoo t\npoly vinyl\npleas ert\npart ay\nna iler\nmount vernon\nmo za\nmill o\nle eps\nld k\nlaur ita\nkwas i\njay bird\nis r\nimag azine\nil ac\ngrim dark\nepiste mology\nepiso dio\nde colonization\nchinois erie\nchag as\ncd v\ncam bia\nbraz oria\nbr icht\nblu d\nbal as\nathen ry\nas ps\napr ès\nanu radha\nalt balaji\n... [\nâĿ¤ï¸ı ðŁĴļ\nâģ īï¸ı\nó g\nye aaaah\nvisit jordan\nu og\nu dan\ntso go\ntrench coat\ntr ite\ntheroy als\nth atha\nst illa\nshaw ano\nsat anist\nros lindale\nred ban\nral phi\nquar to\npra d\npr ang\nottawafury fc\nnaom ie\nmysti fied\nmuseum day\nmu ff\nmenstru al\nmediab ase\nlgbt pride\nleop old\nke ley\nkal ank\nhuski es\nhebden bridge\nharmon ized\ngye on\ngreen lit\ngeo ghegan\neye opener\nevery child\neneed le\ne ure\ndian er\ndi ers\nday fm\ncru shin\ncredit suisse\nclon dal\ncle ves\nci onal\nc itta\nbusines strip\nbody paint\nb ous\napp enz\n**** ***\nðŁĺ¢ âĿ¤ï¸ı\nðŁİī ðŁijı\nâľ ŀ\nwheat land\nwestf alia\nv ade\ntime slot\nt anta\nsvel te\nstri pey\nspring summer\nseeyou there\nschi sto\nsang er\nryan seacrest\nrother y\nross ellini\nr re\npu e\nporter field\npj m\noo voo\no lean\nnephil im\nmariach is\nlole sports\nkim ba\njung woo\njo anc\nit ll\nish ant\nherma ph\nheck in\nhair day\ngh onetv\nfolk tale\neo cene\nel wes\ned dsworld\ndon nington\ndistor tions\ndigital camera\ndark wing\ncor tin\nchi di\nchat man\ncath ed\ncatapul ted\nbra g\nboat load\nbo ddy\nblow torch\nblo cky\nbio bank\nbeat la\nbb sr\nau dra\nandre ab\nafl womens\nðŁĩ©ðŁĩ ´\nà´ ª\nz eds\nyour story\nx j\nwet ness\nvla dislav\nvin ales\nver beek\ntw irls\nthor ity\nt chami\nsuper be\nsug den\nstrat for\nstormy daniels\nsquan dered\nsouth bourne\nsemin arian\nsar godha\nsa ima\nreven ue\nre tell\nrb x\nrain ha\npost operative\nperform ative\npeck ham\norgan o\nor ak\noh en\nnyc pride\nnir mal\nni ños\nmanic ured\nmanas quan\nmakers market\nlondon ist\nko jo\nker to\nk bd\nj tc\nintermitt ently\ngano derma\nfa ch\nev gen\nequal ised\ne oy\ne health\ne harmony\ndon ee\nch strfc\nbint an\nar man\najac cio\nafa una\nwre aked\ntul sigab\nti kal\ntexaste ch\nt ative\nsweet potato\nstkil dafc\nspar x\nslip case\nshady side\nsal tz\nr int\npran king\nphe red\npar ana\nod die\no we\nni lesh\nnar whals\nn anti\nmp hil\nmat in\nmag asin\nlu mped\nkop ar\nine dible\nim bo\nid leness\nhigh end\ngro aning\nfranch is\nfo ssa\nfo gel\nem mons\ne bbing\ndro ver\nco ppi\nchin cote\nch ory\nc de\nbow lin\nbest memoriesof\nbe se\nap lus\na afc\n" ???\nðŁijĮ ðŁĺĺ\nâĿ¤ï¸ı âļ¾ï¸ı\nà¹Ģภ§\nwre aks\nw psl\nunil aterally\nun predictability\ntu bb\ntofthe year\nti o\nspenny moor\nsnug gie\nsnow cone\nsims bury\nsegas aturn\nsea eagles\nro sy\nretro active\nqu ail\npolyam ory\npar tisans\nod t\nnuev afotodeperfil\nnca agolf\nna ing\nmusic photography\nmun dell\nmike trout\nly sol\nle doux\nle awood\njit endra\nhus ks\nhe et\nhazel ton\nhar rod\nhamp stead\ngor dian\nglar us\ngav r\nfr ing\ndend ro\nd ch\ncom pline\ncit ys\ncharacter izing\ncel adon\ncarlo ss\nbur ana\nbun goma\nbu bby\nbroad beach\nat g\nðŁļ¨ðŁļ¨ ðŁļ¨ðŁļ¨\nyas uo\nxfinity series\nv itti\nut coach\nthe win\ntex ans\nta kia\nsuper heros\nstrang le\nstar child\nspace ship\ns will\nrin ella\npenn relays\npede france\np nt\np lim\nover bearing\noff setting\nn cm\nmore t\nmarin elli\nmakemy trip\nlupe fiasco\nlove ireland\nlosange le\nintu itively\ngo jags\ngear up\ng wal\nesp adrille\ndou jin\ndiam ant\nd ace\nc sic\nbas inger\naspen institute\nabcac tionnews\nà¹ĥ à¸Ļà¸\nwel e\nwee gee\nwal mer\nvol can\nvintage findhour\nun branded\nthab sc\nth ies\nsp ars\nserv i\nsam ard\nsabo teurs\npol icec\npal apa\nolac abs\nn cert\nmount ford\nmahin da\nless er\nher thabsc\nger aint\nep worth\ndo gara\ndegra w\nde sc\ncran mer\ncn co\nchand rak\nbur han\nbuenos dias\nbe ki\nbcb tigers\nbab bage\nah gase\nza w\ny ls\nx tr\ntrixie mattel\ntis sue\nszi get\nsy co\nspla yed\nsd ell\nri pe\nri oli\npumper nickel\non thisdayin\nofici ales\nning en\nmor bid\nmc v\nmarcu m\nlets be\nl wd\nkhy ber\nk tm\njig awa\nj rd\nhyper inflation\nhalloween town\ngreeng ro\ndisinfe cting\ndis figured\ndal keith\nco ble\nbon nes\nbill mckibben\nbar ç\nbar uch\nau dic\napol lin\nab har\nwilliam ssonoma\nwho ville\nup state\ntu tera\ntilland sia\nthedragon prince\nthe high\nta kra\nt ating\nsuper smashbros\nschwe izer\nsabar mati\nrosco smos\nremo ve\nread ju\nr tw\nplagi arized\npi u\npen rhy\nn nl\nmuseum selfieday\nmmi wg\nminis kirt\nman ek\nma ury\nkling ons\nk wi\njoe star\ng lowed\nfol l\nfl att\nfi estab\neric son\neleg ant\ne reader\ndu thie\ndi ano\ncol lis\ncar ami\nboy kins\nbor gen\nbon do\nbafanab afana\nat ack\nar tra\nacu ff\næľ Ī\nyor ick\nwa ar\nw op\nu jj\ntun ica\nten orio\nta house\nsum me\nsel in\nsec ity\nsarab ande\nry d\nreli ves\npolynom ial\nphyl icia\nol ay\nnish ant\nminneso tal\nmicro fluidics\nmedi agroup\nmake ba\nmach an\nlong livelong\nligon ier\nlam prey\nkarma pa\nkar isma\nkalk brenner\nje ph\nhot stove\nher ath\nha stie\ngro pe\ngor ski\nga j\nfene ch\nfe ckin\nf tii\nev ac\nepitom ises\nch age\nbran che\nalim ony\n⼠ı\nwind shields\nwi a\nvoltronlegendary defender\ntulsigab bard\ntaxi driver\ntake action\nswee et\nspe yer\nsave ourocean\nsarahk silverman\ns dram\npower of\nphys icals\npe gi\npa ks\norec chiette\no ec\nna vid\nmn gop\nmi ers\nmel lie\nlei ber\nkit v\nkil is\nkatah din\nkar lo\njeff ery\nimagin ator\nhuntington beach\nhor ning\nhereto help\nglori aste\ngloriaste inem\nghost face\nfru ited\nfac ci\nf yn\ner ac\nee h\ne igg\ndear ne\ncrow snest\ncompad res\ncharen tes\nce h\nbo el\nback rest\nb fb\nariane space\nalter na\nalexand r\naldub happy\nal ink\nabolish ice\nze in\nwindow less\nvas anth\nval entia\nunited for\ntj x\ntin ctures\nthrift break\nthe mac\nterra sse\nte pco\nsü d\nso cr\nsiem pre\nse sports\nsar gun\nreyn ol\nrajasthan royals\nrah mat\npro shop\nphra se\nphai don\nper abo\np chat\nouri st\nom nit\nnex o\nnebu lizer\nnand an\nmore days\nmidwi ve\nll cr\nli va\nleadership matters\nkoto bu\nko he\njupy ter\njan ec\nhumer us\nhindu stan\nhac en\nh mi\ngun da\ngeneral mills\never blades\nen stars\ndr ang\ndiv is\ndi anthus\ncoll ated\ncar ditis\nbu se\nbest musicvideo\nau secon\nalt as\nale igh\nal tered\nacet yl\nwal ney\nvintagec ar\nvi pass\nv qa\ntop billing\ntac tician\nt dt\nt ct\nsuf fix\nstu f\nstick le\nst ä\nshen yang\nse vend\nro sat\nreal talk\nquil ty\npittsburgh pg\npin os\npil ly\nperenni al\npenni less\npacio retty\nor onto\nonetimein nola\noff al\nnear ly\nnau sic\nmob wives\nmandi ble\nman ou\nmal ing\njun gs\njer obo\nje zz\nje wett\nhust led\nhed man\nfe tes\nextr atv\ndob bie\ndefi b\ncory gardner\ncolum nists\ncharlot ter\ncerti fying\ncarne iro\nbook addict\nblogger swanted\nbig fat\nbethany joylenz\nbassad ors\nbas sam\nade el\nach ina\nľ ล\nðŁĶµ âļ½ï¸ı\nä» £\nãĥī ãĥĥãĥĪ\nãĥ ´\nye ver\nworld mcqueen\nvir als\nusav olleyball\nto scan\ntime tables\nthof july\nte agle\ntakay ama\nsunday brunchc\nsu port\nsolidi fies\nshannon r\nse cops\nsch y\nru bia\nri gel\nravil ious\nq ah\nprof ited\npom mel\npatri zia\nparanor man\npapuanew guinea\nou ree\nnu u\nneck piece\nnag orno\nmybe belove\nmou thing\nmot els\nmar kelle\nman city\nmaeste g\nlu jo\njo sip\nihe anacho\nhi dro\nhan se\ngo jack\nfr amer\nfavor itas\ndown sview\ncz ynski\ncontemporary painting\ncommunic ation\nbbc worldcup\nay be\n... ðŁĺĤðŁĺĤ\n) ,"\nðŁijĮ ðŁĺİ\n미ìĬ¤íĦ °\nwh darts\nwal kr\nvin ing\nval spar\nu ww\nu ur\ntruff le\ntoe ic\nteam solomid\nt tos\nsub ha\nso tw\nsebo gier\nsad dl\nrob ina\nre drawn\nre counted\nrand ell\npur slane\npt safety\npron ghorn\nmusic ology\nmur doc\nmicro transactions\nmassage therapy\nmani kin\nman museum\nmal ley\nmahersh ala\nlion day\nla pa\nil x\nhuy ton\ngugli elmo\ngu de\nfor my\neu less\ness ure\nelec tives\nea ste\ndress ler\ndo et\ndawn richard\ndani ell\ndan adel\ncigar citybeer\nce ment\nblue peter\nbio based\nbe vis\nb kr\narat ne\nall ons\nai katsu\nafri kan\nab it\nãĥĪãĤ ¥\nм и\nvisualab stract\nun agi\nty t\ntri bbles\nthe be\nstau bach\nso bbed\nskel mer\nscribblen auts\ns fi\nride for\nric snews\nred poll\nr nation\nquetz al\nquat ernary\noce ano\nnoso tros\nmoon shiners\nmika elson\nmer rie\nmam u\nmacy sparade\nk ue\njohn wall\njay awar\nir fu\nhu bli\nh pc\ngauri khan\nferen dum\nejio for\neag lenation\nbatt alions\nbajiraomast ani\nany place\nann yeong\nang atta\naf ton\n:) "@\nðŁĮ Ľ\nze ek\nz ato\nto ph\ntin ta\nte thering\nsustain ment\nstro ma\nstrading cards\nstill well\nsteven son\nstepan ek\nstella artois\nso con\nshi mada\nse adogs\nsabot aged\nrob g\nrecuer do\nophy te\non nit\noc ceren\nnap anee\nnan os\nnaj wak\nmis sal\nmarvel ing\nma hu\nlivel ike\nko co\nka isa\njimmy buffett\nflo e\nfla gler\nfin dley\nfar row\neven son\nencapsul ate\nel pi\ndor ner\ndhar an\ndel fino\nde stro\nconflic t\nch arest\ncanadas occeren\ncad i\nbj sm\nbeing united\nban anas\naudios lave\nati more\n>>>> >>>>>\näº ¬\nâĿ¤ï¸ı ðŁĴ¯\nwx guy\nwo akes\nw ts\ntro hman\ntn pl\nspice world\nsoft cover\nrow en\nrock ingham\npul teney\nplo ck\npa pped\nnote ven\nmceach ern\nmanipul ations\nloo keast\nle mn\nkrist offer\njazzy b\niv ories\nis am\ni bus\nhorn ung\ngo in\ngill man\nga iney\ndis oriented\nde akin\nd wd\nchlo ë\ncannabis culture\nar oldis\nanglesey scmedia\nam iner\nø rn\nyo v\nwoll stonecraft\nweather live\nvit a\nuni do\ntram adol\nto inspire\nsothe bys\nshin ge\nschne ide\nsc ally\nsack ings\nsabc newsonline\nry bak\nro ku\nreiter ating\nphotovolta ics\npart es\nnorth star\nmu ar\nmoore stown\nmondele z\nmel ter\nmark ley\nmariab arti\nmariabarti romo\nlorela i\nkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkk\nki ani\njo en\nili as\nian h\nhy des\nhigh times\nhen ke\nhealthy choices\nhat ley\ngrand finale\ngh ali\ndr strange\ndog sat\ndj al\ndictat or\ncor responds\ncool more\ncom promis\nbr ø\nbas son\nb flay\nb du\narri ver\napar ty\nan ting\nan schutz\naf tal\nðŁijĩ #\nâĺºï¸ı ðŁİī\nwom b\nwag staff\ntv i\ntss aa\nshigh ered\nseymour duncan\nser ra\nsch lager\nrow ney\npll tvseries\noskar blues\nola bel\nnd spdwy\nmo ai\nme tric\nmarke ts\nmanic ures\nkey stone\njor ja\njo gs\nhoo kups\ngre entree\ngi est\ngeaux colonels\nf ford\nen b\ndra is\ndow sett\nd wood\nd fi\ncost of\ncoral ville\ncity lights\nchicagol ndspdwy\nchic lets\nch acon\ncas sy\nbe ps\nave z\nau sf\naristo cats\nao ty\nalme ida\nali ghts\nale ss\nadsor ption\naac ta\n[ ©\nðŁįĭ ðŁįĭ\nãĥ Ĭ\nà± Ģ\nर à¤ķ\nyum miest\nwi ra\nwhat toread\nuki yoe\nton hall\nti oman\nth ira\nstol z\nspon gy\nsitt ard\nsick notweak\nsa recool\nrott entomatoes\nrock well\nroad tri\nr dr\npuertor ico\nprimiti ve\nphan togram\npar igi\nmar ant\nled ford\nko tel\nkell yo\nke aven\nhyper link\nhuns let\nhumi dex\nhorse box\ngraham stown\ng alls\nfr l\nfa eli\ndu sts\ndown ership\nde pp\nda aa\ncy t\ncu ld\nch d\nby gones\nau v\nar tre\nar lin\n... ).\n! ðŁĺŃ\nzu o\nyacht life\nwin dup\nut knoxville\ntrumpre sign\ntoma hawks\nswe ated\nsw pl\nstress relief\nsti dham\nso tt\nsharemy cosplay\nroger son\nroad trips\nrhe em\nplen um\npeat lands\nour house\non cers\nold hollywood\nmp inoe\nmaz um\nlessi g\nlay f\nl gi\nkrish na\nkail yn\njo ek\nincub ating\nilovemy dog\nhei dik\nh wt\ngun smith\ngoooooo od\ng vp\nfu mbling\nfru strat\nfis ke\nf mu\nesp in\nencanta dia\ne commerce\ndal ec\ncou sy\ncal mac\nbyron bay\nas ner\nar len\nan anth\nðŁİī .\nãĥ¼ãĥ ł\nâľ Ń\nzebra head\nwwe ajlee\nvipass ana\ntrade winds\nteoti huacan\nta jin\nstud land\nskir ball\nsand ymount\nresc u\nrepell ant\npre g\npou lin\npa quin\np bd\nmondi ale\nmis smal\nmicro grids\nmet formin\nme ber\nlow carb\nkw gn\nkil n\nkiku yu\nkett les\nintercep tors\nfr ant\nfagi oli\nf bk\neri ke\ndoo b\nd mexco\nclever ness\nclai mant\nchatt ers\nbez els\nban sko\naf oul\nðŁĴª ðŁĴªðŁĴªðŁĴª\nðŁijı ðŁı¿\nzo an\nwur m\nviz ha\nv sn\nup end\ntwin sburg\ntrac ee\ntower hamlets\ntheip aper\nsun rail\nsm om\nsheet metal\nsepat u\nsel bst\nscri sis\nsco tti\nschoo se\nsaturday vibes\nsa pe\nsa ori\nregi e\noti eno\nntv today\nmk ultra\nmicro waves\nme del\nman ta\nmam bo\nliv ro\nle conte\nkrush na\nki ku\nke it\nj mw\ninhal es\nindustri a\nheral ding\nher op\nha al\ngros beak\ngrange town\nfon zie\ndu soleil\ndo si\ndeliver ables\ndar roch\nchi ve\nbrit athletics\nbe yourown\nb bl\nar ge\nantonio brown\na ure\nâļľ ï¸ı\nÙĦ ا\nzero waste\nww l\nwith your\nwindy city\nwi gg\nwether by\nwa is\nwa hy\nthor ns\nthe over\nth uli\nsun kist\nsu bal\nsport stradingcards\nski l\nregen cy\nray bould\npin chot\npel ag\nnikki galrani\nna iro\nmy garden\nmoom bah\nmetro fmsa\nmari k\nlog es\nli sson\nkn aus\nkend i\nip so\nindian ola\nin tha\nh sin\ngrey lock\ngan se\nfraw ley\nfin epix\nesh agupta\nene me\ndisin terested\ndis jointed\ncre vices\ncouncil of\ncap le\ncalvin and\nbird box\nbig d\nbar thes\nare volution\nal ympics\nðŁĻĮðŁĻĮ ðŁĻĮðŁĻĮ\nãĤ ª\n| -/\nzing y\nzar athu\nyoung living\nxfre watch\nval lotton\nus as\nup dike\nun paved\nten ey\nswk play\nst james\nspur snation\nsound bar\nsoho house\nsn icker\nsmtown global\nshun ning\nsen shi\nsem tex\ns zab\nrecomm ender\nram bo\nradio logical\npre prints\npent ag\np bal\non ni\no sn\nnom er\nmy story\nmovie quotes\nmovi l\nmc rib\nmateo guidicelli\nmal apit\nmac phail\nlat ched\nland rights\nkr ann\nkhal eda\nked by\njo deci\nharro p\ngethse mane\nff dp\neyewitness wv\nest elle\nen demol\ncmoh ry\ncam illo\nble p\nbio similar\nbat ard\nbas ant\nay ud\nawesomen es\nalber tope\nadi ya\nðŁĴĥðŁı½ ðŁĴĥðŁı½\nðŁį IJ\nائ ر\nvat icano\nva id\nunder pressure\nslu mb\nshun s\nshe ahan\nservice able\nseguri dad\nsau da\ns gin\nri am\nprep sports\npol ices\noverestim ated\noko boji\nnick kroll\nnewtown ards\nmarchof dimes\nmar sa\nlip as\nkitu i\nking sholm\nintersper sed\ninter webs\niiii i\nengl ert\nel nik\ndi kh\nden v\ndefend theland\nchar an\nc ics\nbillo frights\nbern ards\nbeg one\nag ana\nì° ¬\nÙĨ ÙĬ\nye ong\nwheat on\nvid han\nve spu\nv indiesel\ntransform er\nterra form\nta kk\nt lou\nt ago\nsun block\nspan ol\nscri p\nrudrak sha\nrhyme sayers\nrest lessness\npl oring\nphotomon tage\nperiodic als\npen with\nou to\nos ram\no gh\nmul berries\nmo wn\nmin u\nmajo red\nmac aws\nlon gridge\nlesm is\nkiren rijiju\nken way\nharmon ie\ngrowingup with\ngoogood olls\ngle ich\nford models\nfo gs\neto sha\ne wart\ndrjimmy star\ncou pes\nchakra barti\ncar ms\ncan not\nbol stering\nbha vana\nauto focus\naf elt\na uro\nðŁIJ ¤\nå¤ ª\nÌ µ\nx ab\nwicker sham\ntu mn\nten ch\nspe ts\nsage summit\nrun about\nraw ten\nrap turous\nram sar\npic kets\npantan al\noun e\nnu yor\nnu tting\nmu bad\nmor tise\nmc guin\nmar sdd\nlu cey\nlingu ists\nje thro\nfree people\nforget fulness\ne zzor\ndis regarding\ndel monico\ncyber man\ncoldwar hist\ncloud security\nclo vers\nclo stri\ncdr kelly\nbrew ing\nbra ssy\nbor del\nbill ard\nbe quest\nb pr\napothe osis\nam yn\nal oma\nafgh ani\nae an\nadidas running\na stigmatism\na hahahahah\nðŁij©âĢį ðŁĴ»\nà® ļ\nwho dat\nwhit sunday\nuz ha\nuniversal is\nun garo\nty rus\ntur geon\nterran ova\ntan war\nstam pede\nsport sphotography\nspal omas\nsam pa\nrevers als\nre tracing\nqab oos\npower scourt\npi vo\npetro chemicals\nolive garden\nofficial ap\nnh c\nmer z\nmarque try\nm brs\nkir ton\nkat ra\nis ser\ninfer red\nimprovis ational\nhu ey\nhi j\nharingey council\nhar pa\nganon dorf\ngabbi garcia\nfull sail\nfol tz\nfly laxairport\nfertili ze\nec a\ne gc\ndu plessis\ndi w\nd mh\ncut ter\ncondolee zza\ncar reno\nbothvote ssnp\nbit ton\nbi atch\nbethe a\nber tens\nbar ch\nbac al\nat ras\nashok gehlot\nartist oftheday\nam and\naf ai\nwo den\nwfu v\nt pf\nsyl mar\nsubjec ting\nsub woofers\nsteve madden\nstation cdrkelly\nsen ter\nsea star\nsc f\nsal wa\nsa af\nro sina\nred path\nrecy cl\npreston wood\npoisoni vy\npercu ssive\npage ant\nover dosing\nnot atarget\nnb colympics\nmsin spire\nmilli second\nmasa shi\nmary vale\nleg om\nkille brew\nkeep talking\nist ill\nio annis\nicici bank\nich mond\nhealth matters\nguar ana\ngoun a\ngon ne\nginand tonic\ngas coyne\nfirst dates\nfc art\nf pe\nf mv\ndu le\ndiscoura gement\ndiam o\ncu mann\ncougar pride\nc sac\nblu bber\nbettere veryday\narchite ttura\narachno phobia\nan cha\naly x\nðŁĨļ @\néģ ĵ\nà¹ĦภĽ\nw basketball\nve rena\nut ani\nusair ways\ntupp ence\ntriple talaq\ntravel inspiration\nthe gentle\ntan jong\nstor t\nsport shub\nskelmer sdale\nsel igman\nse aley\nsb ath\nrncm voice\nrad boud\nra jouri\nponti anak\npic he\npic anto\npass book\np illion\nng sop\nmusic live\nmul hall\nmoz hi\nmichael vaughan\nmc glo\nmantel piece\nlaun dere\nhime ji\ngooch land\ngif tware\ngfr dofficial\nft one\nfre tting\ncor nett\nci oni\nchal ks\ncadogan hall\nbro mberg\nble ep\nbill iton\naubre yoday\narca dian\na ile\nðŁĴ¯ ðŁijĮ\nâĺķï¸ı âĺķï¸ı\nz ick\nyork racecourse\nwolver ton\ntow nies\ntor tures\ntol ly\nthor old\nterrit ori\ntan veer\nss at\nspam med\nsecret service\nroger waters\nri pp\nrelo j\nr car\nq mc\npoliti que\npo inter\nous life\nopen stack\nofficial wmas\nmy coop\nmam mut\nliveon news\nla ity\njami el\njag iel\ninvesto pedia\nin vier\ni zzi\nhic h\nh inews\ngu c\ngrisel da\nfidel castro\nfear fully\nfalling skies\nf lec\ne mison\ndag mar\nclu bbed\nclair mont\ncell press\ncany oning\ncanad arm\nbv g\nbuy in\nbio sci\nback shall\naga ins\nzer g\nwester ham\nv and\nui w\ntour downunder\nto shiro\nti ao\nsun din\nstje pan\nste red\nso tc\nsarab ia\nregrett ably\nre activate\npotter heads\np boc\non yango\nnight core\nn mf\nn drc\nmye at\nmy gov\nmulti plicity\nmoore head\nmid am\nmetat arsal\nmeath gaa\nlove film\nkurunzi za\njas a\nj mj\nj mac\nim parts\nhome business\nhac cp\ngr attan\nequ alization\nent als\ne vey\ndu bb\nd ch\ncric kho\ncookie day\nconstitu tions\ncolo strum\ncenta urs\ncamp i\narche typal\nap rs\nalong korn\nall Äģh\n- ..\nðŁļ ¢\nzu iko\nzeen at\nyou cant\nwy le\nthe er\nsiri sena\nrud der\nro emer\nradhikam adan\npre server\npl onk\nol at\noak y\nnus rat\nne pad\nmy all\nmu thu\nmar chive\nlu pins\nlin don\nky ra\nksenias olo\nkham is\nhawaii five\nhar pur\ngreen side\ngreatnorth run\ngollanc z\nfioren tino\ndub ga\ncaro wozniacki\ncar illo\nbrexit ers\nblizzard of\nbird art\nbel den\nbe urs\nbar anski\nbab ka\nb ci\naz uki\nani zed\nand ani\nal kan\nac worth\nac credit\ny know\nxy litol\nwee m\nthe mahirakhan\nt illi\nswa thes\ns atta\nrocky horror\nrain ford\nple xi\nparksand rec\npaedi atrics\nmt c\nmon ro\nmoissan ite\nlist as\nkri sta\njac ek\niw ate\nit news\niron work\ning team\nhima wari\nhead count\ngener ali\ng pf\nfo kus\nde porting\ndavid warner\nd pr\ncut thecable\ncomman deered\ncen taurus\ncc d\ncandi do\nay p\nart market\nah h\nturan dot\nthi elen\ntest kitchen\ntar ab\nsound clash\nscience march\ns ooooooooo\nro mping\nresurrec tion\nprint out\npost gres\npere yra\nparake ets\nnico tero\nnew releases\nmtl moments\nmedic als\nlu issuarez\nli pps\nju ggles\njo si\nint j\nhot ell\ngrand theft\ndur arara\ndiyarbak ir\ndigital drawing\ndge tt\nclean energy\ncd ti\ncann ula\nbull winkle\nbu ssell\nbu kas\nbiddul ph\nba cha\nb win\nav ante\nanac mo\nall infor\nye tu\nwr al\nway togo\nvir us\ntrait orous\nthyssen krupp\nthe shield\nthe hard\ntal ot\nsynago gues\nstubborn ness\nstou te\nsmoke screen\nsh anth\nse ku\nsapbusiness one\nrei ka\nre sus\nratcha thani\nratcha sima\npol twt\nop f\noci gars\nmini bar\nmay sville\nlaundre tte\nher ded\nh ool\nfuji moto\nfati ha\nentom bed\neagle snation\ndissemin ated\ncuer po\nco jo\nclar ington\ncarbon fiber\nblu men\nblaen au\nbeach am\nback stabbing\nassess ors\nap bs\nany ar\nano te\nand ino\nail party\nac supdates\nðŁĶ °\nðŁİī ðŁĺĬ\nyou sif\nunder writers\nugand adecides\ntur ro\ntop knot\nto ren\nstre tto\nsmi f\nshowusyour builds\nshi vam\nsex ed\nsensiti vities\nsemio tics\nsand ilands\nsan lam\nqu avo\nportu gu\npla ye\npare ido\nound theworld\nmyo fascial\nmy yy\nmik al\nmacfad yen\nko chi\nkin care\nkapo lei\nk sports\njag gery\nj assim\nirraw addy\nin os\nhealthand wellness\ngolf day\nghan ds\nfreedom works\nfah mi\neurope day\nerrone ously\ndo jo\ncze wska\ncol linson\nck ing\ncimm yt\nceu ticals\nca esa\nbu youts\nbu ssing\nboys bball\nbi ber\nban es\nati one\nanti hero\naneury sms\nalien ating\nðŁĺĶ ðŁĺĶ\nãģ ĭãģ\nâij ¡\nzogh bi\nv cl\nv angelis\nunzi pped\nunder current\nthebig bang\ntabletop day\nsk en\nsie bert\nse fer\nsantander uk\nsand blasted\nsalt dean\nru brics\nrock show\nrecruit ment\nport chester\nplaneson thenet\nparlo phone\nparalle lo\np ade\nmatte o\nmadhan karky\nkevin o\nkend ama\nindv seng\nhollowcrown fans\nho tair\ngros grain\ngood new\ngon o\ngetinmy belly\nge i\nfree agency\nfair burn\ndra gracing\ndjfresh sa\nchroni xx\nchad da\ncan u\nc wr\nbla ser\nall right\nai zen\nac j\nabhi yaan\nwilder nes\nwick low\nup minster\ntrac ers\ntoron tom\ntm koc\nt lal\nspeci e\nske wered\nsi vi\nsab bey\nrox anne\nr di\npla sen\npar ma\nmoh enjodaro\nmikas ounds\nliber ates\nkry sten\nkingsme ad\nke sa\njunior doctorsstrike\njin u\nil co\nht brunch\nhr sa\nho pat\nhar lock\nhain anese\nf als\nelectro phoresis\neic her\nei sha\ne week\ndisappoint ingly\nde kal\ncour maye\ncom pra\ncloud native\nchum my\ncam u\ncalvin ism\nbra x\nbiz on\nbee son\nbart man\nbab is\nauthor isation\naqu an\nador able\nðŁĩ¸ðŁĩ ³\nìĨ¡ 민íĺ¸\nwe ta\nwaff en\nvor on\nvi vendi\nverte bra\nup shur\ntuss aud\nsu hana\nsply ce\nserial killer\nsav sl\nram mer\nraj inim\nqueens landers\nmon of\nmaha bali\nm wi\nloven orth\nliber man\nleap ed\nlauder hill\nko se\nkh long\nkaren gillan\nish rat\nimmuno deficiency\nim hotep\nhed rick\nhe st\nh anny\ngo res\nfor culture\nfe ets\nfab bri\neun woo\ness ler\ncru x\nco ren\ncle land\nbon ing\nblake griffin\nbil ang\nbi phobia\nbarram undi\nbaram ulla\nash faq\nar ico\nal ani\nðŁĺĨ ðŁĺĤ\nðŁįĴ ðŁįĴ\nðŁĮİ ðŁĮį\nwrit able\nwishyouwere here\nwhere to\nvelt liner\nu wo\ntan is\nswan song\nstar rr\nsn ina\nsi zer\nshor o\nsedg ley\nsar ai\nsa wesome\nred fin\npra shant\nphil heath\nor val\nnise koi\nmor ath\nmit m\nmau le\nma um\nly ssa\nludo vico\nkha an\nkat ec\nhun ched\nhix son\nhigh wood\nha ddington\nfood stuffs\nem pathic\neconom etrics\ndr w\ncurritu ck\ncla ssing\nck t\nce tin\ncar neros\ncan ts\nca io\nbus sey\nassemb ler\narmad illos\nandu jar\nðŁĽ ı\nxplo sion\nwor dt\nwest stigers\nunder painting\nth au\ntelang anacmo\ntan n\nsuk ma\nstu bble\nspor to\nsomer ton\nskol nick\nsh our\nsailormoon crystal\nque asy\npri mo\npin sent\npickup lucifer\not te\nnationalgri dus\nmu haj\nmoon struck\nlange vin\nky umin\nkapp ap\njaz i\njan ic\nj yr\nhu ffy\ngg u\nfriday facts\nfinger lings\nf bp\ne ins\nde dge\nchristin am\nbor gir\nboo om\nblake more\nblack isbeautiful\nbadas sery\nbab aji\nb acy\nappell ation\nali reza\nal wyn\n???? ??????\nðŁįĥ ðŁįĤ\nwinch combe\nwash ou\nvez ina\ntsing tao\ntimon ium\nthermo electric\nsj maas\nsingularity u\nron calli\nrhom bus\nra by\npulmon ary\npre cht\npla smo\nover protective\none k\nnon traditional\nngsop engardens\nnest le\nmedic o\nling e\nle baron\nkam ay\nip se\nhol liston\nhick sville\nharmon ium\ngur nard\ndoom tree\ndh ram\ncrime stopper\nbjer g\nb vr\narthro scopy\napar is\nantw an\name ss\nðŁĺŃ ðŁĺį\nãĤĪ ãĤĬ\nwil sons\nun challenged\nthir teen\nswat ting\nstone age\nstandwith us\nsofthe year\nsocial network\nsd ca\nsav ona\nsam en\nru ggles\nroc co\nrick shaws\nrecep tionists\nreak fast\nrad in\nr zr\npen i\nnascar onnbc\nmcge ady\nliving with\nlethal bizzle\nlast minute\nl ch\nkew pie\njust dance\nhi jacks\ngre gar\ngra fts\nfric ke\nfloren cia\nfirst energy\ndd n\ncy outh\ncy mbi\nconfi dante\nchou dary\ncal lista\nc low\nburg led\nbo pp\nbill haslam\nbelieve it\nam ani\nace vic\néľ ĩ\nzeal ander\nwh att\nuz h\nturbo grafx\ntrailer park\nthro ck\nthenew school\nthe av\ntasty tuesday\nsor olla\nsin on\nsil ico\nsi banda\nscott sboro\nsaraswat ichandra\nruff o\nran sacked\nram o\npuri sima\npsycho tics\npin kie\npier point\npf aff\npeter dutton\nnucle ic\nnov ambb\nnico lette\nnar o\nmetro dome\nmed abad\nlagh ari\nkol arov\nking ham\nki eth\nike bukuro\nid olo\nget down\nfigure head\ndaz a\ncros bie\nconni ff\ncon ner\nce urope\nbrum hippodrome\nbj m\nbhogle harsha\nberry hill\nbe ba\nang ar\namber rose\nafil ms\nðŁĺĤ ðŁĴľ\nðŁĵ ¶\nаР¹\nuri ya\ntsu ko\nthe power\ntakeover tuesday\nseth rich\nse wick\nsal vulcano\nri vu\nre gr\nques nel\nqu re\npre mo\npower book\npolymer ization\npoly chrome\npj morton\nouel lette\noklahom an\nok yo\noh su\noccu red\nnu ages\nni ku\nmus yoka\nmoon roof\nmm hg\nmc cay\nmall a\nkre u\nki seki\nkate walsh\nk pu\nimplo ding\nib p\nfund acion\ndu laney\ndream car\ndha an\ncru ral\nclu edo\ncha hiye\nbutter cups\nbun doran\nbon go\nbet ancourt\nathiy ashetty\nasin ine\nalbertope tro\naam n\nðŁĶ ¢\n주ëħ Ħ\nwa ad\nvilam oura\nvege tal\nu ag\ntao bao\nswi sh\nshake out\nshadowhunters season\nsh air\nselen afor\nsanc tification\ns ello\ns dot\ns bbq\nro ti\nril los\nproton mail\nprogram ing\npol len\npla sterer\npeak sn\noff stage\nny ra\nna ima\nmoor croft\nmil lets\nmel nyk\nmaxi mized\nmarshaw right\nley ard\nler n\nle elee\nlat rines\njaime camil\njagdish shetty\nim ur\nim measurably\nhome show\nhallo ff\nh tb\ngo ga\nexa directioners\nex omars\nell trust\nei fel\ndone job\nder na\ndark ling\nchirp chirp\nchatham house\ncall er\nbrad for\nbon nar\nben jy\nal tan\nabre wing\nabduc ting\nâĿ Ķ\nwhite space\nup son\ntype cast\ntrump russi\nto ws\ntheme park\nstitch fix\nshi i\nsat er\nregister tovote\nq lik\npivo tal\no et\nmulti generational\nmedic ina\nlike app\nl tte\nl ingly\nkur ni\nku e\nking fisher\njes mond\ninver aray\ninstig ated\nin ate\nhit achi\nhar le\nha sson\ngou cher\nfood allergies\nexpen sively\ndiamond head\ncross wind\ncommend ations\nchri stel\nche ikh\nchau vet\nbun do\nbig island\nber thed\narthr itic\nardro ssan\nar dian\nad noc\n???????? ????????\nðŁı¿ âĢįâĻĤï¸ı\nðŁ§ ¤\nðŁ¤¬ ðŁ¤¬\nâĿ¤ï¸ı ðŁijĮ\nz hon\nz evon\nth ound\ntend encia\nsock ers\nso hail\nsk river\nshort falls\nshi as\nse alion\nscab ious\nsand gate\nrichland two\nrell eno\nrei ko\nr rd\nnokom is\nmy motorhead\nmul und\nmor iyama\nmonk stown\nmelaniel bbh\nm ander\nluc kett\nkoo per\nkin ghorn\nje ppe\njapan town\nhoku to\ngenevie ve\nfun n\nfull moon\nfrankiej grande\nfirstal er\ndancing onice\nchan ter\nbrussel sairport\nbreakfast ofchampions\nboli varian\nbicon dova\nbetten court\narthro plasty\nðŁĻĮ ðŁijĮ\nðŁĺĤðŁĺĤðŁĺĤ #\nðŁijĢ ðŁijĢðŁijĢðŁijĢ\nðŁ¦ģ ðŁ¦ģðŁ¦ģ\nç¾ ½\nze on\nz yl\nwi ed\nvalenci ana\nval di\nu cluelet\ntor adio\nthra ki\nthick en\nt sou\nsy ru\nsun t\nsolstice publish\nshim mery\nsha al\nse ec\nru les\nresurrec ts\nplastic surgeon\noye depo\nover reaction\noh no\nnc beer\nmis rule\nmic ellar\nlistening to\nline work\nlin dsley\nlam eness\nknight ly\nki yoshi\nkeep your\nimpresi on\nignati an\nht punjab\nhere wego\nhand cuff\nhalf back\nfuturi sts\nfay emi\nfar u\nf sg\nf no\ne mel\ne gom\ndonor schoose\ndoni zetti\ndissapo inted\ndau n\ncrickle wood\ncre es\ncork airport\ncon serve\ncommunity day\nclare more\nchur che\ncap shaw\nbubb awallace\nbroad head\nanne e\naly and\n___ ;\nâĻ ļ\nâĸ ¡\nà¹ĢภĹ\nyoh ji\nxau usd\nwork top\nvol ks\nvijay mallya\ntrend setting\nsou ks\nsm tx\nske eters\nsi rr\nsa very\nre wiring\nquil t\nprideand prejudice\npatriarch ate\nofficial bantams\no wais\nnike golf\nmumb ait\nmo gg\nmichael myers\nmcfly harry\nlebo witz\nland forms\nk mf\nharts field\nhan se\ngö te\ngri jal\neastere gg\ndri shyam\ndeto fficial\ndaily inspiration\ncol lation\ncheer fulness\nche detofficial\nbreed love\nbie shq\nbapti sta\nðŁĻıðŁı¼ âĿ¤ï¸ı\nðŁijĮ ðŁĻĮ\níĻ į\næľ ´\nâĨĵ âĨĵ\nworld theatreday\nvo tar\nstragg lers\nso yeon\nslo ped\nskin less\nsha hs\nse award\nrestur ant\nr ks\nplo ad\npau ling\npar appa\noung music\nno life\nne ston\nn sports\nmn k\nmil ana\nme led\nmarin eland\nmanchester pride\nlund quist\nlow party\nlar kins\nlanc sccc\nkim woobin\nkal itta\nk nar\nitalian ate\nin yong\nidyll wild\nhe athle\nha gan\ngi one\nfreck led\nfon nbc\nfer m\nfebre ze\nexcep ting\neufau la\nethiop ians\ner dington\ndomin ika\ndenbigh shire\nde fro\ndd d\ncre el\ncotedazur france\ncomp chem\nchar cha\ncatal ano\ncamo sun\nbu to\nbel mondo\nassail ant\narthro scopic\nap fel\naali ya\nîIJĴîIJĴ îIJĴ\nâĶ Ĺ\nâĢ¢ #\nಠ¬\nx os\nwre x\nwig ston\nvol endam\nur sery\ntru c\nthat one\nth sh\nt kt\nt dl\nsin b\nscoun try\nsam riegel\ns comics\nrian johnson\np mn\nour way\nou sting\nno tw\nn ko\nmontra chet\nmo stert\nmichael franti\nmh w\nmax azria\nliving the\nlind ac\nk awa\nincentivi ze\nhe mm\nhat er\ngi a\nfree stone\nexer ted\neu storm\nearly music\nd hr\ncursed child\ncross road\nconse il\nco quette\nchill ing\ncam brian\nbu rien\nbring ithome\nblou in\nbiom edicine\nbe em\nbair ns\nash ab\nar yan\nanti fascist\nand tobago\naf acts\nîĢ İ\næĻ Ĥ\nyouth olympics\nun scientific\nun repentant\nuk trichat\ntre bles\ntinsel town\ntear fund\ntan ak\nsu sanc\nste gman\nsor teo\nsf g\nsabo teur\nroald dahl\nrho den\nquestion oftheday\npresump tive\npre eclampsia\npot g\nplu mpton\npeace ofmind\npath letics\nnaf a\nmy as\nmerci an\nmc bee\nmar ka\nma ira\nly tt\ning b\nholy rood\nholm gren\ngom ocs\nevely ne\nembaras sing\nem plaw\ndoc cubus\ndistr acts\ncuff link\ncour rier\ncage theelephant\nbro hm\nbon sall\nbar tz\naf tab\naf fixed\nadel man\nac f\nãģ Ī\né té\nyar ds\nwolve srl\nwith style\nwing chun\nupd f\nu ecker\ntor menta\nte kin\nte ale\nstraigh tedge\nstar alliance\nst century\nspy glass\nsaniti zed\ns indi\nros alia\nren ate\nraz ek\nq st\npu el\nno omi\nnast iness\nmm viverito\nmini vans\nmeso scale\nmarklevin show\nluzer ne\nlukash enko\nlol cat\nlizz i\nland schaft\nko th\nhuman oids\nhoo poe\nguil t\ngreen man\ngi ug\ngh ly\nfrom today\nfra e\nfire box\ndramati st\ndr oner\ndiy network\ncover alls\ncounsel s\ncoc co\ncardio thoracic\nbibli o\narro ba\nann un\namgen toc\naf rench\nadi pec\nÄ ĥ\nwo wwww\nw ff\nvau d\nultra violence\nu wt\nthe grdc\nten shi\ntat ak\nsunning dale\nse et\nscar diff\nre order\npush ing\npit ti\npic colla\npe stering\npal eta\nnotthefake svp\nnon human\nndu ja\nmis steps\nmagnifi que\nma sta\nlight weights\nlego set\nke ti\nje g\nge dung\ngag ement\nfert itta\nfemale founders\nfal ke\ndu bo\ndir ksen\ndin kins\nde con\ncoo ties\nconcu ssed\nchang bin\nbrian mcfadden\nbel ford\nbegon ias\nbal ch\nan gra\nab log\n... ".\nö n\nwe gman\nwawa w\nwav ves\nu bo\ntake o\nsto cky\nson der\nso ts\nsle n\nsky sport\nsik ander\nsar r\nri ana\npre order\nou p\non ore\nom ax\noff ramp\noc sb\nmira flores\nmiki moto\nma res\nlau rene\nland sberg\nku u\nke mble\nk les\njoelo steen\nj cb\ni wak\nhon o\nhog weed\nho reb\nhec ate\nhammer time\nham pering\ngossi ps\nfor ays\nfall er\nfai thin\nequ ating\ndo deca\ncott le\nconom ic\ncon flu\nchim ing\nbrook shire\nbre an\nbr ani\nbio geography\nbay u\nan zio\nðŁĶµ ðŁĶµ\nðŁı Ĥ\nwy te\nuuu ut\nut pa\nun scr\ntro om\ntitanic belfast\nthan niversary\nter schelling\nsw ang\nsur ge\nsmu dges\nsin ton\nscal ding\nsat guru\nsar py\nrug ge\npur itans\nou zo\nmukil teo\nmechanic sburg\nmall or\nm ø\nlim ite\nlets make\nlari mar\njaz ak\nir uk\ninit towinit\nhar tung\nha berman\ngm fb\nfri as\ndysen tery\ncat walks\nbrough ty\nboston ian\nben digo\nat je\nashken azi\narizon ans\nappliqu es\nwool ery\nwitch ery\ntravi stritt\nther un\nthe matildas\nsyracuse crunch\nsun life\nspl m\nsouth london\nsl ac\nshur r\nsa hs\nrush cliffe\nren cy\nreali gn\nrab ada\nr ld\npreak ness\npl anta\nover growth\nmumbai kars\nmpo fu\nmozam bican\nmatch s\nmat ra\nle well\nkam in\njonathanr knight\nj sr\nintram urals\nimpressi onists\ngo sha\ngau d\nfor u\nfor gov\nfireal arm\nfi xx\nfarmers journal\ncu mber\ncod fish\nch agu\ncelebr a\nbulldo zers\nblackfriday deals\nber shka\nas ri\nark ell\nak ie\nad asi\nã ĭ\nâĻ¥ ï¸İ\nâĢĶ &\nyoko suka\nwi sps\nwesth ill\nwc pt\nvivi ani\nvir ga\nun days\ntad ka\nsre eram\nsqu in\nschar gers\nre introducing\nphlebo tomy\npeaksn valleys\npe cked\npaid media\nor lv\noke mos\nnt p\nno vic\nmr peaksnvalleys\nmad ama\nliber ators\nkam er\njuliag illard\nj nr\nim ts\nigh alo\nhemorrho ids\nground hopping\ngo do\nge ely\nfromthe field\nfor today\nfemale filmmakerfriday\nembezz ling\nduc ato\ndor ris\ncharlton comics\nchann elled\nbritish moths\nas prey\nart prints\nadel ta\nìĿ´ ìĬ¹\nà¹Ģภģ\nwork at\nwolf son\nwe sco\nvin h\nun cultured\ntech y\ntam ayo\nsonn enberg\nsnar ling\nsma k\nse vers\ns ads\nprish tina\nped ne\npatt ymurray\nnr x\nmoon raker\nmol an\nmend elson\nmcgu irk\nmartin omalley\nkwad wo\ni um\nhor naday\nhelicop ter\ngar an\nen ot\ndiscover yof\nchin en\ncal fire\nbritish gq\nbrain waves\nblue tick\nber ube\nbent leigh\nbe aware\nave iro\nare va\nan unci\nal sen\nâľĮ âĿ¤\nx illia\nwwe fanart\nvigne sh\ntwy la\nthe secret\nthe poke\nschi edam\nsaxophon es\npop sugar\npage sen\noutsi delands\nnu da\nnationalhot dogday\nnaj wa\nn sac\nmusic for\nmet as\nlovemy life\nlondon midland\nla che\njar amillo\nindoctrin ated\nib min\ni dream\nhellomy nameis\ngn om\nfur lough\nfin kle\nfil lu\nely xion\ndug ong\ndo ren\nding ley\ndesc ents\nday one\nchateau neuf\ncharlie sheen\nbread fruit\nben havn\nbab oxing\nba rea\napol itical\nahu ila\nafro pagesen\nad news\nçİĭ åĺī\nâļ¡ âļ¡\nاÙĦÙĦ Ùĩ\nwomend eliver\nwis ma\nv ro\nus and\nuk homeoffice\ntrinidad andtobago\ntony stark\nsweat y\nstay healthy\nsor chestra\nsmo thering\nrober te\npra veen\npoo m\npocaly ptic\nobli ging\nneg ati\nna hs\nn mc\nman ville\nma zie\nlonglivelong mire\nleg i\nle ite\nk hol\njun ker\njoh anne\nja vert\nj kr\ninte c\nhir on\nheyn ckes\nher mosa\nhair goals\nh mann\ngaw ande\nfamil ly\nfai za\ndental implants\nde haan\ncat to\ncas k\nbrock hampton\nboon dock\nas sive\narc i\naguil as\nðŁı´ ðŁı´\nåľ° éľĩ\nyokai watch\nwer chter\nvil lette\nva as\nubi quity\ntor in\ntol ly\nstlouis rams\nspo elstra\nsn fonnbc\nsco ggin\nrahe ja\nphenomen ology\nph reno\npau ley\nnb ach\nnati vely\nnapp y\nmun g\nmajor ities\nlin ic\nka al\njordin sparks\ngro ep\ngod head\nfo ye\nflavon oids\nextro vert\ndal ymount\ncom une\nco hiba\nbur sas\nbiz jet\nbar maid\nar dan\namand as\naban ks\nðŁ¤ Ľ\nâĺ ī\nਠ®\nwi fi\nvin tner\nsymph onia\nsv su\nstadium series\nshash tag\nrecuper ate\nran jith\npe son\nnun cio\nneck wear\nmsport ltd\nmonth ly\nmont calm\nmk tg\nmelo y\nmaster softhe\nmar gulies\nmam noon\nle bar\nkro m\njust jared\njessic ac\nim pairs\nim ited\ni we\nho es\nhi da\ngu th\ngott ago\nfan sclub\ne stancia\ndo olin\ndcre birth\ndash t\ncou plings\ncompac ts\ncagatayulu soyy\ncaesa rea\nbootle gger\nbar rington\nal ak\nå® ĺ\nà´ ²\nÎ ³\nya el\nwi bc\nwheel of\nweb tv\nwang ari\nwall en\nuni onize\nther ise\nthe kitchen\nswel come\nstra dale\nshannonr watts\nsel anne\nscap ular\nsan y\nsa kic\nry dal\nru mped\npe mba\norigin ation\nok er\nmo til\nmccaf ferty\nmax mara\nmathe wson\nli ken\nlagun e\nindiec ade\nhigh bridge\nhahah hahaha\nhab toor\nglass works\ngeorgehw bush\nfe ud\nez ine\nemm erich\nem mental\necon et\ne og\ndy ffr\ndu per\ndissip ating\nconversation edu\ncomm ittal\ncircu lator\nbi sher\nbarcel o\nbad azz\nay un\narm chairs\nand on\nah luwalia\nภŁ\nyd ney\nwhe eze\nwater lo\nvi xen\nvi are\nver ment\nus oftball\nun proven\nu stad\ntro xell\nthank sobama\nster io\nsenior day\nsal ir\nrev amps\nre married\nre apply\npen umbra\npedan tic\noo sh\nok no\no gres\nnz lv\nno ch\nnewbury racing\nnep sac\nmusic ares\nmo efcc\nme ows\nlove grove\nlavo ie\nkevin bacon\njaco bus\nj aki\ninfl ationary\nhoo g\nheg seth\ngulben kian\nfraser burgh\nenrol lees\nendo vascular\ndisc loses\ncoss acks\nconju gate\ncomple at\ncall ender\nbroc kie\nbr ora\nbiolumin escence\nbelle fonte\nbeat s\nbar sha\nax schat\natho lic\nap lan\namy acker\nwi politics\nwann ables\nvisit or\nu shi\ntor rey\nti fully\nthe shining\ntaxider mist\nsw en\nstr ymon\nsth attweet\nrush hour\nrh b\nrebu ked\nreal betis\npotat oe\nphil us\npetul ant\npe ten\npap oose\nmon aro\nmo sle\nming na\nlei den\nlec tro\nleave your\nkyan ite\nkre t\nk cra\njls official\ninordin ate\nin can\ni die\nhuguen ot\nhorn castle\ngluten free\nfore go\nemerald citycon\ndesecr ated\ndeadby daylight\ndanny devito\ncu ero\ncoin marketcap\ncavern ous\nc fi\nbuenas noches\nbehavior aleconomics\nate am\nat rip\nadjudic ation\naby ssal\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃðŁĺŃ\nðŁĴħ ðŁı¾\nà® ²\nworld pressfreedomday\nwheel don\nwater lily\nv db\nul t\nu am\nsin ha\nshah naz\nscu ffed\nscu be\nsac ro\nrol la\nrecon ciled\nran noch\npl ong\nno joke\nno bbs\nmuzaffar nagar\nmultilingu alism\nlor ber\nkis son\nkill shot\njo les\ninsu la\nhondar acing\nhel lion\nhe vc\ngri e\ngracie bjj\nglbl ct\nflaming lips\nen f\nel mi\ndisneysm mc\ncraw ly\ncost liest\ncave men\ncar pi\nbon ar\nbal ad\nash trays\nar mm\na hia\nðŁĴŠ⾨\nðŁ¤· âĢįâĻĢï¸ı\níĥľ 민\nãĥ ¾\nyesu das\nx sw\nwor rier\nvo kes\nvi ano\nveronic as\nve ered\ntr anc\ntl j\nti bor\nten i\ntatt n\nsober look\nsimon pagenaud\nshin igami\nsei ji\ns bo\nren na\npalak muchhal\nmu cos\nmit nick\nmisi denti\nmeta verse\nma zen\nkil ner\njames joyce\nhol ding\nhik vision\ngo bs\ngarh wal\nfanta stica\ne za\ndu lac\nder mic\ndan dies\nconju gated\ncil ia\nc team\nbri ssett\nbf n\nbaw den\naim less\nðŁĺ ¦\nâĺķ âĺķ\nwap si\nvisi th\nun ironically\nteach foramerica\ntan ey\nspring brook\nshowand sell\nshow up\nscra ft\nri mac\nrep tile\nram ires\nradi or\npure foy\npal ong\noke hampton\nne cking\nmun t\nmilla jovovich\nmc millen\nmalaysi atru\nlu ch\nlin ker\nld b\nkon trol\njame sh\ninfo graph\ninfinit um\nib ers\nhigh brow\nhetero chromia\nhe th\ngrant land\ngra il\nflat bush\nfl v\nedge ley\ndee wane\ndan ko\ncr anny\ncomi ket\nbur rs\nbrum mies\nb uni\nair way\na press\nãĤ Ĩ\nwin stanley\nvuj icic\nvote the\nvali um\nv dot\nun forced\ntra bant\ntony kanaan\ntime shighered\nthe beat\nsau ton\nsaravan an\nsarah palin\nribe ira\nrhi anna\nper rine\nparty hard\nparagli der\nolympic games\nnas er\nmckel vey\nm cau\nkidnapp ings\nkhali faof\nke gv\niso des\nhome ent\nhal ber\ngreat job\ng cp\nfresh food\ndom enech\ncurren taffairs\ncra g\ncor lando\nbutter beer\nboat sthattweet\nbo wn\nbbc devon\nbal dur\nbacchan al\nactu aries\nðŁ¤Ł ðŁı»\nwi kia\nver dean\nun cf\nty dillon\ntodayi learned\nteu tonic\nte tus\nspeed ers\nsou ter\nsoon young\nshah bag\nsd f\nsauce do\npsy ang\npri y\npote et\npheno typic\nphar os\npar khill\nosten sibly\nolin ari\nne tw\nne mi\nmother of\nmiq balkhan\nmill ay\nmay on\nmatti son\nmasa k\nlu ss\nle ci\nky la\nkor man\nkatamarayu du\nj me\nglu teus\nge ylang\nfitness addict\nfish y\ndro poff\ndevi ants\nconvolu tional\nchrisy oungmusic\ncat ra\ncarbon ation\nbou ghs\nbeat in\nbar to\nb pe\nas chool\naqui fers\nam mons\naker r\naig ner\nafri forum\nad ame\nab dus\nðŁĽ ¡\nðŁijı @\nìŀ Ħ\nëį°ìĿ´ ìĭĿìĬ¤\ny alla\nwicke duk\nwe itz\nu pe\ntren ds\ntrans liter\ntrans am\ntr boxing\ntheo dore\ntamar indo\nsi def\nse lek\nsch ä\nra st\npot tawat\nplun dered\nni wa\nnap les\nmy na\nman child\nkaiser chiefs\nj de\nirishmusic party\ninvisi bles\ninqui red\nimbe ciles\nhor ace\nhavas u\nfever tree\nfe urope\nf ca\nek k\ncint as\ncgc comics\ncat elyn\ncar care\nbun crana\nbirth control\nbell wether\narn prior\nðŁļ IJ\nãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤\nãĥīãĥĥãĥĪ çµµ\nâĢĵ #\nಠŁ\n{ {\nworldstar hiphop\nwater slide\ntz ler\ntur us\ntre ll\ntommy robinson\ntech jobs\nste phie\nso wer\nsar the\nren tice\nreal deal\npugli ese\nour town\nnu ern\nnovel as\nnick toons\nnational zoo\nmro lym\nmel ding\nmathi eson\nlam berts\nkiller mike\nkend ell\nkate spadeny\nindone sian\niale gis\nhillar ys\nghol m\nfichtel berg\ndou gan\nd hok\ncro wing\ncon oce\ncom y\nclondal kin\ncarav elle\ncam pion\nbuzz es\nbur slem\nbra wny\nbn m\nbarcell ona\nappen dectomy\naf ranc\nac chi\n! ðŁ¤Ĺ\nzooey deschanel\nvintage showandsell\nvalent ini\nturno ff\nthe x\nstren ght\nso har\nsankran thi\nru iser\nrober tb\nquar ks\npromp tattn\nponti ff\nopen suse\nmtv base\nmobi kwik\nmisdemean ors\nmarcu sle\nmagne tics\nlovin leeds\nkup wara\nknife point\nke un\njohn l\nit ay\ninta wak\ninstig ating\nha bb\ngray ish\ngeme ente\nge zi\ngar onne\nfootball index\nfe is\nfal es\nevel ina\ndivo ire\ndissu ade\ncartoon ish\ncarry all\nblame less\nbigsky fb\nbal intawak\nan in\nachak zai\naccumul ates\n( Ëĺ\nâĢĵ >\n³ ´\nyng wie\nweare portadelaide\nwat ashi\nw to\nw ka\nvicti mization\nun steady\ntri st\nte gu\nt the\nsun ing\nsports net\nspell check\nsix teen\npo do\nmu ta\nmoz army\nmar ta\nmalaysiatru ly\nlon dis\ninfor me\nhog sme\nhi bbs\nfisher mans\nfid ler\nestre la\ndo ee\nd ss\nd mca\ncu l\ncon gen\ncausewere guys\ncamer amen\nbun go\nbmar czewska\nblair gowrie\nbio div\nbett or\nasth matic\nam ru\naj ade\nag bon\nabrew ster\n: ("\nðŁij ĸ\nå® ĩ\nاÙĦجز ائر\nwin ny\nv pg\nv lei\nup en\ntu babu\ntrack day\nthierry henry\ntemp ts\ntath lete\nsta veley\nsel kie\nsc ampton\ns berry\nreyn aldo\nrecu r\npundit ry\npre loaded\npis cine\nper gamon\npar ada\noni verse\nne ame\nmom ma\nmc lean\nmatrimon io\nma spalomas\nletit snow\nke ady\ni is\nhri shi\nho axes\nhenri ette\nhead pieces\ngun ne\ngreen house\nglen cairn\ngior nata\nextermin ated\nexi ste\neconom ia\ndja fro\ndav ichi\ncup ar\nclinte astwood\ncho ti\nbla is\nbethe match\nba hati\nal thy\n@ @\nðŁĴģ ðŁĺĤ\nwl m\ntwi sta\ntrul li\ntra inst\ntali tha\nt df\nsi bo\nseaf oo\nse j\nschre ck\nsal dan\nren ge\nre tren\nr nn\nr hul\nr alli\nprayfor boston\npp ey\npop tarts\np bf\nouse burn\nof truth\nno homo\nnight side\nn wh\nmor to\nmor gs\nmari us\nlager tha\nkick z\nki g\nkal len\nju len\njo zy\nhur lingham\nhuda beauty\nhe ter\nhardy brand\ngab aldon\nfill in\nfe de\nencephal opathy\ndoor dash\ndefam ing\ncr ven\ncor una\ncolt snation\nco qui\naway day\nandrew gillum\nalderleye dge\nak r\n= >>\n* ____\nâĮ Ľ\nà¸Ńภ°\nvol ve\nto read\nti po\ntermin a\ntau r\nstan tec\nsmi ther\nsar ic\nsalv aging\npre biotic\npim lic\nperth wildcats\now an\non evoice\nold boy\noak tree\nn gar\nmetr onomy\nme sis\nmar ken\nmalaysiatruly asia\nmalaysi agp\nloom pa\nleg er\nlaur in\nland in\nkan ak\nisi dore\nische mia\ninduc ts\nin italy\ni mec\ngrun berg\nexordi umin\ncy steine\ncra sher\nclut ched\ncho wing\nbran ston\nbat aille\nbal main\naw in\nasce tic\nart scouncil\naho k\nadam sandler\nðŁĹ »\nze et\nyu ca\nway nes\nver onese\nunequi vocal\nto stad\nthe middle\nter rel\ntaka ful\nsupp ing\nsta f\nst fx\nsm acc\nselfdriving cars\nrevolu cion\npga of\nnf caorg\nneu trinos\nn gun\nmor is\nmaz embe\nmall ick\nma aj\nlu tes\nlovelan sing\nli pol\nlear ts\nl hu\nkodi aks\nko wicz\nkit tery\nkill iney\nkam mer\njosi ah\nhome schooled\nhoka oneone\nhm fc\nha bak\ngy asi\ngri bble\ngen na\neter na\neller slie\ndisney jobs\ndan slott\ncu ar\ncounter strike\ncompo ser\ncle re\ncetace an\nbag piper\nbacteri opha\nðŁĺ©ðŁĺ© ðŁĺ©ðŁĺ©\ny hs\nwoo h\nwill man\nup close\ntele hit\nswi jk\nsubscri ption\nsl ang\nsalt and\ns bakery\nreal kurtangle\nqual trics\nproce so\npoly thene\nobe sity\nnom an\nnis sin\nnal ini\nn sn\nn acs\nmuh ney\nmorning mika\nmin gh\nmi thing\nmath schat\nmadel aine\nma pl\nlouis burg\nle vu\nke by\njo ely\ningle side\nindye leven\nhealthy skin\ngu ises\ngofor it\ngo forth\nfren ds\nforfe ited\nepidemi ological\neffe ct\ndayafter art\ndag estan\nd to\nd fa\ncu mp\ncri stin\ncon founding\nco che\ncho cl\nceleb juice\nap m\nanachron ism\naar yan\nðŁIJ¾ #\nzar ya\nwarrior wednesday\nvor m\nvir ate\nul zzang\nstol lery\nsnor ted\nsin gel\nsar ath\nsach dev\npi az\noth ate\nnew sam\nmr j\nlitt len\nlegend a\nleelan au\nle mos\nlast minute\njig saw\nin le\nhunter x\ngh al\nflirt atious\negg shells\ndeion sanders\ndedic ated\ndece m\nde ce\ncor no\nchit rang\ncarol l\ncapit ale\nbridge man\nblan che\nbi jan\nback inthe\naro hit\nappend age\nannu alized\namen hotep\nusl pdl\nun y\nun remarkable\nun dra\ntun ku\ntra den\nthor nes\nther hino\nthe hobbit\nstemc ell\nstandardi ze\nso dom\nshatter proof\nsen mikelee\nsavannah guthrie\nsaip alla\nroyal marines\nprem giam\npastic he\nove reem\noutdoor life\nout classed\nnu ts\nmün ster\nmike o\nmarsu pi\nli bri\nl sv\nl aci\nkin sman\nkegv raja\nkabb fox\njordan b\nil r\nhumph rey\ngui led\nguer rilla\ngreen street\nfree ware\nfl inn\nexasper ated\nesp en\nequ animity\nendo fan\ndru gging\ndialec tical\ndebby ryan\ncu au\ncro martie\ncorri da\ncon junto\ncolloqui al\nco king\ncam inos\ncalvinand hobbes\nc mbs\nbu loh\nblack watch\nbadger cull\nas syria\napho tography\nana ïs\nan ami\naerom exico\nðŁĶ Ł\n⼠°ï¸ı\nx em\nvish wanath\num r\nthenext web\nst roo\nsmol en\nsa ins\nra usch\npre ck\nple ine\np tera\np ko\nover tures\nother world\nol ding\nno strum\nnatur alistic\nnan ook\nmiseric ordia\nmen achem\nken go\nkanchan aburi\nk opin\nhug day\nhercu lane\nhar boring\ngar p\ndg d\ndab ur\ncro me\ncre ve\ncomplex ed\ncabernet sauvignon\nbel gie\nash vik\namorph is\nalien covenant\nain tre\nadjust ers\nacapp ella\nac cross\nz es\nys mith\nyor u\nyaw ns\nvol leys\nvill ard\nunab omber\nto stones\nstau stell\nsar daar\nsaq ib\nsa isd\nro vers\nreal johngreen\nraff led\npremgiam aren\nper ish\nnu un\nme hak\nmccon ville\nlatino america\nlah or\nkag gle\njha sanjay\nj lg\ninept itude\nhu ch\nhooligan ism\nhal les\ngur nee\ngrac es\nflo ssie\nfer rum\nfeliz miercoles\nelk ton\nelabor ates\ndr ale\ncycle chat\ncri mped\ncha rente\nch add\nceli bacy\nbiop hilia\nband hu\nadi r\nacou stically\níĿ ¬\nvirtu osity\ntoo p\nspati ally\nshowr unners\nscree ches\nresto rer\nralph northam\npit cairn\npend a\nparamount pics\npa cham\nour an\nou tran\nmonu mento\nmaken a\nmad as\nlou dobbs\nloc kie\nli pp\nl bj\nk li\nhowtoge taway\ngroup chat\ngo bo\ngirl meetsworld\nenh of\nduches ne\ndonthe sash\ndevere aux\ndeath row\ndan ske\ncollin a\nchin edu\ncha g\ncab inte\nblit zen\nbe as\nbar by\nauto blog\nap su\nant unes\nan chester\namy lo\nal esis\nãĢij #\nع ÙĬ\nyard bird\ny land\nwil ke\nwat ty\nw has\nun cw\ntoo bin\ntema sek\nsum thin\nstrathro y\nsto wer\nsst pierre\nspiritu alism\nsile sia\nshower head\nse st\nsan ghis\nrod ger\nrd weeksary\nr tv\nr fe\npon do\npin yin\nphari sees\npen er\nnex star\nmy girl\nmusco vy\nmune er\nmich keegan\nmcly nd\nmag elang\nla gasse\nkw p\nkis ner\njosh ramsay\nho pl\nherculane um\nhe mel\nflick er\nene al\nelli psis\ne mag\ndy sauton\ndeath squad\ndeal sweek\ndead pan\ndarwin day\ncraw fords\nchar ro\nch ali\ncenter point\nbun gy\nbomb squad\nbeach es\nbe efs\nale man\nadi b\nyu ca\nyouranon news\nyaaa as\nwatu kee\nwal li\nu ge\ntherain bow\nthe wall\nstu die\nsnu gg\nse kiro\nreal world\nray ong\nphotograph er\nmock tail\nminu et\nmemori alize\nme hl\nmbom bela\nm ella\nlog ins\nle ka\nkotobu kiya\nkor u\nhu on\nhomeand familytv\nglo ssed\ngh ul\ngabriel macht\ng was\nfree dia\nee u\ndisney studios\nde res\ncu star\ncolumbi ana\nco iff\ncc cp\ncar pa\nc bot\nbri ze\nal ks\nabi erto\nab baye\n, +\nâĺº ~\nymoun tain\nwee tz\nwe taski\nwater tower\nunder pinned\nun belief\ntvac tor\nte q\nstipp ling\nstargat esg\nspac ek\nselenafor mmva\nse van\ns gaa\ns down\ns baby\nrie der\nredd ing\nred brick\nreal alicecooper\nre tweeter\nre ti\nrain tree\nr mm\npor ker\npl zen\npl undering\nphil ander\npeckin pah\nnorthan ts\nnar ula\nn ise\nmic f\nmedit ates\nmc mullan\nmark os\nhoney man\nhom ed\nhe eler\ngirl ssoccer\ng ws\nf ws\ne op\ndrac ut\ndog walker\ndel gad\ncy pher\nchha bra\nblack art\nbi ety\nbhagav adgita\nbeu tiful\nber ks\nbbcradi olondon\nav ori\nalldog smatter\nair gun\naddress able\nwells fargo\nwear your\nw mg\nve ux\nvamp iro\ntu loy\ntoday skid\nsw illy\nshadow man\nreve al\nreal deal\nr wen\npreck winkle\npink ney\nphilipp i\noak hurst\nnative american\nmis ation\nmannar ino\nmal ting\nlak hani\nki mora\nken ia\nic asa\nherne bay\nhercu lean\nguzz ling\ngeorge sstpierre\nfron teras\nfluori dation\nexc ercise\neman ci\ndown trodden\ndo tter\ncor ax\nchry sler\ncat fight\nbot te\nbo in\nberg dor\nbarbe cues\nanime girl\nan ind\namak hosi\nal exc\nair tricity\nðŁĹ Ŀ\nðŁĴ« ðŁĴ«\nçĻº å£\nâĻª âĻ«\nyl icious\nwf cofficial\nwarmb lood\ntom felton\ntokyo ghoul\ntest drive\nsteel work\nsp ahn\nskib bere\nsad ako\ns ldn\nre selling\nrawten stall\nr pr\npi leggi\npanet tiere\nox on\nnat as\nn ppa\nmont lake\nmoney laundering\nml le\nmarath i\nlast week\nkent st\njer ald\nintelli vision\nint p\nha dou\ngrat itude\nfrie za\ndis member\ndel una\ncp j\ncoraz ón\ncon fine\nchur a\ncharli ze\ncha uns\ncentre point\nbroad city\nbou let\nbo al\nbill fish\nbeath ard\nbe dok\nav ella\nas sia\napp ice\nail intelligence\nðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį\nðŁĺĬ ðŁĺī\nðŁĵ ¥\nâĨ IJ\nwhoo sh\nwan tt\nw abbey\nvom its\nus band\nturnar ound\ntor que\nsz cz\nsur geon\nsop inion\nsam stag\nsali ba\nsal ary\nplay ground\npersonal growth\nov als\nor leg\non no\nofficin alis\noc varsity\nmul key\nmuff lerman\nmapu a\nle baran\nlamin ator\nknight fdn\nki bo\nk out\nk ci\niow an\ninebri ated\nid or\nic emen\ni dia\nhan kar\nhamidmir pak\nh ran\ngulf coast\ngraham mctavish\ngr acy\ngover ns\nfiannaf ailparty\nexy nos\nesp era\nelit ism\ndump sters\ndeterior ates\ncu trone\ncon ciliation\nchor uses\nchin ooks\nbelit ung\nb wh\nas ong\nam dram\nì°¬ ìĹ´\nçĮ «\nâĢ ı\nzou is\nwylde audio\nw rugby\nta ina\nt db\nsnow melt\nsi sko\nsi ris\nsap in\nrous se\nra si\npv d\npsyched elia\npretty inpink\npower shift\npol ing\nou o\noran je\none il\no ving\no gc\nnieu w\nnew sar\nnever land\nn walest\nmy bag\nmv no\nmur tala\nmuj ica\nmc s\nlor aine\njam nagar\nj rt\nimage oftheday\ni wk\nhol gor\ngt live\nfor climate\nfood pic\nfik re\nenda ids\nelli pse\ndi zer\nda aaaa\ncivil iz\ncherry wood\nbu ggin\nbrick er\nboy ne\nbil awal\nbibl ical\nbi fida\nbar and\nbant ay\nartific ailintelligence\nan ser\nah watukee\naco ach\nâĻ¥ âĻ¡âĻ¥\nwedne sbury\nverment ino\nus rex\nther ford\nter ce\nte ssie\ntable aux\nsub contractors\nsty e\nsix sigma\nside men\nsand ro\nri scoll\nre ddy\nraider pride\npsych ometric\npro life\npal as\np sies\nom are\nnaf ld\nmis rata\nmar kie\nling on\nlim one\nlen gua\nkai ba\njon axx\njo te\nhr f\nhar tz\ngra eber\ngo jays\ngo ad\nge ce\nfre cce\nflex or\ned inger\ndot net\ncommunity radio\nclimat es\nbraw ley\nboy les\nboo kish\nbloody mary\nbest memories\nbarnesand noble\nback space\narte per\nar cia\nalleg orical\n! âģ£\nâĶ Ľ\nاÙĦ Ø®\nuof maryland\nun filled\nu ti\ntom os\nthy ne\nthisi stexas\nthierry neuville\nta kar\nstar hub\nsse ur\nspe ers\nsim cha\nshirt dress\nse guro\nsch ü\nscar ily\nruther ford\nru v\nru skin\nredar rows\nre considered\noy i\nonof re\noh chr\nnumber one\nnor ah\nne esh\nmuse et\nmoder no\nmo ku\nmeet your\nmat tg\nma bino\nlu can\nlo tro\nks worth\nkhalifaof islam\nkendra scott\nkan ae\njalli an\nik os\ngym rat\nflipit blue\nflip flops\ndur amax\ndrop kick\ndi op\ndavid m\ncourtney act\ncir ro\nchurra sco\nchel sie\ncambo gia\ncam bus\ncalla o\nayush mann\napost le\nami k\nam ini\nair berlin\na ino\nðŁĺī ðŁĺĬ\nðŁIJ ¹\nãģ ł\nzar ina\nyeeye e\nyarra ville\nx tian\nthe shilpashetty\nstitch ers\nsix word\nsco ve\nsat ria\nri ek\nr tu\nprivate er\npl dr\nperry ville\nparticul ars\none stop\nno sing\nmiscell any\nmir pur\nmary lou\nmart ÃŃn\nmar azion\nman resa\nlen awee\nle moore\nkee bler\nka is\nim mo\nhome going\nh ni\nh lin\nge ma\nga seous\nfor dracing\near wax\ndiadel osmuertos\ndemo tion\ncri st\ncanadi anti\ncan de\ncade my\nburgl arized\nbun ge\nbrock ovich\nbritish art\nbed wetting\nbas o\nam ater\nace hotel\naber feldy\n? ":\nðŁıĥ ðŁı»\níĺ ľ\nìļ° ì§Ħ\në± ħ\nà¸ĩ à¸ĩ\nyr sonair\nwood berry\nwob bling\nweih nach\nvik tori\nup shot\nulcer ative\nty win\ntam ithas\ntamithas kov\nstat ement\nsta i\nsoul jah\nshirley setia\nshaw nigan\nser f\nsac re\nro dri\npu tz\npu jo\npress day\nph n\npassive income\noura bly\nomnis cient\noklahom ans\nok ri\nneighbor ly\nnaf p\nmanikar nika\nk gv\nin vi\nhell om\ngrat uit\nfu shi\nfor health\nextr amar\neph rata\nelvis costello\neic hen\ne mac\ndolce vita\ndi eu\ndevol ve\nd ho\nd fp\ncar maker\nbrittany ferries\nblon dy\nax emen\nat ore\nad moni\nac q\na festival\nðŁħ ±\nwe ghe\nval rhona\nurqu ell\nthre ec\nthe tide\nsiyahbey aza\nshep sut\nshan kumar\nscen a\nrwand ans\nrug ge\nram butan\nph ouse\nperpetu ates\no snes\nno tone\nnic ke\nnation sleague\nmid leton\nmichael sheen\nli w\nle ghorn\nkeep smiling\ninternational mensday\nic entennial\ni view\nhon daci\nh selive\ngreen week\nfal ana\nenerge tics\ndum plin\ndubga aofficial\ndprin tindustry\ndel aine\ndavuto glu\ncul bertson\ncre vice\ncommu ter\ncolombi ais\ncitrix synergy\nchut neys\nchin as\ncam girls\nca za\nburden some\nbu ga\nbiz humanrights\nbhav na\nare do\nannab elle\naldu bin\naccommod ated\nwor ts\nwh sv\nvit tor\nunder lay\nta fel\nson ys\nsmoke stack\nsl á\ns met\nred den\nre appears\nq ila\npg ms\npenguin india\npark theatre\nor dain\no ses\nnic hi\nmusik fest\nmusic man\nmeal sonwheels\nmc gau\nlun sford\nli zumab\nlan k\nkw abena\nknown st\nkhal a\njamess murray\nhol as\ngeor gia\nff ar\nfer moy\nfemin in\nen loe\necu ador\ndr ilon\ndisobe dient\ndisen chanted\ndat z\ncla pham\nchron os\nca sei\nbritt an\nbook man\nbick er\nbarbecu ing\naz arian\nartof m\napple dore\nan net\nan cia\nðŁĻı @\nðŁį ¨\nze char\nwer dum\nvoice actor\nvo lio\nve ss\nthe shark\ntam au\nsy mon\nsonic drivein\nshu d\ns ganguly\nro tich\nro hin\nrejec tions\nreco ast\nrebel ution\nram im\nqu d\norange isthenewblack\nnesqu ik\nmy freec\nmuhar raq\nmr an\nmolybden um\nmen inas\nmedia eval\nmcken ney\nlu iza\nlabor ious\nkon nect\nkaf r\njer u\nj mb\nhob bie\nglen finnan\ngas kins\nfra gon\nfilm school\nfight scancer\ndi ste\ncon dense\nburgo yne\nam ach\naggre ssiveness\nðŁĴ£ ðŁĴ¥\nðŁİ¥ ðŁİ¥\nè §\nàŃ į\né lé\nza f\nyoun ge\nyo kota\nwar fighter\nwa if\ntoron tonians\nti gh\nthe in\nthe avengers\ntermin ator\ntata steel\nt shep\nt gh\nsunid hic\nsimon celli\nseri eb\nsaniti ze\nsan ogo\nsal adin\nsaf ra\nrece sses\nr lp\npusci fer\npla ud\npan za\npan cho\noffici ant\no auth\nny ama\nn sr\nmour nes\nmil lau\nmid or\nmiami beach\nlumin ato\nlet arte\nla pid\nkre ss\niu u\ning and\ng wi\nflint lock\nfair clough\nel mbridge\ndress code\ndomic ile\ncros stalk\ncooper hewitt\ncommissi oner\nch ah\ncare home\nbu ggs\nay ye\nao ii\nalyn ch\nðŁĮŁðŁĮŁ ðŁĮŁðŁĮŁ\nver bal\nunexpec ted\ntsub aki\nthesun newspaper\ntel lez\nrdra jaofficial\nrafi eh\npu er\npop sci\nphe tch\npersonal training\np square\nox ic\nover ruled\noregon coast\nnine ws\nnational drink\nmr silver\nmichael mas\nmer ve\nmat thai\nmar am\nmachar ia\nlr sd\nl its\nkal kan\nk ch\nju eve\nin kenya\nhor sforth\nherbi vores\nhar p\nhappen stance\nhan ke\nfatboy slim\neus kadi\nell man\ndv am\ndoyou even\nder ren\ncompar tir\nbulldo zed\nbray don\nboozy chef\nbet je\nben avides\nben atia\nbb ma\nartofm mignola\nart forum\nap les\nand rich\nalum n\naln mouth\nðŁĺ»ðŁĺ» ðŁĺ»ðŁĺ»\ná¹ĩ a\nà° ¯\nwul lie\nworld diabetesday\nwicket keeper\nunbe knownst\nun ningham\ntrack suits\nsey doux\nsco ff\nsauchie hall\nsang amon\nrv hs\nridge mont\nqc poli\npower gen\nottaw acity\nn are\nmun sters\nmovember uk\nmoore field\nmillion s\nmess a\nman power\nm ney\nler ch\nlal upra\nl ere\nkrun g\nken i\njae beom\ninf el\nimp ound\nh ka\ngo yard\ngo ble\ngid dish\nfe do\neu u\ndoo ku\ndonmar warehouse\ndilip kumar\nde ek\ndah lin\ncur tailed\ncro ak\nbur da\nbor ah\naston martin\nard is\nar sa\nam manford\nabscbn sports\naalt ouniversity\n? ""\nðŁĺģ ðŁĻĮ\nç¦ ı\nت ÙĪ\nzi ff\nye es\nwater front\nvisi bilities\nux e\nuniversal ity\ntwitch raid\ntur kic\ntro o\nthen hs\nthe player\ntele ported\nswad dling\nstal kr\nslow fashion\nseach ange\nsas usa\nrub bery\nremodel s\noy in\no zo\nne ee\nn ght\nlin dar\nle ath\nkal le\nhert ford\nhb m\ngtasnap matic\nfo shan\ne bird\nca ius\nca haba\nbuck ley\nbha vi\nbeef ing\nb cel\nascen e\narcan gel\nakade mie\nafar mer\nðŁ¥Ĥ ðŁį¾\nâĺĤ ï¸ı\nzi huat\nx online\ntor in\nti mus\nsynthe tics\nsplash down\nsensiti ve\nsd su\nsau ti\nsatur ate\nred die\nreall ys\nrail analysis\npyr mont\npor po\nplo o\npi ent\npersonal branding\nparksandrec nbc\nout lasted\nor inda\nmyo wn\nmi gori\nmac lean\nlun tz\nlu bitsch\nlon gest\nlife drawing\nkey shi\njax son\ninfuri ated\nimp son\niate fl\nhar oo\nfeed your\nev ades\nenor man\nef itness\nee z\ndele m\ncrypto zoology\nbru schi\nbew ley\nando ver\nabra sives\nðŁIJ Ľ\nzo wie\nyam mouni\nwant agh\ntrans itive\ntiam owry\nthsh birmingham\nthe os\nthe bigh\nt dor\nt cha\nswitch backs\nster lite\nstar land\nso bat\nsel i\nse ws\ns deli\nree kie\npre maturity\npre di\nphi phi\noak ton\nnit to\nmu das\nmiami hurricanes\nmani stee\nlud ington\nlethar gy\nki th\nk ariz\nja ani\ninthe mix\ninsu lators\nil ter\nher balism\nham bre\ngü n\ngot game\nge di\ngar rus\nff n\ned berg\ndu hawks\ndark star\ncollin sworth\ncoates ville\ncast iron\ncarcino gens\nboo tham\naugu s\nati zation\narson ists\namon tes\nì± Ħ\nx el\nv un\nv enga\nuk cyclechat\ntape worm\nsynap ses\nsul ky\nsho ku\nser ang\nsel ite\nscu ttle\nsaf die\nru sev\nqu anta\npan arin\nouta ou\nom anc\noce anc\nnigeri atoday\nnigeriatoday ng\nneutr alized\nmuscle fooduk\nmo halla\nming led\nmetallur gical\nlake ontario\nl jung\nkun sth\nkay lin\njo inte\ninsu bordin\ninsi gh\nhealth benefits\nhau pp\nh mf\nfox worthy\nfe ingold\nfar mm\nex elon\nenglish men\nel frid\nef sa\nde do\nd ke\nco sy\nboo boo\nbelleri ve\nbelk nap\nbe ton\nard beg\nair canad\n! âĢĶ\nâļ¡âļ¡ âļ¡\nz acu\nwomenin politics\nwi i\nvolo dy\nti rico\nteha chapi\ntatlitu g\nsuppo ses\nshar na\nrob ford\nps one\npass iton\nnatural sciences\nnaing golan\nnad al\nmont ford\nmichael s\nmer kin\nluci e\nliber allogic\nho ku\nhead banging\nfur tick\nfu h\nfrench men\nfam osos\nexpropri ation\ndont stop\ndevelop er\ncu illin\ncr ated\ncaval era\nc ne\nbuzz tv\nbul ld\nbul at\nbron cho\nbeelze bub\nassy nt\namerican ism\nak iz\nðŁĶ¥ðŁĶ¥ ðŁĶ¥#\nðŁİĪ @\nãĥī ãĥ©\nze bulon\nz quez\nwildcat pride\nwee py\nwaste d\nuniof leicester\ntric ities\nthu gger\nsy lt\nsto pe\nsp dx\nsnar ls\nsky la\nshan ds\nseab ourn\nschool mate\nrt gs\nri ans\nre invents\nrat z\npon tel\npho e\nout patients\nonit suka\nnew comicbookday\nnatur ale\nmuse odel\nmck ale\nmax ey\nmarmel yr\nld sb\nlal isa\nkodai kanal\njan an\nirwin dale\nili b\nianh watkins\nhar deep\ngon z\nfy re\nf mo\ndrach m\ndo com\nday yyy\ncul p\ncon o\nco founders\nbuffal onews\nbu bonic\nbot b\nbe co\nbaske tt\naz aria\nauthentic ate\naquat int\napost asy\naa ahhhh\nðŁĻı ðŁĴķ\nzihuat anejo\nyoun ge\ny ce\nun contested\nto pla\nti et\nteac ake\ntar ter\ntan ush\nswee ts\nsustain ability\nste y\nsense wrds\nsatyam ev\nroman tica\nri sso\nqu ip\npatux ent\npaolo zzi\npang olins\no ley\nnorth lands\nnew start\nnew sand\nmer ingues\nman gu\nliv ability\nlab view\nkrzysz tof\nkam ath\nic is\nhu izen\nhat shepsut\nharvardh bs\ngranul ated\ngoddam mit\nforzaf errari\nes guerra\ndun kley\ndre port\ndrag net\ndo xa\ndissec ts\nde activating\ndat es\ncurrumb in\ncel com\ncau sey\ncat l\nbuck skin\nbroad leaf\nbr aley\nbis mark\nbet tors\nbel ge\nass wednesday\nam bra\nakin wun\nzee shan\nyu uu\nwk ly\nwidesp read\nwether sfield\nwash caps\nw anga\ntable spoons\nsinab ung\nsi rt\nsi fter\nse tar\nse sc\nremedi ed\nrajinim urugan\npri ssy\npreakness stakes\nphu le\nper du\npavili on\norganic skincare\noccit anie\nnewsmel bourne\nnew bern\nnational icecreamday\nmor daunt\nmin ouette\nmar uk\nliber ation\nla wny\nkis co\nkassi dy\nintra ub\nhyder abadi\ngwr help\nfer land\ne dir\ndie gom\ncyto logy\ncru den\nchrisho y\ncheeri o\nchann on\ncarpe tb\ncal vi\nbrother ton\nbrooks beau\nbrahim çelikkol\nbour ton\nbo gies\nau fc\nareyou ready\nam bala\nal ker\nai ea\naa ha\nðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬ ðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬðŁĺĬ\nðŁĴŀ ðŁĴķ\nᶠ¦\nе в\nzam pa\nwal sham\ntransgre ssion\nsu unto\nstaphylo coccus\nsian network\nshowtim ena\nshil o\nsharec ro\nshad ab\nsekol ah\nru bes\nq fa\npyram idal\nprimiti vo\npe kanbaru\npar ok\nno gueira\nnh rc\nnbc ct\nme quon\nlac u\nla j\nk srtc\nin thenews\nin aug\nim potence\nhe us\ngrou ting\ngri ot\ngoto ireland\ngm police\nfish kill\ndoes it\ndi franco\ndate in\ncu arto\ncopp ice\nchen e\ncas si\ncaper naum\nbarric hello\nbally money\nassi an\nadam carolla\nabun da\nabe di\nï¸ı .\nzesti ria\nwe yer\nw sis\ntom cats\ntodayskid swillneverknow\ntex perience\nte ale\ntat aki\nsna han\nser on\nse ck\nscot trade\npor twood\npoe tical\npeck ish\nnikol aus\nmol la\nminnesotal ynx\nmad ding\nlon ge\nlale ttan\nki yo\nkh ich\nk nur\ni ker\nhun ni\nhither to\nhay ate\ngen san\nf co\nemploy able\ndump y\ndois neau\ndigit ising\ndi sko\ncu bo\ncrazy ex\ncnn politics\ncity am\ncato institute\nbell town\nbake shop\nbag dad\nagen esis\n?? !?\nâı ©\nzarathu stra\nwoo ley\nwit ched\nven ant\ntrack oftheday\nteam trump\nsu h\nsp aren\nshashtag party\nshang ela\nsha stra\nseoul day\nseac ole\nsas o\nretri ev\nreal taeyang\nre ya\nrace hub\nod st\nnew grange\nmisi ones\nmb ari\nliqui de\nlee ch\nl tt\nky l\nk rol\njourney tomars\nit raffic\ninver ts\nhe eee\nhar lan\ngrey lag\ngi ggle\ngan su\nfor g\nfinu cane\nep ath\nec ach\ncymra eg\ncrai gie\ncess ories\ncell cellpress\ncam shaft\nc wa\nbren twood\nbound by\nbosc astle\nboo tiful\narchive shashtagparty\nand ddd\nah man\nadmini sters\nac ero\nðŁijİ ðŁı»\nåį ĥ\ná¹ Ľ\nzhang ji\nz rh\nwoo seok\nwake field\nw gu\nvikramad itya\nv afa\nthereal mike\nthe mark\ntan guy\nsug anda\nsleep walker\nsleep inthe\nsi bu\nsh ool\nsepar ker\nsaf t\nrock ne\nrin aldo\npopein philly\nparaly ze\nor ms\noad by\nno ver\nnet as\nnan ami\nmi do\nmar as\nm trs\nlove box\nlight the\nli mav\njap e\njam arcus\nin fol\ni ad\nhot springs\nhoney crisp\nheroes ofthe\nfen o\ndian aross\nden zil\ndaysof horror\ncloison ne\nbul well\nbar bet\nat sc\namazing thailand\n? !!?\nðŁı´âĢį âĺłï¸ı\nzon der\nwe ren\nv ct\nturke stan\ntree oflife\ntr ate\nthe book\nter cer\nsuper con\nsho toftheday\nseung yeon\nsen nett\nsel ton\nronces valles\nrac kets\nra gusa\npun ia\nperpetu ated\norino co\nnor seman\nna jee\nmasa ka\nmarian keyes\nmar un\nlu ff\nlen ght\nla valle\nla hor\nl hhh\nkstate fb\nkid sc\nkhur rana\nkais ers\nk hus\njoseph ine\niam jamiefoxx\ngold awards\nfu miya\nflyn t\nfil mic\nface plate\nen ames\ndogsof twittter\ncre sted\ncoryn rdr\ncon well\ncar ros\ncapp ello\nc xc\nbuffalo ve\nbri ggan\nbow ditch\nbody kit\nbentley motors\nbee cham\nbarne ys\nbah ri\narch top\naami park\nภĵ\nw imp\nvo tos\nsven sson\nsub atomic\nstry dom\nstar lets\nsiyahbeyaza ÅŁk\nsimpson ville\nshra wal\nsab onis\nrobu sto\npoli zzi\nphantas mag\nperu zzi\nmat or\nmat as\nm out\nkempton parkrace\nkas ur\nimperson ators\nic em\ngreen stone\ngirl code\nfur ze\nf wp\nepiscop alian\nedge combe\ndi kanu\ndh f\ndalla ssmith\ncpt traffic\nci als\ncen dol\nbran ham\nbbc lookeast\nbalay ya\nar get\nam et\nag old\nðŁĴĽðŁĴĽ ðŁĴĽðŁĴĽ\níİ ľ\nyt creators\nyo gate\nwomen mw\nwhin ney\nvo los\nval buena\nup tight\ntwell man\ntom on\nt sky\nsurrey cricket\nsun ri\nstret chers\nstandupto cancer\nsopho cles\nsli mane\nsl unch\nsketch card\nshri ram\nsewick ley\nrail fan\npur u\npc masterrace\nou pacademic\nottum wa\nmississi ppi\nmeso zoic\nmar lo\nlee b\nkin vara\njay cees\nhy slop\nha sno\ngood friend\ngen omic\nfl ic\nexplor ing\nden k\ndashi ki\ncri a\ncine polis\nch anced\ncapit ul\ncand acec\nbre sci\nbor man\nben shephard\nbbcradi olin\natt ari\nate pec\nate les\nat alk\nanir ani\nal king\nal hum\nagon ising\nad amo\naberdeen uni\naband hu\nâĿ¤ï¸ıâĿ¤ï¸ı @\nyoutube india\nwir t\nw mv\nver nier\nv va\ntum water\ntn n\nth yl\ntex ast\nten ths\nst ami\nsecond hand\nsch atten\nsam sclub\nsal acious\ns bm\nred ken\nqu eville\npumpkin head\npsy duck\nox ox\nor nette\nor ke\nmash al\nlu tein\nlo za\nlaure land\nkat zen\nison fire\ninfra structure\niber ville\ngu mmer\ngreater anglia\ngraf fix\ngilbert son\nghid orah\neuro league\ner cy\nenviron nement\nedin ner\ndi jk\ndesmo s\ndesig nated\ndan ila\ncounter balance\ncol yer\nby usn\nambigu ously\nag baje\nacre ative\n\' \'\'\nðŁĴĸ ðŁĺĺ\nðŁĩ¸ðŁĩ °\nðŁĩ³ ðŁĩ¬\nðĿIJ ŀ\nyo thi\nwalkr stalkr\nwalk s\nspringer spaniel\nsilver bird\nser pico\nscott caan\nro bre\nre xton\nre appeared\npre vi\npc world\npash teen\npad hao\nox ton\nocta vian\nnico lee\nnas c\nnaomi aklein\nmon tel\nmom in\nmetr ically\nlu neta\nkj ell\nj sy\nj app\nham mel\nha sna\nghat kopar\nge sun\nfree keh\nfan fics\nendo genous\neco system\ndrive in\ndementiafri ends\nde as\ncoo gler\nchou inard\nchar din\nbruce springsteen\nbre ese\nbetter pakistan\nbeatle mania\nbangor uni\nbaahubali movie\nb ily\naz ade\nav ira\nat tires\nas sata\nar ison\nab roads\nab road\nðŁİĦ ⾨\nyi shun\nyann ick\nwent zville\nvalentini frank\nuk coach\ntu cum\ntp ms\ntap scott\nso dden\nsni de\nsk og\nsame era\nrestor ation\nre imagine\nra wl\nra iled\nquir ino\npf tompkins\nperse ids\np anne\nover hauls\nor age\nnev ents\nnaz a\nnavar atri\nnajwak aram\nmusli ms\nlo sing\nletsgo places\nlenny kravitz\njo ver\njo cko\njeremy kyle\ni yl\nhol anda\ngiu sto\nfc st\nfal set\nentr ancing\nekad ashi\nead pool\ne spiritu\ndol an\ndefrau ded\ncompad re\nci pta\nche teshwar\nch ra\nboo ga\nbbcradiolin cs\nb sa\nam bang\nam ane\nal loy\nal al\nacknowledge ments\nab crural\na abe\nðŁļ ĩ\nâĺĢï¸ı ðŁĮ´\nyed wards\nyar nell\nwhat sapp\nwall enberg\nverde jo\nv ka\nroy e\nrela pse\nrajak amaraj\nracing team\nra reltd\npopo vic\npett us\npalad ino\noy le\nno we\nnarcissi sts\nmrsilver scott\nmor sel\nmon tele\nmis son\nmalag asy\nlu bbers\nloc alize\nlive son\nlimav ady\nl pg\nkell an\njordan abrewster\njoni ernst\nj dl\nio res\nilove this\ni ding\nhilli ps\ngu ld\ngo digital\nform ities\nfd bloggers\nevapor ating\nep b\nemo ore\neman ates\ndro ll\ndi ep\ncen zo\ncas sart\ncam h\nbrit e\nblood donor\nberg strom\nba hi\nb si\nan kush\nan ahan\namend es\nam pi\na eds\nðŁĶ« ðŁĶ«\nðŁij»ðŁij» ðŁij»\nðŁ¥ ķ\nç aÄŁ\nweird world\nwalkrstalkr con\nti war\nthere sam\ntheater ny\nspir t\nsmo st\nschwar zer\nprospec tors\npor v\npeli kan\npak veng\nnis i\nmacale ster\nma sham\nkler k\nkat at\njak in\nitt f\nhu el\nhoo ke\nhigh chair\ngro ver\nfor children\neraser head\nequ itation\ndeep ened\nchâ te\nchef symon\ncar sten\ncar max\nca ppa\nbro gdon\nbook sale\nalex hirsch\nak ang\n($ ):\nà´ ¯\nyu go\ny music\nwhit gift\nvi dhya\nuki yo\ntri fles\nthug sof\nther ail\nthem home\nstall worth\nspe zza\nsor ies\nschie ffer\nsain tly\nry pien\nray leigh\nran ul\npock lington\nplace mats\nper ine\nparas ols\nnoo dling\nmy sa\nmonaster io\nmin san\nmill burn\nmene zes\nmay hem\nleup old\nla sky\nkirk sville\nhopat cong\ngu tman\ngr á\ng alia\nfun kin\nf ür\neu co\nen um\nem itter\near wood\ndogsare love\ndean cain\ncyg nets\nbu kid\nbrock en\nbeir ut\nbe hn\natte station\namni otic\nðŁĴĻðŁĴĻ ðŁĴĻðŁĴĻðŁĴĻ\nza beel\nx ess\nwhy im\nwhere sw\nwere wolf\nvin nik\nuigh ur\ntur cotte\ntrust worthiness\nto di\nte ff\nstein hardt\nsor n\nson de\nsne er\nsk on\nshe in\nsar aali\nred headed\npri on\npiotro wski\nnjo ku\nkhun nie\nhae mat\ngrass market\ngrand ville\ngradu ation\ngo ten\nglobal halifax\ngal ax\nfore ducation\nf du\ndoppleg anger\nco gent\nchampion stour\nbrun y\nbray ton\nbhan u\nbe delia\nat sume\nas ani\nary news\nalsati an\nab du\naac sb\nâĿĩ ï¸ı\nà¸Ĭ à¸Ħ\nwhar fe\nweather vane\nul ani\ntomo ya\ntiem pos\nszy man\nsty lee\nstafford shire\nsong sof\nsom me\nsnow storms\nsjc drums\nset anta\nser j\nrober tv\npop caan\nplaud its\npenicu ik\npam uk\nover zealous\none more\nn pt\nlittle woods\niu pu\nhyo go\nhumay un\nha enow\ngraf itti\nencan ews\ndu v\ndra goons\ndo cometrue\ndill ane\ncupp layoffs\ncon ra\natour nament\nas vegas\nari ella\narche ologist\napo yo\nali es\nêµ Ń\nà¤ķ र\nмак ÑĢо\nval c\nusa g\nup north\num bia\nucla football\ntor rents\nsur at\nsto rer\nstig mata\nsketch pad\nsik ala\nro tti\nr vad\npost rock\nphoenix mercury\npatriot sunited\nordin al\non amission\noak leaf\nnu sh\nnic i\nne ater\nnatus vincere\nnancy lee\nmeg afauna\nmav ado\nmar cal\nma wes\nlo belia\nleah remini\nlaven der\nkab outit\nim prints\nibm z\nhee renveen\nhappy happy\nesk dale\ner w\nen berger\necor p\ndun dur\ndig m\nci mino\ncal vino\nc tt\nbroo kie\nbo ola\nblack smithing\nbest actor\nbac ke\nargument ative\nalexander rossi\nahu a\nðŁĴĥðŁĴĥ ðŁĴĥðŁĴĥ\nê· ľ\nye va\nwdr bnews\nw se\nvil ly\nvic tu\nun interesting\ntoll booth\ntenn ent\ntab de\nsussex uni\nste pla\nsn l\nsleep day\nrevital ising\nre aux\nravish ndtv\nq ar\nplay tex\npi ko\npare il\nnb f\nmo as\nmid wood\nmicro environment\nmetro west\nmc dou\nmar ita\nkimmy schmidt\nkan gra\nk ile\nk arti\njim beam\nish o\nhu sey\nheavy metal\nhaw kin\ngreen ford\ngra vis\nfoot golf\nffe stiniog\nenjoy in\nembroider ies\ndr ys\ndip tera\ndio sa\nd dot\nco hasset\nclub hectare\nclay don\nblack history\nbhand arkar\nbelle zza\naston villa\nallrise silver\nac z\n> ,<\nðŁĺģðŁĺģ ðŁĺģðŁĺģ\nðŁĩ§ðŁĩ ©\nâĸº âĸºâĸº\nzodi ac\nwil ting\nw tov\nw ics\nv xx\nv loggers\nur bino\ntune stweet\ntu mmy\nthe giant\nthe chris\ntap is\nt br\nsupple menting\nsum ma\nseize the\nsat suki\nsa wi\nreyno so\nran go\npoor nima\npi gand\npfi ster\npanip at\npa ani\north coast\nneuro fibro\nmorgan e\nmcre ynolds\nmari ella\nllor ar\nkk ah\ninstant aneously\ni pic\nhand o\ngoal tenders\nge don\nfried chicken\nfresh produce\nfly tipping\ness ences\nemergency medicine\ne katerinburg\ndwar fare\ndo bbin\ndisintegr ating\ndep th\ndenuclear ization\nde cc\ncra pp\ncr ame\nci ff\ncheek tow\ncaptivity kills\nc ville\nbrawl halla\nboston schools\nbeh ren\nakrapo vic\nðŁĺ¥ ðŁĺ¥ðŁĺ¥\nðŁij¼ ðŁı¾\nðŁıģðŁıģ ðŁıģðŁıģ\nठģ\ny vra\ny ury\nven dee\nvanderbil tu\ntxh shoops\nsummer time\nss aa\nspre aker\nri di\nrenault sportf\nre charges\nraw linson\nranc or\nrad ja\nquiz nos\npv v\npokemon letsgo\nnim by\nnews boy\nnav deep\nmu v\nmaj ed\nma khan\nla q\nla aa\nkri stopher\nj mt\ninqu iry\ninfant ile\nhor mel\nhed land\nheart sof\nhearing dogs\nhead mistress\ngo shen\nfrank s\neuro p\ners ley\neri ver\neconom y\ne waste\ndi ja\ncu toffs\ncine mac\ncheap skate\nchad ne\nbrill ante\nbr ana\nawesomenes stv\naval anna\nvote arianagrande\ntri mmers\ntic oke\nthorn ley\nteam stallion\nt cn\nswil son\nsou les\nsketch january\nran son\nr ge\npl v\npeople are\np bk\nnr cc\nn annie\nmr nradio\nmead ville\nmcel hin\nmar q\nmal at\nma pit\nlondonis open\nlindsay lohan\nk tc\njim rome\njenny lyn\nian m\ngo gogo\nger lach\nfre do\nfra hm\nform less\ndeschutes beer\nd chs\ncross ville\nclemson family\nchincote ague\ncharity day\ncalver ley\nbombar ding\nbig blue\nbedri dden\nback water\narrested development\narq ana\nang am\naivaz ovsky\nwhitec ross\nwe tump\ntu d\ntribe smen\nto jo\ntele vangeli\nte heran\ntal ke\nt seng\nsu bir\nspit fire\nsm hs\nri ggers\nre planting\nr sh\npic ke\npar malee\npage views\nostr ander\no ds\nnorthe aster\nnancylee grahn\nmu ke\nmonster a\nmc phail\nmachin ations\nmac ademy\nla gonda\nkris meeke\nka wor\nji e\nim ers\ngro lsch\ngaku en\nfur th\nfruit fulness\nfe tt\nfa del\nduc es\ncon trail\nbrock en\nbret baier\nbilling sgate\nbha gat\nau demar\n> ////\nðŁį ¥\nvar u\nthebigbang theory\nthe gifted\nspoo fs\nslip way\nschri ft\nroc team\nrefugees gr\nq aa\nprest bury\nop to\nnerd life\nnaturo path\nmon ac\nmini stered\nmercedesbenz ind\nmary lou\nmari st\nlo hr\nkol ler\nka hala\njor dison\nji hyun\niz aak\ninten sively\nint age\nhigh court\nh wl\nglaswe gian\ngil lo\ngavin rossdale\nedge field\ncow bells\ncanvas sed\ncanadi en\nbones onfox\nbha bha\nbell end\nbattleof britain\nast an\narteper larte\nahim sa\nabdic ation\n+ (\nðŁİīðŁİĪ ðŁİģ\nâĺºï¸ı #\nwi js\nu pup\ntwitchtv online\ntree frog\ntl k\ntie break\nthink musicindia\ntemperam ental\nsun woo\nstock piles\nsp atu\nsco ach\nsar nie\nrichie hawtin\nreed ley\nra bu\nphy ll\nom ot\nmetal gear\nmetaco gnition\nman ok\nkun ar\nklassi k\njal op\nholocaust museum\nhau ghey\nhan nie\ngre sley\nflag stone\nexplore edmonton\ner at\ncrun cher\ncrimin alizing\ncove do\nchandra se\ncas son\ncari bou\ncam argue\ncal zona\nbu daya\nband uk\nanton is\nami han\nðŁĻĮðŁı½ ðŁĻĮðŁı½ðŁĻĮðŁı½\nðŁĺ¬ ðŁĺ¬\nðŁ¤Ķ ðŁ¤ĶðŁ¤ĶðŁ¤Ķ\nðŁ¤ ¦\nÙģ ÙĬ\nyas i\nwelove it\nvisit ing\nviol as\nu ted\ntre vel\nsympho gear\nstour head\nse it\nse ac\nscrob ble\nsath letic\nri q\nresc a\nreplic ates\nraz an\npat wari\nour less\nn tuc\nmuk ha\nmoom ba\nmid hurst\nmedi acorp\nmc kim\nmatu idi\nmassey uni\nmar cou\nmal ir\nma official\nm ny\nle disi\nl ated\nkri ssy\nkr illin\nkid zania\nkell ym\njo ga\niam vikramprabhu\nhi bbing\nhe les\nhar lesden\ngly nis\nglobal news\nfly swiss\nex pom\nergon om\ne bisu\ndon ell\nci j\nchel sey\ncha c\nbest day\nbe van\nban anagrams\nare sh\nam orous\nade cco\nadam as\nðŁijįðŁı» ðŁijįðŁı»ðŁijįðŁı»\nðŁĮ Ħ\nà¹Ħà¸Ĺ ย\nx her\nwild and\nu zz\ntom ando\ntodd y\ntobi ko\nthebody coach\nswan ton\nsom y\nsleepinthe gardn\nsj k\nsho esday\nshat abdi\nsave sharks\nsa sikala\nroque fort\nrad lett\npink ston\npe mex\nos ac\non rails\nom munity\nnas agoddard\nmurdoch mysteries\nmu dge\nman andthe\nlu ts\nlook down\nlett ing\nlet z\nlaw ry\nkevin love\nk assim\njagiel ka\niucn redlist\niru mugan\nif n\nholl man\ngo pleader\ngear head\nfor hope\nfmc sa\nfit o\net winning\nen vivo\nebay rocteam\nchlo é\nchic an\ncarryo ver\ncal era\nc js\nbreath in\nbio control\nbe fu\nap itals\nage o\naction figure\n. ðŁİ¶\nâĻ ¨\nاÙĦ د\nye si\nwomens open\nwillam ette\nver ns\nta ille\nstein hoff\nsp x\nsly ly\nse abor\nroom ful\nr blx\npiran has\nnewsp oll\nnews from\nne aux\nna if\nmother boards\nmor row\nmarin ades\nma fal\nm scott\nlud low\nli ii\nleon el\nlam ented\nky am\nkube con\nkov skiy\nkam au\njab hat\nhermi ston\ngr ata\nglen don\nglam or\nger n\nforex signals\nfabi enne\nevo ked\nen otes\neg or\ndu jun\ndrop head\nclap trap\nbani shing\nbak ke\nbag got\nb dk\nap ar\nair lock\nace e\nðŁĺįðŁĺį âĿ¤ï¸ı\nðŁĮ ĭ\nworld championship\nvote blue\nvirgin america\nv mug\ntrain ier\ntor ture\ntheroyal ballet\ntele fe\ntasteof london\nt lu\nsim bel\nsho tting\nro j\nrain ie\npro bando\npercu ssionists\nnat tie\nmush u\nmu iden\nmel tham\nmat ra\nliber alization\nlepre chauns\nla sgo\nken jeong\nhiphop gods\nhigh water\nhi e\nhell blazer\nhei sen\nham mill\nhack enberg\ngreen vill\nfurlough ed\nfie star\ndisemb ark\nde cal\ndap o\ndag ger\ncomm munity\nce iba\ncare t\nbollywood actress\nblac kett\nbian chi\nbe set\nbal briggan\nar ken\nan ze\na ecc\n] ]\nÚ ¯\nyuca ipa\nyel tsin\nwit bank\nva sion\ntothe moon\nsolilo quy\nsetti mana\nseaf aring\npar rett\no q\nnedbank cup\nnand u\nmergan ser\nmel as\nkissing day\nkin er\nha dd\ngodis great\ndisintegr ate\nder rickson\ncyano gen\nchloe bennet\ncau e\ncand al\nbla ded\nastr on\nap ati\nak ashi\naha doop\nad jei\nâ İ\nwhen ua\nvo ci\ntravel to\nt girl\nsuper hot\nsquab ble\nsouth central\nso es\nsaunder s\nren teria\nreic hs\nq tum\nnh lawards\nn pi\nmy dog\nmun sch\nmon ki\nmc morrow\nmat ka\nlex masters\nles fic\nkash miri\njim s\nintegr al\nic ra\nholla back\nho kie\ngreek town\ngeomor phology\nge le\ngallow ay\nfo al\nfinalfantasy xiv\neri um\nen coders\ndevo xx\ndepend ability\ncovers ong\ncoke studio\ncar ignan\nbrickby brick\nblo b\nbird watchers\nbi ocon\nbar low\nbally hoo\nbal ai\nash brook\narl ene\nand back\nðŁĻĮ ðŁı¿\nðŁĻĨ ðŁĻĨ\nðŁijĩðŁı»ðŁijĩðŁı» ðŁijĩðŁı»\në ¡\næ º\nyan ov\nx ic\nwolf blitzer\nwiener mobile\nweare lakota\nun forgotten\nun aired\ntt k\nsyri a\nsunidhic hauhan\nsukho thai\nstyle uk\nst fx\nspi x\nsi op\nsau ve\nsam t\nsaddle bred\nru ga\nrtop nb\nri bes\nreyn old\npr ams\npo kh\nphar cyde\npe v\nobstruc tions\no gall\nmon in\nmilitary hist\nmedic inal\nmc bain\nmax ell\nmag ed\nly ttle\nlc cs\nkokan ee\nkam il\njosh mcdermitt\nintru ding\nigi ppygrewal\nhar twick\nhand spring\nha gu\nglori fication\ngiang inoble\ngian tess\nferr ying\neric i\nec tor\near thing\ndo thraki\ndis liking\ndi eters\nde sor\ncu ento\ncolumbus day\ncode org\nchu mb\ncbee bieshq\nbristle cone\nbrazz aville\nbarber ton\nbaha dur\nauto play\narun rajakamaraj\nðŁijį ðŁĺį\nìľ Ħ\nãĥ Ľ\nâĹ Ģï¸ı\nÊ ¸\nyo ong\nvaugh n\nupstat eny\nugh hhh\ntwitter les\ntri ver\ntre eline\nthre dbo\nthe co\nthan die\ntel i\ntaxi way\nstir rer\nst paddysday\nsor cha\nshorty awards\nse tu\nrock ing\nren ai\nrejo iced\nre stre\nponti fic\npitch fork\nover shoot\nokin awan\nnam cinema\nmegat rends\nma hut\nlong legs\nland rum\nky aa\nking stone\nkay seri\nhigh five\ngol fcart\ngo key\nglen bow\nget together\nfly in\nendor ff\nem mett\ne azi\ndefaul ters\ndeci phered\ncl ymer\nce fal\ncat fish\ncar rol\nc ici\nbo len\nbirdo bs\nbig city\nati sta\nar oun\nambi ka\namalgam ated\nair side\nadi ga\nade boye\nad ma\nabram jee\nab aliga\nðŁijı ðŁĺĤ\nðŁijį ðŁı¾\nâĺ ¾\nyess sssss\nwo k\nwa state\nvand amme\nv aa\ntree hugger\nthr acing\nthin line\nthe sky\nsynchron y\nstill organ\nslum dog\nside show\nsau con\nroar ing\nravi shankar\nq assim\npower rangers\nnor din\nmustar d\nmuscle pharm\nmun dial\nmo es\nmc cri\nmayor soffice\nmasse use\nmanal apan\nlan z\nkr gv\nkemp tville\ni aps\nh co\ngu inn\ngol ders\nfle isch\nfirstaler twx\nfin ke\ndebu gger\ncam i\nbeer and\nbe moans\nappliqu é\nalo ren\nalan shearer\nabr sm\nðŁį Ľ\nëŁ ¬ë¸\nà¹ĢภŃ\nyouha donejob\nyak ub\nv ff\nuvam en\ntrespass ers\ntheli gh\nthe pleasance\nsyco phants\nsump tu\nsu ae\nstore wide\nstal ent\nse ago\nreflexi ones\nr ts\npizz i\npat in\noctober yet\nlow den\nlex ico\nkhil af\njy he\njust go\nj izz\nholist ically\nhobby lobby\nhe adey\nhaz arika\nhay at\nhak yeon\nfl m\nfa onews\nf loc\ndu fc\ndow sing\ndel as\ndefra ud\ncrystalli sed\ncr annies\nclo tting\ncl angers\nchen ango\nbu ku\nbron tosaurus\nbo sky\nblack head\nbir cher\nbelo a\nbalde agle\nbaku gan\nbaili ffs\nac sm\nðŁĵ· |\nе к\nul ang\ntom omi\nta patio\nsympath ise\nsw azi\nsurve kshan\nsi don\nsh oney\nrecon cili\npublic works\npo ck\nman el\nlou ren\nlo hud\nli les\nlen nan\nl sarsour\nka ew\njor nal\nje wson\nits showtimena\ninde cent\ngu age\nfi or\nenvo ys\nendangered speciesday\ndur sley\ndor chester\ndon nyo\nde ct\nco yd\ncityo fedmonton\nci ao\nche atin\nch ines\ncavali er\ncareless ness\nban at\nbal bo\nannu ities\nad ac\nyun jae\nwa hh\nusc annenberg\ntriple threat\nten ens\nte go\nszczec in\nstock ade\nsi gu\nsanat orium\ns lon\nrun ic\nrhy no\nre directs\nprincipal ity\npetere gan\nparag ould\nout doo\nolm stead\no yelowo\no stro\nnational anthem\nmer lyn\nman movie\nmal ate\nlin dros\nlike minded\nlid luk\nkent aro\nit ni\ngi bi\ngen om\nfirstdayof summer\nfireemblem heroes\nent iced\ne hem\ndo lo\ndesign by\nda ine\ncruci ferous\ncom frey\nchennai floods\ncarami asg\ncad w\nblue grass\nbio active\nbaz e\nanth ill\nalam at\nak ih\nab ron\n, !\nðŁijħ ðŁijħ\nðŁ¤Ļ ðŁı¼\nåĪ Ŀ\nÑĢ оÐ\nza inal\nwh ines\nweare latech\nwa shu\nvote james\nun guarded\ntho s\nsu panova\nster i\nso close\nre position\nrail car\nparidhi sharma\non alaska\nmiddle east\nmelt down\nme sse\nmaterial handling\nmaj nu\nlen ka\nlau dio\nlamp light\nlac on\nkauff man\njets am\nj ru\nisit octoberyet\nif ers\niche tti\nhou le\ngender queer\ngad da\nform ation\nflick ers\nfirsta id\nfil oni\nexcav ate\nenvel oping\neno va\necol ab\ndo yen\ndema io\nde winter\nd hp\nchickend inner\ncanadas militaryhist\nbo wi\nben dix\nbe ir\nbat ak\nbar ged\naz eez\naster oid\nami el\nalien ate\nakhen aten\nafford ably\nae jmc\n.... ...\n.. <\nðŁĺ¢ðŁĺ¢ ðŁĺ¢ðŁĺ¢\nðŁĩ³ðŁĩ ´\nwar saw\nvictim hood\nunder garments\nteen wolf\nst ook\nsoldi ering\nsm tp\nsleu thing\nsebasti ano\nsar tori\nrock hill\nrit son\nport man\npipe work\npi ala\noregon state\no dai\nna hm\nmemori alized\nmc garrett\nmarchi onne\nmalin owski\nlit vin\nlan ter\nla brie\nko do\njad en\nindustri alists\nhobb iton\nhi jos\nhawaii ans\nglen side\ngan grape\nfur lough\nfre ind\nflu me\nfake cases\nef t\neden vale\ndev itto\ndetroit basketball\ncpim speak\nch ho\nca er\nbuffo on\nbaj rang\nayr ton\naval os\nas pin\nalbert ville\n( )!\nw pp\nvern azza\nvene zol\numm c\nsuper bug\nspi ff\nspeed week\nsmall businesses\nsign syou\nscience irel\nridge well\nretin as\nrealron howard\nra ka\npeshawar zalmi\npag os\nour pride\nou ric\norn ery\noke ke\nnsw police\nnor quist\nne gus\nmichel son\nmemb ers\nli wa\nleather necks\nla vaca\nhor s\nhar tsville\nhaban os\ngrowth hack\ngr andy\nghostface killah\nfiddle head\nf df\never hart\ndre idel\ncasting call\nbelgi um\n= ))))\nãĤ Ħ\nzam os\nwetump ka\ntre lawny\nto dy\nt cho\nsym fony\nstudent ship\nscott sdale\nsar g\nrobertir vine\nqade er\npu ked\norg one\nmom i\nmill bank\nmeat six\nma ila\nlucky me\nliv res\nline ar\nli zed\nle ko\nkor aku\nkari ya\nintimi dators\nhypo glycemia\nhjel m\nhec paris\nhaver i\nham monton\nge el\nfin ale\nfi za\nexhau sts\nexcre ment\netu c\ndiaph rag\nde gen\ndaniel radcliffe\ndak is\ncri mel\ncolo bus\ncloud waterbrew\nchas er\ncanadianti re\nber le\nbanan arepublic\naudemar spi\nane en\nalessandro michele\nak at\naf ric\nðŁı ¨\nðŁ¤¤ ðŁ¤¤\nØ Ń\nye syes\nwait t\nve greville\nuk c\ntravel tribe\ntrans sexual\ntouch points\ntam es\nswee pers\nstandrew sday\nsqua shing\nsqu ander\nsam champion\nsag res\nradiof requ\npri mi\npn as\npearl thusi\npatron izing\npakistan army\nokoro cha\nner sville\nnatgeo channel\nmay umi\nmah le\nlu eders\nlindi we\nkri zz\nking smill\nju lz\njan gh\nhobby ist\nheidik lum\nh ti\ngu edes\ngrac enote\ngel atin\nf ga\nenic hols\ndur on\ndu shanbe\ndrawl loween\ndon diablo\ndon ar\nder win\ncounter intuitive\nchi venation\nchi da\nchapters indigo\ncat sprotection\nca hir\nbun ks\nbrock u\nbran cusi\nber rie\nbel as\nalun ageorge\n# !\nðŁĮ¸ ⾨\nç ¿\nwest world\nve ach\nti ree\ntesco s\ntar c\nsmoo ths\nsix fields\nscam ander\nsan n\nrad ice\nqueen latifah\npli able\npleasant ness\npetr ino\npebble beach\notw ol\nnano ha\nmy mind\nmbo ya\nman katha\nma ag\nm paa\njonny bones\njn dsd\njeff hardybrand\njac arand\nitsa adee\nimpul sively\nimmo kalee\nif d\nhelple ssly\ngi ppy\nfair born\nesthe sia\neric hie\ndron field\ndeb tor\ncoiff ure\nchow ki\ncalci omer\nca ec\nbom anirani\nbewil dering\nbeer me\nbbc spotlight\nbally doyle\naz eri\naj inky\nach im\nîIJ Ħ\nÎ ³\ny ri\nwa ils\nv de\nun countable\nud g\nthisis whywe\nthe story\nspl x\nsi dh\nqu iry\npit aya\npen alised\npag al\nober wiesenthal\no ef\nny ct\nn ilo\nmundele in\nlocal produce\nlign ite\nlad ki\nkill me\nht con\nhill fort\nhadi se\nfurio sa\nfr r\nenh art\nemul sive\ndi yas\ndepress ingly\ndee b\ncome dian\nchi f\nbc place\nbarak ah\navell ino\nanti retroviral\nade ola\nðŁ¤ĵ ðŁ¤ĵ\nzy na\nzeej lf\nyvra irport\nx tv\nvis itch\nvari um\ntol led\ntin ia\nti dd\nthe weekly\nthe forum\ntex ase\nshed den\nrun jewels\nrock pool\nre doute\npyg malion\nproduct pick\npol ity\nnorth bay\nneuro sis\nneuro plasticity\nlohan thony\nkon ec\nin af\ngrigor dimitrov\nglori ana\ngirl scan\nfre inds\nfl w\nespar garo\ndur ack\ndun ker\ndor mand\ndig vijay\ndici embre\nde sta\nde ila\ndaven avarro\ncor se\ncor da\ncohe sion\nchin x\nbra k\nbote tour\nbg v\nbar now\nather stone\nari as\nare ports\nar mond\nang elia\nand ball\namand ine\nakh shan\nair heads\na discoveryof\nðŁĺĥ .\nðŁijį ðŁĴª\nðŁIJ¾ ðŁIJ¾ðŁIJ¾\nzeni th\nze be\nz org\nyetic oolers\nwy d\nwas illa\nwa iler\nton school\ntier ra\nthi stor\nthe challenge\nte si\nstudio teabreak\nstu ffed\nstay fit\nsouth coast\nsomuch fun\nselen ite\nsac ral\nrgv zoomin\nrad nor\nquake con\nprivati zed\npat z\npar ul\np wo\nol lection\nol ita\nnu j\nnhl network\nnavarre te\nmsu bears\nmr drewscott\nmand ya\nmal tin\nma en\nlil ac\nkit ano\nkar awang\nk po\njo whiley\nin b\nholling worth\nhefe weizen\ngor leston\ngeo int\nfor ger\nfelicit aciones\nfe ttes\nes me\ndi mi\nd ma\ncross land\nchoosel ove\nbet tered\nbet ances\nbe tti\naz or\naq ap\nanti inflammatory\nannab is\namp thill\nal mon\nab riel\n-------------------------------- --------\nðŁĺŃ ðŁĺĤðŁĺĤ\nà ¾\nw ttw\nver ger\nvenkat prabhu\nthi js\ntar th\nsym bo\nsun ray\nsto les\nspokesperson mod\nsn n\nsel cas\nsee f\nsar na\nrock hurst\nquavo stuntin\noc us\nnaom is\nmo ston\nmin ne\nmedic ate\nma do\nletour neau\nlemon heads\nlego dimensions\nkwe si\nkis sable\njustin mcelroy\nj de\ninthe know\ninter loper\nher bes\nhen o\ngisele official\nfor glory\nfel in\nesp acio\nelo ves\ndi aw\ndel ved\ndel tas\ncour ts\ncha w\nbrush fire\nbrook sville\nbren neman\nbeu ys\nad dam\nðŁijij âĿ¤ï¸ı\nðŁĩ¨ðŁĩ ¾\n® :\nyou rad\nval ois\nthe con\nte ck\nst ny\nst ille\nsoni agandhi\nro hat\nrey mysterio\nreal tim\nre structured\nraj yam\nra thod\nplay mates\npic tionary\nnu is\nnon thaburi\nnew tech\nnca alax\nnational dayof\nmoo ji\nlo wn\nknigh tri\nkish werm\nkhai dino\nkal er\nk sb\njoin ville\njodie marsh\njapan e\nham di\nha upt\ngro es\ngla iza\nge aviation\ngaw ler\nfir s\neuri pides\ne usa\ndon gen\ncun dy\ncourty ard\ncom ent\nco ad\nch bull\ncast ille\ncan apes\nbron cos\nbo tch\nbo stock\nbas ford\nbal tazar\nas n\nark wright\nap hy\nadju tant\nactiv ate\nacou stical\nðŁĺģ ðŁİī\nëĵľ ë¦\nw ld\nusa p\nuniof newcastle\nthe park\nte gra\nstill birth\nsouth downs\nsol fe\nsm illie\nsle vin\nsink holes\nsig lo\nsan ha\nsam pha\npet z\npac ts\noto ole\nofer tas\no sco\nnr j\nnoi sia\nnc s\nnar do\nmore than\nmont ju\nmohic an\nmis judged\nmarou bra\nmaj olica\nliber alarts\nlast pass\nlali gas\nkla van\nkir u\nkin ski\nka ho\nk hera\nji bril\njack hammer\nis ere\nimpro ving\nhell on\nh ary\ng de\nfan tom\nerike strada\ner an\nduches se\ndol lie\nden one\ndelray beach\ndeath trap\ndean wye\ndaily kos\nco ffers\ncheektow aga\ncancel ation\ncab bages\natp challenger\nar ouse\nar ona\nandre ws\nal cester\nadv ancing\nðŁĺĩ ðŁĺĩ\nðŁĩª ðŁĩºðŁĩ\nâĢ¦ âĺº~\nvish wa\nuv f\ntrinida dian\ntravelo city\nthom p\nthank less\nte ala\nt bur\nswag ger\nstar tle\nspoiler alert\nshivak umar\nsc oured\nrosari odawson\nren tino\npun ahou\nprac ing\npoo ka\npi pm\npeg board\nnor sk\nnews beeps\nndtv newsbeeps\nmit os\nme owing\nmajo rette\nli der\nlauren tiis\nlady well\nko eln\nkaz a\nka ap\ningthe future\nimper ious\nher mans\nguar di\nginger snap\nfrit illaria\nfran cie\nextin ctions\neu budget\nechop lex\ndru mm\ndrake university\nd fx\ncro thers\ncra s\ncam cor\nav net\nator ia\narama ic\nalyss ahar\nalber te\n.. âĿ¤\nðŁĶ Ļ\nðŁijĭ ðŁijĭðŁijĭ\nÄ ħ\ny ll\nweb app\ntreze guet\ntothe world\nther ow\nsy ke\nsuz anna\nsultan as\nsuff ern\nstagger ingly\nson ia\nsh anda\nradi oc\npic sher\nperit oneal\nnar ain\nmouse sports\nmole sters\nmobil ising\nmish mash\nmidri ff\nmanhatt ans\nmaggie q\nmac onie\nlook back\nlegend s\nkaryak artas\njor an\nib on\nheis man\ngru e\nge tti\nfex cellence\net m\nequ i\nen lace\ne bl\ndill ards\ncri se\ncorps man\ncenten arian\nceloteh promo\ncastr ated\nbraw ling\nbobcat nation\nal brighton\nac bo\nunite ch\nty y\nsv t\nstrat ahadoop\nsketch fab\nshik sha\nsant amar\nsaf flower\nros ling\npar ta\non gh\nnett leton\nneck ar\nn chc\nmultip liers\nmu ammar\nmor n\nmor andi\nmar ma\nlan igan\nkook min\nkin loch\njay thewanted\nip x\nim jadeja\ni mee\ni bec\nhul se\nhijack er\ngood charlotte\ng elife\nfrozen four\nen ine\ndroo d\ndigitale conomy\ndep or\nday ana\nconver sion\ncom me\ncoloring book\ncoke zero\ncoffee shops\nchat to\ncat ena\nc ally\nbli shing\nbeing maryjane\nbat alla\nbar win\nargin ine\nanim alia\naf gv\nâļ½ï¸ı #\nâļ«ï¸ı âļªï¸ı\ny strad\nvand am\nuniform ly\nun convinced\nug r\nsi kandar\nshan u\nse poy\nse mir\nsb nation\npp ic\nphra ya\nnne di\nmise ducation\nlune ttes\nlist an\nla ps\nkyne ton\nk nightmare\niver sen\ninter min\nich ner\nhod desdon\nha che\nh mmmmmm\ngrijal va\ngh illi\nfaryal tal\nfairy tale\nequi pos\nenerg ising\ndragme down\ndo whatyoulove\ndo vers\ndegre e\ndeep ing\ndam med\ncs j\nco chin\nci fss\nchem trail\nchar tered\nbray wyatt\nbo hannon\nbmovie maniacs\nbi et\naff suzukicup\n. ^\nðŁĩ±ðŁĩ ¹\nëĤ¨ ì¤Ģ\nâľĮ ðŁı¾\nwoo kiee\nwc sh\nwas cana\nty lor\nstrangle hold\nsl icked\nshir l\nshiel ds\nsexu alas\nscienti a\nrazz aq\nran il\npra bal\npenrith panthers\npedo gate\np schools\nosc ia\nnovonor disk\nnether ton\nmon archi\nmajum dar\nlan come\nkkkk kkk\nkell inquinn\nk offee\ninvier no\nhunke moller\ngu anci\ngo bulldogs\nfor ton\nfashi oning\ner za\nep ine\ndro se\ncul ligan\ncanvas ses\nbun gay\nbre mmer\nai ge\nðŁĶ¥ ðŁĺİ\nðŁ¥ģ ðŁ¥ģ\nìłľìĿ´íĻ ī\nåħ ¬\n£ £\nweek nyc\nune ase\ntrun ner\nti gray\nthi ele\nta ha\nsuper book\nstar fish\nspre cher\nspirit awards\nspin ph\nskin head\nsi rota\nse agram\nschoo lies\nsal oons\nragamu ffin\nr dn\nr bl\nprincen arula\nprelimin aries\npolit icking\npe ster\npar cel\nod ours\nnac da\nloveof mylife\nl fo\nkri styn\nkirsten bosch\nkat ar\nju bail\njarre tt\njan ab\njackson hole\nj ta\nig bos\ngeome tries\nge hl\ng ising\nfa ha\nder u\ncracker jack\ncom une\ncar ruth\nblu mberg\nartif ice\nal jon\n!! ðŁĺĬ\níĥĢ 곤\nye aaa\nwr acking\nwigg lesworth\nwer der\nur vive\ntv official\ntru cco\ntrium virate\ntrevor project\ntop tips\ntime keeping\nthe ol\ntat eliverpool\nso ak\nshe affer\nsh us\nsenor ita\ns agency\nri dem\nred ly\npoit ou\npar ul\npad d\nopere tta\nol ajide\nna dia\nmontal bano\nmir ando\nmilli meters\nman in\nmammoth mountain\nlok mat\nlit chi\nlin net\nlam mas\nl news\nkun itz\nkam rankhan\nka sher\nhor st\nhi stone\nhe most\nflat top\nfav elas\neep ly\ndou bler\ndon avan\ndh ing\ncu li\ncn es\nci opp\nbin ion\nbanyu wangi\nanti guo\nðŁĮ ¡\nâķIJâķIJ âķIJâķIJ\nwizard weather\nwhit en\nvision ary\nvillarreal cf\ntu ria\ntru ek\nterri e\nsti vers\nsm h\nsign language\nshi ge\nresource fulness\nre directing\npr x\npo to\nos v\nno sy\nno ren\nnat y\nmu tai\nmicro fiction\nmetro boomin\nmaxi mo\nmanchester city\nlong leaf\nle sli\nl rg\nkath ir\nji denna\nhydro logical\nhawk moth\ngir on\nflo aty\nferoci ously\neli da\nel bourne\ned ancer\ndur ango\ndhananjay ang\ndefl ating\ndaw gz\ncosmo drome\ncir a\ncas agrande\nbry den\nban presto\nay ano\nathletic s\nðŁijį ðŁĺĥ\nzen de\nwinchester bros\nwh erry\nwen di\nwe intraub\nway y\nvoter id\nvi asat\nvau ght\nunder groun\nun shine\nti mbo\nstit le\nscare ers\nrodrigue z\nrob son\nrag wort\nprobab les\npri den\npower metal\npolitico europe\nnarra bri\nnan dish\nn hi\nmatsu da\nmae stra\nlon go\nlar c\nkoscius zko\nkak ao\niso tonic\nindv s\niloven orthcoast\nhwar ang\nhogsme ade\nhaz litt\ngille speterson\nga at\nf ack\never quest\nen gupta\ndubu is\ndie thyl\ndesp an\ndanielle cormack\ndaniel tosh\ndal len\nbrexite er\nberkeley lab\nanci enne\nadri anne\nach u\nzuk un\nzee brugge\nx da\nwil by\nwho is\nvie so\nvesti ges\nv apo\nuu l\nun selfie\nul tan\nud ta\nud hr\ntre stles\ntimeto act\nthe valley\ntaver as\ntamau lipas\nsubram aniam\nspi rome\nsh ila\nsal ka\nres by\nrate payers\nrashi di\nrad res\nra x\npro ser\npr ance\nphoto sphere\npap aver\nob is\nn anyang\nmy music\nmy exand\nmontal ban\nmil nga\nmil ilani\nmb als\nknowle dg\nkir in\nkar min\nkak a\nk alou\njuven ile\nits dre\nine ers\nic cs\nhou gang\nhollywood studios\nger al\ngar butt\nesc rito\ned enton\nde vere\nde kat\ndaf ne\ncharacter ful\nchapel hill\ncamp fires\ncage warriors\nbe me\nbag gett\nappal oosa\nal et\naerop ort\nðŁı ij\nzi yi\nym tn\nweekende dition\nweather photo\nved ha\nur mila\ntri shay\ntorfa en\ntom ac\nthin i\nspur ring\nsophi el\nslu shie\nskor pion\nshake able\nsg f\nscal pers\nsamark and\nsam man\nrose hill\nproud lock\nor s\nopen air\noneteam onedream\noctane render\nmu ang\nmollu sk\nmar wood\nm skar\nlam in\nla zo\nku ban\nk man\njoel mchale\nhaw at\nfu x\nfluffy guy\nflu ffed\nfis erv\nfa ile\nf ts\nero om\neat fortheplanet\nducati motor\ndepar dieu\ndd iction\ncuer adio\ncrven az\nclean er\nclaren ville\ncapp uc\nc bridge\nbuzz worthy\nbohin j\naph ra\nan stru\nan hydr\nam ines\nalchem y\nah san\nafl finals\nabvp voice\n+ +++\nìĹ Ķ\nâŀ ŀ\nâĿĹï¸ı #\nz ef\nwas v\nvc sk\nv ava\nup fight\ntweet my\ntheri pper\nth impact\ntalent management\nsub group\nsh tf\nrichar dro\nreas signment\nprocrastin ated\npre existing\npic tish\npe waukee\nover laps\nodor less\nnebu lae\nmuzi ek\nmotor i\nmc fall\nman fred\nm mot\nlight years\nlegislat ures\nleaf ed\nlat ches\nl nt\nkofi annan\nko var\njyhe ffect\nisi olo\ninvali des\ninnov ator\nincan tation\nhu eneme\nha boob\ngy an\ngall erie\ng ately\nfrivol ity\nfh wa\nfesti va\nfa ience\neuph onik\nen em\ndi rait\nda eng\ncocon ino\ncli braries\nci um\nbutton hole\nbroad ens\nbirthday bash\nbi vou\nbbca siannetwork\nbaz emore\nbattle fron\nbal mer\nbabys at\nat atime\namon ster\namo vies\naly se\n̶̲̥Ìħ ÌĬ\nwil letts\nustin ov\nurine town\nun usual\nu ef\ntwi gg\ntouch screens\nthevamp scon\nthe bold\nt lb\nsty ler\nsto essel\nstal ley\nslou ching\nshel le\nser kan\nscrutine ering\nro erich\nram ah\npod gorica\non film\no wh\nnorth lake\nlostand found\nloc atelli\nleather work\nle hr\nla ka\nkat graham\nk alian\njohn bolton\ningle borough\nhase ena\ngi ps\ngal lia\nfo er\ndio cle\nde g\ndac eae\ncriteri on\nconi ferous\ncar rabba\nbriar wood\nben alma\nay meric\navi ate\namy winehouse\nabomin ations\nyo go\ny oooooo\nwal y\nwa an\nuniversit é\nulti ma\ntraeger grills\nto vah\ntheo bald\ntar onga\ntamir rice\nste ens\nseraf ina\nsat c\nsaar land\nre activated\nprecision ag\npar la\npann ell\nocta vius\nnoctur nes\nmichel leg\nme agan\nmcguin ty\nmc bean\nmaha bal\nlaw ford\nlan re\nla gni\nla gar\nkel lam\ninternational coffeeday\ninter cooler\nillu sory\nili za\nher y\nha zz\ngol fin\ngho da\ngh oops\ngary clark\nflatt ens\ndisper sing\ndefence less\ncyanogen mod\nculver city\ncreepi er\ncolorado stateu\ncl td\nceleri o\nboston symphony\nber ate\nbab ri\navn awards\nau tau\narts festival\napra xia\nab els\n[ ðŁĵ·:\n:: ::\nðŁĸ ĭ\né rables\nzan upf\nwb afcofficial\nvibr antly\ntn w\ntech expo\ntaun ted\ntall man\nskill man\nskel ton\nsir sa\nsilli man\nshi ek\nsc ler\nsc afe\nroo ter\nredemp tive\nre works\nraj guru\npwll heli\npubg mobile\npic ka\noo dh\nof eng\nmeningo coccal\nlycan thro\nj cu\nhome bred\ngi ed\ngas o\ngame informer\nex adata\ncon v\nco axed\nchristma spresents\nbov ril\nbo ere\nbj praj\nbag chi\nb ition\nam aj\nale ix\nah b\nachieve ment\nðŁĩ ²\nðŁ¦ij #\nyour game\nya ÄŁ\nwh oot\nwest lake\nut s\nun tenable\nthe u\nsucess o\nsu bed\nsoci ation\nshi raishi\nseb gorka\nsam ana\npower fm\npla smids\npil oto\nphe t\nper kin\npare shrawal\no gie\nno ko\nnewtown abbey\nneu tra\nnc sm\nmug anda\nmu dd\nmi stran\nmention someoneyou\nmaul ing\nmad dock\nlyn g\nlipol ysis\nlind quist\nle flore\nkine se\nkhat am\nkarma kar\nintel sat\nin x\nhear d\nhay i\ngi wa\ngenie bouchard\ngear boxes\ngap year\nfu mbled\ne utel\ndustin lynch\ndic embre\ndecaffe inated\ndatasci ence\ncorsic ana\ncontrac tually\ncla in\ncenter field\nce daw\ncar ton\nbe cu\nbcm houston\nbad alona\naudiom ack\nashe boro\nar naz\nappreciation month\naph mau\nan zu\nalli ant\naf fair\nãĤ·ãĥ§ ãĥ³\náµ ĺ\nঠ¶\nvi ff\nun civilized\ntx su\ntransfer wise\nte ju\nsy leena\nstrat com\nstab ber\nss rs\nsolan ke\nshoe boxes\nscru bby\nruffi an\nrou z\nrom pe\nran vir\npride in\npl z\np gy\nnick kristof\nnavig able\nnan sen\nn der\nmyo pic\nmut tering\nmr ricky\nmicha il\nmccle ary\nlov ski\nlooo oong\nlof gren\nlo witz\nlive sey\njuli ano\njeff ersons\niam fat\nhel ou\nhe pha\nepic tetus\nedwar des\ndu quette\ndire wolf\nconfi de\ncere us\nbuild able\nboudo ir\nas ala\nðŁĴªðŁı½ ðŁĴªðŁı½\nwav ers\nwashou gal\nvill an\nvijayfan strends\nus v\nun installed\ntom wolf\nthereal juicyj\nthe sushmitasen\nsuper vet\nstall man\nsany o\nsam ini\nreflec tion\nraj ma\nra sal\npower full\npareido lia\npa es\np mh\nowl city\noli vos\nobjec ting\no jessicanigri\nnorthern assist\nmvp school\nmai ka\nlumber yard\nlo ld\nj ir\nhappy new\nh nic\ngu aje\ngre tta\nfin dus\nfamily tree\nest á\nep an\nelli man\ndre wh\ncook ham\ncongr ats\nca del\nblo ve\nalighi eri\nali ber\nad ao\nacu er\nactu alit\nðŁĺį ðŁijij\nðŁį« ðŁį«\nâķ ¯\nع Ùħر\nö y\nwi er\nwest dale\nvish wak\nur ich\ntrailerpark boys\nthro m\ntheatre royal\nsu bah\nseat ers\nscab bard\npit re\nper nell\np flag\nout the\nnov anation\nnext year\nmoro der\njim gaffigan\nhom ura\ngo visit\ngim mie\ngiff gaff\nfluctu ation\nfidel ity\ndash wood\nchipper field\ncen ar\nce sarean\ncath leen\nbur ping\nbur kini\nbru gh\nbare illes\nbad land\nba stet\nay atra\naudemarspi guet\nal lum\naj c\nab ie\naa an\n- ,-\nâĿ ĩ\nÚ© ÙĪ\nyou rock\ny ster\nwr k\nvon en\nvir u\nvas ude\nubun tu\ntotal led\ntiny url\ntell me\nt storms\nsy rie\nsuk uk\nsterili zed\nsr sg\nsol ler\nsb learns\nrum ple\nrox burgh\nrose crans\nro ko\nri serva\nr ancy\npublic sector\npeter capaldi\nou glas\nobjec tification\noak field\nnu men\nnorwe gians\nnissang tr\nner f\nmy favorite\nmuswell hill\nmuch music\nmoon dance\nmodern design\nmind lessly\nman spreading\nly gon\nluc chese\nling usamy\nle sabre\nle mp\nlam ber\nky y\nkis sf\nkatiec ouric\nkabo cha\ngo i\nfat man\net ti\ndom ide\ndist as\ndaily monitor\ncou lton\nclay ne\nc maa\nbridgit mendler\nbom an\nbe ate\nau w\nasymp to\narchae ology\napple white\nak azi\nðŁijĮðŁı» #\nvintage books\nvideo games\nup w\ntyour back\nthecine gogue\ntest net\ntele gram\ntele commuting\ntal end\nsw are\nsugar plum\nspring vale\nsp line\nsmar ia\nslee ker\nside arms\nshun ting\nshef vaidya\nsean spicer\nse mis\nsd pride\nrae els\npet ta\npen na\npeaceand love\npan em\nnew sal\nme out\nmax xis\nman imal\nma stic\nlastweek tonight\nlaem mle\nke vine\nkav an\nk orian\nk lock\ninter lagos\ninfer tile\nin nigeria\nibar aki\nhump ed\nheat wave\nhau ck\nh ili\ngt sport\ngrand rounds\nfoli ar\nfeature me\new york\nequal ise\nee i\ne am\ndo wag\nde face\ndavid beckham\nchoosel ife\nch elios\ncast ille\ncas que\nbin nen\nbig time\nbang bang\nay alam\naw am\nam yo\nalde baran\næĸ° å®\nwy ang\nworld lionday\nwindow pane\nve itch\nvan arama\ntor mund\ntom ania\nti ppi\nta zz\nsy p\nsho twell\nse if\nse amen\nru apehu\nr ÃŃ\nprobin sy\npoo led\npoc ke\non fire\nodi ham\nnove dades\nmed ell\nmad havi\nma dr\nkul i\nkal ina\nka stle\niphone games\nic ap\niber dro\ngv k\ngratu ity\ngan apati\nf blchat\nevacu ee\nerec tus\ndisney animation\ndecrimin alization\ndayton abeach\ndag on\ndad da\nchi omega\nc fu\nbook oftheweek\nbo fors\nbeaut yof\nbadla pur\nav ison\naccompan ist\nab hil\n:) <\nðŁijį âĿ¤ï¸ı\nëĬ Ķ\nঠĨ\nzun ino\ny uni\nweekend wisdom\nvirtu alized\nvelve eta\nvap i\nup turned\nunder a\nto plo\nthis flag\nth street\ntat ting\nserv atory\nschnauzer gang\nsan kar\nri ple\nre version\nraro tonga\npo shan\npil sener\npe ko\np kt\nodd world\nla schools\nkr ka\nkha dr\nj kl\ninternational danceday\ninspire sme\ngw o\ngoode ve\ngio van\nfin lit\nfili ppi\nfam as\nco author\ncaman pour\nby day\nbun ning\nbele za\nba jac\nante ce\nalyssahar ad\nðŁķ ĭ\në Ī\n大 éĺ\nÅ ij\n} .\ny lum\nwho sunilgrover\nwetaski win\nwak ayama\nwach fox\nviol in\nvi kk\nvash ti\nu em\ntu pole\ntrou per\nsu kira\nster anko\nstanley kubrick\nsf bart\nse z\nsaraali khan\nroller girls\nrex burg\nrenzo graciebjj\nrc psych\nra dian\npot torff\npon dok\nparkinson suk\nolap lex\nnow drinking\nni acin\nmur do\nmade ira\nlu mb\nlon ger\nloire valley\nlive streams\nle shurr\nkon trol\nj miller\ninj kt\ngol pe\ngods notdead\ngo khale\ngam an\ng ando\nfe ducation\neph ron\nehren reich\ndougla sville\ndi ur\nd hen\ncollege ville\ncla stic\nbenig no\nbe any\narm ley\narca dia\nale many\nadop tees\n________ ___\nãĭ ¡\nye sto\nva he\nu wais\ntrin h\ntic to\nthe boys\nter ias\nten ma\ntau ber\nsi rocco\nsazer ac\nsas city\nroy ton\nraven hill\nr bp\npacnorth proud\noppre ssing\nog gia\nnational sunglassesday\nmc kie\nmarri ot\nmal appuram\nloveto read\nlo ti\nlieb man\nli ddy\nlast ing\nkin ne\nkellys later\njan z\nig m\niam valc\nhay ford\nhasle m\ngu bler\nfuku yama\nextric ated\nemer ita\ndru mb\ndj ima\ndis missive\nday trotter\nco zier\nco coro\nclo set\ncla ud\nchi gh\ncer vo\nbur gs\nbri st\nbra es\nblur bs\nbe eler\nbap at\nbag o\naugu r\namerican muscle\nalway sa\nali an\na hal\na ata\n................ ...\nðŁĺ·ðŁĺ· ðŁĺ·\nðŁĮ´ðŁĮ´ ðŁĮ´\n ¹\nyash hd\nwe z\nwan go\nw web\nvene gas\nvanc on\nv pr\nusatoday sports\nuni k\nstream ers\nster a\nsodal ite\nsnu ka\nske tball\nsho tta\nsab ic\nré sumé\nrise u\nra ig\nperel man\npelargon ium\np iller\norn ge\no dal\nny g\nnorth stars\nnigerian army\nmq tt\nmis fire\nmc mann\njen ner\njay da\ninher iting\nhighland er\nhar an\ngli dden\ngh anian\nfl intri\nfarn worth\nextreme weather\nduck en\ndo you\ndhan jani\nchef tom\ncat us\nbo ast\nbestro l\nbene factors\nan amika\nam rut\nale gend\nak tu\naaron ovitch\nத à®®\nwf h\ntyler thecreator\ntur ris\nto well\ntk maxx\nthe buffalonews\ntailli ghts\nswar up\nsk oll\nsho chu\nsen ja\nridic ules\nren stein\nre connect\nr vt\nplec tic\nmyfreec ams\nmid ter\nmicro site\nmechan istic\nmateri als\nmalo los\nma gog\nm tweets\nlo llll\nkirk us\nkap s\nkalon zo\nkal on\nk gw\njais ingh\nj ach\nirish whiskey\ninternal comms\ninten tioned\nhyper ventilating\nho taru\ngod fathers\nfre eyour\nfortun ato\nfire fall\nfin ess\ne migrate\ndou cette\ndi electric\ndeltar une\nco sh\nclari on\nbrook vale\nbjpraj nathsingh\nðŁijĬ #\nðŁijĩðŁı» ðŁijĩðŁı»\nðŁĮ¸ ðŁĴķ\nðŁĩ¨ðŁĩ¦ ðŁĩ¨ðŁĩ¦\n리 ìĤ¬\n~ ?\nye aa\nwo tton\nwi spa\nwi ggs\nwhite helmets\nw tmj\nvy rt\nvindic ator\nvi ste\ntv writers\ntuscar awas\ntu mba\ntir reno\nstre p\nsplin tered\nspe irs\nsp readers\nsouth borough\nshant y\nsen tai\nseal team\nse um\nschwal be\nsand erson\nsag arika\nsa ara\nrs duk\nro quette\nro bey\nrenfro e\npromo tion\npro fusion\nplow man\nphoto realism\npaula abdul\nou verture\nnebu chadne\nmorgan ton\nmccal lion\nmano tick\nmak is\nloc ally\nlily allen\nlee brice\nlang port\nko yama\nker mode\nil ux\nic han\nic acid\ngeis ler\ngall inari\nful da\nfly te\nfing las\nfin an\nen ki\neast field\ne pping\ndi bella\ndar ing\ncrimson peak\nchu d\nchicago an\nchi klis\nched i\ncar net\nbas swood\nbas konia\nba xi\nauri emma\nal app\nair less\naccou tre\nìĦ ł\n µ\nwick ens\nvaxx ed\nurban farming\ntrishay earwood\nther rien\nsy ork\nswin doll\nseon ho\nsenec acollege\nred breast\nrecti fier\npriyan k\npriorit ised\npp as\npic cal\npeup le\nperme ates\npau li\npan handling\npa o\npa ic\nout grew\nobam ain\nnai as\nna ep\nmis quoted\nmaster craft\nmar ak\nmag a\nliter ati\nlaw dy\nkor oma\nked out\njan in\nhalle lu\nguil dof\ngentle manly\nfu ld\nfrog man\nfran ck\nfar hat\nech ols\ndisp uting\nda best\ncritical care\ncoti ja\nci z\ncard captor\nboudic ca\nbou cle\nbar ren\nball sy\nat ell\nar ata\nam artin\nakh bar\nðŁĺ³ðŁĺ³ ðŁĺ³ðŁĺ³\nzoey deutch\ny ook\nwta finals\nwojci ech\nvan illi\nun kempt\ntown send\nthar vest\nswi ggy\nsod bury\nslic ks\nru si\nri mi\nre building\npro fastpitch\nprescrip tive\npp ah\npersi ans\nof ws\nod hi\nmom and\nmimic o\nme j\nmccl anahan\nmarlene king\nly anna\nlow man\nle ffler\nje red\nhave you\nhaha aa\ngw ire\ngro b\ngeo g\nga ara\nfv ck\nfox croft\ndicken sian\ndi pietro\nd hat\ncor ne\nclam bake\ncarbon ell\nca ia\nbet amax\nbattlefron tii\nalex salmond\nagre y\nadelaide kane\nad hu\nacade mi\nðŁij©âĢį ðŁİĵ\nâŃIJï¸ıâŃIJï¸ı âŃIJï¸ıâŃIJï¸ı\nyel le\ntope leven\ntheophil us\nsy t\nsk mch\nsd lc\nsar do\nra ssi\npoint blank\noutw ar\nou vert\norgul lo\nny it\nnature is\nmö tley\nmo berly\nmelancho lia\nmar cho\nlumin ance\nlau tern\nlab out\nkw ak\nkru tch\nkne els\nk bm\nju suf\njockey club\njo inter\njer ri\nintothe woods\nimplo ded\ni mu\nhomos api\nhap kido\ng mv\nfor sure\nfia worldrx\nfel ts\nfari d\nfar ma\nfantasy sports\nfan uc\nein ar\ndu y\nchoo sing\nccm hockey\ncancer survivor\nbuil dit\nbri gida\nbook tour\nbew dley\nbe brand\nar onian\nðŁĺļ ðŁĺļ\nà· ı\nwolf dog\nwo ols\nvill ani\nu kun\ntupole v\nten no\ntam al\nstil bestrol\nstem less\nst baldricks\nscholast ica\nsau t\nretro fitted\nqu as\npas si\noste opath\nnoel fielding\nmyan mar\nly t\nlevel and\nilove the\nhunt music\nhal ftone\ngyro scope\nguanci ale\nglen bard\ngentile schi\nge os\ngay ath\ngab es\nfreed elivery\nfra gs\nforsy thia\nfc women\nex pository\nelie bers\nel da\nego ist\ne par\nds bury\ndl cs\nd bradbery\ncork city\nconstruc tivism\ncon ut\ncle ur\nbiodiv library\nb ba\nas che\nand new\nan ette\nan er\n? ¿\nðŁĺ³ .\nçĻ ½\nâĺĺï¸ı âĺĺï¸ı\nvespu cci\nvand alia\ntri star\ntall boy\nsweat band\nsunday night\nst eck\nshovel head\nshop talk\nseparati sm\nrivend ell\npho sis\npa chinko\nobe ys\nnomus limb\nnoah cyrus\nnc g\nmith ila\nminecraf tedu\nmc clinton\nmanic monday\nm pesa\nle ddy\nlb gt\njohn r\njesusis lord\njesse b\ninsu re\nin sti\nim pa\nhu tan\nhoo ple\nhol te\nharoo bom\nguany in\nger ontology\nful vio\nfu li\ners ch\nendodon tics\ndescrip tor\ncoaching family\nclar isse\nchi em\nceler on\nc gf\nbogdan ovic\nbo ku\nbirthday yyy\nba shi\natt ell\nas elfie\nar oll\nan tastic\nam bert\nad ink\na age\nâļ¾ï¸ıâļ¾ï¸ı âļ¾ï¸ı\nwinni em\nverti ser\nunsig ned\ntranslat able\nten newsadel\ntall ent\ntak har\nstone gate\nsky arts\nsit aram\nshi rai\nseman tic\nsal ting\nrose mount\nrac o\npieter maritzburg\npal encia\npa kai\nnon point\nmetro bank\nmanipul ates\nman kiewicz\nlog ar\nliver ied\nkar din\nk sy\nindr ani\nin trust\niam king\ni kari\nhorni man\nheav iness\nhe me\nge burt\ngam in\ngal lus\nfriday funday\nfo ta\ne tape\ndu barry\ncryp t\ncruel ty\ncompar ably\ncle w\nclaym ation\nche ah\nch ander\nboy cie\nblack n\nbel co\nbeat maker\nbcli berals\narri go\nacbo fficials\n< ~\nðŁĺĬ ðŁĺģ\nਠľ\n¬ë ²\ntul li\nter nal\nspri ggs\nso ce\nsam smith\nrutledge wood\nrobu chon\nri sha\npotom ac\npo tawat\npla que\npatr oness\nnational tree\nmoombah ton\nmm un\nlyme regis\nkill erton\njet pack\nim posters\niamfat don\nhf cs\nhaz aras\nfit bit\nenjoy the\neastere ggs\ndismember ment\ndecarbon isation\ncrime sof\ncoffe yville\ncivil right\nbu tyl\nazi za\narn side\nalex alltimelow\naf it\nadelaide oval\nad ad\nâĿ Ģ\nwicked tuna\nvaccin ating\ntu in\nta kagi\nstar ships\nsouth fields\nsing apura\nshir ted\nshi bori\nsd learns\nsau geen\nsaber cats\nrep mark\nr tc\npromi sed\nporter airlines\npar r\np ome\novi zioso\nnou rish\nne ah\nnational burgerday\nmou stak\nmark akis\nman sk\nliqu i\nla po\nla goa\nkuma on\nki zzy\nke ween\nk dm\njal ali\ninter scholastic\nindi ain\ni its\nhunterx hunter\nhan alei\nghet toradio\ng kn\nfif ths\nff w\nfavor itos\nexi de\nduc ting\ncare x\ncamer ons\nbreast plate\nbreak point\nbhar per\nbeef y\nazmi shabana\nau bry\nas cot\nann ick\nandread ovizioso\nagno lotti\nac delco\nab alan\nâľ ³\nâķ ¯\nya al\nwunder bar\nw jac\nvers day\nvas sell\ntwee gram\ntourism goi\nthe emmys\nthe cur\nthe bma\ntes se\nsy rus\nswee eet\nslam my\nsc lass\nreck less\npu tyour\npre ter\nover runs\noh man\nof ra\nnj t\nni bal\nnet i\nminare ts\nmaim ed\nmagn animous\nma zer\nm net\nle stone\nko ei\nkay lan\njohn varvatos\njj b\nhigh light\nhand fuls\nguardian aus\ngo bearcats\ngar dat\nfort myers\nflacci d\ne sop\ndemb élé\nchennai express\nce asar\nbio synthesis\nberen stain\nbaesystem sair\nan ila\nam per\nalex avega\nabur nett\n% %\në¹ħ ë±ħ\nä¼ ļ\nಠ°\nworld travel\nwor mald\nus mca\ntyler j\ntin fo\nsw pg\nsun sentinel\nsu tures\nstre ett\nster k\nsh le\nschu ster\nscam per\ns yos\nroc kie\npon ding\nper usal\npenn ell\nnoo tropic\nmon tell\nmee tha\nmar tham\nkuch rang\nkor bel\nkaji ado\ni marleneking\nhi gley\nhi bbard\nhei sts\nhaun ter\nhar der\ngc sa\nfriend lys\nfi daa\nextinction r\ner oo\ne sign\ndraf tee\ndel illo\nde red\nde carlo\ncooker y\nconstruc tively\nchula inn\ncher ly\nbou e\nbm j\nblo cs\natom ium\nann able\nal resford\nal con\nabdel aziz\na hara\nÙħ اÙĨ\nwiel ded\nwang an\nwal den\nvin rana\ntrack town\ntit ano\nte jash\nsubtrac ting\nstatist icians\nst nyc\nsmackdown live\nshop lifter\nshe ung\nshaf qat\nselec tric\nsc ba\nsad face\nré my\nrur ouni\nresto s\nregal ado\nre sound\nrb m\npro fli\npre diabetes\npitch ford\npee phole\nostr aci\nok ita\nne bl\nlau ria\nla ffy\nky ong\njazz day\nintro vert\nimmacul ata\nhow se\nhospit alizations\nho tography\nher dman\nhard wood\ngo de\ngh ulis\ng ats\nfox hole\nf ellers\nen acts\nelizabeth banks\nee ep\nec ousins\ndra ge\ndesigni deas\ndelph inium\ncor do\nconstitu tionality\ncan thus\ncam ryn\nbukid non\nbri ers\naviation week\nanti elab\nam phi\nale f\nagul has\na oc\nÙħ صر\né nez\nymur phy\nyar o\nx bl\nwarren sburg\nwalru ses\ntry fan\nthe martian\ntele kinesis\nstim son\nsoli h\nshaw ol\nrick santorum\npor tor\nplo tters\npar vez\npar sing\np mm\nokon kwo\nmu dgee\nmen cken\nld t\nko slow\nklat en\nkick starting\nker bs\njo co\nin wardly\nin significance\nilove makonnen\nig tv\ni sher\nho vis\ngraphic novels\ngo aussies\nful cher\nfon der\neu sew\nequili brio\ndogsat pollingstations\nd tm\nce ta\ncan uk\nc atia\nbwo y\nbr aman\nay el\nash rae\nart collectors\narch ery\namo a\nadot com\n" .@\nyu cky\nun nao\nteam zay\nta ware\nstreet pass\nstrad lin\nspeci ation\nsk at\nsi sq\nsal us\nravin der\nperegr ines\np ama\nope x\no sor\nnar di\nnag er\nmis fortunes\nmargin alia\nmar gs\nmak os\nm sam\nlove art\nlin zi\nle gar\nlam on\nkoi moi\nje ppe\nits thelittlethings\nigh ty\nhudson sbay\nhei ke\nhang ten\nham n\nhac ia\ng top\nfore skin\nf rica\nembryo logy\nel ounge\ndjafro jack\nc gy\nbin sky\nbet wixt\nben alla\nbas enji\nbaby love\nb hang\nast r\nar av\namade o\naltam onte\nadida shoops\n?! \'\n"" """\nðŁĺ³ #\n⾨ .\nxxxx xxxx\nwjac tv\nwin ship\nuniof herts\nubiqu iti\ntit ration\nsun and\nsoom ro\nson at\nsof ascore\nso loway\nsle aford\nsi stah\nre ser\npro curing\nporter ville\nn kr\nmegam illions\nlac ounty\nku za\nkor in\nkoo zies\nkill ary\njo ssa\nit ta\niklan onlineshop\nhappy friendshipday\ngul lane\ngu zan\nfloof y\neuro beat\nenchan ted\nely xion\nec w\nec entre\ncu bs\ncrucible theatre\ncrickho well\nco geco\nchiar afer\ncal ve\nburk ard\nbuffe ts\nblack love\natas cadero\nar nel\napp x\nap lomb\nana am\nal timeter\nal pi\nðŁĺIJ ðŁĺIJ\nðŁĺµ ðŁĺµ\nworldcup russia\nwood sphd\nwin spear\nwayne state\nw spd\nver tes\nve ste\nvas sa\nuk biz\ntol i\nthor ror\ntat ami\ntan sy\nsmy th\nsla gs\nsilver wood\nrum chata\nrsp ca\nreme dy\nramim alek\nq rp\npresby tery\noptimi zes\nol ena\nnfl top\nnbc agt\nmo aarena\nma san\nm pps\nlit ton\nlen et\nkw ana\nke z\nke il\nkan war\nju ang\njar ritos\njack box\nir van\nir th\nhuski e\nhome grown\nholiday sarecoming\nhaz bin\nhagg ar\ngir d\ngard ell\nfri go\nfor ca\nfati hah\ndo to\ndal more\nd ci\ncyber warfare\ncil ento\nchir k\nche mex\nborn free\nbat te\nban ham\naustr alie\nau spices\nasp net\nann ale\nðŁ¥ ľ\nwy ong\nwood fordre\nwom bles\nwar horse\nwa aa\nvesti bule\ntre pi\nthen ext\nthe garden\nsugar ray\nseaw olf\nsc aup\ns victoria\nru pa\nro cin\nri ii\nram leela\nplos biology\npang aea\noyster catchers\nnever too\nnas m\nn gee\nmut are\nmtn g\nmr dan\nmal ta\nma im\nle tu\nkar ratha\njol in\nindy wrestling\nhodg kinson\nfrank lyn\nfrancis ca\ndri ppin\ndak tronics\ncon desa\nco pps\nclaire richards\ncanni bal\ncaled onian\nback flow\navent ures\nath ina\nar ve\nangel cake\nam be\nak hir\nai reland\nagit ator\nacol yte\na and\n== ==\nðŁļ º\nðŁĻıðŁı» ðŁĻıðŁı»\nðŁĺı ðŁĺī\nãĤ ĥ\nâĢ¼ï¸ı @\nz off\nyak in\ntre g\nthe junoawards\nterrorist attack\nst ager\nspe cht\nsomerse tccc\nshap en\nsen kamalaharris\nse mo\nsav ard\nre ee\npamuk kale\nnutriti onists\nnov y\nnewyork times\nnaught iness\nnassi f\nmari ela\nmaiam itchell\nlun din\nlove with\nkey noting\nion o\ninfu ser\nhep worth\nharry style\nharmon iously\ngood win\ng tlm\nfragon ard\nfin sub\nfantastic fest\ner rr\neg mont\ndu ende\ndisintegr ated\ncourty ards\nburde tt\nbur scough\nbot vinnik\nblin ker\nbier garten\nbethe legacy\nbed bug\nanthropo id\nal ounge\nagu iar\nadver b\na aps\nâĺ ¢\nÅŁe hir\nup adi\nun moved\nu pa\nthe district\ntech uk\nstraight outt\nsto kke\nsp ittle\nsoun der\nsnap yourworld\nsmi les\nsharks rugby\nser re\nsedge moor\nsead ragon\nrhe sus\nrecycle d\nqueens bridge\npri aulx\non ramp\nok ko\nnen y\nn cat\nmichel ob\nmari byrn\nlifeand style\nli sag\nli ann\nley en\nleon ar\nlar b\nlam pert\nkom pas\nkof c\nkatv ond\nhu bbs\nguv nor\ngro o\ngal o\nfo zzy\nfer man\nel bow\nel ad\ndar ty\ncor ton\nco ahuila\nbe kin\natta i\natori al\narts jobs\nart ill\nðŁĺŃ #\nಠķ\nà« ĩ\nwoodfordre serve\nwhe ezy\nwar ners\nuzo aduba\nuni strathclyde\nun yielding\nu hmm\ntun as\nteam green\nt bo\nsuper jet\nsu je\nstrongh oldgames\nsth all\nsp ao\nsmash box\nse jong\nscale model\nsaber tooth\nroom ate\nron ny\nroll i\nro mulo\nrahul kanwal\nphiladelphi a\npar vin\nnws spc\nnol en\nni rav\nna hhh\nmovie goers\nmm romance\nmid gley\nmarav illo\nmal maison\nlori da\nlef twich\nlaur it\nkor ine\nkamen rider\njohnson pga\ninfantry man\ninc ites\nge an\nfor ro\nffici encies\nfam ished\nextern ship\ndwigh thoward\nchuck le\nce ed\ncab bies\nbla zed\nbet ws\nbe zan\nbag atelle\nard ner\narc tica\nal ata\nag w\n? /\nðŁĻ ģ\nðŁĺŃðŁĺŃ ðŁĺĤ\nðŁĺĮ ðŁĴķ\nðŁĴª ðŁĶ¥\nyoun gli\nyorkshire tea\nx p\nwayof life\nvu vu\nvolody myr\nvasund hara\nvar dar\ntraumati zing\nto give\nthere sac\nteddy bear\nsu thep\nsor optimist\nsol era\nsin ar\nsch litter\nsc ram\nsa bet\nrode os\nremedi os\nre settled\nran ka\nqui vering\nnorth cutt\nnigel slater\nnex en\nmoog fest\nmark tuan\nlongre ad\nlees offer\nkor ina\nklay thompson\nkar mann\njesse leesoffer\nil ig\nhynd man\nharbor side\nhan neman\nground lings\ngin ola\nghome shi\nfish mongers\nfc cincy\nex claim\nevery thin\nely sees\ndark phoenix\ncy tok\nco incident\ncityof culture\nci mo\ncae sarean\nbel len\nbcel xn\nbar m\nba eum\naren ta\nz no\nyel lowing\nxher dan\nwood tv\nwester man\nw th\nvo ith\nv sat\ntow bars\ntattoo art\nta phouse\nt sim\nst ner\nssan tos\nspar za\nship ton\nscru mpy\nscorpi us\nschool bag\nrat tray\nra zer\nplann er\npiratesofthe caribbean\npherom one\npet sy\np sla\nofor i\nod ilon\nning news\nni fa\nnaf tali\nmy dog\nmsk ristin\nmm urray\nmelissamc carthy\nli kee\nle strange\nlapak gue\nlan chester\nla via\njohan son\niter i\nhouse off\nhor ny\ngu aido\ng elli\nflumin ense\nfire fan\nfine wine\nfilm linc\nfamil yo\nfab ry\nec am\neb or\nculture trav\ncl ung\nch ack\ncf ds\nbutcher babies\nbru isers\nbrebe uf\nbo ree\nblan keting\nbhubaneswar buzz\nbe wilder\nasser tions\namber jack\nag y\nðŁĺľ ðŁĺĺ\nðŁĴĽðŁĴļ ðŁĴĻðŁĴľ\nëª ħ\nw ciu\ntun gu\nscotts bluff\npublic ised\npress ly\npie zo\npale ale\nnix ed\nnewhi phop\nndam ukong\nnarcis o\nmo den\nmillion aire\nmand ers\nlow rance\nlaw we\nlar king\nla vo\nkid suk\nin und\nimmer sive\ni ste\nhaunted house\ngov summit\nfuse tv\nfr inton\nf king\nell ora\neduc ative\ndeep ti\ncole us\ncl x\nck enna\nchant ment\nchamber music\ncarl sson\ncan ad\nc sat\nbo bm\nbio diverse\nbet tering\nb kk\naishwaryar ai\nag no\naf ol\na uni\nðŁ¤ĺðŁı» ðŁ¤ĺðŁı»\nâĿ¤ "\nxavier woodsphd\nwp gc\nwe chsler\nuplift ment\nto zzi\nti ent\ntherain makers\nthe herd\nterror monitor\nter ric\nsud han\nstr in\nstl today\nski ba\nselec ter\nsan guine\nsalu ted\nrum mel\nrepublic fc\nree per\nra sc\nproud tobe\npro va\npau to\note dola\nnews dict\nnat arajan\nmor ison\nmono kini\nmcen tee\nmaris sa\nman ar\nma bee\nline webtoon\nli rfc\nlancaster uni\nla due\nkat o\nkan del\nin lan\nifu gao\nif k\ndswd serves\ndri d\ndas ch\ncorn fields\ncircuit cat\nbrunch bookchallenge\nbow ker\nboat building\nbar in\naz ra\naxis bank\nassi ani\napplic ators\naper fect\nape e\naha va\nðŁĺģ ðŁĴķ\nðŁ¦ ı\næ ®\nà· Ķ\nwith iel\nwil iam\nw api\nveteran s\nu selection\ntvweek logies\nthru sting\nsuf tum\nstu die\nspo tt\nsor ors\nsajid nadiadwala\nrobin roberts\nri kishi\nred legs\nray music\nrandy houser\npat or\npap ix\nomon di\nod endron\nnebuchadne zzar\nmemorial u\nmaroochy dore\nlu rid\nli ese\nl tu\nkit up\njohnshop kins\niam santhanam\ni arc\nhy wel\nhot ch\nhang ings\nha vel\nglo cken\nfri gging\nfit oor\nfish pond\nesp re\ne hm\ndy ke\ndu q\ndave bautista\ncreep iness\ncomb es\nco ds\nclaustro phobia\ncard illo\nbook fairies\nbo caue\nbilla bong\nbass guitar\nbart let\naw yer\nassi stive\nar ry\nap acific\namo y\nal ocal\n? ðŁijĢ\nðŁĩ¬ðŁĩ§ #\níİľ íĥĢ곤\nãĤ ¡\nzo calo\nva it\numa ir\ntravel agent\ntraffic sa\nton opah\nticto cnews\ntah j\nta dic\nsport stech\nspa strana\nshan emc\nsep tu\nsarac en\nre hm\npy at\npic oftheweek\npart ington\npark ade\nou dt\nnews comau\nneutr alizing\nnar berth\nmtv movieawards\nmo bb\nmark t\nmak ina\nleth waite\nla france\nl ng\nju if\nis landia\nink lings\nide ale\nhol ac\nhat tori\nhat day\ng benga\nfaken ew\nfa zed\nenglish wine\ndead spin\nda ves\ncory don\nchurch gate\ncarri ef\ncari bana\ncabinte ely\nbryn ner\nbr ach\nbon ington\nblock heads\nbbces sex\nathle tica\nam our\nam by\nam bie\nale aks\nðŁĵļ #\nðŁijī :\nðŁ¤¤ðŁ¤¤ ðŁ¤¤\nاÙĦع ر\nاÙĦ ÙĨ\nyork swildlife\nyaz d\nwine enthusiast\nwhit man\nwam aga\nville franche\nve sa\nvaldi via\ntriumph antly\ntony hawk\ntizi an\ntem pest\ntat jana\nsli k\nsier ras\nshau sa\nsarban andson\nred state\nradi olab\nplan eth\npis ang\npat ino\nor cia\nome i\nnor mans\nmohamed nasheed\nma key\nlower town\nlo di\nlen nart\nlandscape painting\nkermode movie\njuni pero\nivy bridge\nil al\nhel li\ngb ong\nff k\ndistor ts\ndis assemble\ndavi dv\ncn tower\nchro matics\ncastleg ar\ncarls jr\nðŁļ ļ\nðŁij ²\nðŁIJ± ðŁIJ±\nðŁĮļ ðŁĮļ\nyaz idi\nwhit ener\nwal green\nwaf u\nwad desdon\nw enda\ntypo graphical\ntweetyour friendshipinapicture\ntricol ore\ntou ken\nste yr\nstan wood\nspring ishere\nsmo ky\nsle gends\nsham ans\nsav pak\nsaniti zing\nsal z\ns borg\nquintu plets\npost script\npin elands\npas sau\noscar ssowhite\non ate\nnu ove\nnon surgical\nnir anjan\nni ña\nnex tel\nmorning breeze\nmono block\nmo hi\nmetu chen\nmen age\nman ca\nmal ou\nlo xley\nleop oldo\nki u\nke mar\nkam ani\nk mf\njail bird\nj suis\nj pr\nhu ell\ng ve\nfle mings\nferen c\nfe asted\ndere chos\ncop eland\nchur i\nbu sto\nbraw lers\naug menting\nas pl\nals fan\nag ente\nafter burner\nðŁĺįðŁĺĺ âĿ¤ï¸ı\nzoo k\nz t\nware gem\nvv v\nvol kov\nvand alize\nun mc\nudo biz\ntrans bay\ntele visa\nsyl vian\nshafaq naaz\nsh h\nsf n\nsey music\nsel mer\nroald dahl\npr ing\npick pocket\npa atleti\no leo\nnid derdale\nmo zzy\nmo loch\nmis aligned\nmets at\nm sca\nlikefor folow\nli esl\nlaureland hardy\nla im\nkw ant\nko ber\nk pt\njun ot\nhus se\nhon es\nhin k\nhagger ston\nh cm\ngr atia\ngor l\nga iam\nfim mel\nfeed youra\nenor mity\nem ley\neli ver\ndt p\ndravi dian\ndin an\ndeathwish coffee\nco pics\nck lw\nchilis jobs\nch rom\nbu ys\nbaeum ler\nav ul\nèī ¦\næĿ ij\nzi pl\nyour best\nway fare\nwamaga isa\nva alu\nv tm\num on\ntab oo\ntab ard\nsuper smashbrosultimate\nrhi zo\nra pini\npublic theaterny\npal anti\npack in\nmrpeter andre\nlu gh\nlat ching\nl ici\nkuznet sova\nkir stie\njos lyn\njesse mccartney\nj league\nim pati\nhei ko\nhe flin\nhap tics\nha art\ngre ely\ngood people\nfr aley\nescape the\ner oute\nenergye u\ndis continuing\nder de\ndefin etly\nde ba\ncu neo\ncow al\nclu tter\nci one\ncd f\ncar ma\ncal amba\nbu cu\nba sham\napil ot\nap sara\nîIJ ł\nwood cuts\ntry ing\ntruth fulness\nthe aaryan\ntheaaryan kartik\nth ire\ntao ism\nsound proof\nsho shana\nserv is\nsarbanandson wal\nsany al\nsabre tooth\nre distribute\nrath aus\nqu ed\nnat to\nnam ak\nmidd les\nmichi gand\nliri ano\nlig ature\nle ey\nkay lee\nkal yani\nin get\ngran it\ngoli ad\ng cr\nfle m\nfla bby\nfi qur\nfat burger\nfaith nomore\nero ss\nep stein\ndry ad\ndist ant\ndent ons\ndemic assiani\ndam nnn\ndaily productpick\ncoffe ero\nbishop jakes\nbene tti\nbdd sw\nant inous\naise bhi\nðŁĴ¯ðŁĴ¯ ðŁĴ¯ðŁĴ¯\nðŁ¤¯ ðŁ¤¯\nØ ·\nze tt\nwr wc\nwi gh\nwest palmbeach\nwa hala\nusac nation\nun dr\nteam ol\nstack pole\nsport stv\nsoap box\nsk ind\nsimon harri\nsap hir\nph ung\npar ole\now yn\noli vers\nni xon\nmo ong\nmi fune\nmel ancon\nmas ry\nm ÃŃ\nlord mayor\nlev ellers\nkk tv\nkh any\nken si\nislam opho\ninciner ation\nher mits\ngi gli\nfriend swood\nfor king\nenchan ts\ncordy ceps\ncopp inger\ncircu s\nche tna\ncar char\ncaf u\nboon en\nbar ter\nat ab\nang lin\namitab hk\nÏ ī\nwak ame\nvotejames fpp\nun dead\ntor chy\nthejeremy vine\nthankyou for\nster nation\nsteph eng\nstein man\nspir al\nsmallbiz sat\nseabir der\nrichar lison\nrec enter\nq ca\npuffin books\npel icula\np onto\nostent atious\nopini ones\nony x\nome z\nnew comic\nneel um\nnau tique\nmul laney\nmarque es\nmark martin\nleigh j\nkodan shausa\nkirkus reviews\nka fir\nk mp\nit ts\nise o\nhil dreth\nhere in\nha warden\ng sw\nfidd ler\nfi be\ndy in\ndragon quest\ndispos itions\ndha dak\ndand i\ncre swell\nchoreo graph\nch ir\ncfis d\ncash cash\nbridge hampton\nbally more\nathanasi us\nasso cham\nanai vanovic\nðŁĮ»ðŁĮ» ðŁĮ»\nह र\nس ر\nvin oodh\nshom rim\nsh rank\nsavi on\nron gai\nres ents\nre assembled\nqing hai\nprodu cex\nprin ting\npal am\np mpc\nop ene\nole ksi\noak park\nnb m\nmus que\nmi ér\nmg l\nmaje ure\nlu met\nline out\nlife hacker\njoz ef\nits worthit\niti ka\nis ki\ninter facing\nindy car\nincur sions\nin breeding\nhurry up\nhir ano\ngrand ads\ngal lie\nfer man\nendome trial\ne les\ndor gohome\ndjan go\ndear den\ndand an\ncu pped\nconnol ly\ncolour less\ncharacter art\nbu stelo\nbrech ts\nbreakthe internet\nbrack ish\nbm z\nblue dot\nathar va\nala id\nacu tie\nach ange\n> ///\n; \'\n! ":\nzu mbo\nyo do\nwhadd ya\nver band\ntri pods\ntre p\nthey ve\nthe travel\nthe offic\nst vincent\nsqu ib\nspo or\nsphy nx\nr pw\npull man\npray ag\npic cata\nper is\nopen gov\nol ture\nnem ours\nmute math\nmu ti\nminer ality\nmap box\nlland rin\nkim davis\njail er\nid f\nhydro graphic\nhul ks\nhollen beck\nho bble\nhar ken\nhan ews\nha a\ngor sein\ngal ton\nes boeck\ndu guid\nderail leur\nco wer\nclose thegap\ncell ini\ncameron newton\nbr dc\nbo or\nbeste ver\nbas smusic\nbam teddy\nauthor life\nactu alization\nè ½\nâľį ðŁı½\nyn ys\ny lo\nvap id\ntrump y\ntow bar\nteh sil\nstr s\nstit ans\nstandard bred\nspring boro\nshar ona\nshand on\nsh room\nrand hir\nrah me\nprivati se\npierre bouvier\npa kar\noy al\no qu\nnye rere\nnp ci\nni dra\nnewss yd\nne ef\nme v\nm stad\nlis icki\njen ning\nion ic\nim bula\nick x\nhy phy\nhaley reinhart\ngermin ated\ngag li\nfo ckers\nflu sh\ne sai\ne gi\ndise gno\ndemo ed\nclo e\nclo bber\ncant stop\nbu ttes\nbo han\nbent all\nax p\nari ums\nargon aut\n_ "\nðŁķ ļ\nworker sday\nwis den\nw cbd\nu at\ntrutv jokers\ntre w\nteat re\nsubpo en\nsi ad\nsen ation\nsap ele\nsag i\nrival do\nri probin\nre vises\npott sville\nny cw\nnt fm\nnh mrc\nne ches\nmun tari\nmagnit sky\nkann on\nkade em\nj stor\ni qs\nhy th\nhy fr\nhog wart\ngra ving\ngodbless our\nglobal citizen\ngirl hood\ngaller yof\nfabric ant\neverything nyc\nengag ement\ned cam\ndul ity\ndri bbled\ndr amar\ndeccan chronicle\ncolo gy\ncode of\ncap elli\nc do\nban jara\natop ic\nati e\nallen by\nal pe\nah ills\nðŁį» ðŁį»\në£ ¨\nâĽĪ ï¸ı\nyuv raj\nvi ver\nv ahs\nun buttoned\nthe in\ntex change\ntar g\nswad lin\nsuper conducting\nsugi moto\nsta ghorn\nsocial marketing\nsi dious\nschmal tz\nsarrain odu\nsanti gold\nsag meister\nru pay\nrough y\noun dup\nou ston\noppos able\noperation smile\nmin os\nmhi esboeck\nmedi auk\nll ys\nkir st\nke io\nkate upton\nkara age\njack wilshere\ngal adriel\nfans bts\ndirtb ags\ndialec tic\ndevi ated\ndah li\ncull er\ncrystalli zation\ncory ell\nclub foot\ncal in\nbm g\nbaby bel\nark adelphia\nann yc\nam organ\nðŁĺŃ )\nðŁı Ķ\nä¹ IJ\nâľ ®\nym ack\nyax ley\nwit ney\nwin on\nwh an\nween y\nw angs\nvu illard\nuc am\ntriste sse\nth c\nsun dogs\nstate lessness\nssi g\nrox borough\nremin er\nracer mag\nra hn\nqu alia\nprab ha\npoppy seed\npiac enza\none championship\nofficial mopar\nneutr ons\nne hi\nn hai\nmat tox\nlynch ings\nlyn am\nligan ds\nlaur ac\nkam elot\njeffre ss\nil am\nhottest dayoftheyear\nhockey fightscancer\nhi ki\nhass ani\nglyco gen\nesc ola\neffec tor\ndor ma\ndin als\ndaz z\ncoton ou\ncigar life\nchryso stom\nchick asha\nchee tah\nbug les\nbu tina\nbenalma dena\nax minster\nam ref\nall round\nai ri\na ing\n? ~\nðŁijį ðŁĺĢ\nëĶĶ ìĹIJ\nد ÙĨ\nyum miness\nyu bin\nvinyl junkie\ntra ppe\ntony bellew\ntn ite\ntb ay\nsumm ited\nst ary\nskyracing au\nsimonharri std\nsig mar\nshi flett\nschool craft\nsaliv ating\ns thetic\nrot man\nroadto state\nremain er\noli day\nmon star\nmoder ns\nmarie ke\nmain street\nma ik\nli hat\nkat ze\nj tg\niter ates\nhereto create\ngoo dridge\ngli de\nglasgow cc\nfati gued\neric john\neasy going\ndiver gent\ndigital marketing\ndi zi\nderma us\nde chart\ndad aab\ncollecti f\nchuck wagon\ncar suk\ncamper down\nbran k\nbou lang\nballist ics\nash verse\naksh aya\nðŁĺĬ âĿ¤ï¸ı\në¶ Ģ\nwinter meetings\nwhite water\nv aper\ntur kistan\ntrump f\nthel or\nthe starters\nthe fin\nt na\nsho cker\nshi ppo\nred gate\npun i\npr v\nor kin\nom aldini\nog more\nnj rotc\nnew scenter\nmv mt\nmonu sco\nmed lock\nlec los\nlal anne\nky lec\nkt bs\nker bal\nj anya\nisd strong\ninter war\nhyde park\nhoo kin\nhockey roos\nhei den\ngöte borg\ngrant thornton\nfactor ial\nequal marriage\ne gar\ndev tools\ndel mas\ncustom ers\ncase book\ncam co\ncalstat ela\nca ho\nc gd\nbotetour t\nbol g\nbear sears\navori az\nargen teuil\nal ac\naco tta\nabudha bi\nðŁĮ± ðŁĮ±\nwest word\ntar bert\ntail back\nsush mita\nstric test\nscience march\nscal ped\nsar dan\nsab zi\nsa o\nrun nels\nro tham\nrevol ts\nreplic ant\nr ously\npo ti\npilli ga\nout look\nnu ba\nn mm\nn ello\nmind thegap\nmil ch\nmessi aen\nme se\nmalign ancies\nliza beth\nla din\nka at\nju mat\njoaqu im\njarry d\nj rb\niom mi\ninvigor ated\nhar un\ngovin slee\ngon do\ngil let\ng news\nfreddie gibbs\nfre sher\nfollic ular\neric metaxas\nelo ck\ndumb asses\ndri vel\ndo pp\ndiver gences\ncymbi dium\ncs russell\ncoke studio\nce sena\nbrig adoon\nbre h\nblood less\nblaen avon\nbhar u\nber ke\nbat ok\nban sky\nbac io\nasser tiveness\namag ansett\nalwaysin our\ní ŀ\nzon dervan\nwild pipm\nwidespread panic\nwear mouth\nwak ka\nunder sized\nun cooperative\nthin ku\nst pauls\nsinter klaas\nshro ve\nru bel\nrobin ho\nro is\npre med\npo di\npen alty\nold photos\no witz\nmemb ering\nmay fire\nmasc is\nmag ness\nma bey\nlondon stockexchange\nlen or\nkod ama\njim mer\nit ap\nim f\nie i\niamj hud\nhypothe tically\ngur sky\ngh un\ngen ge\nfore heads\nfo i\nfli ed\nfire crest\ndroo p\ndo olan\ndim and\nde value\nd to\nd ks\ncor po\ncond ado\ncomp sci\ncommit tothe\ncla ver\ncarmel lawwe\nbru mb\nbigi deas\nbig bear\nberth old\naudi of\nassassin ations\nart sed\nar mee\nalim ent\n? ;)\nðŁĺİ âľĮï¸ı\nwe bos\nwater skiing\nve ee\nv af\nun bowed\nto yah\ntm hs\nthe wolf\nte sd\ntand ingan\ntakra w\nsymboli zed\nsukh bir\nspring day\nsell outs\nsc ylla\nsamard zija\nre published\npv m\npu kh\nos w\nor na\nnorth way\nnico let\nn gai\nmun shi\nmg ma\nmeh ran\nme is\nluke bryan\nlef twing\nlapakgue com\nlan kans\njames b\nid bi\nick ens\nhello oooo\nhardik pandya\ngatecra sher\nfr ates\nfountain head\nduc t\ndonnyo smond\ndon iveson\nchi pe\nce va\ncar to\ncar makers\nbosch etto\nbon dy\nbo cc\nbig by\nbenson hurst\nbel os\nbal len\nb pb\nb dy\navoc ado\nav ailed\nas d\nan ay\nwork days\nunion dale\nun packs\ntw all\nthra sher\ntan ahashi\ntai sha\nsuf field\nstar sports\nsin ner\npri l\npml n\npie tahouse\npic ot\npf n\nor on\non ette\nmonon ga\nmit suru\nmaus am\nmat tu\nmaruk mani\nklu tz\nk tar\njo bless\njerry garcia\njavedakh tar\niq bal\nhe marukmani\nhaz an\nhay nie\ngun reformnow\ngrav lax\ngol akers\nget loud\ngermany tourism\ngaryclark jr\nfor dyce\nfen di\neu metsat\nendy mion\neg ler\neco bank\ndu ffin\ndu ale\ndo wel\nco klat\ncar nie\ncant ine\nbrad l\nbau mer\nbaf inals\nath omas\nar gan\nar dy\nal kan\nad journ\nad ders\n.. ðŁĺĬ\nãĤ ı\nwor leans\nwo om\nwith nail\nwim mera\nusc apitol\ntidal hifi\nti sd\nthelast kingdom\nthe dirty\ntez os\ntendin opathy\nteam depot\ntakeit back\nstann ard\nsp itz\nsmy ths\nsheer ness\nsen sherrodbrown\nriver island\nregu lus\nray ment\nran z\nplu it\nphthal ates\nper ham\nnu c\nnaruto shippuden\nmountain life\nmissi o\nlore en\nleon alewis\nkeeptalking mh\nkaram bit\nkar rie\nka iri\njehan gir\njed d\nhimm ler\nhimalay an\nhesit ating\ngen tian\ngarden ingtips\ngam mal\nfl ory\nellis ross\nel low\ndayin thelife\ncross winds\nchen junga\nbroom ball\nbi ffy\nbi ani\naudio logist\nard namur\namg medikal\nalien ist\nal av\nacceler ometer\n!!!!!!!! !!!!!!!!!!\nè ¢\nze st\nyearofthe dog\nwn bc\nwit w\nwater boarding\nw gl\nvicky gshore\nv ite\nun pretentious\nu id\nty vek\nthe jimmy\nsuz u\nstreet sville\nstaple ford\nspring iscoming\nsp lott\nsound proofing\nsol on\nsla bour\nsi que\nschu ld\nsc astle\nrubber band\nread me\npup date\nprow ling\nped die\noli vera\nnip gaming\nninj at\nnation alistic\nnand itas\nn bb\nmtv awards\nms morgan\nmat lin\nkum kum\nkeepthe faith\nin frequent\nhms gofficial\nhi xon\ngot ti\nfla ils\nfinal mente\nfigur ativeart\nf po\ndoe sit\ndo var\ndecor a\ncoupon ing\ncorn elis\ncal academy\nbra swell\nblake man\nbel inda\nb vt\narthro pod\nam pion\nali ases\nah alli\nðŁĺı ðŁĺİ\nzim my\nz tao\ny co\nwar band\nvent ura\nv ayne\nut ty\ntun sil\ntu mh\ntruss ardi\ntrump sarmy\ntol ler\nthe mad\ntam borine\nstir fry\nspor ad\nspe ter\nshoo da\nshat ch\nseabirder saturday\nrwin p\nrele c\nrel o\nquatre foil\npum phouse\nperfor ce\npas sy\not ani\nnoctur na\nmy thri\nmitsu ki\nmil stein\nmb fw\nmason ite\nlunch room\nlingu ini\nlen ora\nlat rine\nl rb\njes elnik\njerus alem\njan ani\nitsdre desu\ngan ar\ngad is\nfa heem\neast west\neast of\ndues enberg\ndro r\ndisobe ying\ndevelop ing\ndamian marley\nbor abora\nblo que\nbe les\nbar ka\nbar gh\nava asi\nash in\nand furious\nab idi\nab ab\nðŁİ ª\nyes bank\nwelcom es\nwan go\nvul ture\nvel dt\ntr ally\ntongar iro\nten aci\nteam tennis\ntable au\nsyos set\nsoo th\nsli ema\nshort listing\nse ka\nsave your\nsap o\nsabi ersack\nroyal court\npronoun ce\nphil amuseum\nnotyour shield\nnit ya\nmugi sha\nmike brewer\nme yr\nmat to\nma ku\nlang land\nklein isd\nkan chana\njavedakhtar jadu\nis ss\nip sos\nhoop fest\nheli port\nhard covers\nhangten stories\nfresh ened\nfor ti\nfern wood\nentit le\nend z\ndoubt less\ndel roy\ndavidson msp\nd é\ncount yof\ncontemporary artist\nclimat ec\nchri sabiersack\nboy ardee\nbalance d\nbal akrishnan\nback a\nas as\nar ant\napo c\nanton newcombe\nanab elle\namul ya\nalexanderwang ny\nah en\nagbon lahor\naa ir\nâĺķï¸ıâĺķï¸ı âĺķï¸ı\ná Į\nà© °\nzheng zhou\nzag at\ny ago\nx os\nwall onia\nvector ing\nuni fight\nuk ta\nturn about\ntok os\nther oxy\nta wak\nsent ul\nrae burn\npurwo kerto\npsycho logical\npol der\npin ata\npalen que\npa the\nout bid\nmoustak as\nmotor head\nmel is\nme can\nmcne ely\nkoraku en\njohn nies\njj horgan\nish ak\nii hm\nhypo dermic\nhonky tonk\ngat sby\nfru g\ndog stagram\ndisav ow\ncut cliffe\ncostu mers\nchal isa\nbro ssard\nbrittany force\nbl alock\nbere ft\natur als\nand ina\nal j\nðŁĩ¨ðŁĩ ·\nwh acker\nvio list\nvan doorne\nv iti\nto kay\nthunder bay\nshar q\nsetit off\nse kou\nsare humanrights\nsar bj\ns ard\nruth davidsonmsp\nrobit aille\nrecor ds\npu ch\nphyl la\npastu red\npapix ure\nomo tor\nnostal gie\nni endorf\nmorethan ever\nkun ene\nkin n\nki kwe\njab baw\nirish rail\nimpro pri\nhotel news\nhil ti\nhar preet\nhah hahaha\ngv n\ngla dden\ngam est\nfo cals\nfit ts\nferdin ando\ndrg pradhan\ncros stown\nclou tier\nchain saws\nblue green\nblack tip\nberth oud\nbeati fication\nb hol\naw riter\nauto tune\nau ren\nash tead\nalberte instein\nðŁĺŃ ðŁĻı\nä¼ ļ\nán gel\nz une\nya ad\nwhat eva\nweekend getaway\nv online\ntx st\nto iling\ntm ro\nte bal\ntakam ine\nt mk\nsv illa\nstraigh tens\nsti fled\nsizz la\nsh tick\nsav our\nreallys wara\nque chua\npar ys\not amendi\noc les\no ded\nnom adic\nmr jake\nmonument sforall\nmo go\nmikare yesss\nkup p\nku ant\nkho i\nit Ãł\nisak son\nis sima\nhuss ar\nhobi day\nhel in\nhay wards\nha dy\ngreas elive\ngho stinthe\nfla shi\nev on\nel mont\nearth quake\ne wwww\ndemary ius\ndead locked\nde bbi\ndar linghurst\nbathin da\nbat ley\narch deacon\naquab ats\nally pally\nad lib\n:\' \'\'\n" /"\nëıĦ ê²½ìĪĺ\nyear swithexo\nwin ged\nweather bug\nwalker ville\nur qui\nunab ash\ntor tola\nthe farm\nstran ahan\nstag i\nsbu x\nsachsen ring\nron it\nreminis ced\npress on\npop ham\npel ÃŃ\nov w\noc c\nnne ka\nni jin\nnc ta\nnational wineday\nmichaelrosen yes\nmar chin\nlec a\nlanc o\nkodak black\nju mm\njo fa\nits cominghome\nil oni\nhur dy\nho pel\ngarden shour\ng summit\nfore shadow\nf hq\nesqui vel\nelyn ch\ndrupal con\ncon kers\ncityof ct\nchantic leer\nchand u\nce at\ncar bun\nbru ja\nbow doin\nbl under\nbe our\nbaz on\nðŁĺī ðŁijĮ\næĥ ħ\nâŀ ł\nà¸ķà¹Ĥ à¸Ĭà¸Ħ\nwhitt ing\nup n\ntx a\ntwel come\ntu cano\ntreve cca\ntobo gg\nste ig\nsol heim\nsoff it\nschlitter bahn\nsar taj\nsanc tioning\nrott ingdean\nroad cycling\nre vent\npress room\npe ver\npav one\nofficialap cng\nny bg\nnau tic\nmoong low\nmelis sas\nma ino\nlimou sines\nlil wayne\nla at\nkul bhushan\nko ka\nkhu d\njo ist\njesseb watters\nio tv\nhi ddles\ngt k\ngro dd\nem maj\ndown grading\ndjen vy\ndeliber ative\ncri scy\ncram lington\ncourmaye ur\ncoo ley\nclay field\nchiarafer ragni\nar ani\naggrav ate\naccess or\nðŁij¶ ðŁı»\nãĤ¢ ãĥĭ\nâĹ ł\nzi elinski\ny ena\nw ly\nvic fires\nv air\ntro ost\nthe current\nstray horn\nsile stone\nshadow of\nsecretari al\nscott aukerman\nsan sebastian\nro ke\nricha chadha\nrefu ted\nreal radi\npom fret\npar dee\npar ashar\np sia\nmu li\nmey te\nmer guez\nmc garvey\nkathr in\njohn cleese\njob son\njair us\nir na\nintercep ting\nhu dd\nhor sing\nho yo\nfree entry\nfi zzled\nfanci est\neve t\neti had\ner ace\nen ae\neag leton\ndynam o\nde met\ncom passes\ncircle ville\nchennai fc\ncan so\nbobbi brown\nbaili ff\nassi sted\nalbe do\nai yar\nðŁıĪ #\nä½ ľ\nâĪ Ļ\nwide out\nv agov\nub hornsup\ntracee ellisross\ntla ib\ntin toretto\nthe stroke\nt ling\nsw oops\nsu mba\nsu ir\nspread thelove\nscottish cup\nradi x\nqasi mi\npuppy cat\npsychon auts\noz aki\noctag on\nnen u\nmu mia\nmiddle burg\nmari ans\nlu mos\nllan ish\nlegal isation\nken edy\njazz man\nin exhau\ni xd\nhear tened\nhand wala\ngo camels\ng db\nfunk master\nforbidden planet\nf ous\nex cori\nduc twork\ndom in\ndiethyl stilbestrol\ndic ing\nden ims\ndemocrati zing\ncre spi\nchurchof england\nboycot tisrael\nbe fikre\nbadbad notgood\nab cc\n... âĻ¥\n! ?!?!?\nðŁij¨ ðŁı¼âĢį\nðŁĮ ĺ\nyn ine\nwing men\nwence slas\nvillar ai\nvesu vio\nverti sing\nvener ated\nun schooling\num ra\nu van\ntul lahoma\nstit an\nsteff ens\nstand upp\nss outh\nsquee zer\nsi bb\nshira stweet\nsf k\nscrutin ized\nsch wan\nscani auk\nsbar ro\nsai fu\nrin ker\nrever so\nre aped\nray town\nradiofrequ ency\npur ty\npsy chos\npredomin ately\npersoni fies\nov h\noc w\nnhra onfox\nnde bele\nnc caa\nme sc\nmc faul\nmc ad\nmatte is\nman die\nmag anda\nlei sha\nla brad\nkuant antv\njen nal\nichi gan\nib n\nhill view\ngro ene\ngran ton\ngo di\nfrench ies\nfi ke\ne ggy\ndu oden\ndo cus\ndin go\ndesign studio\nche oil\ncarac alla\ncanon ically\nbu ssy\nbean pot\nbe dd\nbal it\nar landa\nang liar\nag euk\na ï\n- !\nðŁĴĻðŁĴĽ ðŁĴĻðŁĴĽ\nz k\nya haya\nun impressive\nun ge\ntri ppy\nthisday that\nthe iron\nthe advocate\ntempel hof\nswa ins\nsun valley\nstrengthin numbers\nstop arming\nsi ums\nsi swa\nsciento logy\nsam bulance\nringling bros\nrich thekid\nreinst ates\npollinator week\nperre ault\nperce ives\nnichol son\nmy home\nmate j\nl ors\nkö y\nke mah\nke betu\njoin ers\njar rah\njac s\ni afc\nhe rer\ngreen market\ngone wild\nfun neled\nfro ad\nen cyclical\nem dr\nelek syon\necol lins\ne ol\ndow o\ncortic oster\ncomple ta\ncity uk\nciopp ino\nci roc\nchar bel\nbok ke\nbel ies\nbac up\nant davis\nan thers\na key\nðŁIJ¶ âĿ¤\ny pur\nwy combe\nws ls\nwo hl\nwhite girl\nwhit elaw\nusc ollege\ntelefun ken\ntami ami\ntal y\ntal uka\nsu ed\nsteve scalise\nso in\nsnow leopard\nsean m\nremembr ances\nre ticle\nravens flock\nradio grapher\nport auth\npic of\npen ryn\npay nter\npain tin\nmec can\nme ara\nmagen to\nlan yon\nlan di\njag ex\njade ite\nher iot\ngo cougars\ng pb\nfri ary\nfor tier\nfaf atl\nev enter\ndu ress\ndin ks\ncu bes\ncro zet\ncri c\ncou illard\ncontra ptions\nchad derton\ncarly pearce\nc sps\nbur dette\nblau grana\nap ahm\nanc ar\nam ta\najit pa\nabstr acted\n[ [\nðŁĩ ±\nãĥ» ãĤļ\nãģ¤ ãĤģ\nwin ce\nwedding season\nw apa\ntil lot\nti ssier\nther monu\ntall on\ntake downs\nsuper corp\nsat yam\nsam paoli\nsam iti\nsal tzman\nsak ina\nry on\nrust am\nrother hood\nroad maps\nrim less\nri ze\nrecon cil\nra ibh\npuppete ers\nprud homme\nphoto copier\npe cks\nnorthern powerhouse\nno isi\nmu deford\nmor tally\nmi h\nmediterran eo\nmcclat chy\nm ells\nlow carbon\nlo sc\nlen n\nlark hall\nlabrador retriever\nkres ge\nk nap\njust me\njun gy\nj ire\ni shootfilm\nhex tall\ng ages\nfin dit\nfestive season\nfavourit ism\nfab ians\nemplo yer\ndur dle\ndic en\ncon tax\nclu bland\ncity schools\ncity place\ncit sci\nchi bok\nchannel tv\nch nie\nbox sets\nbo zza\nbertu zzi\nbert adores\nbar tomeu\nback tracks\nba auer\nap lu\nang ad\nag el\nadal ah\nyeng pluggedin\nw ck\nu ys\nu ppp\ntrigger fish\ntri sten\ntraverse theatre\nthe onion\ntax a\nstatu esque\nstand in\nsp ia\nsi vag\nromeo ville\nre eb\npo tus\npherom ones\non wx\noak lawn\nne ave\nmovie star\nment i\nmade to\nmac lay\nkin naman\ningh e\nil mour\nhasle tt\ngeorg elopez\nge is\nfixed gear\nfemen ina\nfan nie\net ter\nen oki\neisen staedt\ndusk till\ndr ine\ndetroit news\ncro tty\nco sta\nchristinec aine\ncarn forth\ncard games\ncar jacked\nbull is\nbou lev\nbo gue\nblackbear nation\narm stead\namur ali\namo tor\nambaz onia\nyu kiko\nwebster hall\nwar ning\nwa ian\nvic ars\nver bi\nuniversal pics\ntherolling stones\ntab ith\nsun unu\nsky fox\nshould ve\nscen eries\nsarahpalin usa\nrehabil itating\nre stle\nre if\nre grouping\npo ore\npa ine\nog bon\nnl proc\nn ere\nmn th\nloosen ed\nlett in\nleave eu\nlaur yn\nlalupra sad\njrn tr\njen ison\njelli ed\nj hutch\nif w\ni justine\nho ys\nhann elius\nguide tti\nflo ppies\nfiq h\neli zondo\ndonnab raz\ndo el\ndham aka\ncri sper\nbon as\nbillion rising\nbe ers\nbar rons\nbann an\nake d\nah lu\na ari\n( !),\nðŁĸĬ ï¸ı\nðŁijŃ ðŁĴķ\nìļ° 주\nwhy alla\nupri sings\nunder cooked\nu fw\nsp its\nsouth mead\nslo a\nsisy phus\nshr m\nshon daland\npum meled\npremier inn\nphal ke\npenn medicine\npel é\nol n\nnun atsi\nneder land\nmon sey\nmic drop\nmel fest\nman en\nmaho pac\nlu mo\nli kk\nle ese\nlat eness\nkof xiv\nko hima\nkh h\nkab addi\nk cci\niq a\nin tosh\nin cy\niberdro la\nhead ass\nhal ab\ngo gol\ng gi\nfur babies\nfi shies\nfb live\nez ell\nenric om\ndun nock\ndon nas\ncrow ley\nclo d\nchu d\ncham bo\ncadw wales\nbow ens\nboss babe\nbonne affaire\nblack wing\nbeast master\nbay ani\nbad dhan\nba ther\nauton ation\n---- --\nðŁĵ² :\nâŀ¡ï¸ı @\nyat sen\nwing lets\nul in\ntrepi dation\nthegn show\nsugar bush\nsrk chennaifc\nse ic\nscru ise\nroo se\nri mando\nre ith\nre installing\nre gress\nphilly sports\npar ser\noo ficial\noffici a\nnouve aux\nn ton\nmy la\nmuch acho\nmc mahan\nle wan\nlaura jane\nkan goo\njeff co\nja ane\ninspirational quote\nindign ity\ni iss\nhomen aje\nhigh veld\ng dd\nfu lop\nende sa\ndropkick murphys\ndecentral isation\ndaysof summer\ncute eeee\ncom pos\ncertific ated\ncall is\nbair n\nbair dmp\naud peeps\nati ka\nac da\nðŁ¤Ĺ ðŁĺĺ\nzeig ler\nwick en\nwas c\nu maine\ntwitter sphere\nti el\nterpen e\ntele performance\nsw anny\nsv f\nsu pramo\nsap ul\nsand akan\nrough neck\nrema sters\nphilli pines\npe king\nop ta\nmn dot\nmcla urin\nmar kan\nma sted\nkore and\nk link\nindi gnant\nglob ali\ngentri fied\ng aku\nfuji mori\nfright mare\neuse bius\neman ate\ndu fy\ndil o\nde palma\ndat is\ncurv aceous\ncu co\ncross man\ncrazyex girlfriend\ncosme tologist\ncon senting\nbull mastiff\nbu shiri\nbrand sanderson\nboondo ggle\nðŁİĬ ðŁİĬ\n⼠¸\nz den\nye adon\nwhel ans\nwe del\nwc p\nw smith\nw asse\nut is\nur n\nthepar raeels\nthe bridge\ntat atru\ntail backs\nsteel works\nsno biety\nru hl\nron icles\nration alize\nphoto g\np du\no tak\nneuro sciences\nnarcis se\nnam ethat\nmo anin\nmetro town\nmerci fully\nmccu sker\nmas n\nm ams\nky leg\nited fc\nhouse ful\nho ye\nheine mann\nhed wi\nhar den\ngri gori\ngau har\nfrac tal\nfour ball\nfok ker\nestre lla\nengineer inguk\nelectro house\neducation ist\ndig cit\ndf v\ncrouch end\nco sey\ncin ch\nchi z\nca steel\nblood stone\nbg ca\nben simon\nbarn storming\natul co\nas ke\nallu vial\nag co\nace tic\nðŁĺĤ ðŁĴĹ\nðŁĹ ¼\nðŁijı .\nðŁij¨ ðŁı½âĢį\nาภģ\nver sova\nur dd\ntra baj\nthe blog\ntem pos\ntb day\nsuper troopers\nsto king\nsep ang\nsecu isine\nsauro pod\nsas b\nrose man\nray qu\npike sville\npa ig\nohmy girl\nnl f\nmusque am\nmore in\nmike bairdmp\nmic hell\nmi jo\nmed aled\nmall u\nm pos\nlu bom\nlaugh arne\nkar nal\ninf en\nhillaryfor prison\ngri ms\nfu si\nfu cc\nf ynn\ned ness\ndry point\ndirec teur\ndir ndl\ndel rio\nde mond\nde angelis\ncritch ley\nconme bol\ncam pa\nbrah mot\nblu ray\nbhak tapur\nbal dess\nart form\nart challenge\naneur in\nad oodle\nðŁĩ¹ðŁĩ ³\nãĥĿãĥ¼ãĥĪãĥ¬ ãĥ¼ãĥĪ\nz acks\nyil maz\nyanis varoufakis\nya sho\nun ang\ntrans cona\ntran spires\ntel enor\ntar sier\ntalent less\nta kano\nta io\nsp outing\nsi mic\nseol hyun\nscru ton\nruby onrails\nrose au\npro hm\npro cli\npo ie\nplan ck\nphoto bucket\nperspir ant\np km\nnortheast tweets\nmusc adet\nmicro fluidic\nman ico\nmak ki\nma ppa\nlawn care\nko skinen\njet brains\niri ver\nholtz claw\nhandker chiefs\nfri sby\nef oundation\neast lanc\ndis engagement\ndelon ghi\nde andre\ncreati vidad\ncerys matthews\ncaram els\nboy sin\nbha gnani\nbeacon theatre\nbak kie\nazz arello\nanima ux\nambas s\nâŃIJâŃIJ âŃIJâŃIJ\n Ń\nyu li\ny ts\nx kr\nx bo\nwearec isco\nwb afc\nvs buf\ntx stormchasers\ntran i\ntom ei\ntam ela\nsuper men\nstef anik\nstand aard\nsor achi\nsi xt\nshrou ds\nshort all\nsh ound\nsepar ations\nre negotiate\nra sha\npleasan tries\nple asee\nplaster board\nper chance\nost see\nnsw votes\nnaval academy\nmon donews\nme sto\nmar yl\nma po\nm nek\nly ph\nlong stocking\nlocal host\nlead gen\nl amaze\nkit ab\nk usi\nk host\nhe ren\ngrati ot\ngo van\ngen te\nfri sian\nfran nie\nforever more\nflu ker\nem ine\ndon nam\ndd an\ncou verture\nclen ch\ncitroen racing\nchit ose\ncast lec\ncam bri\nbreak free\nbre ves\nbirch box\nbeach combing\nash ra\nal mer\nðŁijį ðŁĺĤ\nðŁ¥ į\nzer ot\nza atar\nwing wednesday\nwant z\nwa chter\nune qu\nul ti\ntuf ts\nthunder head\nthe super\nthe cup\nta ppin\nside cars\nseun ghyun\nsebring raceway\nsa qu\ns stv\nreas sur\npan jim\noro b\nop ane\nonec cps\non enews\no iling\nny mex\nnorth rup\nnews comau\nnbc boston\nn ill\nmo lise\nmi miko\nmatthai g\nmati gary\nmane ka\nman dias\nmach inists\nli dge\nla dera\nkal ama\nje unes\njac c\nho shino\nhick stead\nharoobom kum\nfresno grizzlies\nf pt\nerit re\neri on\nen rolls\ne plenary\ndo pa\ndl ach\ndebor d\ncolor ful\ncol wood\ncol oma\nchuck schumer\ncactu s\nbot ley\nam anita\nahsa pocalypse\n." âĢĵ\nðŁĴľ ðŁĺĺ\nÑĢ оÑģ\nÊ Ł\nyel don\nwit tier\nwhite mugh\nwhitemugh alsfan\nvolcan o\nviri dian\nvac lav\nunstopp able\nun shakeable\ntru ancy\nthu ggish\nthra shes\ntel les\ntaye b\ntamal pais\nt gn\nswar t\nsuit up\nsu tras\nsu pes\nsten ciled\nst roop\nsin hal\nsee me\nsati ate\nsan carlo\nsab atini\nrpg maker\nregn um\nred it\nprofess orial\npoliti fact\nphy llo\npag nell\noxidi sed\noss off\nnow youknow\nnavy seals\nmyx philippines\nmor r\nmoor man\nmon tour\nman eater\nmai ya\nlub na\nlondon portauth\nlisten now\nlind holm\nlib bey\nla sti\nkol ly\nkir shner\nkhu t\nj woww\nj kia\nintervie wees\nham ba\ngreen edge\nghost stories\nfire light\neng al\ndü rer\ndv l\ndoppel gang\ndeaf blind\ndab ooks\nconce it\ncareer builder\nbeso tted\nber had\nba reli\nawww wwww\nat kowski\nart ner\nala ji\nðŁĵ Ļ\nâĺĿ ðŁı½\nÑ İ\nyi h\nwriting tip\nw utv\nuk football\ntw rp\nterr ill\ntech con\nsuper cut\nsto on\nstabili zers\nspa ghett\nslay ton\nsin ful\nsi keston\nshof ar\nshamp oos\nshal ala\nrupert murdoch\nrich homi\nredun dan\nrec co\npre biotics\nposta pocalyptic\nour cog\nnib bler\nmur mansk\nmelis andre\nmat agor\nmarcu se\nman hasset\nlic eu\nlead on\nkelly monaco\nkel ham\nini us\nigers italia\nhor nac\nhei ze\nfree wheel\nfeed lot\nfar falle\neng olf\nem beds\nel mann\nel do\ncompan ys\ncoll ating\nca thouse\nbe mbridge\nball out\nb corp\nai ya\nðŁĹ Ĵ\nà¹ĢภĪ\nzo har\nzak u\nwhale watching\nvern ation\nup next\ntek kers\nt vos\nt elli\nswasti kas\nsail ings\nricci one\nrep tar\nrah man\nperk sof\nos at\nno thin\nnaomi wwe\nmosko witz\nmerit age\nmc ds\nmar occo\nmal treatment\nmac leans\nlu bav\nlo ps\nlaro chelle\nkun dali\nkar jakin\nk sk\nj mi\ninter media\ning u\nin forum\nher old\ngreen port\nfra kes\nfalken tire\nexcell ondon\neli ud\ndru itt\ndailypost wales\ncommon ality\ncharle sd\ncbc music\ncat or\ncarri galine\nblack sweather\nbetje man\nbeh rend\nau dl\natre yu\nan cher\nall ondon\nall at\nair date\nafl swan\n__ _:\nãĥ¯ ãĥ³\nzu ck\nzeph yrs\nwas ay\nw fu\nthe business\nth ent\nsp rep\nsat or\nsal ada\nren fe\nrebel heart\nrai ison\npoly tunnel\npitts boro\nphillysports birthday\nnewscomau hq\nmat ure\nmac coll\nlam mer\nkeralafloo drelief\njay walking\njames dashner\nindustrial strategy\nhorse meat\nheal esville\nhe yo\ngal ecki\nfighting irish\nfier stein\nfear ne\nescap ist\ndef ers\ndaed alus\ncostan zo\nconvic ting\ncli st\nceli bate\ncare sses\ncanop y\nc tia\nbru net\nbir ger\nbigre ds\nballincolli g\naus mus\naquar ia\nan sh\nal bino\n. !!!!\nìļ° íĺĦ\nâĿ¤ï¸ı ðŁĻĮ\nwho vians\nwho se\nwey smith\nvineyard vines\nvex robotics\nval mcdermid\nunder oath\nun built\nu dom\nu cas\nsy ll\nswa e\nstri pling\nskir ted\nshe been\nsea vey\nscab ies\nsag ada\nrepair man\nread mission\nrambling sloa\npy att\nphilanthro pies\npat ently\nout scoring\nolympic team\noff cla\nnicole kidman\nnes sun\nnd k\nmor aga\nmahar ana\nlsu football\nlow riders\nlazy day\nkle ptom\nkas ka\nje ena\nj oos\ninde scri\nimc millan\nil legible\nhir sh\nhe tte\nharri gan\nhapp iest\nhacker space\ngon y\nfü h\nfin dom\nemer ia\nede weysmith\ndynam ites\ndejav u\nco relle\ncan ker\nca ther\nbtv i\nbm u\nbeath high\nbb sr\nas ing\nann amalai\nalan dia\nair dropped\n. ,,,\næľ¬ æĹ¥\nvil ified\nusur ped\nton sil\nt we\nt nie\nsvs zombies\nstour port\nsporad ically\nslumb ering\nsec md\nsai dyes\nrm wb\nradio logic\nproud principal\npho bias\npedi alyte\nong seongwu\nnore aga\nno limit\nneu stadt\nne eti\nndi aye\nnasty a\nn mbs\nme cs\nmassimo bottura\nmarcusle monis\nmad child\nma ba\nlo chan\nld in\nkri sz\nk anna\nj hope\nhy g\nhornac ek\nhau raki\ngriffin mcelroy\ngli oma\nfree zone\nfail sworth\nent ous\nenamel ware\nema i\nec as\ndre scher\nde ment\ndal os\ncr p\ncinemato graphers\nbal ak\nar bo\nah re\nad oni\nðŁijį âĿ¤\nãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ãħ¤ ãħ¤ãħ¤\n« ล\nwest phal\nwatch os\nvalky ries\nv ci\nut k\nup govt\nthought ful\nterm limits\nsu yy\nspen sgen\nskane ateles\nsan lorenzo\nryan phillippe\nrw p\nroller blade\nrep aving\nre j\npo vetkin\nper ine\noxy contin\nos su\nopho tography\noccupy wallstreet\no dun\nnth qld\nnb alive\nmen ews\nmar kel\nmad catz\nlov ins\nloren tz\nle ana\nlal or\njr nal\nit le\nin stigate\ni kes\nhall mar\nha ggle\ngn abry\nfu git\nfra k\neutel sat\ndysauton omia\ndre west\ndew berry\ndemetri ous\ndeh li\ncircle of\nby att\nbi dad\nau man\nar col\nak ure\naes q\nadvers ities\n... ðŁĺı\n... "-\nðŁIJ¶ ðŁIJ±\nâŃIJï¸ı @\nwat aru\ntra han\ntex tron\nspoke smodel\nshon an\nsh els\nscra pple\nre builds\nphil mont\nperish ables\npatt an\npam ir\nondre j\nnight beat\nnas s\nmu ffy\nmononga hela\nmelo di\nmaru ti\nmall galleries\nly dia\nlov ells\nlodg ings\nlin di\nlarry kim\nla spal\nla phil\nkwankwas o\nkokkin akis\nje en\njayalali tha\nha sling\nguerre ros\nfooty accums\nfolklore thurs\ndon ard\nditch ling\ndeli sted\ndai ki\ncivil isations\ncelebrity cruise\nbitcoin news\nbiaf ra\nbi bo\nbeha vin\naz amar\nasante kotoko\nas eries\nar imel\nan nes\nala ia\nadel ina\n& "\nâ n\nzulu land\nyourad f\nwa hm\ntweetapicture of\ntra duction\nt illing\nsun dries\nstory books\nscul lion\nsan geetha\nru af\nro gel\nrespir atory\nre sham\nprotec tyour\npra desh\npier cy\npf re\npc games\nno h\nnight shift\nnh lon\nnat z\nms j\nmarti an\nlö w\nkids grove\njustin ian\njohn abraham\nitsgreat uf\nired ale\nherd wick\nhaupp auge\nhappy customers\nham sik\nhaim theband\nh end\ngibb ard\nfa thi\nen via\nele vy\ndivor ces\ndigi mon\ncrawfords ville\ncr its\ncontinu o\nclo thier\nchow chow\nchange up\nbukas na\nbtr tg\nbern ina\nbc beer\nbal de\nanalog ous\nam way\nalz scot\nallagash brewing\nall lllll\naig le\nad na\nØŃÙħ د\nze h\nwind blown\nwid ne\nver if\nval enti\nu inta\ntra vi\nthisdaythat year\nswe ta\nsupport smallbusiness\nspar alympics\nso ong\nshi ites\nsere bii\nsch litz\nsa idi\ns dorp\nruffi ans\nrome tty\nrl grime\nresili ence\nre possessed\npur pl\npride ful\npoly gon\npearld rum\npae vey\nout la\note p\norient fc\nnannakuprema tho\nmemphis redbirds\nmartin schulz\nmal abo\nlay den\nl st\nkom et\njeopardy sports\nj jp\ninmar sat\nhode idah\nho witt\nhi les\ngri pes\nga iters\nfric ker\nev aders\neuro money\neconomic development\ne hud\ndrop outs\nder ie\ncre tins\ncorro ded\nch ittenden\nbrutal house\nbiopla stics\nbi zzy\nbar thel\natit lan\nasi er\nà¸ģภľà¸¥\nz era\nyam cha\nwak fu\nw wat\nvo ted\ntry an\ntravel wi\nth ais\nswamp thing\nstylish star\nsour sop\nson ido\nsk erry\nsham bala\nsh renu\nround tree\nriprobin williams\nre taking\npenny worth\np slv\nnews round\nna ila\nmanc made\nmal ec\nma brouk\nlove me\nlong hairdontcare\nling er\nli gon\njordanb peterson\njason voorhees\nintrac ellular\ninfr actions\nindu stri\niann one\nhybri dization\ngolden state\nglycer ine\ngastro paresis\ngad dis\nfuture house\nfur ukawa\nfi stic\neuro copter\nen ye\nemili orivera\ndr aceway\ndisco lored\ndi paolo\ndag g\ncom andante\nclean ups\nbr ary\nblom kamp\nbir m\nber go\nba tha\nayy appa\namerican sniper\nafl fantasy\nðŁijıðŁı¾ðŁijıðŁı¾ ðŁijıðŁı¾\nì¢ħ íĺĦ\nãģ ĵ\nwgn radio\nwedding flowers\ntz ka\nto ye\ntitan books\nthen es\ntere sa\ntagli ani\nso wers\nslit ting\nsel don\nsch ul\nry ton\nro sier\nrhin itis\nraj shahi\nr de\npretz el\noffcla stro\nnow playing\nnew on\nneverstop learning\nmarro quin\nmag ers\nlat kes\niy as\nhome decor\ngl x\ngg tth\nfebru ari\nespeci ales\nengv wi\nel mers\ne tre\ndj z\nday book\ncommon alities\nclou ding\ncat sup\nbharat pur\nang y\naly ci\naer ated\nabrew ery\n. âĢĵ\nðŁİ¶ ðŁİ¸\nyor u\nwi eland\nwearethe community\nvi bin\nvar nishes\nthra shers\nthe mag\nth warts\nspil lover\nsno pes\nsno bbery\nsin color\nsc amp\nsb ama\nsander ling\nroland smartin\nriv age\nr mk\nq et\npre frontal\nphal ar\npe pi\npal min\nom lin\no dem\nnorth london\nmuskete er\nmo honk\nmat tro\nmart ellus\nloren zi\nkwi k\nkis sme\nkelli giddish\nkar ri\nine fficiencies\nhead of\ngood wood\ngo falcons\ngi ffen\ngerard pique\nfoot step\neli roth\ndou b\ndog patch\ndill ons\ndid actic\ndevast ator\ndel p\ndas d\ncin i\nbow sette\nboogi ecousins\nbbcradi omanc\nban z\nback link\nb wl\napache spark\nallow able\nag rad\n/ >\nðŁĺĸ ðŁĺĸ\nठĽ\ny abu\nwr cb\nwir ksworth\nwg sn\nwar um\ntwir ler\ntravel pic\ntol er\nto talk\ntim ken\nstroop wafel\nscho colate\nsam ina\nsam huntmusic\nrose buds\npy arke\npolys acchar\nnorth lane\nni hal\nneel am\nmorning starr\nmechan ix\nmarin er\nmal heur\nlec tomy\nl vr\nkur ri\nkud zu\nkoppar berg\njack lin\nhodg ins\nha dow\ngrow led\ngr rrrr\ngot ze\ngav an\nfire fox\nfasig tipton\neye d\nerc q\ndul kalam\ndragonage inquisition\ndown sized\ndevon wildlife\ndefend daca\nde sing\nde am\ndark side\ncross y\ncich lids\ncat tails\nbe kele\nangel enos\nand ris\nalyssa edwards\nadl fringe\nãģĤ ãģ¤ãĤģ\nzur ich\nyuri y\nyun s\nvivekan and\nvit or\nven eno\nti pa\nthe hip\ntear jerker\nte eling\nsuper max\nsuit er\nste ing\nshape shifting\nse chelt\nschö n\nsam pe\nrussi e\nrun town\npop tv\nparen theses\noxygen ated\noph en\nne ato\nnach o\nmu hl\nmacro phage\nlom o\nkt family\nkon ic\nkha jura\nje se\njam ey\njack white\nilovel u\nicc worldcup\nhopkin ton\nhhhh hhhhhh\nhe mis\nga ston\nfab a\near shot\ndog fighting\ndiscar ding\ndead andcompany\nbru tes\nbri ony\nbraun strowman\nbo by\nben ic\nbang aram\nba itul\naw ala\nartif ici\nappreci able\nair wolf\nah rexpo\nagri food\nae hoops\nac ers\nzi ya\nz ula\nwhitney houston\nupp ingham\nthru st\nthero pod\ntechnic als\nt ftp\nsy na\nstand art\nsource book\nschi ano\nsch orr\nrous sel\nregener ative\nreco leta\nrc ms\npuma football\npr ancer\nport marnock\nover world\nnthqld cowboys\nnovel ization\nnat v\nnare k\nme bane\nl ith\njud icious\njabbaw oc\ninser t\nher azade\nheathle dger\nharvest moon\ngeor gio\ng vc\nfossil free\nericjohn salut\neng in\nenam oured\ndu y\ndecolon izing\ncram ping\ncoun tered\nconju gation\nburn tisland\nbrow sed\nblue stem\nbe ekman\nban chory\naugustin ian\nasu mmer\narc as\nabio dun\nab rown\n) âĻ¥\nðŁĽ Į\nðŁĩ© ðŁĩ°\nãĤ«ãĥ¡ ãĥ©\nâĿ¤ï¸ı ðŁijij\nzol ak\nvaj ra\nto learn\nstom p\nspe ktor\nspatu las\nsoci opathic\nsno wiest\nshif nal\nsheryl crow\nsherri hill\nshaw ne\nsc ph\nru dge\nquasi modo\npublici dad\nprou sa\npoo per\npak vind\noutlaw z\nnil giri\nniel son\nnew look\nmon ary\nmat ang\nloo ses\nle garda\nlandscape architecture\nlamp kin\nkish war\nkhali d\nkello ggs\nkay al\njun ya\njj ig\nindi ad\nim ma\nhell bound\nhair dryer\nguest room\nge k\nga ar\nfakel ove\nerich mond\ndef r\ndashi ell\ncute dog\ncolombiais magicalrealism\nco q\nchor o\nbren dand\nboulev ards\nboston childrens\nar ol\nandre ou\nalzheim ers\nadap a\n= /\nìĥ ģ\nç ĭ\nvw bus\nvirtu oso\nu del\ntron c\nto kaj\nterri gal\nsj su\nsioux falls\nse ko\nse ay\nschou ler\nsar chive\nsaf arova\nro tavirus\nrin ko\nrevel atory\nquen neville\nporpo ises\nplay ful\npicto gram\nobsc ures\nmy ka\nmon treat\nmckee sport\nmar ler\nlu ise\nloveyou guys\nlion snz\nlati more\nl mn\nkurdi stan\nkumb h\nkhan kk\nkay u\nkat we\njo hari\ninteroper able\nicu eta\nhor licks\nhollister co\ngochu jang\ngary johnson\nfy life\nfein inger\nfeel er\nfal ak\ne im\ndigital payments\ndevon ta\ndeter ring\nday with\ndavi dy\ncc x\nbu le\nbrock way\nbridg end\nbon gbong\nbish t\nbhav nagar\nbg su\nabra xas\nðŁĺģ âĿ¤\nå° Ķ\nwelling tons\nwel ch\nwasay jalil\nvivo prokabaddi\nval dis\ntrump in\ntoc queville\nspiegel man\nspe sh\nsof christmas\nsc asino\nsar ki\nsangh vi\nrapp aport\nqui jote\npon toons\npok ken\nornitho logist\no leg\nne agh\nn land\nn app\nmin us\nmcro berts\nmar zia\nlong field\nla at\niam varuntej\nhalei wa\ngro over\nflav ouring\nfc j\nec topic\ncounty wide\ncopy book\ncon ifers\nchi ki\ncentr ality\ncas erta\ncar snapped\ncar gol\ncal ver\nc chi\nb iliary\nath ul\nare m\naly sia\nali do\nalber tina\nagar tala\nðŁijıðŁı¾ ðŁijıðŁı¾\nоÑĢÑ ħ\nyn lle\ny abo\nwhelans live\nvogue paris\ntotal afcon\ntime of\nthelast leg\ntakap una\nta vira\nstrati fied\nstir uni\nstar la\nsouth fork\nsou sap\nsou rire\nsofi ane\nso dor\nsequ ity\nsel fe\ns watch\nrebel led\nqu itely\nproud american\nparagu ayan\npar ast\noren zo\nopen cup\nom its\nnew love\nmultiv ariate\nmadri dista\nlibe skind\nleg ault\nlaligas antander\nkap ut\njackson guitars\nit back\nhotel direct\nhen son\ngram fam\ngirl shbo\nfra zee\nflor rie\nflir tation\nfan book\nelph instone\neh is\ndun ited\nd ne\nchin on\ncellu lo\nce sca\nboeing defense\nbat our\nbar bee\nbag ot\naz ali\nav ratri\nari se\na ite\nå¸ Į\nठĸ\nwro c\nworld ph\nwool ston\nwest park\nuncondition al\ntour nam\nteo doro\nsupervis es\nstill sanders\nstar time\nsp bs\nsof rito\nrock hopper\nro kh\nrid ha\nred alert\nrain iers\npoit ras\nper tamina\np ation\notolaryngo logy\nnise ko\nner ds\nmis chka\nmh ky\nmate usz\nman tha\nladies football\njan elle\nhide aki\nhenri ques\nhe pp\nhe der\ngra ven\ngau det\nfu era\nforestof dean\nford canada\nfl b\nfan ation\nfa anews\nes md\nen scon\nem ms\ndu elling\ndor on\ndl wp\ndead bolt\nde pew\ncross bows\ncroo ds\ncou th\nchri sch\ncheri shes\ncathe ters\ncam ren\nbrah mins\nbon durant\nboiler plate\nbeech worth\nbe rens\nbc care\narimel ber\nðŁķ Į\nðĿĹ¼ ðĿĹ\nzag ging\nz ord\ntrelle borg\ntor no\nterra forming\nsu pano\nsu chi\nstran gulation\nster num\nsteph any\nsny tv\nskibbere en\nshak u\nse tc\nro sati\nreno s\npurpler ain\npatrick sday\npa ko\noudt shoorn\nnyt mag\nnfl commish\nmon on\nlou dre\nlive with\nlaura benanti\nlaundere tte\nitch ell\nin ac\ni bad\nhum tv\nhisp z\nhare em\ngravit ation\nfriend less\nfe re\nfanni bals\nellen berg\neden bridge\neddie vedder\ndioni sio\nde wars\ndau phin\nco red\nboston pizza\nbernal illo\nbermu dian\nall man\nadver torial\nac ott\nðŁİ§ ðŁİ¶\nz azu\nye le\nwur ly\nwright stuff\nwau bon\nwag gle\nw net\nv for\nuc co\nu til\ntony fernandes\nti mah\nthoo thu\nsport z\nsatter field\nsanjay nirupam\nsam al\nsa ima\nro dan\nrahme manuel\npo pover\nor c\nonly one\nnormal isation\nna thank\nmy tv\nmr michael\nmo ir\nmiddle men\nmeri dge\nlat eline\nlaker idge\nkr ack\nko tter\nkex perience\nkelly ripa\nkan gol\njoko y\njohn boyega\njet life\ninter club\nholocaustremem branceday\nhat ton\ngro ce\ngo wr\nest el\nep md\ne fin\ndun das\ndu fresne\ndro ws\ndreams docometrue\ndj zinhle\ndaw nof\ncontinental tire\ncol m\ncoal ville\ncbr n\ncasei h\nbrail sford\naz pil\nan anta\nalfredo flores\naf all\naccentu ates\nðŁļ ¬\nworl di\nwes thou\nvs nyg\nvil i\nunabash edly\ntx water\ntwitter firstfriday\nta si\nstoke sley\nstati stic\nsig ners\nsherwin williams\nri quel\nreproduc tive\nramanu jan\nquiet girl\nquar rel\npresump tuous\nplant es\npenn ine\nover clocking\nor lov\noni sion\nof ilm\nneuro endocrine\nnen ele\nmush fiqur\nmrs gandhi\nmis represented\nmey ler\nm do\nliquid ators\nlawy ering\nky ron\nku z\nkindle books\nkan ia\nk andy\njo zi\njo ffe\njin ka\nitsn ice\nha sk\ngil martin\ng tu\ng greenwald\nfree born\nfasigtipton co\neurope ana\nes quad\nel sword\nearth ling\ne asons\ndonnabraz ile\ncipri ano\nch us\ncf n\nbu hay\nbram mer\nbowel cancer\nbil an\nbbc sounds\nbag shaw\nas ae\nappet ite\nal franken\nadvo caat\nac rl\nà® ¸\nØ ¦\nzar b\nyiann ch\nyale town\nwhas sup\nwer i\nweare not\nwater spouts\nu ffs\ntri plic\nth ula\ntaxon omic\nt weddle\nt kp\nsteal ers\nsa irs\nraj baddhan\nra thi\nque ere\npre determined\npistol cliff\npist es\npapp y\nomin ously\njon na\nj pn\ngi er\ngel ati\nfor less\nfaulcon er\nfacebook down\nestate planning\nea day\ndon au\ndit z\ndism oun\ndelici oso\ncre ighton\ncont d\nconstip ated\nbuen aventura\nbram well\nbb cal\nbarra sso\nalb ini\nak om\nðŁ¥ µ\nâĪ ł\nठł\nÙ ı\nwob bler\nwist fully\nwind mill\nwin amp\nwil let\nwar ton\nvi j\nve j\nu xo\ntweet bot\ntra ight\ntoon ie\nteach sdgs\nsport science\nsilver backs\nseto pati\nsan tal\nryu ichi\nretali ated\nqueens gate\npri pyat\npatap sco\noxy codone\nobi ang\nnge movies\nmst rooo\nmor rone\nmer kovskiy\nmcan ally\nmaz ur\nmarche tti\nmar land\nmagher afelt\nlof thouse\nla brum\nl ÃŃ\nkol l\nkim jong\nhen ao\nhemat oma\nha ren\ngun dlach\ngrass root\ngla z\nfrater ni\nflying scotsman\nen light\nel ang\nek lund\nedgar allan\ndu plicity\ndoub let\ndescu ento\ndat er\nd princess\nd add\nconfir mado\ncompu ware\ncash me\ncar lene\ncal vins\nb mi\nappend ages\nald ale\nal tere\nðŁĺĭ .\nËĺ )\nwn ba\nwaldor f\nvo w\nvo ges\nuse able\nus dol\nup work\nunc g\nu hl\ntur ducken\ntre loar\ntran spiration\nthisism ay\nth st\nstr out\nshow es\nsher awat\nsh alo\nsh ags\nscho harie\nscaf folds\nq atif\npre requisites\nol usola\nnor ther\nno ss\nmud honey\nmapu che\nman gu\nliqui fied\nkon op\nk á¹Ľ\ninst amusic\nimpactin vesting\nhoss am\nhawk wind\ngour ley\nglory days\ngh our\ngar ma\ng aren\nfashion design\nelevation church\ndi ar\ndas om\ndaf a\ncrow ned\ncross way\ncou to\ncon chords\ncl unes\ncasi o\nbillie holiday\nb bered\nath as\namade us\nalmeida theatre\nadityaroy kapur\nðŁĴľ ðŁĴķ\nðŁĴª ðŁijį\nðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸\nà¸ģภ¥\næ r\nyourboy myles\nyard stick\nwerthe im\nvege table\nuri jah\ntwc news\ntinder box\nthe trade\nte sto\nsun hat\nsmal lish\nsho petsy\nshi vely\nshah in\nsb nd\nsay reville\nreligi on\nrefurbi shments\nreal change\nptole maic\npo cari\npeople problems\npd ga\no ana\nnic ar\nnev ill\nmud cats\nmon tro\nmodi govt\nly cett\nlong tail\nlight nin\nla br\nkey worth\njoan jett\nit chotels\nhit raffic\nhill walking\nha dar\nha as\nfrei heit\nfood art\nexc itation\neng strom\neng landers\ndoun e\nde ben\ncuck oo\ncredenti aled\ncrai gie\nchill wave\nbi reland\nbastian ich\nax stv\natt stadium\nar ski\nallu des\nake up\nabe el\n\\ =\nðŁĺį ðŁĴĽ\nಠ¹\n~ !!!\nzou ki\nyougot this\nyo kes\nwhit well\nwat ton\nvin ni\nun talented\nun go\nterri fic\ntar ka\nta cht\nt pl\nt elia\nss acramento\nsou sse\nshi amak\nsco ast\nroad tom\nro mine\nratche ting\nplu tarch\npin d\no sti\nnew work\nmuk ti\nmth atha\nmoon dog\nmo hm\nmerrill ville\nmeate ater\nmarching band\nloe wen\nlo cura\nle thu\nlaz ari\nkay ser\nkan th\nkal k\nk hang\nhe stia\ngregh unt\ngol feu\ngiel gud\nfraudul ently\nfoodin novation\nfood panda\nfon thill\nelectro cardio\ne bn\ndog tooth\nder singh\nden a\nde gener\nba hi\navon lea\nap ay\nam da\naber lour\naaa inspector\nwhat women\nwa hs\nvin italy\nvan taa\nthumb ing\nthac over\nsupple mented\nsouth worth\nsoo jung\nsm tm\nsl comiccon\nsha u\nselfe mployed\nse kh\nr uru\nq al\npâ té\npyarke aisebhi\nproducer life\npieter se\np wx\nodai ba\nni zza\nmo shing\nml m\nmilnga vie\nmemphis mayfire\nmaple ton\nmand era\nm cham\nled wards\nlands downe\nlamp lighter\nlam bof\nkuchrang pyarkeaisebhi\nkime ki\nka inen\nit smo\nit ong\nhur ra\nhra wi\nhow tobe\nhol lin\nhapha zard\nhabak kuk\nh lat\ngas con\nfur riends\nft lauderdale\nf bal\neu i\nec ts\nea id\ndoctor ates\ndim mock\ncomic stitan\nci reland\nceli ac\ncb seven\ncar nahan\ncalgary herald\nbharat anat\nbeach goers\nawh h\nast oundingly\nanglo phones\namus ingly\nam cc\nair indiain\nab stained\nab asi\naaj kamrankhan\na ú\nத ல\nÙħ Ø©\nu vc\nthe bel\nsunba enim\nstop killing\nstain d\nsoli dity\nshoulder to\nsap hana\nren cont\npur an\npnpp io\no ty\nnew moon\nnecker chief\nmo shenko\nme ireles\nki on\nka pow\nirish history\nholland roden\nhelve tia\nhear st\nhack aday\ngreghunt mp\ngive thanks\nfrontier land\nfranc avilla\nfit mom\nfilip inas\nep irus\near lobe\nea sty\ndray ton\nde ssie\ndam ar\nco work\nchapp ed\ncano ga\nbursas por\nbri o\nbilly graham\nbho sle\nb wl\naw omen\nautor ick\naeri alist\nae reo\nðŁĺĺ ðŁĴŀ\nwhite hill\nwhat makesme\nwal ey\nvillarai gosa\nve i\nv usi\nun reasonably\ntoyo tires\nthirdman records\nthing iverse\nth ami\nsurvey monkey\nsuper giant\nstre vor\nsound checking\nsom met\nscar petta\nroberts space\nreall orraine\nrajyas abha\npun ta\npo om\npax prime\noren dabooks\noc tet\nndhakoo ttam\nmuseumof art\nmom ocon\nmo du\nmedium ship\nmaher zain\nlaksh ya\nk abc\nimpression able\nho bey\nhc so\nharring ay\ngram in\ngovernor tomwolf\ngor man\ngam esa\nfound ling\nff x\neurope forculture\ndra ig\ndefence forces\ncy clin\ncos grave\ncorel draw\nchoo sy\ncbseven ingnews\ncam ili\nbr ang\nbow ral\nbenven uto\nben zodi\nbe ware\nbak kam\nar le\nannihil ator\nam antes\nales ana\nðŁĴªðŁı» ðŁĴªðŁı»ðŁĴªðŁı»\nðŁĩ¹ ðŁĩŃ\nö n\nwy che\nwill enhall\nw anne\nunited against\nun box\ntou cans\ntick tock\nti jer\nst pauli\nro bron\nrichardo sman\nred backs\nrayqu aza\nraff le\npor tree\npol gar\npil o\npen testing\noy en\nowy hee\nott b\no her\nmitt en\nmarga ery\nlauren german\nki miko\njay apal\nj yn\nit movie\nim perfectly\nif es\nhol ing\nhesp eler\nhan abi\nh mw\ngreat american\ngiga om\ngan dia\ng ys\nfury road\nfondaz ione\nex s\nesp nw\ner wan\ndee wani\nco bol\ncity asone\ncgr teams\ncaul king\ncarpa thians\nca el\nbundy ranch\nbuckingham palace\nbasketball cl\naudit orio\naq s\nandrogy ny\name et\nam ae\nak asha\nagio ia\nafro centric\n. ,,,,\nà¸ķลาà¸Ķ à¸Ļ\nõ es\nwrest ler\nvi zi\nun carrier\nto pol\nthe orossi\nsymph onie\nsr kian\nsonys antamonica\nsing star\nshab nam\nseri alization\nsemin ario\nse aland\nsav on\nsak har\nrise together\nred coats\nralph garman\nrag na\nra bun\npw f\nproce ssional\nperform a\npan opticon\np illa\noh so\nnotin myname\nnit t\nnet beans\nmuh te\nmm ell\nmeck is\nmarab oli\nlibt ard\nlef kada\nkay leigh\njac q\nit sab\nind l\nimmort alize\nho res\ngiveaway alert\ngin nie\nfat joe\net sch\nes xi\nelabor ated\nein en\ndunker que\ndu toit\ndri l\ndoncaster races\ndon elson\nde kay\nd magazine\ncre ssy\ncin o\ncil ip\nchi quito\nbyte coin\nbre ga\nbox y\nble n\nanti gravity\nalbu ll\nadv aita\nac chedin\nab nam\nðŁĺĤ ðŁĶ¥\nðŁįij ðŁįij\nz huang\ny acou\nx net\nwe gener\nvas o\nup ended\ntri l\ntran ter\ntk pict\nsun star\nstic ation\nspor in\nsp ast\nsham miya\nscann ell\nsavi ano\nsal ing\nsal en\nrat to\npolic ing\npisto ia\npic hi\npate k\npascu a\nover riding\nor able\noo loo\nnow a\nmo fthe\nmin ote\nmetall ers\nmerge records\nmabu se\nma don\nkine matics\nindi s\nhu o\nho tr\nhal t\nhal dimand\ngreengro cer\nfri sell\nformula drift\nf ism\nequ aled\ne bd\ndnb tv\nda awards\ncool fm\ncoo tie\nchin ua\nbot ts\nbi go\nba har\nba er\naw aren\nap lusk\nanz acs\nan cap\nalon ce\n< #\nı ÅŁ\nyay yyyy\nvin ita\nun cluttered\ntutel age\ntu mp\nthal ys\ntailgat er\nsydney tennis\nswadlin cote\nsuper copa\nsunday times\nsu ber\nstat ers\nsilk worm\nsign writing\nsi stem\nshawn mendes\nself shot\nscrip tural\nsch rager\npunch lines\npuj ya\nprolon ging\npolit ica\npark way\nparaphra sed\np sus\norgan o\nocto gen\nnle sdca\nniec y\nnenele akes\nna sha\nmissmal ini\nmis eries\nmens golf\nmen to\nme too\nmc gillivray\nmc callie\nmanic urist\nma pfre\nkabir khankk\nk mk\nk him\njoss stone\nj re\nir ates\ninter faith\nheartbreak ingly\ngó mez\ngro at\ngie ter\ngel son\nfel ice\nfav icon\nfal lows\nex i\ndrift less\ndog matic\ndigital strategy\nde stiel\ncop ters\ncirc let\nchiar oscuro\nchi pol\nch afe\ncalv illo\nc ssd\nc sia\nbristol rovers\nbo ac\nath en\naltrincham mkt\nalbat ros\nal pen\nak owski\n: (.\nا٠Ĥ\nwing tips\nvo anews\nven able\nvat er\nv vt\ntrac ead\nsweet water\nsw co\nsam it\nresi zed\npluri potent\nny jah\nnatas cha\nmusic lovers\nme khi\nmajik ninja\nmaer sk\nlambert ville\nkl al\nki drock\nkhar agpur\nk ram\njoun ieh\njor dang\nis free\ninsol vent\ni asi\nhu set\nfother gill\nfd tn\nfac tion\nevapor ator\nendocannab inoid\ne migrant\ndrunk pete\ndragon srugby\ndom ine\ndispo ses\nde guzman\ncra in\ncot ts\nconsu elo\ncon formed\ncastle well\nby p\nbox park\nbal ut\nbal akot\najinky ara\nabo b\naaron carpenter\nðŁĺİ âĿ¤ï¸ı\nðŁıĪ ðŁıĨ\nðŁ¥ ij\nãĢ ĵ\nภĺ\nà¤ľ य\nwith al\nwemy ss\nvar ni\ntwitpic your\ntoi delhi\nthir uv\nstac os\nsomers by\nsolar winds\nsh hs\nrecuper ation\nrastaf arian\nphilanthro py\nparenting tips\npa ster\nmort lake\nmil bank\nma iri\nluq man\nloc cit\nletsgo x\nl pf\nkal ma\nja is\nisleof skye\nis car\nin habitat\nhyper spectral\nhincap ie\ngen do\nfu egos\nes waran\ndepo is\nda hn\nd sp\nd lb\ncommer z\nchi quit\ncenter line\ncas als\nborder terrier\nbord bia\nbooz allen\nblack catday\nbig boi\nbaz an\nbas ilio\n; ]\n! ðŁĺįðŁĺį\nðŁĸ¤ âĿ¤ï¸ı\nâĻ ¢\ná in\ny oud\nwe di\nv twx\nuncann y\nu mas\ntw ba\ntim lin\nteng u\nsw ades\nstoo she\nsor bo\nseatt lec\nschool day\nreflexi ve\npublic is\nprabal gurung\npink news\npeter facinelli\npan gos\nordin ated\nor cid\nnintendo direct\nnct dream\nmur phey\nmin ta\nmill brae\nlo lit\nlie ben\nlactobac illus\nkra ig\nko dagu\nkiane gan\nkaz un\nk so\nj alo\nitu d\nho gi\nglove box\ngilli e\ngil ded\ngam era\ngag olf\nfall foliage\nexp elling\ne rez\ndio genes\nclub life\nbremer haven\nboyer town\nbota fogo\nbatter sby\nbas uki\nb ca\nayushman bharat\nautumn leaves\nashish sharma\nashi els\nant ine\nair mass\nai ai\nac ine\nac abou\n: --\nãģŃãģĵ ãģĤãģ¤ãĤģ\nwi el\nwhites and\nw tv\nunbreak able\nteam j\nsub types\nsodom y\nsi ki\nshel ton\nsha key\nsang in\nredundan cies\nred an\npv ris\npow is\npiccal illi\npic hon\npan ag\npalae o\npad let\nolympi acos\nolivi acul\nobserv atories\nnur sed\nna ac\nman so\nma aya\nl ally\nkap u\nkail an\nju h\njabbawoc keez\niz er\nirri gate\nire m\nil led\nhut ton\nfu ne\nferv ently\nfc v\ner re\nendofan era\ndr jillstein\ndi pg\nde uk\ndarrene spanto\nd sch\ncriscy borg\nchante use\nbless ing\nbang ka\nat theraces\nash ridge\nane sh\nam reading\nad lai\nðŁĨĺ ðŁĨĺ\nzimmy deanie\nze ks\nyak umar\ntu bas\ntravel more\nthu mped\ntal ha\nsylvain reynard\nsph ilippines\nshinsu ken\nscri vens\nsco ding\nsch zimmydeanie\nsale sharksrugby\nriseand shine\nris kie\nram en\npune city\nprobinsy ano\npos iciones\nphotom ani\noren zi\nop un\nnach man\nmontag na\nmandi sa\nmal inda\nless ens\nle ute\nle ele\nle ashes\nla sg\nl tn\nkem pe\njur ina\nje ana\njack alltimelow\nip in\nhô tel\nhu cks\nham ma\ngir onde\ngeorge clooney\nge om\nequal rights\ndprincess maja\ndense tsu\ndare bin\ncraigy ferg\nconor mcgregor\ncom fiest\nco dd\ncbs denver\ncb ca\ncalli son\nbring on\nbio ta\nbe utler\nauthori zes\narte contempor\nargent inas\nan anas\nâĸ Ģ\nภ³\nyew tree\nworththe wait\nworld sleepday\nwhar f\nu yl\nswen sen\nswamin athan\nsub contractor\nshoulderto shoulder\nsc j\nsanc tify\nsaipalla vi\nruss i\nrecord ando\nram kumar\nquil mes\nqueer ness\nprosp ering\npercu taneous\nonetough nerd\noj hl\nmon y\nmo tional\nml se\nmeis sen\nmedit ation\nmarine biology\nmandy moore\nmaj ik\nlasd hq\nla ith\nl ph\nknap sack\nje ev\nir g\nindian wells\ngin toki\nforever royal\nfor ky\nevo sti\net zel\nef rain\nder p\nde chambeau\ncul tus\ncon o\ncataly ze\nbuy british\nbam boom\nazpil icueta\nauburn dale\nas fer\nam adi\nacc intouch\n?! ?!?!?!\n/ ,\nðŁĩ¦ðŁĩ ²\nwhodun it\nwar hurst\nwag ggs\nvindol anda\ntum mies\nsun down\nstudi of\nstreet fighter\nsti ger\nssi ere\nsheriff clarke\nsens ational\nsd all\nsc v\nru ssa\nreal radio\nradi onet\nr bn\nquadril ateral\npower pop\nper nam\nour nhs\nob tainable\nnon descript\nn ith\nmir chi\nmars den\nlul z\nke ck\nk hara\njam ba\nhis i\ngy aru\ngirl sof\ngent ler\nflag ships\nfer tig\neuro wings\net w\nes fest\neq nz\nel ys\ndo by\nchin at\nceram icist\ncar rental\ncanad aam\ncam br\nc prs\nbroad well\nbrand icar\nbird watch\nargy le\nange le\nale bri\nzim m\nza an\nximen anr\nvir den\nvic roads\nv go\nunf pa\nun u\ntracead kins\nthan thi\ntech day\nspin drift\ns res\nrat nam\nprop iti\npiazz olla\nou lis\nnor itake\nnom ean\nmargin alization\nmargarit aday\nkil bey\nkevin magnussen\njas na\njanu ar\nhouston ians\nheart bleed\nhadi ah\ngo po\nglen field\ndub bel\ndrak engard\ndj drama\ndeut scher\nde formities\ndau lton\ndab ney\ncruise chat\ncri sty\ncoven ants\ncon sho\nclex acon\nci ras\nchristy chibi\nchicago theatre\ncan can\ncamcor ders\ncalciomer cato\nbutter bean\nbre vet\nblondie official\nblack horse\nback beat\nbab ur\nau jour\nalmo dovar\nag hast\nab ailey\nãĤ¯ ãĥ©\nà¸Ńภģ\nyate ley\ny ron\nve ren\nvanv leet\nutah ns\nupp al\nuni body\nun lit\nun follows\nti fton\nthr in\ntheis mann\nth id\nteam mma\ntae tae\nta yo\nstro bel\nstam en\nsop ra\nsongh ye\nsmart ness\nshell shock\nshak il\nseeyou soon\nsecretary zinke\nse garra\nreck lessness\nper ler\npen netta\npakistan inpics\nov um\noce ani\nn dm\nmovie maniac\nmol ana\nmobil ink\nmass u\nmaric el\nmar duk\nmaj ima\nmac ks\nlun ched\nlsu baseball\nlipp man\nlau zon\nkwin ana\nk wen\nin nam\nhul king\nhigu rashi\nhair dos\ngri zzle\ngo be\ngal ashiels\nfortu itous\nfe ckless\ndiure tic\ndap ur\nconsu mable\ncn as\nclo cal\nchou ston\nchic ana\nchar ney\ncen g\ncav apoo\ncam igu\nbu uuuuuuuu\nbu football\nbo ak\nbnppari bas\nblack series\nbee ley\nban deau\nback streets\nat tired\narab a\napp é\nalex x\naffe c\nad ani\nzon ta\nyou kai\nyo ann\nwy nd\nwith y\nvidy asagar\ntru stin\ntrou pes\ntre mens\ntom welling\nthe kinks\nswo ggle\nswif tie\nsun river\nseung cheol\nscorpi o\nschool mates\nschom burg\nrock hounds\nra ynes\nquir ky\nqu or\npu glove\nplasticfree july\npain management\nna ha\nms build\nmodern ising\nmatch room\nma stro\nlong street\nlong shore\nlet golf\nlein time\nlal as\njacobl atimore\ninstant pot\nin secure\nhv ff\nheuri stic\nhen lopen\ngunter sville\nfe ste\nfarou q\nest ates\neas ily\ncv l\ncrani o\ncourier journal\ncon formal\ncom a\nco ffer\nchurch ills\ncd japan\ncarrief fisher\ncarol us\nc ill\nbryan ston\nbour din\nbil ity\nbig city\nben der\nat oc\napollon ia\nam coll\na ice\nðŁĺį ðŁĻĮ\nðŁį¸ ðŁį¸\nоÑĢÑħ иде\nоÑĢÑħиде Ñı\nyam yam\nyak kopin\nyakkopin ky\nwell ens\nwan and\nvit aco\ntrian gulation\ntip toes\nspread thel\nrevision ism\nre vie\nrat rod\npun net\nphal f\npe pes\npalestin ian\np sn\nop ic\nmill port\nmie sha\nmer cat\nmee m\nmb a\nkl ick\nhaw co\nh sin\nguineap igs\ngn um\ne stra\ncubes ats\ncu an\ncro se\nce mber\ncar min\nbran caster\nbo gummy\nbankof ireland\nban ana\nbac ar\nath u\nat tucks\nat palace\nam ante\nad ang\nç¦ ı\nzu ri\nyo shino\nwoody ard\nwe stridge\nv ought\nun initiated\ntx l\ntuk wila\nteam dignitas\nsustain er\nsu ps\nstorage wars\nstarr music\nst weed\nsav ann\nsarah g\nric kast\nremo vers\nrat rams\nr pp\npharmaco vigilance\npax son\nop seaworld\nomnic om\nnissan leaf\nnew species\nmotor cross\nmo gol\nmishand ling\nmartyr sday\nlay la\nlabrin th\nla weather\nkir ra\nki vanc\nk ation\njun ctive\nj jang\ninside edition\nin super\nimport ante\ni ims\nhan off\nham ar\ngrav att\nglos biz\ngar w\nen rile\ndiet mar\ndi derot\ndeven ish\ncyn ics\nchu ang\nchester mere\nbay bee\nbagh datis\nb ör\nb go\nau lani\nato v\nam ate\nadam sbeer\nachrist mas\n. ðŁĺĭ\n% /\nðŁıĢ @\nðŁ¥Ĭ ðŁ¥Ĭ\níĥľ ìĹ°\nঠľ\nyoun us\nwin dom\nwil fredo\nwi ve\nwhole grain\nvit amix\nv sg\nu dit\nty mp\nt mm\nt caf\nsw ed\nst clair\nselec tman\nre validation\nperfect ly\nparrot fish\npacific northwest\norbit z\nor miston\none um\noliviacul po\nnp cc\nnor iko\nmod der\nmicro film\nmeg gie\nme sab\nmanner ism\nmaic hard\nlucha elrey\nlooney tunes\nkum on\nj man\ninvali date\nin consequential\ni drive\nhouse building\ngü len\ngir lish\ngal pin\nforever freo\nf kat\nevery pony\nevent tech\neven though\nesper amos\neny imba\nem mer\nelev ator\ndun ny\ndu ken\ndream er\ndow jones\ndf es\ncorpor ator\ncolo gic\nclu m\nclairvoy ance\ncastle reagh\nc ile\nbun so\nbrain z\nbi ster\nbbc sussex\nbat ali\nanu el\n® !\nz drav\nyo shimura\nwalsall fc\nvideo tape\nun fairness\ntas i\ntann enbaum\nsti eg\nstephani ej\nsri divya\nsnell ville\nside swipe\nse amed\nsa ada\nry lie\nreth ym\nprogre sso\npen hali\nover sea\nnic olo\nnational rail\nmi thra\nmi go\nmarin ers\nleap year\nkress ley\nkau er\nj kenney\ninter mezzo\nincre dulous\nhipho pp\nhan ash\ngar con\nfic es\nff le\nfaiz an\ndo ac\ndis loyal\ncu g\nchem a\ncann avaro\nc bit\nbron chial\nbraz enly\nbra hm\nbic ho\nberrye ssa\nben jie\nbeis govuk\nb young\nb gu\nayo tte\nak m\nak iyama\najinkyara hane\nafter buzztv\nâľ ½\nya akov\nworld skill\nvi rago\nun characteristically\nu ric\nu pu\ntling it\nthisis not\ntech meme\nsubpoen aed\nstraw weight\nsouth wind\nsit well\nside step\nshu tt\nserge y\nru tab\nro strum\nriver banks\nple gia\npi xie\nphospho rescent\npete souza\nparis review\noned ayat\nofficial keef\nnotone more\nn bo\nms v\nmoun ir\nmonte falco\nmo xi\nmin nette\nmicho acan\nmetropolit ano\nmall i\nly m\nkn es\nke ish\njohn f\njob seeker\niu pac\ninvite es\ninexhau stible\nindi g\nhere with\nhal di\ngo blazers\ngo big\nev eld\net bu\ndre dged\ndetroit ers\ndar relli\ncrohn scol\ncol sen\nclarence house\ncas ado\ncape verde\ncap ac\nby ars\nboat race\nblen der\nbick le\nbi ding\nbelo ved\nbad la\nazur lane\nardnamur chan\naqu avit\napplic ation\nani si\name a\nafter the\naa ic\n. _\nðŁĺ©ðŁĺ© ðŁĺ©\nâķ ®\nyad utta\nvuni pola\ntru die\ntra bal\nthe wonder\nthe planet\nter abyte\ntay schilling\nswis so\nsor ority\nshus engupta\nsati ated\ns gottalent\nrevel ing\nref low\nranul ph\npirate pride\npen tax\npall one\norder of\nor lean\noli d\nnag in\nn tx\nmor an\nmi sti\nmc gary\nman jun\nlyn de\nlong staff\nlo sin\nlo aded\nlake field\nkrakat oa\nkis ka\nkim wilde\nki da\nkeke palmer\njohnshopkins sph\nib ach\nhen nie\nhappen ing\nh ent\ngunne dah\nglady sb\ngen elia\ngaz eta\nfrat ellis\nfra gi\nfor aday\nermene gildo\near thob\ndu ino\ndren nan\ndor us\ndal an\ncri ollo\ncot tawa\ncity west\ncallu ses\nc gh\nbu er\nbra vi\nan fc\nðŁĺį ðŁijħ\në°Ķ ìĿ´\nâĺģï¸ı âĺģï¸ı\nÌĦ )\nys ch\nx all\nwis co\nwestern balkans\nwau paca\nuneven ly\ntw ells\ntric homes\nto su\nti u\nsnape ee\nsha har\nsac d\nrie ger\nri ada\nrevi led\nreas ser\nre den\npower to\npla stik\nphen ol\npen k\npati a\npat mos\npar isa\npag ers\npa store\nnjpw world\nnca atournament\nmuskete er\nmini buses\nlon ny\nlife son\nky gomusic\nkinky boots\nji me\ninfiltr ator\nin voluntarily\nhom elands\ngetit done\ngal á\nfre ja\nfirst take\nenscon ced\nemily vancamp\nembroi dering\neli ott\ndizz ee\ndhe a\ndel ica\ndana her\ncrusad ing\ncom ando\ncog nos\nclam oring\ncine malaya\ncan mnt\nc adel\nbryn mawr\nbr onto\nbr iny\nblu x\nbas news\nartof visuals\naroo stook\naral gon\nand t\nafter school\nadu tta\n)))) )))\nðŁĺį ðŁĺī\nâľħâľħ âľħ\nwim berly\nvw camper\nvin ter\nv sm\nusur per\nunmistak ably\ntriffi ds\ntis bury\nther iot\ntcu football\nsw elove\nstair ways\nspa rent\nsommeli ers\nslee per\nsix to\nseal evel\nrol lei\nrit chey\nrichhomi equan\npra sar\npopu laire\npl ang\npizz ic\nnor disk\nnom en\nmid tj\nmi versary\nmal da\nloath some\nliving legend\nlaryn go\ninter twine\ni play\nharry con\nhand maiden\ngar ut\nfre eney\nfixed andfurious\nextramar ital\nesl proleague\nemma bunton\neast bay\nd ze\ncourvo isier\nclo onan\nce ee\nbron zes\nbrandicar lile\nbo boi\nbluee conomy\nblack flag\nbe heard\nb cla\nare vival\nangri est\namcoll surgeons\nali ft\nab bit\nðŁij ª\nðŁİĻ ï¸ı\nwriters room\nwo d\nwest en\nwest borough\nw dp\nvidar bha\nuu a\nut ada\ntusc any\ntivi sts\nte eling\nsun na\nsla k\nsc pa\nsav oretti\nsat nav\nremember when\nre locate\nre interpretation\npriv ada\nprim and\npheno typing\npal ma\npa pered\nol ton\nohhill yes\nnu tra\nmol li\nmidnight texas\nlu gger\nkabat aan\njitter bug\nim parted\nhudson river\nholo dom\ngo flames\ngn ac\ngaz e\nga hr\ng sy\nfree day\nfly board\nfer rol\netsy vintage\nen ca\ndone yet\ndemol itions\nde su\ncro cuses\ncioccol ato\ncin quec\nchancell or\nbo ic\nbla blac\nbharatanat yam\nbeliev in\nbaw dy\nbat boy\nawild cats\nas fc\name morial\nalli t\nab aga\nðŁ¦ ķ\nyn on\nwallace burg\nves na\nun questionable\ntu meric\nthermonu clear\nthe wolf\nth night\ntest es\nsqu ire\nshaw lands\nshantan um\nsai ram\nrock ledge\nrever ts\nr co\npun cheon\nopportuni sts\nnightri de\nnau set\nmon dale\nmil ledge\nmi kul\nmcal eese\nmalware bytes\nmail sport\nma vis\nllan rw\nkoh samui\nkeep familiestogether\nkat suki\njug end\nj atra\nitali ani\nib dp\nhä agen\nhipho particles\nfrom the\nfrog mouth\nessel dorf\ndu tty\ndre ger\nde gaard\nde coupling\ncun nin\nch ons\nbur gin\nbrune tti\nbroo ds\nbra den\nblue shirts\nalto cumulus\nal ped\nak ira\naj anta\n! ?)\nðŁļ ĥ\nðŁĵ ½ï¸ı\nðŁIJ» ðŁIJ»\nyan sk\nwn ers\nwhat we\nwen ham\ntoo oooo\nthorns fc\nsy er\nswa ths\nsuicidepreven tionday\nsplat ter\nsco by\nsalz berg\ns jobs\nrwand air\nrose bowl\nrezz ed\nrelap sing\nphoto shooting\nou there\nokano gan\noh dems\no logies\nnas o\nmskar inab\nmoz gov\nmetamorpho ses\nlu ella\nla vie\njo ice\nha seeb\ngrey goose\ngoo fs\nfur rier\nfrene my\nern becher\nedf energy\ndy outh\ndie hards\ndi bley\ndarrelli ssa\ncarolin as\ncaf reeland\nbuc n\nbu ro\nbronz eville\nbroken shire\nbra uer\nbon n\nbattle bots\nav alier\nat ured\nalstro emeria\n; ___;\nåħ ¨\nwim dive\nwil kens\nvine y\nvine eth\nviare ggio\numic hb\ntop stories\nthe specials\nstang gang\nss s\nsp cl\nsonom acounty\nsloven ija\nshot ts\nsche ider\nsch auer\ns fer\nrob inette\nriver thames\nre mco\nrbg sydney\nram nation\nraiison ai\nrabino witz\nra baa\npremi os\npon tins\npav o\npau sini\nonof rio\noc ps\nnik kie\nn we\nn tf\nmir co\nma dowo\nlotro family\nleyton orientfc\nkaisers lautern\nin canada\nhumili ates\nhon fleur\nhol kar\nh lb\ngy un\ngun gah\nge isel\ng px\nforeclo sed\nfl aca\ndutch gp\ndic arlo\ndiam ine\ndi j\ncorn husker\ncole co\ncamigu in\nbu ti\nbhagat singh\nbeu kes\nbaro ka\nbar ne\nbandain amc\nbandainamc ous\nal pu\na ben\nzam mit\nyu i\nwa ks\nupad hy\nup slope\ntouch wood\nthe story\nsun ray\nsie sta\nsbag ov\nsales men\ns games\nri mington\nresi stances\nrescu ecats\nre we\nra hi\nr ms\nphoto cred\npgat our\nob ye\nnra show\nnow ski\nng ata\nne ela\nnan ban\nmiddle brooks\nmahabal eshwar\nmag non\nlyn mouth\nlud lam\nlu glio\nlampas as\nkurni awan\nki ko\nk ma\njump street\njis shusengupta\njai shankar\ni ud\ni acs\nhvac r\nhu gin\nharrycon nickjr\ngun play\ngor bals\nger oni\nfree friday\nfos sey\nfolklor ico\nfly dubai\nfen ian\nface to\nel si\ndo vish\ndac us\ncouple s\ncon away\ncaricaturi st\ncardiff met\nbridge tt\nbri sa\nbit map\nbatt ambang\nauto cracy\nðŁĺį ðŁ¤Ĺ\nzi au\nwg na\nwer f\nweneed diversebooks\nwa aaaay\nvi ja\nuss f\nun diluted\ntr v\ntown sville\nto st\nsky running\nshutt ling\nseamus dever\nsch all\nsave bangladesh\nsal ander\nsad owski\nrobert j\nprin tz\npar ai\npaci fy\nor moc\nolong apo\nnorth shore\nnebrask ans\nne ft\nmcgr ory\nleighj alland\nlap els\nku opio\nkov acevic\nking ship\nkel and\nkat ainen\nka appa\nil ic\nheli opolis\ngote borg\ngom bak\ngi bs\nfi ora\ndoug stanhope\ndo ds\ndesig ning\nd ander\nclock work\nci gal\ncham orro\nca is\nbu it\nbreast fed\nbio safety\nay ck\navi ans\nauto corrects\napp arte\nðŁĺĤ ,\nãĥ¼ ãĤ¹\n௠Ĭ\nwomens football\nwin ne\nwh iotv\nvo iture\nve stry\ntriglycer ides\ntol leson\ntip top\nthis sss\nthel an\nthe steve\nsuper charging\nstephanie abrams\nsp aci\nsch noodle\nsail ly\nsab is\nru gger\nrati mes\nra vo\nr pn\nputt ing\npost in\npm lunch\nplan b\npi pette\npen tre\npe quot\nparaly zing\nnasa juno\nnano structures\nmyer scough\nmskristin kreuk\nmoose head\nmil lage\nmal te\nlam da\nlam be\nkhan um\nker mit\ninsemin ation\nin nn\nho bs\nhel ford\ngum drop\nger bils\nfrug ality\nfiel dof\nentor noi\nen dos\ndiar ra\ndead sea\ndat ura\ndam ai\ncommiss ar\ncla fout\nchill an\ncau ayan\nbuccle uch\nblu mer\nbitt man\nbb ish\nb tb\nau reo\nani sha\nangan wadi\nang kor\nahmad u\nafflu enza\nðŁĴļðŁĴļ ðŁĴļðŁĴļ\nì »\nâĢ¦âĢ¦ âĢ¦âĢ¦\nzab riskie\nx om\nwie ber\nwal berg\nven timiglia\nvau cluse\nun focused\ntbur soni\nso bey\nske han\nsk ua\nshau l\nsax o\nreal shoaibmalik\np blchat\noutwar dly\nnofly zone\nmu thu\nmin nis\nme sop\nmarcan thony\nmacie j\nludic rously\nkat vnews\nkak inada\nk lar\njai ho\nj kovic\ninstrument alists\nin atur\nhomec oo\nhol mes\nforthe holidays\nfel sted\nfeeling good\ne gging\nduc tile\nduc ale\ndiri gida\ncolour ways\ncelebr ando\nbrun ell\nbrain stormed\nblack box\nberlin phil\nbe bek\nbbc newsnight\nbaby boomers\nallu arjun\nall ato\nac ol\nab ridge\nab la\nðŁĴĻ ðŁıĪ\nðŁį° ðŁį°\nåĨĻ羣 æĴ®\nwool ford\nwo wo\nwo th\nve ka\ntw f\ntri gun\ntr aralgon\ntor x\nto bruk\nthe legomovie\nted lieu\ntand u\nt fest\nt enga\nsky zoo\nsa asports\ns england\nri zzi\nrhy med\nr fra\nplou ffe\npit i\nop an\non ha\noff f\nmon ik\nmon al\nmilit ar\nmccaf fery\nmb assy\nlp live\nleaf snation\nlati fa\nká¹Ľ á¹£\nkod joe\nkle i\nkis ki\nke ble\njig gle\njeep wrangler\nh dg\ngo bigred\nger ties\ngal atea\nfood drive\nf ani\neme lec\nely se\ndrum corps\ndo ire\ndemet özdemir\nda her\ncriver side\ncrack pot\ncollision conf\nchal upa\ncele bs\nbul gar\nbr once\nbham citycouncil\nbaldess ari\narc am\nah lam\nafl draft\nðŁĻı ðŁĺĬ\nðŁ¥º ðŁ¥º\nå³ ¶\nwunder kind\nwn z\nwarrant less\nw pm\nw mar\nuval de\nun deserved\nu yu\ntt ough\ntru itt\ntre ty\ntoyo tam\ntit is\ntel fair\ntejash wi\nstat esof\nstan well\nsp ada\nshor tz\nre styling\nre primand\nre compen\nr inn\npra kan\npolar isation\npil as\npega sister\nover react\nover hanging\nou uu\nou ple\non elife\nnier automata\nnew ley\nmor ang\nmccol gan\nmat an\nlon oke\nlau dat\nla von\nkra ys\nine ment\ngu b\ngrey scale\ngo solar\ngalaxy sedge\nfr acked\nfebru dairy\nex tol\nedgarallan poe\ndr david\ndie sen\ndi stefano\nderry cityfc\ndebu chy\nde hydrating\ncu ffe\nchu i\ncas p\ncar stairs\nbug ler\nbucu resti\nbc bg\nbaw ah\nardi les\nac tie\nðŁ¤Ł ðŁı¼\nyoko zuna\nwoo key\ntru ax\ntel om\ntech trends\nsw stheband\nstor res\nso ames\nsni fter\nsheet music\nsav ana\nsali x\nrobert deniro\nro tis\nrhin elander\nred shirts\nram age\npol oni\npluri bus\npeter pan\npen nie\np live\nover land\nor feo\nnic ek\nmor ir\nmix x\nmie ke\nme aghan\nmazz ola\nle du\nland ol\nkib butz\njava ee\nj den\nian wright\nhaber korn\ngavi ria\ngas lamp\nfu ror\nfirstworld war\nfen ny\nf dg\nend c\nelement ary\ne trian\ndit t\ndistill ate\ndestabili zing\ndad ri\ncomer cio\ncomedy central\ncav itation\nc ó\nboiler room\nbick ford\nbett ym\nas anta\naj staff\nadro it\naccor ded\nðŁĮĬ âĺĢï¸ı\nwhati do\nwe tton\nv ri\ntro xy\nthe mi\nt mag\nsrini vas\nsport scotland\nspeaker phone\nsho down\nsh apps\nscoo king\nsan dip\nro di\nrail yard\nq ari\npoten za\npolit buro\npi gg\nperpetu ity\npar lament\npal ani\nover work\nourhome bts\nott is\nogall ala\nny cb\nno ts\nnis kay\nnew play\nne aarts\nmc gla\nma fs\nlu pone\nlo bi\nle red\nkor ir\nkel liber\njohn isner\nilling worth\ni ui\nhumble brag\nho gg\ngo yo\nformula one\neras mus\nenricom olinari\nelection ske\ndouble trouble\ndev ours\nde generates\nd models\ncheong sam\nbaro que\nat ower\naffor ding\nad ate\nðŁĩ¨ðŁĩ ´\nwim pole\nwh ish\nwaian ae\nvisit finland\nturn downforwhat\nsp lot\nsexual health\nro cs\nriver stone\nri squ\npoun ced\nphoen icia\npeace making\npatient engagement\noz aukee\noffic elife\nnews goldcoast\nneuro feedback\nmoon ie\nmcgill ic\nmc cra\nmarti jn\nlabou m\nla du\njon atan\nji ki\njam ali\nito day\ninner space\nhydro static\nh ppy\nft c\nfriends forever\nfriend z\nfree charge\nfish nets\nevalu ators\nesch atology\nedu k\nd win\ncross er\ncrawl space\nclayton kersh\ncheck box\nav otes\nau da\nan jal\nalay na\nal maz\nade sanya\nðŁĩ¬ðŁĩ§ðŁĩ¬ðŁĩ§ ðŁĩ¬ðŁĩ§\nì ³\nâĺº ðŁĺĺ\nx ray\nuniverse today\ntr ing\ntor iam\ntoi indianews\nti sch\nsing ler\nsigi riya\nse pi\nrei ji\nre all\nravens burger\nple dger\npk subban\nphotoof thenight\npete hegseth\npam plin\noutsmar ted\nnet minder\nmer amec\nmain line\nley burn\nlen ard\nkha il\nk bb\njust ise\njunk food\nju tting\nji k\nhi h\nhar asses\ngri zed\ngra hn\ngod den\ngeop end\nfuku da\nfru gal\nfre ear\nf enti\nen fp\nei th\neast london\ndan electro\ncrun ched\ncod ghosts\nco teau\ncnbc africa\nclu buk\ncarlo ta\nbush master\nbelli ssimo\nbel z\naudi en\nau chin\natta c\nast and\nartex hibit\nanat omic\nalman ack\nðŁĺĦ .\nðŁĸ Ĵ\nðŁİīðŁİģ ðŁİĪ\nâĻ¥ "\nॠĤ\nyyyy yyyyy\nu tters\nu erto\nu dio\ntur fs\ntake my\nsocial club\nsmur fette\nsexy back\nserv ite\nscience hub\nsb way\nsas u\nrum sey\noper ade\nnwan kwo\nnew belfast\nnever not\nmaster piece\nkho za\nke res\njan nie\njames reid\ninsta size\nhoar ded\nhir scher\nhigh snobiety\ngrun ting\ngofor gold\ngi vi\nflu gha\neo sinop\nddf tennis\ndal les\ncro sse\ncorn starch\nconsho hocken\ncom posted\ncod worldleague\nch ta\nblake ley\nbartol ome\nbab os\nanthon ynolan\nair patrol\nðŁĺĬ ⾨\nwom yn\nwest pac\nvictor ino\nv um\nv tb\nun appealing\nuh v\ntx wine\ntusk sup\ntram pling\ntou re\ntou quet\ntostad as\ntonythe sharky\nth aa\ntar por\ntang s\nsu ger\nstra sser\nsouth bury\nsom bras\nshand wick\nsc ip\nrout ledge\nri stretto\nreal ale\nphillips burg\npett ine\npalli ser\nout station\nolajide bt\nnor cia\nni hl\nmonster palooza\nmis shapen\nmidtj ylland\nmi yako\nmel ale\nlocal ism\nlet live\nksi olajidebt\nko ston\nk sr\njodre ll\njacob y\nizz ah\ngor khal\nglori fies\ngali lei\ngal los\nfrizz ell\nfinns law\nfe ms\nen jol\nelaz aro\ndon agha\ndi smo\ndam mit\ncredit on\nconcentr ation\nclosing ceremony\nca ine\nbay port\nany u\nan king\naku ya\naj pw\nab ndp\nðŁĩ¹ðŁĩ ¹\nyouth voice\nwy ss\nwool ly\nwhir ly\nwesth ampton\nwalt zes\nvill eroy\ntoronto library\ntorbay hour\nti thing\nthumb elina\nthrif ty\nsub sides\nsteam works\nru ach\nre dic\now ler\nnapo ca\nn olo\nmess iness\nme ira\nkianegan wl\nif taar\ngood girls\ngi ef\ngen icity\ngar nier\ngag op\nfrankfur t\ne ban\ncreation ent\ncr sng\ncircum navigation\nchristen dom\nchapel hill\nbor ax\nberyl lium\nbad der\naustin basis\narca di\nan bu\namber gris\nadorn ments\naber aeron\n_ #\nï¹ ı\nê¶ Į\nå¿ «\nâľħ #\nâļ«ï¸ı âļ«ï¸ı\nzechar iah\nwesty orkshire\nwell done\nwe zi\nval tell\nun aided\nul time\ntur turro\ntis me\ntat sumi\ntar heel\nsub stations\nsu rab\nste eds\nsp ittin\nshinge kinok\nshi vu\nshef ali\nsal ters\nrome u\nro mps\nro mare\nred book\nrece des\nreact native\nq ns\noli vo\nofcal dub\nnu do\nno bile\nne whe\nmu tes\nmbab azi\nmati p\nmag ali\nlov atic\nley y\nle mente\nlast chance\nko wal\nke ek\nkav it\nkaras wisher\njoem cel\njay dee\njab dulkalam\ni id\nhorse tail\nhit record\nhill en\nhighe red\nher li\ngru en\nge te\nfou lard\nflyn avy\nfled glings\nfi ya\nferman agh\nen ov\ndon tre\nco be\ncal ne\nbat y\nbarbar amills\nbak so\narba az\nan pan\nan ai\nafric abiz\n( ?\nðŁIJĬ ðŁIJĬ\nâĢ¼ ï¸İ\nxilin x\nwhynot us\nwe ho\nwar de\nv are\nute p\nupl and\nthir sting\ntaw fiq\nsu ren\nst wo\nsqu ab\nsimple ton\nsi fted\npra tham\npay an\npa ez\nosc on\nnytimes books\nno stro\nnev ado\nnay antara\nnatural health\nnas wamy\nmo chis\nmk bhd\nman ey\nlu ma\nloveli braries\nla so\nkiefer ravena\nkat sumi\njohnny gargano\ninju rious\nine o\nimplic itly\nhu alien\nhoo ped\nhigh clere\nhey violet\nhe ian\nha ath\ngm hc\nfore arms\nfer ny\nen vision\nen raptured\nemer al\ne bi\ncorne jo\ncommun ing\ncedar burg\nce ph\ncam ero\ncabo olture\nblon ds\nbar ish\narmi stead\napri mary\napo sto\nacom edy\nðŁĵ¸ #\nwriters block\nwarat ah\nvers ic\ntom thewanted\nther adio\nsp row\nsiva ji\nru tten\nration ally\npar te\nopol itan\no jama\nnose dive\nnone w\nni osh\nna as\nmyceli um\nmor oz\nmonster hunter\nmerri am\nmaum elle\nlyric opera\nlutter worth\nkron o\nker ma\njuxta poz\nj sk\ninj era\nindi ac\nhu ach\nhd fc\nhak ur\ngug ino\ngl or\nging ko\ngi ggled\ng isd\nfl yy\nfen ella\nfearne cotton\nfar ha\nf kf\nexport ing\nexplore mb\nes for\nent ente\ndown field\ndol gel\nday sin\nda st\ncrowd funder\ncompe ti\ncode breaker\ncla rens\nci bolo\ncater in\ncari boo\nbook plugs\nble eker\nbig ge\naz ian\naw restling\natul ations\napollo theater\nag itate\nab ird\nðŁĺĺ ðŁĴĹ\nðŁİĪ #\nâĿĦ âĽĦ\nâļ¾ï¸ı âĿ¤ï¸ı\nynlle th\nyel p\nwhi pper\nvote ph\nvat ore\nusat f\nuh mbt\nthat girl\nthal esgroup\nstop gap\nsto so\nstepla dder\nspare ribs\nsi mp\nshadow play\nser in\nsecon ded\nscot thall\nrvad ine\nruck a\nrow der\nriver ine\nrik ki\nradi okc\nra chi\nprofit eers\npp q\npor ium\npolynom ials\nple ee\nphlebo tom\npear sall\npam ela\noli vares\nnor te\nnano tube\nmar mi\nma gui\nlisam arie\nle mming\nla hari\nky sportsradio\nkk ur\nkelliber glund\nk ents\njoshu at\nif bb\niaff newsdesk\ni leen\nho ax\nhapp ie\ngar rod\nfrom scratch\nevoc ation\ndrewest ate\ndone z\ndam my\nd tu\ncha ar\ncasta ic\nbon elli\nbo jack\nbesee ch\naw ai\nau tun\naly sha\nain f\naf ate\níĶ Įë\nãĥķãĤ§ ãĤ¹\nಠ³\nyouare notalone\nyash in\nwhit worth\nvi rage\nveri der\nthe godfather\ntame ka\ntad hg\nswami vivekananda\nst witter\nsqu alor\nspruce grove\nsnow suit\nshi ori\nsh ilo\nsan aullah\nsa wai\nro ssie\nrizz le\nrhy sme\npeppe rell\nony i\no el\nne dd\nnaz ia\nnavrat ilova\nnar an\nnam u\nmul berry\nmagno lia\nmac duff\nlu ego\nlaw ren\nla scru\nkam ma\njimmy page\njc cc\njag z\nimplo res\nhur rying\nhappybirthday louis\ngu thri\nge sell\nge ee\nfilms notdead\nepine phrine\ndu mba\ndra ya\ndhy an\ndeath valley\ncoo ol\ncontamin ating\ncolla zo\nclimate action\ncapital isation\nbre zh\nbouff ant\nbor don\nback haul\nav tar\naho ya\nablanc a\nabidi factor\n!!!! !!\nðŁIJĺ ðŁIJĺ\nðŁįº ðŁįº\nåĿ Ĥ\nwood crest\nweak ly\nver vet\nver ner\nver mel\nvaldis ere\nuni mog\nton ny\ntom tom\ntl h\nter ization\ntel ome\nsocial housing\nscho eman\nschi er\nsat ch\nrhon da\nrashe eda\nod di\no ita\nnt chat\nni aga\nmir allas\nmatte orenzi\nmagi ster\nkun de\nku mu\nkhich di\nk scope\nk ado\njames dro\nj rr\ninsight moments\ning is\nindi af\nin firm\nh bi\ngri st\nfe g\nef ta\ndestin ed\nde cluttering\nclergy man\ncler c\nclassic rock\ncave ats\ncap on\ncam pe\nbilli ken\nbe zu\nayl sham\naye ga\nart man\nanglo phile\nâļ ĸ\nz mir\nuc ps\ntyre ek\ntwer kin\ntre et\nthwar ting\nteacher problems\ntat ras\nsyn cope\nstall holders\nsports law\nrise above\nrema de\nra gas\npre war\nport side\npo sti\nphe onix\npett itte\npen ia\npe eves\nol shop\nod ell\nnu tty\nnat acha\nmun cle\nmorin ville\nmol ting\nmc gwire\nmas lany\nmalm steen\nlee way\nl po\nkill deer\nk team\nja q\nj aff\nitweet museums\nid pol\ngo bier\nfp so\necar ter\ndream pop\ndra go\ndon buri\ndigi fest\ndeath less\nde di\ndan ton\ncou pler\nch ng\ncal das\nblack belt\nball nyc\nba ghe\naviation daily\nand ini\nama al\nam ira\naha a\nðŁĴļ @\nਠ²\nza x\nv sk\nun im\ntu atara\ntt ag\ntan ehis\ntanehis ico\nstell acre\nspir ited\nserv us\nscott sville\nro ches\nre arrangement\npung gol\npo ivre\npig pen\nper ation\noutstand ingly\noh bm\nnn taleb\nner dist\nna hum\nms state\nmor tician\nmel os\nme ti\nmar kin\nly k\nluck now\nktn v\nklepto cracy\nkenne bunk\nju gend\njol aburnett\nj jc\ninou ye\nign ition\ni ima\nhope less\nhodg kins\nge th\nfir at\nf dk\nex tolling\nei fert\ndivul ge\ndeter mini\ndei mos\ndam aris\ncr aco\ncor dy\nclau del\nck ton\ncityof boston\ncere mos\ncarlit os\nbrass band\nberto ia\nbent a\nb have\naw rence\nas ci\narchitects jrnal\nann yt\nann nn\nameri go\nah ana\naccur sed\naar av\nðŁĺĦ ðŁĺĦðŁĺĦðŁĺĦ\nðŁĴ£ ðŁĴ£\nzis sou\nyou reyes\nwag le\nvi bhushan\ntv c\nturn down\ntt age\ntr d\nte fal\nt ver\nt smc\nsuper structure\nspi got\nspeed kills\nsou derton\nskip the\nsil sbee\nscri bd\nsa wa\ns anni\nrotham sted\nrobertsspace ind\nrigor ously\nr ori\npotawat omi\nplay out\npas ang\np elli\nouston bill\not tica\none man\nnor then\nno id\nnis qually\nni ved\nnew grounds\nn ÃŃ\nmor gado\nmc dade\nmaq bool\nmain tainer\nmag ines\nlubric ated\nllande ilo\nlar on\nkop er\nkhil ji\njoemcel derry\ninti mates\ninstac ool\nino hio\nim acs\ni fit\nhot star\nhij rah\nhe modi\nguy kawasaki\ngif ty\nfre em\nfr ater\nexpe dient\nergonom ically\neph oustonbill\nen amore\ndon ts\ndissoci ative\ncontinu ou\ncollabor ative\ncleve rest\ncam pinas\nbudd hist\nbrin ley\nbla in\nbbc new\nbay on\nbar tle\nax c\naq at\nap om\namar tya\nalo kesh\nag glomer\nac tros\nye olde\ny itzhak\nx or\nteme scal\nstr acci\nstar chy\nsel lo\nscar p\nsan doz\nsa hota\nraw ley\nradio graphers\npet ts\npet shop\npet sch\nopha gy\noff ically\nnandam uri\nmuzzle loader\nmo har\nmarco tte\nlun atic\nkk w\nkil ted\nke vic\nk fs\njohn krasinski\nhill cats\nhen ni\nhandson learning\ngrin ners\ngraci ela\nfri dley\nfe ted\ndo bre\ndemon izing\ncomm itt\ncode share\ncastig lione\ncap onata\nbud die\nbuck o\nbra ult\nbi alik\nbhu j\nbal een\nan avenkat\n. ðŁĴĹ\n. âĺº\nðŁıĨ ðŁ¥ĩ\nìĿ´ì ¦Ī\nãģ¦ãĤ ĭ\nz m\nwe tten\ntz mann\ntu gh\ntra ut\ntion of\nthought fortheday\nthe field\nsuper iors\nstere ok\nsource books\nsour beer\nsob ha\nsil berman\nsi ero\nshu riken\nshop house\nshari f\nsee theworld\nse fa\nscu gog\nsc rn\nryo suke\nrr sp\nrot fl\nri pley\nre mick\nr lm\nqueere ye\npur port\nplu mas\nplanet fitness\north west\nof cr\nneg ombo\nmot ility\nmodul ating\nmm sm\nmcgu inn\nmb n\nman soura\nlimit er\nli j\nká¹Ľá¹£ á¹ĩa\nkry sta\nkrist all\nkariz ma\nkam pal\nk sk\nj ra\nimmigr ate\nhuck le\nhood winked\nho tele\nhitrecord joe\nha ine\ngro veland\ngoogle io\nfunny ordie\nfree styling\nfer g\nebay us\ne hrs\ndennis elazaro\ndem itas\nchilla xing\nchick am\ncher vil\nch yn\ncarto ony\nbri sson\nbookie bashing\nblan ked\nbe held\nbad akhshan\nb ve\natt in\narn age\nangel man\nandthe city\nad ve\nðŁĽ ¶\nðŁĽ ¡ï¸ı\nðŁijĮ ðŁĶ¥\nðŁı Ľï¸ı\nðŁ¤¦ ðŁı¼âĢįâĻĤï¸ı\nà¹Ĥ à¸Ķ\nठĩ\nÙĦ بÙĨ\nze meckis\nwil burys\nwaste iton\nwar farin\nv yy\nv spit\nunder dog\ntransa via\ntopp les\nten uta\ntatatru sts\ntac kett\nta wang\nt iler\nsol ara\nslive at\nscho tten\nschap iro\nsan an\nroo depo\nro gier\nretro actively\nredribb on\npa hal\nol lective\noc co\nnote cards\nmb on\nma pr\nlal ala\nlach ine\nkirkin til\nkan ovic\nkal at\nk cac\njo cke\njau n\nhoo ba\ngol fo\ngiu sti\ngh anta\ngg ings\nfood tour\nfood stuff\nfiestab owl\nfesto on\nf ale\nesp agne\ner inn\nel ax\neb ates\ne vie\ndover court\ndefen der\ndav ros\nd lg\ncorpor a\nconju gal\ncon dra\ncompe te\ncheo hospital\ncas illa\nbur ston\nar sha\namhar ic\namber ley\nal waleed\nal tr\nâĸ½` )/\nঠŁ\nyar ratrams\nwann eroo\nwa cht\nvalle ly\nten na\nstory ville\nsteve o\nss entials\nsolic its\nsho m\nshe athed\nsan juan\nsac tive\nrose mead\nre stocks\nper seve\npedago gies\nover charging\nolo pez\no reca\nmy house\nmust love\nmicro greens\nma zo\nle eper\njim bo\nitiner ant\nir radiation\nintothe spiderverse\ninter bank\nhalloween movie\ngy uri\nglori a\ngi dley\ngho tel\ngett ys\nfu cc\nflow restling\nfle ck\nfl ander\nfire itup\nfe stering\nfaryaltal pur\ner dahl\ndumb foun\ndu esseldorf\ndown link\ndarwin ian\ncrissc ro\ncor rina\ncle fs\ncity market\nbroom hill\nbelling cat\nbag at\nb gg\nate y\nas mus\nalet tori\nak lan\naesthe tica\na out\nãħ ħ\nÙĬ Ùĩ\nwor n\nwhole hearted\nwan es\nvideo conference\nus coastguard\nup church\ntw addle\ntuil agi\ntopp rog\nteam ster\nsusan sarandon\nsu mas\nsreeni vasan\nsol r\nshare aholic\nshal er\nse idler\nsc avenger\nsar sapar\nsap uto\nroyal holloway\nreinst ating\nregion alism\npulw ama\npri macy\npin sky\npat ellar\nouri st\nnough ties\nmous asi\nmor fa\nmin elli\nmeur sault\nmed line\nmas bate\nmar voree\nmaine for\nlo gro\nlmk moviemaniac\nliter ature\nlife uk\nlief de\nlhh ny\nlaval in\nkome dia\nko tab\nkhar y\nkau a\njes i\niro z\nhilde brandt\nher to\nhe yy\ngov abbott\ngod wits\ngl bc\ngare t\ngalli ani\nfree ajstaff\nfoli o\nfli ka\nf issu\nev ir\ne sus\nden yer\ndad dario\ncontemporary romance\ncol ler\ncoale sc\nclafout is\ncho wan\nchare tte\ncere bellum\nby ford\nboro silicate\nbla bber\nau ras\narou sing\nalexander platz\nadver bs\níĭ °\nzu hair\nvol cs\nur bant\nter cera\nte ye\nswamp scott\nsundar bans\nstru tt\nspeech writer\nsp rod\nskid ded\nsilver a\nshav uot\nsci fic\nschen ley\nsam aria\nsac republicfc\nretrac ts\nredro ck\nre doubt\npier ro\npere a\noc sc\nnow bath\nnotb ad\nnom os\nmoncri eff\nmeme history\nmckend ree\nmask er\nlay ar\nkha qan\nkeyne sian\nju dah\ngo green\ngi om\nfo cal\nflour less\ndry january\ndis se\ndel hai\nchampion nat\nbou tros\nboere wors\nblind sided\nay or\nasap mob\nar monk\naddle stone\naar de\nâģ£ âłĢ\nwax haw\nwai pa\nvr v\nver ville\ntri ghts\ntrade center\nthaic oup\nt mac\nstri via\nstrath co\nstra des\nsponge bob\nso th\nsen sed\nsel alu\nscru bbers\nrwn j\nroman off\nrobg macfarlane\nri gu\nri bbing\nredskinst alk\npe dest\nomic con\nno ce\nmy girls\nmatch worn\nmass art\nmarc jacob\nmagnu sson\nmadef ur\nmachine gun\nlor ton\nlily aldridge\nless ard\nleg ate\nl ä\nku cin\nknu te\nkhlo é\nju p\ninfl ames\nimp i\nic ep\nhudson ville\nginni fer\nfor people\nf yl\neli o\negg s\ndir ge\nddp yoga\nconcentr ator\nclassic traction\ncharm bracelet\nchamele ons\ncas alettori\ncandacec bure\nc sl\nblan ch\nba bee\namericana fest\nalwayss unny\nalong with\naline a\nais ne\nacqu aint\nabb oud\nab ric\nðŁIJ Į\nðŁ¥ İ\nzacu to\nyello whead\nwi ek\nween ey\nturbo charger\ntakeme out\nstock twits\nstam aria\nsonic boom\nsky bridge\nschu ette\nsacri legi\nruby ph\nregu s\nquest live\npy lori\npurcell ville\nped ant\npe toftheday\npal mar\nopale scent\nob ito\nnew age\nneglec ts\nnational library\nnash snewvideo\nmt nug\nmarlon wayans\nlu lla\nleep ing\nlec raft\nlandscape design\nlanca shirehour\nlac quers\nkha yyam\nka beer\ninstig ator\ninfen wa\nhemorrha gic\nhell mann\nhel g\ngri se\ngraffiti ed\ngood health\ngood guys\nget outand\ngammal abs\nfru ita\nfr f\ndrive sober\ndirec tedby\ndel phi\ncont es\nclay gate\nchill y\nchal te\ncen otes\ncam bell\nbrett king\nbobc ay\nbar bier\nauto clave\nas able\nao ki\nanic ole\nami ans\naj as\nag old\n... ;)\nÛ ¶\nzen berg\nwm hd\nwe imer\nvir ging\nverdi gris\nvent ral\nvar ys\nun realized\ntto es\nton neau\nthing ies\nthe aftermath\ntac on\nsyno ptic\nsul fu\nst cc\nshe ab\nsesqu icentennial\nscul pts\nscor ner\nsatch mo\nrit as\nrestaur ateurs\npsal mist\np ssa\nnor o\nneh ru\nmuell ert\nmu sim\nmilag ros\nmeri vale\nmend is\nmas r\nmalli kar\nle ea\nlamb chop\nkyo sho\nk need\njel en\nirishtimes sport\nino vich\nig at\nhorn beam\ngare e\nfrank dangelo\nfly leaf\nfag in\ne inem\ndun donald\ndrows iness\ndak in\ncross words\nconqui sta\ncongru ent\ncom al\ncle ck\nch merkovskiy\nbu she\nbridg eland\nbor gnine\narmer ie\narch on\nap la\nane gan\nak ina\n" ðŁİ¶\nëį Ķë\nwood bin\nwit ten\nwheresw ally\nwh alum\nu windsor\ntit chfield\nthex factor\nthermo genic\nta dema\nsw pa\nsuper cells\nsung jin\nste h\nstag gs\nson ning\nsk ratch\nsi eck\nsegre gate\nsal ak\nsag at\nsaf ed\nre kor\npublici ze\npo sit\npl g\nme vag\nman nin\nman hwa\nm â\nloving kindness\nl haynes\nkp bs\nklo tz\nklg and\nkl rahul\nke da\nkawor u\nji k\nhol lies\nghe ad\nfertil isers\nel itec\ndocu men\ndiamond league\ncondon ing\nco td\nco debase\nchev in\nbritish basketball\nbiopharmac eutical\nbat ons\nbai les\nbab bo\nautom atic\nati ku\namer a\nac tra\n" âĢĵ\nðŁĺ´ ðŁĴ¤\nðŁij© ðŁı¾âĢį\nà¹ĥ ห\nॠ¥\nzo ar\nwel d\nun attached\ntu co\ntre mura\nsub duction\nslu shies\nsla zenger\nsad dled\nrock pile\nris ke\nrealradi kaa\nqatar gp\npuri sts\nplai stow\npat roller\npas anga\npa ils\none piece\nol athe\nneighbour hood\nnav ox\nn alla\nmiamis burg\nmar anda\nmakat on\nmagnifique france\nma guin\nlake como\nl bardugo\nkiel burger\nkaz umi\nkar issa\njo ki\njag i\nit cnews\nindependent film\nge est\nforce indiaf\nfor cen\nfe br\nfarm worker\nfar low\neduc ator\ndespat ched\nche tto\nbrom eli\nbro y\nbrexit vote\nbond holders\nben nel\nba ink\navol leyball\nantel opes\nable ism\nðŁĩ¬ðŁĩ§ ðŁĩ¬ðŁĩ§\nÙ ¡\nа Ñģ\nwoo ed\nwh Äģ\nwat es\nun ker\numbrell amovement\ntravel oregon\nthi seid\nthe spec\nswat ter\nsarco idosis\nro ig\npres splay\npontel and\npharmac okine\noye z\noptimi zations\nomand m\nof elia\nn ood\nmy fav\nmi seleccion\nmedium format\nmal y\nmal ar\nmain tain\nlin sky\nlilli put\nleven thal\nleeu wen\nled lighting\nlakedistrict pr\nkundali bhagya\nkep ner\nkath mandu\njoel madden\ni pur\ngood all\ngay marriage\nfre und\nespo s\ndr ps\ndncle ak\ndal mia\nda gh\nd mrc\ncro we\ncover crops\nconcert tickets\ncinquec ento\nchri sley\ncamp fire\nc qb\nbrett lee\nbody works\nbio statistics\nbell arine\nbattle toads\naz sen\nav p\nastri de\nalevel results\nal be\nab dou\na athletics\n. ðŁĴĽ\nðŁĮ» ðŁĮ»\në¹Ħ ìĬ¤íĬ¸\nà¸ĩ าà¸Ļ\nwind stream\nwi u\nwestern most\nwear house\nwar bucks\ntravel photos\ntom and\nto liver\nspet ses\nsolidi fying\nsi qui\nsi im\nshopp es\nshari ff\nsar m\nrow boat\nri gon\nrebe ka\nrain storms\nr rexpress\npo kk\np ted\noz comiccon\noa key\nnw sa\nnc sl\nnandit ath\nmyster ium\nmclen don\nmary landers\nmargaret cho\nmal abon\nlot so\nlauren conrad\nlar in\nko sky\nker ner\nk vin\nju ha\nju ego\nintermin able\nil sa\nhum dinger\nha diya\ngirl guiding\nghan em\ngel ish\ng pas\nfokker dude\nfat ties\ndrum head\ndi atom\ndetective pikachu\ncor vettes\ncop ali\ncommon ers\nche kov\ncard making\ncan pl\nbrit z\nbig day\nbetwe ens\nbe sta\nbc w\nar kan\naj ga\nai as\nðŁĻĬ ðŁĻĬðŁĻĬ\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤ\nðŁķ ¢\nðŁĴĢðŁĴĢ ðŁĴĢðŁĴĢ\nðŁı Ķï¸ı\nwa seca\nvi stic\ntam pax\nstring y\nstore fronts\nstellacre asy\nsom nia\nsin america\nshovel er\nsc lc\nsant an\nrit aco\nrestaur an\nrecording acad\nre ys\nram shackle\nr weingarten\nr ital\npar lez\nnoy ce\nnhl devils\nnational security\nn be\nmur si\nmun t\nmohic ans\nment um\nmc taggart\nlu sts\nlead better\nlam entation\nkom unews\nkis mayo\nkikwe te\nhexag ons\nhe dged\ngreen finch\nfic ht\nfav ase\never sley\net am\nes muellert\neast village\ndor ito\ncz ek\ncollegi ans\ncn comusic\nchar le\naviate addict\nat ac\narlington va\naldu bon\nacade mie\nable ton\nìĬ¤ íĬ¸\nëĵľë¦ ¼\nı r\nyaman ashi\nx rf\nwichita state\nvit as\nu ams\nting ley\nti ft\ntheoffic enbc\nta rena\nsuther land\nstudent loans\nskir k\nsidharth malhotra\nscot gov\nsarki sian\npost marked\npnc bank\npg d\npatho m\npaleonto logists\npack horse\norient alism\nontario travel\no ssi\nnpr news\nnl bm\nni eld\nne ms\nmy style\nmercado jen\nmeh fil\nmcc une\nmc stay\nle ucine\nkore gaon\nko lolo\nken an\nkeen ey\nkarl stad\njimmy carr\nhepat ology\nhee ey\nheas lip\ngrand stands\ngeta fter\ngar dy\ngam la\ngal ante\nfor shaw\nexpatri ates\nexac ta\neisen stein\ndx f\ndi alling\ndetal les\ncramp ons\ncontro ver\ncn blue\ncarri zo\ncal d\nbur ri\nbu thele\nbu skirk\nbo vary\nblesse dand\nblack pinkin\nblack ink\nblack cap\nann alyn\nai w\nafrican art\nacom pton\nac cp\nab idi\nĻ ×\níı ¬\nwide man\nwallpaper mag\ntro tter\ntravel goals\nthel ad\nthe music\nsque aked\nshou p\nsher on\nsheep dogs\nshar wanand\nscur rying\nsant arosa\nretro computing\npresident scup\npoly p\nplu ie\nper ouse\nnick olas\nnew sday\nnade em\nmy bcu\nmenom onee\nmcmur ry\nmarau ding\nlizz iec\nko echlin\nkasim reed\nkap ital\njun kie\njenny mccarthy\nj news\nhur dling\nharmon ics\nh cac\nguardian books\ngoes west\ngaud ÃŃ\nfright fully\nfin au\nfade away\nethiop ian\nespn nfl\ne fren\ndu ren\ndovi zioso\ndo gh\ncrohnscol itis\ncro oning\ncristi an\nconce iving\nco ghill\nchibok girls\ncer ne\ncategor ical\ncancer center\nbus driver\nbri ens\nbrendan schaub\nbarcelon eta\nban the\nban ality\nalcu dia\nache son\naam er\n[ ðŁĵ·\né Ĥ\nâĢ¼ï¸ıâĢ¼ï¸ı âĢ¼ï¸ıâĢ¼ï¸ı\n¯ ï¸ı\nwinniethe pooh\nwander ings\nu fff\ntro st\ntri veni\ntremura sdv\ntac ar\nstore room\nstar ling\nsit t\nsepta philly\nschool strike\nsch ist\nsam anta\nsa fia\nru pp\nro yor\nreli sted\npescat arian\npe ats\npan sion\npad mini\nny sa\nnp ca\nnicol ás\nne as\nnaz e\nmis r\nmis deeds\nmcn ary\nman ana\nmagazine uk\nker chief\nkemp town\nkal ye\nk sf\nise tan\ning len\nim memorial\nig b\ngravit ational\ngot w\ngospel music\ngoogle plex\nga as\nfresh ly\nfren che\nfood awards\nfis u\nfi delio\nfesto oned\ndy mond\ndu ell\ndot ard\ndf ds\nda emons\ncabine tre\nblur t\nbloomberg news\nblood bowl\nbe dra\nban de\narbitr ator\nalle ppey\nalan ine\nadjudic ator\nadjourn ment\nðŁĩ¦ðŁĩ «\nðŁ¤Ļ ðŁı»\níĺ ľ\në°©íĥĦìĨĮëħĦëĭ ¨\nâĺħ âĺĨ\nâķ ²\nwwe usos\nwalkaway from\nvi ele\nusab aseball\nun cp\nug k\nu hh\ntuesday thought\ntoo soon\nsomer sault\nsi dec\nsen et\nsar ap\nrun d\nroth bard\nrhiz ome\npinnac le\nost end\nnbc thisisus\nn pu\nmc brayer\nlynn field\nlv rj\nlep online\nken stein\nkar mel\ninvestig ational\nhoo g\nharry winston\ngg plot\ngenev amotorshow\ngem stone\nge ge\ne jaz\nds v\ndo ss\ndi atoms\ndavi on\ndalla ire\ncuer nav\nches nut\ncam phalf\nbag nall\nash wani\nanstru ther\namon til\nalex il\nalex andros\nal tor\nagni hotri\nðŁĩ¨ðŁĩ ®\nw wn\nventric le\nvalu es\nva shem\nv rai\nune a\numph rey\nstay hungry\nstan age\nsoci ete\nskip jack\nskat elife\nscal ar\nsanjay gupta\nremember ance\nreal deancain\nre thin\npum mel\npr yan\npardon ing\nn win\nn cos\nmuzaf far\nmur ang\nmoss man\nmichigan state\nmeteor shower\nmelale uca\nken wright\nk all\nih san\nhe bobiwine\nhar diman\ngenes ys\nga e\nflu fighter\nfe vents\nfac eyour\nel ho\ndro ppers\ndevan e\ncor bet\ncliff top\nce de\ncar stens\ncar mi\nc add\nc ack\nbur son\nbri son\nboule z\nborn stein\nappé tit\nË Ĺ\nı r\nzombi fied\nz l\nx danny\nwhite genocide\nvincent vangogh\nvesper ia\nug at\nu hu\ntoday y\nte cs\nsuki yaki\nstuart broad\nstret chered\nstra ddles\nstal ac\nshrenu parikh\nsch wa\nsalvage able\ns wines\nro sato\nrestor ative\npu ti\npre pay\non vention\no gt\nnuz locke\nnew friends\nnanditath hakur\nnai b\nmillion miler\nmicro gravity\nmetast ases\nmechanic sville\nmaris cos\nma bility\nlav ington\nla vat\nkonstant inos\nkipp ax\nker man\nke ar\nk ella\njuan ito\njan kowski\nj wc\nirrit ant\nher rero\ngyna ecologist\ngws giants\ngu mm\ngod sown\nglory togod\ngl f\ngar ang\nflux us\nflash card\nely sia\nel yon\nedwar dj\ndee wan\ncopali bertadores\nclean bandit\nbu sted\nbry ar\nbesto wing\nar chri\nðŁİħ ðŁİĦ\nâĿĵ âĿĵ\nà¹Ģภ¡\nÙħ تع\nÐ ³\nweav ed\nwe transfer\nvi ale\ntheresac aputo\ntask bar\nsuperi ore\nsub compact\nstracci atella\nsmall holding\nsig no\nsi gui\nsex work\ns iller\nrevin ed\nrak awa\nquality time\npu battlegrounds\nplay music\npi dge\noppos itions\nnov ates\nn ml\nmed ill\nlitt ler\nlee seunggi\nl lew\nkoval am\ninv ul\nin adequacy\nidri ss\nhyper realism\nhu got\nhooba stank\ngrandi flora\nfronti ers\nfreder ique\nfast furious\ndur fee\ndresslike awoman\ndo les\ndo ddle\ndiatri be\ndel ange\ndb z\nd jor\nctv canadaam\nci karang\nchar tier\ncease less\ncalend ar\nbuzzfeed news\nbon sang\nbo strom\nbit c\nbin omial\nas dale\nanti psychotic\nangel e\nanag aram\na betting\nðŁĺĮ ðŁijĮ\nðŁIJ¶ ðŁĺį\nâĢ ł\nि à¤Ĥ\nwood cut\nwhit mire\nver laine\nut tering\nu gali\nthr ongs\nthe hate\nthe ab\nth ate\nter acing\nstar maker\nsri ght\nson or\nsky west\nse anc\nrohit sharma\nrl cs\nreal king\npu tman\npetiti oner\npau lino\npas qual\np bl\nnigh tofthe\nmus er\nmul lin\nmom eter\nmed student\nmarj ori\nmal ena\nma doc\nkim meridge\nke ven\nk wale\njun inho\njuju be\njalop nik\njack russell\nindian ocean\nil lar\nidi ot\nhedon istic\ngopro hero\nglass art\nfri ese\nempirestate building\ndil shan\ndigit ise\ndark throne\nchamber tin\nbutter fingers\nbulldo gnation\nbu ceo\nbri sky\nbil dt\nat tains\napp in\nand home\nabc sharktank\nðŁĺĺðŁĺĺ ðŁĺĺðŁĺĺðŁĺĺðŁĺĺ\nìĹIJ ìĬ¤\nãĥ³ãĤ °\nyan ez\nwood mont\nwh f\nwewill win\nun heated\ntwitter chat\ntra um\ntra fic\ntown ers\nthe devil\nsvo boda\nskirmi shes\nschumer shutdown\nsarsapar illa\nsa ks\ns rocks\nrussell terrier\nre ster\nraf taar\npa sic\nmu rai\nmou rad\nmor ongo\nmol u\nmattj willis\nmar der\nman ami\nmac namara\nlipsync battle\nlasgo w\nlar is\nlake shore\nksh ama\nkid well\nk bl\nji wa\nji az\nitim es\ni ese\nhus key\nground work\nful le\nfol ky\nfar ook\nexor ci\neuco president\nen sw\ncriminal justice\ncotton bowl\nconsign ments\ncharlies angels\nbridge ton\nbau ghman\nbary shnikov\nayles ford\nau si\nau an\nalo sa\nai anational\nab ren\nðŁĴľ ðŁĺį\nãĢĮ #\nâĹ İ\ná Ħ\nyon sei\nyeoman ry\nvisit norfolk\nu staad\ntry pod\ntru dge\nthis oldhouse\nthe g\ntai moor\ntac cup\nswar brick\nstre eter\nspro g\nsex i\nruss el\nram stein\npur ves\nproxi mus\npre heat\npon i\nphi lemon\npedne kar\npath way\nover spending\nole a\nnaz o\nna ks\nme gay\nmari amen\nman é\nma bs\nkor te\nju rek\njay na\nitv central\ni sea\nhe mmed\nhd ty\nhabitu ally\ngroun ders\ngrahn ort\ngetafter it\nfram ers\neucli dean\nemin ently\ndmitri y\ndar vill\nchi ya\nbrown stown\nbla stic\nbeli zean\nba elish\naw ka\nas ssss\nas ke\narc adis\nand now\nìľ¤ íĺ¸\nãĥ ļ\nza atari\nwix om\nwait iti\nvor ster\nvar mint\nv dl\nu mag\ntu tic\ntre ffen\ntrack field\nthe tru\nthe jam\nthe crown\nta we\nsur man\nsthelen shour\nsouth dale\nsher r\npeople soft\npen o\nparid hi\nnyc go\nmusic ale\nmont morency\nmen ac\nlogan sport\nlady wood\nje bat\nhem line\nheck man\ngla drags\ngan ano\nfo lo\nfind my\never brandy\nden rele\ndefam atory\ndam odar\ndag gett\ncount yo\ncon vair\nchlor inated\ncher ian\ncapit ola\ncam mie\nbroad dus\naudi ophiles\nasjad nazir\nashley tisdale\nar mon\nar ino\nanth uri\namor uso\naj kumar\nab ani\nðŁĻıðŁĻı ðŁĻıðŁĻıðŁĻı\nâĻ¡âĻ¥ âĻ¡âĻ¥\nwomen on\nvol nation\nvi m\nva beach\ntw rites\nthunder ball\ntag bil\nsuper bikes\nstar tre\nspur r\nsof tie\nsligor overs\nshack leford\nsco te\nsci p\nsche ffler\nsar ver\nsab tu\nros endale\nromance books\nritaco bix\nre styled\nre heated\nre eser\nque z\npre classic\npp arty\npo les\npis ani\npfei fer\nour land\nnak ia\nn pn\nmur ry\nmit ro\nmario bros\nmaharash trian\nl lao\nkoffee with\nka at\njoyou sly\njak o\nig loos\nhilari o\nham bur\nhadou ken\ngle sias\nga et\nfo ggy\nexperien cen\nexecu tor\ned dington\ndre ezy\ndibu j\ndevi ance\nden nish\ndash croft\ncul che\ncongre ssion\ncol later\nchug ach\ncher rie\ncel gene\ncamp al\nbundeswe hr\nbu shell\nbt sat\nbm iller\nblit zing\nbe ag\nav it\nair crash\nai u\nðŁĺį ðŁĺ±\nоР½\nun li\nun accountable\ntim minchin\nthom ase\nthi eriot\nthermo dynamic\nth grade\ntea sel\ntartu fo\nshul k\nshaile sh\nse bum\nsc df\ns di\nredemp tion\nre pp\nrach ell\nr sr\nr sk\nr ne\nque zada\np ounces\nos ine\nonedayat atime\nofficiald annyt\nobye zeks\nni thin\nnar iman\nmostre questlive\nmor ales\nmat tan\nmal formation\nmake history\nmadra sa\nma eve\nle ant\nkö ping\nku dus\nkow sky\nkan ti\nira k\ni mari\nhow lin\nhom ophones\nho vey\nho sur\nhin ter\nhar ber\nh sm\ngrims by\ngo va\ngo om\ngil by\ngar gle\nfred rickson\nfaryaltalpur pk\nemulsive film\ne jc\ndumb founded\ndar ah\ncold harbour\nco fi\nchi shti\ncan ara\ncalle jon\nbudg am\nbronx ville\nbest fandom\nbel sky\nam mu\nak ula\nac cra\n^^ ;\nðŁĺ¸ ðŁĺ¸\nठŁ\nwing back\nwee don\nw anger\nvla sic\nur phy\nu din\nu apb\ntri ath\ntette h\ntess anne\ntae hyung\nsu kh\nsu bl\nsonghye kyo\nrigh thand\nqu illing\npp ar\npadi ham\nov ski\nous ly\nne mac\nnature photo\nn ason\nms q\nmi mms\nmer lion\nlin sey\nland au\nko sar\nknight dale\nkey port\nje ke\njack pots\nin sensitivity\nher ky\nhare field\ngu mption\nfu ca\nfl inger\nfe eny\ndumbfoun dead\ndi ak\nchri shar\ncep bs\nbow ley\nbou m\nbor hood\nbackto school\nb ica\nare gion\naj dinger\n.. ðŁĺĤðŁĺĤ\nâĿ¤ ðŁĶ¥\nyam ba\nx hnews\nwhu employee\nwel oven\nwe madeit\nvag us\nvad u\nu doh\nty pa\ntor aja\nthecw supergirl\nsubo dh\nstage coach\nspro bs\nsong kh\nsm ill\nsh illa\nsan lu\nsam b\nross lare\nro syth\nremember the\npower couple\npou liot\nnar uh\nmuseum monday\nmi hir\nmemp hi\nmarig ny\nman fredi\nlagunitas beer\nkale igh\nkalan ick\nhog shead\nharde sty\ngr ann\nex whuemployee\neduc acion\neast port\ne ig\ndy ers\ndoc ents\ndo ones\ndavid dobrik\ndark web\ncrow foot\ncau dill\ncare of\nbeingh uman\nay ear\nash am\nðŁĶ¥ðŁĶ¥ðŁĶ¥ .\nðŁIJ ª\nzir conium\nyo yogi\nx co\nwilliam h\nwhat to\nwetn wild\nwer n\nun stall\ntruek ofi\ntravel ban\ntram pal\ntione ering\ntime lessness\ntar ak\nta plin\nt fo\nsydney kings\nsono gram\nsig urd\nse ang\nsar da\nsapul pa\nroor kee\nron deau\nrobot nik\nrobbies avage\nreece shearsmith\nre driver\nran sit\npredic ated\nplas mid\npar oo\npan ti\nox alis\nopho tonics\nnik kis\nn dy\nmobile money\nmiddle ham\nlul ly\nlo stock\nliam hemsworth\nlaker snation\nla ppin\nki ddin\nk wini\njer man\nirishtimes biz\ninter disciplin\nim personal\nibu shi\nhon us\nhon eo\nhemodi alysis\nhehe heh\nhapp ines\ngil der\nge z\nfuri kake\nfun ke\never greens\nde sir\ncryp ton\nconfirm ations\ncha ve\nblun tly\nbiz news\nbe gets\nbe eny\natsu ko\narn aldo\nandre y\namontil lado\nall ic\nall american\naar u\nĶ 리\nðŁĶ» ðŁĶ»\nðŁĶ ļ\nâĿ¤ ðŁijį\nâĸ ij\nwas co\nw ü\nvincen tian\nve rett\nvat ican\nv js\nuf v\nts xv\nthe bay\nt pac\nswe di\nsue perkins\nstatueof liberty\nspreadthel ard\nsau cer\nsaddl ery\nrichard hammond\nrev ich\nrepri sal\nredro cks\nre planted\npre view\npla ka\npit on\npemb rey\npart ita\noun o\nop seu\nol ano\nnoo ff\nni stel\nna jaf\nmulti rotor\nmor ya\nmail room\nma athai\nlu cap\nlod don\nlive free\nlip balm\nlion up\nlahari music\nko kan\nkin u\nki mathi\nkar amoja\nindi gent\nhowie mandel\ngon avy\ngn r\nginger bread\ngard endale\ngame works\nfo da\nfen er\neye wall\nequ ated\nef d\ndul se\nds ds\ndolom ite\ndo one\ncyberne tics\nconvey ance\nci bola\nc fo\nblue berry\nblue beard\nbenzodi az\nben simmons\nban ti\nautom echan\nator res\nash ba\nal tes\nad heres\n) >\nðŁ§ Ľ\n⾨ ðŁĴĻ\n⾨ ðŁĮŁ\nz vi\nyn b\nye ates\nyaz z\nwing friday\nwin son\nwil mar\nwhor ter\nwal lows\nvin nie\nsta renergy\nseag rove\nsantac lara\nsan try\ns vi\nru cci\nri sque\now h\nor v\noo kies\nog lesby\no conom\nmv cc\nmur taz\nmugh al\nmouse kete\nmotor city\nmi quel\nmi fi\nmeri bel\nme vents\nmang ere\nlac tating\nkyw newsradio\nkus anagi\nki dambi\nkate middleton\njar vi\nj school\nish in\nil divo\nib pyp\nhuss aini\nhu mo\nhorror films\nhigh quality\nhappybirthday niall\nhan gover\ngreat yarmouth\nghi bran\nghibran official\nf sv\nf db\nespo ir\ndeliver able\ncuth bertson\ncow litz\ncosplay girl\nclean power\ncav afy\ncauca sians\nbus by\nbre port\nbel zer\nbe eper\nat eca\nar ain\nal bay\naki va\nak infenwa\nabh or\nðŁĺį ,\nãĤ¢ãĤ¤ ãĤº\nÙĤ Ø·\nziggur at\nwyl lie\nva aste\nup country\nuke lele\ntre ecre\ntifo si\ntaw awa\nswitch able\nsno bby\nsmar ttv\nschol ten\nsar desai\nsam melan\nru en\nromance readers\nred season\nre blog\nraghu bar\nplo tt\nplear ning\npal try\norange men\nn mu\nmysti fying\nmy att\nmissing you\nmillen ial\nmari est\nmaku eni\nlé on\nlu cked\nloveis intheair\nllanrw st\nlar gent\nl ances\nkinkyboots bway\nkine sthetic\nke sar\nkathniel asap\nkap an\njune bug\nju mo\nje tte\njack nicklaus\nin ori\nhou b\nheigh tens\nha shed\ngu ste\ngrand canyon\ngonnam ake\ngam bi\nfer re\nfa thering\nem met\nein audi\ne ue\ne et\ndol ma\nden dy\nde say\ndas i\ncy prob\ncross gates\nconsumer ist\ncha it\ncalder one\ncad man\nbur bidge\nbridgewater hall\nboul ter\nbol don\nblue bonnets\nble ck\nbest en\nbent wood\nandre e\namar te\nalexil alas\nai a\nĵ ľ\nðŁĺľ @\nðŁĺĤ ðŁĺŃðŁĺŃ\nå¸ Ĥ\nठı\nuni dad\nu dvar\ntr ung\ntheblack keys\nten dai\nss lc\nss ense\nsm ed\nsir k\nsim mba\nshim mers\nrei ster\nreha bbed\nrazz matazz\nq net\npomer ol\npoly tech\npetiti oners\nnomean sno\nnew tech\nnapo let\nmy house\nkö lsch\nkron en\nkare m\njustin timberlake\njig ar\nink le\nimpact montreal\nil on\nifw twa\ngru el\ngiga watts\nger miston\ngend armerie\ngaik wad\nga thletics\nflip the\nfan tom\nfal mer\nface times\ndu rer\ndisp elled\nchar ming\ncamphalf blood\nbron te\nbou cheron\nbody shop\nbak sh\nat raffic\nar mors\nalto ids\nag ged\naad hi\nðŁĺĤ ðŁĺĨ\nì§Ģ ìĪĺ\nâĻ¬ âĻ¬\nà´ µ\nwi ac\nwall i\nwak ker\nw lr\ntwitch retwee\ntuscar ora\ntrebu chet\nthe foster\nthe f\nsteam train\nsoci ologists\nsleep apnea\nsk fc\nsilsil abad\nshev lin\nsc us\nsalvad orian\nrosan ne\nroh rer\nrisqu é\nreality check\nrad ura\npoie tic\npo dr\npl itt\nphi volcs\np side\nori o\nor re\nop ride\nome times\nomarab dullah\nnov an\nnotic ias\nnis ar\nnaf sa\nmis san\nmirror ball\nme sha\nmar mion\nlong boarding\nken shi\nkan sa\nin land\nhu ja\nhot spurs\nholo deck\nhard wear\ngungah lin\nguj jar\nfre mantle\nen trusting\ndehuman izing\ncupca kke\ncuernav aca\ncomra des\ncom odo\nbudd z\nbrew studs\nbig screen\nbeg ay\nbeec roft\nbas kin\nbalt cops\nb iches\nb ary\nap li\namo yo\nam m\nak n\nagnyaath avaasi\nagam em\na arey\nyellow jacket\nveloc ities\nvaish no\nunemp loy\ntu tt\ntru thor\ntom ás\nthrock morton\ntheo tokos\nte of\nsy me\nsnu bbing\nsix er\nsh enoy\nsenn heis\nseas alt\nsear ly\nschool spirit\nripp aul\nri sca\nre collect\nplant svszombies\npfe ffer\non thisday\no as\nmcin tire\nmam bazo\nlon dons\nlok handwala\nlearn spanish\nkissmar c\nkathryn bernardo\nk lan\nj mo\nhust lin\nho pie\nhil fe\ngo lead\nfl anges\nficht ner\nfi ac\nen ham\ndsl rs\ndeal with\ndavid cameron\ncu tion\ncn nopinion\ncep at\nby women\nbul mer\nblood stock\nbar ometric\natra iler\nare te\nar cata\nam pu\nafun ny\nwood winds\nwheelof fortune\nvoter fraud\nvier ge\nur uk\nu mur\nto al\nthel ads\nsou tien\nsnag gle\nshap ely\nsever son\nperth now\npa zar\norgin al\nnet zer\nmy on\nmu uu\nmo ha\nkriti kakar\nkonic amin\nkir ana\nkill init\nkaha ani\njor gie\njen in\njay den\nindescri bably\nimperson ations\nholly j\nholla day\nhis sed\nhell omag\nhe te\nhar do\ngermin ating\nfu uuuu\nfkat wigs\nendodon tic\nde asy\ndad eland\ncop co\ncon strain\nbuthele zi\nbur ridge\nbour ges\nbeli ze\nbad ged\navi ator\nalfon zo\nðŁijĢ #\nì¼ Ģ\nz ial\nyo tam\nyear anniversary\nyaaaa ay\nwhis keys\nv gk\ntrans genic\nthou ston\ntend ring\nsun devils\nsu leyman\nstac cato\nsp lease\nshaand aar\nro sell\nriquel me\nreg ale\nredd ington\nreck i\nrainy days\npupp ym\npro ces\npop stars\npatrick rothfuss\npas ar\np st\nour vintagehour\nol ong\nodem wing\nnic ode\nn ces\nmu my\nmixtape sapp\nmanufac turing\nman citycouncil\nm he\nlive mixtapesapp\nlach man\nkalin and\nk cet\njo tter\nitsnice that\nise au\nis eng\nin dot\nimit ation\nill ac\nhy ssop\nho ft\nhi jau\nhandels blatt\ngrand al\nglen nie\ngin ko\nflintri dge\neric colsen\nep t\nendor sers\nem po\ndemitas se\ncra dles\ncomm ack\ncol abor\ncoal esce\nclo che\nchronic life\nboy chuk\nbook silove\naver dict\nar stech\nal olan\naf ron\naerop uerto\nad air\nab staining\nðŁķ °ï¸ı\nãĤ¢ãĤ¤ãĤº ãĥ¯ãĥ³\nâľħ .\nâĢ IJ\nysi dro\nye senia\nwu erl\nworld championships\nwhit burn\nwa hhh\nvi van\nvamp yr\nuss strike\nurban design\nu zu\ntro tta\ntimp ani\nthan di\nth street\nte ato\nt kr\nsli vesmatter\nsi vas\nserv ici\nschool problems\nrugby family\nrin hatch\nrie beeck\nri mm\npipel ine\npab io\np tu\nor show\no very\nnb sliveat\nme si\nmatagor da\nmas ji\nmar gam\nlali espos\nkhair pur\njer il\nin consol\nhu sted\nhappy land\nghu ll\nghol lywood\ngameofthrones season\nfunnel ing\nfrat esmd\nfrank lloyd\nflight line\nfer rel\nfe bu\nen visage\nen vie\nde gc\nctr lfc\ncoffee and\ncha a\nbrun ching\nbrand an\nbeth fratesmd\nben stokes\nben nies\nbear paw\nbal moral\nbab son\nas mir\naray ner\nand alus\naggrav ation\nad hikari\nabe che\na bey\nz ong\nwill kommen\nwa ju\nvivi section\nvaj ra\nuf clondon\ntin us\nterra ssa\ntas ca\ntac onic\nstarwars battlefrontii\nslá inte\nsemin yak\nsemb ilan\nsask tel\nsaf ina\ns max\nro iland\nrashid khan\nram akrishnan\npat rollers\npat ras\nparnas sus\npark ash\nnorthumb ria\nnlbm prez\nneck i\nn clr\nmulti billion\nmid vale\nmeag re\nme har\nmace wan\nm gn\nlap top\nla donna\nkill arney\nic sa\nhq nigerianarmy\nhide ously\nher ber\nhassel baink\nfra k\nexperi encia\nempren de\ndu opoly\ndie tician\ndamsel flies\ncre asy\ncol unga\ncoast to\nchum lee\ncapric ious\nbun ds\nbow don\nbla que\nbha vani\nbal on\nbaham as\nary der\napple support\nalexandri ava\nae th\n[ âĺħ\nðŁĺħ .\nðŁĮ® ðŁĮ®\nðĿĹ® ðĿĹ\nâħ ±\nÛĮ ÙĨ\nzel ena\ny he\nwiththe stars\nwhir ls\nvalken burg\nuro web\nuk pr\ntrous seau\ntransport govuk\ntra ppings\ntoulou se\ntool set\nto the\nthe i\nsug ababes\nso der\nsilve stro\nscott dixon\nschom burg\nsam pottorff\nruggi ero\npromo ciones\npoo p\npoke ball\npalmin teri\nover brook\nod dy\nny ala\nnolen sville\nnautan ki\nmumbaic ityfc\nmilledge ville\nmarc bolan\nlev ski\njy pe\niner gic\nincongru ous\nilu stra\nhu ela\nhoo ghly\nhel derberg\nhall man\nh po\nglass of\nga ale\nflower bed\nfinner ty\nexplo siveness\nequil ateral\ndusktill dawn\ndigi pak\nco ining\nchelms ford\ncase work\ncam brai\nborne an\nbang abandhu\nband as\natt an\nast u\nare em\nappe asing\në ij\nÃ¥ r\ny andy\nx ies\nu bb\nthel augh\nth wonder\nte di\ntab atha\nsixth form\nshi phop\nsanta ana\nru ination\nreg gio\nrd win\nr po\nquil ters\npetro va\npant suit\noconom owoc\nnay i\nmh rd\nmetro card\nmali faux\nlampp osts\nko en\nkixi fylife\nkivanc tatlitug\nking salman\nkelly services\nkam ik\nk low\nk humbu\nji h\nist van\nhom g\nheritages ite\nhere com\nfil ers\ndin ka\ncommerz bank\ncantab ile\nbrac eface\nbefore christmas\nb smith\naren yc\nare nee\naf h\n^ )/\n: ,(\nãĤ¦ ãĤ\nâľĶ âľĶ\nz ira\ny ha\nwhat are\nwell sville\nviking pride\nvex ing\nu criverside\ntul ly\ntran spen\nsue de\nsta z\nsamuel adamsbeer\nsam mon\nregre tful\nplane te\npel angi\npar due\np td\np oma\nor msby\noli vas\nnieu ws\nmetro pol\nligh ter\nlesli eo\nle ms\nko val\nj bg\nip zig\ning well\ning reen\nhrtech conf\nho ffs\nhard to\nhaid agwaii\ngon dwana\ng tlds\nflying lotus\nfel sted\nfannie gate\nfab letics\nf ce\ndo zy\ndata sheet\ndark skin\ncyber criminals\nci pr\nca es\nbryanc allen\nbin go\nbhar athi\nbab yyyyy\nali o\n\' \')\nðŁijĭ ðŁı¾\nðŁİ¯ ðŁİ¯\nweb sphere\ntun ji\nthe google\nsu bie\nstronger than\nspart ans\nsno gging\nslan k\nsing ton\nsever o\nsat ta\nsamanth abar\nsam is\nrollei flex\nreef tank\nreal matt\nra zar\npit up\npho bos\nover stuffed\nnil giris\nn ura\nmá r\nmun dus\nmoney lynch\nmist ura\nmeri enda\nmel fort\nmccl urkin\nloom ooloo\nlife force\nle vie\njav afx\niti zed\nisland er\nhon ig\nho twire\ngrac em\ndi pak\ndi ddle\ncon dones\nclo aks\ncj m\ncanti eri\nbox art\nbis ous\nbi spo\nber key\nav ada\narrow smith\nard ingly\nali zee\naaa ahhh\n.. âĻ¥\nðŁĹ ¨\nðŁĵ ij\níĤ¤ ìĬ¤\nìķĦ ìĥĿìĿ¼ì¶ķíķĺíķ´\nzsl londonzoo\nym f\nyin zer\ny ba\nway nesburg\nwarren ellis\nw aba\nvic odin\ntir mid\ntick lish\nthewanted music\ntechnic ality\ntatter sall\nstrike back\nsteadi er\nstar awards\nst pm\nsp hi\nso hl\nslu mbers\nrux pin\nros ic\nrepr ori\nre capped\npur it\npoly meric\nour story\nno pen\nni kol\nnang is\nnam jin\nna es\nmuseumo fcity\nmuseumofcity ny\nmrand mrss\nmouth pieces\nmin young\nme aly\nmarac ay\nly ss\nlu tz\nlo ew\nkarl thefog\nis lets\nis at\nin corruptible\nhin dle\nhi mup\nhandhel ds\nhair spray\ngro zny\nglo ssing\ngiam paolo\ngenius football\ngeburt stag\nfron tale\nf ard\neyn sham\never itt\nepi stle\nenroll ments\ndurham cathedral\ndu di\ndru d\ndi gan\ndg ins\ncor din\ncar rou\nbri ve\nblack shear\nbell man\nband ori\nb ami\nauthor uproar\nas cer\nar mie\nar bre\nafer ro\n( ´\nðŁļ ¥\nðŁĴ¥ðŁĴ¥ ðŁĴ¥ðŁĴ¥\nðŁijį ðŁĺī\n๠ī\nvol kan\nv spc\nun gan\nuk natarchives\nthev creations\nthe bus\nta ec\nsy dv\nsp news\nsp icier\nsk z\nsher mer\nsel am\nscott disick\nsc app\nrain bo\npube scent\nprepper talk\nprece dents\npm ts\nou mar\nol ona\nnationalrail enq\nnati vidad\nme shes\nmar kowitz\nmajer le\nlyn as\nli jiang\nle brons\nlay ton\nlar yngitis\nkav os\nkansas city\njade veon\ninternational nursesday\nimit ators\nhe eeee\nha das\ngre ch\nfreder ico\neuroleague women\nem phy\nem den\ne town\ndr oning\ndopen ess\nde ters\ndc am\nck ay\ncil wx\ncali frag\ncal an\nbram er\nboard walk\nble ase\nbeltr ami\nbb king\nbathroom design\nbad ajo\naj ak\nðŁļ ľ\nðŁĺ» âĿ¤ï¸ı\nwy g\nwhite hawk\nw ingham\nvul pes\nucc shooting\ntr ys\nteam k\ntan gram\ntab comau\nt sung\nsuper f\nsub titling\nstown fc\nsig nac\nservant leadership\npop cap\nplat itudes\npar ow\non ero\nnup tial\nni hil\nner azzurri\nnab u\nna dias\nmakere reu\nle sko\nkri stan\nkapilshar mashow\njosh dallas\njackie evancho\nin sincere\nimpati ens\nhotel school\nhigh society\nhi ace\nhannibal buress\nganse voort\ngaming news\nfri eden\nfortnite br\nfootbal luga\nflo s\nfind horn\nfevertree mixers\ner ate\nepi phan\neng aa\nelo tt\neast van\nea die\ne migrants\ndri an\ndas kal\ndaguerreo type\ncha ouen\nbrown x\nbetra yer\nbestjo bever\nbar cia\nath ene\nat ter\narch bishop\nar mini\nap aul\nan sonia\nå¿ ĥ\nâĸ ĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸ\nz man\nyu vas\nwa aah\nv max\nume Ã¥\ntru fant\ntri une\nthisi shar\nthegood doctor\ntennesse ans\nstephen ie\nsph x\nsol are\nsmu cker\nshal amar\nsch eck\nsah ni\nrun cie\npra yut\npoly dor\npetro glyph\npardue suzanne\nottaw apolice\noccas sion\nneurofibro matosis\nn spa\nn gl\nmu cci\nmicro systems\nmen na\nmel ton\nmatil de\nly ell\nloo ter\nlefth ander\nla sker\nku ts\nkri sk\nkon ig\nkin na\njosh duhamel\njan aki\nine er\nhealth is\ngro pius\ngi bt\ngar nishes\ng eli\nfut taim\nfilm review\nfeu dal\nfaw ning\nenter com\ndolgel lau\ndeep u\ncor bett\ncho wd\nbody image\nbe are\narch iti\nar gs\nangel charlie\nam bs\nain sle\nadvi sement\nðŁĵ· #\nðŁijİ ðŁı¼\nìł ľ\nÙħتع Ùĩ\nzid is\nwow selfie\nwee dman\nwal wal\nus afootball\nuni kitty\nun migration\ntoy shop\nthe kingof\nten on\nstaw ell\nsom l\nsno bs\nshe kinah\nrobert plant\nqueri da\npolici a\nother ness\nnews bayarea\nnew sy\nnau r\nmosle ms\nmi mis\nmel son\nmaster stroke\nmac sports\nleni han\nkam ryn\nje x\nino z\nice wine\nhomopho bes\nhab ism\nguru kul\ngu oan\ngren ville\ngold son\ngaz oo\ngalli gan\nfig life\nffe ct\nfair way\nen bush\neck lace\nea sts\ndid it\ndhar avi\ndef jam\ncow shed\nci me\nchum ley\nchry st\nca q\nbor do\nbojack horseman\nben ice\nbeauti full\nbase point\nbar rs\naw ny\nattenu ation\namazing spiderman\nali ant\nal ghero\nabo ston\nãĤ ³\nzak im\ny ali\nwx yz\nwo tw\nwinter son\nwak at\nvz w\nup starts\nther ise\nthe da\nteren ure\nteb butt\ntan vi\nta if\nsupramo lecular\nsuper speedway\nstati sm\nspri ghtly\nsony max\nslur red\nsil vered\nsel way\nseab iscuit\nsav ored\nsand blasting\nsa ken\nro zen\nrid dims\nre fitted\npi ff\nparent sday\np aga\not x\nor jay\nnot out\nmol and\nlyn sey\nllan elli\nkit imat\nkak uma\nk hol\njun ks\njason manford\nis anti\nili stic\nil aw\nholodom or\nhodge podge\nhistor ique\nhack ath\nha zem\ngo ed\ngi ffin\ngi dit\ngam mar\nfoxsport saus\nfo ord\nev it\neuropean lms\nent rain\nemmy rossum\ndu hh\ndodeca hedron\ndescribe your\nden ting\ncotton mouth\nclimate reality\nchu ma\nchi mu\ncer in\ncar amba\nbra thay\nbor mio\nbaa ack\nar nis\nap ut\nap enas\nacreative dc\na stors\na ism\nzoid berg\nwild nout\nwhite bait\nwal tman\nve ster\nti jd\nsing leness\nsil char\nsh anny\nse du\nscreen cast\nrad m\nrach it\npolit icom\npo com\nplay stati\nopen world\noc chi\nnzo gs\nneuro degeneration\nnay ar\nnan uet\nna esp\nmuir field\nmis behavin\nmel asma\nmc nichols\nmash burn\nlock smiths\nkhajura ho\nkha chat\nkalin white\nis ag\ninhabit ant\nil def\niam x\nhuman right\nher ning\nhd ds\ngoo sen\ngol borne\nglen mor\ngit ex\ng hassan\nfree music\nf anno\nel are\ndrun ner\nday ak\ncudd alore\ncre agh\nco libri\ncloak and\ncan th\nbur rill\nbrad dy\nboute flika\nboul le\nbor den\nbomber league\nbo q\nbenton ite\nbel cher\nausty nzogs\naf ed\nabo ts\nðŁĶ IJ\nãĤ¹ ãĤ¯\nzak opane\nx na\nx brl\nwy dd\nwhe atus\nwam ba\nus q\nub nt\ntype writers\ntrou w\nthel ens\nteam vic\ntakeyour dogtoworkday\ntak appa\nswell endam\nsuriyafan sclub\nsr pt\nso ori\nsneaker heads\nsle man\nshor i\nshil pash\nshape shifters\nse ah\npurpose tour\nport cullis\np inf\nover achievers\nori ano\non cle\nnh f\nne stea\nmyrt les\nmudi ay\nmc ki\nmaso chi\nlingen felter\nkil lem\nkier ong\nkhali q\nkey arena\nkas par\nka bel\nk rule\njohn d\nimpres ario\nhor r\nhijab i\nglu es\nglo c\ngil lam\ngi de\ngeo chemical\ngarden route\nflo track\nenjol ras\nen able\ndynat race\ndro more\ndia vel\nde crypt\ncochran e\nco simo\nchi desai\nchelsea handler\nbra shear\nbo ke\nbo burnham\nbla der\nbark box\nari ens\nah rc\nðŁĻıðŁı½ ðŁĻıðŁı½ðŁĻıðŁı½\nðŁijı ðŁĺį\nðŁİ ¢\nìĹ ĺ\nìĦ Ń\nâĿ¤ï¸ı ðŁĻıðŁı»\nv expert\nunderground wgn\ntu ckers\ntr n\nthereal j\nthe poet\nter uel\nta fe\nsport suk\nsk ov\nshu tup\nscience of\nsc ra\nrr b\npr gm\npic cy\npen rod\nover nighter\no dio\nniq qa\nng f\nn ssa\nmz katiecassidy\nmt go\nmo vi\nmelchi or\nmax xi\nmasa yoshi\nmarsh land\nllandrin dod\nld schurch\nlam ide\nl cd\nhe ph\nharmon ization\nha sek\ngt bank\ngren nan\nglocken spiel\ngemm ill\nfreelo ader\nfinanci aleducation\nf hir\nexplore wellcome\nesc an\ndou ce\ndin do\ndi visible\ndal t\ncu ne\ncry tek\ncoy bib\nchampion sle\ncel os\nbi wa\nbeer us\nbal das\nat cq\nark ells\nai kens\nai b\naccru ed\n* \'\nðŁĴĶ ðŁĺ¢\nبصرÙĬ Ùĩ\nyu mmo\nyo gas\nyar mul\nwk n\nwer tz\nwer bung\nval anci\nupro xx\nuk raina\ntur bidity\ntin n\nsubtle ties\nstop tpp\nslim mest\nslau son\nsi swim\nsh uru\nrosann apan\nrosannapan sino\nram une\nraf bf\npog gio\npender gast\nover powers\nnur u\nnovorossi ya\nmiddle brook\nmen slax\nmay belle\nma po\nlust ful\nlim pet\nl lego\nkat akana\nkane ko\njonah marais\nho sk\ngo c\ngal ar\nfu ck\nfol le\nfistic uffs\nfemin ino\ner hs\ndu sh\ndoor knobs\ndishap atani\ncu mia\ncourtau ld\nconclu sively\ncol ina\ncav o\nc agua\nbi ondi\nanan tapur\nam ena\nak ito\nak ay\naj styles\nâĿ¤ ðŁİī\nعÙħر اÙĨ\nyouth sporttrust\nw aded\nvillet n\ntweedle dee\ntu bi\ntop scorer\nthei sen\nthe joshuatree\nt mac\nsustainable living\nsp la\nsni ff\nsim son\nsik ri\nsav oia\nrobin meade\nretrac ed\npo kot\npleas ingly\nphoto credit\nph bo\npec tor\no hashi\nnewport county\nmon eta\nmcal eer\nloo ve\nlic he\nlemon defr\nlau ge\nkre ps\nkeepit local\njon axx\njb gill\njames bay\nj anda\nisab ell\nhunder tw\nha ii\nha chiko\ngran ja\ngo bear\ngeraint thomas\nfil mp\nfar man\nfa hri\nev am\ndon nel\ndo rey\ndham ma\ncollar bones\nch p\nbun co\nbronze age\nbi bl\nbell wood\nbe elite\nbaseball cards\naven sis\nautom ator\namin ah\na é\nॠĮ\nx olo\nwool acombe\nwe wont\nvon erich\nvi eri\nvar ick\ntho e\nsou therland\nsome onet\nskype classroom\nshor n\nsc p\nry dell\nros ner\nroar loud\nro wh\nro mas\npueblo s\npro tom\npercol ate\nperce iving\nopen house\nmers tham\nmatt gaetz\nmand ar\nmakers gonnamake\nlyn brook\nkri el\njo tun\njamiemc murray\nj kt\ni pu\nhav ai\nharpercollin sin\ngun awan\ngo canes\ngar side\nfree spirit\nfer ments\nfe s\nen bau\nemul ates\nelabor ately\ndo of\nda king\nda ithi\ncoz mo\ncla ssen\ncaul field\nbru cer\nbreakfast news\nbor ge\nblouin artinfo\nbit ting\nbirn baum\nber ms\nban quette\nbal con\nback stretch\narre ola\nandre ahor\nam by\nad ham\n!! âĿ¤\n! ðŁĺĤðŁĺĤðŁĺĤ\nðŁ¥ ¥\nå ĸ\nzachary quinto\nx q\nwro xham\nworld vegan\nweal den\nw sp\nun ripe\nun gar\ntom me\ntimeto change\nthe west\nthe vamps\nthat works\ntart let\nsur ratt\nsum ire\nste vier\nste arman\nstap ley\nstal ag\nscor chio\nry ders\npremi ère\npff ft\np timal\noven timiglia\noff rance\nnu uk\nnex tera\nmu lia\nmissuni verse\nmil oventimiglia\nmagnu ms\nlu ta\nleslieo dom\nleslieodom jr\nker nersville\nkaran wahi\nin progress\nij ssel\nic mp\nhuffpo stuk\nhat ted\nhan eke\ngandu je\nfuku i\nfranz iska\nfertili zing\nfar zana\ndundee uni\ndear man\nde core\nday for\nconstell ation\ncollo dion\nc zy\nbright line\nbody count\nber jaya\nbat an\nbad am\nb dc\nardo yne\nap athi\nami des\namer ks\nam ery\nacos grove\naco at\nðŁĺļ ðŁĴķ\nðŁĹ ³\nðŁİ ¿\nwatch me\ntt m\nthe ultimate\nterri bles\nsw t\nsuper team\nst ilo\nso hi\nsk gaming\nsar no\nsac cone\nri ffle\nresearch highlight\nr me\nquad rat\npoe tically\nple ad\npitch wars\nphoto blog\nparti da\no zz\nn ilo\nmin fo\nmicro wave\nmak hani\nlily dale\nlet as\nkal ita\ninter jec\nin ic\nill ana\nhu et\nho arse\ngreen head\ngesch ich\ngaz an\nfly ingh\nevacu ates\nenum claw\nengal uru\nence ph\nen ta\ndrawin goftheday\ndiso bey\ndion ne\ndiocle tian\nder yck\ndel ka\ncolon izing\ncolon ist\nbiglottery fund\nbe magenta\nbakh sh\nbadajo z\nay en\navi ones\nandrew j\nal rdy\nal esi\nab k\n. ðŁĺ¢\n* ?\nÛĮ ا\nи ÑĤ\nwin ches\nvla de\nuse c\nugand ac\ntrans world\ntommy chong\ntele phone\nswol ves\nstan sbury\nsimp ang\nshar pay\nshar king\nsecure the\nryo kan\nrosh hashanah\nro li\nram u\nra jah\npursu ant\nphu ong\nper ito\nnulli fication\nno limit\nna aman\nn nt\nmonday night\nmaz al\nlatch ford\nkol lywood\nklu g\njo j\njennifer morrison\niz aya\nitv calendar\nihsa state\nhyacin ths\nhem lock\nhel y\nhas ler\nhar deep\ngol drush\nfri d\nfam er\nfab ulo\nent ic\nemar osa\ncitizen liveat\ncarre rac\nbronze bomber\nbran ko\nbook week\nbi ggers\nb ander\nay to\nastoni shment\napur pose\naber gele\n* ~*\nðŁĺĶ âĿ¤ï¸ı\nz aira\nyoung k\nyl c\nwid de\nwet more\nw tennis\nvu i\nun bounded\nto ppo\nthere abouts\nthename is\nthe eagle\ntangany ika\nsusang komen\nstra x\nsp enders\nsmu lders\nsefton hour\nsa gh\nproje to\nprodi gies\nprin ze\npr al\nphysi ques\nper rett\npas and\npan k\nop rano\nof dreams\nnew z\nmy choice\nmur ch\nma hela\nlori moreno\nlegal ised\nle sle\nlagni appe\nkoval chuk\nko tc\nkeb bel\nkatharine mcphee\njer ash\njar ls\njail breaking\nj edin\nj cole\nimpro ver\nimmigr ating\nhub bard\nhi es\nham am\ngu shed\ngreat taste\ngl ack\ngender fluid\ng chs\nfun ches\nfreak ishly\nfool s\nfolk ways\nfarru ko\nen sen\nem elie\nelite book\nel bowed\nedge mont\ndu ss\ncuck old\nchig non\nchi asson\ncheek bone\ncas sar\nbor am\nbig narstie\nben in\nbas com\nash dod\nand dd\nalli an\naga the\na thri\nÙĦبÙĨ اÙĨ\nwal she\nvar us\nvap enation\nv ink\nun pad\nun inhabitable\nth chat\nswan lake\nsuren dra\nstudentath letes\nsav ino\nsar te\nre assemble\nq we\npigg ate\npel ts\nnw t\nna del\nn re\nmin tage\nmin shew\nmichael is\nmat anzas\nmasto don\nlock jaw\nlock a\nlittle steven\nlil t\nla gu\nkr m\nkla gen\nkierong illen\nit sag\ni read\nhl g\nham bone\ngo tribe\ngiar dini\ng achi\nfran ds\nfire fighter\nfilm challenge\nexer ting\neg bert\ndg ate\ncy co\ncloud iness\nclon don\nclaire mont\ncdn screen\nbu se\nbrue ghel\nboss day\nblan ket\nbird sofinstagram\nbam yan\nback stage\nba ah\nayesha shroff\nay oung\narth as\nak hi\nad ab\nabio tic\n... ðŁĺİ\nĤâĸ Ĥ\nðŁĴŀðŁĴŀ ðŁĴŀðŁĴŀ\nðŁĮ ªï¸ı\nаР½\nziggy marley\nwomen shockey\nwc b\nwaist coats\nvasu dev\ntre bko\nti ds\nsunday morning\nsui vez\nside man\nse sac\nsch lichter\nsatt ler\nsar uman\ns ã\nreha sh\npublic power\npu shover\npre wedding\npo tro\npier pont\nparag on\noval tine\nnewh ouse\nnew mar\nne wr\nnax al\nmiz ner\nmal lette\nlough ran\nlong ish\nkol in\njun gian\njah res\njac q\nig an\nhant si\nh vr\ngeof froy\ngelatin ous\ness am\neno shima\nengel brecht\nel rond\ned ling\nec m\ndam it\ncontradic ted\ncocacol aco\nchero keen\nchaf er\nbuk we\nbroker ages\nbleed purple\nasi mo\nanun naki\naly ce\nadvance dwarfare\n! ðŁĺĨ\nðŁijįðŁijį ðŁijįðŁijį\nê¹Ģ íĺĦ\nç ¨\nव स\nwe an\nupup cronulla\nuof u\nunite and\ntol land\nth wait\ntg u\ntatar stan\nsweet bread\nsou thee\nson as\nsehun day\nse stri\nsax es\nsarg syan\nrickast ley\nre testing\nre load\npu ce\nprideof britain\nplace bo\nphil ando\nos ita\nopen houselondon\nop ine\nonthis datein\nnow ww\nne mo\nna enae\nn wark\nmule soft\nmer horn\nmarquette u\nlo dh\nleven e\nkhar kov\nkent on\ninten tionality\ninc ited\nil yushin\nif cc\nidiosyn cra\nger vin\ngear vr\nfit zy\nfight cancer\nfam agusta\neven in\ner usa\nen ses\necon o\ndem ps\ncreed moor\nchap ala\nbro r\nbol anet\nbanar asi\naw ski\nau v\natleti english\naj ni\nah oo\nad yar\nðŁĵ¹ :\ny ces\nv nc\nur ru\nty ce\nthr an\nswach hat\nsve ta\nstack overflow\nsol an\nsof lo\nsilver chair\nsco ggins\nsco ach\nsal ps\nrun out\nre sti\nre paying\npoe tess\npe tula\npatin kin\npa sia\nof b\nmu ley\nmast itis\nmang khut\nmand arin\nman ch\nmach ynlleth\nlo bb\nlife coaching\nlev eller\nlemon ade\nkur an\njuan mata\njan us\nj atin\ninc ised\nilli dan\nil and\nhold fast\nhis ses\nhar ith\ngregar ious\nger stein\nflyo vers\nfire weed\nfi et\nfav ourably\nexu ding\ndenis of\ndan on\ncu bit\ncon naughton\nco hoes\ncas sill\ncafer acer\nbat u\nbadger monday\nauto week\nash wood\na ase\n! ðŁıĢ\nᶠľ\nza res\nyom hashoah\nwear side\nvalanci unas\nul man\nue facom\ntoshi o\nto pher\ntinker cad\nthe gill\nta ino\nsunny days\nsub cutaneous\nsell er\nscant ily\nsc la\nrot manschool\nreynol dsburg\nquest nutrition\npot stocks\nphotogra py\nover water\nonelove manchester\noler ance\nneuro developmental\nmovi miento\nmel ita\nmccull in\nmariamen ounos\nmanchester arena\nman zil\nly th\nlink öping\nlaurel park\nla dwp\nku kri\nkaz ama\nkac ie\nis kra\nip sy\ninvul ner\nhyper drive\nholgor sen\nhol lens\nhof ner\nheure ux\ngree kislands\ngirl group\nfy m\nfor du\nfon go\nff b\nfemini zation\nfaroo q\nequestri agirls\ne hu\ndrive shaft\nde by\ndd yer\nd kb\nd company\nd anda\ncov ado\nci enci\nchop stick\ncat v\nca jas\nblan kly\nbinaryo ptions\nbake along\naxstv fights\nan antara\nama ury\nam docs\nag om\nadobe xd\nðŁĴ¯ âĿ¤ï¸ı\nðŁ¤¦ âĢįâĻĢï¸ı\nâľ ¡\nyn ash\ny ari\nwilliam hill\nwb d\nwalk over\nve vey\nu meda\ntouri ster\ntoulou sain\ntol hurst\nt gp\nsummer readingchallenge\nsu kab\nstra vaganza\nsk aven\nsimul acra\nshow band\nscra pper\nsand f\nsan teria\nran agar\nra ghi\nquick en\npen wortham\npen ick\npe tya\nout crops\nnebra sketball\nnear shore\nmoor hen\nmo ver\nmil las\nmay uri\nmat tos\nmanufac tory\nlic ata\nkay lam\nk oos\njoye use\nin scru\nilove heartland\nhubb le\ngum road\ngul lies\nghostinthe shell\ng ape\nfon dling\nfla gon\nfeedyoura ddiction\neve rett\ndot to\nder on\ndas uki\ncover all\ncor regi\ncoleco vision\nco wra\nchocol a\ncf pa\ncar goes\nblu dgeon\nbla z\nbelu gas\nalvar omaldini\nack ers\nac entral\naby ab\na hearn\nvas sal\nuc cio\ntur ki\ntu scan\ntrump kim\nti thes\nti fs\ntech women\ntaxic ab\nsupano va\nscar brough\ns jam\nro mario\nprogressi vism\npm live\nplay matters\npc bc\npac ar\npa vey\np go\nolan rogers\nob il\nnational sandwichday\nmissing kids\nmar onite\nman preet\nmachiav elli\nli ang\nle sen\nkul gam\nkre feld\nk wood\njan zen\njack rabbits\nit bp\nin corri\nican ada\nhypnoti sed\nh js\ngo war\ngnar led\nganano que\nfore warned\nfol ding\nfeliz viernes\nfc twente\nfat f\nf opp\nexhor tation\neff zeh\ndo ddle\ndhar m\ndes boro\nda ina\nd de\nconfe x\ncar rell\ncanap é\nbook shop\nbl anda\nbbc snooker\nbb pilipinas\nball inas\nback spin\nau strade\nam lo\nam am\nallevi ates\nalam ed\nal mos\nage ha\nðŁĺľ .\nì ĩ\nâĻ£ ï¸ı\nவ à®°\nz oli\nyu mmmmm\ny cle\nworldbook dayuk\nwigan council\nvisu alizes\nvan oss\nule ma\ntro icki\ntrans ference\ntraffline mum\nthugg ery\ntan er\nt shabalala\nsym bian\nsusang ilbert\nsma de\nsh ach\nsc aping\nsave a\nsal bum\nroyal ty\nrang an\nplane tofthe\npatri dge\npast illes\npalis ade\nori ole\noom fs\nnick lachey\nni go\nn to\nn ira\nmoisturi zed\nmiz uno\nmira bel\nmicrosoft store\nmal adies\nmagi x\nlow a\nlogan paul\nliber te\nl kg\njeff probst\nis ong\nintrac table\nhas brouck\nfu schia\nfar o\nfa it\neu karyotic\nerne stine\nelic its\ncroo ke\ncra c\ncompany culture\nchar issa\nbalasu bram\nat risk\naborig ines\nðŁĺĽ ðŁĺĽ\nðŁĺĢ ðŁĺĢðŁĺĢðŁĺĢ\nðŁİĢ ðŁİĢ\nâļ«ï¸ı ðŁĶµ\nzz i\nyab ba\nwr r\nwit ts\nvirul ence\nvi rar\nv gs\nv ache\nts wag\ntromb one\ntiang ong\nthestroke assoc\ntham rin\ntake on\nstones our\nsa ki\nroot sports\nrand al\nr tn\npr ongs\npicar die\npaulo aken\npash ley\npar ken\nocot illo\nny f\nmy top\nmut ate\nmon oun\nmeans business\nmaun dy\nmastersofthe universe\nlp sc\nlim bic\nlaurajane grace\nkul bhushan\nkam aal\nio vine\nindo chine\nin fielders\nin dent\ni ball\nhok kien\nhead on\nhallmar kies\nh so\nh ile\ngreen washing\ngenu in\nful fils\nfire red\nf xx\ne tre\ndoones bury\ndg k\nde car\ndahl gren\ncle aves\ncarol an\nbu stan\nbri ms\nbra zo\nblue point\nbad ging\navan shi\nar vi\nani bal\nandreahor wath\namon th\náµ Ĵ\nwwe fastlane\nwis a\nwilling blam\nwil lock\nvu ong\nvox el\nvee phbo\nur bain\nun tam\nthe ma\nsu chen\nsin ge\nseth green\nse co\nrumb elle\nrobu sto\nring tail\nri yaz\nre program\nre ep\nre assessment\npn f\nover charged\nol inda\no sea\nnoord wijk\nn gb\nmsc actions\nmey erson\nmand ap\nku ster\ninnov ated\nhy la\nheat waves\nhanson music\ngri es\ngol u\nfro mel\nfer menter\nfau ght\nfal ooda\nf arias\ner for\ndra sh\ndisc ol\ndesi g\nco aldale\ncep tional\ncen tex\ncas sette\ncar naby\nbun ter\nbe ton\nall sop\nal fano\nafro pop\n?? @\nwinstar farm\nwick ford\nwh h\nvar ic\nuwe bristol\nun consciousness\ntrans boundary\ntoyo da\ntar ap\nsty ria\nspru cing\nshowme your\nsar az\nsang ita\nsan ja\nsam achar\nsali do\nru chi\nrs j\nrhu mba\nres q\nquar rels\nqual y\nq on\nq mul\npocket knife\npetro vsk\npe ur\npauloaken fold\npalmet to\nni w\nn flying\nmor anis\nlun ging\nloz enge\nlauter brunnen\nkur ung\nkerma dec\nj end\ninspi ral\nhigh worth\ngul let\ngi ev\ngh k\nen ki\ndoppelgang ers\ndoes burg\ndil jit\ndardan elles\nd anta\ncur belo\ncomd tac\nbo jo\nbasseth ound\nbac ter\nas col\nalapp uzha\nðŁĴķ ðŁĺĤ\nðŁij¨âĢį ðŁĴ»\nwith modi\nwel born\nvol terra\nvi reo\nun restored\nu kem\ntwin n\ntweetur biz\ntr ounced\ntorre molinos\ntoronto pearson\ntanger ines\nsy dow\nsuper chunk\nstal inist\nslat on\nskin heads\nshankar acharya\nsar panch\nsa be\ns style\nry ar\nry ann\nroo ki\nr ll\nq br\npure magic\npan go\np ams\nover landing\nor ka\nopo ku\nod den\nmigrant crisis\nmeg ann\nme the\nmck ernan\nmac kem\nlog ism\nlat rice\nla hood\nkings lynn\nkhu shi\nke mps\nkac ang\nk alli\nir lande\nhor witz\nharri smith\ngreek week\ngreat place\ngi psy\nfu zhou\nfrank ish\nfield fare\nfan shawe\nen yt\ndon ati\ndi ously\ncine t\nchico state\ncar us\ncar nell\ncampan ula\nbreast milk\nblood cancer\nbhi du\nbeer pong\nayck bourn\narkell smusic\nam boise\nal fi\nae on\nadu blin\naccentu ated\nab ama\naaron hernandez\nðŁĴķ ðŁijĮ\nðŁij¯ ðŁĴķ\nÊ Ĵ\nyal c\nwoman ly\nwit e\nwel sham\nvital ity\nvisit philly\nvegas con\nus an\ntune z\ntrump now\ntool ate\nto bie\nthru shes\nthe henryford\nte esta\ntanehisico ates\ntaik await\ntaikawait iti\nsteam boat\nstar less\nspic iness\nsk oll\nsin siders\nsem powerment\nschi ppers\nsam yuk\nrump el\nrhin eland\nren aldo\nrelap sed\nraman singh\npsycho geography\npropag ated\nprince ville\npor osity\nphotom eter\npa cha\noldham hour\no eln\nmumbai indians\nmonday funday\nmikha el\nmicro dermabrasion\nmegastar chiranjeevi\nmat ara\nlo sey\nlith onia\nli em\nkon oha\nkim bra\nkid min\nkalinand myles\njer kins\njc vd\njayant sinha\nja ish\nhun tel\nhouse bound\nher i\ngreen thumb\ngor an\ngillian anderson\ngang nam\nfortu neteller\nfie bre\nf wi\nem mas\ndri vable\ndress shoes\ndou ches\ndiabo lik\ncool katz\ncomrades race\nclass work\ncdn film\nbit bucket\nbe chamel\nbb tv\nbaltimore police\nash g\narin dam\nar ul\nap sley\nal sager\nais linn\nacan al\n? ðŁĺĬ\n; #\nðŁ¤© ðŁ¤©\nâĿ¤ ðŁIJ¶\nz edge\ny aks\nwinter soldier\nwho you\nwha thappen\nvill ans\nusu i\ntwit ta\ntwin kle\ntoo m\nther midor\ntex p\nste o\nsj b\nsher ine\nsas campaigns\nsan er\nro mar\nred minote\nplat on\npet supplies\npay g\nou de\nor omo\nmotor co\nmind tree\nmi ec\nlon do\nleon hardt\nl kr\nkirkintil loch\nkh ouri\nkbc channel\nkar ima\nka ina\nk dwb\njustin rose\njuli ani\njeff merkley\nitu esday\nip ers\nie g\nhyper v\nhom ep\nhit theroad\nhi el\nham burg\ngre p\nflit wick\ne ula\nden nings\ncow fish\ncos ine\ncolton lhaynes\nclen ching\nch ö\nc tic\nbre aze\nbrad leys\nbook smart\nblood wise\nble del\nbel sen\nbc wildfire\naw ad\narstech nica\narashi yama\nam official\nam ca\na os\nðŁij¨ ðŁı¾âĢį\nå°ij å¹´\nwinkle man\nwig go\nvou ge\nus kies\nul p\nton ym\ntg cf\nteam rwb\nta iler\nsyru py\nsun seeker\nsports line\nspiritu alized\nski ffle\nsi ds\nsham im\nse bald\nsar ris\nru fio\nromb lon\nrighte ously\nrebel wilson\nrailway museum\nr wang\nore x\non ti\nnotre dame\nne z\nna shoba\nmoo y\nmis sr\nmicro prompt\nmanhattan ville\nmalari aday\nmac adam\nluang wa\nlot tery\niwant to\nincapac itated\nim ber\nilove mcr\niam saidharamtej\nhin oday\nher u\ngg in\ngar ver\nfumi gation\nfoxsports west\nem powered\ndr ms\ndomin ick\nden es\nde safi\ncorin thi\nconversation uk\ncalori fic\nbarley corn\nar mag\nany time\nallo saurus\nalder grove\naccoutre ments\nabdul la\nĨ ãĤ£\nðŁĴĸðŁĴĸ ðŁĴĸðŁĴĸðŁĴĸ\nðŁĴ¯ @\nâŀ¡ï¸ı #\nyou dont\nye sha\ny apa\nwing nuts\nviv int\nv ted\nun assail\nthursday morning\nthe athiyashetty\nsous vide\nsin cil\nsch ramm\nsam witwer\nsahi ba\nsacrilegi ous\nrin na\nreti ef\nreeper bahn\nred currant\nreal ddp\npor ate\npopu lists\npassi flora\noil cloth\nohio stathletics\nny ang\nnoor ani\nnikkie tutorials\nnew ells\nnat ak\nmss oci\nmi rip\nmetal fest\nmeigh an\nmeet inghouse\nmar row\nmagne tized\nlucy slaw\nloo sens\nlin tel\nle sar\njon snow\njol son\njenni rivera\nhand forth\ngame book\ng bb\nex on\nerock star\nent soc\nelek tro\nek azarian\ne ikon\ndra zen\nde at\ndat to\nd hin\ncu pids\ncraft sy\nchel a\nbreaking views\navon mouth\nati x\nanimal testing\naki shore\nad din\n. }\n+ \'\n! ðŁijĩ\nðŁĴ ¼\nðŁįį ðŁįį\nðŁįĥ ðŁįĥ\nðŁ¦ į\n° âĢ¢\nz ele\nys p\nwh ata\nwe sanderson\nwan stead\nwai the\nw tr\nuniversityof ga\nun ting\nu ren\nton gued\nthereal buzz\ntfl tph\nste ger\nstanley cupfinal\nsof rench\nsl s\nsick ert\nshe sha\nsas an\nsam plers\nsafe keeping\nreichen bach\npal z\nouth africa\noneless gun\nober yn\nnation of\nmicror na\nmat on\nman ig\nma hoo\nleach man\nkie hl\nkeween aw\nis db\ninter locu\ni spy\nhor ten\nhay les\ngujar ate\ngo old\nglass boro\nger not\nga tha\nfi de\nf wf\nexal tation\nerri gal\nei ko\nder ain\ndep ablo\nd hat\ncuid ado\ncb ce\nbur naby\nbir stall\nbe vac\naun ch\naujour d\nau sage\nat tics\nat kina\nar nataka\namaz ulu\nal melo\nal bic\nwat cher\nv ha\nun problematic\ntrevor row\nto kaido\nsw akop\nsportsc ast\nso dus\nslow ness\nsimon stown\nsever a\nsab io\nru hi\nroun drock\nri do\nrally mexico\nqaw wali\nple ttenberg\npan esar\nos goode\nop chemtrails\nnik ole\nnicol aus\nmu stering\nmonte reya\nliz beth\nlad son\nkir una\nkir ko\nkenya airways\nkaw ase\nka hl\nk achi\njet set\nj olo\nizu eta\nhu atulco\nhe yyyyy\nhas bro\ngirls nightout\nga stel\nfu oris\nfromthe vault\ndevou rer\ndel tat\nde hydrate\nday lighting\ndann yo\ncompetition time\nchim ay\ncantile vered\nbritish f\nboilerroom tv\nbo ers\nbestof british\nbal sall\nb mtc\naz one\naw ami\navin ash\nas sin\nadap to\naccompan iments\naa os\nðŁ¤ µ\næī ĭ\nåĨĻ羣æĴ® ãģ£\nãģ¦ ãģĦ\nâŀĸ âŀĸ\nÑ į\nyorkshire is\nyo gab\nx dddd\nwater slides\nwad den\numb b\nther ion\nsyrian army\nswin k\nstra yer\nstop yulin\nslam miversary\nskid row\nskan ska\nshopping online\nshivu adda\nsbli i\nsanit arium\nru ess\nrr g\nriver run\nril las\nquadri plegic\npin nick\npeace time\nolive tti\nnak ayama\nm gn\nli vand\nkla assen\nkati ele\njung lee\njumb ura\njay sean\nja en\ni shin\nha ina\nha akon\ngri f\nfru gi\nfr g\nfor son\nfor agers\nesco bedo\nen derby\ndou bler\ndo bara\ncry an\ncor covado\ncdn olympicteam\nbibli a\nbhar adwaj\nbell tower\nay na\nauti sta\n, *\nðŁ¤Ļ ðŁı½\nãĤ į\nzz er\nyam hill\nver sion\nvande weghe\nul c\nto rero\nsu its\nstreet team\nsho ki\nsevere wx\nrome os\nro opa\nreclai med\nph are\nop ic\nobam af\nmontereya q\nmegat on\nmc wfc\nmari adb\nlu fc\nlabor ing\nko za\nko iv\nkang nam\njohn paul\nirfan pathan\nintangi bles\nimou to\ni stand\nhome place\nho wards\nhalle berry\ngregori us\nget chu\nfx cm\nflo gger\nfer rers\nfair hurst\nesk er\nefra ser\ndiamond jubilee\nde ora\ncover tly\nco perez\nchristian sburg\nchri sette\nch é\ncarri eh\ncaram anga\ncam illus\nbur gon\nbread crumb\nbre izh\nbbc goodfood\nask for\nas wad\nap jabdulkalam\nantag onistic\nam jad\nal mam\nak ande\nadink ra\nac triz\nðŁĶµ âļ«ï¸ı\nðŁĴĻ ðŁĸ¤\nðŁĴªðŁı¾ ðŁĴªðŁı¾\nç ĥ\nË Ī\né xico\nze bre\nwante duk\ntw oods\ntrivi aday\ntox teth\ntid dies\nthu la\ntheofficial sbi\nthen i\nthe free\ntempl o\ntas ers\ntan f\nsouth jersey\nsou suke\nsla ine\nsea bees\nsaturday morning\nru gg\nreister stown\nq aim\npu jol\nplant ation\npil key\nphysio therapists\nphilli pa\npashtun longmarch\npar ly\novi Äĩ\nour tney\nop tus\nn aging\nmy day\nmulti sensory\nmplo yee\nmon dal\nmcke chnie\nlax ative\nlady podsquad\nkyo ku\nkidney cancer\nkick ing\nke iran\njeep er\nje wl\njay la\niot security\ninflu ence\nindiana fever\nij muiden\nhypno therapist\nhali za\ngraff ito\nfu gu\nfiji ans\nexter n\ned gier\ne igen\ndumb ed\ndick er\ndae won\nco housing\nchab uri\nbo gg\nblackand gold\nbal azs\nay re\nav itch\nau bert\nangel arayner\nag nez\na ok\nç© º\nãģķ ãģı\nâĨ ij\nà¹ĢภĻ\nzan ella\nwl ky\nwell and\nweal thier\nunder coat\nu tin\ntrad able\nta pah\nstra hd\nsl veng\nsi ria\nshave club\nsce les\nsal mo\nrobert glasper\nrcar mitage\nrak ha\nra van\npro drive\npla sma\nphi sh\np eller\noutside magazine\nor cutt\non ard\nomen i\nodhi ambo\noak ham\no ai\nnikola os\nn music\nmotor coach\nmccas key\nmacin nes\nlittle finger\nlat asha\nkot ka\njo ep\njar ah\nj du\niw p\nite sh\nis mat\nidar thritis\nholli day\nhal verson\nha vard\nguil derland\nge ils\ng vb\ng sathletics\nfung icides\nfu mero\nfor pa\nelling son\ndor mancy\ndon of\ndis banding\ndige ster\nday parade\nchar lam\ncapit alizes\ncane gra\nbu blé\nbr ingh\nbi sexuals\nbein ecke\nbal an\nbab angi\nav h\naugust ines\nascend ancy\nanishin aabe\namar ula\nal able\nabsur dist\n; ____\nĥ ä¹\nðŁĩ¦ðŁĩ ±\nå¥ ³\nà« į\nzz z\nyog ya\nwidde combe\nwar i\nvol ve\nul rike\ntro twood\nthe greatescape\ntha ad\ntc pa\nstay classy\nsr il\nsp hila\nsan abria\nsab at\nry m\nroberto cavalli\nroad shows\nrep eller\nrailroad ing\npu ds\nperme ate\npenn statem\npedra za\npas sing\np nb\nor nis\nny gv\nnie w\nmt lv\nmk don\nmed aglia\nmc beth\nmc allen\nlo tr\nlincoln ton\nlill is\nlaser cut\nlanguage day\nki ght\nk attan\njoseph son\njames mcavoy\ninter species\ninstal ments\ni just\nhof meyr\nhite sh\nhet tie\nhe don\ngorsein on\ngeta way\nfr üh\nfle dermaus\nfin icky\nfero pol\nfaber gé\nf bg\nexcit ingly\netu des\nenlar ging\nel win\ndun ster\nde stre\nde camp\ndave matthew\ncrest line\nchat win\ncar cross\ncam bu\nbree z\nbo sun\nb ja\naw acs\nav chd\narmy day\nar uh\nanne ke\nzen do\nxen arevival\nwi thern\nwft da\nview tiful\nunderthe dome\ntram ping\ntime sheets\ntalis ay\nsycam ore\nsupportn wt\nsuper villains\nstar gell\nsoul fly\nso j\nslow food\nsig machi\nsand co\nsalon du\nsal lies\nsak shi\nroy ster\nri skier\nre format\npau ll\npascu al\nore imo\nn mm\nmo ssel\nmo ate\nmeteor garden\nmagne tically\nmach ismo\nllan gef\njer wood\njef fro\nignaz io\nhyper plasia\nho ko\nhar n\nhai den\ngu ten\nge gen\ngau k\nforth right\nforeclo sures\nfin alizes\nexempli fying\nep onine\nelle tti\neleu thera\ndu ch\ndisaster recovery\ndes don\ndelici ou\ndebre cen\ncool angatta\ncolle ton\ncla sped\ncit ilink\nchil eno\nche halis\ncalder cup\nbyd go\nbus se\nbonny ville\nbodn ar\nbifur cation\nbestfandom ca\nben ko\nba qi\nay im\nagamem non\n.... *\n... ~\n! ???\næŃ Į\nâĿ¤ï¸ı ðŁıĪ\nvi ers\nuz alo\nuk houseoflords\ntillot son\ntheak ston\ntagbil aran\nstabili zes\nso de\nsne deker\nski les\nshan er\nsen ergy\nsel fy\nsch ar\nsal army\nrobusto babe\nrc ade\npic ador\npear cy\npan ay\nopend ays\noli vi\nntv weekendedition\nne gras\nne agle\nmu cca\nmoneti zed\nlu pino\nlick in\nkathy ireland\nja afar\nincen sed\nhail wood\ngreat cause\ngoldengate bridge\ngold farb\ngoal setting\nghost recon\nga irport\nflori dal\nfli ppen\nfi she\nfar ra\nen di\ndi staff\ndah y\ncri bb\ncre edon\ncon sin\ncol men\nco sponsored\ncin donesia\nbrow nie\nborn tobe\nbo gard\nbiffy clyro\nbella vista\nba wn\naw s\nalexand ru\nac opter\nac ces\naberystwy th\n. ðŁĺħ\nðŁĺĤ ðŁİī\nðŁijĮ ðŁı¿\nye eeee\nyaman aka\nyakin iku\nweak ling\nwan ji\ntuss is\ntimeto play\nsull inger\nstr un\nsp urge\nsoun dary\nsor te\nsi deb\nsau ber\nred day\nre dy\nra che\nprote c\nprivateer press\nper lin\nper ic\np shs\node h\nnbab day\nmul grave\nmp c\nmodul ated\nmis steen\nmichi o\nmevag issey\nmet u\nmantic ore\nlus combe\nli vio\nl bo\nking smen\njj c\nichi ba\nhod ler\nhit less\ngos set\ng pk\nfck oeln\nfangir led\nf ons\neich ler\neaz y\neast vale\nder ful\ndau er\ncompos itional\ncat kins\ncalli graphic\nboy ard\nbon aventura\nbiop ics\nbe such\nbbcle icester\nbbcal ba\nav ina\nalu zon\nal ind\nak ry\na stringent\n!! *\nðŁijĬðŁı» ðŁijĬðŁı»\nðŁİģ ðŁİĤ\nðŁİ ¡\nಠĹ\nÙ ł\nye omans\nwx ii\nwo te\nwi tho\nwh are\nvod acom\nverif one\nv dv\ntsun amis\ntrav ell\ntrade off\ntool room\nstori esof\nsp icc\nson yes\nshoed azzle\nshi hab\nschomburg center\nsai ful\nron ni\nroarloud travel\nring let\nred in\nrap ace\nram es\nquar re\nplac emat\npi gott\nnorth jersey\nne emo\nmor tons\nmis direction\nmick le\nmi j\nlead theway\nle os\nle mo\njitendra singh\nj mp\nici ón\niam rana\ni won\nheel ers\nheart lands\nha thi\ngr ps\ngo griz\ngiuse ppe\ngiam battista\ngener gy\nge do\ng pe\neth icist\ndra upadi\ndeleg ating\nde growth\nd bag\ncze chs\ncomp toir\ncharle sm\nbur chfield\nbne i\nbiza sia\nbe ready\nbds dragonflies\nasli yoyo\nari ver\nar ba\nappalachian trail\nall hail\nalge ciras\nweek lies\nwater boy\nva ez\ntil man\nthomp kins\nthene therlands\nsu en\nstalac tites\nspecul ates\nso di\nsnu ffed\nshe reen\nscotthall nwo\nri sto\nren ly\npor ro\npolic eug\nplasen cia\nodd fellows\nmount joy\nmo sier\nmanil aluzon\nmagen nis\nma ak\nleg as\nla za\nkaty isd\nkam and\nkam ali\njo key\njim ene\nits no\ninst illation\nideo logically\ni aw\ni ao\nhy ams\nhu berman\nhome wrecker\ngold field\ng sofa\nfu or\nfou z\nfilm fareawards\nfer ber\nenni um\ne marketer\ndisgu stingly\ndesig ned\ndemocrati ze\ncro agh\nchett inad\nchain ring\nce ara\ncandice kp\nbrain cancer\nboom bap\nbon ino\nbo zak\nbel more\nawesome st\nad cc\naas tha\n: ""\nâĹ Ĩ\nzepp ole\nyogi babu\nwide band\nwhoo hoo\nwarm ington\nvoc mnews\nultra sounds\ntwi zy\ntran che\ntic h\nthen igh\nthe family\nt gom\nsy rups\nster ns\nsinu ous\nshingekinok yojin\nscher merhorn\nronal dre\nrock s\nrange ela\nram il\npoliticom ag\npitch atpalace\not lfp\nos rs\nol dd\nok tar\nny strom\nnat or\nnasti ali\nmis spelt\nmea ford\nman asi\nmakers mark\nmahar ajas\nla ddu\nkir ri\nken nelly\njj author\nishqba az\ninherit ors\nic fp\nhuntel aar\nhindu rajyam\ngre te\ngiff nock\ng nu\ng audio\nfresno state\nflori ana\nfan fan\ndu ro\ndonagha dee\ndi bru\ndeb namcarey\ndal at\ncros scu\ncontu sion\ncommissi ons\nclu cking\ncimo relli\nch awal\ncat sare\ncas set\nburun dian\nburn age\nbrick laying\nbrad thor\nbe holden\nback to\nawild life\nanarch ic\nal ag\nab ank\na ica\nðŁĻıðŁı¾ ðŁĻıðŁı¾ðŁĻıðŁı¾\nðŁĺ²ðŁĺ² ðŁĺ²\nðŁIJ¯ ðŁIJ¯\nì¤ ij\nâĢ ²\ná rio\ny stery\nwilliam devry\nwerder bremen\nvk xip\ntyran n\ntren ching\ntip sters\nsyn nara\nsw right\nsuppre ssive\nstar liner\nsolu bility\nsite c\nshaw nat\nsardan arohit\nsar kis\nrene eyoung\nr ÃŃo\npu jas\npsycho tropic\npss sst\nproviden cia\npl ss\npetr illo\nper cen\npc cs\npark town\npad ano\npachy derm\nonceupon awine\nnatu rist\nnak ama\nnaf s\nmy ki\nmarma duke\nmait land\nlu ba\nletsgo peay\nlefthander sday\nlaz lo\nlave zzi\nko taro\nkit z\nk nt\njäger meister\njoss whedon\nimperson ates\nhaj jar\ngor ving\ngen au\nfu to\nfive star\nemerson college\nea org\ndiste mper\ndau ph\ncro cks\ncri spy\nch ome\nce du\ncar vey\nbo vet\nbluemo on\nbig issue\nbab oo\nb hang\narche ology\nar ayana\napprais ers\nac op\nðŁĵ ®\nðŁ¤§ ðŁ¤§\nâŀ ¥\náħ ł\nwy oming\nwater view\nwar ps\nvivo v\nvideo editing\nven ceremos\nus yk\nurgent podr\nu sia\ntre stman\ntb harat\nsun ds\nstra der\nsoh na\nsmo vie\nsitu ation\nsim feropol\nshan er\nsh ying\nseeyou in\nse gar\nse cker\nroo yen\nron chi\nroad trippin\nren ounced\nren ji\nquie ren\nqueensc liff\npropagandi sts\npres sclub\npp opro\npitt ston\npav a\nnemac olin\nnatu relle\nmil ou\nmil ani\nment alism\nmed star\nme sni\nmat tress\nman ahan\nlu pul\nlingon berry\nlewi showes\nlar ga\nla el\nla bia\nl rn\nl hb\nke ce\nkar is\nka ad\nholac racy\nhol mberg\ngur t\ngo pe\ngaz illion\ngael tacht\nfu tari\nfo ca\nflatbush zombies\nfak ta\nemo ji\ned by\ndy dd\ndanadel any\ncw ts\nclothe spin\nchop da\ncbs allaccess\nca ins\nc fx\nbron wen\nbm wx\nblood letting\nbilet nikoff\nbike month\nback tracking\nartag nan\naf as\nyil dirim\ny pf\nwilke sboro\nve f\nv awg\nuk la\ntri phop\nther itage\nthar an\ntem u\nsteno grapher\nste mple\nspecial forces\nson go\nso gon\nslo v\nsatthe table\nru ddin\nrodri gue\nrig sby\nquint en\npro av\nprize winner\npre o\npe ppe\nparen thesis\nonna is\none gro\non sie\nomot ola\no gm\nnew berry\nne vil\nnak ashima\nn ja\nmu tour\nmid mowx\nmic on\nmic kie\nmer se\nmenom onie\nko bus\nkei sel\nkaley cuoco\njointhe movement\njam fest\nilli beral\nhut cheson\nhi ston\nhazel tine\nha o\ngu eu\ngrun wald\ngrig sby\ngre sik\ngel atine\ngaale inster\nevery things\ndon ley\ndeten tions\ndavematthew sbnd\nct cs\ncraft speople\ncounting crows\nconnec ted\nconjun ct\nclinton foundation\ncity jet\nchesapeake bay\nchatter ton\ncar ita\ncan ine\nbur ress\nbts b\nboundby blue\nbbcra dmac\nbas sel\nbariatric surgery\nban ya\nbad ou\nb wp\nal ara\nak ata\nabduc tor\n== >>\n................ ....\n% *\nÛĮ ÙĪ\nyuv raaj\nyour san\nworld champ\nwood ham\nwescra ven\nvin do\nupri ver\ntom ah\nthoothu kudi\nswap nil\nstrepto coccus\nstaf froom\nsalv ator\nroof line\nrel aciones\nre land\npre zi\npon ton\nper las\npaul feig\nof ac\noc elli\nnational bookloversday\nnar alokesh\nmuslimb rotherhood\nmull er\nmu zic\nmonk man\nmanit oba\nmanico tti\nlove dit\nlma ooooooo\nlam ang\nlac to\nker nel\nk ti\nintro version\ni fan\ngr é\ngar lick\nfrance sc\nfe rens\nfamer tr\nec al\ndrown ing\nd fr\ncub ical\ncre ak\ncouple t\ncor b\nco cho\nchristy clark\nce w\nce sium\nc mag\nbuzz y\nblan chette\nbar que\naur at\nath ene\narri vent\narpeg gio\nang eni\nag akhan\na herne\nzar beaz\nwine festival\nwh in\nwasimak ram\nwaf ina\nw aga\nvas ai\nuu h\nuk ri\ntra si\nton ik\nth impact\nsyny ster\nsun wolves\nsri shti\nsmu ir\nshe hu\nriski est\nre ddin\nr gd\npun it\npre ta\npower pack\npol loi\npitt con\no ddle\nnj morningshow\nmersey side\nme cc\nmcelhin ney\nmccar thys\nmarket share\nmakeup addict\nma ula\nm mos\nline arity\nlikefor follow\nkings down\nker sten\njuni us\nisraeli pm\niah sbkb\ni hub\nhu sayn\nhey bridge\nfreshoffthe boat\nfra sc\nfaz enda\nfair lie\neff i\nearn shaw\neag let\nduncan james\ndar ton\ndaily quote\ncoo kies\nce sc\ncapric cio\nbur s\nbrum pic\nbie hn\nbattlec ry\nayrton senna\naw on\nare staurant\nì ¸\nÈ Ļ\n| âĹ\nyearswith ourhomebts\nxaver ian\nx oom\nwill ington\nvilli ans\nunassail able\nun polished\nu wl\ntrack work\ntown usa\nthelife of\nthe whl\nthe dragon\ntandon raveena\nt sca\nsweet grass\nsuper califrag\nstabil ised\nsle dder\nsin ing\nsin del\nseis mic\nseasons greetings\nse futbol\nsch ild\nsac nas\nsa ka\nrohat gi\nrin con\nq con\npu bes\npo len\nper tussis\npar va\norche stre\nnun ney\nnowh ow\nni en\nnel sen\nne pom\nmyco bacterium\nmoto g\nm fk\nlouise mensch\nlan ao\nkan ame\nk caf\njuli ssa\njose fina\nj sl\nish tonka\nis san\ninton ation\ninter group\nhul bert\nhou gh\nhales worth\ngu sti\ngalway hour\nfre res\nfag g\nfa hrt\nendor phin\nempe zar\ndad agioia\ncolon izers\nchill ers\ncarrieh fletcher\ncar s\ncali dad\nbrand ambassador\nbear man\nband anna\naw aking\naustin and\nassu redly\nari shaffir\nanalge sia\nali qui\nalbert dock\naizaw l\nadju dged\nact fl\nab sac\nzit ao\nzel man\nye hi\nyar die\nyak ov\nwedd ington\nwa thletics\nvacu ous\nv lo\nuse f\nun labeled\nun gi\nti ens\nthe pug\nsteadfast ness\nstar shine\nson burg\nsoco tra\nsh ays\nsch mi\nrencont res\nrec com\nproperty news\npret ence\npost news\nper roni\npar que\norphan ages\nnh ler\nnastiali ukin\nmuk ta\nmele hill\nmee gan\nmd ga\nmable thorpe\nll u\nlator re\nky renia\nko smo\nknock ers\njo bin\nje melehill\nhom mie\nhistory inpics\nhaving fun\nhaber sham\ngon dol\ngla ad\ngab er\nespn radio\ne mon\ndol lies\ndhar mesh\ncote divoire\ncoo puk\ncompen satory\ncommerci alize\nberlin wall\nbe guiled\naper ri\nalt itude\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃ\nðŁIJ ¡\nÙĦ ÙĬ\nyorkshire man\nwk f\ntu ku\nthir um\ntal yl\nstri pers\nsto ren\nspiritu alist\nselfies for\nrum son\nroano ke\nreneeyoung wwe\nrecei ver\nq or\npro petrovsk\nphone book\np sm\nover dosed\nou twood\noli vine\nnow next\nmoon star\nmol dav\nmma junkie\nmi ming\nman ito\nman arola\nleslie grace\nkill joy\nkash an\njon taffer\njack er\ninst ag\nimprovis ers\nhun te\ngla ze\nfroma bove\nfloor board\nethe kwini\necoun try\ndu mit\ndiaz jr\nd orie\ncro om\ncooper age\ncoo ing\ncon oce\ncompart ment\nbud leigh\nboo throyd\nbio feedback\nbi ella\nb ace\nanti semite\nan shu\nalbum covers\nal mo\nah hhhhhhhh\nag awam\naf low\nîIJ ij\nâľĪ âľĪ\nà¹ģภĶ\nzu cca\nwwi ii\nvamp ira\nup vote\ntobac con\nthis couldbe\ntenn ant\nteam priyanka\ntarheel football\nswakop mund\nshi zuka\nsar oj\nrou ses\nran jeet\nquick time\npreci ousness\nphoto gra\npedest als\np foa\noo ool\non ghwa\no toy\nnewton ma\nna sher\nman gini\nlith ops\nlef thand\nkur u\nkot tai\nkat sura\nju hl\njaqu eline\nj ll\nj anner\nintra preneurship\nhu ebner\nhor loge\nher zl\nhein en\nha vers\ngro ms\ngrace and\ngr ze\ngh hhh\ngar ner\nevery onec\neli er\ndr ington\ndining room\ndeple te\nde ul\ncr ace\ncou g\ncont our\ncastell on\nbrit omart\nbott arga\nbelle view\nassal amu\nand ras\nall red\nagar ic\nabraham son\n< $\nðŁļ Ĩ\nðŁĴĭðŁĴĭ ðŁĴĭðŁĴĭ\nâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\n⾨ ðŁĺį\nyomi uri\nyo k\ny barra\nwall kill\ntour series\nthu mp\nthe tech\nthe cut\ntem pel\nte ct\nsund berg\nstat cast\nstar ship\nslee plessness\nshmu el\nscor ps\nsat u\nroes elare\nre ps\nre ger\npower team\npolitici zing\npo ema\npeer review\npang bourne\nok anagan\nnz rl\nne ils\nmun ni\nmuff lers\nman handled\nluther ans\nlearning isfun\nkur ang\nkron k\nkre ider\nkar ad\njet ties\niz abella\nith u\nislam abad\nirrit ability\nholl inger\nhob sons\nhmv tweets\nhel ge\nglad win\ngc ms\nful ks\nfol som\nfever ishly\nfacto ids\ndu tifully\ndraf tees\ndivisi veness\ndis ley\ndel barton\nde cen\ncontro le\nci mb\nch go\nbr injal\nbil berry\nbab ad\nar yl\nam oral\nam j\nal tice\nagne tha\nag re\n; âĢ¦\n. ðŁĻĮ\nðŁĺ© ðŁĴķ\né m\nzam bo\nwomen for\nwa jid\nvap iano\nvac ca\nun witting\nultra vox\ntra f\nthe movement\nte kapo\nte gal\nte ats\ntar quin\nsweet pea\nsuper duper\nstam m\nspider webs\nsomi asis\nso fus\nsh wed\nser ah\nscre a\nscal per\nrei ffel\nprinci pe\npag et\nosi jek\nom c\nofficial melb\nnu x\nno hate\nnerd land\nne opolitan\nnc dc\nmontele one\nmin ks\nmarin ate\nlumb ini\nlom ba\nlive science\nlen iro\nky ys\ninvisible illness\nimpedi ments\nhy pes\nho ony\nhin kes\nhair net\nha yer\nfree thinkers\nfa ena\nexege sis\ndoom metal\ndic amillo\nde compressing\ndal er\ncommissions open\ncolour ful\nclu cas\nclayne crawford\nckin chen\nchu cho\nchin aman\nchatur bate\nch itchat\nch allen\ncenter stage\ncas amigos\ncaroten oids\nbon da\nbigh ouse\nball state\nbag el\nbac trian\nawe igh\narizon a\nanc alerts\nain ting\nadi es\nacce sories\nðŁĴĽ @\nðŁıĿ ï¸ı\nðŁİĤ ðŁİĪðŁİī\nìļ°ì£¼ ìĨĮëħĢ\néĿ Ĵ\nâĸ Ħ\nwomen kickass\nwater s\nwalker ton\nventil ate\ntrou ty\ntau rasi\nsu mitra\nstry cova\nsla den\nskor janec\nship builders\nro ble\nrheumato idarthritis\npresu ming\npre search\npot vin\npo wr\now ine\notto bre\nolds mar\no amaru\nmiér coles\nmarav illa\nmanju shri\nlori keets\nlogan ville\nle ben\nkron a\nk ls\nj th\nicar agua\nhumm el\nhorn swoggle\nharish kalyan\nhamil tons\nha pus\ngu ter\ngregg sulkin\ngel at\ngal las\ng cd\nfrustrat ingly\nfol ly\nfeas ance\nevic z\ndipp goi\ndevop sdays\ndefence minindia\ncon sternation\ncon gi\nchristmas giftideas\nchint z\nbrooklyn bowl\nbran islav\nblo ts\nbir man\nbice ster\nbe go\nbayani han\natharva amurali\nal vv\nafree dom\nab aesq\na jam\nðŁĺįðŁĺį #\nðŁĴ º\nðŁĩºðŁĩ¸ ,\nâĺºï¸ı @\ny ig\nwhit ened\nv se\nun conquered\nturkey day\nter je\ntal as\nt mo\nsw apo\nsu li\nstep brother\nspecial edition\nscot to\nrour kela\nroodepo ort\nroh mer\nro mag\nremodel led\nrang pur\nposto u\npetro lia\npet one\npa wl\nny ayo\nnu jab\nnec co\nname plates\nmukher ji\nmonsanto co\nmh or\nmaxim illian\nleic am\nkyle petty\njaz min\nive agh\nintellectu alism\nil ka\nhi mer\nhawkeye football\nhar di\nhappy hanukkah\nhapp ppy\ngi mignano\ngator sfb\ngar ton\ngar ni\ng xp\nfar nell\nfad ers\nenrol ments\nene o\ndo ak\ndd yn\ncoqui halla\nconver sely\ncolla ged\nchri sr\nch acko\nbest actress\nbe mpton\nbar tering\nawk wafina\nat kinson\nambas sac\nama ia\nalar mist\nak ela\nabbey dale\nðŁĻ į\nðŁĺ² ðŁĺ²\nì³ IJ\ny kid\nx tin\nx eni\nwoo ooooo\nwas sen\nut ch\nthe josh\ntar af\ntab ac\nta sik\nta homa\nstar com\nsk k\nsh ema\nseri alized\nscandin avian\nsc primary\nsai do\ns green\nroun tree\nros ler\nproject car\npaw son\npat co\npanch al\nofex cellence\nnew writing\nmorninge dition\nmom preneur\nmlb fancave\nmis step\nmc naught\nmar ckinchen\nman crush\nmad ine\nmacer ated\nlec tionary\nla ffer\nkunal nayyar\nkorean food\nko sa\nkang en\nk na\njo ppa\niscar iot\nhouston tx\nhard well\ngorkhal and\ngig nac\ngai waterhouse\ng ittin\nfr w\ner langer\nepisco pal\ndpan abaker\ndolce tto\nder bi\ndanielle jonas\nda official\nchar laine\nch iso\ncat sin\ncanadian art\ncaf od\nbrack nell\nblow n\nbla sko\nbivou ac\nbb crb\nari a\narche age\nak c\nait c\nz big\nxy lem\nwi wt\nwhiteri bbon\nwha kat\nweb zine\nvotethe wanteduk\nvisit california\nun gen\nturi sts\ntre o\ntobacco day\nthe women\nthe hub\nstjohn s\nsouth down\nsom thing\nsl one\nsk m\nsam et\nrick mercer\nrayn ham\npronounce able\nprison planet\nphoto journalists\np nu\nover played\nop is\nnw sc\nnewmusic monday\nnbs finds\nmuch hh\nmess am\nmel ky\nmac cas\nly r\nlove reading\nling am\nl ence\nkirk bride\nkal ai\nk pix\niso sceles\niron ton\nha ggling\nha ash\ngur meet\ngrand fathered\nglori ae\ngad gets\nexpress ly\ndust pan\ndragme down\nding bat\nd ila\nd drfc\ncrim mins\ncon gas\ncon founded\nco bal\nch asseur\nc sula\nc suite\nbetter late\nav lon\nav ine\nalpac ino\nall music\n. âĺºï¸ı\n! âļ¡ï¸ı\n! ")\nðŁij¨âĢį ðŁİ¨\nðŁį §\nëłĪ ìĿ´\nyo gas\nvel in\ntor rance\nti ranga\nthegill sfc\nteam fiji\nt she\nsou ci\nsk oy\nsingh vi\nse ga\nsad tweet\nrose berry\nrob ing\nr tu\nprote ome\npetro grad\noke h\nobfusc ation\nns v\nnor they\nne phi\nnar din\nmonoun saturated\nmono graphs\nmon stax\nminig ames\nmini fig\nmcg ough\nmarketing profs\nmac ys\nl md\nku mba\nkot ton\nker ang\nkel sang\nkadam pa\njr l\njon ker\njedin ak\njag gers\niniti ator\nhaul ers\nharshad chopda\nhann er\ngrims ley\ngr on\ngl ickman\nget te\ngapp ed\nfree gaza\nfox catcher\nfin neg\nf ylde\nexcell ent\ndol orosa\ndic ally\ndemago gue\nd aga\ncurve leicester\ncud more\ncristi anor\ncostam esa\nchri sky\nchalleng ing\nbor omir\nble akley\nblais dell\nb ols\nanton ius\nak ra\nad ara\nac io\nâĢ¢Ì Ģ\nà° ļ\nÄ ĩ\nwon da\nwesth ollywood\nw spa\nw new\nw kwk\nvin der\nv card\nttac ars\ntourism malaysia\nto tino\nsuj ata\nsu chitra\nstrength training\nstrat us\nsli ppage\nsky city\nsi ver\nshe bang\nry all\nram sar\nrace to\nprote as\nplu ssed\nph wo\npar li\nous ers\nohl hockey\no he\no cher\nmo ho\nmn beer\nmm is\nmi ei\nmcal ester\nlife jackets\nletsgor angers\nl antis\nki stler\nkak apo\ninspir its\nibm research\nho an\nhauser wirth\nhand fasting\ngrosse to\ngold blatt\ngob stopper\nfer di\nen isa\nel achat\necla irs\ndri ed\ndr joe\ndel ran\nde icing\ncp cs\nconstitu tional\nconnie britton\ncomplain ant\ncatt aneo\ncas se\nbur fict\nbit zer\nbigger than\nbal cones\nba sheer\nar mah\nanti perspirant\nang at\nameri kk\nzor bing\nz ale\nyearen d\nw jr\nvl tava\nvene tia\nval li\nun willingness\ntu fa\nterror ised\nstrati graphy\nsol ders\nsigue meyte\nsecond chance\nsax by\nsa hoo\nroger sville\nregin ae\nred water\nreal cand\npu gwash\npor tioned\npolymer ase\npi ha\npatt u\npalla dian\noil er\nnak at\nmos fet\nmond son\nmett ler\nmccar ren\nlight body\nla ppi\nkav insky\nji van\nis da\nhab sio\nha iz\nfu kun\nfeed me\nex changers\ndred ger\ndra gos\ndespan yol\ndal loway\nd sa\nd iness\nconun drums\nconcert master\nchrista bel\nchip board\nbro me\nbr dg\nbot con\nav ox\nar iness\naph y\nan sar\nallyounee dise\nair cooled\nadri analima\n________ ____\nðŁIJ µ\nðŁı» #\nðŁİ ¦\nya esu\nwp xi\nwater mel\nvul kan\nvar an\nuc w\ntyler hilton\ntravi spastrana\nta vola\nston ep\nsecon trol\nsciencer ocks\nrot ella\nron ge\nro j\nreli shed\nreinvigor ated\nre configured\nquack enbush\npram banan\npot pie\nph ry\npar ador\npapel bon\non pointe\nmoom ins\nmo the\nmerriam webster\nmeng gay\nman gin\nli min\nlegali ze\nlar ousse\nku pp\nksu owls\nk lon\njonah hill\ninter religious\nimpo stors\nic ta\nhako date\ngiz mos\ngin ar\ngen de\nful wood\nfr itsch\nfi dh\nen max\necach ockey\ndun ns\ncran ach\ncode cademy\nco ste\nchau tala\ncarol iner\ncape talk\ncap ela\ncab anat\nbeat boxer\naudi uk\natlan tica\nast c\nap cs\nanay ake\nalovel is\nalexander mcqueen\naf gan\nacadi au\nâĿĦï¸ı âĺĥï¸ı\nze ena\nyy cre\nyear th\nu ow\nto wered\ntegu cigal\nta jima\nsymboli sing\nsurvi vethe\nstipul ation\nstati k\nson ne\nsi fa\nsad dler\nqui roga\npy torch\nprecep tor\npra sad\npositi f\npopein dc\npj l\npaul weller\npas c\np me\nonline first\nobitu aries\nni gro\nn anci\nmur murs\nmu cous\nmorton pride\nmid ge\nmen eses\nmeda ille\nmatt cohen\nmass spec\nmark masai\nmariju ana\nman se\nlon ilove\nlive sat\nlat o\nlam po\nkri sallen\nkod wa\nkellan lutz\njurassic coast\njai den\nhighway men\nhailstate bb\ngo tv\ngine ttacars\nflys fo\nfin dac\nfestival en\nexpi alido\neurope a\nduck dynasty\ndil dos\ndil auren\nco habitation\nchi yo\ncha ing\nbe aman\nbaz i\nbar ash\naw akes\nar ugby\nantio quia\nan ele\namas amy\nam eral\nðŁ¦ĭ ðŁ¦ĭ\nyour schoolgames\nwel ke\nuncann ily\nud ha\ntril ingual\ntransfer deadlineday\nthoma stown\nthe soul\nstu ll\nsi rona\nsem rush\nra hu\npet l\npe ix\nol it\nnaï ve\nmor ad\nmclo vin\nmatthi as\nmasc olo\nmapl eridge\nleniro bredo\nlati fi\nl ero\nky ren\nk lim\nk cbs\njapan travel\nir yna\ninter brand\nhealthy recipes\nhat chee\nhar ia\nhal owc\nha stert\ngu di\ngam bling\nfree zakzaky\nes ler\neli ane\nea stridge\ne derson\ndelhai ze\ndavi dragan\ndar agon\ncir clec\ncell dweller\nce sare\ncar om\nbru mm\nbrand es\nassi sta\nas shat\nal gom\naggre tsuko\nðŁĻĭ ðŁı»âĢįâĻĤï¸ı\nÙħ ÙĨ\nye an\nyan anda\nv cm\nv awine\nunion pay\nun damaged\ntrou ver\ntigre sses\nthalas sa\nswitch gear\nson or\nshee ba\nsc ali\nsau gerties\nsan tur\nrod rick\nro miley\nri als\nquart z\npro mom\nplat a\npit kin\npar kins\noo ker\nnationalgirlfriend day\nnager coil\nn mr\nmor ose\nmomen tof\nmis andry\nmed hurst\nllan tri\nliann ela\nli bi\nkerato conus\nj assi\nima p\nhaz le\nhatt en\ngy u\ngri et\ngo sar\nge fs\ng out\nffi est\nf live\neb sco\ndun kelman\ndu rie\ndollar shaveclub\ndg g\ndear g\nd elling\ncrum pler\ncor sairs\nchef chaouen\nchan ov\ncau l\ncan el\ncac io\nbuffalob isons\nbluest acks\nbab olat\nas ant\nangies list\naj ed\nacry late\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį\nÚ© ÛĴ\nzel din\nze gers\nwo ai\nwe ish\nvoye ur\nve p\nunited center\ntrun chbull\nthi o\nth é\ntaylor kinney\ntam bien\nsubr ata\nsisq o\nsequ ipment\nseam an\nsand which\nroush fenway\nrevo ke\nrelinqui shed\nregar dez\nrealcand aceo\nra ices\nr px\nr gr\nqu ic\nprem inger\npp ort\nover shadows\nout paced\non looker\nncaaw restling\nna ish\nmicro algae\nlefthand ed\nheis risen\nhee ft\nhay ato\ngo eth\neaves drop\ndu stries\ndidier drogba\ndevi ka\ndelic ata\nde trick\ndaw ley\ndavidg andy\ncrazy catlady\nco vic\ncine matic\nch ynna\ncao im\ncambus lang\nbull fighter\nber occa\nbar ging\nb chy\naz es\nalk alo\naliqui ppa\nalamo sa\nal ready\nak ab\n" _\nðŁĸIJ ï¸ı\nðŁĴĻ ðŁĴĽðŁĴĻ\näº Į\nz aga\nyork region\nwrestlec on\nwol a\nwes warm\nwag h\nu je\ntrape zoid\ntra doc\ntil ghman\ntiger land\ntegucigal pa\ntan ge\nsun an\nsto a\nspor tivo\nsnow mag\nsme aton\nsh isa\nsab es\nri ffa\npri mas\npre vin\npitt en\npaul ryan\np ym\now ers\nnouve au\nnih ilist\nmo ves\nmis al\nmi dea\nmetal hammer\nmentalhealth awarenessmonth\nmc mc\nman united\nli more\nlast dayof\nlar is\nkom an\nj sut\nilu min\ni frit\nho yos\nhillar ys\nhal va\ngroup think\ngas per\ngaff es\ngab ler\nga yo\nfundament alists\nfi en\nfe ign\nfar ben\ne sem\ne ink\ndad y\nda quan\ncr in\nchrysanthe mums\nchang er\nbri ere\nbeard gang\nb th\nato saurus\nas pe\nary ana\naqu afina\nanne boleyn\nane h\n# £\n!! !?\nðŁĺįðŁĺį âĿ¤\nãĥ©ãĤ¤ãĥ ĸ\nଠ¿\nzab al\nworldr hinoday\nwil burn\nunru h\numa b\nthom ann\ntex tu\nstrugg lers\nstie glitz\nsqu alid\nsom ar\nsol nit\nsoci ed\nsny ders\nsky park\nsky activ\nsilver thorne\nsecond ment\nruk mini\nplun gers\npele tier\noliviam unn\nnzv sa\nnottingh ill\nno am\nnet jets\nnam ak\nmun tu\nmmo pen\nme ador\nmat toon\nmarki evicz\nmand hana\nlost withiel\nlax er\nkrizz kaliko\nkor aput\nki aro\nkho sa\nkavi tha\nkan in\nja imes\nj mf\nis lan\nimpin gement\ni league\nhoy ts\nhoo pa\ngram een\ngov walker\ngo ethe\nglen na\nfu tp\nepic fantasy\nelizabeth ton\neinste ins\neconom ie\nec inema\ndre ssel\ndon ya\ndepress ants\nd indi\ncrani ofacial\ncole haan\nchad ron\ncatch the\ncam arena\nby ard\nbush wack\nbritt en\nben aud\nbel field\nbaw ang\nbag no\naye let\nag ry\n! ðŁijĬ\nìĽ Į\nzukun ft\ny rold\nwood hull\nwolf blood\nus r\nten ley\ntag um\nsvet lan\nsparkling wine\nshorth aired\nsd v\nscott lin\nsam well\nsai ful\nr hay\nq lder\nprepa red\nporsche retail\npnp cordillera\npartici pat\nonec lu\noak hill\nnor ad\nnewyearsre solutions\nne als\nmi shi\nmi mes\nmi koto\nmed lar\nlg t\nkumar is\nkn ish\nkal ayaan\nkab ah\nign ace\nhe iner\nhat maker\nhail statefb\nha sen\ngreat outdoors\ngrace point\ngra ver\ngor ockets\ngar ds\ng ss\ng sh\nf sk\nentr al\nen ric\nelec tioneering\ndover street\ndou sing\nchickam auga\ncer ruti\ncc f\nc tos\nbri bie\nbraid wood\nbirdlife oz\nbindi irwin\nbetty buckley\nbar ford\nbachelor abc\nav ital\nasu mmer\nz oni\nwon gs\nvor derman\nve ces\ntu ah\nter nity\nten dered\nt add\nsudan uprising\nstragg ler\nstock holm\nsl ickers\nsar sfield\nsa ige\ns red\nreality tv\nrap wave\nprim erica\npir ating\npettic oats\npet finder\nperson ne\nperi sher\npat to\npart way\npan avision\nott traffic\nopp n\no gy\nnm state\nnichi wa\nnax os\nn js\nmobile payments\nml v\nme her\nmd ina\nllan twit\nlam ido\nkur ama\nkal ua\nka head\njol yon\nits amazing\nindi awith\nim plac\nill omania\ni ge\nhei sei\nhaw finch\ngor dita\ngol gi\ngod by\ngo comics\ngal anthus\nfol les\nfin sbury\nfcbayern us\nexpialido cious\nen ath\ndru bbing\ndrin ks\ndead man\nde met\ndall ara\ncypri en\nca ws\nby z\nbram bling\nbethan ie\nbefore the\nbao zi\naudio engineer\nash tami\nasbury park\nari bo\nar nel\naed il\nactually autistic\n& .\nðŁ¤£ .\nye du\nxbox live\nworld autismawarenessday\nworking man\nwith stands\nwin chell\ntouch point\nton gass\nti dus\ntelome res\nsub ter\nstar lord\nskil fully\nsingh bjp\nshar row\nshad dai\nsemi freddo\nsc abby\nsaturn alia\nsas s\nre printing\nqui jano\npi quant\npa ice\noun ited\nnews official\nmir alem\nmeh ro\nmdpi openaccess\nmari onettes\nmari olopez\nmafi as\nmac murray\nlm ere\nli h\nlen ahe\nland arch\nkrann ert\nkirk gate\nkar mal\ninf ern\nhorseshoe tavern\nhol box\ngram sci\ngood hue\ngo jo\ng cn\nframe store\nfr c\nfl andre\nfin anc\nfilm house\nfavor iting\nface friday\nf type\nedinburgh paper\nchat tisgarh\nch seats\ncc ca\ncar mageddon\nbri se\nbo diam\nblo dgett\nbhar athan\nbe positive\nbau mbach\nban jul\nb mac\nay ered\nani official\nanaly zers\nalan rickman\nag il\n! ?\nå ķ\n人 人\nãĢ° ï¸ı\nاÙĦسعÙĪد ÙĬØ©\nÅ¡ koda\nyou l\nwomens golf\nwolf mother\nwi ggin\nunivof standrews\nu cam\nty wyn\nthou sando\nthang ka\ntb world\nsø ren\nsu til\nspay ing\nso telo\nshape wear\nsh ali\nsenator durbin\nsec un\nsci fri\nsam mons\nsal di\nromanceno vels\nram ai\npulwama attack\npra sa\nporte ous\npike speak\npect in\npande mics\npal lid\npaco ima\none troy\noaklawn racing\nny le\nna heed\nmont co\nmilehigh basketball\nmedell ÃŃn\nmar san\nlv ad\nlong term\nl ga\nkumar sanga\nkri pke\nkinka id\nkane ki\nk lima\nhouse man\nh ns\ngover ness\ngas mask\nfuoris alone\nfiu mic\nfi fer\nfeld mann\neur activ\ner man\nenor rhea\ndoughnut day\ndista ste\ndid as\ndepress ant\ndark ens\nd pe\ncord ura\ncho te\ncheap side\nbu dy\nboy music\nbor uc\nbo it\nbedro omed\nau stra\nart week\narcan um\nall ay\naljon mendoza\nagen cia\nac lark\nì ¯\nëĭ ¨\næ ļ\nâģ Ħ\nwill its\nwest chase\nweb dotcom\nwasimakram live\nvictori alive\nuni o\nthey are\nthedavid cook\ntele path\nskul duggery\nscra ig\nscho tt\nscan arias\nsan o\nren y\nram ani\nrail card\nperl mutter\np fr\np amp\nol é\nni shimura\nmissouri ans\nmadi un\nmac ke\nma the\nm side\nlooking for\nloc key\nlevi than\nlast man\nkar oline\njoan rivers\njil ani\nit uk\ninsti z\nhotro ds\ngob smacked\ngastron om\ngall ina\nfair view\nerr body\nele mis\nead t\ne bru\ndu tiful\ndre ssed\ndog pile\ndivin ing\ndermato logists\ndan ese\nconfe u\ncoc ita\nche bu\ncan ews\nca ird\nbus d\nbron stein\nboc con\nbi pod\nbedra ggled\nbea hero\nbar dia\naw ood\nau bur\nake mi\naf lex\nabc new\nį Ķ\nðŁĴķ ðŁĮ¸\nâĿĦâĿĦ âĿĦ\nz ema\nxi er\nwrigley field\nwire shark\nv pi\nun hygienic\ntrou ve\ntox ics\ntogether weswarm\nto pa\nthru sts\nthi stogether\nth oops\nsust dev\nsuccess full\nsini ster\nsing topra\nsido arjo\nsi ao\nschne ier\nsak thi\nru bery\nronni erad\nrober ther\nroad man\nquack ery\nproté gé\npep ita\npassion flower\npaolo igna\npa aji\noff loaded\no kai\nna jam\nmoon beams\nmi ptv\nmerri mack\nmerco sur\nma pei\nlu sher\nlu ol\nlovethe se\nloc alizing\nkent ville\nkay fabe\nkar nad\njo ka\ninternationaldayof peace\nimmen sity\nic cr\nhu ub\nhu ger\nhod gy\nhistory in\nhfx mooseheads\nhen ny\nhemp stead\nhear tofthe\nhar aj\nfi bo\nf pw\neveryday carry\ndhan bad\ndan neel\ncityo fla\ncamel phat\nbro de\nbra dgate\nbou ffe\nbla ize\nbit i\nbe you\nbay state\nay lor\nawarri or\nar cu\nappreci ate\nann alee\nanad olu\namrit arao\nalder ton\nai rey\nagood day\n- _\nðŁĴķ ðŁĴľ\nðŁijįðŁı» #\nâĿ ĸ\nر ا\nب ار\nwebdotcom tour\nwc cc\nvintagec ars\nvandy k\nus n\nune as\nun ley\nto wa\nthofjuly weekend\nter abytes\nt dam\nsul fon\nsubsidi zing\nspee dup\nschool teacher\nsafaricom ltd\nril lettes\nrae es\nquince añ\nqui vers\npor us\nplus net\npase ando\nocci dent\nnico lec\nnew field\nner v\nnan ba\nmon os\nmix ologist\nman ji\nmait reya\nmacap agal\nm ris\nluv ly\nluth uli\nlon tong\nkeer thi\nkap it\njurisdic tional\nj wu\nira j\nheb burn\nhe z\nhalf way\nfry bread\nfro man\nfinally mario\nenner dale\ndoo oo\ndog love\ndo doma\ncutt inge\ncre c\ncou che\ncloud burst\nchick weed\ncher ri\nbon esh\nbarbar o\nbankrupt cies\nas say\narthro pods\nari b\namateur radio\nalternat ely\nðŁķ· ï¸ı\nâĻ¥âĻ¥âĻ¥âĻ¥ âĻ¥âĻ¥\ná k\nzo eter\nwren tham\nwa elex\nvintage shop\nvien na\nuri as\nto chigi\nthe te\nthe halo\nta req\nt ÃŃ\nspelun ky\nsop ore\nsher ald\nshee trock\nseun gho\nscar ter\nrockymoun tain\nrite ish\nraj in\npo ka\npay nes\npai ute\nni raj\nnade shiko\nmiy abi\nmariolopez extra\nma ghull\nless ons\nlar z\nl wcf\nkre ischer\nkaz mi\nkas atkina\njon tron\nje ers\njal sha\njake gyllenhaal\nis ar\ning lou\nindone sians\ninci dences\nin ke\nimport ant\ngoo di\nfu gard\nfru mpy\nfiore lli\nexter ior\nexporting isgreat\ner tu\ner ole\nend aken\ndra gom\ndemean our\ndell tech\ndel vin\ndecentr alize\ndau b\ncosti gan\ncopper as\nconversation alist\nco quito\ncla x\nchar bonneau\nchan sons\ncarbun cle\nbydgo szcz\nboro witz\nben jealous\nbaaaa ack\natter bury\napie terse\nangio graphy\nam ant\naf ace\nack land\n!!! ..\nâļłï¸ıâļłï¸ı âļłï¸ı\né cole\nwvu football\nwinter storm\nwal wal\nvolu tion\nvan e\nund ÃŃ\nu ark\ntravel stoke\ntrade able\nthur man\nthe mr\ntexas rangers\ntelom ere\ntan gh\ntac ops\nsyn cro\nsput tering\nsk ittle\nsh eck\nsab bir\nred coat\nrat nagiri\nrandomactsof kindness\nra wn\nra den\npu tu\npas aran\npan ynj\np nn\nomen o\nom iller\nnew nownext\nnet anya\nnat es\nn tx\nn sd\nmell ark\nmas oom\nloch lomond\nli stos\nli gi\niro ko\ninfor mants\nince stuous\nia eaorg\nho tin\nhass les\ngiardini era\ngam enews\ng town\ng dot\nfictional character\nfanta il\ner ugby\ndevil driver\ncol ac\ncode pink\ncobble pot\ncam ano\ncad ell\nbu ea\nbourbon nais\naudit ori\nau bu\napa ola\nangry birds\nalley ne\naid c\nagrit ourism\naber rant\në§Ī ìĿ´\nê² Įë\nè Ĥ\nà¸Ħภ°\nм Ñĥ\nyoshi ko\nxy z\nwheel barrows\ntol worth\nthe ban\nsul jovic\nsports day\nsom edays\nsoc cere\nsimm ental\nshakespe ar\nsentai filmworks\nrw m\nru ffy\nric kets\nrav aging\nrab ha\npromo ting\nport elli\npan tani\noc cip\nmr sm\nmontre uil\nmo sely\nmc millian\nmasco ta\nlogarith mic\nlipp ert\nleicester city\nlegendof korra\nld u\nl hot\nko loa\nke ine\nju muah\njink x\njelly beans\njazak allah\nj po\nindu str\nherli hy\nha kimi\nguerri ero\nground s\nger alds\ngalvani zing\nga alive\nfrom hell\nemily thornberry\nelectro chemistry\nel ach\ndad sarmy\ncru i\ncru cis\ncoden amed\nch ava\ncb z\nca ol\nbe strong\nban quets\nastronom y\nas mo\namin ophen\nal po\nal amein\nah manson\nah haha\nacet aminophen\nðŁĴķ ðŁĺŃ\nzoo plankton\nzi as\nze se\nworld pay\nwor then\nwon pil\nve te\ntw chats\nthe timeisnow\nte ifi\ntar in\nta id\nso lem\nshi b\nsha fi\nsasusa ku\nsasha apieterse\nrwand a\nreadytor ace\nramo ji\nram but\npoli mi\npark house\nouri sm\nnot acrime\nniel m\nnanditas weta\nmer avi\nmatt sorum\nmadeby google\nmacle llan\nm learning\nlu key\nkno y\nkere ta\nkaten ash\njolo kia\njay bilas\ninternational beerday\ninf op\nic tfc\ni yo\ni bee\ngue sted\ngud run\ngri ese\ngin a\ng mh\nfire water\nela bel\neb mt\ndoors down\ndit i\ndiscipl ining\nder ville\ndecla wing\ndare tobe\ncymb eline\ncoffe ecake\nclimate kic\nce ja\nbrigham womens\nbo dden\nblack shirts\nber icht\nar cli\nanti bully\nanalo gs\nadrian grenier\nac gme\nab abe\nðŁĩªðŁĩ ¹\nâĽĦï¸ı âĿĦï¸ı\nz end\nyu me\nyu dk\nwooo hooo\nwood worth\nwizard ing\nwhereare the\nw tm\nvla hos\nun sportsmanlike\nun satisfactory\ntu gue\nto paris\ntheshark daymond\ntemp i\ntc v\nta onb\nta ks\nset lists\nscul ls\nsch ing\nsam warburton\nsalu dos\nsal ta\nric ho\nri via\nr alls\nq ah\npromp t\npicku plines\npc ms\np tsd\non cbs\nok ura\nok um\nnit rates\nmulti grain\nmari insky\nman metuni\nktt unstall\nkaran vir\nintelligen ce\ninst ameet\nin ayat\nim man\nil be\nhobb led\nha bu\ngolden heart\ngo jackets\nglas shouses\ngen teel\nemphy sema\ndif fie\ndaysof biking\ndan as\nco es\ncleg ane\nchuck norris\nchiwe tel\ncheck off\ncapitol hill\ncap n\ncad den\nblood and\nbindas bhidu\nbhi ma\nbank able\nay ur\nax eman\narshad warsi\naldine isd\n>/// <\n. ðŁĺĦ\nìĿ´ì ¢ħ\nãĥ³ãĥ Ľ\nâĿ¤ï¸ı ðŁijį\ny auch\nwil mer\nwa ghorn\nvill eraces\nuniof surrey\nul k\ntrage dia\nsp f\nsof hope\nsher burn\nsepar ators\nsci atic\nsch em\ns big\nrol les\nre organisation\npriest field\npie zo\nph art\npe changa\npapag ayo\nout growing\nof ic\nniskay una\nmoven pick\nma hir\nkra bbit\nkirk herbstreit\njamie cullum\njagu ares\nj beil\nitv be\nit in\nise d\nim re\nilistic expialidocious\ni inet\nhurricanes andy\nhands free\nhaha ah\ngon char\ngo texans\nglblct zn\ngal leys\nfl ite\nfidd es\nen am\nel gon\ndiso wning\ndimension data\ncro oz\ncircas urvive\nci am\nchu cke\ncar lor\ncab er\nbre hm\nben folds\nbel aire\nbe ttes\nbar ner\nbalu strades\nava etc\naustral opi\nash lynn\nas ong\nare sults\narc turus\namericas gp\nðŁļ´ âĢįâĻĢï¸ı\nðŁIJ ½\nz aks\nyl vis\nwil ho\nviv ace\nuniwest scotland\nun manageable\nun convincing\ntour noi\ntor p\nteam scorpion\ntach ira\nsu tta\nsu mr\nsmith college\nsilver berg\nshoot filmb\nshe mesh\nringo starrmusic\nri sen\nred more\nrac a\nquintu ple\npontypri ddrfc\npolice woman\npero dua\npen ch\npe den\nno elia\nmo ch\nmen k\nmar fan\nmanner isms\nlo tor\nlight show\nli ège\nli ker\nlc w\nkram nik\nke mo\njohnny swim\nits morissette\nintran sig\nid preps\nian bohen\nhunter moore\nflat liners\nfitz maurice\nfil ho\nespn nba\nelectro mechanical\near drum\ne pperson\ndeceler ation\ndar b\ncrani osac\ncolli oure\ncmo guj\ncl gaming\nchristmas spirit\nchris riddell\nc gh\nbcbg maxazria\nautonom ously\nascen sion\napplic ability\nappar at\nali ze\nab uk\nðŁįĬðŁįĬ ðŁįĬ\nðŁĩ³ðŁĩ ¿\nzulfi kar\nye ter\nyc dsb\nwild cards\nwhis king\ntom ilah\ntimmer man\nteam viewer\ntai yaki\nsuperfe st\nstv l\nspor tat\nspo sito\nson der\nsch ill\nrosen blum\nronnierad ke\nrep ays\nred action\nre hana\nrain out\npulse ghana\npower hour\nplo dding\npence in\npacham ama\noxfam gb\noom men\noffer up\nni ff\nluci dity\nlo en\nlas ith\nkettle bells\nju da\nitsb hu\nitsbhu shankumar\nish war\nindy lights\nhill harper\nhayley atwell\nhal lowell\ngidit raffic\ngentle men\nfat ou\nendocrino logist\nel ica\ne ie\ndoo fus\ndomen ic\ndating advice\ndat work\ncritiqu ed\ncoach ella\nchu but\nchino is\ncastlewell an\nbu jumbura\nbrun ning\nbren del\nbo try\nbest show\nbest practice\nart c\nal hassan\nah so\n[ ðŁĵ¸\nðŁĺ³ ðŁĺģ\nðĿĹ Ķ\nåħ¥ èį\nyev geny\nwynn lasvegas\nwind screens\nwil ayah\nven nel\nunob trusive\nthe whitechapel\nste iz\nstaf fe\nsheff hallam\nsh anta\nsas ser\nsar ri\nre hydrate\nre ep\nproto ss\npink society\npe zz\nnew sted\nne revolution\nmicro processor\nmichael d\nmet ta\nmeh reen\nme jor\nmar vi\nlu croy\nlooooooo ol\nlam ento\nkristian bush\nkarti k\njam ai\ninde e\nimper dible\nhol ten\nhed ley\ngl om\nfor pleasure\nfilipinof ood\nfam osa\nestim ations\ne bba\ndr r\ncor is\nclo quet\ncl une\nchristen ings\nbusiness owners\nbele ive\nb fo\natmo sph\natas cocita\nash grove\narm rests\narak awa\nalas sn\naintre eraces\nai o\naga wea\nðŁĺį ðŁĻĮðŁı¼\nðŁĺĬ !\né lie\nzoes aldana\nz deno\ny wg\nwweb attle\nwwe balor\nwn g\nwardro be\ntou ma\nthe silver\nteenage mutant\nte mbo\ntake it\nstre sort\nspec tres\nspan akop\nsoyu z\nsincere ly\nsee konk\nscience direct\nsan tay\nridge ville\nreprori ghts\nre pos\nrc despanyol\npunche stown\nplay apex\npitt water\nperspec tiva\nor ync\nnbl canada\nn ky\nmrjame sob\nmotu eka\nmon gery\nmodi fies\nmake a\nland ry\nkeo ghan\nkeller williams\nkam bing\njackson ville\nis ambard\nir bid\ninstagram ers\nimo hq\nia q\nhydro plane\nherewe come\nheid feld\nh ny\ngy imah\ngn oll\nfan elli\nextor ting\nesp news\nelife style\nelder ry\ndsound system\nding us\nde wi\ncollu de\nclo ete\nchopda harshad\nchau th\nbut tock\nbrother lylove\nboston ians\nbj arne\nbir ce\nbeij ing\nback lighting\nasi des\nðŁĵ¸ ðŁĵ¸\nðŁĴľ âĿ¤ï¸ı\nza andam\nyam ahar\nwoo kie\nwhitt ling\nwalk up\nwa wel\nvoteuk directioners\nuz ma\nutd before\nti val\nthir tieth\nthen tic\nthe ginger\ntack er\nsy c\nsulfu ric\nspeci esi\nsp ly\nsear les\nsar angi\nri dic\nresul tados\nren gagement\npi a\npat ois\npat gt\npap es\nol ites\noil paintings\nnaseeru ddin\nn pe\nmu tiara\nmoul dy\nmistre at\nmatsu o\nmar ney\nmaq sood\nlab u\nkatie taylor\nkak i\nipp v\ning el\ni wear\nhiman sh\nhard ware\nhappyn avratri\nhaj er\ngul panag\ngo hard\nfas b\nem olli\ne migrating\ndull ness\ndivo ck\ndavel ackie\ncor ten\nching y\nchi pubschools\ncar rack\ncabanat uan\nca illat\nbe quia\nbar kad\nautom ated\nartu ro\nar ot\nand thenew\nale tti\nafcf ta\nab ies\nðŁļĹ ðŁļĹ\nðŁ¥ Ĵ\nðŁ¥ ĭ\n�� ��\n민 íĺĦ\nâĸ ¿\nyan agi\nwa verider\nun werth\ntsu kasa\ntourmal et\ntor books\nthan never\ntere se\nta sered\nstre ga\nso cc\nsmrt grls\nsingtopra chaya\nsi hc\nsham ba\nscience twitter\nsch wit\nsch oop\nra dia\nra bah\npur rr\npon ch\npole vault\npip kin\npaw patrol\npa ku\nontheroad again\nnot food\nnau strong\nnag ato\nna thletics\nmo id\nmerthy r\nmass mutual\nmark waid\nmadhu bani\nlight wave\nliberty u\nla uro\nko sha\nking size\nkerat osis\nkati es\nkall ang\nk pr\ninver mere\ninter na\nim mingham\nhu ling\nhan ji\nguardian eco\ngerst mann\nger von\ngary valenciano\nfe sh\nfavor ability\nf cl\nella eyre\nec co\ndisp els\ndir venkatprabhu\ndhi ve\ndab bs\nclt news\ncivic tech\nchristin aperri\ncer ven\ncat es\nbor de\nber ates\nbeir ne\nbarre t\nbanta yan\nar nos\nan ich\nam ya\nais y\n?? ...\n( ?),\nðŁĺĤðŁĺĤðŁĺĤ ðŁĺŃ\nyel m\ny bn\nun quen\ntz laff\ntruec rime\ntro tted\nthus ly\nthin q\nthere all\ntal in\nta vious\nsubver ting\nsubo ptimal\nssi ves\nsou ths\nso bukwe\nshu shi\nshel ping\nsham mi\nse pe\nsav ill\nri seas\nra vines\nra gazza\nprovin cia\npro max\npod ca\npixar coco\npd c\npakistan day\nofficial jld\nnw ob\nnin os\nnay y\nmun ford\nmirand acosgrove\nme gas\nli zzi\nletsgoo ilers\nlar ynx\nku tta\nkb fc\nje ph\nis ce\nil ola\nhomes for\nhat chi\nhaf ner\nguide books\ngod man\nfre shie\nfor zar\nfor scom\new opinion\ndraft day\ndj p\ndeut z\ndeleg ated\ndel ima\nde fused\ncot w\ncoqu imbo\ncapri mary\ncanber ratimes\nback plate\naval ley\nanpan man\naj ie\nadity amusic\nad dl\nab ounding\n( ~\nyebo sfaye\nw cl\nvand i\nutdbefore fergie\nusa wp\ntu lus\nthel ow\nter no\nstu bhu\nste urope\nskull hong\nsil vano\nshe persisted\nsever in\nsche coperez\nsau m\nsan antonio\nsab by\nsa ik\nru ba\nroot stock\nresi t\nreal alexjones\npsychop athy\npere mpu\npep co\nor so\none on\nnorth men\nnihon go\nnassi r\nmr ddyer\nmix down\nmer ian\nla voy\nl ort\nku suma\nkon eru\nklar na\nk fw\njinkx monsoon\nivory coast\niron dale\nira o\nin bar\nilai yar\ni yah\nhen gist\ngov andals\ngoogle earth\ngesun dhe\nfinal showdown\nfabi ana\ndre mel\ndown hills\ndi okno\nde valued\ndan ker\ncrin oline\nco pt\nci ans\nchicago tonight\nch ments\nce ux\ncarpool karaoke\nc iss\nbroken ness\nbou jee\nbat z\naustin chronicle\nask force\nall nighter\nagri gento\nacom ic\nach opra\n(âī§ âĪĩ\nyan asta\nwelsh labour\ntur man\ntrans ni\nthehobbit movie\nthe sal\nthe oc\nthe men\ntangi pahoa\nt qm\nstrugg le\nstati st\nsqu ar\nsi donia\nseep ed\nsecond sofsummer\nsa jak\nregre ssed\nraj inder\nozy mandias\nom ai\nmoon base\nmenta wai\nmartinluther king\nlun go\nlithu b\nkir sti\njuju y\njal fre\nj iru\nj chs\niz m\nindiscri min\nindie horror\nim por\niheart festival\nfri k\nff d\nfeder ici\nen pt\ndro oms\nden feld\nden den\ncro on\nchu mash\ncar me\nbric ol\nbra inte\nblack rock\nbanan aman\nau spost\natlan tique\nase chat\narti stanbul\narmie hammer\nðŁĴģ ðŁı½\n미ìĬ¤íĦ °\né¹ ¿\n⼠µ\nà¹ĥ หม\nzeit kultur\nwre y\nwithern sea\nwin de\nvi van\nva beer\nv afc\ntow les\ntomilah ren\ntar ong\ntapro ot\ntal madge\nta uro\nswachh survekshan\nsu ba\nstyle chat\nsp qr\nsn outs\nslightly stoopid\nslack lining\nser ger\nromp ers\nre mount\nrati fies\npro tag\npintof science\npen thouses\npar secs\npa al\nowo sso\noster ley\nneed more\nmug sy\nmorten son\nmeek ness\nmatthew perry\nmart inet\nmal econ\nlon gan\nlim mud\nkno pf\nke baya\nka veh\nk pm\nian to\ni sit\nhydro chloride\nhand crafts\nfootballa su\nfancy dress\negg ert\nconceptu ally\nclar is\nbug z\nbo ity\nblue and\nbatt lea\naw ine\naudi in\naira si\nad b\n//// ////\nåĥ ı\nyang yang\ny ade\nwy rd\nwhit ely\nwar mongering\nvk singh\nud hampur\nud as\ntra chea\nthisishar drock\nte ducation\nsweat in\nss ch\nsna ith\nslo bo\nshut tering\nshim mer\nsent e\nsad dling\nrubi k\nreal grumpycat\nrail riders\npre nz\npoke shopper\npink ham\nphu ket\np tu\noooooooo ooooo\noat cake\nnir man\nneuro psychology\nmm n\nmissouri state\nminim alists\nmill pond\nmichael brown\nmerrychristma severyone\nmd m\nmc gru\nmar sabit\nmanolo blahnik\nmadal yn\nmac ula\nmabu za\nly fe\nleg ang\nlady vol\njal opy\nio b\nil ce\nhoney mooning\nhi pper\nha beas\nglam or\ngaon kar\ngal ah\nevent i\neso k\nes lav\neast chester\ndrum beat\ndoo joon\ndom ore\nct tee\ncross fade\nchun ji\nceler ator\ncard nation\nbru ich\nbeverley knight\nbare k\nbal thus\nas syrians\naphor isms\nann amaria\nair disaster\nado do\nac led\níĮ ¬\nz illi\nuk ay\nu be\nty moshenko\ntu borg\nthe alarm\nten pin\ntaxi fy\nsy g\nsurplu ses\nstad ter\nsom eness\nsealevel rise\nsche er\nsch aal\nrox boro\nroc cat\nri gi\nravel ry\nrampal arjun\nra vels\nqui pped\npr sa\npj paralysis\npin sider\npicad illo\nphthal ate\nparis airshow\nornitho logical\nnbag league\nnar u\nnap a\nmon en\nmistran sl\nmen chaca\nman jit\nmalign ancy\nma gie\nkra kauer\nkirk hope\nk lang\nju die\nj sb\nir chi\nhom efurniture\nha sn\nh Ã¥\nghosthun ters\nfollowthe music\nflor sheim\nfl amb\nfi ggy\nef fu\neccle sia\ndas ara\ncumb rae\nchoo choo\nchatter ley\ncal crutchlow\nbil lows\nbhat nagar\nbell in\nbaltimore riots\nbal z\nbai da\narm our\nar ye\nalle magne\nai z\naaron ramsey\n.. âĢ¦\nðŁĻĮ ðŁĴ¯\nðŁĩ¹ðŁĩ ¿\n⼠ĵ\nwy re\nvit reous\nvier nes\nupp ity\nunder classman\ntw arri\nture k\ntur c\ntranscrip tome\nthe bestof\ntel enet\nte menos\nte abag\ntam bu\nsp ig\nskid more\nro mer\nrecipro cated\nraci alized\npre occupation\npot gieter\npoo py\nply ometrics\npk b\npil z\npe kan\nopi ates\nna oya\nmorgan library\nmen de\nm craven\nlo athed\nlinden hurst\nky ne\nkp fk\nko chad\nkent wood\njun jin\njame ela\nits notre\nimper cep\nhi sti\nher vé\ngrand order\nfamily feud\nesc abeche\nen go\ne ht\ndu elist\ndress ing\ndebbie gibson\nda ha\nciner ama\nchristyclark bc\ncharge sheet\ncar less\nbys she\nbis saka\nbe partofthe\nabol itionists\naber lin\nabe be\n* /\nðŁĻĭ ðŁı¼âĢįâĻĢï¸ı\nðŁĶ Ĩ\nÎ ¸\nwe ater\ntutto sport\nti more\nthos fansbts\nstyle icon\nsteven spielberg\nstartrek beyond\nstarmagic ballfanfave\nsouth down\nsi pg\nsh ado\nsexu alized\nsel vage\nsea world\nse fer\nsa az\ns angels\nrun dmc\nrock ford\nro strevor\nren dy\npre position\nplu gin\npher able\nonder wijs\nof instagram\nno tobaccoday\nmain waring\nmahal axmi\nmaguin danao\nlazare v\nlam mers\nkot zen\nkitch engarden\njor gen\njalen rose\nj boss\ninsta artist\nfc punecity\nfar ish\nfal kner\nf atti\nexpun gement\nesc ut\ndro yal\ndisobey ed\ndis lodge\ndipi kak\ndi pp\ndeliver ing\ndan u\ncriss angel\ncor liss\nco safa\ncic cone\ncannot wait\ncafe terias\nbrad ys\nbp brewing\nbi gup\nbanff centre\nba azi\naudi r\nare ason\nanag lyph\nalder hey\nal ima\naffl ic\na ars\n% \'\nðŁĺį ðŁijĮ\nðŁĮ¸ ðŁĮº\n⾨ ðŁĴ«\nà¹Į )\nà¸Ī ะ\ny uru\nwo ther\nwarm bier\nupp pp\nun coated\nu mph\nu icc\ntur un\ntu ki\ntra ch\nteam jamaica\nsye da\nstubble field\nstock broker\nshay es\nshar ath\nser as\nseal ink\nsc illa\nruth ven\nro ker\npett itt\npac u\nop hie\nneighbour ly\nmumbait raffic\nmr tony\nmed u\nmay ur\nmar dle\nmahabali puram\nmag ico\nluke skywalker\nlloyd soflondon\nleigh francis\nlangu id\nku bla\nkiz ela\nkiller cat\nkh are\njo ell\njay anagar\nid les\nhiro to\ngreat ness\ngopher football\ngoo wls\ngon d\ngloriae stefan\nfron to\nfil ial\nest evens\ner g\ne bels\ndu wa\ndomest icity\ndiss i\ndesp ises\ndermalog ica\ncor alie\nconvivi al\ncon vers\ncon currency\nclubb rugge\nchrissi e\ncar rs\ncam by\nbu caramanga\nbh fo\nbertol ucci\nbacter iology\nau gie\napp leyard\naccli mated\na hotel\n?? ?!!\n! ))\nðŁĺĭ ðŁijĮ\nðŁıį ï¸ı\në ĮĢ\nw ops\nvisit dubai\nuk uran\ntrib bett\nthe exorcist\ntel le\nteen mom\ntar tt\nsweet man\nsu zie\nstrange ways\nsta id\nsho gi\nshay ne\nsall is\nrevol ted\nran ko\npolic emv\nple bes\npatrick stump\npaint it\not ello\nofficial rmt\nnumer ique\nmr mike\nmer vin\nmen es\nmat ins\nma sn\nma saba\nm chapp\nleven son\nle wie\nkill or\nkate bush\nkarate kid\njo shy\nital yin\nip hi\nhu hu\ngold corp\ngo ge\nflexi bly\nfer rato\nfar leigh\nfan of\nequ ines\nel fy\ndra peau\ndis illusion\ndi van\ndhu pia\ndach shun\nd hari\nclostri dium\ncarmel ites\nc cie\nbird watcher\nbam bina\nbab bac\nash ah\nano int\nanir ban\nair park\na xion\nðŁĻĬ ðŁĺĤ\nðŁĶ ±\nðŁıĮï¸ı âĢįâĻĢï¸ı\nðŁİĪ ðŁİģ\nнÑĭÐ ¹\nwoo craft\nwe blog\nun caring\nuli ses\ntextile art\nta ym\nsya allah\nsuper set\nsubli mely\nsu ttle\nstay er\nss yndrome\nspeci fies\nsor sogon\nsilver light\nsebastien loeb\nseac liff\nschlo sser\nrhe ingold\nresul tant\nrestre po\nreal kiefer\nquin ns\nprincess bride\nper awat\npe po\npale is\noster man\noc t\nnz s\nnu b\nnational margaritaday\nn dv\nmushroom head\nminer alogy\nmi haj\nmen ken\nmart solf\nmadi kizela\nma awards\nlys mic\nlove theatreday\nlau dable\nlace up\njim mi\njar im\nj ynx\nit to\nher tel\nheat ley\nhal ka\nh mp\ngram me\ngam blin\nfakenews media\nell racing\ndu duk\ndoddle oddle\ncot tam\nchrist omlin\ncar sand\nbul g\nbridge head\nbod hi\nbo di\nbas se\nbas quet\nar ash\nam az\nalton sterling\nak elly\nail way\nafter shock\naf neil\n+ ?\nðŁħ° ï¸ı\nãĤ ĭãģ\nâĿ¤ ðŁĴļ\nâĨ Ķï¸ı\n⬠Ľï¸ı\nyu ppies\nya j\nwwebattle ground\nwit tiest\nwgn tv\nwest london\nvol umen\nvegan foodshare\nuni e\ntu ka\ntoby turner\ntim heidecker\ntar ra\ntachi bana\nsy zy\nsweet ening\nstri ved\nstri ders\nstealth ily\nsn hu\nsmar ch\nshim on\nshe dit\nsha hab\nse woon\nsch ile\nque ur\npul borough\nprett ily\npra bal\npir tek\np mj\nor rick\noli m\nnoise tte\nneck beard\nn fo\nmu sand\nmother teresa\nmo khtar\nmm els\nmar awa\nmal functioned\nlu cht\nlean ings\nlea vey\nland send\nlam bourn\nkin na\njust voot\nir ca\nindian cuisine\nim debina\nho are\nhather sage\nhass ocks\ngh oul\ngastel um\nfamili as\nf fort\necosystem services\nder vi\nch era\nbom bas\nblau ch\nay sia\nap ala\nalbum cover\nade sso\nacoun try\nac scc\nab khaz\na hockey\n⾨ ðŁİī\n× Ļ×\nzo y\nwomen scycling\nwel les\nwe ave\nwar ded\nvi des\nver uca\nver bose\nu hc\nthankyou foryour\ntattoo society\nstargaz ers\nstal lion\nsma ster\nsix ways\nse diti\nscra fts\nsack boy\ns ated\npo ix\nor se\nny nj\nnew media\nneu l\nnbaf antasy\nmus burger\nmssarah paulson\nmartin borough\nmag ni\nliti gator\nknight sbaseball\nkings gate\nkick itout\nkath niels\njustin verlander\njay sh\niron ies\nira qi\ninn keeper\nhart field\nhar lot\nhad low\nh br\ngov pencein\ngohar dorgohome\ngod bles\ngl v\ngel v\nflet chers\nfire house\nfilm freeway\nentrain ment\nemma stone\ndirty dancing\nderiv ation\ndal ila\nconfor mists\nclo cal\nchrist us\nchi h\ncb ball\nbegru dgingly\nbank sters\nball sbridge\nandre sen\nador ableness\nab unga\n\' \'@\n! \'\'\nzam zam\nyu o\nu ver\nte als\nstereok icks\nsong contest\nsol ak\nse res\nse berg\nsa kata\nross ana\nri gh\nresu men\nrel f\nrachel zoe\nph ale\npassy unk\nof gem\no gn\nnur der\nnug get\nnite sh\nni hotri\nna diam\nmultit ouch\nmor y\nmc y\nmaz ouz\nli pi\nlar an\nkinder transport\nkil kee\nke els\nkab we\njave dn\ninfin i\nid hi\nhy uga\nhuntington sdisease\nhorse hair\nhi rai\nhay field\nha kan\ngp stpete\ngor sky\ngi us\nge mba\nfullmetal alchemist\nfor o\nfee der\nemple o\nem ple\neber sole\ndorse taonb\ndigg ory\ndid there\nde jo\ncountdownto kickoff\ncompens ates\ncoinci dently\ncoco tte\ncob den\ncatt ar\ncatac lysmic\ncam hs\nbrew gene\nbounty hunter\nbo ing\nbe ggan\nband maid\nbaker loo\nantipo des\nðŁİī âĿ¤\nï¸ ¶\nà® Ĩ\nà ¢\nyar on\nwe de\nw pi\nthugsof hindostan\ntheband ghost\ntex astri\nswi zzz\nstanis law\nspr inted\nspeed running\nsamanthabar ks\nrx theatre\nrobbie amell\nrav jiani\npru st\npriv é\npost it\nport vale\npol in\np gl\np by\notta was\none kiss\no cken\nnrl knights\nnight scape\nmortal kombat\nmk stalin\nmilli a\nmar aga\nlac ounty\nkyo to\nkristall nacht\nko hat\nkan ell\nkahu ku\njuli ann\njas sy\nj sc\nim iss\nhr ough\nhoo doos\nhelms man\nhand drawn\nfex pression\nfast n\nfar ingdon\net cetera\ndun luce\ndon nas\nde min\nd bt\nculd rose\nconnec tors\ncombat zone\nce si\nce ol\ncall center\nbushra gohar\nbu ssed\nbre saola\nbeque athed\nb inger\nar mam\nalla in\nalder aan\nabid in\n미ìĬ¤íĦ° 미ìĬ¤íĦ°\nà¹Ģภª\nൠĨ\nÙĦ اÙĦ\nze us\nyeezy boost\nwo tc\nw aked\nus latino\nur bs\nun hindered\nun commonly\ntol son\nthra x\nthermo graphy\nter adio\ntal kabout\nstere os\nsousap hone\nsmi the\nsleaford mods\nshipla p\nsha e\nsav inghope\nsaddle bag\nrish nan\nrepo stre\nptero saur\npre gaming\nprabhu deva\nnorfol khour\nnol la\nno sa\nnivin official\nnight market\nn wot\nmer ano\nmel illa\nmar ic\nmaha ffey\nluck enbach\nlastman standing\nlam esa\nl ome\nkit we\nkh ong\njunior golf\njet packs\njam mf\nj ela\ninstru ction\nhud gov\nherman mashaba\nhatt i\nhan deer\nglynd wr\ngermany diplo\ngar bine\nfor co\nfo etal\nfilm production\nfeni x\nfarmer smkt\nfa dil\nev anna\ndis sections\ndil an\ncol usa\ncla sic\nchauvin ist\nbow li\nat rain\nali asing\nag gro\nab is\nðŁİī ðŁĺį\nä¸ ĭ\nu don\ntul bagh\nthorn dale\nte ssier\nsw abi\nsur p\nstarr cast\nsock i\nso wore\nsnu ffy\nsnow bound\nsm oments\nshrin ky\nsensiti vely\nsel ous\nscutt led\nsak hi\nsab cs\nque ak\npri mm\npaul j\npalanti r\npaf os\nop sec\nods al\nnylon mag\nmulti platform\nmud guard\nmil sap\nmi mpi\nmb ak\nmai kel\nma gar\nly sa\nlu by\nlo ja\nky on\nky ns\nkh waja\nkab y\njo onie\njo anna\njam z\ninst adog\ning lish\ninflexi ble\nim material\ni ferous\nhor u\nhierogly phic\nhen day\nhar jo\nhan out\nh pf\ngol azo\ng ml\nflower show\nfirst tweet\ner ko\nent res\nearthob servation\ne wen\ndiscoura ges\nde codes\ndar rius\ncu aron\ncol adas\nclo ke\nbrun tsfield\nbran igan\nbor neo\nbbc debate\nbaz inga\nbarry m\navar ice\nattle borough\nat wt\napparte ment\namater asu\nall orca\nal ti\nacab an\n,,,, ,,,,\nðŁĽ İ\nðŁĺ± #\nðŁıģ ðŁıĨ\níľ ĺ\nå »\nà· Ģ\nzo ek\nxl vii\nwin kie\nwhodat nation\nwar den\ntri ge\ntoriam os\nthetoronto sun\nsur charges\nsuperbowl xlix\nsteen kamp\nspac estation\nsko al\nship mate\nsc top\nro tter\nred c\nra sam\nra jai\nport slade\npietro sd\nphine asand\np ous\not ary\non dine\nny ul\nn fts\nmu stique\nmoving day\nmosth aun\nmiss mayim\nmed lin\nmazi buko\nmark twain\nmario andretti\nmaribyrn ong\nma drona\nly dney\nlu mad\nlou che\nlit chat\nkenne saw\nke ena\nk hom\njim énez\ninformation security\ni fill\nhorticul turist\nhome bush\nho enig\nher riot\nhe era\nha chim\ngregory porter\ngame time\nforwar ders\nfl itting\nfaroo qi\neni ans\neclec tic\ndrama fever\ndr ramansingh\ncop thorne\ncongress women\nconglomer ates\ncitym j\nci pollini\ncham illionaire\ncarrou sel\nca hors\nbruich ladd\nbrin ton\nbox nation\nbother some\nblumen feld\nbilly bragg\nberzer k\nbeau x\nbchy dro\nbal ears\nath oll\nar cen\nan any\naircrash series\nag elim\n!! (:\nðŁĸķ ðŁı¼\nâĹ Ħ\nyer ush\nwhite privilege\nwell stone\nvolun tary\nuniversit ario\nu eg\ntt ttttt\ntour decor\ntop shelf\ntack ler\nsu kumaran\nssh rc\nsli der\nshin agawa\nsensation ally\nse vi\nro ser\nrazar umi\nquix otic\nque iroz\npru de\npri o\nphantom friday\npetr ichor\nper ret\nparishi oner\nop hore\nnp slsoccer\nneedi est\nn side\nmu lu\nmicron utrient\nme tter\nmc duff\nman imonday\nmal ouf\nla zi\nknott s\nkapil sharma\njammf warriors\nhuman itarianism\nhaz ar\nhar rie\nfire hawk\nem presa\neli seo\ndor val\ndin ardo\ncro ot\ncould ve\ncoli seo\ncol onic\ncity brew\ncat oosa\ncalle ja\ncalabar zon\nbun tings\nbraz eau\nblon dell\nblack feet\nbl ach\nbernad ino\nbe different\nbay bay\nbate y\nbare bones\nau p\nantw i\nand bake\nallu sions\nalfon so\nak anksha\nai kin\nach el\n: ~)\n. ðŁĺĥ\náµĹ Ê°\nz wart\nye sofficial\nwood lake\nwaver tree\nw mi\nven ango\nthel abel\nthe flaminglips\nter relle\nteam england\nsver d\nsubstitu tions\nst impson\nspirit airlines\nson ik\nsling er\nshru gging\nshootfilmb enice\nshi ho\nshe il\nser vos\nsecre ted\nsaldan ha\nring a\nren vy\nrema pping\nre shoots\nre developing\nram yun\nprotect mueller\npri s\npap en\nornam entation\nop tica\nnom akeup\nnieuws blad\nne ema\nmajo rettes\nmaiden graffix\nmagn ates\nmaf rica\nlo chy\nleg ato\nle tus\nkucin ich\nkav ala\nkarisma kapoor\nka stel\njen nys\ninter urban\ninspector ate\nik ram\ni vica\nhon an\nhel min\nhar twig\ngott man\nfli pped\net fo\nesc olar\nentit les\nenter towin\nedel man\ndont judge\ndeath star\ncrof ters\ncontinu ous\nco asting\ncategori zation\nca inc\nby poll\nbush rangers\nbts m\nbor ch\nbladen sburg\nbill c\nbharat ratna\nbent z\nbel les\nbay bears\nba hari\namber heard\nam re\nacom b\nðŁĺį ðŁĺľ\nðŁIJ ¨\nðŁĩ²ðŁĩ ¹\nzi z\nxia obo\nww lp\nwis nu\nwater field\nwait what\nutil ises\ntw illing\ntill sonburg\ntear away\ntau gh\nstru g\nstate dept\nspha gnum\nskÃ¥ ne\nshur mur\nshow tv\nsha ar\nsex to\nsc art\nsa kin\nresi ster\nrag tag\nra ffa\nr bi\nquit man\npony ville\npe ets\nos me\nnr sc\nnaias detroit\nn pa\nmrun al\nmel ges\nmbr srd\nmartin us\nmaril u\nmal alaf\nmalalaf und\nla ak\nkø benhavn\nkentuc kians\njeff d\nharve ys\nha bil\nh sus\ngra o\nfer gal\nextre mo\nety pe\nent rails\nenjoy globe\neducation week\nec centric\neasport snhl\ndj carnage\ndemand action\ndead laced\nco springs\ncityof to\nchip man\nbs india\nbe att\nball players\nb nb\nattrac tor\nas salam\nach amps\nðŁĶ´âļªï¸ı âļ«ï¸ı\nðŁĴ£ðŁĴ£ ðŁĴ£\nðŁİ¼ ðŁİ¶\nðŁįĶ ðŁįĶ\nðŁħ ¾\nðŁ¥ ļ\nâĻ §\nл е\nwri mo\nwi ster\nwaipa hu\nvp ns\nvi ren\nunder staffed\nu or\ntaip an\nstacey abrams\nspread able\nsol art\nschle ich\nsalt coats\nrecei v\nrat p\npilla ging\nphilly inquirer\noptim o\nmis carriages\nmac lennan\nm red\nm ends\nlu ana\nlittle simz\nlitt mann\nli ge\nlad yof\nky line\nki shaadi\ninscru table\ni bby\nhi zo\nhe gar\nhav ells\ngabrielle aplin\nfuri ou\nfr oud\nfoli os\ne dos\ndu pa\ndisrup tive\nderby swildlife\ncu pa\ncorporate events\ncode y\nci beles\nchu gh\nchristma sc\nch ly\nbol te\nbo brisky\nbick nell\nbelgian beer\nbabangi da\navir tue\nant manandthe\nant gupta\nak alay\nade sh\nðŁıī ðŁıī\nðŁıĥ ðŁıĥ\nðŁı «\nðŁİĦ @\nâĿ¤ ⾨\nzy go\nzo ho\nwillow dale\nwall covering\nvol ar\nvo ie\nvit icul\nvi vanco\nve mula\nuniversal orlando\nun v\nthingsto doin\nthe flag\nteam bonding\nsur render\nste pping\nsong song\nsiren craftbrew\nsingh rajput\nsharma fc\nshab it\nsen batsu\nsap i\nsand pipers\nsab ang\nrevel ator\nrepostre gramapp\nrecord store\nre ks\nr fb\npush pa\npin cer\npent agon\nnew saus\nmis kin\nmat patgt\nmanchester derby\nle ery\nklagen furt\njacqueline m\nj ff\nitsamazing outthere\ninter sport\nhermeneu tics\nhackney abbott\ngri mmer\ngood cause\nglenmor angie\ngett leman\nfutureis bright\nfe tter\neras able\nep as\nent pvtltd\nel ahi\ndu mm\ndu lo\ndh x\nday i\ncul berson\nctv vancouver\ncreate space\ncoffe et\nchristma spresent\ncast res\ncardio ed\nboul ware\nbottle cap\nbbc sheffield\nani seed\nangel list\nagit ating\nðŁıĪ :\nઠ¨\nzomat li\nwoodcut wednesday\nwhite tail\nwater birds\nvulcan salute\nvibra phone\nvan guards\nun bc\ntwitter bakealong\ntomlin son\nto lead\nthre eday\nthe jen\nth august\nterror attack\nsul i\nsquat ted\nspor ty\nsnar f\nsk eller\nsher in\nsac ca\npublic school\nph unk\nor ado\noh anian\nnon structurefire\nnol asco\nneyo compound\nmtv scream\nmor on\nmis canthus\nmigr ates\nmi hon\nmeik le\nmal va\nmai gret\nmadame tussauds\nm wt\nlo ath\nki mo\nkag ome\nka the\nje im\nic ym\niber o\ngoodday sac\ngo ksuowls\nglen orchy\nge tou\nfound cats\nfog gia\nfire hose\nesc ing\ned rive\ndescrip tors\nde foli\ndave and\ndan j\ndabboorat nani\ncran fielduni\ncookie monster\nclu bes\nchar meck\ncele bi\ncajon valleyusd\nby passes\nbloom quist\nblack outday\nbe vil\nbac ci\nav ril\nat ari\nameri star\nachievemen thunt\nðŁĮİðŁĮį ðŁĮı\nðŁ¤ľ ðŁ¤Ľ\nðŁ¤· ðŁı½âĢįâĻĢï¸ı\n민 íĺģ\nx and\nwb ss\nwa ine\nw set\nvi mal\nuuuu uuu\nun believer\numbrella revolution\ntwit terer\ntur on\ntheatric ally\nthan atos\nta em\nsoon est\nso tt\nshe ir\nroom withaview\nrising star\nra sad\npro a\npo pi\nphi mu\nperu vians\nos borne\nor monde\nnrl finals\nno ha\nnag ant\nmugg sy\nmor ven\nmir on\nmin ima\nmand ell\nmad ams\nl ws\nl ft\nkrum lov\nkronen bourg\nkristian sand\nkk al\nkat mai\nju anda\njn f\njim dunlo\nj pii\nidaho bit\niam cityfc\nhoo chie\nhh p\nheli anthus\nhein ze\nheid sieck\nham i\nhal deman\ng iller\nff ice\nfabri ano\ndi mo\ncom an\nch ell\ncarmel ita\nca cho\nbradley cooper\nbo garde\nayo dele\nauthentic ator\naudi ble\nassoci ative\nany outh\naggre ssors\nâĺĨ âĺħ\nà® ¨\nyu ms\nworld kidney\nweis sen\nwa thi\nur ba\nu di\nu delaware\ntuj he\nto les\ntitan s\nthe judge\nth ave\nsw um\nst k\nst elios\nspo ony\nsphy sics\nshonen jump\nshant anu\nsagu enay\nry ann\nrumpel stiltskin\nre funding\nray bans\nram ón\nprescri bes\npeter lee\nper sil\npenc iling\npack football\nosu coach\nof l\nnor onha\nncis nola\nnati o\nmycoop food\nmuscul ar\nmt ss\nmrandmrss otto\nmis érables\nmilit arily\nmiddle ditch\nmichael cohen\nme thy\nmatth ysse\nlo ba\nli stic\nken po\nkal im\nju go\njac quet\nith am\nil n\ni amp\nho ad\nhalvor son\ngol l\nglut tonous\ngli al\ngar ban\ngame and\ngal bi\nfrog more\nfloun dering\nfen i\nexple tives\ner ism\ner df\nengle hart\nek elly\ndilauren tis\ndiffe red\ncri ppen\ncram ond\nconceptu alized\nco existing\nchurche shour\nchorley wood\ncharacter izes\ncastle wood\nca il\nbri sas\nbook sto\nbilly burke\nbeck les\nbamboo s\nbac an\nbab ae\nawa res\nas cona\nall together\nair watch\nair head\nad aline\nabkiba ar\n[ ]\nðŁĵį -\nà¸Ļภ°\nà¸Ī าà¸ģ\nಠ®\n¿ ¿\nv lr\nuel final\ntri somy\ntheore ms\nth mic\nth may\ntemp a\nsquir ts\nsmart ass\nshen ley\nsf in\nsen toomey\nsd npa\nrape culture\nr gay\nquin tin\nq oute\npv h\npro cks\nprivati zing\npo lecat\npasta day\noliver os\nnac omics\nmendi eta\nme akin\nlu ling\nla vasa\njo erg\njar vis\nit canwait\nit am\nira da\nhor sham\nhoneye ater\nhe j\ngran lund\ngo ren\nfo dor\nextor tionate\nest ée\neras cal\nenchant ments\ndist antly\ndisen chantment\ndark ish\ncontor tion\ncommerci alized\nchan nibal\ncahu enga\nc bl\nbo ons\nbestin theworld\nbar nette\nati ja\nafro man\nadu ana\nabsur d\nðŁĴķ âĺºï¸ı\nâķ Ķ\nzar ra\ny ss\ny rp\nwym t\nwater treatment\nu ji\ntuss ock\ntrail side\ntop most\nthan n\nstgeorge spark\nsteve backshall\nstatecap ture\nsound man\nsn ano\nsignsof spring\nsi var\nsf bay\nseung youn\nsee eee\nsan antoni\nruth enium\nrolo dex\nrock radio\nro gic\nrit chie\nri peness\nreyno sa\nresiden cia\nren nen\npubl ico\npri maver\npe dy\noscill ators\nnic colo\nmon gabay\nmis nomer\nmind share\nmeso therapy\nmc burney\nmat u\nman zi\nma et\nlong bridge\nlife proof\nli fi\nlea ves\nl ston\nkno bbly\nkeynote speaker\nkemb la\nkam my\nis os\ninst ills\ninsec t\nhot line\nhome making\nhawk shead\nharri stweed\nhan ne\nh ally\nguimar aes\nglobal shapers\nfu wa\nfo ghat\nfe asti\nfashion nova\ndownsyndrome day\ndin apoli\ndelhi daredevils\ndam one\nd vo\ncran ley\ncomm itee\nco gge\ncla res\nbluec rew\nbin brook\nben ge\nbe hrs\naw fulness\nas pley\nak itchen\nag andhi\nacre me\nðŁĸ¼ ï¸ı\níĮ Į\nãĤ ¼\nâĻ¥ !\nÙĨÙĪ از\nwwe australia\nweir ton\nweb casting\nvor l\nvacation ed\nu mer\ntrilo gy\nthisday inspace\nth fleet\nte pee\ntar ay\ntar awa\ntan vir\ntall madge\nsuit land\nstr u\nste eves\nsoundary aar\nsoundaryaar ajni\nsn oops\nshish kin\nshi en\nshare downership\nshann an\nsen escence\nsand ton\nronaldre agan\nrise withus\nrid gid\npad rino\now ler\nout score\non sunday\noctogen arian\nnijin sky\nnav ona\nmy vote\nmuf fu\nmb alu\nmate os\nlong nose\nlaval lee\nkn ol\nkell ner\nkandi vali\njumm amu\njar ir\nhorati o\nholiday party\nhill grove\nhappy republicday\ngen is\nfossil fuel\nfar rell\nevi an\neu an\nentang lements\necur tis\ndum dum\ndr n\ndetox ing\nder music\nde portugal\ncv cc\ncontinu ance\ncom illa\nco sell\nchri smc\nchic on\ncham oy\ncampe stre\nbusiness awards\nbrush stroke\nbrew ers\naston merrygold\napp dynamics\naler ta\nala am\nag ard\n? ;\nÏ ĩ\nzoeter meer\nxx o\nx ds\nworld malariaday\nwool loomooloo\nwood chucks\nwiener schnitzel\nwango tango\nvintag es\nve le\nval lu\ntu pid\ntrans location\ntin i\nthescript family\nste i\nstab ile\nson ically\nsobie ski\nslife style\nsilver spring\nshi on\nshatru ghan\nsamaj wadi\nron is\nrecu sed\nraas ay\npre matur\npl om\npin atu\nper anak\nparv athy\npal atka\nnapak nowhow\nmy tuner\nmou gins\nmom blogger\nmen cia\nmam ah\nma ini\nlevar burton\nlem picka\njill scott\nj ills\ninterpol ation\nindu blin\nim balanced\ni isc\ni esa\ngun jan\ngor sk\nge ia\nflo fficial\nejer cito\nee o\ndye ss\nduchessof cambridge\ndown towns\ndo do\ndi alled\ndex ys\ncool kids\ncoc cy\nco working\ncityof calgary\nbou rassa\nboric uas\nbo tta\nbazaar uk\nazur ite\naz ula\narvind swami\narke stra\nadv t\nacon cagua\nabo iti\nx brownx\nwin nin\nweber grills\nwe ka\nwal tz\nwa chs\nurs bolt\ntrevel yan\ntra s\ntiny rebel\nthe modern\nstay warm\nspel mancollege\nspanakop ita\nsigur ros\nseab right\nse culars\nsach inten\nrecomm ence\nra ima\nr stream\npe za\nou les\nobin son\nnickj frost\nni wot\nnb channibal\nmil les\nmeal times\nme sure\nlu ken\nlost inspace\nlean newood\nl out\nkry sten\nko cher\nklau dia\nkevin and\nk one\nk far\nja ana\nindv ssl\ni agov\nhom ology\nhendri ks\nh sn\ngu lam\ngooglen ext\ngoal post\ngo yang\nfree comicbookday\nfolklor ic\nerd mann\ndi stil\ndese ret\nchi dding\ncarol in\ncandle box\nbush veld\nbus boys\nbu hle\nblazed rts\nbill und\nbi as\nbarrel house\nba ster\nb ended\navengers ageofultron\nasi d\nap hc\nafter word\naffe ctions\nabt ballet\naaaa aaa\nÑĥ к\nyoo ka\nye vo\nwork for\nvocab ly\ntyler l\ntru cked\nthe fader\nthe cu\nss kin\nsou they\nsofrench vintage\nsnu ggle\nsi us\nsecon daries\nscul ley\nsa day\nreig en\nre yn\nre ke\nr mv\npot chef\npie tra\nphoenix fc\nperil ously\no calypse\nny dn\nni thi\nnh strust\nnational ffa\nmuzaffar abad\nmessi ah\nmckay lamar\nmaritime history\nm so\nlevel er\nle vine\nkon gs\nkin ner\njo wls\nj ino\nins worth\niam bic\nhappy y\nha ak\ngurdas pur\ngun boat\ngor gie\nfree ship\nfran che\nfab ray\nf rain\necu tive\nda rey\ncra s\ncorn bury\ncor dings\nchu bbs\nchal mette\nbt ch\nbooker prize\nbo ssie\nblues music\nav alli\nat chaf\nar tofthe\nar ff\nanimat ronics\nandre escu\nalway z\naf fords\n:" (\nðŁĩ¦ ðŁĩ¹\nâļ¡ï¸ı @\nwhittle sey\nwal lie\nu che\ntroll hunters\nthene ws\nta ita\nss ain\nsr cm\nsmo sh\nsmo cking\nsivak umar\nsiqui jor\nsham ar\nsei bel\nseabor ne\nsac agawea\nrose bery\nro pers\nrh summit\nrepaire r\nraym undo\npro bowl\npowe rexpo\npluto cracy\nplanes walker\npic coli\npe tawawa\npat ted\npas cha\nom nam\no zomatli\nneces ito\nn cha\nmy f\nmu dh\nmormon ism\nme ddle\nmcn ally\nkargil vijaydiwas\nkam is\nkahu lui\njulie anne\njor danc\njohan bbt\nig loo\nic tv\nhack day\ngre eeen\nge tur\nflat breads\nfir i\nfar ol\nfa ja\nend vaw\nence inte\neci ja\ndun hill\ndru mn\ndeser ter\nde press\ncrink led\nconsoli dates\ncode word\ncoach dan\ncinder ford\nchrisco ons\nchap els\ncen i\ncanelo ggg\ncali x\nby res\nbruichladd ich\nbram ble\nbonny rigg\nbo vis\nbo avista\nberlin marathon\nbel gard\nban ker\navi dan\naun ty\nanimalsin churcheshour\nan diego\naldu s\nacadem ician\nðŁ¦ IJ\nච¸\nyr ne\nyear inspace\nwomens worldcup\nwesthou ghton\nweekendkav aar\nwave forms\nwai fu\nw andi\nvaux hall\nun popular\ntro mance\ntravel deals\ntom ita\nthe show\nthe force\nth ous\nta vel\nta eng\nstone mason\nspeak man\nso bot\nsmart glasses\nsmall man\nskincare routine\nsing lec\nrutab aga\nrest less\npic h\nout your\nnx n\nnas chelli\nmr sd\nmollu scs\nmis labeled\nmiddle boro\nmi andad\nmerle haggard\nmckaylamar oney\nmay son\nmad tv\nlog jam\nlight and\nkis story\nke steven\nkar ri\nkap ta\nk rang\nk ck\njyp nation\njuice man\njoh to\njobo pportunity\ninter mix\nicel anders\nhou sman\nhof burg\nho ary\nher radura\nguar naschelli\ngra bowski\nfo k\nflugha fen\nfin stagram\nfeed stock\nfa pp\nf ni\nest ina\nelse worlds\nec lassic\ndivor ce\ndess ner\ndennish of\ndan ette\ndan adi\ncork board\nchristma scar\nchat er\nchang chun\nch ics\ncalab ro\ncad er\nbul gur\nbron agh\nbritish ness\nbr andre\nbobcay geon\nathletic club\narbor iculture\nade i\nðŁĴª @\nðĿĹ ²\nاÙĦÙĬ ÙħÙĨ\nyoursan jali\nyong san\nym n\nwood way\nwhi pper\nvic tro\nvan dien\nur sula\nul and\ntrumpkim summit\nto cross\nsupanova expo\nsummer reads\nspro gress\nspo onies\nsomer saul\nshow live\nshi ri\nseab ury\nsb scycling\nsat ine\nsaiy ans\nru pes\nrotat able\nreal d\npotchef stroom\npirat enation\npenn sau\npeninsu la\npa den\np é\none music\nonco logists\nne scaf\nmontal vo\nmik ha\nmexican os\nmeat free\nlor is\nlear field\nking o\nkali ber\njan ssens\nj ingo\nj adap\nis man\nir radiated\ninconsol able\nilove her\ni know\ngun volt\ngo karna\ngo down\ngla dos\ngair loch\nfrees ync\nfit girl\nfalcon heavy\nf be\nere wash\nend pjparalysis\ndont drown\nderel iction\ncut man\ncristi ana\ncol late\ncli burn\nch of\ncardi opul\nbrain picker\nborder wall\nbirce akalay\nbel ga\nbalfour beatty\naustr a\nar vid\nanc ats\nam ali\naler te\nade w\naaf shar\nê¹Ģ ì§Ħ\nâĺ ľ\nzo eller\nz apho\nya ali\nwilliam j\nwen do\nwel com\nwef tec\nvo ss\nunic om\nture en\ntreat ment\nto ib\nterri fically\nta kht\nsyste mati\nstron garm\nstreet side\nsothe by\nsl ps\nsin field\nseemar aja\nsand es\nrigo berto\nridem cowboys\nra dom\npropell ant\nplay dirty\npit z\nping tour\npau d\nopen bsd\nolympiacos bc\nnived ita\nneuro sci\nnavas ota\nmy morning\nmy fabol\nmyfabol ouslife\nmoy nahan\nmax planck\nmarri ag\nmarin abay\nma pes\nlar dner\nlan son\nja im\ninhab ited\nilove snooker\nidenti fiers\nhumb les\nhex es\nhar simr\ngri es\nfundra ised\nfun yuns\nfort ner\neun os\neat forum\ndun nott\ndtp traffic\ndon ators\nde franco\nddi qui\nd pac\nconcer ti\nco rer\nco i\nclich és\nchrist man\nchio dos\ncastle knock\ncar ps\nbulg akov\nbud ger\nbro che\nbrand ing\nbook festival\nbe there\nb haw\nb ampton\nat water\nal bu\nakon nect\naj l\naa ke\nðŁķµï¸ı âĢįâĻĤï¸ı\nðŁ¦ ĸ\né¢ ¨\nåIJ ´\nxdanny xbrownx\nx olo\nww o\nwil ful\nwhit eland\nwester berg\nviral video\nv schi\nv cs\nty phus\ntumh are\nsn affle\nslaughter houses\nsky rail\nsk amp\nsingul arly\nsi bu\nshan go\nsc rat\nsammy hagar\nrob dyrdek\nridicul ing\nri i\nresiden cial\nrescue on\nre generated\nqui roz\nprecep ts\npower house\nph oney\npet amur\npap io\noru van\nofficial sting\no cra\nned ved\nne ipa\nmynew tag\nmn hs\nmiller music\nmegh ann\nme issner\nmarvel ously\nmal dive\nlovi poe\nlogi st\nlad broke\nknu th\nkit man\nki w\nkho a\nkal ing\njen nam\nit ler\nho comd\nhin z\ngreen living\ngreen baum\ngra fico\ngiar dini\ngetyour rescueon\nfranken thaler\nfiumic ino\nfa wk\ndiur nal\nco vet\nclam ato\nchrist of\ncarni fex\ncar lee\nbul ges\nbor in\nboo g\nbo rel\nbio sensors\nbi fold\nate aser\narsenal ladies\nalf ons\nafcf ylde\nadap tors\nðŁĴĿðŁĴĿ ðŁĴĿ\nâģ °\nาภĩ\n~ âĻ¡~\nyatsen yuk\nver ne\nu son\ntwi g\nthumb tack\nten sioner\ntechno park\nspot swood\nsp icing\nsat omi\ns mad\nross land\nph ela\npenn sbury\nover subscribed\nni ek\nnew stoday\nmuang thong\nlenor mand\nkul iner\nke sey\nkag nihotri\njen ledger\njake and\nirish art\ninhibit ory\nin icia\nhill wood\ngar o\ngad os\nfore saw\nfif teen\nexecu table\ndj mark\ncristianor onaldo\nclo bbered\nch azz\ncb nnews\ncastel let\ncampbell ton\nbuil din\nbo ze\nbeaver tail\nasta xanthin\narmit stead\nalgo har\nafri kan\nadul ation\n. \\\nðŁĴĻ ðŁİī\nðŁ¥ ¶\nvs stl\nvou lez\nval mont\nva ani\nunit ar\ntwilling ate\nts is\nto kimon\nthingsto do\nter ab\nte ee\nstock ley\nsto bart\nsquab bling\nspl atters\nsla ved\nsi vel\nshake ology\nscupp ered\npractice make\nparsi fal\nofthe dead\nnutrac euticals\nnodu le\nnh simprovement\nnational garden\nmusc adine\nmolo ko\nmo jor\nment eng\nma dox\nm vollmer\nlu hya\nlive sof\nlingu istically\nli venews\nlandscap elovers\nla pid\nkilling bay\nk vs\nk ral\nitsan u\nit starts\ninci sions\nid der\nhust les\nho fer\nhiga shi\nh ø\nh pt\ngod inez\ngirl shoops\ngalá pagos\nfab rik\nev genia\near nie\ne up\ndu bin\ndin am\ndel os\ndeci mation\ncwu news\ncry engine\ncong don\nchild bearing\ncarte sian\nc nu\nbur st\nblue ish\nbir ria\nbabys its\naw wh\nate le\nat omics\nake chi\nadelaide united\n. :*\nðŁĺĦ ðŁĺį\nâģ¦ âģ©\nyour koel\nwo j\nvis by\nval ds\nun vaccinated\nteen nick\nsy mes\nsul liv\nsocialmedi aday\nslo opy\nsexual harassment\nscarlett johansson\nready set\nquebe cois\nprocedur ally\npro do\nprim roses\npower man\nphoto kina\nphoto gallery\no gie\nnerd core\nn ams\nmonmouth park\nmock tails\nmir an\nme jo\nly nd\nloyol achicago\nlatingram mys\nku tty\nkre am\nkitty cat\nking splace\nkind ler\njait ly\nitsme leighton\nis amu\nir ks\nimbi bing\ni for\nht fc\nheer den\ngroun der\ngo thia\nge un\ng elling\nfur red\nflipp ant\nfam il\ndhok la\ndar ab\nco sis\ncen e\ncastle hill\nboo the\nbla se\nbi kie\nbalth asar\nb gl\nay ling\nav neil\natlan tis\napocalyp tica\nanc yl\nair travel\n. £\nâĿ¤ï¸ı ðŁĺĺ\nâĿ¤ï¸ı ðŁĺį\nwheel wednesday\nweiss bier\nw gi\nver ging\nvair amuthu\nunder wing\ntrans mog\nthe resia\nth ell\nten ting\ntech a\nsu pine\nstrive forgreatness\nstock hausen\nspor tuk\nsound sof\nsor ana\nsocial innovation\nreu ven\nredi ff\nre ssler\nre ms\nratt ler\npunctu ate\nprof tim\npro am\npirelli sport\npac ked\noso gbo\noly phant\nohi of\nogle tree\noba diah\nninjat une\nmu kono\nmom iji\nmac manus\nma od\nlittle bits\nkir lo\nkipl inger\nke dle\njun pei\njoen suu\njo ao\nisu zu\ninfo world\nin ty\ngom i\nger hart\nge ments\nfollowthe money\nfe gan\nexp ended\nef light\ndu pdate\ndr jitendrasingh\ndisposse ssed\ndeli fe\ncla vin\nchap ut\ncesar millan\ncay ley\ncall aloo\ncaix a\nc sw\nbritt ania\nbo ssi\nbed nar\nbay ar\nbase boards\nautom at\nas el\nalo on\naldu bt\nal trock\nait anya\n.... ,\n.. :-)\nyou should\nwxyz detroit\nwhite ford\nwh one\nvenkat eswara\nvac tor\nun seeded\nun knowing\nthe hotel\ntex ters\nsunday night\nstrath field\nstabil ising\nsports fest\nspor tb\nspod casts\nslow dive\nsleep walk\nsimp act\nshaf fie\nsel ke\nsau my\nren min\nredd i\nred wall\nrecal cul\nqui apo\npost media\npennsylvani ans\npe ary\npat toni\nparam our\nou u\nou twit\nos ong\nos mia\nocto path\nmodel life\nmis samy\nmiha ela\nmach el\nma kaya\nlu thra\nlet in\nkum amon\nking arthur\nkill ick\nkiaro stami\nkemp ston\nhe av\nh dm\ngin day\ngif te\nfree from\nfr ary\nfin ola\nferry corsten\nfar nes\nfanni bal\ndo something\ndeutsch es\nde us\ncute cat\ncom ext\nco ser\ncla b\ncheese making\nbrei vik\nbillie jean\nanni separker\nach ance\nab ajo\naac psa\nâľ Ĩ\nب Ú¾\nÄģ n\nxperi az\nwe ert\nwad ala\nv adi\nunder funding\numichb ball\numb ral\ntirmid hi\nthpicture inyourphone\nthanks for\nter ima\nt any\nsqu iz\nspur ts\nside arm\nscrutin ize\nriver front\nring en\nrenew us\nre tainers\npinatu bo\npaul hollywood\nop killingbay\nnsa ids\nno love\nne om\nmutt ley\nmultil ayered\nlk ld\nleed snews\nkno ssos\nkarthi keyan\njennaf ischer\njar dines\ninfer ring\nindiscrimin ately\nindi am\nik k\ni ka\nhouse holder\nhollywood musicawards\nhistory pic\nhippo campal\nhenri quez\nhat erz\nham lyn\ngri ef\ngood in\nfil mi\nfern hill\nfe aster\nf yr\nextre ma\near ne\ne ya\ndog food\ndianap enty\nder ailing\nday le\ncub stalk\ncomic artist\ncolon ised\ncleve metroparks\ncatapul ts\ncarbon footprint\ncap m\nca am\nboule var\nbou n\nbal dev\nart gallery\narab spring\nang poet\namerican airlines\nail oa\naf onso\nðŁĸ¼ @\nðŁİ İ\nðŁįĢ #\nâĹ ¦\nÆ ¹\nwill in\nund proud\ntweedle dum\ntu llo\ntten ham\nthunder bird\nsuis un\nsu joy\nstrans formation\nstar killer\nsplin ters\nso corro\nshout out\nshane warne\nscot winter\nsacram ents\ns foster\nroad worthy\nri sky\nreli able\nra ag\npow ley\npau le\npad ula\noller ton\nog ata\nnascar throwbackthursday\nmush in\nmile split\nmagnu scarl\nlu re\nlive worx\nlife straw\nknowyour mil\nken nan\njanc is\nirre vocably\nho ards\nhel man\nhe o\ngreat esth\ned rums\nde morgen\ncric ut\ncreek fire\ncr ing\ncourse ware\ncooper atively\nco generation\nclu sion\nck r\nche rer\ncb nationals\ncat tail\nca rena\nc und\nbru ggen\nbl ms\nbetro thed\nbeach party\nbal ter\nasu bhash\nar dsley\nanu radha\nakure yri\naf ell\nacur ator\nab sm\nâĿ¤ï¸ı ðŁıĢ\nzebe dee\nz wei\nwhistler blck\nvoodoo doughnut\nvenice biennale\nvatten fall\nune aten\nun iter\nun intelligible\ntwent ynine\nsupercalifrag ilisticexpialidocious\nsun tron\nstock car\nspeciesi sm\nsp ald\nsis rocks\nsin noh\ns folk\nrock house\nri dec\nrescu ecat\nradio one\nra ye\npul kit\nphum zile\npeople schoiceawards\npell erin\npad dock\nover capacity\nomo tor\nolympic day\nnt live\nnam bucca\nnaf me\nna aper\nmix master\nmis chief\nmin ori\nmau ka\nma ser\nma dang\nlun cheons\nlili ane\nli gas\nla irs\nking fire\nkic cha\nkarnataka elections\njalfre zi\njak arta\nintensi ves\ning g\nin frequently\nil h\ni fans\nhaw kin\nhau gesund\nhan ako\ngun ston\nfun di\nfran xx\nfa xon\nes mail\nel za\ned out\ne ig\ndull ilah\nduc tions\ndefe cte\ncro at\ncongre sses\ncon agra\nchemi e\nchae won\nch á\ncel bridge\nbar zal\nbal doni\nav iso\narow ana\nander matt\nakit aranch\nactiv ators\n< ----\nðŁĩªðŁĩ ¨\nâĢ¢ _\nx ly\nwomenshealth mag\nwin and\nvisit york\nvanoss gaming\nucan ationals\ntr ps\ntheri ault\ntfo ir\ntassie keith\ntai sen\nsteve vai\nspiro graph\nski ft\nsak thi\nsab bat\nrichar de\npur ton\npro tractor\npro clamations\npre witt\npn v\npeat land\noo hh\nofficial jaden\nob inna\nnzv pak\nmike posner\nmb log\nmaw gan\nlothian buses\nlic enced\nli spector\nlady leshurr\nk rep\ning stone\nin experience\ni stom\nhen ric\nheis ler\ngu g\ngor den\ngali ano\nfield stone\nfar nese\nemboli zation\ndho ti\ndemon ized\ndeclar ative\ncy m\ncon nah\ncon akry\ncj tfoir\ncirque dusoleil\nchar mouth\nbotu linum\nbis ummit\nbier ce\nbetterlate thannever\nbest buddies\narri an\nand al\nallato ona\nak tion\nðŁĶ½ ðŁĶ½\nðŁijĨ ðŁı»\nðŁĮ´ #\nzz ani\nyogap ants\nwyn num\nwend el\nwe ichert\nvir u\nvi raj\nv le\nus ica\nuof nh\nul an\ntito jackson\ntir ta\nthe urban\nte tten\nsung kyu\nstraigh taway\nshail a\nsegam at\nsal miya\nroad race\nrhy mney\nre routing\nray ray\nramadan mubarak\nrac v\nprojectcar sgame\npou le\npom pon\nper na\npack wood\nnor der\nnew type\nmit ski\nma gro\nlook slike\nli ssy\nli sn\njo tted\nji ofilm\njen is\nim mor\nie b\nhi pped\nhed don\nhac er\ngre asing\ngop convention\ngo gold\ngan ge\nga str\nfuj ii\nfil am\nfeeding america\nen rage\ne ki\nde is\ncu u\ncir stea\nci ani\nc ju\nbre ich\nboot loader\nbitt ner\naw alk\navac ado\nant elope\nâĺĢï¸ı @\nwoody att\nwig town\nweek ley\nweather spoon\nwann able\nunconditional love\nun dignified\numat illa\ntour bus\nsyste matic\nsundance tv\nstrong man\nspec tro\nspand au\nskin tight\nse guidores\nse btsb\nsau cy\nsar it\nroberther javec\nre direction\nqaland ar\npriyad ar\nphilando castile\npetr one\npe ppard\np cap\nout of\nob its\nnews agency\nneu haus\nmid den\nmen swear\nmeet in\nme doc\nmar get\nmac room\nlin gered\nla van\nla gg\nkontrol freek\nko hei\nkingdom come\nkai ju\njamesbay music\nj lf\nins grove\nin ment\ni ddle\nhoneo ye\nhe anor\ngriff on\ngra fica\ngr itt\nful mar\nflan king\nfact maniac\neye less\nev ene\nen by\ndid act\ndemo ss\ndeli sting\nd nr\ncrou ched\ncote depablo\nchor doverstreet\nbrom field\nbri quettes\nbrahmot savam\nbi ek\nbelieve survivors\nbe headings\nbark ads\nart sat\nan vers\nall soul\nakade mi\nðŁı ¦\nâĻ Ĥ\n¨¨ ¨¨\ny sen\nwhistlerblck cmb\nwayne brady\nwan s\ntin ka\nsummer hall\nsubordin ates\nstan ge\nspor ter\nspor ch\nsoo bin\nso gni\nsig no\nsa rea\nrogue ales\nreis man\nre buy\nradi al\nr pio\npro create\npre formed\npetre ls\nori ed\non enation\nnautil us\nnarasi m\nmex it\nmer kur\nlist enable\njust ing\ninju n\nhyper sensitivity\nhugh hewitt\nhu obi\nhu gg\nhome security\nhi elo\nhe yes\nhar on\ngri dley\ngre ger\ngine ering\nface hugger\neng s\ndoctor ing\ndet lef\ncyclone idai\ncompos ite\nclub legend\nchil lax\ncess nock\nbo para\nattack man\nariel helwani\nabsac ape\nðŁĻĮ ðŁĴķ\nðŁĵ ķ\nðŁıĨ ðŁİī\nzo bel\nworld heartday\nwo ad\nwkr p\nwing let\nwhirly ball\nwe bbs\nvive kagnihotri\nvi varium\nvel vel\nvat ron\nv app\num unna\num ps\ntu it\nti ze\nthe group\nterry fox\nstu ary\nstran ja\nssi en\nsoni sphere\nsel ma\nsd ss\nsau te\ns gg\nryan paevey\nrosen crantz\nproudly sa\npriv atec\nphineasand ferb\nphil p\npetamur gatroyd\npend ennis\nofthe year\nnorth man\nne bulous\nnb nationals\nnav our\nnatural wine\nmu cc\nmiddle port\nmas lin\nmaj d\nlotte rer\nlo ks\nlo den\nliz ette\nkla homa\nkho s\nka unda\njeon buk\ninatur alist\nhumph rys\nheer len\nha gelin\ngym no\ngreen light\ngra phe\ngl is\nflo aters\nfle cked\nfe cking\nfair cloth\net ine\nen ning\ndel phia\ndavid k\nd wick\nco qui\ncity link\ncb se\ncamp amento\ncal pers\nbuzz i\nbru un\nbin dery\nber ney\nbath water\nat kins\nani eri\nakro tiri\n. ðŁĴļ\nðŁĮ³ ðŁĮ³\nza bel\nz wei\nviri dis\nunis ys\ntere sh\nsu id\nstartrek tng\nsin novation\nside track\nsc all\nre launches\nre ax\nproudtobe afan\npl d\nphal en\npel low\npan ter\nonep age\nof light\nnak ata\nmetropolit an\nmelb weather\nme all\nloh man\nleni ency\nlee der\nko etter\nke al\nkau ka\nkas sa\njr smith\njar head\nirrit ations\nir responsibility\ninter varsity\ninfin ities\nidu kki\nhot cakes\nhistorio graphy\nhel mi\ngu bbins\ngro t\ngr c\ngg al\ngam per\nga illar\nengag ed\nen sley\ndrewestate cigar\ndess er\ndang a\ncro ston\ncater ham\ncarmen ere\nbru ff\nbra bin\nbal ta\nawe a\narunach alpradesh\nared cross\nangpoet nyo\nandre wc\nalleg ori\naal u\na ow\n: "@\n!! ðŁĺĤ\nðŁĻĤ ðŁĻĤ\nðŁĺĭ ðŁĺĭðŁĺĭðŁĺĭ\nãĤŃ ãĥ£\nâĦ ĵ\nz wick\nyoungg uns\nwool fe\nwild london\nvi kh\nuc tions\ntri go\ntoo cool\nthereal rvd\nthe view\nsuper cute\nsu blux\nspe sial\nsp ree\nshwed agon\nser da\nseman asanta\nse stero\ns store\nrou ch\nrailway seva\npra gy\npit o\npi red\nperfec ts\npanam ax\np tes\noy als\nol son\no ved\no ao\nmou lder\nmon bebes\nmo xon\nmckin lay\nmck oy\nmar aj\nmaniac ally\nmag navox\nma kara\nm ry\nlit us\nlay lee\nko komo\nker ne\nkent cricket\nkad ai\nka day\nio ana\ninnu endos\nic caworld\nheroesofthe storm\nhasling den\ngo akonnect\ngi gas\ngh gs\nfox worth\ney yyy\nespark global\ne es\ndo bro\ndelav an\ncyber bully\ncot tee\nchrismur phy\ncattar augus\ncab ramatta\nc mes\nbu fc\nbce agles\nancient greece\nalan hinkes\nae olus\n" ðŁĺĤðŁĺĤ\nðŁĺŃ ðŁĴŀ\nðŁĴª ðŁijı\nâĿ£ âĿ£\nx pac\nweston birt\ntravel writer\ntou galoo\nthelittle mermaid\nthak sin\nt dov\nspri mary\nspee dos\nslan dered\nshi ela\nsharpen ers\nsee u\nsch um\nroy don\nri era\nred lips\nraaj je\nproff itt\npig farming\npie bald\npe tani\norchestr ator\nom ha\nny anza\nning xia\nne om\nmind hunter\nmc grew\nma sy\nlux ottica\nlu chad\nland reth\nkan o\nkah ler\niron mongery\ninter ment\ning machine\nine yard\nim thankfulfor\nher mie\ngleni ster\ngill on\nfrom software\nflo c\nfir min\nfion nuala\nfin ality\nfeliz sabado\nfabric london\nf omen\nevangeli zing\nev and\neric mccormack\nenfor ced\nend ar\nel ocke\ndru ga\ndianer avitch\ndell inger\ncv shealth\ncr andon\nconfir a\nclin ica\nchop p\nce ylan\ncas cara\ncarbon iferous\ncali ban\nca zen\nbran chs\nboo oom\nbl are\nbi ji\nbefu ddled\nas car\nand star\naar ad\n_ ?\nðŁĴķ ðŁIJ¶\nðŁijĬ ðŁı¿\nãĤ¹ãĥ ŀ\nñ o\nza it\nz g\nwx pn\nwur ster\nus mc\nty balt\ntwil d\ntrump ing\ntopic ally\ntol lywood\ntod ds\nthar parkar\nth agallery\ntel lus\ntan alysis\nstri d\nspy ros\nsop hs\nsn om\nslo tting\nshu ang\nsar ker\nsan kt\nsam harri\nre interpreted\nra fe\npizzic ato\npi eds\nover shot\nor not\noil spill\nmun den\nmo ton\nmi hi\nmchapp yday\nmc delivery\nman nnn\nma sina\nlink building\nli at\nlar ter\nkon ser\nkaw aii\nkam ina\njustin suntron\njournal news\njo va\njay enge\nicar us\nhu zur\nhall berg\nhalf time\ngitt ins\ngerard butler\ngel derland\ngay boy\nfilm fest\nfen ster\nface paint\nenam els\nemili aromagna\nedi fying\ndes borough\ndean heller\ndar b\ncnn travel\ncleanpower plan\nch bosky\ncau cu\nbill peduto\nbig lia\nbaja j\nb ø\nauto biographies\nash lyn\nascri be\nantico agulation\nanthony horowitz\nanom yces\nann er\n! --\nģà¸ģภģà¸ģà¸\nðŁļ Ħ\nÙ ¹\nwom xn\nwhl hitmen\nwe fts\nvff vishal\nvet tori\nulte gra\nuci wwt\ntrack listing\ntough enough\nt st\nstanley cupplayoffs\nsnail mail\nshant aram\nsever yday\nseti awan\nscaram ouche\nsau ced\nsa are\ns freedom\nri vard\nquan tock\nprotec tive\nportman teau\nphumzile unwomen\nover confidence\nov ation\nmon tee\nmehro tra\nloccit ane\nlive th\nli ming\nkra is\njosh gad\njobseeker ssa\niz abel\nic inema\nham in\ngoo py\nfei jo\new p\nest us\ndo good\ndeeper learning\ndan los\ncor dia\ncoo kier\nco key\nch affin\nce as\ncalgary transit\nbor an\nbly theville\nbig basket\nbas ili\nbaj payee\nawal ha\nauto pia\nann aya\nac ws\nabsacape epic\na app\n__ ,\nðŁĻĬ ðŁĴķ\nðŁĺĤðŁĺĤ ðŁĴĢ\nðŁĶ¥ðŁĶ¥ #\nze stan\nyah u\nwe irs\nvou vray\nvoi ded\nuntol d\nug l\ntwitch stream\ntutic orin\ntrade fair\ntobogg aning\ntoa dies\nthar u\ntang led\nsu af\nstrom ness\nsteve dave\nsquir ming\nslo gging\nsil om\nsc y\nrival scamp\nre locations\nqu onset\npoly gonal\npolitici ze\npember ley\npavel ski\npa j\nnot is\nnishi ki\nmothere arth\nmor oney\nmen ina\nmam bas\nmal k\nm cu\nlor ra\nlessthan jake\nl ko\nkor dell\nkal yp\njosh frydenberg\nheather peace\nh sf\ngood child\nger hardt\ngalli fre\nfarrow andball\neric balfour\nel kie\ndr s\ndj k\ndiplo docus\nde sailly\ncynthi aeri\ncynthiaeri vo\ncorn hill\nconver ge\nchaz elle\ncaris brooke\nbri ant\nbreaze ale\nblaz ey\nbend el\nb pi\natta k\nambi gram\nam ii\nakih ito\n.. âĿ¤ï¸ı\n! ðŁĺįðŁĺįðŁĺį\nðŁİ§ ðŁİ§\nðŁį» #\nâĻ Ģï¸ı\nঠ¼\nzen berger\nyal da\nwin ders\nwhere smy\nwashington state\nw py\nw boc\nverge currency\nve les\ntur fed\ntu beli\ntra pt\nthereal swizzz\nthe bookseller\nste ttler\nsi mono\nselfies aturday\nriver city\nri ese\nrelati vistic\nraz dan\nrath farnham\nradi i\npree mie\nperpetu a\nop teryx\nomo to\nom ey\nnicholas ville\nmy pov\nmy haver\nmor rin\nmo der\nmis alignment\nmaster killercat\nmar ucci\nmagnuscarl sen\nlu gged\nlow veld\nlou reed\nliber té\nlet tre\nlang one\nl lanes\nkur umi\nko jic\nki kk\njanes addiction\njac burns\nj sd\ni uk\nhus bando\nhou sat\nhillen brand\nheuri stics\nhead dresses\ngrill z\ngreen roof\ng suite\nfukun aga\nf sd\nepiste mo\neleanor tomlinson\neast ayrshire\ndu rag\ndu hok\ndor inda\ndonthe con\ndont mess\ndo xie\nde sa\ndcu o\ndar zi\ncric ci\nchuk ku\nchis wick\ncentral america\nced rick\ncarab a\nbra dd\nbeach in\nash ak\naser vice\nak ki\nðŁķº ðŁı½\nâĶ ģ\nzar ah\nyo len\nwhow ill\nwether spoon\nva jani\nur gess\ntsogo sun\ntro pea\ntot tori\ntokimon sta\nte gu\nsubscription box\nstrath aven\nssss ssss\nshepher ding\nseraf in\nri ddle\nrep as\nrel v\nrefra ined\nree du\nraj as\npar des\noffro ading\nnu ss\nno stri\nnjor oge\nnavi es\nmun nings\nma kurdi\nliver pud\nkat ju\nkaru izawa\njamest aylor\nj ca\nincome tax\nhel sby\nh ly\ngu ssie\ngr anti\nfrog fish\nfro w\nendeav or\neffi gies\ndé j\ndro pp\ndread fully\ndo go\ndh w\ndemo l\ndat aware\nda cha\ncoven ant\ncompul sively\ncom in\ncel and\nbrett anomyces\nboys noize\nawesom econ\naustin aries\nasha hidi\nague final\nag ris\nadhe era\naccordi ons\nabi er\n. ðŁĺ³\nç¾½ çĶŁ\nyaw key\nwhat it\nwe be\nwb homeent\nv nd\nu ht\ntoyotag b\nth uk\ntartu ffe\nsub floor\nsp ga\nshank land\nsever na\nsecur itization\nschool holidays\nripp rince\nri zza\nreak tor\nrachel platten\npopcorn day\npoly phony\npickn pay\nour is\nod sc\no kes\nne olith\nmythri official\nmu sher\nmr v\nmirand akerr\nme tball\nma gam\nm clarke\nludd ite\nleim ert\nleee v\nkt lamor\nk aus\nit pro\nin ol\nim printing\nil more\nhugh ey\nhot deal\ngrized ale\nglen shee\ngen est\ngan esan\ngab at\nelfy nevans\nduckdynasty ae\ndoing good\ndc v\ndau ber\ncron je\ncityof melbourne\nchan go\ncel lists\ncav in\ncategori zing\nca ac\nburn t\nboast ful\nauto gas\nart fund\narba az\nadidas us\naccredit ations\nðŁĶĬ ðŁĶĬ\nìĨĮëħĢìĭľë ĮĢ\nãĥ ®\nâľĮï¸ı âľĮï¸ıâľĮï¸ı\nz berger\nyak ima\nwound care\nwoke up\nwil dearth\nwil braham\nwarra gul\nv any\ntennis channel\nteam di\ntarpor ley\ntarget style\ntan nen\nstri stan\nstabil isers\nsoftware ag\nshel ford\nseran goon\nsatyan adella\nro bri\nplat zman\npi at\nnorth bridge\nmun ia\nmpha sis\nmosque attack\nmom oko\nminneso tan\nmin eta\nmickle over\nmal ki\nma pre\nle amichele\nlb cc\nland cruiser\nkas ab\nk ely\nit ne\nint endi\nil ta\ni ye\nhyper icum\nhal am\nha dj\ngram ophon\ngr aca\ngo beyond\ngd xj\nfindac ure\nfau bourg\nfair light\nfabric ators\nestu arine\nendu ro\nemb ra\nelectr ici\nel ç\ndoodle bug\ndi ye\ndesp airing\ndel dia\nde hart\nd tb\nd com\ncolom be\ncitizens advice\nchao sium\nbro man\nbriga deiro\nborn thisday\nboccon cini\nblu enote\nbike suk\nberkle ecollege\nbaili wick\nanasta sio\nallin cle\nair baltic\nah mar\nadel phi\n\\( ´\nðŁĺª ðŁĺªðŁĺª\nâĤ¬ /\nà© ĭ\nyar ashahidi\ny ria\nwim berley\nwak ing\nwa ren\ntoll gate\nthunder y\ntb w\ntag ger\nt illed\nsur yah\nsubju gation\nsu sd\nstend hal\nstel ar\nstat news\nsrin u\nseab orn\nsclu bs\nsch ell\nsamharri sorg\nsalt iness\nrust ington\nrisd greatness\nreque st\nreflec tors\nrainbow dash\nra abta\nprayag raj\npositi on\npolice state\nover wintering\norient alist\norb án\nopportun ism\nnew sham\nmccarthy ism\nmarl borough\nmand elson\nmand arina\nm bro\nlivin ghistory\nlinch pin\nlec avalier\nlazy bones\nlago m\nl fm\nkie wit\nk ops\njaz ira\nhydro gels\nhull kr\nhu bie\nhar pur\nh st\nguard ado\ngro ene\ngor ies\ngna sher\nger tler\ngearbox software\ngad wall\nfri ars\nebay seller\ndr ace\ndhar wad\nden smore\ndd x\ndamian lewis\ncounter punch\ncor ran\ncontroversi ally\ncho ic\nchlo elu\nchill on\nche shi\ncarbon tax\nbryan dechart\nberk shire\nbeli e\nbe side\nbar rescue\nbandi pur\nbaghe era\nbadger mbb\nast irl\nasdfghj kl\naro th\nanciente astirl\nachi bi\nace supported\na asu\nภħ\nwro ble\nwood hill\nwill unga\nwelcome home\nusur p\nun in\nty as\nteam cavuto\nt mt\nsukk ah\nsque aled\nso sad\nseduc er\nse amu\nsantaclar ita\nro cc\nre evaluating\npre conceptions\npli ss\npalladi um\nous as\non racing\non assignment\nobl iteration\nmorethan adodo\nmir ates\nmelind agates\nmas jid\nmal do\nmaking ithappen\nlc dsoundsystem\nktlamor ningnews\nkry stian\nkra al\nkalli o\njacob hoggard\ning all\nin cr\nimprison ing\nimplic ate\ni sic\nhenne sy\nh miller\ngul ated\ngu dda\ngrin gos\ngood olddays\ngo emon\ng iler\ng anta\nfoot man\nf tw\ner ba\ndon jon\ndoc sis\ndestruc toid\ndann ys\nconstruc tivist\ncler mont\ncar mine\ncanadare members\ncan ar\nca zeno\nc be\nby example\nbir ney\nbeve ren\nben y\nbate man\nbat l\nbasketb alls\nbad ar\nbabbac ombe\nat si\nan si\name ren\nalla ire\nair por\nðŁĺĬ "\nðŁĹ ¨ï¸ı\nâľĮï¸ı âĿ¤ï¸ı\nwol len\nwec twx\nwa qf\nuof c\nu mau\ntul alip\ntravel and\nthe bookof\nth re\nteam god\ntam ashii\nta phone\nsyco phant\nsushant singhrajput\nsun iv\nspro tt\nsiss ay\nshel tie\nsave baloch\nsanji v\nsa wak\nroe bling\nro jak\nresi stencia\nr deye\npro xy\nprisma drop\npoli zei\npau illac\npais leypark\noaken fold\nno ps\nnarra been\nn hat\nmill ilit\nmill ar\nmary port\nmaniz ales\nmaithri palas\nlep tin\nle pe\nlar oc\nki bler\nkex change\nkati epiper\nkathryn bernardo\njancis robinson\nintere strates\nij tema\ni vi\nhunter don\nhal mstad\ngreat things\ngotom eeting\ngh ur\nfrequ ent\nflori dam\net itans\nell ines\ned ington\ne bulli\ndwarf ism\ndn vgl\ndiso wns\ndis assembling\ndi vison\nde um\ndann apaola\nd bn\ncur ro\ncorner stones\ncor vids\nc ica\nbye felicia\nboy fie\nbox uk\nblack ery\nbefore thestorm\nbal ck\nati ma\nastri d\narri aga\namar na\nag it\nabdou laye\nðŁijī ðŁı½\nìĸ ij\nãĤ ľ\n´ )\nyepp oon\ny gritte\ntur rentine\ntl f\nthe water\nter on\ntae gi\nta ines\nswat ted\nstein er\nsnar led\nshum or\nsenior living\nseg af\nsch rock\nsant angelo\ns dream\nroman atwood\npti family\nprimary day\npresiden cy\npolice media\nphlebotom ist\nphan tasia\np ny\nom bra\nolom ouc\nn illy\nmu lai\nmilit o\nmel brooks\nmanhattan henge\nmang aka\nmac world\nlose it\nlittle borough\nlascru ces\nkill aloe\nkast uri\nkarim nagar\nje hu\nisi ah\niit tala\nig da\nid v\nid ar\nha za\ngur khas\ngunnar sson\ngla xos\ngen oot\nfor ten\ney ah\neve ready\neic ma\nec v\ndoll ard\nden park\ndab bled\ncre tan\nco cin\ncircas sian\ncic lavia\nci ena\nchrist elle\nchol as\ncat love\ncal me\nc cha\nbts v\nbooth bay\nbb bs\nax alta\nark ady\naad hi\nðŁİ ł\nzoom tv\ny dr\nwester ni\nwal drop\nvil akazi\nvascul itis\ntw da\nto taku\ntime machine\nti ppers\nteen sy\nte trick\nte hama\nst any\nsher ilyn\nrook wood\nred hook\nre avis\nqu aver\nq alam\nprotector ate\npro phyl\npost it\npetti bon\npascual inigo\np online\nopent able\nnu be\nno tim\nno onday\nmytho logies\nmorde chai\nmodu l\nmeg af\nme che\nmc elderry\nmar veled\nman h\nm ste\nlife jacket\nlgb thi\nle dyard\nland form\nla ko\nl de\nkun kel\nis am\nindic ts\nimpeach ing\nim pascualinigo\nicon o\ni shares\nhoo pin\nhocken heim\ngu ta\ngran fondo\ngou ges\ngentleman jack\ngam asutra\nfood day\nfire balls\nexoner ation\nem n\ne zi\ndp wh\ndesider io\nd jan\ncongreg ating\ncom ber\ncenti pedes\ncatoc tin\ncarson daly\ncag ey\nbeli veau\nayl ward\nau b\naf sc\n® ¤\nwy land\nwash basin\nvi eng\nver us\nval eo\nty ronn\ntoko pedia\nthe mm\nter ram\ntand berg\nstell ung\nstaff spolice\nsm iller\nslen ses\nsierra boggess\nsarah j\nrussell tovey\nresi zing\nrap zilla\npower ofthe\nplu ckers\nphx cc\nni zhny\nne akers\nnas reen\nna aaa\nmurder she\nmoko ena\nmojom agazine\nmit press\nmechan o\nmayweather mcgregor\nmar clam\nkimmel center\nkim rhodes\nkemp ner\nkee ton\njun gh\ninvasi ves\ninter dependent\nib ps\nha ie\nh ref\nglaxos mith\nfesti vely\nend papers\ndren ch\ndaily doseof\nd aki\ncu lotte\ncross dresser\ncrock ford\ncop ts\nco zi\nchristen son\ncharmeck schools\ncb ssf\ncastle berry\ncarpen tier\ncanad ain\ncan zone\nc son\nbuss iness\nbts loveyourself\nbra da\nben zi\nbas sembly\nbarin holtz\nb vp\nau gur\nanson mount\nanit aha\naag adu\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nðŁijĮ ðŁĺı\nðŁĩ± ðŁĩ·\nå® Ŀ\nâľĮ âľĮ\nyu asa\ny ane\nwthr sunrise\nwood chip\nwak ely\nunder pin\nu cino\ntrib live\nt mp\nswan wick\nstre ich\nsoo on\nsingle use\nsi ol\nsha itan\nredribbon week\nre um\nraw ness\nqarab ag\npro pel\npit ttweet\npau sa\npatrick t\npal mistry\node sa\nnail sea\nna har\nmoto x\nmoor town\nmon tre\nmee se\nmal vinas\nlive smart\nlique urs\nlin zer\nleol aporte\nlearn french\nld w\nkol by\nklon oa\njuxta positions\njudy garland\njcde caux\njay weatherill\njay esh\nja el\nito to\ninvali dated\nini st\nid hun\nhar ro\nhappybirthday justinbieber\nhand bill\ngo live\nget thelook\ng alea\nfree wheeling\nfax es\neye mouth\nep ona\ne or\ndupon avon\ndont missit\ndar ran\ncolor ism\ncollier schools\ncol chester\ncn v\nchrismurphy ct\nc party\nbre er\nbarrym cosmetics\nbag oong\nauto crat\namne siac\nall night\nak off\nab ri\na show\n: ***\nâľĭ ðŁı»\nâľħ @\nworld suicidepreventionday\nwl w\nwidne srl\nwai fs\nvegan life\nuk is\nte ahour\nta pers\nt india\nswithout limits\nsr q\nsquawk cnbc\nsour puss\nshal ini\nsec unda\nsat ra\nsam bas\nrecomm it\npress meet\npin tos\npap ayas\npa yoh\nox as\noshiom hole\nor cla\noak brook\nnovic hok\nnewcast ler\nmv cv\nmor van\nmant els\nman era\nmakar ov\nm te\nlu kens\nlily collins\nko tt\nkja er\nkhur sheed\nke ach\ningex cellence\nimmuni zed\nhonor thefallen\nhoney badger\nhome wardbound\nhil and\ngord downie\nfel den\nfam bam\ndl mundo\ncoo ky\nchip day\nchang s\ncal ea\nbun ji\nbra infood\nbos mayor\nbon line\nblephar oplasty\nbee man\nbase board\nbam enda\naw memorial\navail ab\nandro gen\nana is\nacoun ty\n? \'.\nðŁĴĹ ðŁĴĻ\nðŁį ¤\nðŁ¤£ #\nìĹ ł\nâĹı âĹı\nzulu eta\nyoshino ya\nworldkidney day\nwhisper ing\nwb z\nwater colour\nw one\nurban ized\nuppere astside\nturnaround dontdrown\ntry pano\ntiru pur\nthe gautamgulati\nthe darkness\ntan am\nsurface pro\nspino saurus\nsky land\nsi endo\nshou sem\nsebastian stan\nsch ini\nrob kardashian\nrizzle kicks\nrebec car\nrawling ssports\nrallyfor rivers\nq ia\nprovision ally\nplay doh\nplasmo dium\npiñ atas\nphilosop hy\npaulsmith design\npagli acci\nom gggggg\nnz dusd\nnil ai\nnat sumi\nnapp ed\nmy ride\nmud guards\nmass aman\nmanek agandhi\nlush ness\nlor rain\nlor an\nlog anc\nkno blauch\nkim m\nkad hal\nje thawks\nissu ers\nintimi dator\nhot stuff\nhar ron\nhai les\nhabitat forhumanity\nh le\ngill i\nge of\nfinneg ans\nembed ded\nel er\ndic amba\nd mcc\ncon dell\nchine y\nchan dos\nchan cey\ncdn media\nbu ge\nbre uil\nbig bird\nargu ello\nantimicrobial resistance\nanti go\nad lon\nac amp\n! [\nðŁĴĽðŁĴļ ðŁĴĻ\nðŁıĥ ðŁı»âĢįâĻĢï¸ı\nçīĪ æ·±å¤ľãģ®çľŁåī£ãģĬçµµæııãģį\nç ±\nঠ°\nاÙĦ Ùĩ\nà °\nyo gag\nxl vi\nwayne twp\nwap da\nven ic\nvan guardia\nvam ped\ntradition alist\nti ina\nsussex wildlife\nsun splash\nsom aiya\nsin den\nse sar\nse ha\nsco bee\nsar od\nsal ima\nsachinten dulkar\nroad safetyweek\nredefin ing\nqu abbin\npri ory\npier i\npier head\npennsau ken\npau land\npar v\noff shoring\nnag as\nn all\nmut lu\nmu chi\nmoldav ite\nmid as\nmey ero\nmention perfection\nmat amoros\nmagic leap\nlush ltd\nlu li\nle vo\nle aper\nlaker nation\nkra k\nkevic lifton\nkel t\njurassic world\njohn carter\njarim atti\njarimatti wrc\nity now\ninsta style\nim plausible\nide alized\nhand son\nha shes\nge minic\ngameofthrones finale\nga eta\nfranken weenie\nfl ou\nfir angi\nfilm news\nf bic\nent ices\nearth week\ndut chie\ndino zzo\ndh aliwal\ndev ina\nculche th\nclou seau\nchas ingthe\nca pos\nbush walking\nben intendi\narlington natl\nar pa\nar beloa\nand ym\namy leeev\nak ini\naf terel\naard var\n[ \'\nðŁ¦Ħ ðŁ¦Ħ\ná ĸ\nà¹ĢภĹ\nzayto ven\nzain ab\nyo weri\nvan fleet\nukem plaw\nuk butterflies\ntrige minal\nti thi\nti pico\nthe juan\nthe beachboys\nspeake th\nsmallbusiness week\nselec tor\nsauber f\nsare made\nsam er\nress ata\nrecl ined\nrac ist\npro yuvraaj\npre serve\np outs\nop lay\nolu mide\no tran\nnavy daily\nnational school\nn oooooooo\nmu sonda\nmu dge\nmar cellu\nlon gi\nlic on\nle aching\nkin deren\nke sq\nk be\njun ger\njeff ry\nje zza\nje para\njames blake\njam aa\nja ago\nimmedi acy\nherd fb\ngun slingers\ngore tzka\nghost signs\ngav roche\ngart land\ngar mo\nfull body\nfilm music\nfi fi\nev f\ne gal\ne banks\ne ady\ndi fe\ndfw traffic\ndar nley\nchou dhry\nbridge view\nbrick layer\nbox en\nblast off\nba oli\natal unya\nang ood\nain yc\nabscon ding\nðŁĽ łï¸ı\nðŁ¥ ĸ\nðŁ¤ ¥\níĭ ´\nà¹ĢภĬ\nÑĢоÑģ Ñģ\nwak ati\nvy pe\nvene z\nve ia\nuh in\nty rosine\ntu as\ntro tman\ntore ba\ntol ka\ntim and\ntig ny\nthig pen\ntel lem\ntas krabbit\ntarong azoo\ntag uchi\nswedi shousem\nswedishousem fia\nstop brexit\nsr hs\nsped als\nsno res\nske ena\nsch ange\nsal leh\nru airi\nrouss os\nrodney atkins\nq west\npeople pets\nori zon\nobstetr ician\nnwob hm\nmuzaffar pur\nmrdavid haye\nmob sters\nmo fongo\nmir cea\nmer y\nmeang irl\nmath letics\nmac neill\nkron er\nkill this\nkai greene\nju dit\nindi sci\nhorse play\nhelp the\nhaz ar\ngw d\ngrave side\ngram atik\ngonna hate\ngas olina\nfre search\nfair ings\nfad er\nevery simpson\nest eli\nest ela\nellic ott\ndisney junior\ndirty bird\ndheer aj\nde grades\ncu dahy\ncrimin alized\ncoren tin\ncon k\ncon forms\ncol den\ncloud scape\nclam or\nckin ney\nch evening\nbra zing\nbluenote records\nbat tuta\nbaq ir\nbang erz\nbal der\naustin town\nas inghe\nal endar\n@ ...\nðŁĺĤ ðŁĺĭ\nðŁijı ðŁı¿\nwild card\nwe broot\nvand aag\ntor ode\ntom ie\nthevamp stristan\nthel auren\ntan jore\nsyn ching\nstu mpf\nson no\nsas sari\nsall natural\nron o\nrethym no\nrepleni shes\nraig ad\npub media\nport sea\npaper weights\np day\nor ton\noni stas\nol our\nobey giant\nni it\nmucos al\nmu dug\nmi tho\nmarcal mond\nlit en\nlec c\nkhal eel\njuli ane\nji bs\nintric acy\ni han\nhappy dog\nh vs\ngreg pak\ngood nite\ngn omeo\nglam med\ngen erics\nfood coma\nfie sta\nfar nam\ner ra\nempres as\ne met\ndrud gery\ndoit for\ndisembar king\ndid entity\nchloro form\ncebu ano\ncatt elan\ncar ini\ncar audio\ncan er\nbul ilit\nbol lo\nbidad ari\nbi os\nbell er\nash dlmundo\nari da\name ba\nab iz\nab im\nå´ İ\nyur il\nwen ig\nwe gen\nwalk with\nwal le\nwait akere\nve za\nut m\ntrainst ation\ntou raine\nthre shers\nthe celtic\nthan s\nter raz\nstephen mulhern\nstart list\nsolidari dad\nshepherd stown\nsfoster nyc\nse spn\nsay le\nsau sag\nsal afi\nrock thered\nriks bank\nregre ssing\nr anna\npush cart\nplay it\npack rat\npac west\norang erie\noptimi stically\nomis sing\nnikon europe\nnatur alism\nnan ton\nmosth and\nmccar rick\nlik ening\nlar sen\nl anna\nkwe ku\nker bal\nkan chan\njust ino\njor dand\nis no\nint n\nimper ing\ni fam\nhome track\nhaver town\ngreen live\nfron tex\nfizz les\nfir stin\ndo ce\ndemetri os\ndave grohl\ncoven an\nclerk ship\nchrisvan hollen\nbuster keaton\nbri den\nban fi\naw ful\nach rafieh\nðŁĺį ðŁĺļ\nìĹIJ ìĿ´ìĬ¤\nyl g\nye mpire\nwire work\nwbal tv\nwan ed\nwan e\nvegetarian week\nur h\ntre mendo\ntrans gendered\ntide as\nthro ad\ntar ly\nst thomas\nsn bc\nshi bain\nshadowhunter schat\nse ty\nschwar tzel\nsch u\nsch ls\nscat man\nsaf in\nsab y\nrubi ks\nro whouse\nrip cord\nrem itting\nreformat ory\nre ise\nramad ank\npren up\nphotomani pulation\nopel ousas\nmill street\nmerr itt\nme tin\nman teo\nlatitude fest\nkel sall\njummamu barak\njer ked\njen nas\njabberwo cky\nja ins\nj hc\nij e\nham by\ngrou pers\ngon za\ngl one\nfre eu\nfe int\nf book\nexchang ela\nevic ting\nen ery\nen counter\ndy ersburg\ndri k\ndis band\ncur bed\nconge stive\nbro th\nbier zo\natem ple\nasil va\nap ig\nalder men\nal ye\naby ne\nðŁĴĻ ðŁĺĺ\nðŁijĩ ðŁı¿\nرÙĬ ÙĨ\nyalo va\nx large\nwr ld\nwizz air\nwar ley\nvote conservative\nvisual kei\nut arlington\nunited sportscar\nuncler ush\nun couth\ntwee ples\nthi splace\ntad ao\nster oline\nss ays\nslu t\nscrn ch\nsci oscia\nro thenburg\nrid wan\nqu ai\nplay day\npic atnoon\nph rma\npen et\nor mer\nnascar throwback\nnar dw\nmong kok\nminic ab\nmegach urch\nmaster minded\nlivefor music\nlauren pope\nkellyand michael\njay nes\nip aul\ninterven tionist\nicab nf\nho ggs\nhiday at\nheart gold\nharri ett\nhand crafted\ngirl slikeus\nge ty\ngastro pod\ngall icabnf\nfu quay\ner red\nelo dge\neg mond\ndef ile\nday sleft\ndat at\ncre scents\ncoy m\ncolumbi ans\ncent eno\ncar acha\nbur khal\nbr rrrrr\nbf goodrich\nbeauty fromitaly\nban dol\nantmanandthe wasp\nag os\nab han\nðŁĸķ ðŁı»\nðŁĵº @\nè ¯\nâĺĶï¸ı âĺĶï¸ı\nz army\nwoking fc\nwink worth\nwe wontstop\nwatt ack\nvfl wolfsburg\ntwist cone\ntusk en\ntrap door\ntha ana\nswag g\nsti ffs\nspeed ily\nspeak ing\nsak is\nro hm\nred pill\nra um\nr sac\nr pf\npu f\nper fs\nover confident\nning ton\nnin comp\nnetflix india\nnas u\nmura bi\nmonoli ths\nmon to\nmo hn\nmi zen\nmap monday\nman gement\nle derman\nkear sarge\nkam ps\njam ir\nin ni\nhun di\nhon tiveros\nhetero sexuality\nguid i\ngor ga\ngol fuk\ngodzill amovie\ngavin free\ngateway pundit\nfree zing\nfinola hughes\nfer um\nexplo rey\ness sss\nel ft\nec ca\ndon agh\ndel arosa\ndefaul ted\nde fac\nbuil tto\nbu sines\nbrown out\nblue jacket\nblack house\nber nies\nar ango\naqu af\nanti gens\nal pin\nak agi\nabsol ve\naben omics\nab dalla\nðŁıĨðŁıĨðŁıĨðŁıĨ ðŁıĨðŁıĨðŁıĨðŁıĨ\nãĥ³ãĥ ī\nwyn ne\nwhomademy clothes\nwestworld hbo\nwe ct\nwakaflock absm\nwa a\nw cac\nvie jas\nu hb\nti ri\nten afly\nspy ker\nslu gged\nsan frecce\nsam eness\ns zu\ns ition\nro my\nrat chaburi\nram bin\nrach et\npul led\nprote ase\npo temkin\nphoto synthetic\npal imp\nnr tnews\nnon tario\nnet worth\nmo dica\nme withoutyou\nmanekagandhi bjp\nli ph\nler and\nl sw\nkryp tonian\nkey tnc\njor ma\njobless ness\nir reconcil\nhin shaw\nfleish man\nevent management\nes bjerg\nequal ising\neaster ns\ndu bia\ndiscu ssant\ncolai ste\nclec linic\nchoice scifit\nboot leg\nbiltmore estate\nbe eco\nbark ada\nar ou\nal aki\nakim bo\nad omin\n_ (:\nwren n\nworld tbday\nwoo ding\nwinter park\nu mana\ntwel vyy\nto phat\ntdam erit\nt jp\nstra in\nso is\nsel iger\nsal in\nreli ent\nrefu ting\npur ch\npu rex\npre teens\npoly chro\npet sathome\noo dle\nolivi ach\nnistel rooy\nmul lane\nmon tini\nmoham ud\nmir u\nmedic alassn\nmcham mer\nmc cly\nman mohan\nlinke ddata\nleth ality\nlegal news\nkwi atkowski\nkir ks\nkim ye\nkerry jane\nk Åį\njor ger\njk rowling\nj muk\niri dium\nintersec ts\ninlan dempire\ninfl icts\nhumanright s\nhr k\nhead masters\nharris jofficial\nha sak\ngre ased\ngrass fire\ngrain free\ngonz ag\ngian luigi\nfuture offood\nfri ende\nfran ch\nfor mas\nfem icide\nfa wn\nerr orist\nencro ached\nea z\ndom an\ndefi ance\ncompos itor\nclar kes\nchan yeol\ncar line\nbre ss\nblablac ar\nbl dg\nbeat en\nbam bang\naquari um\namer medicalassn\nalge meiner\nal gé\nafter words\nach ile\nac ic\nzero ing\nzay at\nwhit te\nwb sc\ntyrone gaalive\nthe source\nstrip tease\nsingh e\nsi i\nshu sterman\nshay carl\nsa thi\nreni shaw\nre tto\nrack mount\nq rl\npray formh\npos ites\npork pie\nphoe bus\npav lovic\nozz fest\nout sized\norom octo\nnotin this\nneu berger\nmun k\nmississipp ian\nmeg acity\nmat um\nmasculin ities\nle vens\nla sko\nkl ick\nkirk cud\nkar men\nk auto\njodre ll\nj michael\nit showbiz\nindepend ant\nincar n\nic v\nhondac enter\nhandsom eness\nguru official\ngott lieb\ngold member\ngo west\nfron trow\nfle isher\nfar uk\nfabri que\nexcu se\nef dn\neck man\ndalla stown\nd hau\ncu ed\nchildrenof syria\nch l\nca sti\nbur chett\nbu cees\nboge yman\nbl w\nber inger\nbelitt ling\nbar ti\nay le\nav owed\nasi mb\nart ful\nao ta\nample forth\nam eland\nðŁĻĭ âĢįâĻĤï¸ı\nðŁĮ¸ ðŁĮº\nìĬ¤ íĥĢ\nåı į\nzom ato\nyarmul ke\nwx yv\nwen onah\nwang anui\nveng aboys\nvegan recipes\nvau dev\nultr alive\ntrot sky\nthan ka\nsun deep\nsummerhall ery\nsplit svilla\nsp uri\nslo v\nscri bbly\nsau rashtra\nroger moore\nrel ented\nreinde ers\nrand ers\npromo tor\npre calculus\npower wall\npi ot\nphy salis\nphy lum\npet ch\npeel policemedia\norgre ave\nor rell\nop ress\nob elix\nn ho\nmon net\nmi yan\nmaj er\nmafi keng\nlon abscbn\nli mped\nla e\nkou libaly\nknowledg able\nki pping\nki me\njust y\njonathan rhysme\njo gged\ninter ac\nimper iled\nhugh hefner\nho soi\nhan key\nfinger lakes\nfav pic\nfart lek\nepil ator\nenth iran\nen ext\neffici ents\nedinburgh rugby\ndog days\ndefin ing\nde simone\nde mario\ndavid hogg\nda ou\ncr z\ncol mc\nco quet\nc sea\nbol an\nblue jackets\nbipolar disorder\nbhand ara\nbbc motd\nas are\nari ste\nallegori thmic\nah ir\nafi q\nðŁĽ ij\nðŁĺı "\nðŁİīðŁİĪ ðŁİĤ\nðŁİģ ðŁİģ\nðŁĮİ .\nzi kr\nweb masters\nup show\nton ko\ntitle ix\ntim bered\nthor naby\nte acup\nsydney siege\nstroo tman\nstri py\nshol ing\nsho lidays\nru ang\nroy g\nrockab ye\nre wind\nram zy\npots damer\npolymer clay\npoin tuk\nphoto bomber\nphiladelphi ans\npalae onto\nnar anjo\nmysti kal\nmtn za\nmosco u\nmo do\nmis spellings\nmin new\nmar son\nmagister ial\nmag yar\nmafal da\nlew drp\nlei per\nlav ash\nla follette\nkno kke\nkinna ird\nja res\nin and\ni roc\nhos le\nhepatitis day\ngg r\ngather ing\nflat woods\nev eline\nen close\nelek tron\nele x\ne ales\ndrown ings\ndr c\ndilu ting\ndhanan jay\nden ner\ndel ario\ndeer hoof\nctv news\ncms gov\ncer c\ncarin thia\nbun ching\nbu zan\nbr ong\nbouy gues\nbles sup\nbetsy devos\nbe here\naú paatleti\naxi om\nattemp loyee\nati p\nassassin ating\nalter nacomics\naacpsa wesome\nðŁijĮðŁı¼ #\nðŁ¥ ĵ\nâļ Ķ\nª ¨\nwitt mann\nwill erton\nwest land\ntn rs\nthan ior\nterri o\nta hira\nswisso tel\nswer ve\nsw ir\nsubhash ree\nstro ther\nstain er\nst res\nsn cc\nsli b\nsk orea\nsil kie\nsan toni\nred wing\nre packing\nrabin dra\nquar rying\nps ico\nproto col\npre yed\npin kri\nny ac\nnether world\nner ys\nne ca\nmonclo va\nmau ger\nmal functions\nmakh doom\nma him\nkud la\nkaz ee\njourn alist\njing ling\njeal ou\njack daws\nitson ly\ninvigil ator\ninsecure hbo\nhugg able\nhans berry\nh nurburgring\ngy ne\ngun dogan\ngour lay\ngods word\ngi al\ngerry adam\ngeek ery\ngay lord\nfun fest\nfour fold\nfore gone\nfocu sses\nflor ham\nfl ict\neast cote\ne ska\ndevo ir\ndef i\ndef alco\ndar on\ndam pers\ncl ace\ncham akh\nbos na\nboo kert\nbe sharam\nbat roun\nb eller\natt il\nasse tto\nantin ori\nanimal art\nanc inema\nalien day\n." (\nåIJ ī\nâĶ ĵ\nwen ner\nweather by\nv sr\ntur nitin\nthe gop\ntai bbi\nso ddy\nsi mak\nsi busi\nschi avo\nsamp son\nro ky\nrelapse records\nr bn\nq ais\npul py\npin ce\npil ani\nphosphor ylation\nperig ord\npa ano\nnor quay\nnkc schools\nnh sc\nmovi star\nmon ge\nmin ie\nmicro sco\nmer lins\nmedi anews\nmangi one\nmand rill\nma demo\nm kr\nllanish en\nlec tio\nla sher\nkre uz\nkho on\njon ois\njar no\njamie bower\ninjec tion\nho sie\nho die\nhig son\nhi sto\nhappiness day\ngold thwait\ngi jinka\ngen c\nfire star\nfin ovate\nes at\nencephal omyelitis\ndy or\ndiscover yed\ndibru garh\nde souza\nde aring\ndat alo\ncommit te\ncomedy bangbang\nchu ppah\nchan gi\ncactu ses\nbroad us\nboyce avenue\nbhi ma\nbased learning\nay aki\nas key\nart scenter\napocaly pto\namer acad\nac ce\nab nett\nðŁĴŁ ðŁĴŁ\né ¡\nØ´ ÙĨ\nx rs\nwa vered\nvi gnes\nve ering\nvault festival\nvaul ters\nvant age\nunity assetstore\ntriti um\ntri gla\nto kara\nterri bly\nteamgod vek\ntapp en\nsurreal art\nston ie\nso cent\nsm sc\nsin spire\nsidd hant\nshiva ji\nshan mugam\nsexual violence\nsee us\nsatchat wc\nsarab hai\nru men\nrach na\npot n\nparmen tier\non stad\nnyc ballet\nnico lear\nmun ter\nmon ate\nmobile gaming\nmilk tea\nmc memorialcup\nmc dormand\nmark wahlberg\nli muru\nko ker\nkirri billi\nkh da\njuli es\njig gs\njarls berg\njag ran\nit support\ninsi eme\nhy i\nhumanitarian day\nhouseoff raser\nhor bury\nhom ie\nhilli ard\ngur uk\ngum shoe\ngladi us\ng fw\nfl and\nfast codesign\nentertainment news\ndonate blood\ndesp ues\nde wing\ndaz ed\nda pet\ncri sco\ncee fax\ncar mo\nbuffo ons\nbletch leypark\nbell shill\nbe ssa\nbe mel\nbbc glos\nbag shot\naw rites\nautom ates\naug ment\namate uri\na iche\nðŁĺį âĻ¥ï¸ı\nðŁĺĤðŁĺĤ âĿ¤ï¸ı\nðŁ¤· ðŁı»âĢįâĻĤï¸ı\níķ´ ìļĶ\nz j\nyaqu ina\nwiki art\nwhit er\nwhis ks\nvuvu zela\nvan ities\ntyre ke\nthe dar\ntam ura\nsuppor tall\nstar rcade\nstan ek\nskam france\nshiv ay\nshi ed\nsa chiko\nrural health\nrim pac\nreal jeff\nranveer brar\npul u\nproudtobeafan of\nplay book\no sullivan\nnumb ed\nnostro mo\nnor rell\nnas anewh\nnasanewh orizons\nnaco tweets\nnaaper usur\nmo hua\nmc whorter\nmc cants\nma ung\nls st\nlmfa ooooooo\nlife sci\nle stari\nle bon\nlau de\nla gav\nl rv\nkatsu ya\ninund ation\ninternationaldayof yoga\nincorri gible\nimpregn ate\nimpe y\nil icious\nhoro vitz\nhome ofthe\nhol beach\nhirsu te\ngra dle\nglaxosmith kline\ngiorgio armani\nfuji xt\nfro sch\nfebru ary\neverysimpson sever\nest ad\nea ve\ne isa\ndu rocher\ndu er\ndil ley\nddot dc\nday at\ncharlam agne\nbob saget\nbilliejean king\nbeau sallnatural\nbe uk\nbbc sp\naspe aks\nanneli ese\nðŁĻĮ ðŁĶ¥\nðŁİī ðŁĻĮ\nðŁİ ĸ\nyon ah\nyo jna\nyash want\nx ula\nwo sa\nwing less\nwi zzy\nvennel akishore\nusas oftball\nunder achievers\ntro gir\nthe journal\nter nate\ntb x\nsuper position\nstraightoutt acompton\nstein le\nsr na\nsouth bridge\nsmallyoutuber army\nsm be\nsimon mayo\nsie mian\nsentiment ality\nrun yan\npro chain\npot ch\npine tree\npa che\noh sas\nober ts\nnipp on\nnh n\nmil nes\nmehl dau\nmedic in\nmc shay\nmaje wski\nliannela havas\nlas ry\nla gom\nkarachi kings\njun agadh\nju kka\njas o\nj of\nhigh tech\nhear ttour\ngrey hawk\ngreen sleeves\ngo hounds\nget money\ngee zy\nfonten ot\nflag bearer\nest our\ne wer\ndor é\ndisillusion ment\nde clin\ncraco via\ncon lin\nclai rol\ncine matics\nchar pen\nc shl\nbi pedal\nbha jan\nbere an\nber ghe\nbent ong\naudi q\nallstar weekend\nalgonquin colleg\nad our\nacupunc turist\nacqu its\nac ast\n? \'\'\n+ %\n! ðŁĴ¯\nðŁĴĹ ðŁĴķ\nðŁĴķ âĿ¤\nðŁijıðŁijı ðŁijıðŁijıðŁijıðŁijı\nðŁ§ ¬\næ Į\nzab ka\nware heim\nwad desdon\nval aafshar\nun fashionable\ntoll cross\ntizi ano\nthe kla\nthai airways\nstar talk\nspecial k\nso kc\nsivak or\nru ched\nron killings\nron coni\nrenmin bi\nrelent less\nregal films\nramblers gb\npx g\nps yop\npo tra\nocto bre\nnikki glaser\nnightri ses\nni pa\nnews ers\nnee pawa\nnct zens\nnationaldrink wineday\nnational service\nnap ed\nn bam\nmy body\nmor oso\nmo su\nmine iro\nmdc pss\nmay te\nmarsh y\nmar ya\nmani fen\nmalay ali\nmag ruder\nlauren gottlieb\nku bu\nku ang\nketo genic\nkerryjane ellis\nkemp f\ninter linked\ni faw\ni asp\nhosp s\nhonor is\nhealthis wealth\nham asaki\ngri sha\ngre ste\ngn itive\ngais ano\nfuri ends\nfem to\nfal c\nero space\nem pa\nef fusion\ndj am\ndis orienting\ndelici as\ncringe worthy\ncordi als\ncommun ities\ncol ucci\nco ble\ncloakand dagger\ncatal un\ncan ai\nbur ges\nbrill antes\nbode ans\nber nou\nbally bunion\natl super\napp ia\nand han\nal awi\nair speed\nab ang\na ot\n... ðŁijĢ\n) .....\nðŁijĮðŁı» ðŁijĮðŁı»ðŁijĮðŁı»\nðŁ¤Ķ ?\nðŁ¤£ )\nëī´ìĿ´ ìĬ¤íĬ¸\nâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸ ĤâĸĤâĸĤâĸĤâĸ\ny up\nwwe braywyatt\nver ite\nuta pri\nunderpin nings\nun mounted\nun approved\numass amherst\nu lukaku\ntrail cam\nthun ger\nthu raya\ntheart stack\nthe space\nstream team\nstratfor duponavon\nsta stny\nsp ts\nsoo oon\nsnack time\nshep shed\nsas son\nsand bank\nsab miller\nsa char\nromel ulukaku\nritu par\nrhe l\nrex ona\nresent ful\nreceptac les\nrece ssions\nrav nica\nradi ob\npress box\nportu gese\npen alize\npear sons\npark jihoon\nnou wen\nnic las\nneuro modulation\nnaz i\nmen n\nmagdal en\nma sur\nloz enges\nl pie\nkut less\njungy onghwa\njim ena\njan usz\nhex acopter\nhan zi\ngat ley\nfri gg\nf xi\nexclu sionary\nengar cia\ndrum mond\ndim mak\ncool sculpting\ncon cent\ncl wb\nchat roulette\ncentr is\nbull ough\nbody powerexpo\nbertol t\nb live\nauber jonois\nare yes\nakl transport\nac chio\nab end\n.. !!!!\nza hawi\nz nick\nym t\ny rt\nwout ers\nwo ven\nwind surfer\nwgtn phoenixfc\nwe suppor\nwad ley\nw sop\nvandy football\nust angs\nty lo\ntu lan\ntor ic\nthe ye\nsuper loud\nstu cker\nsk ick\nshibain u\nsheff trees\nsh abad\nsemi precious\nseduc es\nsaf aree\nrw by\nroche ment\nred house\nred beard\nre sen\nrayu du\nrat an\nrapp rochement\npure gym\npic tu\nphil pot\nott en\nonthe edge\nne wel\nmilit aries\nmhu ire\nme son\nmci vor\nless ened\nkit to\nkeep moving\njo ye\njerobo am\nje tter\nhoo sick\nhomoe opathy\nho pa\nharsh ness\nhapp il\nfren chs\nfloun ders\nfen nelly\nfacilities management\nfa ired\nelo isa\nek du\ndj d\ndiss enters\ndelux e\nde classify\nde ac\ndaw ber\ndav itt\ncru dup\nconfor ama\ncompeten cia\ncircum stantial\ncat sand\nbun di\nbt x\nbar clays\nay ame\nar lie\nam soil\nado ts\naber tillery\n. ??\nðŁİ ĸï¸ı\nâļ½ï¸ıâļ½ï¸ı âļ½ï¸ıâļ½ï¸ı\nwel z\nweather head\nw vs\nvener acion\ntv ds\ntransm its\ntom keene\nthe observer\nstand together\nsojour ners\nsnar ky\nsilver sun\nsi ssies\nsci pio\nschut te\nrmt union\nre ik\npro camps\npride to\nplan ahead\npixi elott\nowen thal\nome tal\nno cks\nmusic box\nmin esq\nmex i\nmcqu illan\nmar teen\nman gga\nland man\nkpop snaps\nkang as\nkam merer\njind abyne\nj jk\nj hah\ninter dimensional\ninter changes\nhull fcofficial\nhu sson\nhein richs\nha aland\nh way\ngerryadam ssf\ngeorgemason u\ngal ert\nfu ka\nflex ors\nexo du\nesco ffier\ned gel\necon oline\ne hime\ndel ux\ndeepa wali\nde shields\ndac orum\ncu bat\ncu bam\ncron us\nconst ants\ncon ard\ncleveland dotcom\nchild care\nchar ron\ncapit oline\nc car\nbustar hymes\nbrow nuk\nbre lla\nbo din\nbiop olym\nbeau ford\nbare ly\nas cari\nar aka\namerican apparel\nah sn\na strian\n.. -\nðŁĺĤ ðŁĺĿ\nçļ Ħ\nâĻ¡âĻ¡ âĻ¡âĻ¡âĻ¡\nwav y\nvermon ters\ntime frames\nthaana aser\nsylvester turner\nsol vency\nsi ano\nshekhar ravjiani\nser hant\nsave shefftrees\nsar chives\nrepet itions\nrain ing\nquinceañ era\nprofe sor\npower on\npollu ter\npl ani\npass é\npar cell\npalatin ate\nop rah\non on\nolivi ap\no et\nnon believers\nno jhl\nnew aygo\nn sl\nmtvlakpop got\nmark ham\nleon sis\nlake man\nken fig\nke ong\nkab ale\njodi stamaria\njen shad\njam bu\nj nu\nise tta\nirr fank\nic p\ni wu\nhuis genoot\nhome is\ngr anta\ngal livan\nga iter\nfu med\nfried le\nflu ffer\nfi ps\nfeu ding\nepic ally\neh x\ndi elle\ncle on\nci one\ncer mak\ncast ate\ncann avale\ncambr ils\ncal ley\nc th\nboo oo\nbi focals\nbha u\nbent grass\nbarnar do\nbarn burner\nat os\nas scher\nar oh\nðŁĺİ ðŁ¤ĺ\nðŁĵ± ðŁĴ»\në°ķ ë³´\næ ¡\nâŀ ³\nwhis kered\nvidy abalan\nver ity\ntraf fik\ntemb isa\nteam liquid\nswe tha\nsty led\nstomach ache\nshor tt\nseren ely\nseis mology\nsec ted\nreve aled\nreceiv ables\nre decoration\nra heny\nq trs\npp ers\npos its\npneumo coccal\npinkie pie\nphoenix open\npeople mover\npan th\nou ar\nor ana\nnu evo\nne afl\nmon eda\nmodular ity\nmoderni sts\nmlb tonight\nmin ers\nloo ds\nlizziec undy\nkov ach\nkon tos\nkess ler\nk for\njo ffre\nishi hara\nisaiah mustafa\nho chman\nhere fordfc\nhell gate\nhaunted mansion\nhalf life\nguil den\nfly back\ne euu\ndumb ell\nduc al\ndrop dead\ndan ilo\ncustomiz ations\ncottag elife\ncompre ssive\nchan an\nch ena\ncancer society\nbren ton\nblogo sphere\nben ford\nban aue\navo y\nas inger\nas coli\nangh arad\nalti plano\naaaaaaaa aa\nyoshin ori\nwid mark\nwal kar\nvincent kompany\nvie tti\ntumul t\ntru ett\ntonight alive\nthem self\nthe dogs\nth wnd\ntantal us\ntag team\nsummer town\nsum mere\nstu tter\nstra fe\nsot we\nsha f\nsc roller\nsamu sic\nru do\nross ington\npreemp tively\npo chard\npe rel\npat en\nom ak\nnathank ress\nnak as\nmur rah\nmul u\nmore x\nmer ited\nmen the\nmega world\nmay as\nm guggenheim\nlur ked\nken mare\nich ri\nhome port\nhol burne\nhistor ias\nhill brow\nhidden gem\ngre c\ngallifre yan\nfoto friday\nflu vanna\nf we\nev asi\nequ alize\nen rages\nemp tor\ndie ben\nden ko\ncu tty\nco efficients\nchak u\ncazeno via\nby products\nbro kering\nbi vins\nbhar ucha\nbar coding\nballer ini\naren berg\nanas azi\naj yothi\nacet ylene\nè¡ Į\nâľ ©\nyaf ai\nwy omissing\nworld club\nworld chocolateday\nwh impering\nweb kit\nuc cia\nswal ec\nsw k\nstylist ics\nstream liner\nsnap chatted\nske en\nsig na\nsh ya\nsee man\nsange et\nsan ne\nsal oni\nsafety month\ns din\nritu alistic\nri fic\nresi dente\nrecord z\np dvsa\noddi see\nnow live\nmis calculation\nmian wali\nmegan hilty\nmck illop\nmcel henney\nmayor ga\nlovemy team\nlang ridge\nl jn\nkos ice\nkooten ay\nkomo traffic\nkim cattrall\njimmy butler\njay y\nitaly magazine\ninstit ut\ninau sp\nhel ias\nhasak ah\nhalla bol\ngr illi\ngabri els\nfur ball\nfran e\nfo ti\nfl sa\nfbr party\nfay e\neast man\ne esti\ndrizz ling\ndeci mating\ncongratul ation\nco axing\nchin ch\nboho style\nberry z\nben rector\nbar ware\nawar ness\nawaken ing\nam ruta\nalle man\nal enka\nagron omic\n( **\nðĿĹĶ ðĿĹ\nब à¤ļ\nzo sia\nyou decide\nwpu gamers\nwinter set\nwil kinson\nwiki mania\nvs fs\nvelvel holler\numn proud\ntyler florence\nto dai\nthu izen\nten chi\nstun a\nshat in\nsham schar\nshamschar ania\nse ele\nsc ald\nsam bailey\nru iter\nrep tom\nra ud\npro veit\nplo sive\npilip inas\npaul rabil\nparisi ans\nos waldo\nomgits alia\nney ville\nnew haven\nneveren ding\nmouth bass\nmilk maid\nmesopotam ian\nmatth au\nmadefur you\nlon dinium\nlead with\nkxip v\nkokop elli\nkne ecap\nkis ar\njonathanrhysme yers\njanis joplin\nindian town\nhou ri\nhop ton\nhe mos\ngu sted\ngreen mount\ngrand designs\ngoss ard\ngi all\nfur nas\nfour ze\nen gen\nec amp\ndynamic duo\ndelauren tiis\ncin ci\nchel le\ncar idad\ncandle wood\nbroward schools\nbr wanda\nbir rell\nbeep beep\nbeck ton\naver ill\nalway son\nafric ain\na ask\nâģ ±\nza jac\nwor zel\nwood vale\nwash er\nwall ander\nw no\nvor tices\nvit to\nun naturally\nu shing\ntutu tuesday\ntoronto life\ntor ana\nto gas\nth ér\ntestu do\nteam up\nst pats\nserrat os\nsch oten\nsantu ario\nsa pping\nro eg\nqueen at\npu rer\nprize fighter\npop fest\npocket ful\npc cc\nori hime\no shin\nninten dogs\nniel sen\nnardw uar\nn bak\nmoul ting\nmore ish\nmary beard\nma vi\nlo bbed\nkle pper\niron workers\nintelligen cer\nice berg\nic lub\nhor crux\nhee ley\nhar uto\nh tr\ngot ts\ngine tte\nfero ze\ner isa\nefan art\ncor a\ncolor fabb\nco dered\ncleck heaton\ncater ing\ncal casi\nc mmi\nbull fight\nbelle isle\nbbc sport\nay uda\narrhyth mias\nani morphs\nangel alessandra\nan gre\nðŁĮ¶ ï¸ı\nâĸ ¹\nwill you\nweiz en\nvul va\nvor st\nvisit zimbabwe\nun taxed\nun intelligent\ntri est\nti bby\nthe butcher\nt pusa\nsun rays\nstep sister\nsr ly\nslu ggers\nsheffield shield\nsham ma\nrif fo\nric es\nrelocate revolution\nreig nit\nrain iest\nqueen ston\npor denone\nout é\nout ta\nob jets\nno co\nni ii\nneuro transmitters\nnak ak\nmu zy\nmidwive srcm\nme shell\nmay ank\nmaru thi\nluc is\nloven otts\nloren z\nlaparo scopy\nl ld\nkeeping people\nkakao talk\nin ria\ni ig\nhyundai india\nhu sa\nhappy ending\nhand hygiene\nham ner\ngro ssi\nglutam ate\ngermani um\nfarm lands\ner mita\near ning\ndu ppy\ndra ken\ndoom sday\ndie guito\ndf wairport\ndekal b\ndamian mcginty\nd zi\ncu erockstar\ncrevas se\nchloelu kasiak\nchis ago\ncharlotten c\nc pre\nbossho g\nbla kk\nbelo tti\nbad agry\naver ting\narcol atheatre\n$ :\nðŁij ļ\nãħĭãħĭãħĭãħĭ ãħĭãħĭ\nâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸĤâĸ ĤâĸĤ\nyoko yama\nxper ts\nwend ouree\nweaver ville\nwalk throughs\nw mr\ntu ke\ntro yal\ntid worth\ntate modern\ntal agang\ntai ze\nsze wski\nsutton united\nsubhashree sotwe\nstere olab\nspe ared\nsimon kids\nseap lanes\nsav illage\nsand ell\nroman cer\nrink u\nrang eland\nran jha\nra ylan\npublic domain\npre ste\npo sca\npesc ado\nol mec\noffici ali\nny onya\nnational hugday\nmuffu letta\nmorphe tt\nmo rel\nme gad\nmakey makey\nko belco\nkno ebels\nklgand hoda\nkil t\njohn barrowman\njc ps\ninternational airport\nhimansh kohli\ngro e\ngou ged\ngeorgi eva\nge te\ngar ao\ngan ado\nfitz gerald\nfis ica\nessenti alism\ner yan\nenshr inement\nejec tor\ndwan imation\ncute dogs\nchar med\nce in\ncapitol records\ncab u\nblo emen\nbi monthly\nber gan\nbench ley\nbeau doin\nbas sil\nbab ay\nantiqu ec\nall eries\nali ko\n# &\n! ;\nৠĢ\nx cp\nwomen sempowerment\nwi right\nwheel sup\nw pn\nvre tta\nvic hy\nutter most\ntho li\nth our\nter nan\nsublimin ally\nspi eler\nser fs\nschn app\nrü gen\nrun ge\nru bis\nru bicon\nro bards\nqu oll\nox ys\nop hir\non health\nof india\nobliter ates\nneuro pathic\nn achi\nmuk tbharat\nmodi fiers\nlong shore\nlak shad\nisrael in\nin zam\nil as\niam don\nhomes ite\ngg b\nge va\ng ptw\ng lon\nferr at\nfeel ers\nfanta stics\nfam u\nexcruci atingly\nel ain\ne tri\ndir ham\ndi bba\ndeploy able\nconveni ences\nci fera\ncatamar ans\ncamp ina\nbundes bank\nbu cyrus\nbrae burn\nblue steel\nbill ys\nbi kram\nbelvo ir\nbe aded\nband ung\narnol fini\narbu th\nar salan\nadi vasi\na open\nĿ ¼\nðĿIJ Ģ\nÏ Ī\nzone quotes\nzephyr hills\nwam pano\nvodafone uk\nvarun kapoor\nv op\nv br\nthin ker\nthi phop\ntheroo kie\nsu mm\nstick le\nsti fel\nsqu ally\nskil let\nsc wc\ns weekend\nrush moor\nregre tfully\npl eni\npick pockets\npap ilio\nop u\nnicek icks\nne hisi\nnath ist\nnar in\nmusic blog\nmr police\nmon ette\nmo che\nmis reading\nmick ael\nmen schen\nme res\nme please\nmanifen cours\nman olas\nmal us\nmaj ura\nma kwana\nlions den\nlibe rec\nlali bela\njosh widdicombe\ninsi pid\nhedon ist\nhammar by\nha fan\ngus set\ngott schalk\ngianluigi buffon\nfy ffe\nfriday feelings\nforest ville\nfi jir\nexo somes\neuro sceptic\net cc\nencapsul ating\nen circling\nen circle\ned ita\ndri shti\ndeduc tive\ndamp ness\ncu ta\ncraigie burn\ncover let\ncov campus\ncor usc\ncon found\nco oma\nchest nut\nche ban\ncar bery\nbyl sma\nbroad meadow\nbea vers\nbal ita\nas ÃŃ\napril dryan\napp end\nanthuri um\nanit a\nanci e\nafi f\nadv an\nðŁİĪðŁİĪ ðŁİĪðŁİĪ\nè Ķ\nx pla\nworkers comp\nwe at\nv th\nultra verse\nul tran\ntraff ics\nton sil\nter ton\nter sedia\nte gna\nsupp lier\nsu tch\nsound ings\nser g\nscre wy\nsau ction\nsand men\nsac ad\nred land\nra azi\npun ted\nplastic waste\npig gie\nphys is\nperfor ation\npara ñ\noti des\non thill\nol bia\nob es\nno ori\nnbs morningbreeze\nmy city\nmultim illionaire\nmor ry\nmo yers\nmis sd\nmarni go\nman nat\nmaku hari\nma bon\nlin ski\nless ening\nler wick\nlear t\nle ib\nlao ag\nkim mo\nkar lin\nkar ch\njag gesh\nis op\nicec ap\nic ds\ni wish\nhur dlers\nhelp to\nhau ghty\nhar mattan\ngrand slam\ngo sta\ngland ular\ngill er\ngha foor\nge es\ngal lic\nfuture tech\nfuller ton\nfred perry\nfar rel\nfair price\nfa rel\ne ades\ndray cott\ndon tb\ndo sent\ndel aha\nde aley\nd ile\ncre ated\ncc news\ncather in\nbien ville\nbel tsville\narizon awildcats\nare valo\nanishin abe\nanari vo\nah rc\nabe shinzo\nðŁį¿ ðŁį¿\nëī´ìĿ´ìĬ¤íĬ¸ w\nâī «\nz ent\nwear iness\nvenu gopal\nvay ner\nv q\ntr ine\nton yo\nto life\nteres ita\nsumm iting\nstro jans\nsto ther\nspor a\nspoil age\nspeci alt\nsolom un\nsn andani\nsexualas sault\nsen ig\nsand ile\nsam ani\ns doitbetter\nribble sdale\nraima sen\nquim per\npre te\npra shad\npi atti\npare jas\npa hs\np anni\noffro ad\no low\nn kurunziza\nmol ony\nmoham madi\nminiature painting\nmatchbox twenty\nman ofthe\nlevit z\nlawand order\nla burnum\nl lyn\nke ttes\njustine greening\nju dt\njmuk mrpolice\nincur ring\ni stan\ni ren\nhouse kinok\nhousat onic\nhase be\nhappy yy\nhammer fall\nham ont\nguitar world\ngood body\ngo sn\nf summit\net f\nenthr all\nem j\ncan ned\ncamer at\nburkhal ter\nbottom line\nbetsey johnson\nber kel\nben gu\nbasset law\nbare si\nart aud\nanitaha snandani\nalph ons\nÏ ĥ\nz eck\nwire land\nvisit pembs\nvi dar\nvaltell ina\nv ti\ntrain your\nthe kk\nte ign\nsto dden\nsmi dge\nsinn fein\nscre wattack\nsci eng\nschur z\nru x\nrou l\nremy ma\nremo test\nre awakening\npy per\npromote gamers\npoli an\nplough s\npi eper\npatty sday\norang ina\non erous\nokc fox\nngo c\nmusic month\nmid t\nmalaysia airlines\nm enger\nlord mayor\nkil le\njelly roll\nis worthit\nira ge\nindian airforce\nin tune\nikh wan\niam not\ngroup board\ngal eri\ng tr\nforce friday\nfiber optic\nfast forward\nfar hadi\neti ka\nequ aling\nenerge tically\ne ship\ndra kkar\ndeton ator\ndain ik\nd ps\ncli me\nchristop er\nche mb\nchad mmurray\nch ite\ncau da\nc kel\nbu land\nbreck land\nbouton niere\nbenz ino\nben er\naval or\nau tuni\nattribu ting\nat illa\nask men\naq eel\nap ri\nðŁı ķ\nyas uda\nwy lam\nwa sit\nvitali k\nvitalik buterin\nundÃŃ acomohoy\nun iti\nuc cs\ntre yanasta\ntol ong\nto self\nthe c\nsussex ccc\nspr at\nshin kai\nsheffhallam uni\nru cks\nro eder\nri kka\nr ti\nqui ros\nprofit erole\npony tails\nplayer pic\npitch side\nphantasmag oria\npab los\nol dier\nnic liffe\nni giri\nmin im\nmet zler\nmesab oogie\nmen z\nme hul\nm wl\nloo sed\nllew yn\nki at\nkei bler\nkav in\nimagine er\nhul led\ngraham cassidy\ngra sps\nfro wns\nflam beau\ndn q\ndenver comiccon\nde gradable\ncow lick\ncorner shop\ncornel west\ncollecti vism\nclar as\ncau ca\ncarre tera\ncar ril\nbledis loe\nbc am\nbarneys ny\nb ator\nau h\nantan anarivo\nalta vista\nali um\naggies alltheway\nag gers\nðĿIJ Ń\néĥ İ\n⾨ ðŁĴĽ\nwo erner\ntune in\ntrinity laban\ntra ina\ntherapy dog\nthel ake\nsuble ase\nstrat ot\nsoci ol\nsel fs\nseger strom\nrel ine\nreb or\nrani er\nq ayy\npla yed\nor la\no dissi\nna sib\nn sb\nn mo\nmubad ala\nmicro climate\nmicro burst\nmercedesbenz uk\nmaj ella\nlu chas\nlive band\nlite speed\nlin iers\nliev re\nlewi stown\nlee v\nlaurel wood\nlap wings\nku kui\nku ki\nkri pp\nkapoor fc\njamesmartin chef\njad in\ninthe styleuk\nimit ations\nhakk asan\nh df\nfollow back\nfaiz abad\nfair child\nf pd\nelen nox\nei dul\neag ency\ndevol ver\ndess au\nday quil\ndar ks\nd pn\ncou lier\ncor io\ncomicbook art\ncla use\nchi marathon\ncfe vs\nbuck fast\nbu bb\nbonni emc\nbel fa\nbar g\nbaek hyunday\nba best\nazure stack\nar amex\naqui legia\nangui shed\namas sacre\nallot ment\na wor\n@ _@\nðŁĩºðŁĩ ²\nãħłãħłãħłãħł ãħł\nÄŁ rul\nzaf ira\nz aun\nvandal ising\nv ls\nur tic\nun sociable\ntu ti\ntren cher\ntra w\nto create\nteen ag\nteacher toolkit\ntan tric\nsur yan\nsuper speed\nstur rock\nstirling shire\nstat ton\nst ach\nso ley\nsay ur\nsau cier\nroad warriors\nro ci\nring central\nproperty brothers\npor os\npoland ball\nplay making\npal vin\npaintin goftheday\nop tically\nonly thebest\nnext wave\nnc bs\nmiddle field\nmat cher\nman love\nleonard cohen\nlah ren\nkne aded\nkak enews\nk undera\njodrell bank\nj jackson\nhypoten sion\nhor ween\nho teles\nherop anti\nherald sunsport\nguardra ils\ngu ren\nger rans\nem rata\nem elia\ndu ffey\ndrivel ine\ndisc ards\ndic ho\nden izen\ndaylightsaving time\nco iffe\ncav olleyball\ncal ved\nbring erof\nat aste\nart sci\nani xon\nak d\nagit ators\nac clamation\nìŀ ¬ë²\n~ (\nwz tv\nwr c\nwordof theweek\nwar iow\nwariow are\nwalla pop\nvit ello\nusp id\nun dial\nu eg\nty cho\ntrade offs\ntele marketers\nsun apee\nstephaniej block\nsiddhar th\nsatisf yingly\nsab ine\ns story\nrodi mus\nre villa\nre valuation\nre her\npru eba\nplay ability\nplac ido\nneg ates\nnaxos records\nnat ori\nmy family\nmountain day\nml ml\nmar va\nmacmillan coffee\nlu sion\nlely stad\nkor b\nkirch hoff\nkc g\njoy ner\njar at\njam bon\nhes ston\ngrand standing\ngotit free\ngal ati\ngain ful\ng lynn\nfi end\neter nals\ne avis\ndrinking water\ndran kin\ndean winchester\ndam ac\nd workin\nclio awards\nchem all\ncar ver\ncapsu le\nbudd le\nbru st\nbra ven\nbli x\nbigbang fair\nbab a\nat ol\nap am\namu lets\nalexand rite\nal vey\nag ran\nac com\na different\n< \\\nðŁĺı âĿ¤ï¸ı\nðŁĹ º\nðŁ¥ IJ\néĺ ²\né ad\nzul lo\nzeno bia\nyoung dolph\nww ba\nwr ittle\nwp fd\nwebcomic chat\nw ml\nvec chia\nun affiliated\ntu mis\ntimm erman\nteeling whiskey\nteam nosleep\nta urine\nt magazine\nspo st\nsock council\nsher burne\nshe imer\nsemi pro\nsantur ce\nsan chi\nrul lah\npw ds\nproduct management\npre fixes\nphil o\nnur selife\nnt midlands\nnike fuel\nnascar on\nnam al\nmustang pride\nmis managed\nmemor ie\nma say\nma den\nllangef ni\nlegal ising\nle moine\nko ike\nkear n\nkam ari\nju stu\njoshu ak\nit ap\ninter serve\nintegr ale\nic key\ni ex\nhou ruk\nhar peth\nhar di\ngreen infrastructure\ngoo finess\ngand i\ngam gee\nfent ress\nfact book\nesk il\nenh ancers\nel eni\ndun elm\ndun boyne\ndirec te\ndelhi metro\ndel fina\ncom mbank\ncamof lauge\nca reca\nbook post\nback up\nart contemporain\nagame of\nðŁĺı )\nðŁĴļ ðŁįĢ\nðŁĴª ðŁı¿\nðĿĹ² ðĿĹ\nze ek\nz emo\nyu an\nyouth soccer\nyeg bike\nx bond\nwoodro ffe\nwater safety\nwatch party\nwakati pu\nvv vvvv\nvitri fied\ntrache al\nstre es\nstay lifted\nsky ped\nscare lli\nreyn olds\nram navami\npowder horn\npin wheels\npi qué\npearldrum corp\nop hilia\nol loc\nneck lines\nn so\nmun ya\nmono pod\nmo ster\nmegar an\nlu si\nlook good\nlibra irie\nlatin os\nlang tree\nlal ah\nla iney\nkre jci\nkh ary\njointe am\njo enichols\njason wu\nhou l\nhir anandani\nhillsborough sch\nhappy feet\nguar antor\ngro sz\ng sas\nfresco s\nfl ann\nfeudal ism\ner mey\neich mann\neco tricity\nearl swood\ndog z\ndi mash\ndefaul ting\ndc as\ndal ma\ncr ts\ncor dis\ncomer ford\nclu mping\nclu blondon\nchal u\nch ira\nbrocken hurst\nbot to\nbir thr\nbelieve inthe\nban hart\nb iller\naz im\nay ako\nas som\nar bi\nandre ali\nan asu\nalver nia\naby dos\n>>>> >>>>>>\nðŁĶ į\nâĿ¤ï¸ı ðŁĺĬ\nÌ ·\nyt ff\nyi fei\nwoman shour\nv bm\nu ld\ntuber ose\ntory lanez\nti ums\ntear fully\ntal ky\nsur plice\nsuk anya\nspi on\nspace opera\nsnow plows\nskip bayless\nsk night\nse sa\nschick en\nsar on\nsand on\nsafter dark\ns enders\nru stan\nroyg biv\nro tem\nriot into\nquirk iness\nper vy\npat ay\npar oles\npar mer\nomur ice\nofficiale fcc\nnational walking\nnar ra\nmoon man\nmo dders\nmegam ind\nmcgru der\nmar len\nmain ichi\nm sta\nlove trump\nle wes\nkur anda\nku cko\nkie sel\nkair o\njudge dredd\njohn s\njessicam au\nje eva\nj ado\nir regularly\nico sa\nhu ra\nhoste tler\ngunder sen\ng isa\nfly saa\nfin et\nface painting\nfa intest\nenal davies\nek wo\ndamo daran\ncroque mb\ncri enaldavies\nching lish\ncab arca\nbridg man\nbon trager\nat tia\nash tan\nar aku\nancien thistory\nam my\nðŁĺľ ðŁĺį\nðŁĩ± ðŁĩº\níĪ ¬ë\né ¤\nÙħ ØŃÙħد\ny acob\nworking dog\nweare x\nvo ig\nvinny guadagnino\nvi vas\nuro pean\nthe mandymoore\nthe human\nthe goat\nthe dcuniverse\ntandu ay\nstanford fball\nsomeonet ell\nsof tg\nsmo ore\nsit aram\nshar mony\nsf x\nsen al\nseeyour city\nschu ll\nricar doro\nre xx\nrail er\nr caniglia\nq opa\npis ser\npawn stars\npasi apac\nong p\no yo\nnulli fied\nnon proliferation\nmer rin\nmed ora\nmari as\nmanife stos\nman vel\nmajer us\nksh mr\nkhan h\nke unsuk\nkat ery\nk oury\njhun jhun\njay ma\nhydraul ic\nhr b\nhend rix\ngra bar\ngn omon\nglobalgoal sun\ngerman o\ngab bie\ng lim\nfu le\nfood science\nfl ensburg\nfissu res\nfire bug\ndie back\nde wy\nd illian\ncor son\nchee ba\ncap tured\nc sj\nbush ings\nbri ster\nboston police\nbole da\nbig sur\nbel ah\nbag ani\naver i\nated r\nafilm fest\nab dur\nab assett\n!! ....\nðŁĺ« ðŁĺŃ\nì§Ģ ì§Ħ\nâĸĶâĸĶ âĸĶâĸĶ\nد Ø©\n® ï¸ı\ny lon\nwy p\nwhite mud\nwater fall\nvolvo trucksuk\nvo glio\nvill alba\nven o\nun sanctioned\nu fi\nu angel\nthe frog\nswim mer\nstage play\nsport shall\nsp angle\nsie bel\nshop ify\nshar nab\nselfa wareness\nsee is\nsch ind\nrs spirit\nroswell park\nrippaul walker\nren z\nrecor k\nraw le\npray ing\npoly amide\nphar ah\npar ation\np xp\non dra\noji bway\nnov ick\nmun ck\nmoy se\nmisty onpointe\nmiliti amen\nmikk eller\nmegac ities\nmb am\nma sco\nlu bb\nlong day\nlog mein\nlet seat\nlaur ale\nla wang\nkom bu\nkill monger\nkellie pickler\nkee ble\nkawas aki\nk urs\nk orie\njames x\nindra jith\nimperson ated\nhl ntv\nhan jin\ngoo drem\ngo win\ngla sson\neve rette\nev ast\net is\nele fant\nela ing\neffe minate\ne ines\ne bert\nduck and\ndrum condra\ndr ar\ndif ford\nden ison\ndeflec tor\ncul to\ncreative commons\ncityof tampa\nbu chen\nbroad wood\nbrew ton\nbra yan\nbla x\nbell ville\nbase men\nat ops\nar gi\namstel veen\nam ts\nðŁij¸ ðŁı¾\nðŁİ¶ðŁİ¶ ðŁİ¶ðŁİ¶\nðŁĮ´ ðŁĮĬ\n⾨ ðŁĴľ\nyoung victheatre\nyal emed\nvet triano\nv us\nundere mployed\ntom blin\nto love\ntld sblearns\nthe kapilsharmashow\nstu ta\nsti ft\nste ss\nste at\nstand by\nsplat t\nspe ace\nsocial studies\nso est\nsnow y\nskul ly\nsing ling\nsin india\nsin h\nsig er\nsien kiewicz\nsau mur\nsaf o\nroam ing\nro das\nric er\nrath bun\npt fc\npra th\npatrimon io\nour club\not bc\nonthisdatein hiphop\nnove lette\nnish at\nnicol ls\nne ph\nmorg fair\nman na\nlo vel\nli ggins\nkar abo\nk gosi\njolly llb\nignor amus\nie w\nicu isine\nichi moku\nib k\niam queenlatifah\nheine man\nhapp is\ngreen wave\ngram een\ngib bet\nfriedrich shafen\nfree space\nflu bber\nfal ah\nempath ise\neas ing\ne toro\ndocument arian\ndar kie\ncheek ily\nchate let\nchan o\ncaro lee\nbur rus\nblo tted\nbla kel\nbilly ray\nbar bizon\naz man\navan zo\nau ld\nallan hawco\nalc dsb\nalac tic\najitpa ifcc\nðŁĺĿ ðŁĺĤ\nðŁĺĪ ðŁĴ¯\në± Ģ\nาภ§\nyu lee\nwag tails\nvor arlberg\nvenkatesh films\nuz air\nur um\nul b\nuk wu\ntrom so\ntrau matic\ntran o\nthor gan\nthi splace\nsimon on\nroo z\nrand alls\npul sat\nprepa rer\npope vil\npasi ones\npartic le\npar ana\npang kor\nout building\nold strathcona\nod ong\nmean ness\nmat an\nmarclam onthill\nmal abri\nlorraine pascale\nloo d\nku pang\njis ub\njessicamau boy\nhus by\nhis cox\nhepatitis c\nhe mer\nhass ler\ngly cine\ngiovin azzi\ngeof ilter\nfi fita\nfa shawn\neri des\ndrag neel\ndra zzari\ndiver timento\ndi stin\nchromo somal\ncham s\ncapac it\ncal ero\nbu ike\nbiomime tic\nbeam sville\nbar goed\nbal ed\nattend re\nas cap\nangel sof\nali zia\nalex us\nag or\nðŁĺĤ !\nر Ùħ\nzan gief\nwy socki\nworld skills\nwhit tier\nwalkin shaw\nw ase\nve tta\nvan avond\nuof oklahoma\ntt ro\ntrip ty\ntren italia\ntra e\ntom jones\nthe lead\ntag ov\nsu di\nsmur der\nsm sf\nsinha bjp\nsingle life\nshivar ajkumar\nsham al\nsh ley\nsgr ho\nsb cs\nsal thouse\nsa en\nryo ko\nron na\nrie sen\nrid ere\nresolu tion\nresol utely\nrepatri ate\npr girl\npig man\nparach inar\nom ero\noku da\nnad av\nmr inal\nmeth us\nmateri ally\nmani ka\nlyric ists\nloth brok\nli shment\nli anna\nlack burn\nkn app\nker plunk\nke pong\njudicial watch\ninter diction\ninte x\ninfuri ate\nholi daze\nho lein\nhey hey\nhe trick\nhave an\ngov rauner\ngen tiles\nfilm fare\nfabul ou\nelabor ation\ndong guan\ndieben korn\ndc examiner\ncv show\nculler coats\ncot chin\ncook house\ncharpen tier\nch aux\ncc ac\ncat nap\ncas sin\ncalcu lable\nbb clondon\nback doors\naller gist\nali fazal\nair corps\naf fan\n- ]\nðŁĩ ¬\nëŁ °\nâ Ł\ná ĺ\nzi will\nye zidis\ntwir lers\ntranspa rently\nthelon ely\nthegold bergs\nthefuture isnow\nterce ira\ntar kov\nso low\nsnow boarders\nsla pp\nshort land\nshe ffer\nsch eu\nsap on\nsaf fy\nred fearn\nra sher\nqu ale\npipe ttes\nper di\norbital atk\nopen work\nnuest news\nnu get\nnon ie\nmobili zes\nmiss jess\nmarinabay sands\nmar loes\nliven ed\nlady land\nknox villeraces\nkara jan\nkam pot\nk tul\nim possibilities\nif sec\nici ous\nho bday\nha sting\ngreat music\ngal er\nfur ter\nfir ston\nem itters\nel ings\ndun ham\ndevo xx\ndawson screek\ndari en\ncrew members\nch cs\nc anne\nboye tte\nbot anists\nbig apple\nb pride\nashford castle\nanticli mactic\nano is\nandro ll\nanaco sti\nam dav\nallyouneedise cuador\nabbots bury\nðŁĺį ðŁĺ©\nðŁĺĬ âĺº\nä½ IJ\nâĤ¬ ,\nworld hepatitisday\nwm ds\nwak ar\nvp dd\nvisit virginia\nu akron\ntu pac\ntor mentor\nthe mercury\ntele wis\nta van\nsu ffic\nsteel y\nsqu onk\nspru ced\nso kol\nskill sforlife\nscou ps\nsch ram\nsal emma\nsad d\nrain coats\nraf fia\npop tropica\npo poff\npix lr\npernam buco\nperempu an\npear lie\npar key\nover hearing\nom pton\noly tic\nnov ell\nmunt jac\nmis amis\nmi zzi\nmay tals\nmar well\nma zu\nlu beron\nlil in\nlarry madowo\nkv k\nkc j\njer on\nja heim\ning ood\ninaugur ationday\nic kie\nic ele\nharvard chan\ngoo sander\ngol ub\ngalvan ic\nfle shing\nfau ji\nfarma ajo\nessex cricket\nend slavery\nedmonton esks\ndip ty\ndayo fre\ndanny john\nclassi er\ncho k\ncavali ere\ncapital ising\ncanti ague\ncan ic\nc aging\nbur fday\nbo ley\nbill burr\nbic kel\nbengal is\nbe bi\nbal uch\nbair ro\nav raham\narte aga\nand ar\namb johnbolton\nali se\nainsle year\nai shat\nðŁķº ðŁı¼\níĨ ł\nп од\nwhÄģ nau\nwah habism\nva sey\ntransit ory\ntothe a\nthe tommy\nsze ged\nsunderland uk\nstraw bridge\nsti q\nstarwars battlefront\nst less\nssel fie\nsp rad\nsi sd\nshi b\nsen blumenthal\nse ibu\ns ji\nrp crd\nrock starenergy\nre activation\nrcr racing\nrang itoto\nprednis one\npoly phe\npolit i\npier luigi\npar scale\norit se\nore tte\nnew museum\nne shwar\nmumb a\nmn df\nmcken zie\nmammam iam\nmal awi\nleg alaid\nlamo the\nl stm\nko tb\nkhul na\nkcr g\njing u\nimpresion ante\nimmuni zations\ni vp\nheli oc\nguitar lessons\ngu le\ngra fik\ngang lion\nfree thought\nfr ds\nfox football\nfly hawks\nfar man\nexclusi vo\ner dman\nel gl\negre mont\ndo ña\ndim prov\ndelivery man\ndeek sha\ndan patrick\ncroquemb ouche\ncontor ted\ncer da\ncanadas nac\ncamren bicondova\nca inta\nbs j\nbook giveaway\nbin ney\nbas ch\nban ville\nban kyw\nattrac tively\narter io\narmy allamerican\nanachron istic\naljaz skorjanec\nal tv\naim ondo\nadduc tor\nâĻ ¤\nà¸Ńภ¥\nzoo keepers\nzi ons\nyuk imura\nyourstory co\nyour dream\nwe ve\nwar c\nw cag\nur dang\nun nies\ntour london\ntil ia\nte dium\nsudo crem\nstick ley\nsnet terton\nsavit ri\nsav eng\nsathy am\nredhot chilipeppers\nreci eves\nquicken loans\nple ural\npic ross\npe zzo\npainte dby\nmonste renergy\nmccau ghey\nmal is\nmajum der\nmaggi enyt\nluxury car\nlove island\nle xx\nkun un\nkh it\nkf bk\nkettle well\nkc streetcar\njen kyns\njames spader\njamba juice\nj law\nirr ation\nine sti\nimp eller\ni ops\nheroes inlife\nher nehill\nharbor view\nguar ino\ngolden berg\nga itan\nfoot joy\nflori dap\nfan signing\nexpre ssi\nel let\nei x\ndi des\nder idder\ncy clec\ncom ely\nbush official\nbung led\nbun nell\nbring thenoise\nblue devil\nbiodiversity day\nbi bbs\nbe free\nbarbour sville\navo ter\narr ative\narch bold\nannamari aisland\nafri yie\nadidas za\nachio te\naaron tveit\nðŁıĨ !\nãĤ³ ãĤ¹ãĥĹ\nา า\nzi v\nyq r\nwit sel\nwhe al\nwf sbnews\nwe there\nvre de\nut ile\nu ap\nthe ech\ntake overs\nsuccess quotes\nst pancra\nspace art\nskiv vies\nsk atec\nsen burg\nselfi est\nscru ms\nsch aap\nsaf fel\nsa win\ns girls\ns dot\nr ino\npol yo\nphil starnews\npanop ly\nny td\nnau tical\nn eli\nmis spent\nmilan designweek\nlow rey\nll g\nlal ita\nkus u\nkabir singh\nhunts ville\nho bon\nheat onedirection\nha aaaa\ngsuite edu\ngowar iker\ngheor ghe\ngend ry\nflavour some\neno te\nemancip ated\negyp te\negg plants\near lobes\ndel co\ndeade ye\nde ee\ncy le\ncree per\nchit toor\ncarbon ear\nbur leigh\nbeach thursday\nback benchers\nauberg ines\nasci ences\nart land\nainsleyear hardt\naggreg ating\nac ter\nabc worldnews\nðŁļ Ĭ\nâĽ¹ ï¸ı\nza ev\nys b\ny ii\nwest malle\ntow le\nte hu\nta quito\nt wines\nsuccess stories\nshay ari\nsamo ans\nromag noli\nrock ridge\nquote oftheweek\npre market\npol litt\npine town\npatriot pride\np ingo\nor azio\no ab\nnew steam\nnaz ir\nnan ta\nmarsupi als\nman ity\nmal lock\nmad vertiser\nlu que\nlau fer\njer os\njac enorman\nis over\ni ir\nhabi ba\ngraf ton\nglee onfox\nghe alth\nger on\ngender less\ngau s\nfan pic\nero driguez\ndied rich\ndew drop\ndemo tiv\nde mint\nd cl\ncorey taylor\nchees ing\nblan es\nbe sty\nbanque trecords\nay oun\naudio drama\nao tea\nai leen\nahlu wali\nðŁĺĤ ðŁĻĪ\nе Ñģ\nx ai\nwy si\nwai fus\nvicti mised\nurban e\nul ama\ntro mp\nthu raj\ntf sa\ntele kinetic\ntaj hotels\nsyno psys\nsy stolic\nswag gie\nsupplic ations\nsu uu\nsk j\nse ph\nsce wc\nsa dist\nrunner s\nq ine\npur dy\npur dey\nprosecu torial\nprophet muhammad\nperseve res\noren tina\noffic ine\nmuham ad\nmorethan just\nmoo ted\nmond prop\nmed ved\nman akin\nly onnais\nlum pia\nlo gh\nlo ane\nlef ty\nle aux\nlan xess\nkry sty\nkap al\nkam mer\njon mitchell\njet setter\nini ana\nin asia\nher as\nhelio trope\nhedwi gon\nhat chett\nhan o\ngri erson\nfood show\nely fe\ne erascal\ndist inguishable\ndegra zia\ndan ecook\ncur le\ncre mer\nconsu ela\nche ika\nch awx\nbu fv\nbriand awkins\nblac chyna\nbi directional\nbi dar\nber rics\nbedo ya\nbe vans\nb we\natur al\nasi m\napp ling\nan ot\nale tta\nabove the\nðŁļĤ ðŁļĤ\nðĿIJĢ ðĿIJ\nåĨĻ羣æĴ®ãģ£ ãģ¦ãĤĭ\nච»\ny quem\ny ig\nwester nrly\nw anner\nup wardly\nts wift\ntranspen nine\ntrack mania\ntom colicchio\nth ale\ntg l\nter day\nsun silk\nstorm track\nsolar storm\nsnow piercer\nsmo sis\nsm su\nsadh vi\nsab ay\nro del\nrespec tability\nrem parts\nrelient k\nre tool\nrain ier\nra so\nr sb\npre jean\npok ora\nov on\nomega watches\noat ley\no gon\nnextgen atp\nnewhope club\nnel e\nmus ar\nmotion graphics\nmo gen\nmin cer\nma int\nlore ttal\nko yo\nkal bi\nk tuu\njoan hart\nitye vent\nitali ane\nintimid ates\nim pac\nili er\nhu k\nhot newhiphop\nhon ker\ngrave yards\ngil well\nge birds\ng sp\nfrit olay\nfin nie\nfer nes\nethi o\nem rys\ned trilogy\ne tribune\nde smar\ndavid lammy\nci man\ncat lett\nc ú\nbrandon lewis\nbill z\nbil by\nbenny benassi\nbe careful\nball ard\nav cavolleyball\nard aw\nar not\nal ur\nafol abi\naff ton\n^ ^)\n: Â¥\n! âļ½ï¸ı\nðŁ¥° ðŁ¥°\níĪ¬ ê²Įë\níĪ¬ê²Įë įĶ\nà´ ¸\nÃŃ lia\nz ila\nyu yu\nyler oux\nworld heritagesite\nwild beerco\nway an\nvoice acting\nvan morrison\nutter ance\ntrumpp ro\ntrin abraxton\ntri bu\ntreyanasta sio\ntre main\nter fel\nstur ge\nstag ecraft\nspy rothe\nspring burn\nso derberg\nso bek\nshir u\nseman al\nsar tori\nrow sell\nringo starr\nproprie tors\npingu in\nph lo\northo sis\nnwin diana\nnod away\nno ons\nnas pers\nnand ed\nn bal\nmc phillips\nmb ly\nmarch against\nlyn k\nlenahe adey\nle pp\nkath akali\nkat an\nk las\njerry nadler\njenni es\njenkin town\nianm harding\nhuddle stone\nharb anda\nhand bells\nhailey bury\ngal y\nemp at\nem tothea\nelge use\ndigital workplace\nder mot\ndav or\ncri der\ncorr als\nchin ook\ncer to\ncas itas\nbo dh\nblan ko\nb fy\nagre e\nãĥ¬ ãĤ¤\nx ur\nwool la\nwhite board\nwheel s\nwel liver\nwa ves\nw roc\nvolt meter\nvishwak arma\nvin cit\nvasi lev\nul tural\nu dders\ntell your\nteeth whitening\nsirius x\nsella field\nseem y\nseef eld\nsch ama\nsc s\nsar avana\nsahar anpur\ns ool\nrusev bul\nru pani\nrobic haud\nra wan\nr fr\npis d\npen stemon\npauley p\npar lement\nover ripe\non ley\nol tre\nnyy roro\nnaive ty\nn eno\nmonom oy\nmicro controllers\nmes dames\nmae jor\nma zz\nma speth\nlove myself\nlasci vious\nla bored\nla ber\nl wc\nkrishnamur thy\nkar lee\niki gai\niiii iii\ni olo\ni hab\nhaters gonnahate\nh itta\ngr itting\ngobi gor\ngesundhe it\nge dge\nevent s\net was\nental health\nel van\ndon eright\ndo gging\ndizz eerascal\ndiefen baker\nde bla\ndais uki\nd had\ncold stone\nchar nock\ncast ellers\ncar a\ncaho kia\nbroad sword\nbe decked\nb williams\nav ena\nasi ri\narba een\nap ad\nal aka\nafl don\naci fic\nðŁĺ® ðŁĺ®\nðŁĶ« ðŁĶ«ðŁĶ«\nðŁıĥ ðŁı¼âĢįâĻĢï¸ı\nми ÑĢ\nиР¼\nzig bee\nyu g\nyaal artista\nwitche so\nwg ci\nweek i\nwab asha\nw wel\nw icking\nvisit belfast\nvis sel\nval arie\ntur bat\ntom are\nthe my\nsu mida\nstor ie\nss oftware\nsra banti\nsquel ch\nspotify uk\nsite core\nsi pe\nrestaurant australia\nrein ke\nra zy\nra dd\nplat o\nphiphi ohara\nphi mu\npacific ocean\nou tique\nop v\nobjec tors\nnav neet\nn dola\nmu ggers\nmetroid vania\nmel cher\nmalla ig\nma kino\nlorettal ynn\nlo cher\nlar ity\nlaj pat\nl fafighting\nj dj\nhor ikoshi\nhel al\ngri mez\ngrat ton\ngoodwoo dr\ngit anjali\nfreer ange\nfra id\nfor gold\nfe uro\nf ending\neventu ality\nentrepre nu\nelo te\near ache\ne dom\nduc los\ndiam eters\ndenomin ated\ndecat ur\nde twiler\ncom ed\ncoler ain\nclarkcounty sch\ncit ad\nci pd\nchristian son\nce h\nboom town\nblu esc\nbhu ti\nbergen field\nber r\nbench top\nbeck ers\nbbc goodfood\nback flips\nayles bury\nav j\naux erre\naur ore\nathen ahealth\nastronom ia\napo yaalartista\nand health\nalli s\nai shah\nab amba\nðŁĶ¹ ðŁĶ¹\nม ม\nwr b\nwbr cnews\nvol ant\nus fl\nudta punjab\ntw cnews\ntun ics\nto ten\nsteph ano\nst kilda\nsn am\nsh appy\nself pub\nsaver io\ns bi\nru sch\nru fo\nre usch\nr pm\npublic service\npric hard\nph ills\npet chey\npart sun\npar tee\nover spend\nor ba\nopen forbusiness\noo ohhh\nohmy gosh\nno pal\nngv melbourne\nne era\nnapolet ana\nnajam sethi\nmy self\nmonk house\nmne monics\nmc william\nmaple syrup\nlondon fashionweek\nlat v\nl all\nkil bourne\nkelsey redmore\nk mox\njuxta pose\njust say\ni speak\nhol tnbc\nhardeep spuri\nhar rell\ngro ho\ngor o\ngold finches\ngol der\ngol conda\ngen cies\nfrommy heart\nfaof ish\nfan ks\nfan day\nfall league\nepitom ize\nen ar\neasy money\ndu buffet\ndream team\ndiscovery id\nde orro\nde berry\ncycli st\nctr l\ncit b\nchoreo graphic\nchak akhan\ncc ds\nca ap\nc ws\nbrou illard\nbok ki\nblu earmy\nau lia\narmy wp\nanti och\nand music\nair ambulance\nad sk\naccess control\n?? #\n/ (\nðŁħ ¿ï¸ı\néķ ·\nçĦ ¡\næ ¾\nãĤ¤ãĥ ī\nzcz uk\nyears strong\nwwt slimbridge\nwatch nz\nvir tanen\nto ggles\ntie res\nthrill ing\nthe wild\nthe posh\nswer ved\nst lawrence\nsp ellers\nsolar pv\nsharnab urgess\nsav va\nsand blast\nsab ado\nrp murphy\nrobert patrickt\nri ad\nree bie\nreal love\nre saca\nr ales\nprogressi verock\npe sco\nparry sound\npanam á\northo gonal\nonec up\nnovi kov\nmur tha\nmou lana\nmilk ha\nmedic ale\nmb alaji\nlo xton\nlo sh\nl ène\nkin te\nki rov\nke bede\nka stles\njud ici\njane philpott\nindi en\nif we\nhu h\nhel me\nhar ks\nge su\nflau tist\nfidge t\ner rani\ne bon\ndirector mbalaji\nderren brown\ndam age\ncsi miami\ncp v\ncoqu ille\ncon ish\nbur b\nbrad meltzer\nbra cht\nbeat riz\nas sport\nany ones\n:::: ::::\nðŁĺĤ âľĮ\næľ ¨\nãģ£ ãģŁ\nz aps\nwel chs\nw fo\nun chain\ntr us\nthe wire\nter al\ntantal um\nspeed sters\nsnow cat\nsn el\nsin ta\nshaz za\nserge j\nser vient\nse epage\nsave on\nsalvationarmy us\ns laney\nro oney\nro ha\nre winding\nre settle\nr uru\nq ajar\nput nam\npre packaged\nom onday\noise au\no ah\nnur nberg\nnichi jou\nnex press\nneuro anatomy\nne peta\nne ddy\nmoon flower\nme it\nmc beal\nmb g\nlough rea\nlorealparis usa\nlit z\nlau rea\nla key\nkarapar aask\nkal imba\ninordin ately\nide en\nhade stown\ngoven der\nfu z\nfro bots\nfau ve\nface down\nexperi ential\nero u\neb v\nden mark\ndai sey\ncreep ily\ncp mumbaipolice\ncom pa\nco bh\nbroad sides\nboun dary\nbo ddington\nbfc dublin\nbeverly uangel\nasin ac\nani max\nall state\nafric anist\nae ons\nacol ytes\n( ãĢĤ\nðŁĻĨ ðŁı¼\nðŁĴľ .\nر ÙĬ\nwaterstone spicc\nw baboxing\nvin ci\nver rett\nvel an\ntumn us\nts q\ntribe sman\nthe wiz\nthe mis\nthe dubaimall\ntatt i\nsun corp\nstra pline\nstam mering\nst ks\nspinning top\nsidd ha\nshilpash inde\nseung woo\nscapego ating\nsar n\nryan lewis\nronde bosch\nriffo tronic\nrad ford\npuke kohe\nprodig y\npositi va\no wari\nno taro\nni ajax\nmycorrhi zal\nmr duncanjames\nmil on\nmegalom aniac\nmag ana\nlipp in\nlady killers\nla fitness\nkur tzman\nka hs\ninciner ated\ni pps\nhump y\nhg vs\ngene ws\nfranklloyd wright\neuro dance\nepider mis\nellef son\ndylan mcdermott\ndi ame\nclam my\nchir ped\nceee gebirds\ncar tel\nburk holder\nbu de\nbreckin ridge\nbre de\nbal dridge\nb tt\nawe urope\nat nam\nan ico\nale lection\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥\nðŁĶ¥ ðŁıĢ\nðŁĴĢ ðŁĮ¹\n· ·\nze ina\nwar and\nvas ser\nvapori zed\nun roll\ntori ko\ntom ax\nto ple\nthejim cornette\nte gen\ntat ro\nsul ting\nsud americana\nsporting cp\nshaw aii\nsham wow\nsand ridge\nrt pig\nroad safety\nramadank areem\nrain goaway\nq hd\npomer anians\npin ki\npers ad\nper ki\nparañ aque\nout doing\no sto\nnor semen\nno ke\nno ga\nnh sor\nnet sky\nne sia\nmy nam\nmon ferrato\nmix te\nmid shipman\nmetagen omics\nmesm er\nmelis sal\nku va\nkno tting\nki jhl\nkay afm\nk law\njonathan jackson\njes sen\ning ames\nihear tradi\nidri ssa\niam lenovo\nhij ri\ngall stones\ngall er\ngaine sway\nga shap\ng á\nforte za\nfh fa\neze kiel\nespn fc\ner b\neat sleep\ndhing ra\ndel po\ncounter intelligence\ncore graphy\ncooper ators\ncons ented\ncep r\ncdn history\ncal zaghe\nc tbt\nbon ham\nbex tor\nbergo glio\nbelly button\nbe heads\nay anda\natletic omadrid\nar tt\nap tors\nanti report\nam ics\nahmad is\na style\n+ âĢ¦\nк и\nwy rm\nwt va\nwit cher\nwi b\nwhit em\nvote austinmahone\nvan ness\nux ury\nun heralded\nthapp ens\ntham ma\nteach in\nsukab umi\nsub let\nstoner rock\nspor ti\nsmet ana\nskills gap\nsister sof\nsimon schuster\nsiden ote\nsar wat\nsal ade\nsag gy\ns alling\nric in\nren er\nrebel le\nram eez\nrac i\nr sd\npowerrangers movie\nplay thing\nplac ers\nper ico\not ford\nnoctilu cent\nne ya\nmist born\nmeng al\nmcg lin\nman holes\nmadon na\nlu bs\nlin ce\nlangu ish\nlakshad weep\nla pel\nku ipers\nkohl schreiber\nknigh thawks\nkeele y\nka os\njourne yofficial\njayas uriya\njanasen aparty\nj gn\nhyat tre\nhumanit arians\nhoo ton\nhamidmir geo\ngree do\ngre gate\nfur thur\nfra ise\nfollow andretti\nfire lands\nfi ving\nfa ka\nexpedi ency\nelizabeth forma\nearth rise\ndrink responsibly\nd Åį\ncurric ulu\nctb to\ncrvenaz vezda\ncar boy\ncampbell ford\nbuster posey\nbu uuut\nbra chial\nbally fer\nazi muth\nas fa\narchi v\nar leigh\namerican topteam\naldu barkads\nalan thomas\nal los\naa am\na ÅŁ\nðŁĺİ âľĮ\nðŁİĹ ðŁİĹ\nðŁĩ¹ðŁĩ ¼\nze inab\nwire duk\nwhati want\nv res\nun lincoln\ntw loha\ntoe jam\ntenn ille\nst moritz\nspyrothe dragon\nslide shows\nsivakor atala\nsig nora\nsi byl\nsh omes\nsegaf redo\nsar ra\nrock cliffe\nquick book\npra japati\nportsmouth uni\npo ti\nparty goers\npap d\nover views\nni asse\nmul house\nmc ca\nmaster y\nmagn ani\nma ior\nlu wak\nle ura\nkamau bell\njustin thomas\niso pod\nhot picatnoon\nhank ering\nhandmade gifts\ngrilled cheese\ngari funa\nfon dren\nfle is\nfl en\nfal ak\nfab ri\nf gb\nf bb\nes covedo\ne disi\ndu lux\ndri skill\ndill ingham\ncu bitt\ncro oners\ncre t\ncon go\ncloud berry\ncl ore\ncau g\ncardiopul monary\ncampaign mag\nbu is\nbp climited\nbook cover\nbarn old\nbami yan\nb ital\nave x\nat aide\nark on\narco baleno\nag co\n!!! ðŁĺį\nек б\ny plac\nwapping ers\nwal on\nvi ena\ntrust god\nthrees game\nsher k\ns musical\nriseas one\nreco lored\nrealmadri d\nram yak\nra sse\nr hu\npoo lesville\npoco yo\npendle bury\np chidambaram\nnujab es\nnu tella\nnh u\nne kom\nmoun i\nmoo kie\nmon fort\nmil ind\nmei osis\nmarti us\nmanas lu\nma ff\nm pr\nlie tti\nlego batman\nle id\nladi esday\nkhut bah\nis sei\nindian wedding\nillustration art\ni onized\nhousekinok uni\nhors fall\nhonor flight\nhitch hike\nhey sham\nhell blade\nhar lin\nhapp n\nfind lay\nfind away\nex on\nele a\nel oped\nec ards\ndv usd\ndru e\ndi ffa\nco ffin\ncherry tree\nbol er\nbi thday\nbad finger\naz t\nau las\natthe movies\natchaf alaya\nalic es\nali bis\nal cac\nak uti\nair co\nagricul ture\nad de\na project\n> .\n* -\n" ðŁĺĤðŁĺĤðŁĺĤ\nãħľ ãħľ\nzoff any\nz off\nyouss ou\nyl ounge\nwra pup\nwra gg\nweid ner\nwc bi\nwav eland\nwar id\nvin ca\nver dade\nur am\nun ce\ntw fanmily\ntu log\ntranspor table\nthe pc\nsyste ma\nsur inder\nstock holders\nsi es\nshe z\nselec tive\nschem er\nsam ora\nron co\nro the\npul wam\nprez ono\nport ables\npoly gamous\nph ac\npenit ent\npar aty\npa ea\nover clocked\nof cs\nnot ability\nneas den\nmoon set\nmonte grappa\nmini disc\nmin ch\nmidd ling\nmed ha\nmeag angood\nme q\nmati angi\nmar jawan\nm wc\nlma g\nlieu tenants\nlesli eville\nkro g\nkol am\nking ia\njo co\njed burgh\njaros lav\nj bb\nhy keham\nhuawe imate\nhat es\ngrand cayman\ngossip stv\nfun in\nfor i\nfer rada\nenter ic\ndesar rollo\ndead or\ndan harmon\nd pt\ncog swell\nclasse ment\ncheckat rade\ncase mate\nbur ts\nbow line\nbook plates\nblat chford\nbig mac\nband aids\nauti stic\nany one\nam rev\naf fi\n? ðŁĺ³\nðŁĵ· ]\nðŁĩ²ðŁĩ ¯\nìĺģ ìŀ¬\nwilling boro\nwhis en\nwe vel\nversi one\nveri sty\nver ismo\ntraff ick\nthrasher mag\ntalke etna\nsuper sport\nsti jl\nstand down\nstan te\nsingle player\nsi lex\nschwer in\nschoon over\nrin sed\nr sn\nper rone\npan fur\npa hat\npa changa\nover dubs\nor ator\nomar ry\noli days\nnu bra\nnig guh\nnie haus\nniajax wwe\nneuro transmitter\nmust achio\nmc gm\nman ess\nmadeinthe am\nmacro biotic\nle creuset\nku y\nku coin\nkon nichiwa\nkiril enko\nkies za\nkel as\nj and\nintern alize\nin step\nin ci\nhol guin\nhin rich\nha german\nguer rillas\ngar ai\nfulbright prgrm\nez el\nemblem three\nel ink\ndolce amore\ndex p\ndepos it\ndek kers\nd elli\nclean sers\ncer ato\ncardinal nation\nbroad ened\nbo ones\nbankrup ted\navi ationday\narach nids\naper ta\nang leton\nananth kumar\namuse sme\nal ster\nahmed nagar\nag akhan\nðŁĻı ðŁĺį\nðŁIJº ðŁIJº\nzodi ak\nwra wesome\nwex tweets\nvo j\nvitali y\nuk ltd\nthe katvond\nth aba\nsports world\nsh omo\nsave ur\nsap ere\nsaint arnold\nrotter dam\nric heisen\nre plo\nradic alised\nra hr\nquin cean\npumpkin spice\npu y\npron ger\nproject cars\nprem ji\npost ma\npipe stone\npe jor\npastor alists\noooooooooooooooo oooooooooooooooo\nmye m\nmurmur ation\nmu zak\nmo ssel\nmersal teaser\nlan go\nlain ie\njob sfor\njee bies\nje th\niri c\nint vw\nin hospitable\nic har\nhome goods\nhi zb\ngu u\ngood friends\ngo ke\nglow ing\ngla vin\ngh p\nga urd\nfro ese\nflu vial\nffic er\nexplain able\never se\nente i\ndu alism\ndr disrespect\ndigital currency\nclinical research\ncastron eves\ncas ella\ncarter r\ncare uk\ncandi dato\nc cim\nbtsx snl\nbobby jindal\nblay don\nbl ount\nbar tha\nbal ag\nbaby cham\nauch ter\nashab hosle\narchitek tur\naphor ism\nan quan\nale ad\naggi ore\nðŁĮĪ ⾨\níĿ ¬\nyuril owenthal\nxen os\nwal halla\nwa ja\nvirgin islands\nving lish\nun cbball\ntre u\ntre gan\ntau bman\nt enda\nswachhbharat gov\nsuper bow\nstir rers\nspe ake\nso it\nsmar ine\nshin er\nshar leen\nsambailey real\nsal ati\nrocky horror\nroc key\nre animated\nproven za\npri zed\npo tong\npit ney\nolivier giroud\noff hand\nne ath\nnatu rec\nnational doughnutday\nnan ning\nn xs\nmercury marine\nlet z\nlaz ard\nlac eration\nkor ova\nkok ila\nknow ing\nkaty did\nkash ish\njar on\nj wu\nis ins\nin actives\nilove hd\niam blackbear\nhud speth\nhero dotus\nherac litus\nhedwigon bway\ngull foss\ngen til\nge at\ng men\nfar ag\ndrive tastefully\ncow girl\ncl c\nchec kups\ncanni balistic\ncan adap\ncampeon as\nby rom\nbra infe\nbon anno\nbear kats\nbarcelona alove\nbar q\nauthor it\nas ky\nanu ger\nant je\nadelaide hills\nad ness\nðŁ§Ł âĢįâĻĤï¸ı\nãĥª ãĥ¼\nاÙĦ ت\nze ba\nzac apa\nwor s\nwater kloof\nwater bed\nwar nes\nw kamaubell\nuso glu\nun right\nun gie\nu ib\nty ro\ntwitch creates\ntin ke\nti ppet\nteenagemutant ninjaturtles\nson ly\nsobie c\nsmart card\nshav a\nshan awa\nscro ggins\nsanc timon\nralph tresvant\nnick son\nmobile security\nmin ders\nme ander\nmal um\nmac nab\nm wo\nm mat\nlamin ar\nla grave\nl wv\nkier sten\njuli ago\nju sko\nis kander\nin legis\nhor sford\nhiz bul\nhellolove goodbye\nguis borough\ngreen biz\ngoddam ned\nfortnite battleroyale\nferne mccann\ne government\ne cot\ndy as\ndrake relays\ndocumentary photography\ndiag ramming\ndav ante\nclub sport\nc gv\nc bi\nbull ingdon\nbu ber\nbram ham\nboy meetsworld\nblanc mange\nbear skin\nbe well\nbe sth\nas riel\nart basel\nark ads\naran juez\nanem ometer\namor im\nallison holker\nall out\nðŁĮ¸ðŁĮ¸ ðŁĮ¸ðŁĮ¸\nв иде\nÅĦ ski\nyear slater\nvand ana\num theatre\nton ner\nthegood fight\nthe hot\ntempor ary\ntar bell\nsun screens\nstu c\nstar ches\nsoa addicts\nsne k\nroyor bison\nreserve dly\nregan smith\nquanti fiable\npro ba\npre disposition\nplane trock\npe ggle\np tur\nom at\noliver heldens\nol mo\no com\nno li\nmusco gee\nmonte carlo\nmike sonko\nmiddle class\nmel nick\nmeadow sweet\nmayward x\nmatt damon\nm ols\nlost girl\nlec co\nlang ara\nlagan jae\nlaganjae stranja\nkol asinac\nka o\niw aki\nion ut\ninstag ay\ninglen ook\nin born\nhem pel\ngun fighter\ngo devils\ngil o\ngan u\ng morning\nfrei ghters\nflat ness\nescan aba\nelli jay\ndre cs\ndex trose\ndefecte drecords\ndave chappelle\ncri stopher\ncr m\ncountrymusic hof\ncheese monger\ncas ano\nc bt\nbro mo\nbotry tis\nbau ma\nbairn sdale\nasadu ddin\narsen io\nano il\nalco hols\nach aem\nðŁĺı .\nðŁĺĤ ...\nðŁįĤ ðŁįģ\næĢ Ŀ\n༠Ħ\nz fs\nyo he\nyankee stadium\nwork safe\nwhole food\nwelsham bulance\nweight los\nwaddesdon manor\nvä ster\nvo isin\nurban agenda\nun inor\ntru dell\nstrang ers\nstoo ping\nsne ering\nsin ach\nsihan ouk\nshig ure\nshek els\nseab our\nscott bakula\nron k\nren nais\nram pton\nradion ational\npound bury\npenna onb\npas alu\norg sky\nnw smobile\nnorth pennaonb\nnon plussed\nn ical\nn anni\nmur nau\nmr rpmurphy\nmontene grin\nlove irishresearch\nlino cuts\nji ro\njang keunsuk\njab ulani\nindiak agame\nigu al\ni boschetto\nhi mba\nhart line\nhair le\ngo swans\ngachi bowli\nfun land\nfac et\nepi thelium\nehr le\ne wers\ndu va\ndam bulla\nda oud\ncox ford\nchurch town\ncast mates\ncareer day\nbel ching\nbeach ampion\nbe amon\nband ara\nb to\nakal pathi\naedil hai\nðŁĵ£ ðŁĵ£ðŁĵ£\nà¸Ńภģà¸\nว ย\nzey ne\nwi fes\nwac cam\nvar go\nun ra\nun organised\nti sane\nthreef old\nspring flowers\nsil vretta\nsie ff\nsc cs\nsample sale\nreg attas\nrb kc\nram z\nradio app\npremiere night\nplac ket\npet to\nmur shi\nmis ato\nmcca ig\nmbi id\nmag safe\nlu es\nlu di\nlil dicky\nlaye tte\nkom m\nknoy dart\nkeep init\nkaf i\njose maria\njohan nes\nio ang\nhu tong\nhover flies\nhol lin\nhide and\nheyits conrad\nhey heyitsconrad\ngrand is\ngang stas\nfranco eur\nfol lis\nfish ponds\neye shield\neye ful\ne tap\ne steve\ndro ste\ndigit alized\nde watering\nde enday\ndar in\ndaniel boulud\ncy donia\nctv london\ncoreytaylor rock\ncat chiest\ncar ano\nc ten\nbuffoon ery\nbu der\nbpl boston\nbootle ggers\nbn sfra\nbi shi\nbasket bol\nat rack\nat liens\nasun glasses\nali ka\nalam ocity\nâĢ º\nö ller\n© ï¸İ\nz lo\nwood ford\nwol ski\nwex ner\nul tim\ntugue garao\ntrib biani\ntri state\ntied ye\nthan es\ntard iness\ntalis mans\ntagov ailoa\nsym ington\nsupportall streamers\nstay cool\nstar te\nsmer conish\nski at\nsex pistols\nselec table\nsam aya\nsafe and\nroc chi\nro mac\npo sobiec\nplac er\npi adina\npe tre\npal ash\no ort\no dium\nny ss\nny a\nnic onico\nnew c\nne isd\nnaz areno\nnany uki\nmye ong\nmu sou\nmu on\nmon ga\nmil n\nmasti ffs\nmal ady\nmac gill\nku ih\nkrist perawat\nki em\nkhal af\nk br\njan ella\nj dw\ninexor able\nif youknow\nhudders fielduni\nhohen zol\nhi en\nharry met\nguest mix\ngoz wift\ngla b\ngd ny\ngbbo final\ngastron omia\neric andre\nenrol lee\ndisen franchisement\ndiesel punk\ndi thering\ncommittothe g\ncisco live\nche ssie\nchat to\nchar oen\ncentral park\nce derberg\ncad aver\nbur th\nbrede sen\nbour dieu\nbern sen\nbarr anco\nbar kat\nbar bora\nbag pipers\nbackto basics\nal mos\nahmed abad\nðŁı Ń\nìŀ¬ë² Ķ\nâĿ¤ ðŁĺŃ\nze olite\nye ver\ny band\ntech nion\ntan abata\nstair wells\nske w\nsi w\nse ssional\nsch wa\nsc ousers\nsaroj ini\nsanta fen\nsandi gan\nsand rak\nrug elach\nrr f\nroy se\nros common\nrital in\nrecom ended\npin sp\npill man\nper ahouse\npastor ius\npaki stann\nou lay\nol ya\nod der\nnorth end\nnit da\nnas rin\nmu lah\nmer men\nmel anom\nm wai\nlester holtnbc\nle kin\nlab be\nl wwy\nl bc\nkyo do\nkn ole\nkad hal\njac kett\nja rena\nisleofwight fest\nirwin mitchell\nindi atimes\nili ja\nia state\nhead scarves\nhe fei\ngrow your\ngor je\ngn h\ngh m\nfrog town\nfresh breakfast\nfloat plane\nfar ran\nener gon\nedger atedr\neating disorder\nde stefano\nct il\ncad en\nbusiness line\nbun ko\nbreak bot\nbol l\nbir thanniversary\nbi japur\nber ny\nbec cy\nand sf\naha hha\nag is\n" .#\nzarbeaz b\nyoun gar\nyoon jin\nyo ji\nwrestlec ade\nwo ty\nwha aa\nwe didit\nwar ofthe\nwah habi\nvic ente\nver as\nuc bt\ntrip wire\ntp mp\nti afoe\nthr one\ntar sus\ntac t\nsty mied\nstreet league\nstor g\nste eve\nspi ef\nson tario\nsac redness\ns bac\nrum miku\nrenfro w\nrc plondon\npeep ed\npeace able\npate kar\norcla pex\nnon native\nnob ita\nnear ness\nnat yam\nn ells\nmlb memes\nmik ami\nmi fa\nmelissa joanhart\nmau die\nma kav\nlynn haven\nkin cade\nkhil afat\nke wau\nkcj hoop\nkav li\njire h\njavel inas\njare k\nitsnotre venge\nitsme abir\nio sh\nig ala\ni vel\nho ds\nhassel back\nhack the\ngoof balls\ngo time\ngh yll\nfr nt\nfen lon\nfaith ful\ne wn\ndow ding\ndol lah\ndo stum\ndis organised\ndi pti\ndeejay ing\ncomprehen ding\nclo sers\ncho ppa\nceta phil\nceltic thunder\nbu lut\nbor relli\nbnsfra ilway\nbel son\nbargain hunt\nari ston\nambu lance\nai ono\nack athon\n, /\nðŁĺĤ ðŁĺ©\nðŁĸ¥ :\nç¾½çĶŁ çµIJ\nç¾½çĶŁçµIJ å¼\nyang gang\ny csd\nwasse ypur\ntur u\nton le\ntile hurst\nthe second\nstu ding\nstra ke\nstip ends\nsom izi\nsok cho\nsick kids\nsche chter\nscalab rine\nsam park\nsach deva\ns shs\nrin sing\nrach man\npsycho analytic\nprolon gs\npla iting\npeven sey\nparam ahan\npalae olithic\np ame\nofficial ecfc\no goni\nnorth bay\nnex po\nnew baby\nmuje eb\nmu go\nmovie fone\nmer sing\nmc ts\nm sum\nlove books\nle day\nlatel ate\nku miko\nkeep cal\njul lian\nice fields\nhog nose\nglaston bury\nfs north\nfrance se\nfps bs\nfau zi\nep cot\ndroid con\ndor ota\ndeb u\nde hydrogen\ndaylight savings\ndan juma\ncru dely\ncon somm\ncolec tivo\ncc ps\ncalvin ist\nc gp\nbur jal\nbricol age\nbran nen\nbor ra\nbo ffin\nbasket bal\nbalo chi\nartem chig\napro x\nap ub\nap tist\nap rc\nani ket\nam bl\nalgonquin park\nad c\n* )\nðŁĺŃ âĿ¤ï¸ı\nâĿĮâĿĮ âĿĮ\nzer of\ny out\nwild fowl\nwe scott\nwe ide\nvivac ity\nunimagin ative\ntravel ingram\ntor point\nti mat\ntheroyal parks\nte da\nswind ler\nstudent en\nstarsand stripes\nspu moni\nspear ritt\nso hot\nslumber land\nsidd han\nshock waves\nscreen rant\nru da\nros eng\nroof e\npren tis\nporth cur\npastr nak\npartner sin\nparaly tic\nok tay\nmountsin ainyc\nmohm and\nmg madvertiser\nmaal ouf\nlife forms\nlegiti mize\nkit aro\nkeepingpeople safe\njust announced\njugg led\njai ram\nja ket\nis ky\nio annina\nhit makers\nhard liners\nh ise\ngalla her\nfrontend friday\nfrank linton\nfra il\nfay ez\nfak ery\neri vera\nequi v\nell ick\ndwight yoakam\ndrum moyne\ndown falls\ndel vaux\ndavid cassidy\ncori olis\ncopper plate\nco ggins\ncatch ings\nbryson tiller\nbrig ada\nbra f\nblot chy\nbennel ong\nbenedi kt\nbear kat\nbandain am\nb sac\nangela hartnett\nalla re\nall eni\nakashi c\nab ello\nåĨĻ羣æĴ®ãģ£ãģ¦ãĤĭ 人ãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ\nภ¶\nاÙĦ Ø·\nzim v\nzan go\nz opa\nz ellers\nyoung bae\nyi ps\nxiaomi india\nwater wheel\nw bl\nvo icec\nvincen eil\nv ur\nus lim\nti gra\nthe answer\nth h\ntal do\ntail pipe\nt yee\nt jc\nsz il\nsz ab\nsuz aku\nstanis lav\nsk zn\nsk ur\nsco tians\nsc it\nsas software\nsaint lucia\nsa ade\nrf q\nrepet to\nrealestat enews\nrat zinger\nrain fow\nrah mani\nr hq\nquic kies\npro pe\npin nell\npalad in\nnu eve\nnic ott\nnau de\nna stier\nmö n\nmichael keaton\nmic eli\nmccor mick\nmann ingham\nlor di\nlimited run\nlabor de\nkhary payton\ninternet day\nho stos\nhi wx\ngrand lodge\nginar aimondo\nga stein\ng po\nfinal say\nfant ine\nexistenti alist\neric martsolf\nelie zer\nelectric guitar\nei de\neffic acious\ndouble lift\ndhar y\nderick pauls\ncream sicle\ncor field\ncom ino\ncargol ux\ncan ig\nca prock\nca asports\nc pc\nbob collymore\nbeaz ley\nathene um\nash wag\naro ya\nace day\na oficial\n$$ $.\n! ðŁĴŀ\nðŁĶ ī\nðŁ¥ ª\nyu ichi\nwriting day\nwevel gem\nvil joen\nv ona\nuq am\nunis dr\ntip tronic\nste v\nspin all\nsihanouk ville\nsheffield star\nsha hir\nsandigan bayan\nsains bury\nro amer\nre manufacturing\nra des\npyro clastic\npublic space\npric kett\nphoto gr\npenta ho\npamban sang\now sley\no ton\nnific ent\nnever yield\nmel ds\nmc chrystal\nmarath oners\nma ay\nlandon donovan\nkor at\nkipp ah\nkal ish\njoele mbiid\njo see\njetti son\nj ri\nindi ap\nhurri edly\nhatter sley\nham are\ngully boy\ngov ballnyc\ngol gotha\ngla ucous\nger rie\ng app\nfri gate\nelve den\ne ous\ndown playing\ndor ados\ncry ption\ncor rell\ncher ub\nch ome\nbr onews\nbio g\nbeach head\nbal dry\nashley purdy\nang ella\namy ra\nalvar omor\nagronom ists\nacu edu\nac or\nðŁĺŃðŁĺŃ âĿ¤ï¸ı\nãĤ «\nà¹Ģภ¡\nz azz\nyo shim\nyellow ed\nwork it\nwh iner\nweare texans\nwantt omarry\nw marybeard\nv ong\nuniver sum\nun do\ntwi ste\ntic kle\ntee pees\ntanz anians\nsupportyour local\nssouth africa\nsol enn\nsoil work\nsm p\nskybetleague two\nroit feld\nrh y\nre heating\nr uri\nplaque mines\npil ton\npag od\noutand about\nori x\nnic hts\nmill stream\nmaxplanck press\nmarylou mcdonald\nmar aca\nmac books\nlul led\nlo der\nliv ening\nli gious\nletter heads\nlegar rette\nlang tang\nla by\nko co\nkam in\njme bbk\njacob in\nigu chi\nhe ffer\nhar aam\nhan si\ngoddam nit\ngang way\nfriendly breaks\nfrankie edgar\nfol ge\nfire trucks\nfi resi\nfene stration\nf ones\nei gh\ndu kin\ndon alds\ndiscipl ine\ndisc or\ndin goes\ndescend ant\ndere kand\nden ki\nctv calgary\ncre ager\ncon drey\nchatt yman\nchadwick boseman\nca storm\nby akuya\nbru tha\nbran ded\nbj arke\nash gabat\nanh inga\nan sp\nalli en\nad at\nðŁĩ ©\nì§Ģ ìĽIJ\nyal sa\nxx viii\nworld soil\nwetnwild beauty\nvol cker\nvijay ak\nvide over\nurb act\nun traceable\nud der\nu dra\ntox ico\nthér èse\nthanior uvan\ntd cs\nswis best\nsuppor tin\nsuperstar mahesh\nstream flow\nstrat aconf\nstep child\nsp iteri\nsimply shop\nshu hada\nschwarz wald\nsal ur\nsa heed\nre penting\nr under\nr ry\nqi bla\nport ly\npooja sharma\npis ano\npel is\npel ham\npay phones\npaint sville\np mac\noul ter\nneo cons\nn oooo\nmull is\nmose ley\nmoo rer\nmik ro\nme ggs\nmayorof la\nmain er\nma hou\nlul lah\nloch ness\nlo vis\nlime scale\nlike us\nl pp\nked zie\njo vian\njimdunlo pusa\ninn smouth\ni stra\ni ami\nhigh cliffe\nhealth week\nh cs\ngol fer\nge tag\ng enda\nfamili arise\nfaces wap\nene wsroom\ndiscover ing\ndim wit\ndelic ous\ndan z\nd hur\ncuc cinelli\ncor stor\nchen al\nche ch\nchart buster\nbe spectacled\nbar mer\nbalder dash\nback strap\nb hon\nas sts\nam pt\nallo c\nall waltrip\nalbumo ftheday\n:(( (((\n: ),\n. ðŁĴĶ\nðŁĺį ðŁĴĵ\nðŁij¶ ðŁı½\nðŁIJ· ðŁIJ·\nâĸĪâĸĪ âĸĪâĸĪ\nÙħ ا\nÌµÌ ¡\n¡ #\nzzzz zzzz\nvirtu spro\nun awares\nturtle tuesday\nthisise dinburgh\nthenew shour\nte um\nstark ly\nspre esy\nspreesy co\nsor l\nshay an\nseren ay\nscow ling\nsche herazade\nsaf fa\nros seau\nriz k\nrin us\nreebok classics\nred letter\nre negotiation\npulkit samrat\npro geria\nprevention week\npit sea\npine top\nphoto copying\nou dh\noppos ite\nobjec tified\no ire\nnext time\nneuro marketing\nnbac ares\nnandish sandhu\nmeaning ful\nman ara\nlabor al\nl mpd\nko vu\nko sho\nko kk\nkidney wk\njarryd hayne\nivan o\nip k\nin stil\nhe ti\ngucci fer\ngon dry\ngo back\ngirl streamers\nfl annigan\nextra ño\nextermin ating\neee et\ndri a\nchapter tweets\ncarl fogarty\ncaraba ocup\ncabinetre shuffle\nc ssc\nc spa\nbuck aroos\nbrachi osaurus\nborder town\nbol c\nbed n\nbecu ase\nbbc tees\nbbc gw\naviva stadium\nasa ints\nas ara\nart dielle\nantibully ingweek\nair wave\nag ab\nafric aus\n( ;\nðŁļ ĥ\nðŁĺįðŁĺį .\nðŁİ ³\nðŁ¤ ķ\nzay ed\nyar gentina\ny mir\nwhit low\nvar on\nus sen\ntruss elltrust\ntrans dev\ntran socean\ntonsil lectomy\nthink tank\nthe vulcansalute\ntele ports\ntear sfor\ntamil cinema\nspur ned\nspan kin\nsouthern miss\nsamar itan\nsam mie\nsa huar\nru ppert\nrsp bin\nrspbin theeast\nri mu\nrecord able\nre ch\nq ande\npre gun\npine wood\nphilli ppi\npatt yar\npag pag\nop ry\non wu\nom itting\nodemwing ie\nnarcissi stic\nn komo\nmul liner\nmaynooth uni\nm ür\nleon bridges\nkwe sta\njo kanovic\njessic ak\njav it\ninstaf reebie\nin cun\nhousel ive\ngy les\ngo shi\nfriends first\nfox fire\nfal vey\nfal com\netz le\nen cana\nela ina\nechocardio graphy\ndr n\ndo gon\ndemol ay\ndar at\ndam nn\nd anya\ncosmo polis\ncore opsis\nco stin\nchichar ron\nchay kin\ncamden market\ncal es\ncable vision\nc mi\nblan chet\nbig query\nbech ler\nbar os\narti s\nafl w\nafam ilia\nabbo ts\nðŁ¥ ŀ\nåĩº æ¼\nâļ ķï¸ı\nyu ria\nyow za\nyac ine\ny ber\nwunder man\nwood pile\nwatt les\nvo vin\nvex illo\nto simplyshop\nthe wilson\ntetsu o\ntb c\ntab or\nstar tl\nsports desk\nsp icks\nsol ingen\nsit ton\nse yes\nscul tural\nsam aa\nsal tim\ns bl\nreti en\nram aswamy\npre ah\nplumb ed\npin ole\npier is\nou cher\no idal\nnight shirt\nmums net\nmean sall\nme uk\nme op\nmat tt\nmart elli\nmam mon\nllor ona\nlight ship\nlao tian\nlandsc aper\nkun lun\nko jak\nkca argentina\nkan oo\nkamp us\nju shin\njay jay\nislam ization\nhorror nights\nhol is\nhill yard\nham man\nha pag\nh wm\ngar ima\ngang stance\ner ges\nendur ance\neast mid\ndutch town\ndu f\ndiab o\ndepos itors\ndel erium\ncu ssing\ncor deiro\ncham ac\ncardiff council\ncam ii\nc ter\nc ico\nbor nin\nbol ting\nbol ds\nber o\nber ling\nbelle garde\nannnn nd\nanas am\nadal at\nad lard\nðŁij® âĢįâĻĤï¸ı\nðŁĨ Ĺ\në¡ľ ìļ°\nzer heide\ny aser\nwho dares\nwar cry\nuss c\nurbang arden\ntil brook\nthe talk\nthe danny\ntar ant\nt max\nstere rs\nspar knotes\nskate board\nshiv aya\nshi e\nsab al\nrain hill\nrac ism\npul lup\npoul try\npoly count\npo lit\nping ree\nparl ours\npara ÃŃ\npang ppopro\now ol\now gr\nnick ers\nnfl fantasy\nmy elin\nmr jafri\nmo lesworth\nml scupp\nmissou rian\nmary knoll\nmanju la\nma hala\nlut fi\nlam ov\nky yon\nkon oe\nkil donan\nkers lake\nira wan\ninesti mable\nin accuracy\nib ti\nhus sen\nhk racing\ngri se\ngre villea\ngo so\nglen wood\ngh eroes\ngar my\nflower pots\nen aire\nei ke\ndupont pioneer\ndesi erto\ndemocr ac\ndebr aruh\ndead weight\ncodepend ency\ncenter nyc\nby our\nbritish farming\nbra si\nbergdor fs\nbel on\nbail able\nay anna\nauro ville\natt ard\nard han\narchan akalpathi\nar rc\nar dent\nam oroso\nìĽ Ķ\nëŁ¬ë¸ Ķ리\nëĵľë¦¼ ìºIJ\nâľĮ #\nÏ ħ\nval miki\ntrav ag\nti pit\ntetten hall\ntcho tch\nta wau\nt fc\nswitch over\nsub servient\nsteep les\nsko whe\nsilver dome\nsign um\nsiesta key\nshor se\nshek hawat\nsa cher\nrob breport\nre produces\npre achy\npl s\nphoto shops\npen shurst\npattyar quette\npakv wi\nno deal\nnis an\nnet gov\nnationallibrary week\nmy desert\nmu rid\nmil v\nmelis sad\nmcly te\nmbalu la\nmat ahari\nmand ana\nman asi\nlondon theatre\nlo san\nlo ll\nler ner\nlaluprasad rjd\nl cr\nl bb\niron bound\ninve sco\nhye sun\nhorse heads\nhope toun\nhe ise\nhab bo\ngo browns\nghost writing\ngenealo gist\nge aro\nfron te\nfer ing\nfeather ing\ne acc\ndecision day\nde vice\nd cr\ncommiser ate\nchin ned\nche me\ncephalo pods\ncal amit\nbra bazon\nble k\nbla ire\nbin os\nbc ci\nbalde agles\nathle tically\nat uk\nancient rome\nadam baldwin\nache let\nac che\nâĿĹ âĿĹâĿĹ\nÑ Ķ\nye ou\nyah i\nwy at\nwor kexperience\nweekend fun\nvin cy\nup online\nunder performed\ntry p\ntrombone shorty\nthermo couple\ntarge tt\nsouth ville\nsna x\nsmo ving\nsl acked\nshehu sani\nsh appen\nseg agenesis\nredd itor\nre configuration\nra ther\npractic alities\npor tales\nperson ify\npapar azzo\npal at\nour nameis\nong ma\no len\no chil\nmot ti\nmichael avenatti\nmf doom\nmedi ag\nmall rats\nlog ous\nllantri sant\nlic e\nle strade\njohn bishop\nhills boro\ngy gax\ngram ercy\nge tex\ng nat\nfor yourself\nfel i\nfaz l\nepp ley\ndog sin\ndl h\nde wal\ndam isi\ncu eing\nchint u\nchi avari\nchau mont\ncategor ia\ncar ny\ncalcasi eu\nbur gen\nbell in\nbe aky\nbas ler\nazu car\naw es\nat chie\nassetto corsa\nask ham\nan tero\namar tin\nam paro\nak aroa\nacom ets\nðŁĺı #\nðŁķ µ\né» Ĵ\nçī ©\nwo ah\nwhit enoise\nvictro la\nun blemished\ntu de\ntie polo\nthehip dotcom\nthan gam\nth ax\ntele porting\nsu mona\nstone hill\nspar ro\nsime to\nshi ur\nshi kamaru\nsh emp\nselec cion\nscar avan\nsam plings\nsade ghi\ns ket\nru so\nri ise\nrecap tcha\nreal skipbayless\nraj path\npol ara\npap acy\npad dled\nofficial bvb\noceano grapher\nnew ser\nnage sh\nmun ky\nmise z\nming a\nmi shal\nmi gros\nmal vasia\nlionsden kxip\nle be\nl drs\nkra vis\nker is\nkab ini\njol ina\njetpack joyride\njay me\nistom in\nis sam\nir kut\nimprovis ations\ni would\nhigh line\nhart ke\nh ran\ngu ell\ngoogle plus\ngodd am\ngo ering\ngen ce\ngal op\nfi sto\nfarqu har\nexpon ents\nelectro shock\neast in\ndu plin\ndav inci\ndance y\ncu i\ncoom era\nchit rib\nchas eric\ncat te\ncan tanker\nburn ley\nbi valve\nbi key\nbett ye\nback draft\nay ou\naf al\nach ery\nach el\nacap ital\nðŁijĢ )\nðŁįºðŁįº ðŁįº\nys ss\nwinter bourne\nwhit eville\nwhir ter\nun reservedly\ntubu les\nthy depark\nthe terminal\nthe matically\nten bury\ntel cel\nsource fed\nsop o\nso ji\nsis land\nseung min\nsan son\nsa shi\nroger splace\nrockof ages\nred deer\nra ult\nr wr\npu cca\npre destined\npolyphe mus\npastor ing\nopti plex\nokay player\no zzi\no ssian\nnon ukes\nnih ilistic\nnewcastler aces\nmont verde\nmin ella\nmil as\nmicro light\nmi zan\nmat raffic\nman ie\nlux o\nlucifer onfox\nlu ll\nlipo protein\nlew ington\nler adio\nku pe\nkore y\nkno bby\nkick off\nk rank\nk aci\njunkyard blonde\nje bb\nitte faq\ninside out\nhun gr\nhop man\nhay dock\ngt masters\ngreen power\ngli b\nge mein\ng son\nfreo dockers\nengland hour\nen vies\nem x\nedin travel\necan al\nec an\ne ik\ndes demona\nde arer\ndaysof type\ncorbi jn\ncor mac\nconni ving\nchand ini\nbon su\nbi bis\nbab ai\nauti ful\nat weet\nat rue\nash leym\nart chat\naps virginia\nam lin\nalmo sthe\nagn ès\naf rin\nðŁ¤ŀ ðŁ¤ŀ\nçİĭåĺī å°Ķ\nâĿ¤ ðŁĴĻ\nâĸ½ âī¦)\nwoo oh\nwin er\nvijay ad\nus ffootball\nup wind\ntri gon\ntor q\ntoni oli\ntom fletcher\ntodd haberkorn\nthrow ing\nta vo\nsyste matics\nsk int\nsi tharaman\nsi pp\nser toma\nsc ouser\nsat anists\nsassi est\nsari ka\nsale hi\nrobbin sville\nrajesh m\nr du\npo teau\npit b\npic anha\npall u\npa wl\nofficial nihr\nnr and\nni pa\nneg ative\nne ase\nmar n\nmafi oso\nma zy\nlow light\nlooooo ove\nld s\nlambof god\nl ous\nl ke\nkasar ani\njon gordon\njc chasez\nindoctrin ate\nhuman o\nhi bsofficial\nhand sup\nhan ratty\nge toff\ngayle king\nfy ah\nforce ps\nflume music\nespan ola\ndu che\ndisbur sement\ndiph theria\ndetermini stic\ndel or\ndairy land\nd phil\ncle eves\ncil lessen\ncali bur\nc eller\nbu ñ\nbt q\nbro mine\nbon dsman\nben ares\nas sc\nand aran\nall arin\naic te\nac cen\nabby wambach\nab ish\n. ðŁĴª\n( ?).\n% !!\nðŁij¯ ðŁij¯\nðŁĮ ĵ\nðŁ¤Ĺ #\nìĨĮëħĢìĭľëĮĢ 미ìĬ¤íĦ°ë¯¸ìĬ¤íĦ°\né ³\náħ ł\ny adv\nwor c\nwam pler\nwalks britain\nured ome\ntu bb\nto your\nto fu\nti ran\nthu is\nthe joint\nthe flash\nte bowing\ntaw se\nstrick lin\nstartl ingly\nsouth old\nsom bre\nsk ala\nshawnat spg\nshapeof water\nshan kara\nse her\nri poll\nri ble\nre took\nraw don\nprohib itive\npres sed\nply ometric\npic abia\npeter j\nou thern\none ws\none ofthe\nnw ambulance\nnormal ise\nnoise less\nnew balance\nmin ni\nmh b\nmeur on\nmel lowed\nmarat ona\nmad hatter\nma str\nlore ena\nline ages\nlife ok\nlaat ste\njun jun\njhah neu\nintelligen ces\ninst ers\nini ketan\nhu ddles\nhool ahan\nha wi\ngran ville\ngor der\ngh era\ngang won\ng oms\nfree taheri\nf ctc\nexoske letons\nescam illa\ned al\ndu roc\ndu ller\ndari of\ncou cher\ncliff hangers\ncircul ates\ncan tos\ncamp liberty\nc aguas\nbru ma\nbri stowe\nbodh gaya\nban ski\naze ali\nau chan\nanim alistic\nalof thotels\nalen ia\nal ı\nakh ter\n\' ?!\nı ï¸ı\nâĹ ¼\nâĢ ¿\nye vent\nwxpn fm\nvisit causeway\nvictor yday\nver tex\nve ve\nve dic\nun knowable\nu scen\ntrot tier\nthe fla\nthe bottlemen\nthan u\ntag e\nt center\nstr ø\nso xford\nskin nies\nsk inn\nshe kau\nsarbj it\nsam eh\nsaf ford\nru thie\nreti rements\nrepubli ka\nrad stock\nra el\nqui bble\nporsche tennis\npo ong\npo esy\nphoto play\nof thenight\nnot doneyet\nning aloo\nne ak\nnavy pier\nmv l\nmueller time\nmove in\nmo hd\nmnu kteam\nmlscupp layoffs\nmid line\nmehreen pirzada\nmariecla ire\nlasti mosa\nkrat is\nki ev\nkeaven y\nir responsibly\nir me\ninocul ation\nindu bit\nhu tter\nhr x\nherb als\nhd fs\nha bib\ngu as\ngraci ousness\nfro myour\nfour ways\nfly te\ney er\never thing\nev agreen\nero ach\nemce ed\nembal ming\nelis icki\ndun ton\ndow se\ndg pup\nded wards\ncornell feeders\nci elos\ncal andra\nca shout\nbrü cken\nbot z\nblue screen\nbet sie\nbe ene\nb wo\nasper g\nang or\n*¨ *âĢ¢\nðŁĺŃ @\nðŁĶ ³\nðŁĴŀ @\nðŁĴĭ ðŁĺĺ\nðŁıĪ ðŁĴ¯\nì§Ģ ìĦ±\nxiv preprint\nworld views\nwood fired\nwest virgini\nve atch\nvar as\nu bah\ntru eno\ntitan pride\nthyl acine\nteam europe\nteak wood\ntaver ners\ntam worth\nsy outh\nstan zas\nsolan um\nshrin er\nsepp uku\nsenbob casey\nsa the\nrummiku b\nrude boy\nripper street\nprin ts\npremi x\npp g\nph la\npen sami\npe ma\npara professional\nout weighed\nor ce\nonomato poeia\nnu tini\nnail head\nn kp\nmr br\nmin dof\nmeyero witz\nmenshealth mag\nmccul ly\nmat unga\nmaru chan\nmaharash tra\nliqu igan\nli ssie\nkyyon voot\nko gar\nkin ver\nk xl\njon foreman\njay an\nir landa\ninsomniac events\nin saf\nin fraction\nic ps\nhu el\nhol tzman\nhispani ola\nhaz uki\ngo ggin\nget kahoot\ng itter\nfurn iss\nfuer tes\nfro mmer\nfar on\ner lich\nel well\ned ney\ndece ives\ncompeti zione\ncimorelli band\nce ats\ncaval ry\nca chorro\nbu ya\nbinib ining\nber thing\nbeg u\nash gate\namicha els\namateuri sh\nalanthomas doyle\nĤ ĺ\næĺ ¥\nw das\nvander burgh\nus acycling\ntu pou\ntrou ts\ntor ben\ntop kapi\ntexase dm\nt lg\nsumb awa\nsports zone\nspill man\nskun ks\nshored itch\nshi prock\nschle mmer\nsb k\nri ggle\nreali ve\nraven snation\nraj pal\nrais ingthe\npic eno\npetco park\nolloc lip\noh lone\no zi\no possums\nnews break\nnc sen\nnational forest\nmo doc\nmar the\nlucy beeco\nlu ker\nlove scenario\nlove cats\nlonglive the\nlongh i\nlildicky tweets\nligh thou\nlicen sees\nlevit ated\nlesbian ism\nko ky\nkla sa\nkit bag\nkill la\njonny bernthal\njobs act\njer ic\njam erson\nja har\nilove gay\nhypochondri ac\nhuff po\nhub ley\nho los\nhamilton ian\ngy re\ngt ld\ngou ste\ngo ren\ngi gir\nfri pside\nflet ching\nexp end\nentom ophagy\nei agov\neh feuro\neas ington\ne via\nduke dumont\ndat alake\nd orion\ncro ll\nconval escent\nconting encies\ncoloni alist\ncoal fields\ncoa homa\nco tham\nchol ars\ncake boss\nber row\nand win\nahon y\naene id\n! ðŁıĪ\nðŁijĩ .\nðŁijĢ :\næľ ī\nyu shu\nvogue india\ntwin z\nthought leadership\nthaanaaser ndhakoottam\nsu bash\nstri ated\nstr ats\nskate parks\nsix er\nsign alled\nshel drick\nsabin elisicki\nr risd\npanam aleaks\npan fish\npan cham\nossu ary\nor sa\nnr hs\nnorm core\nnght mre\nmt lg\nmid section\nmetro sexual\nmemori alizing\nmc get\nmarvin humes\nmandi ra\nmack illop\nm ally\nler ato\nle ik\nlau raj\nla violette\nko izumi\nko est\nknight sof\njo ch\nje sup\nj pp\nizquier do\nis obar\nim bru\ni pra\nhungar ians\nhiro ko\nhair transplant\ngro bb\ngo global\nging ras\ngi ak\ngar st\ngam mage\ngali l\ng sl\nfree thinking\net ches\nense mbl\neat right\ne ski\ndji bril\ncon fab\ncolle gen\nchaseric emusic\nchang ingthe\ncha hta\ncav azos\ncarri g\ncan bball\nburt ka\nbmw group\nbio sensor\nbest team\nbernie in\nbar ona\nas px\napp art\nap ital\nanhydr ous\nangeli ves\nalph ard\nalped huez\naero india\nad jaye\n. ðŁĴŀ\n---- --->\nðŁļ ī\nyu liya\nyoung stown\nx bla\nwinter ized\nwall ac\nwak eling\nvital voices\nv sf\nv endor\nun foundation\nty coons\ntw ende\ntrans disciplinary\ntrade speople\nthe jeff\nthe james\nten ko\ntempe stuous\ntau ren\nswan seab\nsun bae\nsu ez\nsu crose\nsty al\nstopp ages\nspace suits\nshiz uku\nsh unga\nsex party\nrepar ation\nreen actors\nree king\nraym und\npre vue\nparten kirchen\nos se\nnih director\nnaz arian\nmyo sitis\nmy vi\nmountain tops\nmar cial\nmar cas\nmar al\nmanz oni\nlucybeeco conut\nlie tuva\nkur tv\nkitt itas\nkarlo vy\nipsos mori\ninsu lin\nin ale\nhow we\nhav anna\nhah nemann\nhab si\nguilden stern\ngran dia\ngodis love\ngo viks\nfru ity\nfree kashmir\nfox nashville\nfou gasse\nflat test\nfield photofriday\nfiaf arn\nfiafarn borough\ney talking\nentren amiento\ndont lie\ndis believers\ndin is\ndick o\ndes met\ndaysto gofor\nday star\nd ilo\ncountryfile mag\nco system\nco ati\ncle anc\nclassi fies\nbyo c\nbun ting\nbos stones\nbon fox\nber it\nbbc newcastle\nbag ile\nay ani\navan tasia\nary land\nap ap\nandalu cÃŃa\nalyn n\nall art\nalder wood\nafterel len\nðŁĺ ¾\nðŁķº ðŁı»\nåł ±\nãĢ Ĭ\nwra ss\nwho re\nwe stray\nwatch u\nvillan elle\nve sak\ntun er\ntor an\nti ffin\nthehistory guy\nthe boston\nthe ale\nthat sme\ntg d\ntele dyne\ntal eg\ntai fa\nsurf sup\nsteeler shockey\nspart ner\nsmall bone\nslic e\nsan tucci\nro ces\nreid sville\nregistr ars\nreen acted\nrad dest\nquin one\npyroman iac\nps b\npractic a\nphra sed\npetty fer\npete tong\npeac elove\nnikit ind\nnc p\nmy horse\nmira belle\nmi era\nmc gar\nmal lik\nmad woman\nlong way\nl sn\nknock knock\nkick er\njet liner\njag d\njab a\ninstagram mers\nhu tt\nhi ji\nh ts\ngame music\nfang led\nex onthebeach\neller be\ne ah\ndv sn\ndro gon\nded mon\ndan scavino\nda sty\ncross field\ncricci eth\ncommerci alism\ncol ls\nch c\ncas ar\ncan im\ncan ball\ncambridge utdfc\nc whm\nbutler u\nboer se\nblow dry\nbic hette\nay nrand\natis faction\nanaesthe tist\naf jrotc\nactor sequity\nðŁķº ðŁķº\nðŁĴĸ ðŁĴĻ\nâĹ ī\nzi ii\nyou might\nvie we\nver ie\nu rad\ntw afterhours\ntro wer\ntri aling\ntr ono\ntool shed\nthermost atic\ntessell ation\nta ky\nstar fall\nsle tter\nsilver leaf\nshra der\nshannon airport\nse dap\nsber bank\nsav at\nsar aramirez\nror aima\nreci be\nray ne\npro pre\npin i\noh canada\nnorth land\nng cobo\nmodu lus\nmis ka\nmemor ising\nmbl science\nma pping\nlongu euil\nlit eco\nlee derville\nleav ening\nland seer\nki dero\njin do\njil in\nhue hue\nhon en\nhar har\ngreen and\ng tw\nfoodin dustry\nfas lane\nexpress andstar\neli eve\nek blad\near marks\ndwind led\ndoherty shannen\ndism aland\ndi iv\ndel fi\ndat aw\nconserv atively\ncoffe red\ncityof miami\ncircum navigate\nchapp el\ncecil ie\ncanad achat\ncalz ado\nbra venation\nbor chers\nbell ino\nbe parto\nbab s\nb bler\nayo s\nareyou withus\nanto griezmann\namar cord\nallarin aresh\nabor tionist\n!! ðŁĺĺ\nà® ©\nzbig niew\nzay d\nyugo sla\nwul ff\nwotc staff\nwn f\nwhit ish\nw gb\nve ale\nvas yl\nudd hav\ntrin sic\ntravelwith kids\ntou k\nth yn\ntele work\ntan sey\ntal ab\nsuper wiki\nstun i\nsto ch\nstat eli\nso gn\nsj t\nsimm ers\nsi bles\nscreenshot ted\nscott grimes\nschoolo frock\nscar r\nsc ahill\nsali l\nrpcrd pro\nroc ke\nro gow\nrel ton\nrefu elled\nre cut\npro ops\nphreno logy\npersi mmons\npe que\npa shin\nor za\nop ier\nnorth town\nnan ticoke\nn didi\nmix to\nmal ene\nma gh\nlo vies\nlo fted\nlil loo\nlac lede\nkhun e\nkate moss\nk msl\njava one\njam elia\nj lee\nj allen\nirkut sk\niner tial\nhouse maid\nholo fernes\ngood time\nf pb\nem mit\nelon university\ndun vegan\ndannyjohn jules\ncyber security\ncuuu ute\nconfir ma\ncn ni\ncl ery\nbul ked\nbs thydepark\nbio reactor\nbbsr buzz\nbar bar\nb jo\naz azel\naz az\nannou cement\nactiv ity\nacar ter\nĦë ²\n天 å®ĺ\nzodi acs\nyummy food\ny omo\nwild storm\nwi j\nwh ys\nvu cic\nvali k\nu shio\nu art\nty me\ntsu kuba\nte yan\ntab ri\nstation ery\nslo sh\nru ti\nroy all\nrecruit ing\nrav eng\nragin cajun\nrachel wood\nqu tb\npush kar\nplay mat\npilgri m\npepp eridge\npat as\nparam edicine\nom ran\nol uw\nok uk\nocean optimism\no bia\nny sc\nnum é\nnicode mus\nnaz are\nnap thine\nmo tz\nman they\nma kovsky\nlox ahatchee\nletsgo g\nlebe dev\nl rr\njan ey\ninno trans\nin p\ni acon\nhongkong ers\nhol royd\nhepat o\nhavi sham\nh nn\nh lr\ngur lz\nfish sci\nfare ed\nez us\neti xx\ndur yea\ndulil lah\ndiy ala\ncome home\nco ar\nclear inghouse\nchi bs\nbringerof rain\nbrac er\nbob sinclar\nbo hl\nbig kid\nbel ch\nbar qui\nautomobi le\natta m\nat au\napp ley\nabu da\nðŁĺĭ âĿ¤ï¸ı\nðŁıĨ :\nâŀ¡ âŀ¡\nà¹ĢภĪ\nz ill\nyoutube ãĤĪãĤĬ\nyoshi hiro\nwaynes world\nvisit somerset\nvign elli\nvamos rafa\nusu sa\ntat is\ntaj ine\nsundaytimes za\nsub t\nsne p\nsi evers\nshraddha srinath\nshort sighted\nser bian\nscreen savers\nscou gars\nsacram ental\nrode mics\nretrospec tives\nren tz\nre focused\nran sack\nram anathan\npu pe\nproven cal\npoth older\nplast isol\npan can\nome x\nom us\nogun damisi\nnot for\nng oma\nnel ley\nne yo\nnassi b\nmy ke\nmul lagh\nmodisar kaar\nmmm bop\nmign onette\nmdcpss outh\nmase ko\nman ni\nman gia\nmal y\nloun g\nlign in\nlar bert\nla ska\nk me\nk acy\njyo tir\njur nal\njoan smalls\nhi rose\ngrand ma\ngood speed\nghe en\nget syou\nesc ala\nent oura\ndu art\ndi yan\ndevolver digital\nder f\ncuu ute\nchen ab\ncap illaries\nbren d\nbi mal\nback wash\nato cha\nask acurator\nami sha\namericani zed\naly si\nalma den\nabbi amo\naar hu\nwoolla hra\nwam ish\nvon da\nvo gler\nun club\nty j\nsu ja\nste ar\nsput nik\nsol are\nsi rot\nshal om\nsch marzo\nrev dr\nrep joe\nremor seful\nrei ff\npum phrey\nplain sman\nou tros\nos ric\nniagar a\nnag ata\nmo watt\nmeadow vale\nmaison objet\nmad han\nm lambo\nm elly\nlor ri\nlom mel\nla ding\nkol k\nkh ooper\nkar nes\nje uner\njane goodall\nit oi\nireland cricket\nin gho\nhackett stown\nha si\nfalset tos\nencom passed\nem tee\ndoh kyungsoo\ndig nan\ndej loaf\nde filing\ndatab ank\ncu kor\nchro mat\nchocol atem\ncannon balls\nc crc\nbromeli ads\nbro xton\nbrian topping\nbogdan ovich\nbob st\nbl ini\nbin da\nbet elgeuse\nbarqui simeto\nback list\narnol ds\napple live\nangu ages\namerican football\nalo c\nago stin\naf ree\naf d\nadar ling\nðŁĶ ©\nyemen cantwait\nwis sen\nwedd ell\nwar child\nver aging\nvapori ze\nv pk\nthe highway\nten ov\nte ter\nsubsi ding\nsensation alism\nsa fir\nrv m\nrockthe vote\nray lewis\npulitzer prize\npromis cu\nprinci pally\npiñ as\nphotography islife\npap in\nou ps\nonce in\nogie alcasid\nny dn\nnvi di\nni fl\nneon ates\nnab ba\nn mh\nmytop college\nmv sales\nmin ako\nmean wood\nmck is\nmb w\nmayo red\nmarka very\nlub bock\nle itz\nlav ina\nkope cky\nker in\nherbal medicine\nhelen s\nhann ukah\ngor ged\nglu z\ngin ther\nger sh\nger giev\ngener alization\ngean inec\nforthe soul\nfin ds\ndream girl\ndistracted driving\ndisrup t\ndigital disruption\ndewor ming\nder m\ndemer ara\nde vey\ndad jokes\ndachshun ds\ncommiser ations\nchi kar\nce z\ncay lee\ncarbon aro\ncam bro\ncal verton\nbrezh nev\nboost torbay\nboo b\nblack power\nbespoke bids\nbear naise\nbbce mt\nballant ines\nawa is\nannul led\nalber tac\nak ul\nacompan ies\nðŁijł ðŁijł\nðŁ¤¦ ðŁı¾âĢįâĻĢï¸ı\nåħ ´\nâļ½ :\nØŃ Ø³\nв од\nya ari\nworld downsyndromeday\nwor mer\nwol fy\nwestandby parth\nwait ressing\nvideover anomtv\nurru tia\nunited health\ntele porter\nsre invent\nsnow ball\nsky fire\nskowhe gan\nsc upper\nsa amy\nrush ville\nrim shot\nri fai\nrecording artist\nreading is\nre framed\nrakuten ichiba\nracing club\nr nz\npresidential debate\nplant in\npe dra\np ck\nornel as\nopho res\nnikitind heer\nnakshat ra\nna fe\nmuss orgsky\nmur taugh\nmultic loud\nmulti year\nmp sf\nmon amour\nmat ri\nmaidstone united\nluc u\nko x\nkkun dra\nkerman shah\nkeo wee\njan ee\ninck arnataka\ni day\nhu se\nher sham\nhal bert\ngru y\ngre asers\nglynd wr\ngali on\nfront pages\nfear gal\nfac ie\nengel berg\ndu wamish\ndowntown halifax\ndove dale\ndibuj ando\ndi kes\nconsomm é\ncon der\ncode black\nclu broom\nclass icist\ncircle app\nchrono logically\nchef stable\ncere bus\ncenter fold\nbur gi\nbir do\nbin z\nballo ting\naron off\napple ton\nalgi eri\nalev els\nae gina\n! ðŁĴĻ\nðŁļ ¦\nðŁĺ®ðŁĺ® ðŁĺ®\nwine fair\nwed lock\nwant sto\nvol ler\nvir tu\nvil ify\nvalue of\nv dr\nunder takes\nund pasiapac\nun collected\ntop flight\ntibi dabo\nthe point\nsym monds\nsub sonic\nspecialk brook\nsoftg els\nshi val\nseid man\nsand lin\nsan francisco\nsam per\nruk mini\nru ma\nrm liga\nri as\nremember anceday\nrachel riley\nqu bit\npan elli\nosteo sarcoma\nor ay\nok mulgee\nmy god\nmine shaft\nmickie james\nmess ines\nlleg ando\nkre y\nking ery\nke tty\nkawak ami\njuli ac\njab harrymet\ninterchange ably\ninter continental\nic lass\nhyper hidro\nhr zn\nhijab s\nhead butted\nhal sman\nhal it\ngu uu\ngor m\ngon iners\ngar ris\ngame dev\nfuji yama\nfish sketch\nfin bar\nes rb\nendaken nytd\ndu h\ndu el\ndeflec ts\ncorvet teracing\nclat ter\ncheese day\nca edchat\nburton albion\nbroad meadows\nbrigg ate\nbornfree onekiss\nbor rell\nblock screening\nbe xt\nbe ddington\nbe ason\nbati stuta\nbarnold swick\nav d\nashi q\nandreali bman\naman at\nalu mp\nalek sey\nalcac er\nðŁİī ðŁĴĻ\në¦ ¬ë\nãĥ¼ãĥ ī\nâľ¿ )\nâĵ ¥\nâ¬ĩâ¬ĩ â¬ĩ\nಠ¶\nworcs warriors\nwoodbin eracing\nwherei root\nwarne münde\nvy apam\nvis co\nve dan\nve asey\nvacation ers\nus iness\ntr illing\ntony todd\ntant amount\nsydney storm\nste bbins\nss rc\nsport sca\nspic ey\nsouth shields\nsnow bank\nsiriusxm nascar\nsham n\nse et\nscot lands\nsac chi\nroad show\nran king\nrajiv pratap\nrajivpratap rudy\npoe sie\npicto grams\npahal gam\npac y\nou bre\non oda\no ey\nnil son\nmill in\nmi w\nmeridi anc\nmedec ine\nlu tion\nlife ok\nlasc aux\nlal ah\nking let\nk sed\njoh anne\njamesdro driguez\nivan ova\nio ane\nin y\nill inim\nibi zar\nhigh town\nhead corn\nharman preet\nham amatsu\ngol ondon\ngi andu\ngavr ilova\ngame keeper\nfuel your\nfil ename\nfficial site\netsy store\nepidemi ologist\nd bu\ncrim minds\nco loc\nbrooklyn bridge\nbritish ers\nbour nes\nbo sv\nbio availability\nbet ina\nbell anai\nband ini\nbal at\nalma z\n... ]\nðŁĴ«ðŁĴ« ðŁĴ«\nâľ ¯\n¡ !\nyudk bh\nyoung sville\nwh h\nwear thebear\ntp gallery\nthe drummer\nterrac ycle\nteam natural\nstri k\nsofe vil\nsoc dems\nsn pout\nsil as\nshe aly\nsh hhhhh\nser ape\nsandiego zoo\nribo flavin\nremo delling\nrefin er\nraft beer\nproud sponsor\npreci ate\npolitic ised\npi um\nphone tically\nphantom ofthe\npdx eats\npaint box\noon light\nome one\nnz stuff\nnu o\nnot all\nno st\nnew bedford\nmy nach\nmr sk\nmom os\nmiguel ito\nmiddle ton\nmic r\nmetal smith\nmar gi\nmac c\nlovenorth devon\nlo lu\nlin tz\nleav ell\nla thes\nku gler\nke ssel\nk sd\njugger nauts\njn moyo\nhu ie\nho sier\nhaz rat\nha vil\ngaz elles\nfet zer\nfall s\neu cerin\nesp ad\near plug\ndress age\ndispos session\ndiscover hongkong\ndior amas\ndiesel gate\ndi ener\ndi abolic\nden y\ncrypto zoic\ncor tez\ncoa stuk\nclive barker\nc ays\nbreathe carolina\nbreakthe taboo\nble ating\nbirthday wishes\nbar don\navox el\napho tos\nak ka\nait cofficial\nafter birth\n@ \'\nðŁĺŃ âĻ¥ï¸ı\nðŁĵ¢ ðŁĵ¢ðŁĵ¢\nðŁĴķ ðŁijij\nëĵľë¦¼ìºIJ ì³IJ\në§ ¨\nвиде о\nwe it\nvest ager\nun managed\nun coordinated\ntol ga\ntin at\ntat er\nswash buckler\nsuper mini\nstra wn\nsten y\nst ura\nspo ked\nskiat ook\nsi phoning\nshe diac\nseraph in\nsang oma\nsan h\nsag rado\nro td\nreview journal\nreplac e\nra ia\nquesti oner\nnor sk\nnene h\nnar k\nmole fe\nmod sun\nmini on\nmichel ine\nmen deley\nmartin son\nm grs\nluxuri ant\nlt da\nlig ure\nle we\nlatin x\nkish twar\nkind afunny\nkas kus\nk assem\njewel staite\njag meet\nib r\ni ut\nhoo pes\nhol on\nhere tical\nhenri bendel\nhel lions\nhe sham\nhatch backs\nhammer fest\nham taro\nhalf on\nh bday\ngo abuzz\nglaci ernps\ngen evi\ngau m\nfn ma\nfi rel\neric ripert\ne ec\ndoo kudu\ndfat irl\ncou pla\ncork citycouncil\ncolombi ana\ncamp sie\ncal co\nbride well\nbowery ballroom\nbj arke\nbhic how\nbb g\nbare foo\nbaby wearing\nat unga\nasimb aj\narab y\nali velshi\nal pines\nago today\nabou tit\nab ff\nðŁķ ī\nðŁİ¼ ðŁİ¼\nâľĭ âľĭ\nâĢį âĢį\nঠŃ\nü ber\nà ½\ny shop\nwwe chamber\nwomen inthe\nwar lick\nvik ash\nvid hi\nveik kau\nval vano\nval son\ntune core\nsunny dale\nster ry\nsk nonline\nsil sden\nsh ene\nsestri ere\nsensiti ze\nse amount\nsanto ku\nrep ented\nraj shri\nra ir\nprof jnmoyo\npo grom\nplanetofthe apes\npine au\nper centers\npe dder\nour city\nofficial y\no ib\nnis se\nneversay die\nne tro\nnational museum\nmy data\nmuse tte\nmon ach\nmiumi u\nmaur ic\nma ska\nle mur\nkrakat au\nkid swear\nkhu zestan\njam min\ninde sit\niah sfb\nheroes reborn\nhal awa\nguin nessi\ngrow ingu\ngregor i\ngost kowski\ngo dess\ngi ac\ngh orns\ngeme ente\ngaj endra\nfer no\nfeliz navidad\nfarm hand\nf illion\nexcu sing\nexcer pted\neno teca\nemo to\ndu puy\ndong feng\ndevin book\ndatab ricks\ndar yn\nd formmva\ncri so\ncrew member\ncon genial\ncomple xions\ncine phile\ncer ati\ncap tu\nbrittany snow\nbree den\nbook snaps\nati mein\nari hant\nange bote\nanatom ia\namylo idosis\nair shows\nacam era\n... ðŁĺģ\nðŁıĭï¸ı âĢįâĻĢï¸ı\nðŁĩ®ðŁĩ ¶\nyam auchi\nwo su\nwitcheso feast\nwhor se\nwan del\ntree beard\ntom ek\nthre f\nte end\nsympathis er\nsunday fishsketch\nselfiefor nash\nsei denberg\nsa or\nro throck\nrin do\nre taken\npressclub dc\nphotogra p\npersecu ting\npepp adew\no ves\nnmb co\nnick lin\nni ese\nmthe thwa\nmigli ore\nmi gi\nmbalula fikile\nmatt miller\nmal ory\nkuber nete\nkoin onia\nkil syth\nkcaf av\nkat ong\nkarun chandhok\njo stling\nirreconcil able\ninsi den\nin h\nhiman tab\ngur gling\ngh ole\ngashap on\nfun chess\nfraser valley\nfozzy rock\nfer rata\nf wt\nelec tra\ndir khooper\ndin akaran\ndenver nuggets\ndal ecar\nct gla\ncorbyn besson\ncap gemini\nby any\nbull pup\nbuiltby bama\nbix ler\nbi xi\nbe ma\nbasketball er\nballo oned\nba bey\narm wrestling\nangi oplasty\nal astor\nðŁĶĬ :\nðŁĴĹ ðŁİī\nì¯ Ķ\nì ´\næŀ Ĺ\næ ½\nâĺħâĺħ âĺħ\nyi annis\nvideo taping\nva stu\nus ury\nuhur u\ntor tuous\nthe conjuring\nte bet\ntar red\nt swana\nt jo\nsy lar\nswim min\nswach hata\nsto ats\nstatist acharts\nstag gers\nsher rard\nsever ide\nsekh met\nsch ad\nsaved bythe\nsalvador dali\nreve led\nre convene\nrah saan\npu lao\npla ga\nou lou\nonenation oneteam\nnick swardson\nnecess itate\nmuth oot\nmo at\nmis calculated\nmicro bus\nmetal blade\nmel uck\nmegan boone\nmagic avoxel\nm co\nlo hia\nlindsay arnold\nli ub\nklu gh\njant zen\njacob o\nintar sia\nherald hs\nhe ikki\nhe eling\nhalab ja\nhahn dorf\nglend ale\nfrederic lambert\nfrance fr\newn updates\nessex wildlife\nen m\nelabor ating\neco village\nduck y\nde beers\nda rell\ncypri um\ncycli ste\ncha sen\ncapric orn\ncan ute\nboston heraldhs\nbook making\nbing es\nbike week\nbest coast\nbenven uti\nbayern munich\nbath sheba\nban yo\nayanna pressley\nay b\nautun no\nau ria\nand chill\nalyand fila\nah hhhhhhhh\na history\nwild turkey\nwhit el\nwhi pps\nweare acmilan\nwat rous\nvo z\nver nors\nve res\nvas arely\nup un\nun classified\ntul lius\ntide way\nti soy\nsummer underthestars\nshil le\nshare holding\nsd xc\nscor ch\nrady r\nra ki\nq pcr\nq ip\npla sa\nperanak an\npel as\nosh un\nor oro\nolemis sbsb\nnewsad l\nnewfound glory\nne vo\nnaku matt\nn bar\nmusic by\nmon dragon\nmo tus\nmith ali\nmil onga\nmich ed\nmer ril\nmarvell ously\nmar da\nm razek\nlin stead\nkn auf\nkla k\nkhu l\nkc na\njuly talk\njiang xi\njenny han\njennifer aniston\nj aka\ninter lake\nimam hussain\nik f\nhell en\nh wy\ngoodwoodr rc\ngo thers\ngen ny\ngad dy\ng ph\nflu ttered\nfle abane\nfire land\nfact set\nexhal ing\nen ders\ndor ada\ndo gon\ncow abunga\ncountry house\ncar ledwards\nbreastcancer now\nborgh i\nbl att\nbe sler\nbe holding\nbarba dian\nbab ita\nb hind\navro homg\nasan sol\naro sende\nar ps\nanastasi ab\nal aga\naf ur\n= _\nðŁijij @\níĻĶ ìĸij\nâĿ¤ âľĮ\n⼠´\nyou loved\nyol ande\nwork ington\nwoody allen\nwingless bird\nwi wa\nwest wind\nutcoach jones\nup tv\nun completed\ntomor ro\ntiny tales\nthomas gibson\nthe baby\nte te\nte jon\nstu lts\nstra ker\nstar pass\nsole us\nso wski\nsnake head\nshi amak\nsfor change\nsee whati\nschoen feld\ns jam\nroman ovs\nrodri go\nqui zon\nque vedo\npre cap\npr ze\nphil tufnell\npew sey\npar atus\nom gtr\nneid hart\nne ad\nmis shim\nmend ham\nmarav ich\nlv phantoms\nluxury watches\nlow ens\nlogan lerman\nli pson\nleg no\nkir schner\nkang al\nhurl burt\nhornb ills\nhar ting\nhar bou\nhage dorn\ngop tax\ngondol as\ngeorge washington\nge an\nep sa\ndu gger\ndo woon\ndar ning\ndamon albarn\ncri swell\ncli ppard\nchi ens\nchar ya\ncas selman\nca etano\nbé ry\nbo ch\nbig wigs\nbie ding\nbesse tte\nberser ia\nbel ton\nbel lar\nbattlefor azeroth\nats community\nat rice\nasroma en\nartic ular\nart lab\nak mu\nabstr actions\n. ðŁĮ¹\n(( (((\nðŁij¹ ðŁij¹\nê² ¸\nãģ µ\nâľĶ ï¸İ\n⬠Ľï¸ı\nà¹ĢภĤ\ny cl\nx lii\nworld congress\nv rain\null rich\nugg la\nton the\ntoi res\ntay ong\nsumb astur\nstein way\nsi rene\nsd nd\nsand ar\nsam mer\nsal mons\nsaint laurent\nroca wear\nresist trump\nresi stive\nrca records\npend ent\nofficial s\nnz l\nnit ourist\nneuro pe\nnat alee\nmy sis\nmy l\nmulti plexes\nmore mi\nmir ó\nmil ose\nmigr atory\nmen fashion\nmedi afreedom\nmad ilyn\nloft is\nlan ghe\nkunun urra\nkum u\njour nee\njanine gutierrez\nj cl\niro h\nig travel\nhotstar tweets\nhotell v\nhor t\nhor no\nhehe hehehe\nhard bound\nharas ser\nhahahahahahahaha hahaha\ngraci as\ngla sse\ngar ys\ngan grel\ngal eng\nfre sen\nexploren b\neuthan ize\ndy m\ndragon lance\ndiscla imers\ndialo gue\ndees nider\nde sco\ncon fla\ncio online\nchel ps\nc mr\nbu di\nboo ke\nbo so\naure lie\nanni ele\nang ill\nal bomp\naber ger\n__ _.\n\' -\'\nðŁĴĺ ðŁĴĺðŁĴĺðŁĴĺ\nاÙĦ ص\nyu taka\nyever after\nwill erby\nwccb charlotte\nver tices\nutic acomets\ntoast ers\nthiop ian\ntelepath ically\nsurplu sph\nsun nin\nsun dew\nsrabanti smile\nspectro scopic\nspe icher\nsorcere rs\nsmc gee\nskin ceuticals\nsk out\nscy cles\nsch ans\nru tile\nrang anathan\nquadric eps\nq com\npur pp\npuk kel\npraise worthy\npipp ins\nphar ms\npd h\np lied\nor ser\nobscen ities\nnu bar\nnew sch\nn vs\nmultip lies\nmu lders\nmo ye\nmo gh\nmil nerton\nmikeo hearn\nmichi gander\nmer rit\nmens grooming\nmedia works\nmeand my\nma hr\nluc kie\nloy d\nlong acre\nligh tin\nkhali f\nkey to\nkauka una\nkam is\njohn m\njack ers\nis se\nirri gator\ni backthebirds\nhunter pence\nhin cha\nhempstead town\nfrontline pbs\nfrom target\nferen gi\nethereum classic\nelder care\neast grinstead\ne com\ndu pre\ndi i\ndavy hulme\ndan ity\nd kc\nchaud huri\ncharlie chaplin\nchar trand\ncap ing\ncad air\nbran ton\nbordel aise\nbat ata\nbasti ons\nbas al\naz uka\naz mat\naz aar\nas ug\nar wa\nany an\nanglo saxon\nagh at\naber dour\nاÙĦس ÙĪد\nاÙĦ Ø¥\nyyc flood\nyis roel\nyeou ido\nwomen writers\nwing stour\nwi they\nwi ddle\nwar dak\nvirg ilio\nv bi\nturn ham\ntrety akov\nto taro\nto gashi\nti y\nthrough glass\nther isk\ntheli ons\nthehockey india\ntay ang\ntail gate\nswar ovski\nsus bureau\nsupport thearts\nsu ol\nstaustell brew\nstar dew\nspart ners\nseque stered\nseal team\nsay yaf\nsam ovar\nsalford devils\nren tacar\nre ding\nrc pi\npur year\nprophyl actic\nprati bha\npi anom\nphoto electric\npan icky\npan et\npak is\npa ree\noutaou ais\non up\nob noxi\no sso\nnational voter\nmorphett ville\nmontreal ers\nminu tes\nmichel rou\nmi thi\nlu ps\nlot tie\nloch nagar\nlf cladies\nletra set\nlemu ria\nle ber\nlabrad ors\nkrish nad\nkint sugi\nking shead\nking bird\njulie benz\njualan ku\ninfo sec\nin trust\nhead shot\nhagu pit\ngest uring\ngav en\ngar de\nfan boy\nfail safe\neit our\ndri o\ndou dou\ncowboy bebop\nconfeder ates\nche sty\nchar ros\nbr inda\nbe etham\nbagh lan\nazi oni\nator onto\nart fight\nai shi\nag ot\nðŁĺį ðŁİ¶\nðŁĴħ ðŁı»\nðŁIJ Ģ\nãĢĤ )\nç al\nzoon otic\nzol ler\nyus of\nwre ath\nword cloud\nwest woo\nvo gu\nunic ycling\nun shaven\nu toledo\ntsu mt\ntrac ie\ntop spin\ntn luk\ntar ghee\ntabde eli\nsurab hi\nsu hel\nst assi\nss ants\nspoo kiest\nsh c\nsemper sum\nseig neur\nschloss berg\nsch alk\nsal ton\nsal terton\nry x\nrulesof survival\nrhy mer\nre iders\nrazorback fb\nragha va\nq bert\npro logis\npre ethi\npown ers\npied mont\npat mccr\npais ano\nnot l\nnith yam\nnausic aa\nnar anja\nnaj ma\nmoon shadow\nmin di\nm musi\nm bio\nlong ings\nli geti\nlear ner\nkett ner\nkc se\nkal m\nkad u\nintru sions\nil th\nhu ka\nhachette aus\nguy verhofstadt\ngre ts\ngeminic at\ngalli more\nfru ta\nfri joles\nfree holders\nfli ghty\nfeld stein\nfeather ston\nfarne islands\nfar cry\ner ite\nel ss\neg is\neee ep\ndu ping\ndr anger\ndown tow\ndo xx\ndestru cted\nden ge\ndel h\ndd ale\ncor vi\ncog ito\nchi des\nchauvin ism\ncha ste\nc ssa\nburgun dian\nbri ga\nbill ym\nben ali\nbeau ti\nbear doil\nattitude mag\nat ca\nan den\nameric agreat\nalo e\nab ele\naay yy\na und\na bean\n- >\nðŁļ´ âĢįâĻĤï¸ı\nðŁijij #\níĻĶìĸij ìĹ°\níĸ Ī\nãĥ¼ãĥ ī\nyun que\nya as\ny are\nx country\nworld cu\nwaccam aw\nvisit europe\nvad m\ntrau main\ntot c\ntimess qu\ntier garten\nteaser tuesday\nt fx\nstro em\nspacec amp\nspace jam\nsot tawa\nsor pren\nson nier\nsoff its\nsne tt\nslu is\nsi bel\nsheir gill\nschwar zman\nsaltim bocca\nric ken\nreg bo\nre structures\nr np\npukkel pop\npan ta\noutdoor sy\noro chi\noni des\nnutri a\nnau ti\nmrbr tg\nmonsterhunter world\nmo ten\nmal ahat\nma shre\nluen ell\nlegen de\nkr circuit\nkhilaf ah\nkan aka\njo sa\nind berg\nillustration hq\niam episd\nhr ke\nhis ashi\nhill yes\nhigh fashion\nhello world\nhe g\nhappybirthday ntr\nha worth\ngre if\ngoon squad\ngold tone\ngold star\ngive me\ngand onor\nfor tum\nea aci\ne iti\ndunnott ar\ndu mmer\ndrum step\ndepre cation\ndan carter\ncron os\ncrank set\ncr èche\ncorregi dor\ncon lee\ncon cannon\nclar kk\ncla sps\nchar lot\ncasi raghi\nbobby brown\nbl andy\nbas shunter\nback round\nat fc\nary a\narti stre\napple tini\nagye man\na are\n\\(´ âĸ½`)/\nðŁİ¶ @\nâĺħâĺħâĺħâĺħ âĺħ\nਠĹ\nwhitley bay\nwall coverings\nvec chi\nvang sness\nvali ants\nv ayu\ntro pang\nthe asian\ntham iz\ntexastri bune\ntangi ers\nsul le\nss rtg\nsne inton\nsho dan\nshep stone\nross ouw\nrob brydon\nram boll\npro co\nplat ine\npis cis\npier ref\npc mc\noo z\non call\nol er\nnak z\nmegaz ine\nmayan smc\nma dusa\nli mca\nlang ston\nla chance\nkon z\nkitz bü\nking solver\njo ell\njab o\nj ji\niren se\ninas al\niam an\nhat chim\nhack learning\ngé rard\ngreenbay packers\ngr ms\ngin ty\nge sti\nfl ori\nfid lar\nfaur é\nfair man\nero ads\nedd ard\ndex trin\ndem force\nd weeb\ncl ann\ncharlotten burg\ncell block\ncav usoglu\nbuchen wald\nbru tali\nbra zy\nblo xham\nban ja\nbak ri\nbaj al\nauntie annes\nali us\nahar on\nadop tables\nactu ated\nab ct\nðŁ¥ ´\næ ¹\nzi jn\nzeis slenses\ny oooo\ny net\ny gk\nwy nette\nweather watchnz\nwa chee\nvoil Ãł\nun dit\nty bg\nton ig\nthisis me\nthing sexpo\nthegop jesus\nthegentle author\nter mini\nta eng\nsylve stre\nstmartin spress\nsnow drift\nshell harbour\nsab ia\nriet veld\nretar dants\nphoto frommyheart\norator ical\nnoki amobile\nnew art\nnescaf é\nnc cs\nn ades\nmon gre\nmini x\nm chi\nlong sight\nle marche\nkre tsch\nkin olor\nkan za\njar rah\njag nation\njack theripper\nj florez\niz on\ninstagram med\nimo gene\nhurst ville\nhow led\nhazbin hotel\nham monds\ngu ston\ngolf life\nfoursquare find\nfig lio\nf gv\nem mag\ndrink up\ndownton pbs\ndemel za\ncrisp ness\ncountry radio\nconsor tia\ncolin dale\ncoal mine\ncine mat\ncentre town\ncapric orns\nbrook ins\nbridge stone\nbre k\nbea vernation\nbav aro\nbak ary\nan die\nðŁij Ľ\nðŁij ·\nê Ń\nå¹ ³\nzu sak\nwi des\nweb ley\ntwel ves\nton it\nthereal elvira\ntha ws\ntab uk\nsun stroke\nstand tall\nssi p\nss music\nsp angles\nso bre\nsj r\nsimone tti\nsim ha\nshoe horn\nshak thi\nscientology theaftermath\nsab lefish\nsa inik\nrsc anderlecht\nro ser\nrick warren\nre er\nra zo\npreclu de\npr iti\npor chestra\npen i\npap al\npal lete\nori an\nor acing\nob h\nna he\nmol l\nmissi e\nmis se\nminic lip\nmeadow view\nmcga hn\nmazz u\nmarket news\nmar re\nlogger heads\nlin deman\nlear nin\nland less\nkur si\nklo wn\nker see\nk ichi\nk hia\njul lien\njon gh\njohn mccain\njaw ani\ninfor med\nine se\nhob nail\nhi y\nhar jit\nh sb\ngent lest\ngali lean\ng ili\nfli xton\nfleisch mann\nfivb volleyball\nf ants\ney rie\neurovision songcontest\ner gs\nel bit\neidul fitr\nedir ne\ndu man\ndu das\ndis quiet\ndige sti\ndest itution\nchim ilco\ncep has\nburjal arab\nbur stein\nbor da\nblo hm\nblack hole\nbirthday gift\nbell ona\nbee zus\nbe aker\nbam usic\nar nation\nangler fish\name era\nall indi\nale kh\nair india\nacar penter\nac ffi\nâ¬Ĩï¸ı â¬Ĩï¸ı\nwother spoon\nwo kv\nwit nes\nvi aggi\nvan k\nva ghani\nthero ses\ntam zin\nt yo\nsupportsmall streams\nsteven j\nspeci alo\nshaun watson\nscap ula\ns notes\nrap music\nprecious metals\npic asa\np alla\nop ara\nno sta\nneo gaf\nne un\nnca i\nnam ibi\nmin z\nme thi\nme kka\nmarse illa\nmari ette\nmagni fies\nm lo\nle akes\nlatel ate\nlat avi\nkumar akom\nkruger sdorp\nkla ss\nkinolor ber\nkaz ant\nkat usha\nity live\ninfo arqana\nin justice\ni bt\nhyun woo\nhoom um\ngo alie\ngly cae\ngastroenter ologist\nfa ite\nepi graph\nelast ics\ne jo\ndo ernbecher\ndjer ba\ndis engage\nd ve\ncu ria\ncourtneym elba\ncolin mochrie\nco stain\ncic lo\ncher mside\nchad lindberg\ncandel abras\nca dem\nbrooks bank\nbrandon j\nbo sques\nblood horse\nbior xivpreprint\nbi mmer\nbabe station\nb side\nase ball\nall dev\naf fric\nacon v\nðŁķ¹ ï¸ı\nðŁĩªðŁĩ ©\nâĪ ©\nunitedwe zag\nuch t\ntrac ibraxton\ntl railuk\nta oris\nsyn cre\nsto kers\nspind le\nskop elos\nsibusi so\nshu bhan\nse bad\nsam po\nreceiver ship\nre ats\npuertor icop\nprae torian\npe tanque\npaul gallen\np sap\nox ic\nout gunned\non io\nodi sha\nnur mi\nnun avik\nnicol ae\nnag ini\nmou ski\nmis appropriation\nmin oc\nmi mmo\nmi mick\nlar o\nlanz ini\nkirin yaga\nkhair ul\nkat lyn\nkar ne\njob hunt\njack lyn\nimperi alists\nimmobili zed\nie styn\ni xl\nhot mess\nhey don\nhat illo\nhardrock hotellv\ngot season\ngon etoo\ngo id\ngare y\ngames youloved\nga stric\nfrance schi\nfelden krais\nexpress ways\nel yar\ndisbur sed\ndareal amberrose\nd agan\nclairec mc\ncenten arians\ncam girl\nbig sky\nber u\nbar rack\nap rakash\nand tvofficial\namé lie\naman ah\nam adi\naller ia\nah en\nacffi orentina\naccep tability\nac ct\nðŁİīðŁİī ðŁİī\nðŁĮĢ ðŁĮĢ\nðŁ¤ ²\nðŁ¤ °\nwor ley\nwood mere\nway up\nwau conda\nwatch mojo\nvo h\nvictori ana\nv aga\nuy gur\nup skill\nunitedwe win\nunderestim ates\nu ppi\nthree houses\nthinku hi\nte ms\nswitch to\nswee ty\nsut tie\nstrathe arn\nspace bar\nsouth tyrol\nshi rou\nsave dallas\nruck man\nru zzz\nro stam\nrj mitte\nrex dale\nratch ford\npriv ates\npol sky\nplata forma\npermanent makeup\npa eds\nor ph\nor donez\none m\nnordic walking\nnederland se\nncaas occer\nnational isation\nnan ite\nnam ita\nmovie time\nmo kka\nmary portas\nmar len\nma icon\nma gui\nlo chal\nlo bs\nlieu t\nlearn lap\nkur ma\nking snake\nkee sha\nkay an\nkak ak\nkab am\njourne ys\njonmitchell itv\nilove travel\nil g\nhunting don\nhouse dems\nhiga shi\nhe ade\nh dn\ngolondon knights\ngir ton\nfreddy krueger\nfre md\nfe dez\ner land\nenqui red\nearth wind\near dley\ndove tails\ndiet coke\ndews bury\ndelici osa\nde go\ncycl in\ncy g\ncur ri\ncho sun\ncamoufla ging\nblack sheep\nbch l\nbay bridge\nb chat\nav ag\nameli a\nam ami\nagne epath\nðŁį» ðŁİī\nðŁ¤Ĺ .\nz dar\nyl enko\nyak u\nw canada\ntriumph ing\ntre p\nthi rai\nten aya\nsty lec\nstren ding\nsq rt\nsm day\nsi ran\nshi zz\nsher itage\nsh after\nsf opera\nsay something\nsanctimon ious\nqay yum\nq ft\nproc tor\nprenup tial\npocom oke\nphili stine\nparen tage\npap ago\npa ke\nover winter\not suka\nnoah syndergaard\nne bel\nmukun d\nmif sud\nmanic ure\nmac bride\nliverpud lian\nken o\njust inf\njeke vaaste\njan jua\nj anny\nib ma\ni ello\nhermosa beach\nhau gh\nhan ak\ngum midge\nge table\ngarden party\nfur rows\nfree way\nfashion addict\nfarqu aad\nelectro acoustic\nekdu jekevaaste\nds ville\ndor ling\ndo sages\ndi ye\ndan gel\ndag ibee\ncrypto exchange\ncongreg ants\nbus u\nbulldo ze\nbritt le\nbi f\nay ner\nauto sports\nase d\nas ka\namazon basics\nag ir\naa ve\n, ..."\nðŁĵĦ :\nðŁijį ðŁijĬ\néĻ ¢\nzoro astrian\nyofthe year\nwriter sofinstagram\nwick enburg\nwhittle sea\nwhites boro\nvide oc\nun ction\numass boston\ntho de\nthibo deaux\nther ick\nteam trudeau\nstol ler\nspec tra\nrush en\nrose s\nram la\nrace goers\npre cursors\npra ful\npoke stop\npo vo\npark hotel\nontariop cparty\noj ha\no ca\nnou is\nnew al\nneg ated\nn ase\nmy heritage\nmour ner\nmit is\nmet so\nmb achelet\nmayor an\nmanning tree\nmand ing\nm hall\nlu ong\nlove jo\nli therland\nle vent\nku hoops\nkoop man\nkeepit real\nkap iolani\njjig ae\nin costabrava\nic ss\ni vin\nhun n\nhu tter\nho kies\nhalvor sen\nfor victori\nfas ching\nf itur\nf ady\ner gon\ndesic cated\ncow ls\ncho lec\ncho ix\ncash more\ncal om\nbush y\nburn twood\nbuch man\nbb fc\narn ason\naph ili\nai man\na stri\nðŁijıðŁı»ðŁijıðŁı» ðŁijıðŁı»ðŁijıðŁı»\nðŁİģ ðŁİĪ\nðŁİ ĭ\nоÑĢÑ Ĥ\nza her\nz wick\nyar de\nwi gley\nw ys\nunit eds\nun satisfying\nun pasteurized\ntz aneen\ntur bom\ntre en\nteam mtkglobal\nta fo\nswan igan\nsurvivor man\nsurfl iner\nstorme mma\nstin nett\nsteve kingia\nshri veled\nsea bee\nsak halin\npizz eri\nper gam\norland i\no tras\nnoti f\nnew business\nmis representing\nmatur in\nmalag acf\nlong neck\nlo thes\nlo tf\nlive atthe\nlat ed\nlace wing\nkrysten ritter\nkeyshi acole\nkany on\nk ys\nk pu\ninve rell\ninde terminate\nin anda\nill iterates\nil icon\niam a\nhydr ator\nhu uuu\nhouse uk\nhm recipes\ngra zes\ngior gos\nframe set\nfaren thold\ner roll\ndukin field\ndu lin\ndor dt\ndoor knocking\ndo gie\ndj d\ndestruc ting\ndapper laughs\ncrow ed\ncollabor atory\ncoel ac\ncar lino\nbun mi\nback handed\nas see\narty originals\nafell ay\nab bys\na yoo\nðŁį Ī\nvin it\nur an\ntu big\ntri stes\ntimmerman seu\nterrori stic\ntant allon\nta ward\nsub h\nsteph y\nskull cap\nsimon shield\nsimonshield cars\nscho o\nsaw bridge\nra jani\npatmccr orync\npar cells\np band\noun ie\noc md\nnon nie\nmovethe sticks\nme rel\nmar galla\nmadd alena\nlef tism\nkr be\nkassi an\njugg lers\njam ai\nitv lorraine\nitson us\ninhib itions\nimpe des\nhou lton\nh te\ngov con\ngondo lier\ngalo shes\ng pio\nfox hall\nfollowyour heart\nflorian sem\nedinburgh fringe\ndre ssy\ndo et\ndigital selling\nd boss\ncrazy sexy\ncou lom\ncost asunglasses\ncompetit on\nco zens\nchri slo\nchar o\nce cafa\nbrisk ly\nbol aji\nbill ymiller\nbe edle\nbad things\nbab yy\nay se\nave ley\naun or\nau pdate\nartofli ving\nanno ck\namey er\nðŁİ¸ ðŁİ¤\nðŁ¥ ħ\nâģ ¿\nwysi wyg\nw dg\nveri dge\nvai zey\ntransni stria\ntom mison\ntoi les\nteam db\ntang an\ntam an\nswim mingly\nsuper heroine\nsumr all\nstein ke\nstall ard\nstag nate\nspind les\nsouth african\nsig ils\nsenti do\nsan sone\nsacri lege\nry mer\nru sses\nrepublic anism\nrepe als\nre mise\nra uma\nportre ath\nphi leas\nparas ail\noney oung\noccu pied\nnur haliza\nnoisi est\nni antic\nmusic videos\nmr tt\nmob psycho\nmo phie\nmichael hyatt\nmed ju\nmateri el\nmat tar\nmar shab\nm go\nloth ario\nlock sley\nlau ter\nkoz lowski\nilustr ación\nhal lion\nha ddin\nha bs\ngreen shank\ngolmaal again\ngav riel\ng auth\nft as\nfoot lights\nfictionalcharacter si\nes guer\ne zy\ne spectacular\ndirectedby women\ndervi shes\ndel lave\ndavids ons\nd tid\ncongress h\nconceptu alizing\ncape epic\ncam es\nbung ling\nbre arley\nbhan ush\nbengal fc\nbbcgoodfood show\naussie wine\nas pera\narti um\narro gate\narac eli\nantonio selas\nanthrac nose\nameri prise\nam man\nðŁĮº ðŁĮº\næ² ¢\nâļ« âļª\nzephyr teachout\nyouth fulness\nyeh hai\nwit trock\nwal dau\nverbi age\nvalenci ennes\nus nist\nusnist gov\nun ambiguous\nty red\ntruetothe blue\ntom coronel\nthimpact music\ntek tronix\nteab ags\ntanu garn\nst apes\nspo cus\nshor r\nsand box\nsalesforce tour\nsaint louis\nsa hra\npic ken\npersonali sed\nperi gee\npar ky\npar cc\npand al\nonna ire\nnational triviaday\nnas co\nn pd\nmp ca\nmis interpretation\nmarinas diamonds\nmar am\nmac callum\nlyric al\nloo tera\nlive stock\nlev elland\nko zy\nklin ik\nkat onah\nkaranvir bohra\nk nave\nk mw\njewelry designer\nj ør\nit ami\nira i\ninde p\nill in\nid omeni\ni eper\nhong kon\nho chul\nhaw ay\nhappis burgh\nhal per\ngu ji\ngrobb elaar\ngar gamel\ngan sett\nfi bber\nfestival season\nfem min\nfate grandorder\nfac ademy\nexpos itor\nela unch\ndun don\ndiscre tely\nde funding\nde bono\ndayof service\ncringe y\ncom enius\nchun king\nchou pette\nchance hmiller\nca key\nbottle brush\nbhu mika\nbewilder ment\nbetter world\nball park\nbad tam\navo d\nal cin\nai mi\nabud get\n/ \\\næķ ı\nzuc carello\nwhack y\nwesty orkspolice\nwestmid sfire\nwai spr\nuje res\ntrack ball\ntinyrebel brewco\ntej pal\nsw coastpath\nsu ku\nsu god\nstress free\nsterili ze\nstake out\nsm show\nsini esta\nsil ove\nshel duck\nsensu ally\nscott zolak\nsave therhino\nsam vad\nry ant\nriz ky\nri sed\nrecompen se\nra kers\nr ml\npitney bowes\npic ally\npet smart\nperi stal\npenrhy n\npap anasam\nol fi\nok ello\nnor den\nnl h\nnet worker\nnano wires\nmön chengladbach\nmuck le\nmu sser\nmotorcycle live\nmicro structure\nme soli\nmclar ty\nlolly daskal\nlen sky\nleather wood\nla sing\nl ancy\nklu ge\nkhar ghar\nke zar\nkar yotes\nkal er\njag at\nj twc\nin vision\nhydro chlor\nhockenheim ring\nhealth sci\ngu anab\ngreen wave\ngods girl\ngo argos\nfur ugby\nexecution ers\nest v\nerrat ically\neric stonestreet\nengv all\negg leton\ndu um\ndramar ama\ndor gan\ndok tor\nde mexit\nde mas\ncu mmer\ncryo em\ncric kla\nconcier ge\nchar dt\ncafe oto\nc illian\nbuy local\nbro glio\nbol z\nbarnes ville\nau tol\nathle tes\nasimbaj waispr\narch ways\nanglic an\nane ja\naedilhai mushkil\nadvoc acy\nadamm grant\nðŁĶ¥ ,\nzak is\nyoung bloods\nyam ini\nwork man\nwar danadi\nwardanadi adwala\nup mc\ntric are\nthanksgiving day\nta ches\nsydne yleroux\nsw c\nspin ner\nsirot kin\nsilver sea\nsilver fox\nsiberian husky\nsi fy\nsh ac\nsali endo\nroman os\nroble do\nro hani\nrival ing\nreu ther\nre uss\nre make\nravin dran\nquil len\nperpetu ation\npar apan\nordin ate\nor ski\nol um\nol ave\nohl draft\nogc nice\no hy\nnon conference\nno zze\nne wald\nmy nydd\nmer folk\nman tell\nmain ec\nmae us\nma sel\nlove cork\nlikk le\nlich tenberg\nleeds beckett\nlee za\nleaf less\nle det\nkott ke\nkno wer\nki wa\nker im\nkel se\nk flay\nju uu\nju tanugarn\nis me\nink blot\nhoag land\nhe an\ngrou pm\ngol fs\nfur n\nfranks redhot\nfj ell\nfabul ousness\never long\ndv n\ndra enor\ndopp ler\ndistur bia\ndirt track\ndemp sey\ndam ini\ncracker barrel\ncon ation\ncinnam inson\nchin nor\ncau d\ncam pos\nbro ga\nbor re\nbh b\nas under\nam ine\nalab amians\nak wai\nafton bladet\nad alovel\nacci ona\nðŁĺĩ âĿ¤ï¸ı\nðŁķ¯ ï¸ı\nðŁįº ðŁį»\nzab bix\nyot suba\nx xix\nwego hard\nvivek dahiya\nuver world\ntro ad\ntimp ano\ntel is\nsper oni\nson uk\nsm f\nsig gi\nshrie ked\nschool supplies\nscho on\nsan é\ns dr\nrust lang\nroden bach\nrock art\nro sac\nriseof rest\nrealdj premier\nra thyatra\nqui ds\nporthcur no\npolk adots\nper io\npenguin books\npe pino\npdx now\nok ays\nno em\nmosk va\nmis ms\nmcgill is\nmatsu oka\nman zoor\nlu tter\nlis ner\nlaser scanning\nla chaise\nky tv\nkim s\nkendra wilkinson\njessi ej\nhygro meter\nhusse ini\nhu ub\nhockey tv\nh ba\ngui der\ngb d\ngagli ardi\nfio rella\nfel tz\nequal it\neco schools\neaton ville\ndou ts\ndou mbia\nden holm\ncoer ce\ncli mat\ncardio id\ncampu slife\nbot an\nam oureux\nðŁĶ¥ ðŁijĮ\nðŁĩ®ðŁĩ¹ ðŁĩ®ðŁĩ¹\næĸ°å® ¿\nyam al\ny strad\ny pr\nwrit enow\nwish meluck\nwalter scott\nwak il\nuf bugs\ntin ney\nthe box\nthanks dad\nth ung\ntat ort\nta issa\nswi vels\nstormb orn\nsk ai\nsig int\nsad diq\nrwen zori\nrudol f\nreck itt\nravens bourne\nprofit ably\npro mes\npo go\nplacido domingo\npit ons\npim p\npic cin\npeter tatchell\npedre ra\npay rolls\nobjec tifying\nnj dotcom\nne j\nmol ca\nmini mizer\nmc nicol\nmc are\nmat they\nmahi eu\nma isons\nlyn nette\nlo ssing\nlat form\nla khan\nkr ama\nkent ico\nkahn awake\nk lax\njit ney\njazz wise\nis king\ninver leith\ninst ad\nib ile\ni ok\nhy ar\nhorse less\nhome boys\ngun nell\ngreatest showman\ngla zes\nfri sson\nflos stradamus\nflexible working\nfar in\nfalsi fying\nescape es\nemili o\ndete ctions\nde val\nde pa\ndand ad\ncuri el\ncp sa\ncold spring\ncine main\nci dium\nchanel westcoast\nbuzzy buzz\nblat che\nbind weed\nbart leby\nbalochi stan\naw sreinvent\naus grandprix\nalpha go\nall ora\naaa ahhhh\n: ?\n!!! âĿ¤ï¸ı\nðŁıĥ ðŁı½\n룬ë¸Ķ리 ì¦Ī\nâĻ¡ .\nâĭ Ĩ\nâĨ Ķ\nÙħ ÙĬ\nzy lof\nzor don\nzal de\ny itz\nwy ne\nwild bill\nwe ke\nvali m\nutter ances\nun willingly\nun profitable\nun anticipated\nti mba\ntdw sport\ntail spin\nt dci\nsyste mo\nsway ne\nsteven sville\nsteven ash\nstanc enation\nsony prousa\nsky digg\nsem pre\nse q\nsawbridge worth\nsau con\nsar af\nsan die\nsahar a\nrown trees\nro tolo\nran chos\nr row\npony hour\nnol ans\nmu ji\nmm rda\nmb stadium\nma illard\nlovetrump shate\nlic or\nlaugha bly\nkam uy\nji j\nj any\ninconveni enced\nhud ds\nhippo cratic\nhas sel\nhanse atic\nha aha\nh mrc\nh mb\ngyne cologic\nglo ating\ngen set\ngel sen\ngangre ne\nfr ons\nflu gel\nfictionalcharactersi wanttomarry\nfair uz\nexcit er\nev elled\neni ke\nele fante\nee zy\neddy stone\neco tec\ndum mett\ndm register\ndirec tionally\ndel orme\ndeer hound\ndang dut\ncur se\ncountry girl\ncleve rer\nchurch ville\nchand ani\nchael incl\ncellulo sic\ncast aldi\nby one\nbut lin\nbu ehrle\nbli s\nbeyon ce\nbest wishes\nber rigan\nas vit\nannul ment\nama q\nalli seeis\naar gh\nâļ½ï¸ı ðŁĶ¥\nâĺ ŀ\ná Ķ\nyw ca\nwood worm\nwis la\nwhat su\nwest lock\nw use\nun crowned\nu os\ntwy nd\ntran ent\ntiffany haddish\nthe knot\nthankyouforyour service\nte ssy\nswit che\nsumm erishere\nsp ir\nso hc\nsnetterton msv\nsli v\nshre m\nserv icec\nseraph ina\nsathy ajyothi\ns llp\nri fling\nram eau\nporth os\nporsche forsale\npor thour\npet plan\npel uso\npatter son\np had\nox uni\notran to\no delirious\nnor win\nnitourist board\nmizu ho\nmishand led\nma sini\nlum by\nli os\nle vein\nkri palu\nklo sterman\nkit agawa\nipp on\ninfl ates\nili o\nhydro x\nhr sb\nho vel\nho skin\nhat field\nhann ya\nha el\nh dt\ngrant making\ngra hams\ngol in\ngh and\ngel fand\ngd pr\nfri g\nf anti\nex erts\neni sta\nel ara\nduncan trussell\ndown land\ndellave dova\ndac ey\nd ctf\ncommun alism\ncheftom kerridge\ncerv elli\nburnthe stage\nbrink mann\nbok hari\nblumen auer\nbis aya\nberg tv\nbekind to\nbau dr\naustralopi thecus\nannon dale\nak anishi\nai ac\nadu cati\nðŁIJ ĥ\nðŁı³ï¸ıâĢįðŁĮĪ ðŁı³ï¸ıâĢįðŁĮĪ\nâľ «\nä s\nza veri\nyogi adityanath\nvy dra\nvote demilovato\nvas s\nv itt\ntra ver\nthreep ence\nthiru vizha\ntail bone\nsway amb\nsuz ann\nsuicide awareness\nsugar bowl\nst illed\nsoldier field\nsmu gly\nsb v\nrou se\nre conditioning\nq cs\nprin ze\npmk vy\npi planter\npanam acanal\nover loads\nor bi\nolom bia\nob x\no gn\nnoble st\nnam san\nna fees\nmu mab\nmkdon sfc\nmin ky\nmi ano\nmen or\nmeet our\nmay hall\nman tv\nma vicpro\nlulu hru\nl ation\nkwesi arthur\nkate spade\nkat rant\nkalki kanmani\nkal barri\njocel yne\njesuschri st\nit ravel\ninformation technology\nindian diplomacy\nhyp notic\nho tho\nhinch liffe\nhilton head\nhell hound\nha wards\ngrau pel\ngonebut notforgotten\nging erly\ngin kel\nfox ford\nexternal ities\ner rico\nee v\ndi mmu\nde population\nde muth\ndarkk nightrises\nd dot\ncl ane\nchar nley\ncal af\nbrut alized\nbrun ches\nbram alea\nbey routh\nare ata\nap hex\nanti e\nam logic\nale sia\nal quds\nair tricity\n:\' -)\n( ??)\n!!! ,\nðŁĶĬ ðŁİ¶\nðŁĵ ĭ\nâĪ ŀ\n° ðĿĺ\nyal inetwork\nwomenin engineering\nwilkin sburg\nwail uku\nvisibil ityday\nvi alli\ntr onic\ntotal biscuit\nthe evil\nter ang\nsuff ices\nspencer port\nsan del\nsag t\nrobo twars\nro guer\nransom riggs\npy are\npr week\nplu cks\npin cho\nphili stines\norganiz ed\nol z\nny v\nnot our\nnikki reed\nnews media\nn kun\nmish ra\nmb and\nmasochi stic\nmar ang\nma kel\nlo kay\nlil bibby\nlev antine\nlc dr\nla ettner\nkere mbur\nkaw aguchi\nkath iel\nka sten\nk rome\njay rock\ninter provincial\nincub ated\nhundertw asser\nhenry viii\nhe eds\ngre a\ngov tnz\ngill ick\ngener alizations\nfro bisher\nfow ls\nfoo m\nfnaf hs\nfly ball\nfir po\nexplore the\nev aaa\nend child\ndun combe\nde mption\nday dream\ncor vina\nconve yer\nconfu ci\ncolo m\nclums iness\ncalci fication\nbra sher\nbbc cambs\nassor tments\nasgar dian\nard agh\nanag alizia\nali u\naf fix\nadri ane\na heim\nðŁĺįðŁĺį @\nðŁİĦðŁİħ ðŁİģ\nðŁįĢ ðŁĴļ\nâĨ ©ï¸ı\nworldsoil day\nwhodoyou collect\nwasteiton me\nvol le\nvel lam\nv hong\nv adap\nur inated\nupper class\nunder hand\ntown scape\ntam bur\ntach ometer\nt do\nstrat orob\nsteve burton\nsnoo t\nsmo ker\nsmall streamers\nsla u\nsiva thewanted\nshan te\nseok min\nseason able\nsahuar ita\nsage francis\nsa ham\nroad burn\nram bert\nrally racc\nra wat\nprincess leia\npla stique\npen iche\npe therton\npang lao\npanam games\norig ami\nor questa\nna shies\nmu table\nmon cur\nmess o\nmen sur\nmassi modu\nmarcel o\nm travis\nlovemy dog\nlloyd banks\nlie ben\nleix lip\nky dd\njab il\nis ao\nic aria\nhi ero\nhawks worth\ngrave sham\ngen ation\ngard eng\ngar owe\nfox ct\nflor id\ness on\neric whitacre\nent radas\nelo ka\ne owyn\ne akin\ndu dgeon\ndu ce\ndemo scene\nday glo\ndant dm\ndani elo\ndab arkads\ncuti ee\ncountry club\ncele k\ncar onde\ncal allen\nbuy ers\nbuck hurst\nbor ou\nboett cher\nbatt enburg\nbas singer\narnel pineda\nar nou\nantim al\nanne ka\nalter a\nalp bach\na ethel\nðŁĴĽðŁĴĽ ðŁĴĽðŁĴĽ\nðŁĴ ł\nðŁİĵ ðŁİĵ\nìĬ¹ ìľ¤\nèµ IJ\næĽ ľ\nâĺĿ ðŁı¾\nø r\nê me\nyon du\nwyn on\nwo ssy\nwel ts\nvo e\ntorch bearers\ntit lei\nthe cutch\ntam ines\ntaf sir\nstick iness\nstal liance\nspi erre\nsophistic ate\nsin less\nshar af\nse acade\nschaff hausen\nroller coasters\nrock slide\nrapo port\nprun er\npoly gamist\npolari zer\npol avaram\npm dd\nplant science\npar to\nonceupon atimein\nnt southwest\nneme chek\nne shoba\nnay la\nmuth arika\nmercu tio\nme ares\nma homet\nm buy\nline tte\nlinda ikeji\nlam oureux\nla yo\nkum ho\nkla vier\nking field\nkap lan\nkab aka\nhypnoti sm\nhin king\nher mann\nh wb\ngre ymouth\nfour play\newn traffic\nesp ino\nepiphan ies\nela sti\ndel orenzo\nd bf\ncull ompton\ncu bbon\ncs ny\ncra dled\ncost lier\nconfederate flag\ncon formation\nci legon\nchapel town\nchan u\ncapp ie\nbiomed ical\nbal want\nb sas\nas cio\nargu mentation\nangliar uskin\nameracad peds\nacce sses\nabhin aya\nab ts\nðŁĺĤ ðŁĶ«\nðŁĸ¤ ⾨\nðŁĴ» ðŁĵ±\nãģŃ ãģĵ\nwhat matters\nwar of\nwan jiru\nvero beach\nul bricht\ntyro lean\ntromb ones\ntre vis\nthe shark\ntaga q\nsuf cofficial\nstom o\nstarbuck scanada\nssin z\nsnowmag gedon\nski pp\nsi mard\nsi at\nser j\nsenator menendez\nse il\nre write\nre tested\nram nath\nra sco\npre destination\npoint es\npe azer\nonline safety\no chieng\nnor mand\nngu gi\nnaz rul\nnational hatday\nnation all\nmr bo\nmoon less\nmin niem\nmatt lanter\nmag ner\nmac omber\nkuri su\nku mail\nkor k\nki y\njones borough\njo ep\njack savoretti\nish u\nin lets\nilleg ality\nhb g\ngar brandt\nfra ying\nfasci as\ne gan\nde etz\ncontr ition\ncny central\nclu bb\nchero kee\nblues rock\nbj ørn\nbe eville\nbarn field\nbar ako\nastor ino\nar nau\nap lay\nant ó\nant é\nam ck\nworld notobaccoday\nwi f\nway uu\nvir i\nvi brio\nun happily\ntiger lily\nthekk ady\nthe jason\ntam pere\nsk omer\nshare pict\nshanemc mahon\nsecond city\nscru ples\ns fair\nryu kyu\nrodan the\nrepost by\nregin aking\nram kapoor\npin oftheday\nphyl lo\npe afowl\nop hen\non co\nol ka\nober weis\nmuseo ideale\nmon ad\nmile stone\nmi kay\nmel chor\nmatt and\nman ac\nmal lup\nm amp\nlyle lovett\nleea renberg\nlea den\nlamba alka\nla hr\nkun is\nin famously\nhen ner\nhar ve\nhar mar\ngo is\nff xv\nevol ver\ness ilor\ndz bb\ndri ppings\ndrew barrymore\ndog pound\ndis avo\ndg ca\ndel piero\ndeb ary\nde militarized\nde mean\ncor de\nconfu singly\ncomp ston\ncien fuegos\nchi b\ncc me\ncarri ere\ncar tm\ncan thelp\nbrox towe\nboss y\nbone tti\nble ier\nbiblio thek\nbhar uch\nber kut\nbbcgw live\nau gi\nat ag\nanim atic\nand oni\namil ano\namar ca\na ani\nðŁĴľ ðŁİī\nëĬ Ķ\nè ®\nz by\nyas mina\nwri ggling\nvisit abdn\nup scaling\nunder takers\numay yad\nukgif tam\ntheplayer schamp\ntat ry\ntaq wa\ntales fromthe\nsuper grass\nsunny bank\nstone field\nston ef\nstey ning\nste ads\nskincare tips\nsho v\nshe hr\nsg pc\nru mps\nrizz uto\npin tor\npick away\nphy to\npetit e\npax os\nover tone\nop atija\no gwen\nnee wer\nnecess itates\nmultivit amins\nmu sil\nmu ip\nmor ros\nmo ki\nmix ta\nmin def\nmee sha\nmarin us\nma die\nlex perience\nlegisl ating\nking i\nkenyan traffic\nka idan\nk harbanda\njun krat\njon m\njb pritzker\niron work\ninsuper able\ninfini x\ni jaz\nhyperhidro sis\nhead teachers\nhan de\nham ster\nhad win\nh ace\ngo yer\ngirls bb\nft u\nfitz geralds\nfer ring\nfc united\nev d\nesc ol\nenligh tens\nenginak yurek\nele vens\nedit ore\ndolore shu\ndeaf heaven\ndark sun\ncycla dic\ncubic les\ncu buff\ncre morne\ncommen taire\ncolum b\nbore as\nboom stick\nbluet ooth\nballinas loe\nbal gow\nb inga\nathe a\naste iner\narsenio hall\nargentin agp\naren delle\nal friston\nag aves\nafol ayan\na oy\na jen\n) \',\nó¾ ĵ\né §\nãĤ¹ãĥĹ ãĥ©\nâĺº ðŁĺĬ\nØ§Ø ´\nzil lah\nza hoor\ny aaaaa\nworld humanitarianday\nw up\nvi le\nvampi ric\ntune ful\ntshirt design\ntrack ing\nton bridge\ntish omingo\nthe coral\nth axton\nterribly tinytales\nteacher appreciationday\nswa inson\nsound set\nsmar my\nshort land\nsan jaya\ns mid\nryan holiday\nru ddington\nrspb southwest\nrivers dale\nrespec ter\nre beli\nrahul dravid\nposit ron\npim pin\npas sey\noromo protests\norgan elles\noc ar\nno ahs\nne ophyte\nmy idol\nmur dere\nmor ri\nmenstru ating\nma fc\nlucifer onnetflix\nlili an\nli sted\nlaure en\nlaten igh\nlabour party\nla plante\nko zel\nkitty hawk\nkar hu\nju lee\njim myeat\njeep ster\njaye hanash\nir reversi\ninst yle\nidoli zing\nic pd\ni bro\nho sni\nhlf supported\nher rig\nhe bs\ngaller ist\nfrasc ati\nexten sible\nexeter college\neven ko\nes b\near tists\ndisarm hate\ndin ard\nde criminalisation\ndc pl\ncynthi anixon\ncont actus\ncolom bians\nco an\nchi haya\ncc cs\nbra ganza\nbol ter\nbe avoter\nbank stadium\nast ell\nasperg illus\nasi apac\nann ée\nann aa\nam bal\nalonce sto\nall ana\naege anairlines\nabet z\nðŁļ µ\nðŁĺİ ðŁĴ¯\nر Ø©\nÑĤ а\nze hn\nys rc\nwhats new\nwas p\nvi agogo\nvegas news\nvassil is\nv dj\nush ima\nun traditional\nthursday night\ntalkin gheads\nta was\nsw ch\nsw abhi\nsupply chain\nstr ina\nshe amo\nscott borchetta\nsche ch\nsc ouk\nron funches\nredon do\nqu aide\nprolifer ate\nplay ingnow\npe ered\nol av\nny anga\nnp tech\nnational pieday\nmy view\nmiss world\nmedi o\nmcle od\nmc gil\nmac ia\nma vs\nly t\nlu anne\nkon nen\nka sese\njuan ma\nju alan\ning ate\nildef onso\nhydroly zed\nhu ong\nhimer ose\nhill ard\nhege monic\ngri der\ngra al\ngi blin\ngame boy\nflu g\nfan zines\nfall is\nevery woman\nejec tions\nearly childhood\ndi mera\ndar ting\ndar ted\ndar ra\ncomm er\ncity traffic\ncb bus\nburde kin\nbro ths\nbrett dalton\nboiler ball\nbedroom tax\natsu himerose\nastro labe\nalfred sson\nah y\nae ats\nac lassic\n" [@\nðŁĶª ðŁĶªðŁĶª\nðŁIJ¶ ðŁĴĻ\nç Ģ\nãĤ¿ ãĥ¼\nâĮļ ï¸ı:\nz addy\ny stems\nwa inf\nvesti do\nvacation mode\nv pro\nul le\nthur rock\nsuper nintendo\nsu sp\nstjepan hauser\nstal act\nsou tache\nsimi en\nsearch engine\nsc ill\nsas aeng\nsacred geometry\nrome omiller\nrn ts\nrefr acted\nreal michael\nrad cliff\npri es\npre uss\nporch light\nofficial sps\no logic\nnascar hometrack\nnap alm\nnag pal\nmovi mento\nmon chi\nmissing merlin\nmathe ba\nma pper\nm wh\nlt d\nlilloo et\nky p\nkodan sha\nkir cher\njd illa\niv ani\nindi visi\nin laws\nin chic\nik r\ni vie\nhoun sou\nhay ton\nhaku ba\ngu ti\nger gen\nfull stack\nfor sey\nfabulous finn\ndegra ff\ndat aran\ndam ocles\nda hal\nda chi\ncro is\nclou se\nche ers\ncentr ica\ncatal ana\nbur chell\nbry ne\nblox wich\nblood worth\nblack business\nbir tday\nbi beau\nandre siniesta\nanaam doon\nalv ina\nalmosthe aven\nall ach\nal jaz\nafl vic\nad dam\nachi efs\nðŁijŁ ðŁijŁ\nØ§Ø ¬\nza haha\nx aver\nwith kids\nwh yyyyy\nwen dig\nwee ze\nw taf\nvion net\nver celli\nvan af\ntvin colour\ntor ist\nthe resi\nten leytown\ntal bum\nsweat box\nsty li\nstre sa\nspoon bills\nsorry im\nson yo\nsmur fit\nsin c\nsidd all\nsi phoned\nsi fton\nseismo logist\nro see\nres wales\nrally deportugal\nrainbow six\nque k\nport coquitlam\nphilosop hie\nphilly firedept\nphil brook\noto ya\nnidh hi\nnab u\nmoo cher\nmister wives\nmi os\nmerrell twins\nmccas lin\nmal feasance\nmac naughton\nma saru\nm wr\nm tam\nlive journal\nle chu\nkib worth\nk bw\njason plato\nj rothen\ninzam am\nhover boards\nhoney combs\nhomin in\nher ro\nhard hat\nha hohe\ngou die\nfootball remembers\nevi gan\ndu ba\ndol ing\ndir hams\ndinner date\ncu ala\ncrag side\nchesapeake shores\ncast o\ncar lucci\nca rella\nbusinessc lass\nbur kes\nbrew day\nbol tz\nbb bb\nball ater\nbabad ook\nalex isonfire\nadjun ct\naber fan\n/ -.\nðŁĺī ðŁĺİ\nðŁij¸ ðŁı»\nìľ¤ 기\nà¸ģภ£\nyo ichi\ny ı\nwhitecol lar\nwe dont\nuof alabama\nunner ved\ntwelf thnight\ntu gend\ntr ca\ntom son\nthegoogle images\ntheat tic\nthe sse\nt ms\nsven ska\nsug ita\nsm tr\nsil urian\nshol me\nsel insgrove\nsan parks\ns como\nru pi\nrock sound\npro bus\npo stand\nplastic pollutes\npaediatric ian\nnbc timeless\nmun dry\nmi stle\nmenac ingly\nmccu bbin\nmather an\nma sum\nlev ins\nl hl\nkorean war\nkai ji\nka whi\njb fa\nj ck\nintercess ory\nil wu\ni hp\nhine sville\nhigh on\nhene cia\nhapp old\nhang time\nhand l\nhammer films\nhalloween party\nhall sville\ngrim ms\ngo ags\nglen ny\ng ner\ng ads\nfire pro\nfal les\nfal lah\nf nv\nexpan ses\nex pel\nenvironmental justice\nen zy\nelectro physiology\nds meu\ndread naught\ndor in\ndian ak\ncu hk\ncocom artin\ncis me\nce g\ncarol ines\ncar star\nboney kapoor\nblack white\nbjarke ingels\nbar ringer\nbar log\nbad ung\nadre ssing\nac snano\nac crue\n!! ðŁĴķ\nðŁĵ ĺ\nyoulike carsuk\nyanke ec\nwon tons\nwom bs\nving o\nvictori ously\nvec chi\nunder perform\nun rolled\nuk ur\ntv n\ntrain ingday\ntow v\nth ooo\ntb ell\nt ounge\nstrat asys\nstein ert\nsr ing\nsobr ino\nsli iga\nsiss inghurst\nsi pa\nsenator reid\nsen robportman\nselve dge\nsel mon\nsel inger\nsay cheese\nsa wat\nrekind les\nre route\nrc de\nra gan\nqu n\npro van\npivo t\npedic ures\npancra se\npa kk\nout selling\nour nation\noregon ians\nniam ey\nnation hood\nn crc\nmsmar vel\nmorad abad\nml j\nmine ko\nmil fs\nmesm eric\nmen chies\nme gara\nmax ing\nmat tek\nlaga res\nkyoku shin\nkl h\nkirstie alley\nkilling it\nkee sh\nkat ed\njosel yn\nitv anglia\nine ed\nincenti vise\nin den\nin cin\ni dra\nhyper links\nhu uu\nhash ana\ngre nell\ngravitational waves\ngrat ton\ngg able\nfun dthe\nfan stand\nexhilar ated\nem mar\neli v\nelder abuse\nel tz\neast wick\near ings\ndire kt\ndev our\ndemocr acyday\ndee puk\ncy ano\ncu ssler\ncondition ally\ncoco oned\nclub wc\ncivil airpatrol\ncar luke\nby fleet\nbore holes\nber satu\nbarrel led\nbar ths\nba hir\nb pd\nashi shians\nar kh\nar iss\napor ter\nao ife\nalwaysinour hearts\nal ofa\nair nz\nadeni yi\nadap t\n. \'\n" âĢĶ@\nðŁıĢ âĿ¤ï¸ı\nðŁĨ Ļ\nèµIJ ç¦ı\nãĤ» ãĥ¼ãĥ©\nÏ ĩ\nyear son\ny res\nwomen also\nwk shp\nwi ya\nversic olor\nve aux\nus fca\ntwin ny\ntour é\ntor adora\nton tour\ntho spital\nsurfer girl\nsteadfast ly\nstar sof\nsoil association\nshru thi\nshe epi\nschei fele\nsaddle bags\nronnie wood\nre payments\nram ayan\nrad wimps\nquin tino\npink pop\nper missive\np sei\nopen the\nomni verse\noma ine\nohhill no\nofficial nichols\no sher\nnewyearnew you\nnational pancakeday\nmy nt\nmun chau\nmirac ast\nme zu\nme self\nmass enet\nmar pole\nlm h\nliber atore\nlei fer\nl ling\nkuns thalle\nkon tak\nkon nan\nkk l\nkirk franklin\nkey board\nkc as\nkab u\nk por\njean michel\nit group\nis that\nindi c\nhor lo\nhon go\nhof man\nhead butting\nh vo\ngreen collar\ngravel ly\ngin blossoms\nger tz\ngar din\nflu tters\nff f\neth ridge\nentre pen\nenf ance\ned sall\ned di\ndu shy\ndri es\ndolla z\nded rick\nd aka\ncre mant\ncoun ton\ncou libaly\nclap back\ncity beat\nca stor\nbuj old\nbli zz\nblackandwhite challenge\nbeach bum\nbayone ts\nartill ery\nap or\nandy mineo\namyra dastur\nalber o\nalas kans\nad cs\nab io\nðŁĺĦ âĿ¤ï¸ı\nðŁİĦðŁİħ ðŁı¼\nาภ²\nworm wednesday\nwilli mon\nwhip sn\nwatermel onday\nwat kinson\nwal ki\nvsc in\nue hara\ntu itions\ntruec ar\ntraffic butter\nto ks\nthunder shower\nthir lmere\nthink progress\nt dc\nstenc iling\nsne ddon\nsky liner\nskol kovo\nshu maker\nshi rish\nsch ic\nsamuel milby\nsacrilege sunday\nridel ots\nremington leith\nred lining\nre tr\nrachelriley rr\nquetzalco atl\nquer ra\npyrr ha\npan abaker\npal utena\npa ku\no wego\nnz vind\nnytime sarts\nno bly\nnj pac\nnar ada\nn can\nmoor abbin\nmon tt\nmollu sc\nmate ys\nmal oo\nlym sm\nlevel design\nku tt\nko ori\nk pandey\njap on\nitsmo hit\nit ron\ninausp icious\nike ausa\nhip flask\nhallucin ate\nground cover\nge tor\ngar ron\nfull circle\nfor food\nfel onious\never ard\neun bi\nensla ving\nencan tan\neme k\neli gh\neeee eeeeee\nedg cumbe\ned research\near this\ndow deswell\ndis qus\ndelinqu ents\ndeidre hall\ncorpu z\ncooper man\nco ti\nchu tiya\nchri ster\nchannel ten\ncasser ly\ncard fight\nboot legging\nbollywood celebs\nbe ith\nbang lore\nb wy\naun ite\nas om\nargu able\nar ny\naqu arian\nao v\nan kush\nalas vegas\naf obe\në± Ģ\nå¼ł èīº\nyork dukes\nwrigh twood\nwiel dy\nwi fw\nwest michigan\nwam pum\nvic oladipo\nv nv\ntype set\ntu z\nton ys\nthreat ened\nthou sing\ntellem stevedave\nt px\nswar oop\nstown hall\nspring s\nspo onie\nsharps burg\nshan ka\nsan gue\nricor di\nreferen tial\nred bank\nre tall\nrad han\nqu ba\npush chair\npre scott\npoin sett\nparik rama\npang u\np tr\nom gosh\nnight sof\nnh v\nmu bank\nmo ise\nmat to\nmar tavis\nmar quis\nlu zia\nlo ofa\nlin ck\nlet tie\nking sday\nkillor glin\nkh p\nke ad\nk int\njuliago erges\niv anna\nisla scanarias\ninge vents\nhypo thalamus\nhou k\nhel mut\ngir ll\ngame iro\nfir stamendment\nfar aj\ndutty paul\ndp show\nchar sadda\ncaronde let\ncarni vor\ncak ery\nbrook field\nbottom ley\nborder land\nbo co\nbless ington\nblack hall\nbeg bie\nbe ynon\nbaudr illard\nbat suit\nb dw\nb con\nazeali abanks\nati f\narjun reddy\namar r\nall ington\nalig ners\nald in\nag adi\naes ar\nadam j\nab bess\n!! âĻ¥\nðŁĴķ ðŁIJ¾\nâĶ Ķ\nzylof on\nwreck it\nwhir ring\nweb mail\nv ade\ntyn tes\ntor qu\nthe change\ntel o\nte chi\nsuper friends\nsucces fully\nsubter fuge\nspr inci\nsp era\nsof antastic\nso sn\nsho to\nseag rave\nse say\nsardon ic\nsaeed ghani\nsa kae\nro ject\nregener on\nrad ner\nqu ism\nput locker\npsl grandprix\nproduc ciones\npemb ury\npatho logies\npat te\noscardel arenta\noscar s\norangu tan\nok state\nnav yy\nmulti scale\nmorbi han\nmor di\nmetal music\nmccor kle\nmaun akea\nmar stons\nmar quin\nlu dus\nlive tweeting\nli di\nlegi bility\nleg old\nle jog\nl liber\nkin zie\nkhush boo\nkatrant zou\nju tta\niowa stateu\nharvardchan sph\nhappy sehunday\ngra pho\ngeschich te\ngen nar\ngat chaman\nforz aducati\nfo ie\nfer hat\nev onik\necol lec\ndi sunity\nderekand susan\nde groot\ncrystalli ze\ncran es\ncow spiracy\nconnach t\ncassi o\nc sco\nbun ts\nbri bri\nbre aley\nborough bridge\nback stories\nani emi\nage ing\naa si\nðŁĺ¢ #\nðŁİ¤ ðŁİ¸\níļ Į\nx design\nwinter jam\nwen sum\nus ages\nun bleached\ntobin heath\nti amo\nthereal elp\nsupt chat\nsun cream\nstratot anker\nsti en\nstee zy\nsock en\nsm cs\nskul lisland\nsk od\nsh ttp\nsciento logist\nruthi eel\nrsv p\nrosen quist\nplay sets\npesc adero\npat u\nouel let\noregon mbb\nne ka\nnan king\nmu f\nmoto ko\nmotil al\nmobi leye\nmichael raymusic\nman tz\nlive st\nlec tric\nlalo alcaraz\nla von\nkeny amoore\nkan ada\nk ft\njor vik\njimmyeat world\njag ad\nitae won\nindisci pline\nil ves\ni mani\nhuy brechts\nho ki\nguille mots\ngar way\nga ems\nfx bg\nfreed omo\nfootball family\nfloriansem le\nfine jewelry\nes un\ndoby ns\nderby shireccc\ndarry n\ndance able\nd con\ncri spi\nchoicemusic group\nbra venew\nbeauty blog\nb gn\nb elling\naz tek\natte sa\nasur f\nastr antia\nappalachi ans\nali k\nalgé rie\n$$ $$$\nðŁij¨ ðŁı»\nðŁIJ» â¬ĩï¸ı\nì¯Ķ ìľĦ\nâĺ® ï¸ı\n» »»\ny rd\nwhir li\nwel lo\nvisi thel\nv pp\nv annes\nusag ym\nturntab lism\ntrev ally\ntran sect\ntipp mann\nthom yorke\nthisdayin hiphop\nt sson\nstandard kenya\nslug go\nsign posting\nshar yn\nshad bolt\nsens orial\nsal m\nruss o\nqr code\npromis sory\npope mobile\nphilip sburg\npal ance\npad mas\noff it\no yor\nnu cky\nno suke\nnew y\nnb pa\nmun awar\nmis senden\nmis ma\nmi gun\nmen sa\nmc cowan\nmar khor\nloft in\nlets makeit\nlalah hathaway\nki et\nkad ena\nkach ina\njim mys\nir mar\nig arashi\ni dr\nguit arri\ngou cher\ngo wing\nghou lies\nga er\nfun ston\nfor free\nfol ha\nflux es\nfis d\nfab india\nenew ton\nelli er\ndeador alive\ndas nakz\nchis ato\nchicagos mayor\ncal ce\nca wood\nc Åĵ\nc jd\nbury makeup\nbbc scotland\nar athon\namazon fresh\nam ager\nalve church\nak os\nab cland\n! ðŁĺĺ\nðŁļ¨ @\nðŁĺĨ #\nðŁĵ ı\nðŁijĬ ðŁĺİ\nðŁİħ ðŁı½\nâĥ£ !\nwhel k\nwe believein\nwal ber\nvisu alizer\nvisit malta\nvi vic\nver g\nui path\ntru ism\ntribe town\ntr ills\nthur ingia\nteri polo\nsumbastur tt\nsto ichi\nsim ran\nsi za\nshowtime boxing\nshooter jennings\nshan elo\nsenior care\nsan onymous\nsan field\nroi dery\nrevi ent\nrein as\nre organised\npo que\npatag onian\npap iss\nneph ritis\nmussel white\nmo tes\nminic ooper\nmike s\nmedi bank\nmarch on\nmagic of\nlode star\nlockthe mallup\nke ates\nkar aka\njust sold\njrothen bergtv\njo yo\nj xn\ningu ide\ni lean\nhelp me\nhan in\nh pk\ngru jic\ngro h\ngi vel\ngali bier\ngaleng ering\nforce field\nfemini sta\nfarah khan\nface idibia\neng adin\nemerging technologies\nelor za\nedinburgh napier\nechop ark\ndun gar\ndie ing\nd brooks\ncom esa\ncodel ottery\nch ini\ncen tered\ncab re\nbull pens\nbuil dit\nbucky brooks\nbre genz\nblom qvist\nbk al\nbest deal\nbes sey\nber bere\nb hr\nas cos\nargent inians\naman pour\nam phor\nafi fest\nade o\nabren ica\na itu\n.... ðŁĺĤ\n. ðŁĻĦ\n*-- -*\nå½ ¡\nâĿ¤ï¸ıðŁĩºðŁĩ¸ âĿ¤ï¸ıðŁĩºðŁĩ¸\n๠Ī\nÉ Ļ\nü r\nz ii\nyay asan\ny ars\nwu hu\nwith in\nwick liffe\nvian ney\nven is\nvan ews\ntun nicliffe\nto one\nthing ie\nthe print\ntech e\ntbird nation\ntan ita\ntak ada\nta relli\nstill here\nst pattysday\nst enger\nsquir ted\nspaghett ini\nsin u\nsi dency\nseraph ine\nsediti ous\nre positioned\npigg ery\npie week\npear tree\npalla vi\npa ppi\npa kt\noutlander home\nno bilis\nniko lic\nnca acws\nnat sci\nnat reswales\nn brook\nmsd strong\nmis su\nmcm ldn\nlove greatbritain\nlogo tv\nlc ds\nlaver gne\nkee sian\njeon ju\ninst gram\nin on\nin famous\nhipho pdx\nge ol\ngastr itis\nfunn ily\nfunction alized\nfresh fields\nfitz hugh\nfi amma\nfa shanu\nf pj\nen no\nempy rean\ndor ne\ndoo k\ndew points\ndef qon\nde yn\nde ery\nde bo\ndau da\ndasty ari\ncrom ford\ncontamin ant\ncompag nia\ncolec o\ncode pen\nche twynd\ncend r\ncatch ments\ncar touche\nbr one\nandre wh\nalber tab\nal ders\nagen et\naber tay\në´ Ħ\n天å®ĺ èµIJç¦ı\n⤠µ\nyuri ko\nwit ty\nwhitte more\nvo dou\nveikkau sliiga\nvangogh museum\nunquen chable\nunder par\ntw yman\ntu er\nthe sound\ntan noy\nta ho\nsuper fortress\nsun shades\nsun o\nstram rahim\nstal es\nspoke speople\nsj suryah\nsil van\nsho ckey\nsh na\nsarah colonna\ns var\nry kiel\nru tting\nric hi\nran kins\nra ub\npremiere pro\npr sd\npoo fy\nphone pe\npau pack\np nin\nophthalmo logists\nom is\nolym pos\nodi on\no rest\nmen o\nmd gonzales\nmcge ary\nmc gregor\nmar itz\nmad he\nlu mmi\nlive au\nlist less\nlake port\nla porta\nkono suba\nkaw ashima\njeanni emai\njai mie\njaf ari\niron sides\ninsec tweek\nincis ors\nin blue\nilit ary\nil ong\nhenry ville\nhen lo\nheatwave uk\nhamble don\nha ymon\nguitar hero\ng suite\nfv su\nfi an\nfateh pur\nf tball\ndo bi\ndl su\ndiv ac\ncor lett\ncom eu\ncold weather\nchicag omarathon\ncap saic\nburi ed\nbur sitis\nbur chard\nbur cham\nbell ary\nbe here\nbbc wales\naristi de\nam newsers\nal rosa\nadop table\nabcland line\nðŁĩ«ðŁĩ· ðŁĩ«ðŁĩ·\nãĥ§ ãĥ³\nâľ ĸ\nâĺ ¼\nzen tai\nwhat chamac\nwb go\nway haught\nvri j\nvo le\nvin y\nvilla iness\nvaqu ero\nvag as\nur bina\nup ington\ntri que\ntri alists\nthir i\nthe metal\nthe coop\nte bay\ntan abe\nsystems thinking\nsummer style\nsub plot\nsto koe\nstay blessed\nso jin\nside burn\nshor ror\nshar maa\nsen ki\nsen at\nsat b\nrouss anne\nron kon\nred star\nre classified\nrati fying\nq nb\nplan o\npaulo avelino\npark son\nover throwing\nosi ris\nos ric\norgan i\nocon to\no stuni\nny chash\nnitt any\nni obi\nmal eny\nlittlerock steam\nlittle caesars\nlau x\nland slip\nl ale\nky sen\nkus adasi\nkler ks\nkasab ian\nk adapa\nj dr\nirving plaza\nindian oil\nimmune system\ni kin\nhu ic\nhomo genous\nhare krishna\nhae matology\ngyneco logical\ngou veia\nglen ridding\nfun kof\nfl anged\nen unci\ndragon ette\ndon lon\ndo ble\ndalla glio\ndahl berg\ndab aby\nclassic porscheforsale\nceli o\ncarter ville\ncaroline flack\ncanu so\nbun del\nbotan ically\nbon de\nbio div\nbarry bados\nbam baat\nbac ary\naz le\nat tested\nassimil ating\nar dens\nap v\nandy roddick\nan music\nalu cha\nalph en\níĪ¬ë ª¨\nzur g\nzindagi kime\nye as\nwis k\nw lic\nvers ilia\nunder aged\ntek la\nteam tigershroff\nster ner\nstalact ite\nsql sat\nsooth sayer\nslot car\nsimpson whnt\nsi mal\nshil in\nru ban\nrie mann\nridec annondale\nrep irate\nrae gan\npu tu\npos thuman\npar u\npaper board\nou thern\norganic farming\nmut ating\nmoment smatter\nme xi\nmaster minding\nlind blom\nlikeli est\nli mani\nlax mi\nla sell\nku hlman\nkam az\nit ars\niniti o\nhyper thyroidism\nhomosapi en\nher bin\nhar te\ngu mps\ngor j\ngh ela\nfr q\nfacul dade\nf icio\nent weets\ne idol\ndin sdale\ndemetri ou\ncomic boo\ncolom bian\ncityofla svegas\ncir l\nchee zit\ncha an\nch ans\ncar tas\nc elive\nby x\nbuy do\nbor owski\nbook covers\nbog ner\nblood mobile\nblack families\nbel lowing\nbay ers\nati fas\napare ce\nang ell\nane ed\nali zafar\naga a\næ İ\nwj la\nun tung\nu wanews\ntl r\ntinthe park\nteign bridge\nted ford\nswad dle\nsun gha\nson risa\nslay ings\nsky wards\nsingh ania\nsid deley\nshir lington\nsheffiel dis\nsh ram\nsell ersville\nsaw chuk\nsamajwadi party\nsaf avie\nsabah info\nrous er\nrichar dy\nread just\nr ph\nr ck\nque strian\npursuit of\npro ad\nporta ferry\nplu ma\npin pointed\npile driver\nper ales\npc x\np ta\nnor land\nnit itaylor\nmu hyi\nmtlg azette\nmiscre ant\nmin ardi\nmichael dell\nmcg avo\nmaurit shuis\nmaser u\nman zarek\nm eller\nlin field\nlgbthi storymonth\nlaur ance\nlar ned\nla pin\nl we\nkun tz\nkon tra\nkerembur sin\nker nan\nkat alog\nkali hi\nk west\njessic acaban\nj wp\nite aser\ninto cable\nimacele brit\niklan ok\nident ically\ni av\nhic ago\nhib berd\nhc n\nharbour ing\nguj ral\ngold berger\nglori ou\ngiant srl\ngeo stationary\nfreer oll\nfr nsw\nfl ac\nface tious\near ned\ne die\ndoor n\ndick en\ndi ag\ndan ziger\nda an\ncull man\ncho pp\nche tri\ncel luc\nce es\nbobs burger\nbike tour\nbeep ing\nanis achibi\nanim pact\nam ical\n... !"\níĪ¬ëª¨ ë¡ľìļ°\nà± Ĩ\nál varo\nwwe payback\nwo wie\nwo ts\nwil lets\nwest en\nvbm plong\nuth appa\nun fla\nu chs\ntv bs\ntuesday bookblog\ntre mayne\ntranquili zer\nthehorror master\nthe well\nthe meat\ntan ay\nsy ko\nstorm chaser\nstock yard\nsquab bles\nsn az\nshi powners\nshere sy\nseab ream\nscore keeper\nsci ac\nsat is\nsar y\nsal lee\nry d\nro ks\nreading forpleasure\nre su\npunchestown race\npatek philippe\nopen source\noc kies\no berg\nneph pearls\nn alban\nmonti el\nmin chin\nmill vale\nmid dy\nmel itta\nmani a\nm hairi\nlor ch\nll amas\nlip sky\nlett res\nla bru\nkwang soo\nkhabar ovsk\njual beli\nje ws\njay demarcus\njavit scenter\nis dead\nhome opener\nhemato poietic\nhat un\nham rick\ngelsen kirchen\ngam bon\ngal entine\nfri ess\nfollow westwood\nflu ffiest\nfeasti val\ne itan\ndur gap\ndub w\ndu plexes\nd tx\ncow rie\nclap ton\nchoose to\ncharli erose\nce ili\ncar law\nbun heads\nbrisbane times\nbo tting\nbeau ly\nbat arang\nbarric ading\nballin am\nay ler\narg erich\nan ri\nak ler\nae o\nacu bs\nabor ting\n:) ...\n. ðŁĻĤ\n# ðŁĵ·\nãĥ ¤\nب ر\nzag mbb\ny anda\nwy r\nwriting commmunity\nwater land\nver ige\nven za\nun acceptably\nul nar\ntrick les\nten er\ntc palm\ntat us\nsy metra\nspandau ballet\nsoun dar\nsoul pepper\nsom ely\nsk ymall\nshu toff\nsan ath\nsa ap\nro zz\nra vitz\npolitic slive\nplac ental\npe tyr\npat ry\nof ili\nnrl footyshow\nnether landish\nnak ul\nmy ler\nmor tes\nmis land\nmillions missing\nmil som\nmc mexpo\nmass statepolice\nm hat\nlovefor dorset\nlign ano\nlifel ines\nleg an\nkoh ler\nkali bo\nk gun\njohn wayne\niri de\nicec reams\ni key\nhy den\nhol le\nhe ino\nhe dra\nhat ty\ngrove port\ngley ber\ngl td\ngalax ia\nfound ing\nem po\nelong ation\nee ts\ndre wes\ndis orientation\ndh ss\ndefendthe den\ncull ens\ncou per\ncon die\ncommun es\nco eur\nclo tilde\ncheni er\nch alian\ncer rit\ncelesti al\ncast ells\ncapital markets\nbus man\nbu su\nbog ans\nbernou lli\nbbc stargazing\nbad deck\nķ ×\nðŁĻı ðŁĴĻ\nðŁĶ §\nìķ ¤\nè vre\n® -\nwn r\nw lu\nvoting matters\nvandy baseball\nvand u\nu ssie\ntuft suniversity\ntry stan\ntrumpe ting\nthorn burg\ntgom agazine\nteesside uni\nte dat\ntan ana\ntable scape\ntab o\nsweden borg\nsp kr\nshrimp ers\nsan miguel\ns draft\nri mer\nregr anned\nred back\nreb ello\nreading rocks\nre bo\npub con\npri sca\npel zer\npasteuri sed\np vb\nover lander\nori entex\none word\nole man\nofthe cup\nny berg\nneck band\nnat alis\nmonty don\nmis spell\nmis construed\nmic hiru\nmac phee\nlo vas\nliam neeson\nkib beh\nke mi\nkay am\nkari bu\njor dann\nig y\nibm wow\nhyper venom\nhousing forall\nhor tus\nhope dale\nhit ach\nhin ault\nh mx\ngar amond\nfor tus\nfood wine\nevan rachelwood\nen ag\nelie saab\ndu td\ndel ain\ndau gaard\nd sport\nctil burymakeup\ncit v\ncho ppin\ncarib be\ncarab ini\ncar avel\ncant ley\ncam eleon\nbundo ora\nbun ky\nboo table\nbeat ric\nba ren\nba ini\navon books\nantipo dean\nam ox\nagü ero\nac cp\nabc brisbane\nðŁİĦðŁİħ ðŁı»\nðŁį ±\nçµµæıı ãģį\nı k\nysp sculpture\ny leo\nver ul\nve eran\ntz ar\ntro pal\nth illary\nsv c\nsurfl ine\nsura karta\nsupp e\nsoft wa\nsnape maltings\nshow ery\nsen su\nscore stream\nreignit edtrilogy\nred horse\nrafa ela\nra gee\nprofession nel\npic poet\npee zy\npe thealth\npe stered\np tas\none coin\nok y\no by\nneuro surgeons\nne tease\nnasty gal\nmy e\nmove to\nmon na\nmin ki\nmelissag orga\nmazz one\nlaser cutting\nkrish nam\njo ed\nj its\nj ito\ni ho\nhun ton\nhene ghan\ngreen machine\ngreek food\ngirl son\ngarbi muguruza\nfunny videos\nfivb worldleague\nfeijo ada\ndish evelled\ndepor tiva\nchester bennington\ncapitol theatre\ncantanker ous\ncand ra\ncan epa\nbuil din\nbla w\nbhanush ali\nbat avi\nbad land\nart craft\naren s\nare x\narag ongp\nanu ar\nðŁĮŁðŁĮŁ ðŁĮŁðŁĮŁ\níĪ¬ëª¨ë¡ľìļ° ë°ĶìĿ´\nå± ĭ\nzi j\nzaz en\nzan ardi\ny ip\nwr ung\nwin ns\nwe ready\nv ng\nup lo\ntom ba\nto ady\nthemichael owen\nthe foo\nthe dave\ntar ini\ntal uk\nskim mers\nsho go\nshag un\nsac lay\ns sts\nrock land\nroc ers\nrob z\nreligi osity\nrec c\nrb ge\nqual ityof\nq assam\npol mtl\npo eta\npatri moine\nmusu em\nmore a\nmill at\nmg motor\nmer ola\nmennon ites\nmau rie\nmad ar\nll susa\nko techa\nkap u\nka olin\njun as\njon im\njami efraser\nja hi\niron heart\nirn bru\ning li\nhu gill\nher st\nhell sing\ngrosven or\ngroo ved\ngro za\ngood governance\nglock ner\ngl b\nfore shadowed\nfor the\nfi do\ney am\never rrrr\neri kal\nembelli shing\ndurham birdclub\ndu i\ndu blins\ndrake ford\ndetec torists\nde vises\nde vic\ndaniel goddard\ncullen bunn\nconstitu ting\nchival rous\nchal on\ncar vana\ncand is\ncanad air\nbot terill\nblu ster\nble asdale\nblack shaw\nbill hemmer\nbige ye\nbeer sheba\nbe get\nbar ts\nband aging\nbak uman\nas sion\nar ner\nanast aci\nambedkar jayanti\nalaki ja\nadeno carcinoma\nad ell\nab les\n( =\nxo chimilco\nwhyilove kenya\nway cross\nvin land\ntry pophobia\nthrac ian\nthe gun\nsti ers\nsports writers\nsouthland sports\nslo combe\nsea vey\nse wall\nscu damore\nsc ig\nsar razin\nron ay\nri yadi\nri poste\nre mastering\nram das\npop matters\npon dexter\npierre gasly\nperip lus\npar lance\nocco quan\noak en\nni ft\nnebrask an\nne tra\nnar vaez\nn ales\nmultit rack\nmodi fieds\nmeal worm\nmar leen\nm jc\nlap sang\nky uss\nkil ty\nkil keel\njodi picoult\nis engard\nintl forestday\ninter action\ninten sities\nin soluble\nic hen\nhydrogen ated\nhyatt world\nhorlo gerie\nhollywoo dun\nhin man\nhard iness\ngul lion\ngo ka\ngigir ules\ngerald ine\nge tta\nfun ic\nfu gro\nfranklin tn\nfor am\nfatt oush\nesqu ina\nelijah wood\neck hardt\ndrive to\nde ok\nday long\nda er\nd allon\nculin a\ncu f\ncro sman\ncircular ity\nchub bies\ncho ko\ncere bro\nc wi\nbi zim\nbent e\nbe fits\nbangtan boys\narchang els\nam live\nam agi\naffe ct\nabbrevi ate\nðŁĶ¥ âĿ¤\nðŁĴļ ⾨\nðŁĮ «\nâĺº ðŁĴķ\nঠ¬\nzero ed\nzadi g\nyyj events\nyo ker\nwieg and\nwi en\nve snina\nvascon celos\ntrac tion\nti a\ntat ler\nsun tour\nsun dara\nsummer holiday\nsilve ira\nsie ger\nshrop shirehour\nshawn johnson\nsaad lamjarred\nren thusi\npurple heart\nproje kt\npro book\nout shines\nol td\nobstruc tionist\nnorfolk broads\nnj hs\nnigh trace\nnh primary\nmun is\nmin in\nmee eeeee\nmedial iteracy\nma ps\nma ill\nlittle italy\nliqu in\nlec tri\nle tv\nlady bower\nkuz co\nkot ze\nkor k\nklerks dorp\nkin naur\nkim dotcom\nkevor kian\nkarolin ska\njig en\ninu ddin\ninter link\nin ang\nim polite\ni euan\nhuy gens\nhugh son\nhel my\nhan ahan\ngri ddles\ngran ey\ngai ley\nfu cking\nfr angelico\nfor tran\nfar oes\nes band\nenew ton\neat aly\ndontt ell\nde mag\nde da\nde cryption\ncorri dos\ncom té\nclean and\ncheese maker\ncele stion\ncapu let\nbur ren\nbuck nor\nboh ème\nb dg\natre vi\nas mar\narchan ataide\nant iterror\nanee sh\nafai ers\nad busters\naar nold\n.... &\nÙģ ر\nع Ø©\nî le\nx av\nword fest\nwar p\nwag t\nw tofficial\nvor tic\nvan at\nval se\nv allen\nunright swire\nun changeable\nul li\ntro py\ntran sperth\nto yed\nthin gever\nthe troubadour\nthe iss\nt man\nsy on\nswag ga\nsuper her\nsu llen\nstarwars thelastjedi\nsolomon islands\nscri ven\nsb augh\nruf ford\nrock yr\nro er\nremain ders\nraise it\nq aid\npray in\npost codelottery\npin heiro\nor bach\nol lan\nny history\nnou man\nneville southall\nnapole ons\nmy friend\nmitt i\nmessi eurs\nmemor ised\nmb ro\nma hat\nlil it\nlal al\nko sam\nkill i\nkatery na\nji zz\njeremy renner\njar ome\nj swr\nindie gam\nhuman atm\nhl h\nhey dar\nhermaph rodite\nhell onwheels\nhau ge\nhalf girlfriend\nh silverstone\ngre sty\ngo braves\nge ir\nfern down\nfaw ley\nface off\nenvironment ca\nem ers\near bud\ne zz\ndecent work\nco sier\ncap lin\nbry and\nbri sca\nbra j\nboun der\nblu ep\nblair sville\nberk ner\naw sten\nas kaman\nari k\napar na\nag da\nab ati\na they\nðŁĴĸ ðŁİī\nye ast\ny kk\nwv pol\nwun na\nw jac\nuve itis\nuproo ting\nunder croft\nun interrup\nun frozen\ntwee tz\ntor v\ntam ping\nsteril isation\nstep by\nsports ground\nsn azz\nsky trax\nski bo\nsir pareshrawal\nshim s\nsamanth afaiers\nrall yargentina\npremier ships\nphoto copied\nphalar ope\npe ss\nos wego\nobac ter\nn inet\nmonstr ously\nmis st\nmi elke\nmer row\nmaz havil\nmanate e\nm ku\nlo ree\nlic ek\nle bel\nlam ing\nkou yate\nklu ger\nkk g\nkis sa\nkid de\nkear ney\nkathiel gifford\njohn reese\njaun ts\njason inthehouse\njap chae\nise man\nhar rah\ngroe schel\ngre ying\ngoogle classroom\ngear up\nfrequ ents\nfor r\nfon tane\nfoll lowparty\nesof tware\nen ema\nely gutierrez\neas thar\ndoes stuff\ndi arist\ndi anova\ndaily dose\ncor ri\nclean energyeu\nchim ed\ncal eta\nbrig it\nboyle heights\nboo gers\nbig b\nben aroya\nbean town\nbe good\nbad uk\nbac oor\nb dom\nanjel ah\nah le\nadiscoveryof witches\na ints\nðŁĩ²ðŁĩ ¾\nðŁ¤ij ðŁ¤ij\nyankee town\nwith you\nvil lew\nvi my\nvar di\nume boshi\ntrans africa\nton ino\ntj thyne\nthomas son\nthew lis\nteve rett\ntch rs\nsu es\nstar live\nsqu ito\nsinthe park\nse don\nrush olme\nred pointer\nreal paulwalker\nrazor fish\npositive energy\np tab\nou z\nopend at\nnottm hospitals\nn ze\nmile so\nmain tainers\nmain bhichow\nm pa\nm fr\nliv vy\njun kin\njas want\nina hyattworld\nin ating\nhr ds\nhartz ell\nha unch\nguillau me\nguil bert\nguer as\ngod first\ngibb o\nger ade\nforti eth\nflor iculture\nfix ate\nfashion post\nextravag antly\nelin asvit\nelinasvit olina\ne soc\ne east\ndares bury\ncour teney\ncorner house\nconqu erable\nclo ppic\ncl oris\ncharity water\nchap books\nbrah mos\nbol duc\nbobb itt\nbalsam o\nau tis\nant ler\nang one\nalison brie\nal ten\nal bari\naa de\na hero\na aryan\nðŁĴ¯ "\nìĦ± ê·ľ\nâĦ ħ\nر ÛĮ\nyennaiarind haal\nx aml\nwestside story\nwar li\nvul cans\nvilla hermosa\nval sad\nur ger\nu pr\ntweet dcs\ntropic alia\nti w\nthe ho\nten ancies\nsx swi\nstable coin\nsta ats\nsped ding\nsmith jr\nsea worthy\nsculp tured\nschak owsky\nrowland son\nre ha\nquick ening\npur in\noutback bowl\not ally\nold football\nodi yan\nneu bauer\nme he\nlie be\nlali tha\nko tak\nkari ma\nkal afina\njec tion\nje anna\njami ek\niv f\nis elin\nimperi ale\nim ploring\ngreen view\ngeroni mo\ngay lor\ngar der\ngar bage\nfree theni\nflun ked\nes wc\neng lands\nemanu ela\neas d\ndesider ata\ndanielle fishel\nd animation\ncw tvd\ncr k\ncounty champ\ncom pras\ncodepend ent\ncli entes\ncaw thon\ncamero ta\nbling bling\nbit c\nbelle fontaine\nbec kel\nbar ritt\nbally na\nb dn\natti yah\nan vil\namerican ah\nali w\nalge bras\nagchat nz\nag wx\nafer rera\nadverti sment\naccessto justice\n? ðŁĺĤðŁĺĤðŁĺĤ\nðŁĩµðŁĩ ¦\níĪ¬ëª¨ë¡ľìļ°ë°ĶìĿ´ íĪ¬ê²ĮëįĶ\næĽ ¸\nâŀ ½\nਠ°\nz solt\nyaz id\nyas sine\nwork shopping\nwater wise\nvlog mas\nvampire weekend\nv anga\nupthe blues\nuni fier\nun favourable\ntravel massive\ntram ways\ntr ng\nti bial\nther oot\nthe machine\ntann ers\nsub groups\nsu en\nstorm front\nstay high\nstag ione\nss afe\nspoo fed\nspace force\nsfr tg\nroman ians\nri per\nred mon\nred crescent\nre ur\npac is\np jc\not ley\nonly louisiana\noneyoung world\nog ham\nnr ma\nnick les\nngan nou\nnewcomic sday\nn mea\nmeta sta\nmcglin chey\nmcge hee\nmc goo\nmaxime bernier\nkol chak\nkn eller\njun d\njiofilm fareawards\nj sh\nj ip\nil do\ni ey\nhey den\nham burger\nhaash oficial\ngrimez sz\ngo far\ng tu\nek stra\ne of\ndéj Ãł\ndisney princess\ndemocr acia\ndel tabc\ndeduc ed\ndaim on\ncounty fair\ncon iglio\ncau ld\ncastron ovo\ncar v\ncap tive\nc sec\nbutterfly count\nbu bo\nbandi pora\nb wh\nb wf\nay ad\naw ns\nard ina\nangie martinez\nal phe\nacad music\naar yn\n; ...\nðŁĩºðŁĩ¸ !\nÎ ¼\ny ati\nwood brothers\nwinne mucca\nwillie bosshog\nwho what\nwassen aar\nward law\nwalt disney\nv sauce\nun grounded\ntric order\ntom ics\nto co\ntimessqu arenyc\nstipul ated\nstar cruises\nsquare pusher\nsoul silver\nsherrie hewson\nsand bagging\ns gas\nruf fudd\nrudy sarzo\nrobb i\nro fficialsite\nre shoot\nran ker\nraj neesh\nrac eland\nq nl\nprecipit ate\nover mars\nnul lar\nnu ra\nnan ase\nmsd n\nmicro pub\nman bookerprize\nmac ba\nma sud\nlun ardi\nleon berger\nl ve\nkel on\njewelry design\nil dan\ni kot\nhol sworthy\nhol beck\ngl ico\ngen z\ngan pati\nfriend ster\nfish finder\nfille ted\nfil mcity\ndu si\ndu der\ndram buie\ndor ange\ndon kin\ndol ans\nculture trip\ncros shair\ncor as\ncom ma\ncas sina\ncarth ag\ncar sales\nburk head\nbubble tea\nbr attle\nbol inas\nbell erose\nbeen leigh\nbar croft\nbach ar\nautograph ing\nat chi\nar dea\nade ts\nade sua\nðŁĺģðŁĺģ ðŁĺģðŁĺģðŁĺģ\nðŁĩ§ðŁĩ ´\nðŁ¤ĺ ðŁ¤ĺ\nãĥ¼ ãĥ¼\nâĸ ¡\nà´ ±\nzing ers\nwave splatform\nwa ag\nvas ari\nu chicago\ntran scoding\ntop end\nthe golf\ntex te\nterry branstad\ntar o\nstel ly\nsolo thurn\nske g\nsilver fish\nshot put\nsho g\nshi kar\nsch ange\nsc ort\nsac ro\nsac aja\ns del\nror ke\nro bor\nre casting\npsori atic\npopp et\nplu splus\npete carroll\npaulweller hq\npau gasol\npal ghar\noran more\no jh\nnutr itive\nneuro genesis\nnau gh\nmür ren\nmu ggins\nmis givings\nmilit aire\nmetabol ite\nmcgi vern\nmargol in\nmar ico\nl wv\nkirk sey\nke mayoran\nkc v\nk illion\njp gaultier\njes sphillips\njen ne\niam sterdam\nho cu\nhic ham\nham murabi\ngb highst\ng willi\nfran chot\nfisho s\nex trinsic\nes wat\nequip ment\nemol uments\nemo tionless\nearth gang\ndor ridge\ndogs rule\ndj awadi\ndistr acting\ndissip ates\ndiri gible\ndeflec ting\ndebut antes\nde mus\ndan soder\nd and\ncwa union\ncrusad ersfc\ncommen cer\ncase worker\nbur ling\nbul wer\nbrum bies\nben bow\nbatt ler\nau sting\nart galleryof\nano x\namerican pharoah\namerica east\nam ing\nakas aka\naig is\nah lers\nagor aphobia\naau p\naa sha\n?! ...\n" |\nyou bears\nyor ki\nye om\ny ahh\nwhipsn ade\nvec trex\nvale of\nv ran\nti econ\ntexas football\ntamron hall\ntag it\nt chs\nsurf life\nsu mal\nstru ct\nspa etzle\nskylar ks\nskul king\nse jarah\nschiz o\nrp bp\nro vere\nro ques\nreal music\nrap mag\nq amish\nplexig las\nplagi arizing\npiper perabo\norr ville\no bb\nmy ra\nmo ela\nmesoli thic\nmcgr ane\nmay theforce\nm hart\nlex ical\nlar ouche\nku wa\nkitti wake\nkim chiu\njesus lovesyou\nhit ler\nheritage openday\nhered ity\nhappybirthday harrystyles\nhan auma\nha den\ngrace potter\ngandhi an\ngallow gate\nfin barr\nfa asil\nf chs\nelen co\ndo that\ndha dak\ndel and\ndd t\ncon ci\ncon al\nco sham\ncatal angp\ncastle island\ncant wait\nbucket list\nboat wright\nblit ar\nbisch of\nbig love\nbee ching\nbarri entos\nameric aferrera\nam bling\naig burth\nðŁĺįðŁĺĺ ðŁĺį\nðŁĺĤðŁĺŃ ðŁĺĤðŁĺŃ\nðŁĴĹ ðŁĺĺ\në°ķ ìļ°ì§Ħ\n௠Ĥ\nпод вод\nye pp\ny su\ny fc\nvande grift\nu oc\ntw on\ntony hinchcliffe\nton elli\nthem here\ntennesse etitans\ntaylor r\ntanker sley\ntang i\nsul fates\nsong lines\nsolihull hour\nsk ratch\nsi so\nseab l\nscu ffles\nscarl atti\nsand u\nsan sui\nroh ith\nro erig\nreal don\nre thought\nquant it\npo zi\npillow cases\npatricia heaton\npark hyatt\nopti que\nod pp\noch sner\nnighting ales\nnaz ario\nnab j\nmy fm\nmmmm mmmmm\nmir inda\nmil roy\nmein l\nmater azzi\nmarshab lackburn\nmarsha ambrosius\nmar isol\nma shab\nlu le\nlabour ing\nko dy\nkil birnie\nkal pa\njone sc\nj ato\nisch gl\nirre vocable\nir c\ninte res\nid pd\nhapp year\nhan sford\nguer rill\nglu te\nfu uka\nfriday feels\nfor you\nfeelthe force\nema k\nell ondon\ne schen\ndin u\ndep tt\ncop yed\ncolum nar\ncherokeen ation\nche wer\ncantin flas\nbristo lian\nbig wet\nba shy\nart photography\nai ki\n.. ?!\n. âĻ¥ï¸ı\nðŁĺł ðŁĺł\nåĨį çĶŁ\nâķ ij\nzee studios\nzebra wood\nz aida\nwal demar\nw sd\nver b\nun characteristic\ntra vie\ntimp act\nthe orange\nthe dorchester\nt music\nswis salps\nsu prabhat\nspar ker\nshi han\nseduc tress\nsec or\nsciento logists\nscan dies\nroman tique\nro q\nrmb aloncesto\nril les\nri sas\nren hotels\nqueens borough\npretty lights\npon er\npatt naik\np elion\nniobi um\nneon atology\nnag ios\nmrolym pia\nmoon band\nmon u\nmon ong\nmisanthro pe\nminim oog\nme ia\nmat aro\nmai k\nmach us\nm uring\nlu mping\nlittle monsters\nleann rimes\nlang at\nland mass\nla vy\nky gov\nkoky anaamdoon\nkirk hammett\nk bp\njl h\niq iyi\ninfin itive\nide sof\ngo cavs\nfran ko\nfo de\nex ome\nem mert\neldor ado\neast wards\ndu gas\ndr k\ndi awara\nde pendant\nculture matters\ncresc enta\ncom fy\nchristopher son\nbonesh aker\nbel u\nbanan afish\nau ty\nale ssa\n! ""\nðŁijĪ ðŁı½\nðŁ¤ ļ\nwoo dies\nvulcan ized\nuofl football\nun wieldy\nun truths\nud t\ntradition alists\nthe meadowlands\nterror ise\ntar ar\nsunnin ghill\nsu be\nstevi evan\nsonuk akkar\nsond heimer\nsmall z\nsen berg\nse bel\nschir mer\nsang u\nsam pal\nsad ak\ns gurr\nrock liffe\nri ou\nreverber ation\nreck oner\nre focusing\nrand corporation\nra stas\nra gione\nquer cu\npush up\npru center\npr icking\nplant is\npi att\npd as\npas ka\npark life\nmoss yoak\nmarke ta\nlo ev\nligat ures\nleu cadia\nlam es\nl js\nkur us\nkos suth\nkore l\nkne eled\nkar le\nkam ini\njonathan rea\njan ke\nj lt\nj hms\nhepworth gallery\nguic ruzzz\ngetting old\ngent a\nge tyou\nfriedrich shain\nfast cars\ndol ton\ndignit ary\ndavid luiz\nda rel\ncyto kines\ncrab meat\ncounter weight\ncontaineri zed\ncont ango\nco senza\ncn trl\nchris gethard\nchon dr\nbudd h\nbrun dage\nbrook lands\nbron i\nbre vis\nbiz expo\nbiomed central\nbin ational\nbeat yesterday\nbar onet\nbad shahi\naza dis\naster aceae\nap aka\nann an\nalgon a\nðŁĴķ ðŁĴĸ\nå® ī\nË Ĭ\nwin now\nwes thigh\nvo lei\nvi tha\nvi kapoor\nven to\nvan hoo\nuuuu u\nusas wimming\nu spolitics\nu bos\ntru ant\ntrans mutation\ntom waits\ntheatre sports\nthe billy\nte viot\ntat asky\nta ve\nsub verse\nsonny rollins\nsho review\nshadowhun ter\nsand akoz\nsan ad\nroad atlanta\nric cio\nrac isme\nprin c\nport arlington\nplay things\npeu geo\nper man\nom ark\no tomo\nnotice board\nnin ang\nnegre do\nmusc leman\nmur fit\nmis behaved\nmini gun\nmicro glia\nmaz dac\nmand vi\nman bear\nleon ardi\nkil martin\nkam es\njand k\nja bez\nishq mein\nis dn\nirration ality\nioang ruffudd\ninsol ent\ni ç\ni pr\ni fac\nhit ches\nheff ner\nheff alump\nhan ge\ngo valpo\ngir dwood\ngal vis\nent reprises\ndundee unitedfc\ndom esday\ndissol vethe\ndis believe\ndi santo\ndesal vo\ncolo stomy\nchocolate week\ncathr ine\ncarto graphic\ncan ed\nbli ps\nbeau dry\naus able\natlan ti\nash well\nani ven\nalth off\nall ender\nal ini\naden osine\naber foyle\nðŁĺĤ ðŁĻĬ\nðŁĴķ ðŁĴļ\nðŁı ŀï¸ı\nðŁİĤ ðŁİģðŁİī\nìĿ Ħ\në±Ģ ë±Ģ\nãĤ¹ãĥĹãĥ© ãĥĪãĤ¥\nà¹Ģà¸ŀ ล\nyoure in\nyou ku\nwor csc\nwhite supremacy\nvisit lancashire\nver steeg\nun desa\nuk hi\nu caas\ntrin arock\nto whee\nteu fel\nterrori zes\nsy ms\nsunba ther\nstron ach\nstreeter ville\nsl una\nskill sfor\nshahb az\nse up\nscul lers\nschro ders\nsch wantz\nsar gento\nsan ae\nri ghetti\nrevital ised\nrat nani\npo pple\npo logne\nplin ths\noccip ital\nnau ta\nnau mann\nn jea\nmusta fi\nmovie maker\nmit u\nmindless robot\nmichel inguide\nmay ang\nmandar ins\nm fc\nly th\nluch adores\nlido caine\nles bleus\nle it\nkor cula\nkitzbü hel\nju ls\njoh ana\nimp ale\ni zi\ni ed\nhig bee\nhay war\nhappybirthday zayn\ngrati fied\ngne iss\ng delaurentiis\nfran son\nfood network\nflw fishing\nfijir ugby\nfe mm\nfe ile\nfas si\nfar zad\nfa aa\nf mn\nepic o\nent ures\nelu ding\nelse car\ndundur n\ndemor alizing\ndago bah\nd we\ncros shaven\ncor of\nclu mpy\ncare ful\ncar bajal\nbern ays\nbeat ntds\naven ged\nasun rise\nan halt\nalizafar says\nah art\nðŁĺ± .\nðŁĴªðŁı¼ ðŁĴªðŁı¼ðŁĴªðŁı¼\nðŁİĤ ðŁİīðŁİĪ\nâĻ ¢\nภ¨\nwra ith\nwomb well\nwil hite\nweigh bridge\nus b\nuaap cdc\ntrophy tour\ntran sal\nth abe\ntele marketer\nsylvani an\nstrat fest\nstrand berg\nstran sit\nss mith\nspo li\nsoori official\nso jisub\nso fun\nskarsg Ã¥rd\nsec chi\nse les\nsau ls\nric hy\nrem sen\nrece ded\nra su\nra dd\nproud foot\nprin ses\npot light\npnn lab\npas os\npar nelli\npaol onu\npaolonu tini\npa ek\noy akhil\no skal\no india\no del\nnu ovi\nnisar gad\nnat lib\nmor taza\nmodel monday\nmbe ya\nmash rafe\nmag adheera\nlow sky\nlow ball\nlife buoy\nlabour leadership\nkun u\nkham oshi\njun jud\njunjud api\nhaz els\nhan wha\nguinnessi reland\nglobal forum\ngibb ins\nescape from\nel ayne\nec at\ndru mmed\ndis member\ndi baba\ndare devil\nd cast\ncrowd strike\ncrow thorne\nclare morris\ncho va\nchel seab\nche ka\nce zar\ncat cher\ncar du\ncanon sburg\nbru yn\nbrace well\nbil lable\nbee ing\nbarnar d\nbal ers\navi o\nat tune\nashion week\nash our\narde che\nanjelah johnson\naishat yler\nðŁĶ¥ :\nãĤ¹ãĥĹãĥ©ãĥĪãĤ¥ ãĥ¼ãĥ³\ná´ ħ\nzi b\nz iller\nwry golf\nwhipper snapper\nw als\nvad er\nunder takings\ntyger berg\ntreecre eper\nthe east\ntam am\nsun bed\nstick ney\nsoli daire\nsk rull\nshock oe\nshanelo wrygolf\nsen ne\nschle swig\nsagan aki\nsacaja wea\nsab ai\nrod ley\nri jk\nre organising\nre locates\nration ed\nrat tail\nr tbf\nr mh\npolyam orous\npitt sylvania\npe ated\nparamahan sa\nni evera\nne in\nmorning smaria\nmoral ising\nmoon spell\nminiaturi zed\nmetho dically\nmd l\nmay field\nmanife st\nlie bert\nlech lade\nlean up\nlar occa\nla ggan\nkazi mir\njer onimo\njam una\niri she\nidhun amma\nic sd\nhigh road\nhakk asan\ngc pd\ngator ade\ngar ro\nfelici ana\nfe igned\nenbau ms\nek kle\neber hardt\neastern most\ndo bre\ndefe cting\nde fusing\ncyclo tron\nco enzyme\nchu bb\ncasu arina\nc mail\nbranden burger\nbi oc\nasi va\nash uto\nani ban\nage ar\nab un\n. ðŁĺĶ\nподвод нÑĭй\nze alandia\nzach ery\nwelcome tom\nuu ren\num hb\ntur chin\ntor mo\ntin chy\nti ousness\ntel ah\nteenmom og\ntan gos\nswag gy\nsw illing\nston king\nsti fler\nstable mate\nss d\nsle h\nsky walker\nsketch app\nsi ska\nshipla ke\nscore hero\nschiz o\nsaun dra\nsahi vikas\nsag ra\nri ppy\nrepre ssing\nrel ic\nrecor e\nradi ant\nproud papa\npreston pans\npracticemake sperfect\npoinset tias\npierref onds\npen tru\npeep s\nosa urs\noni press\no ãĦ\nni j\nnhat rang\nn ones\nmy music\nmv coup\nmu erta\nmodul ates\nmikeand mike\nmicro bio\nmarcu slu\nmaneu vered\nkent land\nkas sy\njer o\njeffree star\nit sas\nira e\ninfu ses\nimpeach trumpnow\nim pel\ni jaw\nhat boro\ngoli sano\nfe il\nextric ate\nemper ador\nemili e\necto plasm\nec olabel\ne io\ndot na\ndin smore\ndess ins\ndele veraging\ndaily pic\ndag gubati\ncut back\ncraniosac ral\nchom p\nchi ke\nchau dry\ncargo bike\nbozz io\nbonec rusher\nbat is\nband ari\naz traffic\nartic le\namo del\nair link\nade x\n? "...\n<<<< <<<<\nðŁĶ¶ ðŁĶ·\nਠª\nx om\nworm holes\nwhite shark\nwau pun\nwade barrett\nvol z\nvbmplong march\nun wed\nuc ce\ntugend hat\ntric hot\nthunder showers\ntempor e\nteacher goals\nsun trust\nste ins\nstav ing\nsh moo\nscot amb\nrunder ful\nrock castle\nrobo call\nroalddahl day\nric ke\nreign iting\nrafa ell\nra yed\nra jo\nproject manager\noyakhil ome\now ska\nobse sses\noat lands\nnavi star\nnatwest business\nnational popcornday\nnas sp\nmn cs\nmn as\nmi qu\nmetal lo\nmer rett\nme tha\nmat y\nmarlin spark\nman gi\nman ette\nm kc\nlongh and\nlong now\nli aqat\nlam son\nko han\nket cham\nkel tner\njob sat\njer seys\nindi um\nin ay\niam harishkalyan\nhate ley\nhare di\ngreen arrow\nfran go\nfoodi sta\nfili bu\nfil invest\nfi endish\nfarru gia\nfan ad\nfair less\nen us\nelo c\necuad orean\neasing wold\nduncan bannatyne\nde ese\ncytok ine\ncum by\ncro xley\ncoopuk food\nchee z\nben im\nbai le\nau le\napic tures\nah madre\naf fil\nacuer do\nabandoned places\nðŁĺĶ ðŁĺŃ\nÓ Ŀ\nподводнÑĭй миÑĢ\nwater buck\nw ami\nunitedin blue\ntson gas\ntin z\nthe affair\nteng gara\ntani shq\nsym bology\nstevievan zandt\nstere k\nstaff pick\nsahy ounie\nroyal acadmusic\nro ach\nriz la\nrefin ements\nred rum\nre processing\nre eva\nrann vijay\nradio logy\nr ble\npro series\nper ju\nover lapped\nonair now\nobserv ances\nnumen era\nnhsor gandonor\nmt leg\nmissteen usa\nmiseleccion mx\nminer alization\nlow enthal\nlo presti\nlhu illier\nld an\nlay ne\nki we\nkewau nee\nkeep it\nkas ol\njonsnow c\nj ast\nj ale\nirish wildlife\nindi anoil\nil san\ni ai\nhu c\nhiday ah\nherecom esthe\nher sch\nhal don\nh sps\ngn ome\ngg n\ng wi\ng abo\nfu vah\nflag poles\nfi ala\nfab y\nessential classics\nem all\ndon da\nding bats\nde vens\ncor ra\nche tan\ncelluc or\nc its\nbutton wood\nbrow ser\nbracken ridge\nbloc party\nbis ola\nbig ja\nbhu m\nbey er\nbell am\nbeg at\nbe sant\nbb w\natt proam\nar ar\nal ao\nab la\n/ Â¥\nðŁĻĦ )\nðŁĺį ðŁĺĭ\nðŁIJł ðŁIJŁ\nðŁĮ ĸ\nâľĭ ðŁı¼\nye go\ny xj\nwindo wed\nwain sco\nw ady\nuvamen shoops\nun dip\nu bd\nu ach\ntrump crimefamily\ntrinarock starr\ntoddler life\ntl ach\nthe arvindswami\ntattoo fixers\ntad ley\nt mall\nsurfact ant\nsun aina\nstur te\nsteg ner\nssi m\nso an\nsilen cers\nshar pei\nse anie\nru inous\nrobert semma\nre mar\nrachel hel\nrachelhel devans\nqui les\nplussize fashion\npl one\npin pointing\npark man\npad arn\np ty\nosric chau\noskal oosa\nor adea\nof art\nnov ation\nnfldraft news\nmoon alice\nmizzou made\nmillon arios\nmelt downs\nmell on\nmeant tobe\nma daya\nlu cks\nloy ello\nleic s\nle ks\nlater ally\nkyl erichards\nkopp elman\nkanna digas\njoseph capriati\nji bes\nint ouch\nihear tt\nhay tor\ngrowwith stpi\nghost of\ngang bang\ngalactic os\nfull sail\neul alia\ner ot\neast england\ne oe\ndelicious ly\ncrew kerne\ncom pi\nck m\ncaver na\nbon eta\nbeverly hilton\nbee by\nbe ber\nbank ole\nasil omar\narctic council\nall wood\naldub birthday\n.... ..."\nðŁĺį ðŁĴ¦\nðŁĺģ ðŁĺİ\nðŁĵĨ :\nðŁ§¡ ðŁĸ¤\nà¸ŃภŃ\nÌ ´\n ¤\nwis ner\nw acc\nut sw\nu dr\ntravel port\nthene igh\nthel ine\nstor ck\nspir aled\nspar ling\nsp ackle\nsopra se\nsham il\nsal ata\nrosen stock\nred devil\nre hn\nr pv\npy ra\npy ar\npier das\npav elka\nor ac\nonthe way\nold times\nnuern berg\nnola prep\nnever stop\nmoon ey\nmom ot\nme ul\nmar n\nkuni yoshi\nkun ti\nkoz lov\nkis o\nkenneth cole\nkat ty\njabharrymet sejal\nist at\nik ongallery\ni shaq\nhimantab iswa\nhigh sch\nhead butts\nhan ley\nhairy bikers\ngood lettsville\ngol s\ngi olito\nge bauer\nfidge ting\nfen elon\nextra solar\neu logies\nelectro cute\neis ele\ned dine\ndan s\ncro cker\ncre wd\ncr illy\ncolin donnell\ncin eloka\nchild wall\ncas par\nbridge way\nbounce tv\nblack ledge\nbir an\nbb itt\nbail outs\narty r\nal tin\nabkhaz ia\nðŁĺŃ ðŁĴĵ\nðŁĺī ðŁĺı\nãĤ° ãĥ©\nâĿ¤ï¸ı ðŁĻıðŁı¼\nâĿ¤ ðŁĺĤ\nี à¹ĭ\nye ti\nwood fin\nwkr g\nwin ker\nwi ft\nwi arton\nwhatmake syou\nwest gate\nwar of\nwahy u\nw ado\nview port\nvic kie\nvi u\nvi as\nversi oning\nva den\ntri gga\nthe wil\nthe len\nthe fca\nth off\nth iran\ntes da\ntart arus\nt kc\nsy oung\nstro ked\nspring fling\nsil vere\nsi q\nseed sof\nsche idt\nscavenger hunt\nsav as\nsa aksh\nru die\nru bus\npy g\npure foods\npro quest\npl eno\npin as\nour met\nor yan\none chicago\nny gard\nnbc s\nn inju\nmy nameis\nmy mt\nmovement detroit\nmil f\nmary popp\nmary kom\nmar ym\nmaine alden\nlu tte\nlon za\nlin en\nli isa\nleav en\nk com\niron hide\nil os\nif j\ni yd\ni bey\nhill topper\nham al\ngro per\ngo big\nflye thiopian\nfli ms\nfar rukh\nemolli ent\nel debarge\ndu by\ndoo cy\ndal gle\ncopp aitalia\ncon court\ncoco bolo\ncare ssed\nbrang wyn\nbig blu\nbid vest\nbi ondo\nbhav ya\nbernar dini\nbalas ore\naster ia\nasse h\nargent a\nar cham\nappel baum\nant miner\nan var\namuse ments\namer urological\namali earena\nalo dia\nalmost there\nall americ\n- ?\nðŁĺĥ @\nwap iti\nw snc\nvigne ault\nuscen susbureau\nug av\nu press\ntrichot illomania\ntoc tober\nthat guy\nterrel lowens\nteam hisd\nsynth ase\nswi hart\nsun de\nsky blue\nsel znick\nse folo\nsefolo sha\nse ds\nsal aam\nsaf dar\nrunderful runners\nrubik scube\nru tan\nrh statton\npotro juan\npitten weem\npho tome\npa ese\nnot man\nnational vegetarianweek\nmu rex\nmember ship\nmeh endi\nmax carver\nmarriott intl\nmar ck\nmagne site\nm scs\nlise berg\nlin ge\nlimit less\nle long\nlaughing stock\nklu ang\nkemp o\nkeep fighting\njas mina\ni wat\nhor field\nhen nigan\nha ag\ngun valson\nguin an\nglori atrevi\ngirls frontline\ngat as\nfu chi\nfri er\nflavor wire\nfish ball\nfar point\nende ared\nebay uk\ndun laoghaire\ndis regards\ndel t\ndel potrojuan\ndeb p\ndavi di\nconceptu alize\ncoeli ac\ncheese makers\ncas eload\nc thul\nbrit vic\nbe tech\nbb unker\nballyfer mot\nbab bler\nati veness\nary digital\nangel candice\nang lian\nam yl\nae wrestling\nadel mar\nad li\naction aid\nach am\nðŁĻıðŁı½ âĿ¤ï¸ı\nðŁĻı ⾨\nðŁĮŁ ðŁĴ«\nweet suk\nver mark\nve mma\nve iling\nva sek\nud mila\ntre orchy\nto prank\nthen ba\nthe science\nter ps\nswild things\nsugar beet\nspyro reignitedtrilogy\nsie ber\nsheryl underwood\nshe inspiresme\nsed aka\nse pan\nschau m\nsam ael\nsab on\nryn ism\nroo ves\nri zo\nreal adam\nraz il\npo per\npas sio\npark chat\norochi maru\noqu endo\nnycw ff\nneem rana\nnadias awalha\nmol loy\nmis interpret\nmir alles\nminoc qua\nmesc lun\nm ellis\nlovel ive\nliber alisation\nlangou stine\nlan vin\nkubernete sio\nkro on\nkor ay\nkk ad\nkha itan\nkart al\nk vad\njoy riding\njon antoine\njas pal\nisrael ic\nin man\nic sc\nhyper mobility\nhu main\nhu ac\nhomelo an\nhit en\nhalit osis\nh illa\ngra ves\ngher itage\ngeo duck\ngarages ale\nfi dm\nfac a\nf wd\nf ali\neskil stuna\neast west\ndro m\ndo bell\ncross border\ncrisp us\ncontr ite\nconstan za\ncon ca\ncommitt ment\nci for\ncher now\nbuil tin\nbr arian\nbo dil\nbla sian\nbirds all\nbe chara\nb é\natu ta\nar land\nar ka\nallianz stadium\nachaem enid\na aco\nðŁĺĤ âľĮï¸ı\nãģķãĤ ĵ\nye vadu\nworld milkday\nwil den\nwest town\nwest by\nweh ner\nware ing\nvi aggi\nv liss\ntrack er\ntoom bs\ntonight show\nton yy\nthick ly\nthe vault\ntexa shoo\ntab o\nstri de\nsri rang\nspice works\nsm pte\nship board\ns feld\nru shin\nro sol\nri var\nretali ates\nreal chalamet\nre ves\nre state\nrand azzo\nquadr illion\nparticul ates\nom okri\noc allis\nnr r\nnobu o\nmonong alia\nmis behavior\nmicro cephaly\nmedju gorje\nmassimodu tti\nmaso chism\nmangal am\nmag con\nmaced onians\nlong sword\nle claire\nlan the\nku ril\nkoz ma\nk wwl\nk wes\njer kin\niv on\nim bolc\nhudders field\nhor tense\nhin tz\ngire sun\nge ting\nfun kier\nfu buki\nfo cke\nfa hr\nexpress yourself\nexplorey ukon\nen ns\nen contra\ndouble speak\ndi xi\ndev as\ndespo tic\ndec ke\ndab i\ncr ys\nconfidenti ally\ncolombi ano\ncj mccollum\nca ston\nbul ba\nbre land\nbrah mi\nbio solids\nbio logical\nber rington\nbax ley\nbarn door\nbare footed\nau slan\natri z\natlan tico\narm wood\nanim ates\naf corse\nac tavis\n.. ]\nâĤ¬ !\nwy theville\nwind jammers\nwater vliet\nus bank\ntu ban\ntom leykis\nthe place\ntaxider mied\ntan guay\ntad deo\nsub human\nsu desh\nst place\nspy aar\nspo sed\nsouthland strong\nsou chong\nsno rer\nsk ene\nshor tener\nsh aus\nseavey daniel\nscra ppage\nsch angelives\nsar ad\nremo re\nram c\nra wn\nprofe sses\nphara onic\nnaro oma\nmyst ere\nmycen ae\nmichal ka\nmicha elian\nmetal ocalypse\nmed wick\nmar lyn\nmanu va\nmah fouz\nm vula\nlov att\nlem w\nlele pons\nlax ey\nlam beau\nkian ow\njyo thi\njy h\njorgen son\njeric o\njamesp ure\njah n\niz a\nharmon icas\ngreen vale\ngin der\ngeorge monbiot\ngang plank\ng ice\nfu ggin\nfresh fish\nfollow meand\nfelic itate\ne still\ne bit\ne ath\ndero ssi\nde cameron\ndaily pick\ncon gis\nchath iram\nbow fin\nbournemouth uni\nbor sch\nblack down\nbeach resort\nbe anie\nban ani\nas mita\nar ses\naqu ad\nal gos\nadam sville\n? ðŁĺİ\n" ."\nðŁĵ· ðŁĵ·\në°Ķ ë¹Ħ\næ¨ ª\nà¤ľ र\nyo gat\nyellow legs\nx radio\ntearsfor fears\nsw op\nsunnyside oflife\nsunday dinner\nstony hurst\nspartan up\nsj now\nsivan anda\nsaro yan\nsar p\nre buffs\nquint al\nplac ate\npl and\npic co\nphill yd\nor folk\nnol anews\nnationaldayof prayer\nmom oka\nmas vingo\nmandi bular\nlu kel\nli ppe\nli pari\nkwe se\nkon jac\nkappa alpha\nk rin\njames brown\nhoru sheresy\nhen ares\ngv l\ngu ba\ngo dric\ngar ve\nfriday vibes\nfree tips\nfood court\nenergy ctr\neclip tic\nec fa\ndom atic\ndiom edes\ndin ars\ndigital is\ndesper tar\ndark chocolate\ncapy baras\nbrexit chaos\nbr st\nboxingh istory\nber ga\nbeauty ful\nbang ali\nbal wyn\nbal ay\nback house\nbaby care\nb worldph\nazz edine\nann ville\nal or\naar ushi\n! ðŁİĪ\n! >>\nðŁĽ ©ï¸ı\nðŁĺį ...\nðŁijħðŁijħ ðŁijħ\nðŁ¤ĺðŁı¼ ðŁ¤ĺðŁı¼\næ° ´\nචļ\nyo av\nyearofthe pig\nx fc\nwin chelsea\nwal pur\nw car\nvere enig\nvau k\nus lacrosse\nu bie\ntoku gawa\nthe cityof\nterry mcauliffe\ntech republic\ntar ana\nstou ffer\nsm ps\nsi mus\nshro shan\nshe at\nridd hi\nreg ar\nread up\npu le\npro sumer\npro log\npo ise\npm kk\nphyto chemicals\npay with\npan agi\non do\nolivi ad\noke reke\nnicholash oult\nmuseodel prado\nmur gatroyd\nmunchau sen\nmol ite\nmicro chips\nmar yan\nlino type\nkne en\nkarti ka\njen kirkman\njeet endra\njaguar uk\nis spyaar\nin ko\nilove him\nillino i\nhydrochlor ic\nhu ws\nhome opath\nhigh grove\nhell yer\nhar tono\nhar ol\ngur preet\nguil tless\ngin oclock\ngari ff\nfuri ous\nfried berg\nform ichetti\nfood market\never ts\nesp ie\nepo que\neco logy\neast anglia\ndom swildthings\ndam nnnn\ncraw daddy\ncommen sur\nchab ahar\ncan ecor\nbox all\nboing boing\nblack canary\nbear de\nbake ware\nb schweinsteiger\nayush man\nauckland uni\nad wa\nabdic ate\n???????? ???\n: ^\nðŁĩ§ ðŁĩ¦\në© ´\nÊ ľ\nwood lot\nweare lebanon\nut sw\nto ona\nticketmaster ire\nthe boat\nte vis\nsverd lovsk\nstra ÃŁe\nso bol\nsi aya\nshab at\nseat on\nschle ck\nscan ty\nroyal marsden\nri ki\nri bas\npole mic\npig spotter\npi mi\npi ave\npf dj\nped doc\npe urope\non kar\no wino\nn ali\nmun dra\nmc w\nmali q\nluci da\nlanc s\nkus inews\nko y\nko ech\nke okuk\nkali sta\nkale em\nju icec\nise tte\nio dp\ninchic ore\nin shape\nic ade\nhuck aby\nhones dale\nhann u\nha vet\nglobal port\ngl v\ngess ner\nfood por\nfi di\nfathom events\nfan cast\nfaceto face\nev g\nepic mealtime\nel sey\nel oping\nek strom\nego centric\ne red\nduter te\ndil f\nder ms\ndback s\ndam u\nda si\ncy ma\ncul po\ncu ca\ncro hns\ncamo zzi\ncaer philly\nbt sout\nbrum ley\nboy yyy\nboro on\nbook selling\nbig al\nbel go\nbar soom\naz oid\naver maet\nash bery\narun del\nar mine\nar anya\nanthe mic\nam mann\nall smiles\nak dha\nab sr\naal st\n⼠¸\ná į\nyo z\nyan an\ny reka\nwitchesofeast end\nwedne sfield\nweare somerset\nvote on\nvir now\nvi anna\nun amid\nts live\ntre gi\ntonik roos\ntiti ously\nthe af\nten enbaums\ntas neem\ntapp reciationday\nt pw\nsuper conductivity\nsub tweets\nsu render\nstor ify\nspor tier\nsma son\nsimply thebest\nside real\nshiny pokemon\nsher bourne\nsaty ricon\nrule making\nrid doch\nri ving\npu lli\nor le\nnon such\nmy din\nmolca jete\nmirwa iz\nmin yan\nmile sa\nmar imo\nma it\nli mi\nlevi en\nlang er\nlam i\nla vern\nkirk wood\nkir aly\nk lansman\njun cos\njoy pad\njoy land\njo akim\nit slav\nirish men\nic eni\nhum drum\nhound mouth\nho palong\nheu ston\ngu u\nglan mire\ngas ometer\ngamer tag\nfried land\nexplic ation\nend stigma\nemm ure\nemili aclarke\nel bowing\ndic kel\ndeli st\nde oxys\ncyber threats\ncrou p\ncor reo\nclark stown\ncharli ecox\ncham ploo\nceland ine\ncar rel\nbren den\nblo que\nbir m\nbha sha\nbake sale\nalbum launch\nabo ttle\nab loy\nîIJ Ķ\nâĺĢ âĻ¥\nyam asaki\nwrit es\nwhodares wins\nwhi ther\nw punj\nw lb\nvoron oi\nvo th\nventur ini\nvat ica\ntom u\nthree peat\nthereal deal\nthe spy\nth ant\nsuper sized\nsun ited\nsu kan\nsqu ely\nspher ion\nspd way\nsker ritt\nsk ook\nsher borne\nsen tertainment\nsam is\nsa kov\nrou leau\nroh nert\nrad bury\nra var\nquadri foglio\nportugu esa\npipi stre\npetro leu\noutri ders\norn stein\noccul tist\nmsp bj\nmr sc\nmou awad\nly ons\nlove animals\nleibo witz\nlam otta\nkam lesh\nkach a\nju tro\njeopardi zing\njasmin bhasin\nira p\ninterro bang\nhor y\nhome towns\nhaul in\nh sy\nh ll\nguacam elee\ngu adi\ngi di\nfreedomo fexpression\nfred hutch\nfoun din\nfore stal\nfor justice\nfile sharing\nfe alty\nfati ma\neast ville\ndream ies\ndio ts\ndi yar\ndi bbs\ndes sus\ndemon puppy\nco bar\nchry soprase\nchan soo\ncall out\ncali gari\nc fas\nbo pping\nbio data\nbin son\nbil dung\nbig money\nbell field\nbd world\nbce fa\naver n\nar ice\nan cur\namb ition\nale wife\nag uri\nadrien broner\naarhu suni\nðŁĺį ðŁĴ¯\nâĦ¢ !\nà¹ģภķ\nza j\nwith ings\nwau seon\nugandac ranes\ntux edos\ntr ung\nto z\ntin u\nthegro vela\nthe csp\nter f\nsunds vall\nsty lers\nshirt waist\nshel ar\nsecon dam\nsea field\nscele br\nsar aya\nsalu brious\nru fino\nru dhram\nri ott\nrc ds\nrajkum mar\nra don\np ity\not su\nofficial gtfc\no gg\nny nj\nmosthand some\nmor se\nmoon walkers\nmikha ilo\nmethus elah\nmans ard\nmal one\nlumi ère\nlo visa\nlin as\nlift ing\nleg omar\nk sa\njosh ritter\nintran ets\nindent ation\nhv m\nhin ck\nha gg\nha dir\nguide dog\ngu ymon\ngreen town\nfro man\nfriday funny\nfilm day\nfalcon srugby\nen q\nefferve scence\ndi wa\ndeli us\ndefin e\nde cker\ncrow child\ncor ks\ncoelac anth\nchi ku\nchi eri\nbrian ab\nbreast feed\nbrand er\nbrainfe eder\nbra il\nbol am\nbassen thwaite\nannihil ating\nangel in\nag ala\nðŁĸ¤ #\nëĭ Ŀ\nà¹Ģภŀ\nzz era\nza rena\nx ambassadors\nvon der\nunder studies\ntaste ofthe\ntal pur\nsummer all\nsudden link\nstarfish club\nspro ducts\nship ti\nse ite\nscot papers\nsc pol\ns br\nrw u\nrajah mundry\nr dio\npur ush\npolicy holders\npit an\nphotography lovers\npal lette\noz on\nou zel\norgani sts\nnu hu\nne pon\nmuk bang\nmilk music\nmegab ytes\nmap quest\nmake s\nlux or\nlow enstein\nlake street\nk dfw\njessic abiel\ninterpret ative\nin audible\nhuiz enga\nhil dy\nherz liya\nhelic onia\nheil bronn\nhead e\nhal se\ngrid ded\ngin osa\ngiller prize\ngeo tv\nge vent\ngath bandhan\ng eli\nfollowmeand lufc\nfocu srite\nfo kin\nflaun ted\nfist fight\nel ol\ndesh on\ndemo polis\ncu zin\nchil lum\ncataly zing\nboy ko\nbeet z\nback logs\nar il\napple man\nang ou\nan jani\nabu jat\n.... ...@\nðŁĴĹ ðŁĴľ\nðŁĮº @\nyoak erson\nyam pa\ny azi\nwood loch\nwol stenholme\nwip joy\nwinner winner\nwild trails\nwendy davi\nwendydavi stexas\nwar ped\nvo guing\nur yn\nu rock\nturf care\ntow ler\ntimpano gos\nti gran\nthic um\nthear can\nthe charlatans\nte var\nsuper delegates\nsu er\nstar there\nst event\nsri kak\nsk iss\nsingle because\nsin chon\nshadow lands\nsea ice\nse gi\nsb g\ns see\nrally cars\npott sgrove\npan macmillan\nonther un\nonec lick\nomar ket\nnewhol land\nnbc u\nna dez\nmusc ari\nmel loyello\nmedic om\nmcen ery\nlu mut\nliveonk val\nl win\nkro p\nkogar ah\nkind l\nkiller instinct\nkap ten\njustin amash\njohn lewis\njamespure foy\nindvs ban\nhydr onic\nhud ler\nhoo fs\nhome boyz\nhom ero\nho c\nher ms\nhavasu pai\nhanni fin\ngu avas\ngr itz\nglam bert\ngen bosch\ngadgets now\nfoh len\nfive ways\nfin ian\nextra it\nen dimp\nelong ate\nebol are\neb be\ndu dh\ndor st\ndj arum\ndishon our\ndee boss\ndaysof halloween\ndan c\ncullo whee\ncu ts\ncorstor phine\ncomp ere\ncommittee man\ncomeon england\nclay mont\nchin moy\nchild health\nchar cade\ncapsaic in\nboulang erie\nbosco v\nblo lly\nblack stars\nbir bigs\nbigja yoakerson\nbapti stery\natre ya\nascle pias\nare la\nar bs\nad elie\nabre w\nðŁĴĥðŁı¾ ðŁĴĥðŁı¾\nç¾½çĶŁçµIJå¼ ¦\nâĺº ðŁĺį\nಠµ\nzuc cotti\nwitch finder\nwester feld\nw azi\num ni\ntri pple\ntr ons\ntou bkal\ntom ikoshi\nthese days\nten dy\nsummer inthecity\nsp sp\nser ch\nser ata\nsch ola\nsauer land\nsar rac\nsaal bach\nrufu shound\nretail tech\nreign fc\nray son\npro jets\nprefe cts\nparty likea\npan ca\nover threw\nor to\nopen office\nod walla\noak ed\nnord land\nnet wor\nnat rona\nmichaelian black\nlook north\nle us\nle eland\nlamar athon\nla fond\nl suf\nko c\nkal ender\nid s\nhynd burn\nhook sett\nhill side\nhelp fulness\nhelp find\nhar din\ngo towv\ngiro lamo\ngame plays\nfranki eco\nfon tes\nfi des\nfamiliar isation\nfalken berg\nelm street\ndream ily\ndowne ast\ndoors open\ndoor ly\nder mann\nde fazio\ncur now\ncu lia\ncom pl\ncheese steaks\nca bez\nbrian solis\nblo ss\nblack dog\nbhuv neshwar\nba quet\naz v\narab i\nameric or\naco de\nac ac\nðŁĮ ¡ï¸ı\nï¸ı ,\nìķ¼ ìĥĿìĿ¼ì¶ķíķĺíķ´\nze w\nyoungh usband\nwe kiva\nwar ty\nwalkawayfrom democrats\nvenetian vegas\nvar kala\nv city\nus mani\nthom az\nthi ya\nth ae\ntequil aday\nteam wear\nte ju\ntaylor twellman\nstar link\nssc supports\nsphoto aday\nspaw ner\nsole dad\nscott sburg\nsaw tell\ns restaurant\nrukmini maitra\nrte pt\nron icle\nradio gram\nrachel e\npushaward steam\npopul arize\npolymorph ism\npent on\npark academy\nnor berg\nnew shd\nne vr\nnamo again\nn ms\nmä r\nmy level\nmy int\nmire poix\nmi mas\nmcgillic uddy\nmb ali\nlun ds\nlovel and\nlike the\nkitt u\nk young\nk tour\nj ook\nitslav anya\ninter house\nincul cate\nig ai\niam raj\nhe ward\nha eckel\ngoh pu\ngeor di\ngallo ped\nfm revolution\nexpre ssible\negg cellent\ned onne\ned cny\ndonof rio\nder k\ndelgad illo\ndel anie\nde cky\ndaw at\ncomb iner\nbur nol\nbreak time\nbran didentity\nboy an\nbird ville\nber io\nbarn ton\nar isai\nal ate\nðŁıĥ ðŁı¼\nðŁ¤Ĺ ðŁĴķ\nz ro\nyo gare\nwhatchamac allit\nwallen paupack\ntrol lied\ntren chard\ntransi ents\ntom burke\nthereal t\nthe island\ntal umni\nta pan\nswis sair\nswil kins\nstargate command\nstand on\nspon sored\nspe ights\nsmall cap\nshadow ofthe\nshad ri\nsel t\nsandakoz hi\nro chon\nray ford\nprojec tionist\nprodu its\npre press\nplat ina\npak tia\npadra ic\np mma\np fau\nor lé\nopen water\nofficial brianab\no sian\no ols\no ben\nnote toself\nnight breed\nnic ho\nnephro tic\nnar aco\nmrricky whittle\nmou le\nmb na\nmakeup geek\nmai ja\nktul news\nko ji\njo v\nin syaallah\niam rapaport\ni wl\nhumor ously\nhan scom\ngut mann\ngran ato\ngene w\ngeek wire\ngardat raffic\ngale ano\nfossil ised\nfer lin\nequi ano\nenergy drink\nen chong\nemo re\neg ill\neducation matters\ndiony sos\ndesc endent\ndele momodu\nd oooo\ncur rin\ncon is\ncom pr\nchuck led\nchester man\nchess men\ncau dle\ncar apace\ncapit aine\ncap tor\ncam eco\ncam bs\nbuck master\nbuck by\nbo ad\nbfi player\nashwag andha\narmy worm\nar mata\napp raising\nap ical\nall ingham\nå¼łèīº åħ´\nzo hra\nyor gos\nwing ate\nwater wednesday\nwalber swick\nw add\nut din\nu go\ntrum peters\ntre ver\ntar lton\ntaco day\nspat tered\nsocial isation\nsmith and\nsky dance\nsillu strated\nshop ing\nshi er\nshan ina\nse meru\nse ib\nsantho sh\nsai baba\nru sko\nrrrr rrrr\nros man\nronkon koma\nrichar ddin\nqueensu belfast\nquad ran\npy ros\nphilli pson\npe du\nonep lu\no sim\nnorth enden\nnel ms\nnat itude\nnam rat\nnaji my\nmu b\nmor ar\nmn ps\nmilli pedes\nmemor ias\nmegab ike\nme sos\nmay bury\nmatthe wr\nman nen\nmai z\nma bini\nlook out\nlike apro\nlec key\nla veen\nku ehn\njobs report\njku at\niw g\nive y\nindubit ably\ni drees\nhog sback\nhockey family\nhar lee\nham e\nguadag no\nglene agle\nghj nancy\ngastroenter itis\nfor more\nfoam us\nfly boys\neuropa africaus\neti enne\nee red\ndo oly\ndh cp\ndel ilah\ndang led\ncine quest\nchondro itin\nchas ma\ncambo dians\ncali x\nbwp mag\nblit zes\nbad u\nau key\nas weetz\nas pr\naryas milesa\nann us\nami go\nami en\name mories\nalbu min\nal fond\naf fen\nac lass\nabu ena\nabscbn ballfanfave\nðŁĺ© ðŁĺĤðŁĺĤ\nðŁĴľ ðŁĴĹ\nðŁĮ¶ ðŁĮ¶\nç º\nâĻ¥ )\ná´ į\nzab ar\ny st\nvoor trekker\ntull amarine\ntrilo gies\nthe union\nthe outdoor\ntern ary\nt boss\nsympathis ers\nsupportsmaller streamers\nsun leashed\nstay curious\nsofthe sun\nso kratis\nso beautiful\nsap hira\nsafavie h\nrim rock\nrepe chage\nraff lesia\nprote stan\npropor tionality\nprior ity\nparana que\npap ri\nouter most\nor of\none another\nole sen\nnit ra\nmon dial\nmasto dons\nma go\nlord sof\nlong year\nlibr ari\nli gion\nkir yat\nkf st\nkai kai\nitb berlin\niron men\nin om\nhohenzol lern\nhar bord\nha beeb\ngui on\ngop nik\ngem elli\ngar rel\nfull backs\nfru ctis\nfor going\nfl acqua\nfin zi\nfamily search\nei j\ned gard\neco logies\ndu plantis\ndeer stalker\nchul alongkorn\nchiem see\nchar rette\ncam tasia\nbut ties\nbo si\nbitt u\nabu eva\nçµ IJ\nâĸ Ĵ\nà¹Ģล ย\nzipl ining\nzi all\nwelles bourne\nvermark ter\ntechnic alities\nsylvia earle\nswag gering\nsv rofficialsite\nsuppre ssors\nstru ve\nstorm chasing\nstan way\nso logy\nso jo\nsl ender\nsim la\nsicklec ell\nshko dran\nsens it\nsay uri\nsang li\nsa jal\nround top\nre constituted\nram usic\nrain raingoaway\nq h\npresen to\nposte co\npositi vism\noviya asweetz\noutside isfree\noscardel ahoya\noon agh\nol ata\nnoise maker\nnj ed\nneck deepuk\nnbaon abscbn\nmour ne\nmit ton\nmilose vic\nmi rah\nmedi os\nmarkie ff\nmaneuver ability\nlu koil\nkier ans\nker shner\ni sec\nhymen optera\nhi bou\nhe ye\nha dad\ngold line\nflo rent\nelder ly\nel mer\ndirect mail\nding man\nde sha\nday man\ncri sil\ncon spires\ncollo id\ncla pper\nchi vette\nbobb yl\nblack ball\nbla a\nbhan ot\nbag lioni\nback tuesday\nb center\nav ger\nam axwell\nair c\nad ap\n;; ;;;\nðŁĺ¶ ðŁĺ¶\nè ·\nö rebro\nzhangji ajie\nze hr\nyour city\nyod elling\nwq ed\nworld traveler\nwipe homophobia\nwgn morningnews\nwampano ag\ntol puddle\nthamma sat\nsur ry\nstri jd\nsti o\nstargat enow\nst arer\nsorren ti\nsna king\nsm qure\nsmqure shipti\nsla ir\nsho yu\nshi mabu\nsecon omy\nsaq lain\nsali sh\nsa ine\ns folks\nrim world\nretro futurism\nreci proc\nreal oviedo\nre ko\nre but\nra ziel\nquincean era\nprohi bido\nphd advice\npete holmes\npersu ades\npasser ine\noz turk\noutla wing\nord ina\non elife\nnew borough\nn tc\nmur muring\nlytt elton\nlouis bourg\nliving wage\nkr l\nke fla\nkar jon\nit sines\niphonec ase\nindiad st\nhy rax\nhide yoshi\ngwil ym\ngreat places\ngraceland tv\ngd w\ngas man\nfaz il\nfawk ner\nf wisd\nf bun\nen co\nemancip ate\nec ma\ndog sled\ndisband ment\ndescen der\ncre flo\ncor ries\ncoch abamba\ncle ft\ncheryl strayed\ncaw lidge\ncast ella\ncand our\ncamelli as\nby field\nbusiness objects\nbur tt\nbump us\nbody line\nbit mex\nbelle ek\nbangalore mirror\nback er\natic sofc\nas aka\nar nell\nanz hi\nallu ding\nala inf\nabscon ded\n¦ ¬\nzam perini\nwheat kings\nweather aware\nvictorias murfit\nvic uni\ntrain z\ntin er\ntheech ola\nthe kids\nta day\nsw ct\nsud heer\nsu cia\nssmusic tweet\nsoci ally\nsens ys\nsch itz\nsc ct\nrock ymountains\nradio leary\npat inated\npartri dge\npar mi\nover filled\noffic ina\no strom\no shaw\nno reen\nmo anal\nmini max\nmiam bode\nmi kay\nmge xp\nmega fest\nme glio\nman gat\nmaison neuve\nlong stone\nlin tas\nle hua\nko ven\nkla x\nkan gel\njusti fications\njesu si\nhor rell\nhard scape\nh vc\nfeld spar\nfat lanta\nf andi\nenvi ed\nell ner\nel baz\ndirekt vermarkter\ndense st\nde vel\ndartmoor npa\ndar ina\ncu ir\ncolon say\nclar in\ncen sored\ncb ssacramento\ncar ting\ncab an\nbur berry\nautodesk revit\nas car\namar u\namand aw\nal ness\nai der\nacal cio\nðŁĻĭ ðŁı»\nðŁĶ Ī\nãĤ¸ãĤ§ ãĤ¸ãĥ¥ãĥ³\nvau dan\nval et\ntaka shi\nswa ke\nsw ole\nsuffic ed\nstra iners\nsprint car\nspe ts\nsk oog\nshille lagh\nshab ira\nser ran\nse watch\nscri me\nsap ient\nsanti ag\nsaint petersburg\ns against\nrex all\nre stom\nre released\nprin touts\nprematur ityday\npor voo\npharmac are\nper kasie\npass ant\np tz\nou den\noo ch\no eming\nnational bank\nnath and\nn tra\nmoving on\nmor os\nmo hen\nmmac donald\nml baz\nmetho de\nmess enger\nme geve\nmarion berry\nl anner\nko shy\ninterrup ters\nic ci\nhom burg\nhep ner\nhar rass\ngod ble\ngil bey\nge uze\ngaku in\nfootball club\nend games\nen sler\neb brown\ndry burgh\ndram men\ndoubler ainbow\ndistracting ly\ndevol ver\ndefl ationary\ndebbi em\ndealwith barbie\ndavid stea\ncv usd\ncriminal ising\ncleveland birds\ncla vi\nchugg ington\nchel seam\ncar mike\ncamp ylo\nboat ing\nbar bey\nb caas\nazadis quare\natla ses\nat more\nasap twelvyy\nangi ec\nalwaysinourhearts zaynmalik\nalphabe tized\nðŁıŁ :\nðŁį ¢\nðŁĮ ¥\nà³ Ģ\nÙĬ ÙĦ\nö lln\nyon der\nye x\nyas un\nway n\nverso books\nus nationalguard\nus ki\nur mia\nuni g\ntur bin\ntrus cott\ntoc cata\nthr s\nthe bug\nteam uk\nte ren\nsongsong couple\nsongkh la\nson ho\nsmith ies\nsci anna\nschwit ters\nsaram ago\nsad y\ns fai\nry l\nro ty\nrealjoey fatone\nr ly\nproté g\npro viso\npro start\npra k\nper cheron\npar took\now ch\noto gp\nosman thus\noman air\no vas\nnw f\nnorth pole\nmuham ed\nmin ota\nmg tab\nmens fitness\nmark kanen\nmar ye\nmain board\nmag al\nmadra sah\nlu chi\nlovel ady\nlap sing\nkon nie\nkeith harkin\nkear sley\nke pala\nk pp\nk ameen\njw marriott\nj pp\nimpregn able\ni bye\nhant u\nhab iting\ngunner sbury\ngreen jackets\ngol and\ngh es\ngestu ral\ngerr ards\nfree agent\nfoodies festival\nfo storia\nfir ste\nemb leton\nellicott ville\ned aily\ndown payment\ndon nacha\ndeser tion\ndeca icdc\nde wald\nde jas\ncri p\ncook top\ncole tta\nclaire coffee\ncha yote\ncarri g\nby er\nbook ham\nbob bie\nber gy\nbal asaheb\nat wal\nant enne\nann elise\nandy ar\nai x\nðŁļ ħ\nðŁijĬðŁı¼ ðŁijĬðŁı¼\nyr ds\nwork fare\nwhir led\nwhin chat\nwg no\nvivi en\nvirgini atech\nv art\nuni ge\nthelast drivein\nthe guardian\nteam bcps\ntake off\nsthel ena\nre sold\nrand leman\npu ga\nproud mum\npper man\npost es\npor res\npolis ario\nph oria\nper icar\nper der\npar it\nom ana\nny ro\nnw sl\nnra am\nnon conformist\nnigh tow\nneat ness\nne sha\nnawal el\nnat rev\nmy love\nmount view\nman nan\nmad flavor\nma slen\nlyn skey\nlocal memphis\nlili reinhart\nl kn\nkwa cha\nknowyour rights\nkil gariff\nkei yn\nkay ong\njarrod farmer\njaros z\njamesx reid\nine ering\nin putting\nhonor them\ngroen eveld\ngotta seeit\nfitz museum\nfad own\nesp o\nen hs\necon et\ne sts\ne star\ndinis guarda\ndi mo\ndesign ates\ncru mpton\ncentr alization\ncelebrity awards\ncar aga\nbritish rowing\nbg sconf\nber ated\nbe art\narmor y\narmag nac\narch es\nar onia\nal ico\nakinwun miambode\naki hiko\nadi az\nac ord\n." âĢķ\nðŁİ¨ #\nëĭĪ ëĭ¤\nà¹Ĥ à¸Ľ\nਠ¬\ny oma\nwarren ville\nw ft\nve ere\nunion pacific\nunic o\nu oa\nthrust master\nthe ovon\ntexasedm family\ntecno logÃŃa\ntanam rull\ntach yon\nsydney mardigras\nsur an\nsu wa\nsu tanamrull\nsteph ania\nsociet yof\nske ins\nsil loth\nsen ora\nscott m\nsco pa\nsas sn\nru ffa\nrol ston\nrhay ader\nrep aved\nre se\nr ll\nqueen mary\nprevention month\npre amplifier\npaw lowski\nparole es\nnit zer\nnight vision\nnh sm\nn jr\nmogol lon\nmo fs\nmidnight sun\nmicro meter\nmel ati\nmax us\nmar adio\nmam malo\nmai oc\nmac isaac\nmaaj id\nlympho blastic\nloving intan\nle cky\nlam brewery\nkrzy zewski\nklu wer\nkeep ingthe\nkat anga\njudd monte\njing yu\njin xing\njab ir\nist as\nhyphen ated\nhear ken\nhe slop\ngu ana\ngram mars\ngoldeng ate\ngo ree\ngi me\nghos al\ngach anja\nfor ged\nflyer stalk\nfish on\nevi denti\nepitom ized\ne jay\nden airport\ndar ude\ncor nic\nco bby\ncar rum\nbobsburger sfox\nblack shirt\nbio genesis\nber litz\nballi ol\nayan ami\nark ell\nar ryn\nanag ara\nallianz leagues\nal wan\nac land\na kel\né ed\nyvr shoots\nym pia\nyam anote\nvolta ic\nven i\nun saved\ntug boats\ntravel show\ntoo hey\ntoc coa\nthir un\nthe do\nter racing\nte questa\nsuffra gists\nspoil sport\nsouthern cameroons\nsk ok\nsc illy\nrud nick\nru tt\nrespon sable\nram rod\nram ji\nrajiv gandhi\nquar ta\npre match\nplay ford\npj hl\nphal le\nper saud\npar ool\nnypd protecting\nnul and\nnewengland patriots\nnew speak\nnagu ib\nmwal imu\nmur at\nmor tlach\nmor ada\nmistre ating\nmeli ke\nme ment\nmccon key\nmc par\nmar lette\nman fre\nman dered\nmaffe i\nlu so\nleve es\nlead beater\nlea g\nlaroc que\nkve w\nke ira\nkan san\njesse welle\njam u\njake bugg\nirrig ating\nib w\nhyper dub\nhic kie\nharri ette\ngol la\ngar ter\nga ura\nfla vius\nfiore llo\nfas sa\nev ened\ner ney\nelb philharmonie\nel ore\ndishon orable\ndiac omohoy\ndemoneti zed\nde havilland\nde at\ndare us\ndak id\nd london\nd hh\ncro aking\nclub card\ncitizen weekend\nchoo o\ncell mate\ncar tier\nbr ani\nbody care\nbo du\nbam mer\nb hoot\namaz o\nag bo\n! )...\nzip code\nz aven\nwed der\nwat ta\nwan ti\nunleash the\nunder scored\nto sti\nthe cove\nspits bergen\nsol dat\nsl t\nshum lin\nsel ter\nsav ouring\nsarac eno\nsab a\nrit orno\nri fa\nre combination\nr gruppe\nqos baszler\npos tharvest\npale stina\np ite\nover rule\nout landers\norti z\noren go\noise aux\nofcal dub\nneil patel\nnational teaday\nnac l\nn bu\nmsdyn crm\nmor ong\nmon keying\nmcgavo ck\nlefto ver\nlebo euf\njap androids\njag off\njac keted\ninternational ism\nink pen\nindi ah\nido f\niceland ic\ni follow\nhour cloppic\nhi aasen\nheu vel\nhd tvs\nhat cher\nhar ak\nham or\nhahah haa\ngunner gale\ngra bb\ngab ion\nfull bright\nfon zo\nfb x\nf agar\nencan tas\neisen ach\ndx racer\ndu gard\ndel k\ncun ningly\ncoming to\nclock ers\nciti bike\nchal le\nbru jas\nbiggboss marathi\nba el\nb hit\naz ira\natlant adream\nat omy\nassalamu alaikum\nascen der\narte mi\naqual ung\nantimicrobi als\nang elle\nalbat ros\n^ ..\nðŁ¥³ ðŁ¥³ðŁ¥³\nîIJ Ĥ\nاÙĦسÙĪد اÙĨ\nı n\nye ayy\nwatt pad\nviter bi\nu et\ntrisk elion\ntrespas ser\ntrap star\nto kin\nthirdeye blind\nteyan ataylor\ntanush ree\ntan ko\nstatecap ture\nstar vs\nss l\nsq r\nsilic ones\nsexu alabuse\nsas an\nsarah spain\nsaint sand\nroth mans\nretali ating\nre pulsion\nre mixer\nre kord\nrapper swil\npun intended\npri vett\npeter house\nor os\nnoti zie\nnighto wl\nneuro logic\nnett v\nnelson ville\nnad in\nmusand am\nmun jal\nmug wort\nmu ska\nmo zzie\nmc up\nmaxim alist\nmadel aine\nma thy\nlone wolf\nlo sail\nliverpool phil\nling cod\nlg n\nkowal czyk\nkixi fy\nkis ke\nkillla kill\njuan cho\njaw i\nit ic\nip at\ning sunday\nie j\nhourly wolves\nhd z\nhasna in\ngrig son\ngreat dismal\ngooner family\ngood afternoon\ngol de\nge pp\nfé lic\nfuj ilove\nevosti kleague\nepiste mic\neper nay\nende cker\neli vers\nel lec\ndutch mfa\ndor it\ndod die\ndist ills\ndesign mag\ndeseret news\nde crying\nd nl\ncraw shaw\ncow den\ncorpor atism\ncom modification\nchampag nat\ncanon favpic\nbwl ch\nbuli mba\nbuck hannon\nbor le\nbiggest fan\nbic ton\nbeer lovers\nbaseball america\nban ishment\nbadger up\naustralian story\natic ket\nanesthesi ologists\nalways remember\nak se\nab am\n\' +\n\' $\n! ðŁĺı\nðŁĺľ ðŁijį\nðŁĺĨ ðŁĺĨðŁĺĨðŁĺĨ\nðŁĵļ :\nðŁijı âĿ¤ï¸ı\nðŁij ¥\nðŁĮ¹ ⾨\nÛĮ ر\nÙģ ر\nyester day\nxbox p\nwar monger\nwar der\nvo teen\nunni krishnan\nuniversi dade\nun recorded\nu vu\ntrici a\ntree planting\ntof dixie\nthi stown\ntheo broma\ntal ing\nswan ley\nsunday times\nsubsidi se\nstruc tured\nstrom lo\nss ello\nspre zz\nsleepa way\nsch art\ns spx\nrw jf\nrose ellen\nrik rankin\nre ux\nre faeli\nre elin\nrc pch\nqine tiq\npreju diced\npl inking\nper dita\npashin yan\nour nament\nopen shaw\nodd parents\no sk\nnano second\nmou lay\nmo pped\nmission accomplished\nmin j\nmegabike shop\nmari usz\nmadein tyo\nlondon art\nlan gue\nla ks\nkir ky\nkar jat\nkalamaz oo\nkal ancho\njared padalecki\nj ind\niv rea\nioni q\ningh ana\ning erie\nim bi\nik kar\nhu sein\nho x\nhear metoo\nhay good\ngy nt\ngrim ly\nglaad awards\nga steiz\nfox gloves\nfest ina\nfarquhar son\never age\nedi fication\ndow den\ndesp res\ndan so\nclif den\nclean ness\ncle av\nche vette\nchatt in\ncar seat\ncape may\nbuilding champions\nbrea stre\nbo karo\nble y\nblank fein\nbed font\nbastian steel\nbaske try\nbas sc\nap gar\nandhra pradesh\nalt ay\nak aka\nag ius\n? \',\n.... !!!!\nðŁİ¤ ðŁİ¤\nðŁĩ¿ðŁĩ¦ ðŁĩ¿ðŁĩ¦\nãĢı #\nâĹķ âĢ¿\nâģ¦ âģ¦\nzy y\nxen opho\nworcsc cc\nwood sen\nwl st\nwinter break\nwi rele\nwh on\nwax works\nvote tris\nvelocity conf\nut l\nunidenti fiable\nucan r\ntrump ington\nti anna\nthe common\nthe actor\nteam wales\nsur tout\nstrato fortress\nstar creative\nsplat z\nsoe urs\nsmolen sk\nshri kant\nsel vag\nryanj newman\nrudder less\nro zi\npun ning\npun ic\npower station\npop an\npoint lessly\nperri kiely\no base\nnu cci\nnt ca\nnish ino\nnat sci\nmy the\nmove set\nmo gi\nmlbaz fallleague\nmitch elton\nmetam ora\nmazer unner\nmax ton\nma dra\nkun zite\nkov ai\nkon erko\nkol l\nkk rha\nkip sang\nkey z\njoanne worldtour\nje mez\nisspyaar kokyanaamdoon\nimpregn ating\nhorizon league\nhomin id\nhe resi\nhax by\nhar l\nhal onen\nha dro\nh antz\ngui don\ngrowingup in\ngo izueta\ngener ativeart\ngen pact\nge biet\nfre scas\nfi yah\nfa stra\nessex policeuk\nero ge\nebulli ent\ndr itad\ndr ita\ndor ina\ndon broco\ndiacon ate\ndevan shi\ndeter gents\ndepri ves\ndelpiero ale\ndai do\nd kw\ncre eds\ncra ggs\ncohesion policy\nchristo dou\nchowki dar\nchast ised\nchampion strophy\nch m\ncc mariners\ncarac ara\nbold mere\nbo los\nbludge oned\nblack thought\nbarto sz\nbad deley\nbaaz igar\nayo ade\nay ase\nar don\nantó nio\nann ul\nang ers\nand rae\nanaphy lactic\nall black\nair ships\nab aqu\nðŁĮ¸ #\nz schech\nwin etour\nwic b\nweather ization\nvocabul aries\nverizon wireless\nvan stone\nus ap\nun govern\nu turn\nu pi\nu ai\ntwittb laster\ntuber ville\ntar pons\nsway am\nsprint cars\nsol dotna\nsne ha\nsian icri\nscreen junkies\nsci oli\nsci ed\nsan filippo\nruby wax\nro screa\nregistr ationday\nre stive\nre iro\nrazor light\nq amar\nproftim noakes\npodi um\npere tz\nper sis\npark ways\npa estu\none planet\nnucle ya\nni ppers\nmu choo\nmo one\nmil loy\nmil ak\nmetr is\nmer chi\nmediev alists\nmat exp\nmali gne\nloren za\nleop ol\nl ents\nky thera\nknickerbo ckers\nke hr\njd m\nj tv\nigle sianicri\nhu ay\nhi muro\nharyan to\nhang ars\nfo erster\nfei joa\nfax ed\nfau j\neter nia\nest rena\nep ay\nemc fly\neid al\neck ington\near wig\ndun robin\ndormit ories\ndemon et\ndell acqua\ndear zindagi\ndavid l\ncollege board\ncole ford\nchar ak\nchap atti\ncay den\ncar don\nby lines\nbusi ek\nbran del\nbradley james\nbny mellon\nbirmingham rep\nbing ed\nbasel ines\nbarbar aniven\nau m\nas sery\narcli ght\narad wanska\nan net\nali al\nak ram\nactive learning\nacadem icians\nðŁİ ±\nãģĹ ãģŁ\nãĢ°ãĢ° ãĢ°ãĢ°\nâĺĢ âĺĢ\nâķ ¬\nzu mi\nzu mbi\nworld ginday\nwill ard\nvirging alactic\nvalue investing\nus in\nuniter ight\nunfla ppable\nuk y\ntrending orange\ntimo fey\nthru sday\nthor sen\nthel er\nthat chers\nsystemo fadown\nstr indberg\nste eze\nspur s\nspr ts\nsouth india\nsolit ary\nshing al\nshe athing\nsd hawan\nroseellen dix\nprofu mo\nportugal theman\nplatt smouth\npanther snation\no ake\nnychash tags\nnoo tropics\nnine ty\nni harika\nmn u\nmis directed\nmik uni\nmi dol\nmen ounos\nme dre\nly sine\nlucky welive\nlor na\nlive forthe\nlemu el\nlawand order\nlapid ary\nke ane\nkat aria\nk long\njustfor laughs\njuli elmo\njp montoya\njonny existence\njo do\nisraelic rimes\ninfra red\nhol lo\nho thead\ngov murphy\ng uni\nfir le\nff weekend\ne izo\ndr ferdowsi\ndisinfe cted\ndish ware\ndimit ry\nde bartolo\nd hh\ncool stuff\nconfection ers\nchori ster\ncell biology\ncable way\ncab overde\nbur ch\nbring themhere\nbrand name\nbra ban\nbig krit\nbette davis\nberlin station\nbeng t\nbbcradio solent\nbayare a\nayesh acurry\nas pic\nantagon ism\nani plex\nand park\nah ram\nè Ħ\nâļ¾ âļ¾\nà® ³\nwholesal ing\nwest away\nwer c\nv ch\nuninor thants\nthread bare\ntheori zing\nthegrand tour\ntend ril\ntan ews\nt zi\nsy lac\nsy beria\nstr an\nsq lite\nso tm\nsmart cares\nskylar astin\nsj news\nsigma pi\nshin ned\nshill ington\nsen diri\nsantiago de\ns fanart\nrun rig\nru hlman\nrep maxinewaters\nre thankfulfor\nranger over\nqu ini\npla k\npho u\npap ale\npaintedby carol\nob l\nny books\nno graphy\nno buy\nnam ic\nmod afin\nmeh dir\nmask march\nmar cri\nmanhattan beach\nmahindr arise\nmacdon agh\nlu nette\nlu beck\nlisa kudrow\nlafar ge\nlady love\nla im\nla greca\nkin berg\nkham mam\nkam per\nkal ine\nho chim\nher k\nhe ins\nhappy canadaday\nhairspray live\ngobigor gohome\ngi yani\nge thu\nge ren\ngal let\nfun kand\nfinancial post\ner ni\ner cole\nele mental\ned gy\ne tic\ndeta inment\ndehuman ization\ndeer wood\nclive standen\ncl anging\nci ona\nchis elled\ncey lon\ncan tons\nbreath lessness\nbour don\nbooth scountry\nblue hole\nberg ere\narca chon\nanthon ye\nan tu\namphe tamines\namo dern\nal gin\nagains thumanity\nad elia\n.. $\n. ðŁĺľ\nðŁĺĥ ðŁĺĥðŁĺĥðŁĺĥ\nðŁijĮ ðŁĺģ\nðŁĩ°ðŁĩ ¿\nåĽ £\nÙĤØ· ر\nzodi acal\nzim bra\nyes yesyes\nwof ford\nwin rate\nvo guet\nvin os\nval ori\nunder scoring\ntread away\ntravel diary\ntow sky\nti rado\nti dwell\nthe darkknight\ntess avirtue\nta ako\nstenhouse muir\nstar date\nstan kovic\nsri ram\nspre miere\nsolo ed\nshin ra\nsamsunggalax ys\nsaaf ni\ns fera\nroman e\nring road\npur vi\nprin eville\nposteco glou\npashup atin\nparas port\now www\nno ar\nne aly\nnatural remedies\nmsg thefilm\nmobi lec\nmire ya\nmart is\nmal at\nletsmo ve\nle um\nlat sondheimer\nla kat\nkotton mouth\nkerry n\nkav alier\njo chard\njim morrison\nit off\nin hofe\nig bo\nhood rich\ngerry mandered\nfrankie boyle\nfe vers\nexempl ars\ner ling\neddie trunk\nearth ship\ne got\ndit ors\nder spiegel\ndau mier\nczech gp\ncon des\nclar abelle\nchud leigh\nbur gher\nbro die\nbot son\nblack cosplay\nberlin er\nbell more\nbal bir\nann ells\nalway strump\nabo des\nab salom\nðŁĺĤðŁĺĤ "\n⼠ª\n⤠´ï¸ı\nä l\nye veryday\nyan ina\nwx man\nworld beeday\nwin eclub\nwh sv\nvan etten\nvalenci abasket\nupon us\nun conquerable\ntt able\ntra ini\ntoday sor\nthread needle\nth starmagicball\nte ks\nte agarden\nsub space\nsty ledby\nsimil itude\nse ol\nse bas\nsan marino\nsab ana\nry les\nrt fm\nrev lon\nred entor\nrecru tement\nproud parents\npriscilla shirer\norni th\noraclec loud\nor é\nophon ia\non erichmond\nohl rangers\no clc\nnam bour\nnalban dian\nmv hs\nmudh ens\nmu ze\nmothersday gifts\nmehdir hasan\nmed ce\nmau rawest\nman group\nliving in\nlam port\nl iciou\nkon gos\nko an\nkli en\nker mis\nkab in\nj su\nislamic art\nishqmein marjawan\nire do\nil lette\nhorse trials\nhe us\nharpercollin suk\nhahahaha a\nha fta\ngv hd\ngatt aca\nfearthe beard\nfashion bloggers\nenchan ter\nem pre\ndritad avanzo\ndor as\ndiv omovies\ndir l\ndijk stra\ndet mer\ndese crate\ndar vey\ncri stie\ncolour fully\ncel in\ncapital onecup\nbury fcofficial\nbun ratty\nbse ssed\nbre wed\nbilli epiper\nbil k\nbi ze\nbhuban eshwar\nb aga\narisai g\nar gy\nai ib\nade va\nac si\nê² ½\nಠħ\nwy playhouse\nwood church\nwha at\nw brz\nvereenig ing\ntin ton\nthick nesses\nsuz annah\nsturte vant\nsle monade\nsho ku\nshil pi\nsh lo\nsenbob corker\nribo some\nrei wa\nram sden\nquin ault\npigeon forge\nperv ades\npav lich\npaper mill\nofficial mcafee\no sum\no sle\nnis america\nnegre anu\nneed syou\nmoncton wildcats\nmis smy\nmis firing\nmelo di\nme ko\nmastodon music\nlil let\nlight itup\nlic key\nli sas\nland shark\nland forsale\nlady superstar\nla ffey\nkumbh mela\nkin ton\nkhi mar\nkeepp ushing\nkar pathos\nkan ako\ninglou rious\nhyper ion\nhouston dash\nhi doe\nhay loft\ngreat ocean\ngou den\ngor z\ngla ziers\neuphe misms\neug ène\netsy jewelry\nent l\ndrew diplomat\ndot co\ndor tm\ndj ed\ndi ffer\ndeccan herald\ndaw gnation\ndain ian\ncry me\ncr cs\ncoble skill\nchum ps\nchri sman\nchoose your\nchao tic\nchandra shekhar\nchad leclos\ncatch fire\ncar spotting\ncamera work\nborn holm\nblack mamba\nblack facts\nbick erton\nbell hop\nbar tsch\nbaldwin sville\naru les\nappe ased\napo se\nand fairness\nalt bier\nah waz\nadam buxton\nabsen tees\na aww\n. >>\nðŁĺ±ðŁĺ± ðŁĺ±ðŁĺ±ðŁĺ±\nðŁĶ¹ @\nðŁijĩðŁı¼ðŁijĩðŁı¼ ðŁijĩðŁı¼\nðŁİ¨ ðŁİ¨\nðŁ¥ Į\nÙħ ج\nØ§Ø Ń\nyou aint\nyo gotti\nwonder girls\nwinns boro\nvan lis\nv cfd\nused car\nu know\ntimmy trumpet\nthe scott\nthe cameron\nt mnt\nstarvs theforce\nsm elly\nsl vaus\nsil on\nshuja at\nshi d\nsfor za\nser res\nsch ot\nsage uk\nsaf avid\nrock lahoma\npol nare\npodi atrists\npeter hof\nori huela\none gerton\nnet suke\nnational sister\nmyla pore\nmy boys\nmu sang\nmoun tup\nmoro goro\nmor bius\nmoh tarma\nmis diagnosis\nmilli ebbrown\nmephi stop\nlu uk\nlock himup\nle to\nlakestreet dive\nke iron\nimper me\niihm hotelschool\niconocla st\ni quitos\nhen dee\nhat box\nharri eth\nhar pe\ngt foh\ngriff is\ngre enough\nger o\ngent illy\nfu gli\nf cat\ne qs\ndino bots\ndham makaya\nder ricks\nde vex\nday anand\ndavid gold\ndal ry\ndad do\ncf daawards\nce sen\ncam os\nc ff\nbran do\nboot strapped\nbloo duk\nbb ra\nbar ua\nay ane\nav radio\narchi plain\nar no\naquil ina\nang ling\namwriting romance\namuse ment\nale thea\nal ms\n.ãĢĤ .:*\n. ðŁĺįðŁĺį\nðŁĴķ ðŁĴĹ\nðŁIJIJ ðŁIJIJ\nà¸ģภ£\nxx xv\nxtian bautista\nwreckit ralph\nweekend wanderlust\nwe build\nwap is\nwad er\nup mann\nun savory\nu dang\ntre vose\ntear itup\ntear in\nsu turing\nstri ations\nsto wing\nstatus quo\nsong ket\nsinter ing\nsight seers\nshowtime pettis\nsher rington\nshah ri\nsele kt\nritu al\nril ton\nrec i\nre ge\npublic school\npre ggo\npen iel\npasqu ale\nout posts\nns j\nnike women\nname tag\nna ama\nmun ity\nmor den\nmiller time\nmel ville\nma skin\nlyn ley\nlei der\nlang leav\nkin agr\njuco product\njocke ying\njo ad\njam mie\ninterro gations\ninstruction al\nimbru glia\nhay tham\nham mamet\nhal ina\ngu ma\ngoron talo\ngam mons\ng dor\nfruit land\nfrey cinet\nfox friendsfirst\nfly with\nfag ot\nen ma\nem ale\nelian enko\ndoloreshu erta\ndel hin\nde matteis\nd zone\ncullin ane\ncrim six\ncre mon\ncorn cob\ncol ditz\nc rich\nblitz boks\national day\nas av\nangel ino\nallyson felix\nah us\nah ur\nag lobal\n!!!!!!!!!!!!!!!! !!!\nðŁıģðŁıģ ðŁıģ\nãħ ¡\nâĹ »\nxfactor au\nwigg inton\nweta workshop\nwestern digital\nwen ning\nwel lesley\nwe comefromaway\nwaubon sie\nvar man\nv ho\ntou charcade\nti gn\nthe oxford\nt ne\nsun city\nstan chart\nsquare mile\nspl unk\nsmoke purpp\nsmall streamer\nsk aff\nshal houb\nself storage\nsei ki\nse mmes\nsave energy\nrend all\nre ee\nramach andra\nram li\nram iz\npublic ed\npsycho logy\npil ings\nphillip island\npar ad\npan theon\nown cloud\nonthe board\non cology\nome tepe\nom bija\nok ta\nny mr\nne gar\nmud flats\nmonster sandmen\nmo zza\nmckin stry\nmccau sland\nmarsh man\nlog sdon\nlight fest\nlam bo\nl ilo\nkris bryant\nkkkk kkkk\nken roth\nka am\nk sc\njean sfor\njaz zie\nist d\ni fera\nher om\ngun ns\ngreen andgold\ngram pus\ngig ant\ngetting better\nfil maker\nfeni more\nfal ters\neur gbp\nen ot\ndroner acing\ndaryl matla\ncy outh\ncompre sses\ncolla do\nco h\nchrist offer\ncer aweek\ncas carino\ncafe coffeeday\nblog to\nbir ley\nben ward\nbab by\nay outh\nas oka\nart ine\nanu fac\nal lier\nak we\naer ate\nacru ises\naa ai\nðŁİīðŁİĬ ðŁİģ\nâĺºï¸ı .\nzoo atl\nyi v\nworldvegan day\nworl die\nwor don\nwind break\nwh orl\nvote remain\nvisual cap\nvirgin mary\nvi stula\nutd football\nut c\nuro logists\nu str\ntre ynolds\nto golese\nthu li\ntex til\ntand ragee\nta qi\nstreamer network\nstock sbridge\nstar tin\nsrisri speaks\nspe cular\nsou se\nsimil kameen\nsil ents\nshu o\nsher gar\nseag le\nse guin\nschri st\nsave aca\nsan cocho\nreassur ingly\nre eta\nra shad\npumm eling\npetri fying\npeter frampton\npel frey\npear le\npan cha\noperade paris\nnu fc\nnovo tny\nnerd hq\nnen ad\nmrss osbourne\nmou stafa\nmitchell reports\nmc glone\nlov at\nkorn acki\nkkrha itai\nkinagr annis\nkavanaugh hearings\njal di\nhospital et\nhan ham\ngo geocaching\ngg as\nfies ole\nfcbb asket\nfat u\nf mofficial\ner witt\nelo i\ndro b\ndeline ation\ndavidg ilmour\ndam pener\ncur sory\ncr acies\ncopy cats\ncolloqui ally\ncognitive computing\ncher moula\ncatal in\ncamp allroad\ncab azon\nbrook ville\nbro myard\nbrau lio\nbou ley\nblan co\nben brook\nbalear ics\nas fcofficial\nar asu\nani mage\namu ffin\namou reuse\nallu ded\naco x\nach med\naar tic\n( ...\nðŁĹĵ :\nðŁĶ ¯\nzor k\nwer de\nweb perf\nvo coder\nvi bro\nvas wani\nut us\nty oung\ntre mbles\ntow anda\ntom sk\nteen aged\ntab aco\nt ju\nsupere go\nsu mbur\nstock piled\nsteel man\nsse au\nsni pping\nsicili ano\nser ina\nsame time\nsa osin\nrumin ation\nroo sen\nreed sburg\nre cker\npound world\npine view\nphilosoph ically\nphantomofthe opera\nph resh\npack ers\nolaf ur\nmill ersburg\nmika ela\nmere ce\nmatar azzo\nmark g\nmanit obam\nmalevol ence\nlivesof ww\nlegal ities\nkm js\nkirlo skar\ninste in\nin dri\nil ai\ngry m\ngil gun\ngau se\ng bit\nfun clic\nfunclic kearn\nfu hrmann\nfor bernie\nfoot board\nfohlen elf\nfeuer stein\nfem ke\nfat back\nfair bank\nembar kation\nelk hart\nearth science\ndun smuir\nda jj\ncross gene\ncro isi\nco bre\ncheese cloth\ncentr ale\ncele st\ncave tt\ncal pine\nbundel khand\nbuckfast leigh\nbrush work\nbhat ure\nbernar dus\nbar room\nb ely\nauto sales\nas certain\nan doh\nam pera\nal ha\nabre ak\naat state\nðŁĴ°ðŁĴ° ðŁĴ°ðŁĴ°\nà¸Ľ ระ\nx amar\nworld prematurityday\nwi ens\nvat ic\nv to\nuv xy\ntruth out\ntra vieso\ntour memories\nten ny\nshu ffler\nshow business\nsail fishos\nsaf tas\nsad ers\ns journal\nro xo\nri angle\nrhy e\nrhe inland\nredbull grc\nre q\nrath coole\nr nai\npyo tr\npublic policy\nprolifer ative\nponti ac\npon chat\npokemon xy\nplain moor\nphenom hoops\npasalu bong\nopti musprime\noph ant\noak mtg\nnew paltz\nnan ako\nna ea\nmyth ic\nmuseumof nature\nmob berley\nmillion maskmarch\nmil ang\nmick ens\nmer id\nmen uhin\nmar quet\nmal ana\nmacdon alds\nma ec\nlou cityfc\nkoiv u\nkn m\nking don\nje el\nindeci siveness\nimmobili en\nic are\nhor nish\nhonda indy\nhipho ped\nhe ssel\ngü zel\ngoogle playmusic\ngod ons\ngeol soc\ng callen\nfro mal\nflu shot\nex communicated\ner id\nem rs\nelli sville\ned ric\nec thr\neber ly\ndu binsky\ndome stique\ndo tc\ndiamon dand\nder ose\ndank memes\ncounter clockwise\ncompar ti\nco authors\ncmo kerala\ncla rem\ncj hl\nche gwin\ncamp ton\nbestfriend day\nber tucci\nbe ier\nbasti de\nbar camp\nanti psychotics\naktu ell\nafric alive\nad mi\nabdel kader\nðŁĴĶ .\n⾨ "\nÄ Ľ\nyogotti kom\ny usa\nwe tz\nwbc sd\nwal vis\nvideo taped\nval ter\ntw rk\ntu pe\ntrabal ho\ntoronto realestate\ntor vill\nthis world\ntheright thing\ntha at\nterric lark\nterr ariums\ntech re\nte urope\nsurbit on\nstigmati zed\nstagn ating\nsta rena\nspecial ity\nson mp\nsmi tha\nsleep walkers\nskook um\nshu go\nsho we\nrun dle\nro lie\nrichmon draceway\nrevol vers\nrend collective\nration alization\nqa iser\npro gr\npro dding\nplo sion\nofficial ronnies\nnj politics\nnatwest t\nnationwide arena\nmy ton\nmuhte ÅŁ\nmound sville\nmon zon\nmon sie\nmilli grams\nmckin ney\nmason ville\nmam c\nma shi\nlongyear byen\nleonard town\nla forge\nla em\nkor ta\nkor ps\njuddmonte farms\njaw ab\njas prit\njan ez\ninvinci bility\nindepend ance\nhunts man\nhubb alli\nhawk stone\ngod ly\ngher bitz\ngc isd\nfrom wherei\nfran zese\nfor folloback\nex x\nemp son\nem sworth\nelf quest\nejec ting\neast bengalfc\nduplic ator\ndra iman\ndog star\ndeni ece\nda ith\nd by\ncy lons\ncu ota\ncritch low\ncott bus\ncompre ssible\nco ono\nclau demonet\ncj n\nchel o\ncen ac\ncapp iel\ncan asta\nc mcdavid\nbou se\nblac ki\nberch tes\nbein art\narmam ents\nalleni verson\nach ille\nabujat witter\n: """\nðŁĺŃ ðŁĺ¢\nðŁijį ðŁĺĦ\nðŁ¥ĩ @\nzi x\nz wart\nvi shy\nver me\nvani tha\nval de\ntuske gee\ntranspor te\ntra buco\ntr ate\ntalon sup\nspeedway gp\nslo ps\nscapp oose\nsa hm\nrick shaw\nreal d\nre definition\nqui kr\npuro lator\nproud sister\nprofan ities\npro plan\nprimeminister imrankhan\nplan escape\npla sm\npioneer dj\npan head\np tah\norlé ans\non ts\noe ster\nnir van\nner ules\nne vs\nnale o\nmiddle earth\nmcr artgallery\nma kani\nlive bolanet\nlig aya\nlifel ine\nko loff\nkfc barstool\nkent mere\njit sircar\niowa state\nind ade\ni au\nhun k\nhel meted\ngoer ges\ngo kyo\ngli mmer\ngeorge soros\nfur a\nfron tto\nfebr ile\nequ otes\nen join\ndun nett\ndul quer\ndeliber ated\ncuad rilla\ncol bi\ncih housing\nchen oa\ncast legate\nbumblebee trust\nbridge tregan\nbriden stine\nbo real\nbernar dez\nbean ey\nbambaat aa\nax ford\narti es\nann ach\nan ang\nami da\nair pics\n................ .....\nðŁijĮ ðŁĴª\nðŁ¦ģ ðŁĴĽ\níĶĦë ł\nzi ba\nzambe si\nz lj\nyav in\nwhites burg\nwh ately\nvishnu vishal\nvic ent\nvi ffest\nven der\nvan sciver\nuni st\ntravel thursday\ntil o\nthalap ath\nter ni\ntempe sta\ntal bo\nta jani\nsweet sixteen\nsuper giants\nsun n\nstrange musicinc\nsq s\nse gs\nsa hana\nrecord collection\nproviden ciales\npo ku\npips queak\npi ola\npe ja\np music\nore wa\noden kirk\nno cover\nnew smag\nn lyonne\nmu jib\nmore head\nmont copa\nmo gra\nmil son\nmer iam\nmat ted\nmadra ssa\nlippin cott\nlaure tta\nla stic\nkis ston\njimmy havoc\njess ops\nja at\nit fest\nimmacul ate\nhyundai wrc\nhtcon em\nhol lett\nhil burn\nhack en\ngrif ters\ngrati as\ngole stan\ngi lead\ngel led\ngand u\ng dad\nfri sch\nfc thulhu\nfal abella\nenic ole\neni k\nellen brook\nei shockey\nedmon d\neastengland amb\ndn ts\ndesign awards\ndel dÃŃa\ndeborah meaden\ndavid coverdale\ndaddario andco\nd subverse\nct us\ncoy p\ncor sham\nclar inda\ncep tions\ncarol yne\nbur cu\nbuffal os\nbotu lism\nbo ggles\nber ard\nbajac alifornia\nat sf\nang let\naber avon\naa x\n\'\' /\nðŁijģ âĢį\në¬ ¸\nza ke\nwolfe boro\nwig ton\nwc p\ntu ch\nthis guy\nthermo py\nthe creative\nt dsb\nswe ed\nsuyy ash\nsuhel seth\nstuart scott\nspru ill\nsp aper\nsm alaysia\nsanje eda\nsal ver\nsab ot\nsa hrawi\nroo ker\nrockin rio\nro dale\nre spon\nraider scanberra\nqui sta\npolnare ff\npir ouette\nper rette\nper mutations\npel os\npe abo\nour lady\nno go\nne gre\nmu tti\nmontero sso\nmo tel\nlim elight\nlearn chinese\nl á\nkul ang\nkore matsu\nking scourt\nkar dinal\njeffd sachs\njake millermusic\nit staylor\nifc films\ni ach\nhoo drat\nhol and\nhoch zeit\nhemb ree\ngst tnhs\nglo ssy\nfuzz ies\nfleure ast\nfer ox\nfarmer sville\nfaceli fts\netsy rt\nesc orial\ndt phx\ndisc ur\ndimit ra\ndex change\ndance mom\ncov hour\ncolt cabana\nchi me\ncatastro ph\nbridge ville\nbelvedere vodka\naw ans\nad aw\nà¸Ńะ à¹Ħà¸\ny wam\nwood cutting\nwhim brel\nw display\nvi agens\nusc aa\ntransi ence\nthi as\nte dy\ntat acompanies\nspr ite\nsk om\nsc ran\nsag ne\nsa athi\nros ana\nri sto\nrec tifying\nre shammiya\nram ba\npure storage\npp w\nplatinum games\nonec ampaign\nnai ste\nna hid\nmo cap\nmirror football\nmir kwood\nmer ten\nmad docks\nlove seat\nlight man\nlavi shed\nkon achan\nko hala\nkel ana\nkeith olbermann\nkam on\njoy less\nipp olito\nine ve\ni orio\nhas bronews\ngv su\ngu sto\ngra di\nge macht\nfm sphotoaday\nflori dac\nfin cantieri\nfi sted\nfast balls\nfag et\nextrac tors\nelu ve\ndun kar\ndiam undial\ndavi dr\nculture club\ncul turing\nct news\ncor ddry\ncop an\nclu brooms\ncl ent\nchronicle herald\nce cchini\ncas cia\ncan ari\ncal en\nc pac\nbuck ers\nbu ke\nbor a\nbon da\nbill yel\nbienven idos\nbat sibat\nau skas\nassay as\napla stic\nal win\nac tics\naa ihs\nðŁĺŃðŁĺŃ ðŁĺĤðŁĺĤ\nðŁijģ ðŁijģ\nðŁ¤¦ ðŁı»âĢįâĻĤï¸ı\néĸ ĭ\nภĺ\nz ast\nwesley stromberg\nwar road\nver net\nun leavened\ntoy maker\ntown coffee\nthrough ly\nthi ef\nthene edle\nten enbaum\ntee total\nsurly brewing\nsuperse ded\nsub class\nstone masons\nstarcreative stv\nsport susa\nspac elab\nsof teners\nsnake day\nsmo t\nsk ylon\nshoo jitsircar\nshal ane\nsell schaft\nsec ateurs\nschle icher\nsale em\nsalad ino\nrun keeper\nrsa security\nrivier anay\nred and\nrayn aud\npuer ile\npu tian\nprefer red\npig sty\npark minyoung\npariv artan\nophar yngeal\none buffalo\nnj ic\nnewye arre\nnew a\nnc su\nnadi ra\nmon sta\nmir ren\nmac robert\nlow ton\nlouder milk\nlec ity\nle bow\nle aman\nl ú\nku hns\nkraft foods\nkr ls\nkay ag\nkatrin api\nkath rada\nkan ai\nje be\nistandwith maryamrajavi\nio so\nill z\nil ens\nholly bush\nhill park\nhat ful\ngu to\ngreattaste awards\nfo su\nembe zzled\nel ses\ndon ite\ndj f\ndis barred\nde mayo\ncro ons\ncor ney\ncoal face\nco ire\ncnn debate\nchiso x\nch h\ncandice accola\ncalab rian\nbuil th\nbo zen\nbo zell\nbiek sa\nball arat\nba ños\nany oung\nanton yl\nalla ges\nali maging\naf gan\nz ins\nw lox\nur ica\nun banned\nul fa\nucla anderson\ntrevor ombija\nsynthesi ser\nsuper blue\nst ith\nsse afood\nspre well\nshar man\nsau to\nsap ne\nry no\nrun withus\nri bot\nre sna\nrand on\nr fh\npp ar\nphul kari\nparac as\nou fcofficial\nopun tia\nnuyor ican\nno taries\nnd mc\nmis is\nminiaturi st\nmillen ia\nmetron orth\nme ike\nmaya ali\nmatthe wh\nman lius\nman art\nmain sail\nmac pro\nlich ten\nkno twork\nknightri der\nken shiro\nje gede\ninde ed\nin aga\ni ths\nhe aded\nhali mah\nfundac ion\nfinner an\nfc go\nencant ada\nego ism\nedm life\ndis agreeable\ndia q\ncorusc ant\ncolle ens\ncn wk\nclassi sm\ncha ining\ncas so\ncar my\nbus well\nbrasile ira\nbor ba\nbe healthy\naubre e\nat lin\nassemb lers\naldu barkad\naff ing\nadjour n\n! "...\nðŁĺĬ ðŁĴļ\nðŁijį âļ½ï¸ı\nðŁIJ ĸ\nðŁĮ²ðŁĮ² ðŁĮ²\nت ÙĤ\nyod abuda\nye ch\nwat ari\nw elike\nviet name\nup skilling\nun fair\ntt india\ntric ep\nten gok\ntechnom usic\nt sering\nsun coast\nstr in\nstand ley\nslo vo\nshalane flanagan\nsen bill\nsch lie\nsal enow\nrosal ynn\nrol on\nro kh\nresearch gate\nrb z\npopl ars\npl sss\npend olino\npanip uri\npan handler\npack y\nowen smith\nos se\nobe di\nnarc issa\nnak ita\nna ira\nmud lark\nmis sher\nmarke tre\nman vs\nloss yndrome\nlock ton\nlittle foot\nlim kok\nlaw alla\nlari jani\nkre isberg\nkkrhaitai yaar\nkend ari\nken cana\njo stle\njesse metcalfe\njel avic\njarrah dale\njakob sen\nitv weather\nits friday\ninfomer cials\nig daily\nic hou\nhp discover\nher ridge\nhengist bury\nhahahaha hah\nha gio\ngrom mets\ngreatplace towork\ngreat value\ngiron afc\nfont bonne\nfic ha\nferry bridge\nfabri zi\ner and\nenviro ment\neliesaab world\nel ham\nedin bur\necho stage\neast lands\nd sk\ncut throat\ncrab grass\nconse crate\nconfection er\ncol lor\ncogge shall\ncanad adev\ncan ongate\nc jeu\nbug s\nbrune au\nbru shy\nbrick fields\nbhutto ka\nbe siege\nbb v\nbasker villes\nbad girl\nbab alu\nav ma\narcha ia\nach a\nðŁIJł ðŁIJŁ\nðŁĮ· ðŁĮ·\nล ะ\nyu miko\nye sequality\nyacou b\nworld net\nwoman kind\nwo wt\nwi zzy\nwesthe ad\nwander lei\nwaf ting\nvat iron\nuse your\nuni fil\ntrinity learns\nton ow\nto graph\ntech net\nstock ard\nstand united\nstacey solomon\nspecu lator\nsp atriots\nsolu cky\nsol enn\nshett leston\nsh ky\nschi pper\nscheck ter\nsare awesome\nsan deman\nsa qq\npor ton\npop sters\npit tie\npe gg\npanagi otis\npa ille\nom ay\nolympia stadion\nnov ac\nnol in\nno excuse\nneuk ölln\nmu et\nmer yem\nmem brance\nmaster pie\nma under\nma gos\nm kg\nlv m\nlubric ate\nlu an\nlock in\nli ja\nland graf\nlalit pur\nki bana\nkash gar\njerry rice\njede diah\nindia at\nhowit zers\nhost ing\nhome decoration\nherbi vorous\nhappy baekhyunday\nham moud\nhack tivist\ngool sby\nfuture ready\nfin k\nfam iiy\nfall ston\nfair ground\ner langen\ner ine\ndle ys\ndic kiev\ndah lem\nda shain\ncu cin\ncre sco\ncountry side\ncost es\nconservation org\ncatech esis\ncarli vatiron\ncar mon\ncag giano\nc sas\nbridle wood\nbon giorno\nblood donation\nbla ha\nbar thel\natlantic records\nath ur\nartist life\nar leen\nal ady\naggrav ates\nacknowledg ments\nabus iness\nðŁĺİ ðŁİī\nðŁĴĥðŁı¼ ðŁĴĥðŁı¼\nðŁijij .\nðŁijı ðŁĴª\n⼠ħï¸ı\nઠµ\nwar ble\nur va\nun b\ntom oh\nto pal\ntitle holder\nthin d\nthe state\nth ills\nsw police\nstu hl\nst rob\nsp reck\nso ter\nso bi\nsick i\nsi skins\nsand art\nsadi k\nrath skeller\nrat li\npromiscu ity\npay nes\nor by\none hunga\nodi hr\nocean us\nobliter ating\nno ct\nnate diaz\nn pv\nmat tea\nmarien platz\nmaajid nawaz\nlongh urst\nl tc\nkra vi\nkel lum\niz ak\nili fe\ni bb\nhun cho\nhu by\nholly conrad\nhi ki\nheng elo\nhein kel\nhap iness\nhain ault\nha idt\nha gin\ngod da\ngin er\ngair show\ng latt\nflat rock\nfinish the\nfarmers weekly\nextempor aneous\necho location\ndema rest\ndaw ud\ndar ragh\ncul la\ncru et\ncrack lings\ncosplay girls\nconsol ations\ncogn ate\ncle eve\nchurra scaria\ncap il\ncal cin\nbyu cougars\nbulldo zing\nbook keepers\nbha wani\nbemo repirate\nbec ke\nbe harie\nbar thele\natifas lam\nasdfghjkl ñ\narmb arnation\nar line\naphex twin\nambassac ats\nam v\nalpha phi\nak pabio\nais c\nafir st\nabe ba\nðŁĺľ ðŁĺĿ\nèī ¯\n§ ðĿIJ\nyellow vests\nuhcougar mbk\ntri j\ntra duc\nth ena\ntex mex\nteng ku\ntele mann\ntee jay\nsweet breads\nstrade bianche\nstill gotit\nstate fairo\nstatefairo ftx\nstabil iser\nsi rr\nshout a\nshe aven\nsch rank\ns gallery\nrush worth\nrepell ents\nqu itters\nprospe red\nprefe c\npra dip\npo zzi\npim pri\nphy ton\nphoto therapy\npen ser\noni shi\nobel isks\nntu sg\nni za\nnew school\nmusic and\nmorri sh\nmex ica\nmer imbula\nmed sci\nmayo tte\nmaru yama\nly se\nlivand maddie\nlin z\nle vering\nlaur sen\nlance armstrong\nlam ond\nl nh\nkun war\nkate winslet\nkane brown\njo cky\njag meet\nintertwin ing\ninci vil\niff ley\nhyper thermia\nhouser ules\nhor adio\nhiji kata\ngeri halliwell\nga er\nfoxsport saz\neye bags\nelk ington\ned miston\ndete stable\nd sps\ncycle toworkday\nctm pofficial\ncru mple\ncoo ool\nconsu m\nconjun ctions\ncle to\ncitizen sunited\ncian jur\ncho bits\ncath arina\ncake bread\nc fia\nbri ana\nbow down\nbor zoi\nbink ley\nbec tomy\nbeard more\nbat in\nastro plus\nas pens\nant t\namo wry\nair ra\naf ten\naer oline\nab bath\n__ )\n! ðŁĺ³\nâĸ¶ï¸ı âĸ¶ï¸ı\nzap iro\nworldnet daily\nwno tweet\nwest village\nweare here\nwe stre\nun glamorous\ntrunk show\ntr nava\nthe ju\nta wana\nstap led\nsoul wax\nso sv\nsky cable\nseem ly\nschi pper\nsch atz\nsay what\nru sd\nric cardo\nretro game\nre vy\npyro technic\nps ils\nplanet coaster\npl h\npesc et\npeach bowl\npartylikea journalist\npal icki\np no\now news\nnith yananda\nnewsin vids\nneuro surgical\nneur orad\nnel o\nnature za\nnat su\nnac cho\nna hr\nmun tz\nmell ons\nmeh rang\nmed ary\nmcdon al\nman zana\nlimitedrun games\nlie paja\nleadingthe way\nlaw i\nkri eg\nitie suk\nir gend\nintercess or\nin ba\nholiday gifts\nher ma\nhather ley\ngold fish\ngirl child\nge ier\ngab ou\nflo etry\nfi yero\nfeliz finde\neluve itie\nef dp\nec aatstate\ne ut\ndy w\ndoor bells\ndo tty\ndise m\nde francesco\nde bash\ndavid lyons\ndar ma\ndal meny\ncy anin\ncur ti\ncrazysexy cool\nconcer tina\ncoffee hour\nclu be\nchau dhary\nbower swilkins\nbig ham\nber ri\nbe cos\nbbc philharmonic\nbar beau\nazhar uddin\nau vers\nar mored\nantonyl ruben\nano vich\namin os\na ahs\n; /\n. =\nðŁij® âĢįâĻĢï¸ı\nðŁ¥ĩ ðŁıĨ\nðŁ¥ ¦\nå¥ Ī\nãĤ ¿\nâŀ «\nâĬ ķ\nÌµÌ ¨\nyellow man\nwomenin aviation\nwhat getsyou\nwa yo\nvill ano\nul rika\nu oregon\nthe deol\ntch r\ntar dif\nt sao\nsub su\nsty l\nsta den\nst fagans\nsp az\nshowme the\nsensation alist\nsa akash\nri ky\nreece mastin\nrecon figure\npro cida\npost traumatic\npar ol\npag ham\np bj\noxi meter\nofficial cufc\nob by\nnow w\nnordic a\nnight watchman\nnic omaine\nnew project\nmâ ché\nmusic on\nmol on\nmi kal\nme j\nmade well\nma dri\nlati go\nla tham\nl illo\nknight frank\nkle ber\nkha war\nkas dan\nkan turk\nit tttt\ninfringe ments\nide ser\nhero ic\nhead stand\nhair band\ngro bler\nglad stone\ngames radar\ngal angal\nfrederick son\nfor dair\nfedex field\nfa awards\nexacer bates\net ag\nequ ick\ned ream\ne gra\ndut cher\ndah len\ncom alee\ncli ven\nclev enger\nc sub\nbun do\nbug bear\nboy sen\nblack hat\nben ett\nbax endale\nband ila\nban tering\nbai xas\nany ama\nannivers ay\nang irls\nand then\nair fares\nag la\nad hy\nach al\naan p\nðŁĮĬðŁĮĬ ðŁĮĬðŁĮĬ\nwul f\nwo wee\nweis berg\nwater head\nwall an\nw lad\nvol tex\nvliss ingen\nvalley cats\nun cia\ntucum cari\ntor ay\nthermo set\nthe mar\ntegr ation\nsteal mygirl\nspider woman\nsil ience\nsh rum\nsemi annual\nsch utz\nsbli ii\nsati ety\nsaafni yat\nrun blog\nrunblog run\nrecy cler\nre authorize\npuli murugan\npublic ise\npu ella\npro sieben\npratt institute\npp ppp\nplay dead\nphwo ar\npe ka\nparadox ically\npalas zczuk\npack ing\noy ston\nouis ville\no saa\nnoy noy\nnay oung\nmccul lagh\nmahan ey\nlu kis\nlou brutus\nloe wy\nlodh ran\nlinke dua\nlego league\nld m\nkumb aya\nk institute\njust ink\njasmin ec\njahang irk\njahangirk tareen\njack russellterrier\nj afridi\niz umo\niowa statefair\nher bology\nfun night\nfuj ioka\nfla yed\nfigh tin\nferlin ghetti\nfcunited mcr\nell ina\nea sterling\ndon abate\ndistractingly sexy\ncul ls\ncredit able\nchav arria\nchant el\ncentri sts\ncav at\ncare tta\nc gg\nbu pre\nbryan brothers\nbrick ley\nbir s\nbi mba\nbest nigh\nber l\nbedn arik\nbec kia\nba hahahaha\nawo olf\natt ara\nat your\nassassinscreed origins\nanandi ben\naj w\naf eni\nìĻ Ħë²\n̵̨ ÌĦ\nw st\nvla do\nvis cera\nven et\nva stra\ntwitter stake\ntu ckey\ntrigla v\nthu cy\nthen et\nthebachelor au\nthe ware\nthe see\ntb snetwork\nsuper critical\nsu y\nsty mie\nsouthe aster\nsimpl ys\nshine bright\nsee v\nseattle symphony\nsean price\nsam mo\nsalman rushdie\nsafe guarded\nroun dups\nroof less\nrheum atism\nretwee et\nred berry\nradi ation\nprev ail\npr ss\nppor tunities\npick oftheday\npar terre\nnigerian creatives\nnfl oncbs\nnam ad\nmo twani\nmm ers\nmicro aggressions\nmc keen\nmad son\nllan id\nli ep\nlevel up\nle bih\nlaba dee\nkit ale\nkis sarmy\njeep family\ninterview mag\nic ahn\nhumayun saeed\nho stiles\nhh v\nhemorrho id\nhe tta\nhan dog\ngam me\ngallo per\nfer ias\nfam i\nf assie\nephe drine\nendthe fed\ndra we\nd sap\ncr ine\ncloud native\nck ickoff\nchu o\ncbc to\nbridal shower\nbrick layers\nbott lerock\nbon it\nblessedand grateful\nbjor k\nbeour guest\nbe somebody\nbau n\nbar ge\nbal lot\nb dunkelman\natx festival\natech nology\nanth es\nandrze j\namo or\nalan de\na equ\n< -<\nðŁĺį ðŁĴĻ\næŃ ¦\nãĤ³ãĤ¹ãĥĹ ãĥ¬\nâĿ ĥ\nଠ°\nॠģ\nÙ Ĵ\nxxx ii\nwm phoenixopen\nwater marks\nver vain\ntá naiste\ntx instruments\ntrues dale\nte thys\ntai ki\nsupp lan\nsu q\nsti ka\nsoun darya\nsece ssionist\nse dna\nsar lacc\nroer mond\nqu intel\nqayy im\npr inter\npole dance\npi bil\nphoto show\npedre gal\npav los\nnt g\nnexus mods\nn int\nmusicis legend\nmule shoe\nms news\nmoo sic\nmodafin il\nmo fo\nmed center\nmcgre evy\nmarzi apie\nmarcho frobots\nmajo relle\nmae by\nmack enna\nlog ico\nlo bbing\nlin thicum\nlex ia\nleu chars\nkumb akon\nkar ai\njuni at\njib con\niwm duxford\nisrael underfire\nin ol\nieee org\ni fat\nhygi ene\nhu dgins\nhealthy kids\nhe witt\nhand spun\nha qq\ngrant morrison\ngo ber\ngif tedness\ngetre al\nge mo\nfun fetti\nfuji ko\nfu ffle\nfoxnews facts\nforsk olin\nfish sticks\nfi roz\nengra ined\nec ss\ne pix\ndylan thomas\ndun ner\nd loading\nd co\ncute y\ncrested butte\nch f\ncau field\ncas ca\ncarboxy lic\ncanig gia\ncamili zers\ncab allo\nbi sham\nbeth ke\nbb ctw\nba id\nau techre\nau ric\nash craft\nao b\nandy stanley\nam bers\nalison moyet\nali ki\nabir d\na few\n-------- --\n!!! ....\nðŁĴĹ ðŁĺį\nðŁijį ðŁı¿\nðŁıĥðŁıĥ ðŁıĥ\nÙĩÙĩ ÙĩÙĩ\nyour dreams\nya jam\nwomen shoops\nwin rar\nwein stock\nwalk around\nwad d\nw wildlife\nvoteen rique\nvintage bikes\nv wo\nti ot\nthe tanmay\nterraz as\nstre psils\nstat too\nstardew valley\nsr ams\nsqu andering\nspring town\nsports ound\nsommer ville\nsoci opaths\nsm j\nsla gle\nsko da\nsil ke\nshe ed\nsad dict\nriseu pred\nreli ent\nregion of\nr ham\npur nama\npuertoricop ur\npu pi\nprs journal\npe sch\nparticip ative\npalmi otti\nopto genetics\nopenstack summit\nnor v\nninju tsu\nmm fa\nmin ya\nmaim onides\nma grath\nlim nology\nlibre ville\nkix brooks\nking andcountry\nkin ole\nk mi\njess amyn\njacob grimes\ninstaf ollow\nindi aw\niaaf worlds\nhy mer\nhu du\nheav es\nhavai anas\nh rad\ngrand prix\ngood hart\nged dit\ngary j\nforeign affairs\nfl ico\nfil mer\nfi ats\nf mm\ney l\nexpl ora\nengland golf\nelectr oneum\nel x\neh f\ndrunk history\ndrug mart\ndrivein mob\nden een\ndef els\ndeck hand\nd bel\ncp sc\nck worth\nchill ingly\nchau vin\nchasing life\ncedar ssin\nca ahoops\nbru gman\nbroad land\nboat face\nbiopla stic\nbim by\nbeau desert\nbau x\nbarbar ity\nbal dies\nat cs\narte ducation\nardi ente\naper ry\nali ght\nac climate\na otw\nðŁĺŃ ðŁĻĮ\næĪ ¦\nzem ski\nwyn newood\nwil den\nvel arde\nuof sc\nun savoury\nun civil\nun achievable\nty umen\ntransm ountain\ntitle holders\ntic os\nthei hi\nte tras\nte sted\nsunid hi\nsteve mcqueen\nspring break\nsomersaul ts\nshor tens\nsho whome\nshi awassee\nscorpi os\nscer vino\nrowland schools\nroth schil\nroger sarena\nrise against\nrehman malik\nregistr ant\nqad dafi\npo cos\nparen te\npaci fism\np tn\nom aki\nol un\nnucleo tide\nns agov\nni mm\nnhs grampian\nnd h\nmurshi dabad\nmr sam\nmo dok\nmentalhealth week\nmat zke\nmark dayton\nmargare th\nmar kii\nmanag ements\nmainbhichow kidar\nma ppy\nlong side\nlips comb\nlib bie\nlanc ôme\nla dainian\nkirkcud bright\nkilkenny clg\nkas auli\nkar ra\nkalin ic\nk hairy\njuliab radbury\nintercess ors\nhe che\nhatsu koi\nh go\ngod parent\ngo wes\nfootball tips\nfo yle\nflower beds\nfi ets\nfal zon\neye ofthe\nexpres sen\nero des\nerin burnett\ndunkar oos\ndun huang\nderi sion\ndeare st\nde keyser\ncu ira\ncoo pers\ncister ns\ncho tt\nchees y\nche tu\ncfb hall\nbreakthe silence\nbra gh\nbowl by\nboat shed\nblack buck\nbet abrand\nbay ero\nbanyo les\natay lor\nargent inos\nandrewr annells\nad dres\nðŁıĢ ðŁĴ¯\nåĭķ çĶ»\nãĥ Ī\nâĹ» ï¸ı\n⬠ħï¸ı\nzak ia\nz up\nyum mie\nyugi oh\nyou and\nwi gger\nweing ut\nw ceu\nvri end\nus ando\nun disciplined\ntelevangeli st\ntch ad\ntam bour\nsyl la\nsum times\nstur dier\nstre eth\nspo int\nskin nier\nsaint seiya\nrohr bach\nratli ffr\nrame kin\nram pa\npublic ising\npre late\npr anitha\npp ance\npower stroke\npi one\npar aiba\npal ar\nout fielders\nou can\nou ag\nos aga\norang ish\noneand only\nnys dec\nninja sexparty\nner is\nnel la\nnc gop\nnationwide kids\nn cu\nmulti ethnic\nmu kuro\nmon chengladbach\nmil gram\nmay wood\nmaud lin\nmatte i\nman asseh\nmagic mike\nlud ger\nls don\nlou x\nko ester\nknap weed\nkin dred\njas wal\ninthe wild\ninter no\ninher its\ninform atique\ninf anta\nie business\nibelievein bookfairies\nhok um\nhandicapp ers\nha id\ngul ping\ngra der\nging in\ngautam rode\nfun gu\nfore achother\nfle ener\neswat ini\nem wangi\ne step\ndry lands\ndream big\nde bb\ndd ddddd\ncro kes\nco vington\nchristop he\ncarl sen\ncaf s\nbu toh\nbou gh\nbe stia\nbe back\nbar men\nballinam allard\nball an\nbaby bump\nay ake\navail s\natay de\nandre wyang\nanci ens\nabsolu teradio\nabo lism\nðŁijĨ ðŁı¼\nâļ Ĵï¸ı\nâĺħ #\nzak ka\nza po\nyouth work\nwhy iteach\nwhis ker\nwh ib\nwest malling\nwave guide\nva hid\nuni veristy\nun listed\nturn buckle\ntren diest\nthe joe\ntend encias\nte pic\nt anc\nsp aw\nsop ran\nsolym pic\nso ss\nsl und\nsky divers\nsip tu\nshun suke\nshar ding\nsep r\nsen corygardner\nse dang\nsci on\nsaafniyat sahivikas\nsa hn\nru dolph\nrin i\nreen actments\nre consideration\npat era\npaper making\npa wb\np gn\nor molu\nnac ra\nn cua\nmontre ux\nmo zo\nmis sn\nmetat rader\nmeet in\nme morex\nme mang\nman am\nmaksi mc\nlt col\nlow ry\nlouis theroux\nlonghorn network\nlisac im\nline smen\nlesley ann\nlef se\nkis si\nkar ras\nkai muki\nk ago\nire ton\niam sam\ni eva\ni apolitics\nhow lite\nhoo oooo\nhemis fair\nhay maker\nhantsi wwildlife\nhal den\nha sso\ngranti mahara\nge würz\ngar r\ngal us\nfront court\nfollo back\nflo rey\nflamboy ance\nfedor ov\nfau vism\ne somar\ndur yo\ndove cot\ndiver ts\ndevi ating\ndela field\ndal eville\ncur seof\ncounty show\ncomb atives\nclo yd\nchula vista\nchi oggia\ncel er\ncappiel ow\ncanel ones\nbre sse\nbc ss\naus def\nau dry\nation alism\nathe art\nassemb lye\nare r\nalber obello\nahmad abad\nðŁ¤ ¶\nâĺłï¸ı âĺłï¸ı\nzo x\nyeah buddy\nwa heed\nunfor gett\nto ga\ntin kered\nteam shabira\nstre atham\nssy fy\nshuk ri\nshar ratt\nseat ac\nscottish open\nsaras ota\nsai ki\ns ÃŃ\ns records\nru mania\nren unciation\npru d\npen land\npc engine\npartici ple\nout let\nnew ish\nmarcuslu ttrell\nmaker oom\nmacin nis\nm ór\nlux watch\nluke mitchell\nlt l\nlock down\nlen zerheide\nleaveno trace\nlach hab\nkri shi\nkorean air\nknock out\nkhalee j\nkab ira\nk atti\njun ked\njeril ryan\njar lath\nits ramimalek\nhar ms\ngreeng rocers\ngreatplaces only\ngra inger\ngo ehring\ngam esof\nfluor ome\nelec trum\nei ps\negom aniac\ndying matters\ndug outs\ndu se\ndu sable\ndi ox\nde pose\ndar ao\ncrore pati\nconcor dance\ncompra r\ncom passionately\nco zad\nchukku vellam\ncer amide\ncas sio\nc ds\nbro cks\nbrani ff\nbour dais\nblu hm\nblack en\nbell woods\nbell mare\nbattlea xe\nbag sof\nath enians\nastro tur\nast ilbe\narec a\naqu otes\nabhin av\nðŁĮŀ #\nìĻĦë² ½\né ī\nyouve got\nx ue\nwing rove\nwil des\nwal ston\nw ths\nvide oo\nu od\ntsun ami\ntransfer ase\ntrans dermal\nthut mose\nther oes\ntee spring\nsul pice\nsu ica\nsto day\nsor ge\nshan kman\nresi ded\nr fc\nprat c\npontar dawe\nplanet labs\npentat onic\npen tath\npar ola\npaper art\npan handlers\nouth waite\nnorthumb ri\nno bama\nne burg\nmymt brain\nmulti plex\nmor oka\nmin ia\nmex ia\nme theridge\nmasse ur\nman tap\nmad ley\nlove fest\nlight ner\nlead belly\nlc s\nkeh na\njö rg\nitunes festival\ninge urope\nin red\nili ya\ni strian\nhu ard\nhack saw\ngreen economy\ngoo oooooo\ngom me\nfun and\nfsg books\nfranci stown\nfou lds\nformu lad\nelast omer\ndr phil\nde agles\ncathe dra\ncat mull\ncarval hal\nbv barmy\nbur gan\nbrain y\nboothe el\nbo cuse\nbmc proteam\nasi ya\narti kel\nannou ce\nan be\nac ase\n? âłĢ\nðŁĵ ģ\nãģĦ ãģĦ\nâĢĭ @\nн ов\nÌ ģ\nà ·\nyu ke\nyakut sk\nwur z\nwhatgetsyou outdoors\nvali dator\nunder performance\ntusk ers\ntreasure rs\ntogether werise\nthor ley\nthen at\nth l\ntamil nad\ntal lison\nta affe\nstie fel\nste ffi\nspeci alized\nsnapp er\nsic amous\nshoo kt\nshari bu\nsh moo\nsafi ya\nrumin ating\nrosie hw\nreimbur sements\nr news\nr le\nplant agenet\npizz arelli\npipe fish\nper m\npav lo\npang arap\np enty\nnowor never\nnin iola\nniche escapes\nni mr\nnew sw\nneo sporin\nne wry\nne co\nnatural ness\nmorein common\nmoni fi\nmiley formmva\nmarche shour\nmar vins\nmadilyn bailey\nlaure ano\nlag wagon\nl pb\nko ha\nkassi ede\nkan ade\nk cm\nju la\nj hump\ninternational tigerday\niceland foods\nhuman factors\nhugh enden\nhri day\nhippoly te\nhin ks\nhel ene\ngon line\ngeton board\ngeorge son\ngay dar\ng audi\nfright night\nex ter\nem z\necur ity\ndro sera\ndo tr\ndigital illustration\ndescen sion\ndeep veer\ncrickla de\ncon garee\ncollage art\nclemson univ\nchange slives\ncenten ary\ncatastro phes\nbrac keto\nbi gu\nbar bad\nan el\nai goo\nacl festival\nðŁĺĤðŁ¤£ ðŁĺĤðŁ¤£\nâĿĦ âĿĦ\nâľ ĺ\nzar dly\nword mark\nwo ori\nwight link\nwe care\nway police\nwakaflock a\nupnorth live\nun duly\ntu thill\ntri stana\ntes ke\ntemu co\nsuffo cates\nsrilan kan\nspor tac\nsi mul\nsi damo\nred flag\nre marking\npump in\npu issance\npsychop athology\npro tos\nph h\npeter ock\npassage ways\nparticipat ory\npan tano\nob on\no lot\no gether\nnon u\nno hep\nner ney\nmyeong dong\nmy haver\nmountain west\nmin nick\nmil ow\nmee totaku\nmd lz\nmanicure monday\nman tr\nmag or\nma dad\nll ant\nlen inist\nlan gham\nkom u\nkillthe bill\nkaty perry\njet fire\njad av\nire t\niff co\nhor ic\nhel ston\nglass jaw\ngewürz traminer\ngar gi\ng te\nfe a\nfavorite things\nfang asm\nf wr\nelk grove\nelic ited\nehlersdan lossyndrome\ne ade\ndy fed\nconco cting\nclay face\nchronic led\nchennai yin\nchar coal\nbook recommendations\nbish noi\nbilling shurst\nbene dum\nbello whead\nbeck oned\nban ka\nbal ancer\nba ju\nayyy e\nav ill\naug ments\nasi atique\nam mar\nadopta shelter\na ines\n________ ____\nðŁijĩðŁijĩðŁijĩðŁijĩ ðŁijĩðŁijĩðŁijĩðŁijĩ\nðŁİīðŁİ ĵ\nðŁİĤ ðŁį°\nت ÙĨ\nwom ent\nwine week\nwhitt led\nwal ay\nve ssel\nve iw\nval lur\nun did\nule scu\ntrun cation\ntortu guero\nthermo forming\ntat ties\ntake part\ntac itus\nsus annah\nsuperstar dom\nstor z\nste ggles\nstandardi zing\nst com\nsrikak ulam\nsoko lov\nsli abh\nshin sky\nscri abin\nschae ffler\nsalud tues\ns dut\ns ational\nroh rabacher\nro zon\nritch son\nrelax ant\npenet angui\npeat free\npeach ey\npar sa\npalimp sest\npage boy\noutri der\nold castle\noil fields\nnw m\nnh h\nne we\nnal in\nn swe\nmy ung\nmot lanthe\nmor ley\nmissi bility\nmini bike\nmilin kovic\nmetabol ic\nmel zer\nmanga art\nmac queen\nm schat\nlu ster\nlive it\nli ket\nleh tonen\nl tw\nko lej\nkk kon\nked die\njo kinen\nit ep\nirish food\nil minster\niklan bandel\ni mid\nhom unculus\nhin kie\nh pb\nglen roy\ngir li\ngame keepers\ng itation\nfo scar\nfelly chibi\nduke mbb\ndu err\ndoublec lick\ndocu drama\ndo ko\ndeath fest\nde positions\nde activation\ndab bler\ncp bl\ncover taffairs\ncorri do\ncomplex mag\ncleanair day\ncas kets\nc cleaner\nbushwack ers\nbolo gn\nboiler football\nbo rea\nblunder buss\nblooddonor day\nbi bury\nbhavi or\nbb onday\nbarn ham\nbarking side\nba stin\nat eliers\nan ata\nam bis\nâĺ¢ ï¸ı\nචŃ\nس ÙĨ\nÎ »\nwr angell\nwmn news\nwaterlo oroad\nwar iner\nun american\nu jung\nu baldo\ntro ver\ntransc ranial\ntran sunion\ntor on\nto history\nthe quint\nthe fire\ntearitup bts\nta vy\nt ldr\nsta ed\nsig ny\nshin nie\nsecondam endment\nse ssa\nsch lad\nsav iler\nsav alas\nsacher torte\nsac onf\ns fan\nrun rocknroll\nru dis\nrit chi\nrep brian\nre vine\npubli k\nple be\npi est\npa ide\noriginal music\noliv arez\nog ba\no ases\nnun thorpe\nnincomp oop\nmurali tharan\nmu ahaha\nmilk wood\nmic rob\nmc kidd\nmc clair\nmad awas\nly ford\nludo vic\nlec tronic\nla ppe\nkno l\nkim mi\nkilly begs\nkeving ates\nkam ran\nkaha pon\nji moh\njames ra\ninst ants\nimper io\nilly ria\ni vette\nhook land\nhome biz\nhei den\nhans raj\nhan ish\nguerre iro\ngary player\nfox e\nfl ach\nferra gam\nfelic ita\nfas i\nex other\nepi dermal\nduc kies\ndragon fire\ndin iz\ndelaha ye\ndavid tutera\nd illy\ncu pido\ncoupon code\ncou loir\nclau dy\nchi a\ncdn muni\ncaste ism\nbur ano\nbonifac emwangi\nbb tag\nbar se\nb hola\nav ait\nautau ga\nau pt\napur va\nane choic\nan sip\nal chemists\nadul ted\n< :\nðŁĺİ ðŁĺı\næ¥ ½\nà¸ŃภĶ\nÎ ²\nzel ina\nzaven tem\nyar r\nwil banks\nwhy tele\nwapis kat\nvs ner\nven eered\nvel achery\nv ul\nusc g\nu vs\ntw ich\ntraut man\ntran sept\nti meee\nti deswell\nte knik\nt mobi\nsuper ia\nstone walling\nstig ler\nste iff\nstar field\nstam baugh\nspar red\nspac et\nsp ack\nsou fri\nsof l\nsing lish\nshi mane\nsheryl sandberg\nshar mil\nshadow land\nsha hani\nroo tes\nresonance fm\npower sports\npern ille\nparamilit aries\noc tor\no ger\nnullar bor\nnu groho\nnor val\nno ton\nnever where\nn cra\nmu zzled\nmous y\nmal um\nly se\nloubout ins\nlight water\nkentuc kian\nkapp kvew\njake canuso\njah ren\nis overparty\nindi anidol\nimagin ation\nic cc\ni hi\nhat sune\nhasan minhaj\nha xe\ngou d\ngat chalian\nfox wood\nfight like\nexcep tional\neti os\nen demol\ncut work\ncogn itively\nclo ven\ncine ws\nchrist ofer\nchic est\nchan ute\ncb live\ncan ley\nby bee\nbun che\nblu shed\nbla si\nbille vans\nbi erman\nbeyond borders\nberen ger\nbar ad\nback firing\naudi rs\nasur ya\nas mussen\nanastaci afan\nan jum\naly goni\nalexis dejoria\nìĩ ¼\nâı ²\nاÙĦ ÙĪ\nË Ļ\nza popan\nyugosla vian\nwol i\nwhatwomen want\nwei de\nwe hi\nvar ney\nuse ums\nure port\nuniversit at\ntu en\ntu bo\ntrous dale\ntrans genders\ntown sfolk\nthere venant\nthene we\nthe kings\nthe dog\nta illon\nta ff\nswee eeet\nsunny d\nsu gg\nspu bli\nsport scar\nsp indler\nsnor kels\nsee scandies\nscu mper\nsc ult\nriver ford\nret tig\nreal bobby\nre eth\npri yas\npr newswire\npl sd\npaul vandyk\npaestu m\nnois ily\nni ve\nnatali ec\nnar ia\nmondaynight football\nmeso america\nmcfar lin\nman down\nma ari\nlu sby\nlu key\nlochal sh\nlo keren\nleve que\nla il\nkron ik\nkrat er\nking sheath\nkil beggan\nkhe ir\nkatar zyna\njag an\nini quities\niglesianicri sto\nhouse boats\nhitt ite\nhin ny\nhen ninger\nhe men\nhc so\nham ley\ngrimac ing\ngiall orossi\ng mac\nfur qan\nfre dro\nfl ds\nfin eness\nfear th\nfail over\nfa ile\neth nom\ner sten\nentin el\neng ale\nen ak\nedmund ston\nedmun dmc\neast brook\ndj k\ndisco ve\ndev fest\ndeli ve\ncyan ins\ncro kinole\ncookier un\nconco ct\ncomman deer\nco fo\ncl ines\nchrisl illey\nchaun cy\nbig al\nbhu pinder\nbc f\nbar rela\napp all\nanton ello\nan us\nala ine\nal gor\nag ena\nad du\nðŁĺī !\nðŁı ·\nðŁĩ«ðŁĩ ¯\nาภ¡\nyou togive\ny ine\nwer ker\nvoteenrique fpp\nven de\nvel lir\nuon bi\nu mut\ntragic ally\ntho re\nthisplace matters\nthe dukeof\ntdamerit rade\ntanz ani\ntan credi\nsyste mically\nsyndic ate\nsurrep titiously\nsupp l\nstone m\nssi an\nspitt sburgh\nso al\nsi ame\nser am\nsco vel\ns made\nru pe\nrt dna\nrope way\nro gie\nriver cruise\nrepos ado\nre blogged\nraffa ello\npoly clinic\npickle back\nopen democracy\noldro yd\nofor igin\nnor berto\nni mi\nneu wirth\nnet working\nna ac\nmoon lite\nmoog musicinc\nmicron auts\nmc gowan\nmay en\nmat chett\nmargare torr\nmar te\nmagne sia\nliquid ator\nlikeli ke\nlady bird\nla fer\nkorn field\nki ger\nka ay\nka abi\nk ount\ninstaf rame\nindoctrin ating\nilaiyar aaja\nideolo gue\ni star\nhel eng\nhallo f\ngwen pool\ngonebut neverforgotten\ngo bu\ngly pto\nfit zy\nfil omena\nfe vered\nescul tura\nduplic itous\ndramatur gy\ndrag strip\ndit zy\ndev ine\nden nie\ndemo te\ndefen sa\ndavis ville\ncre use\nconden ast\nck ert\ncity break\nciel ito\nchi leans\ncaterin atweets\ncas ady\ncar ai\nbun du\nboot legged\nback thursday\naxi ata\naw adh\nauto immune\nas af\nanton ino\nah ti\nadoptdont buy\nac tes\nabsin th\n/ *\nðŁĺĦ @\nðŁĺĤðŁĺĤðŁĺĤ "\nðŁIJ Ĩ\níĥľ ìĸij\nಠľ\nà¤ľ न\nydr com\nxx xiii\nx wing\nwhit en\nwe ssmith\nvox els\nvote eff\nvicti misation\nvan ney\nuper man\nun truth\ntu si\ntowel day\ntom ey\nto bia\ntimeout newyork\nti bbles\nthr ought\nthebig show\nthe point\nthan son\ntell ico\ntar onegerton\nstand asone\nss ahluwali\nssahluwali amp\nsports guy\nsi skel\nshrie ks\nsemrush chat\nsemin chin\nscoo ks\nro len\nrequ in\nrapid kl\nrand fish\nquad ra\npersonalized learning\npear ce\npa ji\nott oman\not ara\nomer ase\noli ka\noko th\nob y\nnisargad atta\nni est\nnanta hala\nnag ul\nmyel itis\nmy til\nmur f\nmor rilton\nmis smo\nmg sv\nmg mt\nmcel wee\nmcdonald suk\nmay bach\nmatti seman\nman souri\nloui seminchin\nlondon fashionwk\nlef tie\nle chner\nkw qc\nko ho\nkai lee\njor is\njo dies\njel inek\nist ure\ninno cen\nin nnn\nimpro bab\nhyper visor\nhtown rush\nhow you\nhoop shabit\nhitman hatton\nh fi\nf gl\neduc ación\nearth watch\ndr mark\ncy games\ncoun tess\ncospla yer\nco if\nch ough\nc tweets\nbuen viernes\nbryan habana\nbar ao\nb go\nax tell\nandro scoggin\nam ud\na kee\nðŁĵ ¬\nÚ ij\nzz ese\nyaku tia\nwürz burg\nwhoo ped\nv mx\nun shaken\nume ed\ntubeli ght\ntre mper\nthe monkees\nsweet briar\nsvend sen\nsuyyash rai\nste ilac\nsteilac oom\nstay ton\nslu mp\nsimple things\nsimon rim\nshowoff bydesign\nsho shan\nsea houses\nscott brown\nscari fication\nsc udder\nsargas so\ns gameday\nru bias\nreli ved\npupu sas\npossi ble\npliss ken\npedo bear\npas sy\nour girl\nok tober\nok cps\nnit schke\nneonicotin oids\nmo hom\nmira bilis\nmat lock\nmario goetze\nlet d\nla dles\nks fa\nkefla vik\njust is\njon jo\njason segel\nit ro\nir regulars\nio va\nins angu\nim pe\nhu lett\nhost elling\nhoo ter\nhof stadter\ngro b\nglobe debate\ngent ly\ng anger\nfo sco\nesche w\nelm endorf\neco logical\ndl na\ndil ate\ndesp ina\nde constructs\ndar denne\ncover crop\ncor ine\ncomp ilers\ncolo s\nco habiting\nclam bering\ncin da\nchristoph ers\ncal away\nburn sy\nbuech ner\nbu in\nbroy hill\nbro oo\nbom ani\nblacke yed\nbeech mont\nbe sse\nba ena\nat mega\nash kelon\nas j\nan ual\na ati\nðŁĶ¸ ðŁĶ¸\nðŁĴķ "\nðŁĩ§ðŁĩ ¾\nðŁ¤ŀ ðŁı¼\nyi wu\nwil sey\nwhat up\nwarrior games\nwa al\nw vt\nthereal dcf\nthe process\nsu see\nspe ight\nspar tina\nsick nesses\nschar pling\nsar ab\nroot sof\nregur gitation\nread aloud\npun ti\npro kop\npres byo\npolar ising\npo kiri\npli mpton\nplas mas\npla i\nphon ological\npenetangui shene\npashupatin ath\norganic gardening\nomon sters\noh ba\nnimb in\nnak agawa\nmish al\nme dy\nmarcou x\nman sky\nmal iciously\nmal dita\nmake theroad\nmac found\nlon min\nlipsy nc\nle toya\nkun ze\nku us\nker an\njack black\nja sen\nio dide\ning cancer\nind sey\nhydro foil\nhoyas axa\nhottie oftheweek\nhom inem\nhollywoodun dead\nhawkes bay\nhar ner\nh gf\ngr itters\nger t\nfp gas\nfoo dy\nfan cams\nexeter cathedral\nevangel ic\neuro hockey\nen ve\nelou ise\ndul fer\ndu kie\ndis connect\ndet ente\ndele k\ndefe ctions\ncome shome\ncol ons\nchatto padhyay\nbeyond blue\nbec q\nbaby center\nay as\naspir ing\nari stop\napollin aire\nðŁĴŀðŁĴŀ ðŁĴŀðŁĴŀ\nðŁİīðŁİĬ ðŁİīðŁİĬ\nðŁİĢ ðŁĴķ\nâĸ¶ âĸ¶âĸ¶\nï c\nyorks biz\ny aiba\nwhere thecar\nwherethecar sare\nvilla ggio\nu iz\ntin ian\nthru pp\nthr ou\nthe fan\ntar kenton\nstreet photographer\nstin c\nste iger\nson news\nsoc med\nscy thian\nsat in\nrusty wallace\nrp ms\nrox eter\nresul tado\nquo gue\nqu ne\nq af\npulver ized\npoloni ex\npart in\npa wer\non vif\non k\nnot ch\nnj ie\nnew tek\nn pratc\nmy yyy\nmuham madi\nmen ke\nmar na\nmanipu lators\nmag at\nlove is\nlc ss\nlau ding\nlanvin official\nkab at\njy vä\njust blaze\njo bar\nje sters\njan ai\ninthe us\ninst ax\ni ben\nhil le\nhe cking\nhapha zardly\ngay ton\ngam bar\nfar th\nfad al\neric holder\nduck weed\ndru silla\ndo komi\ndeci r\nd gh\nct fu\ncritic ality\nci ber\nch ando\ncd q\ncare homes\ncar others\nc icc\nbasti at\nautorick shaw\nat olls\nand ymurray\nam ang\nal mera\nal dea\nðŁĺī ðŁĺģ\nw bi\nvar itek\nup ham\ntv sn\nturn age\nto iled\nthorn ham\nthe open\nthe agenda\ntan lines\nsuperse des\nsu cr\nstaf fing\nspe di\nspac ial\nsouth westerly\nsmooth jazz\nsharethe lex\nsenior itis\nsb vb\nsand ero\nring send\nrecap turing\nre xit\nre ids\nquie ted\npushawardsteam kisses\npu entes\nprocess ing\npor ttal\npop crush\npir u\npeter ptur\nper illo\npat summitt\nous music\nor ani\nnew line\nmordi alloc\nmo hi\nmo barak\nmit ron\nmin k\nmerri mac\nmercury theatre\nmemorab ili\nmar la\nmac n\nlm x\nllu ll\nlis ap\nlan olin\nlac our\nl fd\nkuns thistor\nko kesh\nkate ys\njon no\njeric ho\njanegoodall inst\njal on\njae suk\nic entre\nhus sein\nhul lah\nharsh ini\nhappy day\nhai ro\nh nl\ngen co\ng apping\nfriends notfood\ner len\nefe cto\ndo wels\ndit mars\ndespo tism\ndab rowski\nclair ton\ncel g\ncar on\ncar hart\ncal ums\nbu ang\nbrum field\nbrit birdlovers\nbristol baby\nbbc womanshour\nbarbas ol\nbag man\nback bencher\nas uk\nanti dotes\nann at\nanarch y\nanandiben patel\nam ola\nagh olor\nacro wn\n!! (\n! ¡\nðŁĻĪ #\nâĿĦï¸ıâĿĦï¸ı âĿĦï¸ıâĿĦï¸ı\nâĺĢâĺĢ âĺĢ\nzoni bali\nwhite tails\nvincen zonibali\nvas sy\nupadhy aya\ntu ya\ntre dge\ntrave le\nto dor\ntime z\ntechnology news\nsustainable tourism\nsurfact ants\nsun it\nstrang les\nshor tridge\nshelar ashish\nshe a\nsf ile\nsay no\nsair lines\nrudhram adevi\nrob schneider\nri ffin\nreyk jav\nresusc itated\nra heel\npublici zing\npin aka\npeter s\nobstin ate\nnt fs\nmix ing\nmcgon igle\nmc girt\nmad ball\nlydi ate\nloy e\nlow der\nlex y\nlen o\nlauren goodger\nkah lon\nk nd\njum illa\nju mu\njaye gi\njamie whincup\ninten tional\nima x\nicom edy\nhondac lassic\nhh b\nhaus man\ngw and\ngun gor\nger mline\ngaz idis\ngal ad\nfr st\nfor fun\nfit girls\nfish hook\nexped iting\nev t\neur jpy\neryn gium\nenough said\ndre ll\ndispro ves\nctu local\nconf rence\nco pra\ncath ao\ncar olo\ncann ington\nc agu\nbreak beats\nbrah mas\nbowdoin college\nbor onia\nbo boli\nber nas\nbaw se\nbate mans\nbas otho\nbarcel one\nbailey m\nan andi\nalb ina\naffe y\nac ares\nzi zou\ny stem\nwood cutter\nwilliam byron\nwest fjords\nwal b\nwainsco ting\nver dure\nvac as\ntony dungy\ntoly atti\ntoku shima\nthermopy lae\ntambu wal\nsushmit adev\nsushmitadev mp\nsto hl\nstag es\nsick bed\nshri vastava\nshakespe arian\nse sion\nschool bus\nsa ille\nru disha\nremedi ate\nre traces\nre appearing\nrally australia\npu recork\npoke mont\npo thos\nplay girl\npigeon hole\nout num\noli gon\nol itz\nno vis\nnit z\nni f\nmyo b\nmpl s\nmech warrior\nmccar ver\nmarypopp ins\nmana hawkin\nley house\nleve rett\nkuch h\nker ber\nk mr\njo wett\njeff vandermeer\njare tt\njack sock\niter ating\ninf x\ninci dent\nimbu e\nhuach uca\nho ta\nhe fe\ngoogle fiber\nglen burn\ngets old\ngabri ella\nfresno bee\nfra se\nfire department\nfahri ye\nf bw\nexten ded\nest á\ner ay\ne ser\nduv vad\ndrais lv\ndo dig\ndev co\nde ak\ndam pens\ndam ia\ncryp tids\ncra dley\ncham bal\nce dis\ncarou sel\ncab g\nben hur\nbe ika\nattrac tant\nas police\nare alestate\napple store\nanastaciafan ily\nan shuman\nan op\nal cide\nðŁĴª âĿ¤ï¸ı\ny thing\nww fcofficial\nwhy so\nwapp reciationday\nwag gin\nveronic amerrell\nveg fest\nus apro\nunder story\nu ha\ntrenton thunder\ntraf ine\nti med\nthir roul\ntheatre r\nteachers matter\ntar boro\nsym metra\nsylla bic\nsylla bi\nswin ner\nsw afford\nsuk hi\nsper anza\nsnow patrol\nsheridan smith\nsak aguchi\ns suk\ns birthday\nrigu eur\nregg a\nreach out\nre issuing\npsych today\nps bhumi\nplay boys\npirates fb\npe vsner\npav itra\nparth asar\norac les\nny m\nno cent\nnarcole ptic\nname sakes\nmon ken\nmol vi\nmeur ice\nmassey hall\nmary ville\nmani festive\nly lm\nle sufi\nlal wani\nkassiede paiva\njyo ts\njul lie\nji raiya\nj ato\ninsol ence\nimitation game\ni xi\nhouston ian\nho ja\nhick ling\nhash d\nharrison ville\nhar gis\nh sh\nh frs\ngil bane\nfriend zoned\nfam ke\nesguer rat\nequi pedefrance\nel neny\ne boue\ndisney store\ndi ero\ndenver broncos\ndeca inc\ndat du\ncu bby\ncoo kislands\ncar ri\ncapp elli\nbro in\nbrewery ommegang\nbr acy\nbor gat\nbook marked\nboi vin\nbo tv\nbo hu\nband itos\nback fill\nam erie\nablu tion\nabdic ated\naar mstrong\n. //\n\' *\nðŁĵ ĵ\nðŁĵ ¯\nðĿĻ ¤\nÑģп оÑĢÑĤ\nz brush\nye are\nwur tz\nwin ry\nweekend warrior\nwe missyou\nviñ ales\nvent ress\nvait la\nun bundling\nun boun\nthu an\ntho w\nthe leftovers\nthe bath\nth ope\nth ain\ntexas childrens\nten sing\ntb one\ntages spiegel\nstre k\nspi rou\nsp atz\nsoooo on\nsen whitehouse\nsemp iter\nsch amps\nsales woman\nrober talai\nrevdr barber\nradio humberside\nra himi\npu pusa\npro mazda\npied montese\npay oneer\npal mb\nouag adou\nor dic\nobam as\nnor um\nnor mmacdonald\nnationaltree week\nnarrati ve\nmurphys boro\nmulat to\nmin day\nlibrarian ship\nlen na\nleish mani\nle mus\nlauri ston\nlan ta\nkork maz\nkim yoojung\nkha chanov\nkeesh ond\njan ki\nj po\nin nu\nilo gy\nhun ni\nho stile\nhar ling\ngiri raj\ngior ni\ngener is\ngel nails\nfr ronconi\nfore shadows\nfirst love\nfair tex\nfa er\ndre ds\ndisappro ved\nculver house\ncillian murphy\nch x\ncf trust\ncarpath ia\ncall anan\nbsn l\nblu ecar\nbis wa\nbenic assim\nbath ong\nbal bo\naw alla\napp ea\nan kers\naccom pli\nac ali\na art\n________ ______\n. ðŁĴĭ\n. âĿ¤ï¸ı\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃ\nðŁĺĶ .\nãĤ¤ãĥ ī\nâĿ¤ !\nworldre sources\nwood cote\nwinter burn\nwild hearts\nwh attt\nwan ka\nvacation er\nus marinecorps\nun ac\nu alr\ntoy drive\ntom mies\nthisisla fferty\nteter boro\ntali aferro\nsusanc alman\nstor yo\nsteel city\nss di\nsolu te\nsm ount\nsig al\nse ssler\nse pak\nrou le\nrecru te\nre awaken\nran ald\nram nath\nq ra\nprie ster\nphil vassar\npender yn\nparame shwara\npar ram\np ku\nnational ballet\nmuld row\nmor bi\nminiature art\nmat amata\nman ute\nmalak and\nmakin de\nlucifer ian\nld d\nkun du\nkil led\njove tic\njack sboro\nj é\niro ha\ninven tiveness\ninter school\nichi bi\nic helle\ni ara\nhex agon\nhemlock grove\ngrand hyatt\nget creative\nfur uya\nfre on\nfli ppa\nfinsbury park\nfangasm spn\nevil doers\neu v\nebolare sponse\ndj ay\ndepar tement\ndelas oul\ndar low\ncu boid\ncristin avee\ncen kuy\nbri el\nbou ma\nbo sn\nban tu\nbal og\nan vils\nallevi ated\naddic tedto\nabsurd ities\nab ida\nðŁĺī âĿ¤\nðŁĵ° |\nìĻĦë²½ íķľ\nê°ķ ìĬ¹ìľ¤\nzi ther\nx seed\nx imab\nwwe uk\nwit chy\nwin eland\nwake hurst\nund ine\ntry it\ntransforming lives\nthe visualart\nt lim\nstock pot\nsony six\nsomerset levels\nskysports boxing\nshri vel\nser dar\nsampal oc\ns deep\nrwc md\nrudi ments\nrosehill gardens\nrespon s\nrepp aul\nre mp\nre marriage\nram asamy\nqui vira\npropor tionally\npom pton\npil ote\nop aline\nobjec tify\nny k\nni hari\nnett le\nnam er\nnafp lio\nmurry sville\nmul vi\nmon tara\nmoanal ua\nmichelin tyres\nmic hale\nmi rella\nmetta worldpeace\nmc cc\nmb ury\nmatsu ura\nmate i\nmaic ha\nloy ola\nlimkok wing\nlen n\nla quan\nl senews\nl bm\nkro mer\nkpor zee\nkarolin ska\njim norton\nje ffe\nhepha estus\ngu ate\ngreen law\ngre er\ng anc\nfur o\nfoam posites\nfil mes\nfh su\nfat in\nfar ge\nfa shi\nf km\nesguerrat ommy\nequ alizing\near les\ndiscord ant\ncrou cher\ncook sey\ncon quests\ncommensur ate\ncole engarcia\ncol son\ncharlo tt\nburgun dy\nbroad field\nbre th\nbray shaw\nbli ssett\nbha sh\nben lovejoy\nbb nai\nbarn sdall\natar axia\nas oftball\naq w\nantho cyanins\nðŁĴħ ðŁı¼\nðŁıĪ âĿ¤ï¸ı\næ© ĭ\ny uni\ny il\nwolf hall\nwhow ould\nwater proofed\nvisit ations\nver dant\nuniversityof ky\nun enthusiastic\nty b\ntrilli um\ntraverse city\ntravel tech\nton o\nthe score\ntar da\nsth elife\nsteve kubota\nste wa\nsm older\nsimon helberg\nsil sila\nshor tie\nseattle pd\nsalis bur\nri ho\nrha bdom\nrenov ator\nrene a\nreggie watts\nreal bob\npu zo\nprodu c\npower ups\nore k\non elxn\noff ootball\no al\nnew track\nne te\nnaz em\nmusic brainz\nmun ira\nmu tha\nmovie podsquad\nmoto guzzi\nmoon day\nmonte casino\nmo thi\nmindless bhavior\nmedi ates\nmanse hra\nman sarovar\nman ce\nlydi ard\nlive well\nlincoln wood\nless a\nles bury\nlee z\nled low\nle evalley\nlaver ton\nkle m\nkaw ana\njan ela\njae hn\ninstap rnts\nindianc inema\nindian art\nin in\nici zed\nhosse in\nhistam ines\nhelp dogs\nhant s\nhahahah hahaha\nha dee\ngreen team\ngreen slade\ngno stic\ngc titans\ngaming life\nga es\nfar yab\nf grfc\nelç insangu\nel off\neat my\ndy ker\ndou we\ndemocrat shate\ndaver ayner\ndaverayner fund\ndanger ou\ncontra ven\nclu bby\ncityo fl\nche tbaker\ncb n\nbook binder\nblack magic\nbbc newsline\nbad ulla\nb ici\nav la\naubu sson\natl v\nashi m\nash mont\napu estas\nappell ate\napalach ee\nam ade\nag morethanever\nabduc tors\n^____ ^\n+ ...\nðŁĺ¡ðŁĺ¡ ðŁĺ¡ðŁĺ¡\nðŁĸ į\nðŁĴĥ #\nðŁ¤Ĺ ðŁĺį\nìĸ´ ëĶĶìĹIJ\nãĤ»ãĥ¼ãĥ© ãĥ¼ãĥł\nØŃ ÙĦ\n× ķ×\nzhu kov\nyerush alay\nwaz iri\nver such\ntü bingen\ntwitter artexhibit\nturtle dove\ntrue bloodh\ntruebloodh bo\ntri sha\nthereal jrsmith\nthau low\nth ato\nsydney airport\nsp azz\nsociete generale\nsling erland\nselec tronics\nse ige\nsan marino\nrun withthe\nros sett\nro dolph\nric an\nrespir ator\nre probate\nra issa\nr pk\nqua hog\nqu ite\npub chem\npr annoy\nponty clun\nper tain\npepp as\npe ons\npaw lak\nox shott\nou trunning\nol ver\nny asa\nnew burn\nnag ur\nmuck ross\nmor rendo\nmin et\nmikul ski\nmeso american\nmelbourne vixens\nmedce zir\nmar ilou\nma kk\nleve tt\nl gas\nkyo ani\nkun in\nko zik\nkingston ian\nki bbe\njur upa\nii e\nif not\ni wo\nhur acán\nhor ne\nhome ground\nhedge fund\ngg d\ngenna io\ngameof th\nfull set\nforsy th\nfo pp\nfic ou\ndre ddy\nde conge\ndance mom\ndam pier\ndad dio\ncubam in\ncr inoid\ncityof hope\ncerti fiable\ncenkuy gur\ncastell defels\ncasey veggies\ncas sata\nbupre nor\nbru ces\nbee bo\nbay way\nazzur ra\navi dly\namust fall\nam cs\nal uk\nadvo cat\nadam antium\naby ad\nðŁĴ¥ ðŁĶ«\nðŁIJ¯ ðŁıĢ\nðŁ¥ĩ ðŁ¥Ī\nÙĪÙĬ ت\nyear so\nwe dem\nw tw\nvi dhan\nus ick\nunemploy able\nun fail\nultr at\nuconn nation\ntruth iness\ntri maran\ntr icon\nsylac auga\nswain wright\nsuman th\nston em\nstereo typically\nslam dunk\nsi yab\nshoe making\nshekhar kapur\nscrew vala\nsau v\nsar os\nsal pointe\nsaffron walden\nsaar brücken\nrosar ito\nrho donite\nq z\npresiden cial\npre empt\npor ritt\nphen olic\nover indulgence\noren da\nonye ka\nonly one\nnever again\nmutil ate\nmox ey\nmoon shine\nming in\nmeh sud\nmc coll\nmari otti\nmali ks\nlogi o\nlo sf\nlife ison\nlength ened\nl sx\nknau ss\nkarak achat\nk wal\nk enda\njoann ak\njapan trip\ninter laced\ninnocent drinks\nharpur hey\nhan ko\ngwan gh\ngram mes\ngener alize\ngan jam\nfran ka\nfon da\nfau gheen\nf one\nf cau\netu i\nel rich\ndruck mann\ndhru v\ndav ao\ndance team\ndanc elife\nd poy\ncopper heads\nchit arra\nbuff a\nbronz ino\nbeat itude\nbaz a\nball gown\nas tha\nann g\nangel amer\nam po\nall anguage\n(âī§ âĸ½âī¦)\nðŁĻĪ âĿ¤\nðŁIJ¾ ðŁĴķ\nðŁ¤ ´\nê¹ĢíĺĦ ì¤ij\nâľ İ\nмÑĥ з\nzay nab\nyassi r\nwave form\nwa hili\nverbo ten\nve ery\nur anger\num ji\nu stour\ntur riff\ntrek kies\ntibur ones\ntal las\nsyri acivil\nsyno p\nsu vi\nskin z\nshe rer\nsf pride\nsa wal\nrun dell\nrenault sport\nrandomhouse kids\nquater mass\npo liquin\npink print\npe ch\npanch ito\nos agie\nole ta\nol les\nnup ur\nnorth wick\nno logies\nni dhi\nnathan carter\nnag ach\nmortalkombat x\nmin nie\nme vani\nmaki shima\nlorett alynch\nlondon bookfair\nloc ked\nlivel iest\nlen a\nknoll wood\nkal ert\nkal en\nk ach\nju ss\njoker to\njo sc\nint ent\nimacelebrit yau\nhome star\nhip life\nhier ophant\ngrist mill\ngreen acre\ngood smile\ngo yette\ngee khour\nge fil\nfath ima\nfairmon thotels\nfa ar\nev onne\nero v\nener d\ndonnell an\ndissolvethe union\ndesi rability\ndeep water\ncubamin rex\ncrusad ers\ncounty pd\ncor red\ncongru ence\nconfis cates\ncomicboo khour\nchoco holic\nchildren sphila\nchar man\nchanging places\ncap leton\ncamp life\ncall inan\nbunny ranch\nbro mbor\nbou chet\nboom ed\nbom mel\nautonom ou\nas ra\nanton ina\nalex fromtarget\n. ðŁĴ¯\nðŁĴĥðŁı» ðŁĴĥðŁı»\nðŁİĻ @\nðŁĩ³ðŁĩ µ\nðĿĺ °ðĿĺ\nìĹĨ ìĿĦ\nห à¸į\nye tti\nye aaaa\nyarra valley\nwor le\nvel ox\nusav mex\ntwof old\ntrue islam\nthewine society\nthe strokes\nstress less\nslu twalk\nskyl ä\nski ve\nseraf ini\nrice gum\nrefrac tometer\nred light\npra geru\npositive psychology\npo bre\npiri formis\npink day\npet worth\npac zki\nnut meg\nnur singh\nnsw fires\nneglec tful\nnatalie ben\nn gen\nmed students\nmc nicholas\nmar ske\nman gus\nku news\nkou ki\nkh r\nkedle ston\nkarolinska inst\nju icio\njimene z\nicy cling\nhhhh hhhhhhh\nhernan dez\ngom ustangs\ngol fing\ngla k\ngabbi adini\nfu rence\nflugel horn\nfang ed\nface thenation\nespañ ola\nepi k\neca illat\ndream hack\ndivisi e\ndis loyalty\ndetroit lions\ndel mundo\nde ine\ndaniel sahyounie\ncopy writers\ncomeu ppance\ncolbi ecaillat\ncol wyn\nciti c\nchrist ingle\nchen ault\nchau rasia\nchand ran\ncannabis cup\ncaldic ott\nblu elive\nblock aded\nberry ville\nban kai\narri vat\nang k\nalma da\nðŁĹ ¡ï¸ı\nðŁ¤ŀ ðŁı»\nîIJ ij\nìķĦìĿ´ ìľł\nಠł\nzaz ie\nyir uma\nwomens institute\nwilli mantic\nweak ley\nwe ser\nvi goda\nvern or\nun dee\nugly dolls\nu rad\nu dot\ntown speople\ntic at\nthor st\nthisis robthomas\nthere ef\nt ck\nt ague\nstream fakel\nski ddle\nsilicon valley\nsi os\nshin se\nsc aife\nsas sen\nsan vers\nsan sar\nsalati ga\nren at\nrefin ed\nre ffing\nre considers\nrain man\npo quo\npo ley\npierce brosnan\npe adar\npay al\npartiti oned\npanther sihc\no kun\nny xl\nnew adult\nneg ar\nnat araj\nmurad ali\nmonoc acy\nmo sphere\nmel bur\nmar gie\nmand ra\nm jordan\nli diab\nla prairie\nkou rou\nkan go\njaf far\nj bl\nil ri\nil itch\nhot list\nhollywoo dimprov\nhobo ken\nheaven onearth\nhe eney\nhappy dance\nh fe\ngra ying\nglo ball\ngau ahar\nfram ed\nfire trap\nfar r\nfanta sticks\nfant in\nfanarmy faceoff\nfac cio\nextro verted\nem ption\nelast ica\neast wood\ndo ku\ndavid cicilline\nda a\ncurrent mood\ncur lews\ncross bill\nconver gys\ncolor block\ncl ande\nchi rac\ncatat onic\nblind folds\nbishop briggs\nbis now\nbertel smann\nbas ma\nbas f\nb lear\namey aw\n\' .....\nìĸ´ëĶĶìĹIJ ëıĦ\nê tre\nyar der\nweare nigeriancreatives\nwatch roh\nwal ser\nvibr anium\nungovern able\ntransparen cies\ntit p\nthere se\nte ela\ntam ako\nta fari\nsy st\nstai the\nsol man\nshe iks\nshadow bringers\nsb ca\nsay d\nsav ina\nsar ch\nsan marcos\nsan day\nrobri ggle\nridge dale\nredbul luk\nreal z\nrc z\nradiom irchi\npunch drunk\npro circuit\npri ddis\npretty man\npre me\npower outage\npaul sboro\npan tin\nolivi as\nobe id\nneil n\nnaj era\nmu jh\nmonarch sway\nmizzou football\nmir choff\nmilli metre\nmen elik\nmc daag\nmax y\nma ppin\nma aan\nlu ffa\nlong stre\nlinde mans\nlik as\nlearn with\nlan dic\nkom odo\nkim ya\njer ram\nja q\nits better\nintermitt ent\ninterlo chen\nin ox\nhor nell\nhoo ten\nhallo weekend\ngen ious\ngad di\nga hd\ng ft\nfun com\nful ls\nfeder line\nense mble\nelli es\ndwar fing\ndr at\ndown played\ndji phantom\ndis lodged\ndhive hi\ndary ll\nd marc\ncow li\nco sum\nchristinam ilian\ncho ong\ncatalo ged\nbusines splan\nbru mmer\nbridge point\nbor us\nber mejo\nbel gica\nangio genesis\namre zy\namp oule\nam dra\nalbino kid\nalbari ño\nal fieri\nad akar\nabre wer\naaaa aaah\nðŁij£ ðŁij£\nðĿIJ Ħ\nãģ¾ ãģĻ\nzap atista\nwu du\nwit mer\nwildlife bcn\nwes sun\nvoy aging\nv arez\nur anga\nturquo ise\ntr bam\ntom chaplin\nth appa\nsw apan\nstra tham\nstar music\nsoul calibur\nsilvers mithing\nside of\nsg ill\nschem bri\ns ative\ns alla\nrussia invade\nrun up\nru ang\nrob sten\nro so\nrecl ines\nre os\nrat emy\npro core\nphoenix comicon\npen kridge\npassi vity\npa ap\nover reacted\noven ow\not aru\non das\nom exico\nohio an\nofficial tf\nod cast\nnu die\nneutro phil\nneder lands\nnd wbb\nnay ef\nmorning drive\nmi festival\nmer itor\nmc mee\nmax thieriot\nm fy\nla der\nki dero\nk btx\njewelry making\nive ta\niri an\ninver gordon\nindi ranagar\nin calculable\nin aki\nim pasto\ni ur\ni il\nharrass ment\ngreen peac\ngod frey\nger ome\nge ti\nfibro blasts\nfarahkhan ali\nfal aise\nf z\nduc o\ndocument a\ndc cheerleaders\ncolling e\ncha har\nch abby\ncell c\nceli e\ncandy crush\ncancel o\nburgen land\nbi anch\nbhil wara\nbbc southeast\nbb waa\navger opoulos\nath enee\nander ssen\nambassad orial\namb am\nack y\nabur ke\nab om\na amar\n# *\nðŁĩ ´\né ł\nwor land\nwool pack\nvital is\nvalenci agp\nus ila\nur anium\nunder berg\ntrop fest\ntrol ly\ntitch well\nthunder cloud\nther ma\nth acher\nte jo\ntan trum\nta kat\nstrib pol\nstress or\nsnu fkin\nshy ama\nshe an\nshak un\nsco delario\nsan mateo\nru shall\nround ness\nri baj\nrevol ttv\nrain forest\nr ê\nr vb\nq au\npu tti\npontific ate\npit tura\npilla ged\npatrick mahomes\no dori\nni was\nmout inho\nmott macdonald\nmm s\nmin il\nmiddle march\nmi sha\nmccam mon\nmc z\nmarath wada\nlil jon\nle pers\nkoo koo\nkin zinger\nkid scan\nkaren kilgariff\nk fcb\njust asking\njar rar\nhu ffer\nholler ado\nhersh iser\nhe le\nh icky\ngru dgingly\ngrouse mountain\ngom pers\ngo pirates\ngamep ass\nfore father\nfo gler\nf forde\nex el\nep ad\nenamor ado\nen closing\neffe l\ned leadership\ne bikes\ndu ston\ndipikak akar\nd acs\ncly dach\ncho desh\nchit tor\nchangi airport\nce men\ncard captor\nbrun ing\nbr cc\nblack hills\nbench marked\nbay side\nbar tek\nanthony anderson\nann marie\nam rinder\nag y\nab era\n^^ ~\nðŁĻĭ ðŁĻĭ\nðŁĺŀ ðŁĺŀðŁĺŀ\nðŁĮ¸ ðŁįĥ\nðĿŶ ðĿĹ\nâĢ¢Ì ħ\nyerushalay im\nyah an\nwu c\nwill friedle\nvau dre\nusa o\nunice fusa\nu las\ntony romo\nto des\nti memor\nteam blake\ntax season\ntatasteel chess\nsupercar sunday\nss ential\nsoc i\nso kka\nso den\nsig nofthe\nshum ate\nshoe bury\nsenso dyne\nscience matters\nsan ge\nsaf ood\nrespectthe water\nrefra ining\nreal kid\nqueen victoria\nque ijo\npropri ety\nprisc ila\nplain clothes\nper vious\npenn sylvanian\npar od\npag es\npac to\nover stayed\noff ilth\no tec\nnon discrimination\nnex tofficial\nner issa\nnat sec\nmyal gice\nmo wa\nmir tha\nmi w\nmedi amar\nmarth apli\nmarthapli mpton\nm vo\nlun de\nlost prophets\nlo pp\nlittle miss\nlille shall\nkw am\nkin dy\nj inga\nit chio\nim n\nhol lowing\nhello goodbye\nheat seekers\ng loc\nfashi o\nfac tional\nexhal ed\neric as\near ch\ndoo ds\ndev secops\ndeth klok\nde pa\nde form\nda hm\nchu gh\nchrist on\nchaus sures\nchak ri\ncel aya\ncan ario\nbr ind\nblack country\nbilo deau\nbick ell\nbi frost\nbeau té\nb nhs\naz ee\nay am\naug gie\naper ol\napas coe\nanti ka\nanti bully\nambi en\nadam driver\n% ."\nðŁĴİ âľ¨\nwhite cube\nwhit erock\nwar u\nwa sten\nuse lessness\nuc g\nu cr\ntier sen\nsted chat\nstaun chly\nstargate atlantis\nstal la\nsom ma\nsolympic team\nsolidar ityday\nsocialist sunday\nsnow watch\nsker k\nsin t\nsi mage\nsfor trump\nsf v\nsch ack\ns ro\nrosanne cash\nreturn able\nra vitch\nr gu\npu cke\npro scen\npoign ancy\nphilipp ullman\nperio dization\nor lan\noo bleck\nnaz es\nmonk ton\nmogo eng\nmelissa and\nmarch foreurope\nmad dog\nluc ille\nlim oux\nlie sel\nlan dex\nkt k\njuli as\njourn ée\njoe hockey\njeff burton\njav aid\ninterdisciplin arity\ninteli gence\nhon ma\nheriot wat\nha eng\ngwangh wam\ngood lad\ngin apu\ngif tever\ngavi ota\nfrequ enting\nfore shortening\nfood ways\nextran eous\nex ti\nevangelic alism\ners out\nern st\nemc coy\nelle schi\near muff\ndougi emcfly\ndiag ram\nde splat\ndar laston\nd welt\ncreature design\ncran more\ncos mas\ncor ia\ncongress i\ncon all\nci am\nce ma\ncbc murdoch\ncategor ise\nc wo\nbo we\nbir die\nbettym white\nb anti\nas pac\naldubang pag\nal music\nafric at\nðŁ¤¡ ðŁ¤¡\nâŃIJï¸ı #\nâı ¬\nworth itv\nworthitv ma\nwil ander\nway towork\nwal ing\nw co\nundere mployment\ntyranno saur\ntv k\nthorn wood\nthorn cliffe\nthisiswhywe play\nsubl ingual\nstreamfakel ovenow\nss chool\nsister s\nsimp lot\nsigni fied\nsent a\nse let\nsd beer\nschool sout\nsb n\nsal tier\nsag ay\nsa hid\ns alli\nrosen ber\nroma downey\nro sti\nreven ants\nraven loft\nr maf\npk mn\npin ako\npepper pot\np drm\nok un\nok r\nodd ness\noa week\no gaden\nny an\nnow ness\nnca afootball\nnab arro\nn ks\nmelis sac\nmanoj sinhabjp\nm jo\nlyn don\nlumb ering\nlot ter\nlas key\nkstate mbb\nkooten ai\nko sarin\nkiri baku\nkeik amara\nkail i\njosel ito\njiha dism\ninter related\nim rie\nice breakers\nhu gel\nhit oshi\nhei sel\nguic hard\ngo knight\ngo en\ngo ba\nglen arm\nflye st\never r\neric bellinger\nequalit ymc\nendof theworld\nelectionswith ht\ndoren bos\ndo vo\ndo besity\ndisin terest\ndiferen tes\ndi lett\ndam ming\ncun diff\nclub america\nchi pping\nche mbur\nchapar ro\ncel cius\ncar lock\ncan ham\ncalamit ous\nbook tube\nblan ches\nbhu tia\nben zie\nbar gen\naudra equalitymc\nattenti on\narte k\nar kit\namdra deon\nallred md\nafgan syah\na ei\n^ )\nðŁĺĻ ðŁĺĻ\nðŁĴĽ ðŁĮ»\næ¸ ¯\nâĹ ½ï¸ı\nÑģÑĤ в\nyo gaw\ny tb\ny it\nx med\nwine chat\nwil do\nwat too\nw lg\nvic om\nure thra\nunder nourished\nu sche\ntypo grapher\ntycho brahe\ntv uk\ntotten ville\nto ffler\nthu sian\ntheband perry\nthe ee\nte mo\ntail gates\nste vero\nspre paration\nspo oners\nspeci aleducation\nsnever die\nslug gish\nsister love\nshru b\nsher pao\nshe ema\nsend in\nse uk\nsab ahan\nsa or\nring fort\nrecipe oftheweek\npur ports\npoly carp\npisco po\npier son\npas sim\npar faits\npanchay ats\nover hear\nouagadou gou\nonu evo\noat man\nnab ucco\nmust ela\nmild may\nmihal y\nmicro breweries\nmasta ace\nm wi\nlon o\nlo bel\nlight sfor\nkozlov sky\nkn bc\nking bach\nki it\nkhu fu\nkgal agadi\nkevin woo\nke msley\nkan chenjunga\njoell ortiz\nindi os\nimperman ent\nima g\nhul sey\ngu yon\ngreen lawn\ngoo dest\ngo ater\nflor um\nfl its\nfin cham\nfel issa\neh ren\neft pos\ndel rey\ndavid bisbal\ncowboy cerrone\ncoug fb\ncontemp tible\ncomfort zone\ncombin atorial\nchildish ly\nchild day\ncherno ff\nchast ise\ncapital ised\nca j\nc pps\nbio shock\nber nadine\nber gia\nbeau mont\nbat tel\nballyna hinch\nal ick\nair vistara\nagye mang\nad ub\n( ?!)\nðŁ¤ ļ\nîIJ ħ\níĥľ ìļ©\nãĥĥãĥ Ĺ\nzum thor\nysle ta\ny cee\nwood bine\nwirt schaft\nw div\nvive ka\nvar dhan\nv wd\nunder cutting\num alo\ntouch ph\nthri fted\nte ching\nsuntrust park\nsqueeze box\nsou cy\nsof ast\nsk ims\nsc nn\nsauté ing\nryn chibi\nrush limbaugh\nru mor\nrose town\nregu la\nrec ca\nrd pro\nrandi zuckerberg\nps fk\npeople make\npand u\np sps\nore ille\norange crush\none town\nnu blu\nnor ie\nnew t\nna sho\nn atti\nmar ination\nmahon ia\nma inde\nlv cc\nlep anga\nleon ia\nkor ban\nkn acker\nkey leth\nk soo\njo bur\njacob sartorius\nitsin youtogive\nitch iness\niot swc\nin cant\nhé ctor\nhu len\nhor ie\nho ce\nhapp ym\nha flinger\ngro ttos\ngra be\nfur rowed\nex ab\ndu lais\ndout or\ncan ady\ncampylo bacter\nbic c\nbekin dedu\nbar det\nbally bo\nauth o\nashley graham\nardaw igs\nap uri\nanaesthe tists\nalliseeis gold\nall port\nðŁĻĦ .\nðŁĺŃ ðŁĴĽ\nðŁĺį ðŁĴª\nðŁĺĪ ðŁıĪ\n大éĺ ª\nx seed\nwä rt\nwo wsers\nwis ata\nwee ke\nw ene\nvoy ager\nvl si\nvisit savannah\ntre ve\ntrail finders\nthen ut\nthe party\ntene brae\ntar pley\nsuzanne lepage\nsuper cluster\nstephen son\nspri gs\nspi vak\nspa day\nsp hs\nsolheim cup\nshy ly\nsfor women\nschool kids\nschen ck\nsab ka\nryo ji\nry en\nrome sh\nretrac ting\nresc ate\nplat ense\npint u\nphotogra ghy\npetr ina\nper mutation\npenc illing\nparale gals\npal at\noutre aches\nopen doors\nong al\nok bokki\noh g\nnzv sl\nnormal ised\nni ort\nni ed\nnam b\nn achi\nmr selfridge\nmoun tie\nmol lis\nmob ilities\nmin ard\nmimick ed\nmile tich\nmc isaac\nmaythe fourth\nman flu\nmag gies\nmad dest\nlu zh\nlom ita\nll dubs\nlincoln hall\nlik ar\nko kol\nkim mage\nkid sand\nkeo hane\njob done\nj ma\nj hang\nitv sport\nis ingly\nid man\nhp noti\nhome opath\nhappybirthday salmankhan\ngov markdayton\nglo vers\nfu ganda\nex ican\nencro ach\nedmun dson\ndraw pile\ndo iron\ndimit rios\ndelhi dynamos\ncor vin\nconoce artistas\ncommo diti\nco atta\nbuff ay\nbee g\nbeat navy\nbe tula\naz ari\navenged sevenfold\napan thers\nano j\naldubbig girlz\nae schy\nade ci\naban erjee\n:\' >\nðŁİŁ ðŁİŁ\nì¿ ł\næ Ĥ\nâľ Ĵ\nâļ ĸï¸ı\nz ade\nyu th\nwithr and\nvicen cio\nva ar\nun block\nukin india\nuj iri\ntri g\ntransgre ssive\ntra gos\ntor v\nticke ts\nthe stars\nthe ss\nthe matrix\nthe duke\nstocking stuffers\nstafford shirehour\nso dak\nsix nation\nrs ch\nricardoro ssello\nreli x\nrecou ping\nrangers family\nradion ow\npe jeta\npaper white\noverex posure\noniz uka\nny le\nnh r\nnew market\nnaf i\nn drf\nn aldo\nmulvi hill\nme ha\nmcmen amin\nmcgon igal\nmall ery\nlogan berry\nlemn sissay\nlaun e\nla fon\nkre ay\nkim bolton\nke pt\nke ary\nk hem\njohn swinney\njfk library\njavedn laghari\nitune spodcasts\ni ken\nhor der\nhop kirk\nhl mbb\ngup ta\ngoo i\ngi onta\nghana starnews\ngar ryo\ngar ib\nfun nell\nfarmer sin\nex ib\nes na\nedi ficio\neast leigh\ndw yn\ndoit big\ncon gradu\ncompati bles\nclar a\nchro site\ncharter is\ncharlie kirk\nchale ur\ncalibr ations\ncal dwell\nbrank some\nbison pride\nbankrup ting\nba fe\nausi ello\nal tria\nab flood\ny boy\nx bi\nwomen said\nwol ter\nvocal oids\nvibr atory\nv yach\nur banc\ntu fo\ntrim pe\ntrent university\ntread way\nti pping\nther aven\nthe mist\nstan bury\nst ale\nss sa\nsor oka\nso tn\nsma h\nslam et\nsimone simons\nsergi om\nschneide relec\nschle reth\nsab bagh\ns wh\nrockefeller fdn\nri mba\nrey ra\nqune itra\nq ip\nponchat oula\npeven sie\nperenni ally\npad el\nosom atsu\norgan elle\noptical society\nnone such\nnether field\nneca xa\nnationalgarden ingweek\nnas daq\nn guy\nml ine\nme scal\nme io\nmazum dar\nmarvel sdcc\nlen y\nkyo ya\nknuckle ball\nkni fes\nkiis fm\nki shang\nketogenic diet\njuan jo\nimpe ding\ni goe\nhouston police\nhouse forsale\nhon ks\nheg gie\nhart ington\nha sp\ngu at\ngu am\ngood without\nglori oso\nger b\ngeome trically\nfox ing\nfl oro\nfend t\nfairchild garden\nf assett\never sheds\nenchan te\neli zalde\ned markey\nec ar\ndi martino\ndi atom\ndhal sim\ndead y\ncuck mere\ncrypto pia\nco authored\nchir ic\nchip stead\ncas as\nbr ymo\nboo sie\nbo sarts\nbo ki\nbla w\nbi ped\nbaz in\nbar oud\naz raq\naz ara\nash h\nas par\nare pas\nanticli max\nanother one\nacadi an\na ite\nðŁİ¶ ðŁĴķ\nðŁĩ¨ðŁĩ ±\nðŁ¤ ľ\nì² Ń\nwhile black\nwh ern\nv ws\nu stain\ntru stuk\ntop secret\ntoday yy\ntn news\nthucy dides\nsp fx\nsi solak\nshak y\nsh net\nrufu swainwright\nru bal\nre buffed\nrc memories\nra aga\nquincy djones\nq ed\npu kul\nprince ssc\npresidenti elle\npre da\npor fi\npo can\npi atek\nperiod poverty\npen light\nol wen\nnitro circus\nmu ddin\nmovie reviews\nmono culture\nmill bury\nmid ori\nmerry n\nmel lowing\nmedal monday\nma goffin\nm ld\nliti gators\nkrish olden\nkno p\nkla ssy\nkf dx\nkalancho e\njyvä skylä\njam ón\nisrael icon\nina ina\nin anna\ni bar\nhot d\ngumb oot\ngri gory\ngreatest generation\nge da\nfujin on\nfuji x\nfric assee\nformul ary\nflead h\nfinn mark\nferen c\nes gr\nent p\nele azar\negg old\necumen ism\ne gle\nduvvad ajag\ndown draft\ndoet inchem\ndis ambigu\ndan reynolds\ncy c\ncrox teth\ncoatta ils\nco wappreciationday\nclo ve\nchil ika\nc conf\nbud in\nbon us\nbiz kaia\nbisson nette\nbeard life\nawas thi\nas mit\nas ket\nap lanet\nallen west\nac ads\nab v\n^ /\n? ðŁĺģ\n:-) :-):-)\nâĿ¤ ðŁijįðŁijį\nze ke\nwild land\nwhytele afe\nwat tie\nw tt\nvibr ated\nve chain\ntuan ku\nthereal p\nthe wright\ntenter field\nted nugent\nt mv\nsof honor\nsimon i\nshutu pand\nshobha a\nsex change\nscul ture\nrun tagit\nrock ineve\nro zz\nricharddin atale\nrichard garriott\nrajkumar hirani\nradha krishna\npugli si\npolitici zation\npinch beck\nover think\nos loff\nok ker\noc tol\nnostal gi\nmortar board\nmi stake\nmary na\nmar on\nlu gu\nlove leam\nli acou\nle grand\nl fd\nkate flannery\nk fa\nit ou\niran freedom\nil agan\nholein one\nhob son\nhenley regatta\nhari krishna\nhans brough\ngustav sson\ngrizz ley\ngood things\ngo yen\ngiandu ja\nge tn\ngame faqs\ng sd\nfeliz diadel\nf vg\nf oma\nep w\nearth strong\ndun nell\ndrjoe abah\ndortm under\ncour trooms\nce uta\ncape k\ncap les\nbuprenor phine\nblues ville\nblon o\nbiophy sical\nbill bailey\nbe dene\nbatter son\nbal r\nbaker mckenzie\naw yers\nave yron\nau solympicteam\nasteroid day\nanuger ah\nal shabab\nal gie\nain sdale\nach elle\na hed\nzi yon\nvu du\nvolu me\nvisiti ow\nven den\nu tha\ntrend hunter\ntore lli\ntom islav\nthe web\nter ada\nsugi zo\nsol va\nsker ry\nseren ity\nsempiter nal\nseismo graph\nrobe spierre\nroad er\nro da\nreverber ate\nretrospec tively\nred s\npre hen\npo trait\npo in\nplat for\npi voted\npet an\nper nah\nparkinson sdisease\np mn\nox a\nou ard\nol ah\nnorway mfa\nnorth borough\nnor ceca\nneel ak\nn dom\nmyhaver photography\nmu ara\nmobile dev\nmid c\nmer ak\nmelo dia\nme con\nmax am\nman gom\nmajor leagu\nlong last\nlo hse\nlfc tv\nkle iman\nkit ne\nju ge\njesse tyler\niy am\nitalian art\nir th\nice house\nhill arious\nhello fresh\nhamilton college\nhaen ni\nfanc on\nextermin ators\nexperim enter\neveryday is\neuropean elections\ness ai\ne wel\ndy land\ndramati zation\ndr ra\ndh m\ncomplex con\nco ate\nchá vez\ncay ton\ncar nau\nbronx zoo\nbo pinion\nblack strap\nbee ches\nbang ash\nbalac lavas\nb cash\nau rie\nar ayan\napoor va\nalder sgate\nae mia\nadi aries\nab aca\nðŁĽ ¥\nðŁļ² ðŁļ²\nðŁĺĬ ðŁĻĮ\nðŁĴĩ ðŁı¼\nðŁ¥ĩ ðŁ¥ĩ\nçĻºå£ ²\nâĶ ĥ\nza ini\nx company\nwhatiwant most\nwam bui\nwal ima\nw cr\nvi gyan\nvai dy\nusc gc\nusc c\nupp ort\nunse rer\nunisouth wales\nun watchable\ntom arnold\ntit u\ntimo teo\nthe odd\ntempl er\nte hel\ntb d\nsuperstar rajinikanth\nstick ler\nste phi\nstate house\nstaf fies\nspur se\nsoto grande\nsnapp in\nsm g\nshug borough\nse ish\nscher tz\nsar at\nsaath iya\ns fin\nrose bush\nri sser\nreci a\nre forged\nrat oath\nrafale deal\npopu lus\npollu tion\npoker news\npo blen\npic col\npar acycling\nnbab allot\nmummi fication\nmicro credit\nmas sport\nman rique\nmake chester\nmah endran\nlennox town\nlake placid\nkunis ada\nkray zie\nkezi ah\nkd lang\njame shar\nix a\nity council\nisol ator\ningo ts\nindoor oo\nindi atravel\nin heaven\nimp ish\nicom os\nhy uck\nho ppy\nhi ei\nhealth talk\nharmon ised\ngetmoney out\ngb g\ngay timesmag\ng da\nfirst legoleague\nfar ry\neth je\nepi stles\neco l\ndunn ville\ndre we\ndoor frame\ndino bot\nco asto\ncha dian\ncast rol\nbluel ight\nbig daddy\nbernade tte\nbe true\nbar la\nbacter io\nback scratcher\nb music\nati i\nast man\nandyburnham mp\naitu taki\naerop orto\nadam curry\nabdul lah\nabbey theatre\nðŁ¦ħ ðŁ¦ħ\n구 구\nಠ¯\nঠ¸\nym fa\nya red\nweiz mann\nwar my\nwalkthe moonband\nvan c\nvac c\ntom m\nthe mummy\ntess it\ntell ings\nteamdi data\nsurvivethe ark\nstarvstheforce sofevil\nsnu ffle\nsnow don\nsin que\nsch ach\nri ah\nretin oblastoma\nren mark\nrein aldo\nre establish\npride day\nphilli pp\npanch gani\npaedo philia\nous and\nok abe\noc ic\nnu mpy\nno brainer\nnick le\nne eth\nnair amb\nmoun te\nmc math\nmaui jim\nmar ring\nmak ana\nma sr\nm div\nly ch\nloveyour melon\nlooknorth bbc\nliken oother\nle breton\nkri spie\nkoech ner\njessie ware\niklan in\nig we\nhindu ja\nhet chy\nhed ger\nhaw thorne\ngravit ated\ngoogl enews\ngbo wee\ngas son\nfsm py\nfree event\ness l\nemor ies\nebon i\ndu iker\ndre scue\ndoit yourself\ndi emen\nderek carr\ndemysti fied\ncultiv ates\ncr cc\ncorr alled\ncolqu houn\nci ro\ncha shma\ncar se\ncalci fied\ncack le\nca shinin\nbry ony\nbrad berry\nblossom sband\nbin tur\nbattlec ruiser\nbat umi\navak ian\nau dette\nann apolis\nang t\naiya ary\nabut ment\n$ ?\nðĿIJ ¡\nãĤ¦ ãĤ£\nwi fis\nwha aaa\nwax editorial\nw bbj\nvis a\nultr arun\nuk pubs\nturntab list\ntraf low\ntoy show\nto seland\nti fft\ntequ era\ntan sley\ntalla poo\ntalk sport\ntaka hata\nsy am\nspring fever\nspon don\nspike ball\nsou tine\nso bered\nslo vers\nshe saidyes\nsd ks\nsal onika\nrol ph\nroger stv\nrhodo chrosite\nregular show\nre culver\nquiz timemor\npuppy bowl\npsy lli\nprinceton u\npri eta\npol ony\npneu moni\npipistre lle\nphili pe\npan ah\noooo ol\nom ance\nny havn\nno ff\nnhl bi\nmu stan\nmu dding\nmot tos\nmoro zov\nmick mars\nmetam aterials\nmer ick\nme ili\nmck enzies\nmc millon\nmarsh aling\nmakechester proud\nlove goldenheart\nlo red\nleg work\nkorta jarena\nkateys agal\njic ama\nit sac\ninflux db\nindustry news\nide ac\nice ice\nhulu si\nhistor yo\nhem ric\ngu rel\ngo bearcat\ngen maicha\nfor four\nfearless records\nf ö\nf stvl\nend note\ndug anda\ndrum chapel\ndraught sman\ndom ingue\ndef a\ndaf ridi\nd bs\ncyano gen\ncor bel\ncopp ery\ncon oco\nchain saw\ncau then\nby g\nbun ka\nbrombor ough\nbreak ie\nbook awards\nback of\nastr alis\nar mill\nar adia\namar ante\nac eves\n" !!!!\n! âĿ¤ï¸ıâĿ¤ï¸ı\nðŁĴŀ #\nرÙĬ اØ\nÐ µ\nz the\nyan ag\ny thon\nwhitting stall\nwe sties\nur vivor\nuphol sterer\nup h\nun char\nu fd\ntwee ty\ntrin comalee\nti ar\nthexfactor usa\nthecoop way\nthe vet\nthat game\ntestam ents\ntc f\ntam bun\nsus ans\nsu maya\nsser ver\nsmith wick\nshiv dasani\nsenig allia\nsen randpaul\nseag ull\nsatur no\nsand inista\nsa jan\nrub bishes\npo legate\nplain well\nomer ta\noku bo\nog l\nncan ationals\nmurrum bi\nmodel ismo\nmichael urie\nmelli fluous\nmedia awards\nmassi mino\nmar ja\nman handling\nmadein nigeria\nma sami\nlist serv\nliqui date\nlin nell\nlesm cke\nlazz ara\nlaura dern\nl bof\nkr cg\nk jer\nizz et\nis ser\nhel pe\nhard aker\nha bba\ngü ell\ngwanghwam un\ngro ttoes\ngover no\ngo eth\ngive us\ngi gli\nghis laine\ng football\nfore taste\nfar yal\nfaith hill\nes days\neidal fitr\ned ong\ne im\ndra ko\ndiffic ul\ndel port\ndb ms\ndari ush\ndam ekelly\ncraft work\ncor relating\ncol back\ncine magic\nchinch wad\nchampion sday\nch ems\ncawlidge hawkey\ncandid ats\nc engage\nbutter ly\nbush wacker\nber gu\nbe ek\nausv sl\nau fen\nalco co\nad woa\n( ???)\n# <\nðŁĴ Ĵ\nðŁijİ ðŁijİ\nåľ Ĵ\nå£ «\nâłĢâłĢâłĢâłĢ âłĢ\nâĵ ľï¸ı\nyou view\nwinnerwinner chickendinner\nwhe ater\nwh iti\nwes thuizen\nvsc ancer\nvirtu o\nver ghese\nup ci\ntwitter smarter\ntu junga\nsudhan shu\nstop tb\nsp acy\nsmall sat\nsel ayang\nseatac airport\nsa im\nro hl\nrigon deaux\nrec tification\nre mu\nr tos\nr ra\npur gat\npur ba\npug ilist\npromotional products\npri e\npoe tica\npo tala\npo sso\npejor ative\nparagli ders\non broadway\noh dear\nnn u\nner ina\nmer ger\nmede ski\nme les\nmax illary\nmath works\nmal har\nlu uu\nlong shaw\nllanid loes\nliber dade\nle vey\nklo ster\nkamal ha\nkal si\njunior contract\njom alon\nimpropri ety\nil ondon\nhur ontario\nhen wood\nhar umi\ngulfof mexico\nguilty pleasure\ngirlsin tech\ngirl stalk\ngau cho\nfranchis or\nfoxsports det\nfor mel\nfit na\nfairtrade fortnight\ne ire\ndreddy tennis\ndo oney\ndesh ler\ndel oris\ncork screws\ncop al\nco zz\nclo gher\ncir ce\ncindy capo\nchlor ite\ncal cot\nbrown live\nbro fur\nboy ssoccer\nbel al\nasse tto\nask with\nangar cia\namal hotra\nal faj\naja hn\naguas nash\nðŁĴľðŁĴľðŁĴľðŁĴľ ðŁĴľðŁĴľðŁĴľðŁĴľ\nðŁij¨ ðŁı»\nyse ali\nwwww www\nvarsity cup\nunder achieving\ntwitter friends\ntri de\ntill ing\nthep slt\nthe thing\nthe dead\nt sy\nstr acism\nstepby step\nsprow ston\nspor tiv\nsix ers\nsie gal\nsf ball\nseraf in\nq tc\nproven cher\npower lunch\nplur alistic\nplay with\npercol ating\noun tain\nomin ion\nobl ate\nnoo d\nnizam abad\nnit rite\nnakat omi\nn alo\nme gu\nmarketing agency\nlo ess\nliph ook\nlen sculture\nl lew\nl cu\nku en\nki ppers\nkalon ji\njust cause\njessamyn duke\njat ya\nicen ine\nhydro meter\nhuuu ge\nhard ly\ngru l\ngoogle india\ngenealo gists\ngam ache\nfw ends\nfresen ius\nfil mi\nesp inal\nep sb\nenam eling\nel ar\ne ala\ndisc oloured\nderi ded\nderekcarr qb\ndeno ting\ndas sey\ncru ce\ncross over\nc spc\nbu hat\nbritish monarchy\nbo zar\nbo bov\nblu emotion\nbar dock\nbar ada\nban kni\naw wal\nash burnham\nans combe\nam joy\nagu stina\nag ould\naeschy lus\naccident als\n. "...\nðŁĺįðŁĺįðŁĺį #\nðŁĴĭ ðŁĴĦ\nâĪł )_\nঠķ\ny talkies\nwi shy\nw gw\nvirgin active\nvindic ate\nvin ous\nus ba\nting ting\ntin aturner\nthe defenders\ntexashoo ps\ntail less\nsur ya\nstray dogs\nsto dgy\nsr p\nsiguemeyte sigo\nshu mba\nsher rin\nshah jahan\nsarah geronimo\nround wood\nro blin\nreykjav ÃŃk\nreinvigor ating\nreic hardt\nre work\nre khta\npro stration\npo ona\nobase ki\nnr can\nni os\nngu rah\nnex tup\nnepon set\nmy bestfriends\nmon dad\nmin dedly\nmikha il\nmer k\nmed tech\nme harry\nluxu ria\nloo by\nlo phus\nle ja\nkyung soo\nkel lar\nkath thi\nkab ul\njo sap\nja ars\nilli um\nhydro dynamics\nhot n\nhornet pride\nhilde sheim\nhi mig\ngold medal\ngo sch\ngl itz\ngin us\nger ards\ngare the\nfree wheelin\nfrank ton\nfoodpor rn\nesc ap\nend malaria\neag lets\ndougie poynter\ndon ahoe\ndol fin\ndie antwoord\ndenver outlaws\ndeniso hare\ndaw sonville\ncph ftw\nconcur rence\nco omes\ncand ace\ncall an\nbraun ton\nbook stall\nblack forest\nbil d\nbike show\nbeaver brook\nbe fallen\nat kin\narma gh\nai vo\nðŁĻĮ ðŁĺĤ\nðŁĴī ðŁĴīðŁĴī\nðŁĮ ©\nëį° ìĿ´\nâļ ĺ\nwil ight\nwhern side\nvexillo logy\nuni as\nuin tah\ntyr whitt\ntu lipa\ntoo sweet\nton glen\nthisi si\nstich ting\nso horadio\nsher way\nshar rock\nsenti miento\nsch rier\nsalem or\nsal y\nrich ten\nri bault\nplay throughs\npi pp\npet ko\np inga\nor chester\nnow shera\nnar re\nmtn ng\nmor iya\nmis ophonia\nmegan follows\nme ades\nmcglo in\nmayan sfx\nmake better\nla plagne\nkru mm\nkas al\nka pok\njamesb valentine\nisraelicon flict\nhu sain\nhousing day\nhe dera\nhass all\ngran holm\ngo air\ngeet anjali\nfuvah mulah\nflag man\nfik ri\nex ley\nenjo ining\nendor fer\nemo ir\ndiss ension\ndismant les\ndeptof ed\ncy bele\ncurl pro\nchen na\nch rit\nca hoon\nc ire\nbuffal ony\nbou dica\nbo ff\nbla by\nbill and\nb isou\nast ound\nart style\nanti phon\nair munro\nad of\nabel ardo\naa di\n! âĻ¥ï¸ı\nðŁĴ¿ ðŁĴ¿\nz enga\nwu bb\nwou l\nworld rowing\nword books\nwest more\nwee z\nwe belos\nwayne coyne\nvel outé\ntrans lu\nthe ki\nthe bible\nth ale\ntelegraph travel\nteal over\nsopp ressata\nsnh strust\nsk ola\nsh ary\nset lock\nseg menting\nrivieranay arit\nrig ney\nreg ner\nrefin es\nrealkevin nash\nr q\nquad rants\npra soon\nper otti\none thing\noklahom acity\noffthe beaten\nnicol am\nne ara\nmj m\nmagick al\nmacle od\nlong lines\nlo licon\nlew k\nlali gaen\nla foret\nl jones\nkrist ofer\nkoe hn\nkin ahan\nkeigh ley\nkan ab\nk pe\njanef allon\nis w\ninfinite warfare\nindividu alised\nic wa\ni spor\nhy patia\nhy bels\nho cker\nher dy\nheim dall\nhag ans\nhaare tz\ngugu lethu\nfri ggen\nfore seen\nfor tino\nfidd les\nfel ina\nendemol shine\nen snared\nema snhstrust\nduck pin\ndisability rights\ndad agiri\ncur wen\ncosmopolit ans\nci pher\nchoc cy\ncau li\ncalam ine\nbrim field\nbreaking the\nbou man\nboston cannons\nboon sboro\nblack smiths\nbistro s\nbing u\nbin ta\nbel air\nbaru ah\nb son\nazira phale\naxel sen\naviation history\naspen snowmass\nam bat\nallan mcnish\nabstract artist\naboiti z\nðŁıĮï¸ı âĢįâĻĤï¸ı\nðŁıĪ ðŁĴĻ\nðŁĩµðŁĩ ¾\nå¿« ä¹IJ\nãģ ¿\nØ «\nÊ ķ\nwärt sil\nworld musicday\nwho syour\nv hd\nutt ara\nunder garment\ntwit pod\ntun de\ntown afc\ntn cs\nti wary\nti pu\nthe hu\nt fk\nsy ariah\nsweet leaf\nswar m\nstu tzman\nstock land\nstab at\nsky ferreira\nsinhal ese\nsin opec\nsi eu\nshu ey\nshi ppy\nsens go\ns itti\nrob stown\nren table\nreli t\nrelease day\nred ol\npv hs\nprotect ing\npi pits\npe ton\npatrick starrr\npam grier\np isode\non thel\nofficial rufc\nobli ges\no boro\nno cona\nniem and\nmosi ah\nmont vale\nmo oned\nme ir\nmas ke\nmara sigan\nma alik\nlu gia\nla weekly\nla flamme\nkin di\nken non\nke bun\nkar ur\nincre mentally\nhaz lett\nhatsune miku\nhan dedness\nham pion\nhack le\ngy r\ngu inee\ngor rie\ngoldeng lobe\ngo sensgo\ngnar ls\ngh pl\ng ines\nfw end\nforten berry\nfo gelman\nfilms bywomen\nfield turf\nel tham\ndwt sirl\ndrac aena\nde maria\ncrime wave\ncreati vo\ncoun sell\ncom busted\ncohe sity\ncoffe elove\nchill is\nch ancy\ncandy crush\nc ée\nbrighton seo\nbor rel\nbmw motor\nbha vesh\nben splatt\nbe kal\natel ink\nas pac\nas ama\naren a\narab israeliconflict\nanti fragile\nandu in\nan je\namand ashi\nalliter acyday\nah and\nadid asu\nacu ña\nðŁĸĸ ðŁı¼\nðŁĵĢ ðŁĵĢ\nðŁĴļ ðŁĴľ\nðŁIJ¼ ðŁIJ¼\nðŁİī ðŁĴľ\næĪ ij\nyouth sports\nyas sssss\nwu i\nwillem se\nwhi tham\nwhakat ane\nwater aiduk\nwash fellowship\nvie v\nu va\ntor doff\nthomas power\nsxm thehighway\nswap na\nstren g\nsk ot\nsiwon choi\nsie gel\nsenator burr\nsap utra\ns bisd\nry ant\nresidente vil\nrenov ates\npre ssions\npre operative\npo vey\npimlic orc\npedic abs\npedal ed\noperation ally\nnyc mayorsoffice\nnd h\nmu ty\nmis cast\nmilan ello\nmeso sphere\nmean whi\nmcgu ffey\nmar ois\nlou vain\nlo bed\nlearn german\nlau dato\nla story\nkoz lov\nkate bosworth\nka eding\njol ted\njen ac\njare th\njaga dish\niy er\ningeni ously\nin fier\nhil mar\nhawk stalk\nh tn\ngw ana\ngu shi\ngrim ley\ngo terps\nglobu lin\nga via\nfrnd z\nfran con\nfli bs\nfili ppa\nfight the\nfe sting\nfan meeting\nf sf\nezra klein\nespad rilles\nell roy\ndot te\ndon en\ndo yeon\ndictator ships\ndiab olo\ndeli as\nconcre ting\ncoach tom\nbo young\nbo lex\nblue tec\nas st\nare scue\nar rs\nar preps\naqu ÃŃ\napla za\nander as\nalali brary\najed rez\n________ _______\n// <\nðŁĩ¯ ðŁĩ²\nãĤ º\nyow amu\nx th\nwyn koop\nwind surfers\nwhitworth art\nwhisky day\nvisit bristol\nviking cruises\nvic traffic\nv rij\nuw sp\nun tangling\nun ops\nun ds\ntv live\ntu tee\ntto win\nthr illa\ntb it\ntardi grade\ntar ring\nt bex\nspinning fields\nsky deck\nsitaram yechury\nshoo touts\nsali f\nrod da\nregurgit ated\nram ez\nrabbin ical\npicto graph\nphil brick\nom ake\nok hla\nnet tie\nne ster\nnat gallery\nnan terre\nmum taz\nmonop rint\nmo ggy\nmn gr\nmix nine\nmari ek\nmalk mus\nmal tz\nlou den\nlic hen\nks music\nkrat ts\nki ro\nisthe problem\ninterfer on\nill enium\nig ate\nhump backs\nhot toys\nhir si\nhi rayama\nhast ings\nhar pal\nha iz\nha islip\ngreen chemistry\ngre nou\nglam cricket\nge thi\ngar ita\nflamen ca\nfilm strip\nf pg\nf gn\nene ts\nely as\nejec ts\nden de\ndc policedept\ndan diya\nd scanning\nd endi\ncs music\ncraigh all\ncommunity college\ncastro tx\ncampbell river\ncam eo\ncal shot\nbre slau\nbor al\nbla gdon\nbike to\nbeat bama\nange bot\namjoy show\nam hs\nali bre\naen gus\n: £\n-____ _-\nðŁĺIJðŁĺIJ ðŁĺIJ\nðŁIJ ©\nÑĢоÑģÑģ иÑı\nyucat án\nvu h\nvol tac\nveg gi\ntor ians\ntho le\nthing sabout\nthe paul\nthat sa\nter hune\ntel p\nta war\nsub type\nstra iler\nsto kley\nstal y\nson arika\nsmartcity expo\nsmall ness\nsm t\nsk itter\nsig am\nshivam bu\nshe pley\nset to\nscouncil uk\nrun gs\nrob illard\nric kert\nrepl y\nre qs\nraf san\nr re\npur porting\npic acho\nphoto copies\npere go\npedi ment\npal anca\npak man\npag ination\non j\noda at\no denton\nnew roz\nmulti view\nmtv u\nmosh ood\nmanoj tiwar\nmaggi es\nm ool\nludwig sburg\nlique faction\nleh man\nkuy per\nkar nazes\nk see\njuniper networks\njames acaster\nits bristolbaby\nise f\nine yards\nin cel\nhuf worldwide\nhss wi\nhsin chu\nheu ser\nhe tton\nharmon isation\ngry ffin\ngr aco\ngoldsmith suol\ngitt ens\nge ith\nflood plains\nfe en\nexacerb ating\ndouche bags\ndo de\ndill man\ndiamondand silk\nde itch\ncradle offilth\ncor ti\ncarry themhome\nbri mmer\nbio bio\nberry farm\nbang sa\nathlon sports\nap tac\nap athy\namit ra\nale quinox\nagre ssive\naccli mation\nðŁĴ¡ ðŁĴ¡\nðŁİ¶ ðŁİ§\nðŁ¥° âĿ¤ï¸ı\nx ist\nwood man\nwhe ads\nwell ston\nwave front\nvasi l\nun solvable\null mann\nug t\nu gal\nu arkansas\nthejuan williams\nswa deshi\nst bl\nsouth yorksbiz\nso cc\nsil v\nsi kk\nservice dogs\nserafin owicz\nsemi ah\nse mir\nrou steing\npuer tas\nphilly mayor\nperio dismo\np daf\nowen benjamin\nokum ura\no esn\nnutrac eutical\nnu bians\nni pah\nmár quez\nmur li\nmoon bow\nmoj ica\nmine workers\nmidter melections\nmene fee\nmelan son\nmc tom\nmay sa\nli ska\nlength ens\nlady boss\nl ro\nkost ka\njuke box\njones ville\nin oki\nhowto trainyour\nharmar superstar\nhag akure\nha ch\nguine afowl\ngreath ouse\nglan z\ngay don\ngame jobs\nfu yu\nfr ancy\nfle dging\nfl ours\nfemin azi\nf xs\nemma willis\nell ard\nei ht\ndu ed\ndispro ved\ndese greg\ndat o\ncr ater\ncitizen ship\nburak deniz\nbrew ster\nbreak away\nbo wale\nblake slee\nbi gor\nbel mullet\nbaloch genocide\nao ib\nam enable\nali ando\nac ros\na shem\n: ,\n( .)\nðŁĺį ðŁ¤¤\nðŁı ¥\nâ µ\nzug spitze\nxi xi\nwindow sinsiders\nwig town\nweather watcher\nwayfare rs\nw re\nvas ilis\nvac ates\ntiger up\nti mp\nther ocks\nthe challenge\nte kk\ntaylor guitars\nsurrey life\nsto ppin\nssc ricket\nspo se\nsolution tree\nsemy on\nre ber\nram co\npre tension\npre ike\nport way\npig my\npen rhos\npe ci\npar dub\npackaging design\norch ha\nnun c\nnobuy uki\nnew fie\nnational champs\nmo tability\nmi global\nmer ay\nmeet bros\nmedal en\nme ki\nmakh ura\nlur ve\nlondon lgbtpride\nletsgo dodgers\nkle ys\nkey one\nk vn\njig me\nj rn\nj mr\niphonex s\ninsom nisa\nindooroo pilly\nindeci pherable\ni asc\nhouseof cubs\nhoge styn\nhei fetz\nhare hills\nha fsa\ngreeng ate\ngre ss\ngir ma\ngh earts\nfl oria\nexagger ates\nev re\nep festival\neliver ance\ndisco vers\ndag ang\nconsequ ent\ncomplex e\nby ward\nban yan\nay un\nattenti veness\narch viz\nar lette\napu blic\nand ong\nan ae\naldub maiden\nad it\nactu alize\nac tis\naamir liaquat\nðŁĺį ðŁ¥°\nðŁħ° ðŁĨ\nâľĶï¸ı âľĶï¸ıâľĶï¸ı\nâķ ®\nz de\nwrong ness\nwood chips\nwal ke\nvum chealth\nver kho\nvape shop\nvan esa\nvai ko\ntra wick\ntor ti\ntobaccon ist\nto pl\ntim westwood\nthousando aks\nther is\nterrence j\ntechnicol our\nte gern\nstru tter\nstrait jacket\nspl center\nshakey graves\nsa stro\ns ddc\nrun meb\nro setti\nrevel le\nre shuffles\nrash omon\nra baul\nqueen b\npraise god\npanor am\noin uma\noe ttinger\nny dia\nnxt takeover\nna sia\nn roll\nn nd\nmy best\nmorning show\nml td\nmikey way\nmass ena\nlun ged\nlong live\nlitvin enko\nlaw society\nl hh\nkoe itec\nko dai\nkick starts\nki gur\nits been\nileague official\nide sai\nic ast\nhel icon\nhei sey\nguest post\ngor achelle\ngorachelle ann\ngine bra\ngaw an\nfor der\nflagell ation\nfive a\nfin esse\nepic cosmos\nel ow\neight ball\ndramati zed\ndonald duck\ndi dio\ndesign milk\ndar lene\ncurtin uni\ncougar nation\nconvul sing\nco sn\nceph alic\ncav orting\ncap el\nca isse\nbusc aglia\nbr ts\nbook storeday\nbaf a\nati ds\nar ling\nappall ingly\nagri busines\nadu rai\ná´ Ģ\nworld snakeday\nwing y\nwarren sville\nusav s\nupp et\nu sportsca\ntru ll\ntoplo ader\nthi z\nthe her\ntas nim\nsu pts\nsoph more\nsin ai\nsil vas\nse asia\nsd oodle\nsa ed\nres or\npre seli\npr h\npope scu\npc sk\nour schools\nor du\nop roud\noak ie\nnow www\nnew all\nmov ingly\nmichael annett\nmer amy\nmahogany lox\nlyn es\nlin csc\nli gety\nlett ice\nl vi\nkha si\nken rick\nkah ana\njoanc rawford\njo achim\njab rill\nitsad og\nincarn ated\ni fri\nhy ong\nheee ey\nhappine s\nhad denham\nguer rier\ngeb hardt\nfunkand soul\nfranco phile\nfor lease\nfing alcoco\nesi ason\nemployee experience\neb ace\ne miko\nder as\nd design\ncu ms\ncro whurst\nco omer\ncmb yn\nchim bor\nche min\nchandi mal\ncar swithoutlimits\nbusines sperson\nbig ay\nbat tic\nau j\nastor i\nanne aling\nanc ru\nal g\nag ba\nafrican us\na seem\n:- ))))\nà¹ĥ à¸Ī\nÍ ¡\nxi es\nwit tig\nwise guys\nvirgin iam\nvir chakra\nvel ux\nut ton\nun guided\nubi q\nu calgary\ntwy cross\ntwe at\ntra van\ntibetan buddhism\ntem be\nsthe series\nste ffy\nserv pro\nsecul arists\nsanctuary cities\nroy an\nri ems\nres ounds\nraven scraig\nrash guard\nranc ourt\nraise d\nqu ent\nqu atu\npunjab is\nprize money\npositi vely\npe ste\npba onespn\nparmi gian\noy ale\nover coats\nol abs\nnca ab\nmusa fir\nmm tc\nmey rick\nmetal album\nmerry lands\nmechan ization\nme gh\nmat eri\nmad aba\nmacewan u\nlu king\nlu dden\nliber ians\nlem nos\nlangu ag\nku tti\nklein man\nkeat ley\nk de\njo j\njan se\nirr ational\ninf l\nie b\nid in\nic et\ni herb\nhispanici ze\nhij jah\nhepat oc\nhead ship\nhallo ck\nhal lie\ngur ps\ngu fc\nglobe trotting\ng sv\nfur mint\nfugli en\nfit food\nfemmin ile\nf cra\ners rock\ndwind les\ndv g\ndos gaming\ndimension ality\ndenti st\ndee g\nde mont\ndar yle\ncorne as\ncontain ership\ncent um\ncas os\ncan ción\ncampe se\nbul ski\nbrockle bank\nbiz nasty\nbeat son\nbas le\nbal derson\nb my\nas g\nann ua\naeter na\nab senti\nðŁĺĦ ðŁĺĤ\nðŁĺ© ðŁĻĮ\nðŁıIJ ðŁıIJ\nðŁĮ·ðŁĮ· ðŁĮ·\nê·¸ë ŀ\nÙĬ Ùħ\ny news\nxx oo\nwhirli gig\nweb star\nwaynetwp super\nwat teau\ntwitter mirror\ntre esof\ntigo bba\ntame side\nsub junctive\nstru dwick\nssi mon\nss aturday\nsla b\nsigh thound\nsie gen\nsey more\nsemin aries\nseem s\nsamurai jack\nsam ma\ns sudan\ns ros\nrohit roy\nrail cats\npose able\npopp leton\npas cack\npan handles\noo se\nnice guy\nnegre te\nn ssn\nn ough\nma kak\nlo thians\nlive underpar\nla kiss\nla ha\nkon ner\nkochad aii\nko sinski\njeremy mckinnon\nj bonamassa\niv ins\nhue vember\nhouri hane\nhop f\nhok itika\nho xie\nhide out\nhee bie\nhe cla\nhamlet fc\nhal kidiki\nfre de\nfm kenya\nflori das\nfat cat\ndulwich hamletfc\ndri skell\ndrac aen\ndou bs\ndemir tas\ndem socialists\ndc tid\ncreative scots\nconserv ator\nco ko\nco by\nclay born\ncastell ani\ncas sa\ncar fag\nca elum\nblack monday\nbilly bob\nber ndt\nber mingham\nbed was\nbally shannon\nau ba\nascen so\nar mel\namaz i\n........ #\nåIJ §\nâĶ ĵ\nâĢįâĻ Ĥ\nze th\nys lam\nwool shed\nwol fal\nwal shy\nw gt\nvoi vod\nvie ux\nvic ini\nveri sign\nvare jao\nvalu er\nun cas\nty nes\ntown line\ntiktik tik\ntidd ly\nthe villain\ntallapoo sa\nt lax\nsydne yo\nstein berger\nstar base\nspider sona\nsp ini\nsnit ches\nshapp y\nse kt\nsc ag\nsasi kumar\nsamanth a\nroe hampton\nrobust ly\nreferen dums\nre invested\nra ghe\nr á\nquin livan\npul ford\nproven zano\npras lin\nportsmouth nh\nplo rers\nplay more\nplas monic\npil ar\npeter sagal\npang an\npae onia\nosor no\norel lana\non repeat\nog maco\nnz vaus\nnow den\nnotinthis lifetime\nneil sen\nnathan varni\nmo sta\nmam usic\nmal wa\nl jp\nl chat\nkun di\nkare ga\nkan ald\njo swinson\nji rou\njar k\nja ig\nite k\ninter costal\nindi stin\nincogn ita\nincivil ity\nhydro codone\nhocu spocus\nho pin\nha sen\ngo jordan\ngo figure\ngm fus\ngl unch\ngi unta\ngepp etto\ngang ly\nga hara\nenamel pin\nen gro\negg less\nec ru\nea sements\ndurham nc\ndun sfold\ndown range\ndouble bass\nda day\ncy on\ncra ine\ncover story\nconson ants\ncoach jim\nco quet\nclu bo\ncliff central\ncitym all\nchair persons\ncav our\ncarls bad\ncanvas ser\ncan dia\ncab elo\nca ille\nbrun elleschi\nbore scope\nbear ing\nba sile\nb cra\nati q\narch s\naber crom\nðŁĴĹ ðŁĴļ\nðŁĴģ ðŁı¾\nç ¶\nе д\nzi yad\nzah le\nwr angles\nwoooo ow\nwit old\nwestend live\nvon age\nv fp\nun toward\nulti max\ntre lli\ntie gs\nthe difference\ntera hertz\ntallas see\ntah qu\nsten ation\nspe tt\nsong jihyo\nsi ong\nsask power\nsadi sts\nruffin o\nrooster s\nrom puy\nrogow sky\nread vocates\nra dom\nquin ney\nqueenof scots\nprint ings\nprayfor southkorea\npen coed\npei poli\npad den\nopen cv\no ab\nnoar lunga\nnihal ani\nnect ars\nmu dras\nmilan esa\nmient us\nmev lana\nmazdar aceway\nmat tock\nmarquin hos\nmarine inst\nma uli\nma ja\nllll llll\nj rr\ninte mper\nindiab ulls\nind travel\nin service\nim melt\nholy day\nhardik patel\nhack ley\ngreen hithe\ngan ic\nformula ic\nfin domme\nfigu eras\nfather andson\nf ww\nend ricks\near ing\nduvvadajag annad\ndu bbin\ndru ms\ndin ary\ndick heads\ndaf fs\ncraig kielburger\ncra ik\nchi hay\ncas inor\ncan an\nc gpa\nbristo lold\nbj u\nbi ben\nbear ance\nbay nton\nbag ge\nay la\nas afa\nare ena\nane ka\nam zing\nallen and\nalam gir\naf ound\na egyp\nðŁİĤ #\nðŁĮ¸ ðŁĮ·\nëĦ ¤\nà¹ģล ะ\nwer ke\nwehr lein\nwe igl\nv anny\nush mm\ntr illed\ntimeto shine\nthe worst\ntexas forever\nta vor\nt ads\nswoo pes\nsumb ar\nstor row\nspol icy\nso ontario\nsme uk\nsm l\nsheskindahot musicvideo\nsanjay azad\nsa am\nroz as\nrock androll\nric kon\nrestric tor\nrespect for\nquart ile\npul o\npu sey\npr on\npope franci\npon ts\nparo died\no shea\nnr genergy\nnov um\nno words\nmy m\nmusco vado\nmom ir\nmn or\nmin omonsters\nmi zo\nlucifer season\nllan os\nleishmani asis\nlat u\nlacri mosa\nkk box\nkid brooke\nkan es\njusticele agu\njung min\nji eun\njennifer nettles\njan ah\nitur be\nis foreveryone\ninge cho\nim t\nhy am\nhorse back\nhol dover\nhocke ssin\ngold leaf\ngirl strip\ngalle ons\nfs midwest\nfie vel\nfemini zed\nfe herty\nequ idad\nel stern\neat the\ndurham cricket\ndragon fruit\ndima io\ndid st\ndestabil ise\nde ok\ndat al\ndardan elle\ncoach able\ncere bellar\nbyom kesh\nbu bi\nbro cket\nbra instem\nbin tulu\nbin dass\nbi asa\nbe vs\nbas ah\nba hau\nba arba\nasian et\nash na\nag rand\nðŁĽ £\nðŁĻĮ âĿ¤\nðŁĮ Ĺ\næĴ® å½\nâĻ¡ )\nâĺº .\nwoocraft scs\nwino grand\nwhat t\nwed s\nwd ney\nwatt bike\nwas sa\nvit ational\nv mr\nus ko\nun varnished\ntu que\ntsu chiya\ntr ama\ntotal war\ntidal x\nthanksgivingwith blackfamilies\nten ge\nteacher scollege\nswitche shop\nsul phu\nstre lit\nstil inski\nst bri\nsse airtricity\nsouth hams\nsour ness\nsky i\nsj e\nshu ma\nshail endra\nshab elle\nsemi automatic\nschlad ming\nsc use\nsc dp\nsagu aros\nsa ami\nror attack\nrobert marawa\nro tr\nro em\nreleg ate\nredondo beach\npurple army\npu tsch\npro pos\npro lapse\nprized raw\npre disposed\npol unin\npay scale\npau w\npad locked\notta wab\nopp as\nnever getsold\nn cre\nmore fun\nmichal ak\nmeramy akrishnan\nmedi aboy\nmb ira\nmaul s\nmalayalam review\nlove wildlife\nlordof the\nlidiab asti\nla shawn\nkumbakon am\nkeep americagreat\nkann o\nkamal hassan\nist h\nindigen ously\niac occa\nhoo pinsider\nhome field\nholiday spirit\nholi es\nhershey pa\nheim an\nha kun\ngonz aga\ngon tier\ngo cat\ngay dos\ngab in\nfy rom\nfe verything\nendo carditis\nen ita\ne ev\ndog mas\ndis rael\nda via\nd ún\nd mt\ncá diz\ncow gill\ncl news\ncheru bim\ncanoe ist\nby fuglien\nby doing\nbu sed\nbrux ism\nblazer nation\nbio scope\nbad girl\navi ds\nassu age\nar ouses\napost olate\nandre ward\nan ura\nalvaromor ata\nðŁļ ĸ\nÙĨ ÛģÛĮÚº\nz ool\nyep live\ny ke\nwunder lich\nwow app\nviol inists\nul haq\nthe resident\nthe age\ntfl s\nteam cap\nte yes\nte bo\nte alight\ntau n\nswa ine\nsuf croot\nsufcroot shall\nsto ken\nspraw ls\nspra ining\nsof apaka\nshots fired\nsemb awang\nsel ft\nscienti fique\nsch wabe\nsar nies\nsap er\nsalv atore\nread indie\nra at\npreike stolen\npopo va\npin ney\nopar di\nomgom gomg\nold paths\nne ese\nmo jokerto\nmein ers\nma inst\nlil as\nli hue\nlegisl ated\nle mmons\nld nairamb\nlaudat osi\nlanca sters\nlan thi\nkontak te\nknit ter\nki vi\nkhaleej times\nkha war\nju árez\njoe the\njason r\nis sy\ni fru\nhumber stone\nho tta\nhi jas\nhan kin\nhallam shire\nguine y\ngopo lov\ngom oo\ngom an\ngamer oom\nfords theatre\nf gd\nex os\ner melo\ner f\ndy ad\ndol gopolov\ndic er\ndeser ves\ndep to\nden huys\ndeduc ting\nday es\ndani yal\nd tz\nconvul sions\ncil acap\nci ri\ncheck mark\nch aba\ncarter reynolds\nbruce wayne\nbook mark\nboo kexpo\nbla ue\nballybo fey\nb ma\nar shi\nam yn\nam vca\nag race\nactualit é\n# )\n!!! ???\nðŁĺį ðŁĺĦ\nðŁijij ðŁIJĿ\nðŁıĥ ðŁı»âĢįâĻĤï¸ı\nðŁį´ âĿ¤ðŁijįðŁijį\nðŁ¤ijðŁ¤ij ðŁ¤ij\nà« Ģ\nzy x\nyah shua\nwsu cougfb\nwolf hounds\nwinniem andela\nwhite gold\nwa key\nvideo juegos\nve sti\nuni leiden\ntx grizzled\nts ne\nthe hope\nthe chief\nthan ky\nth ral\ntau riel\nt flofficial\nsuper sprint\nsu ro\nsja day\nsi rc\nshra ger\nsha hn\nsh lita\nsan ita\nsali eri\ns gairshow\ns bb\nroll pride\nricharde grant\nreagan rays\nraza q\nra fal\nqui etude\npu long\npriorit isation\npopp en\npit stops\npin dar\npenhali gon\npe acoat\nparthi v\npa ean\nour country\nouar zaz\nopp ur\nni um\nmul roy\nmonterey bay\nmod bus\nmissamy childs\nmephistop heles\nme gang\nme dulla\nmag ent\nlit aford\nlidiabasti anich\nles age\nland guard\nlabra da\nku tt\nkodo txgrizzled\nko tatsu\nko bby\njoy ceme\njac ana\nite asy\niniti ations\nin this\nili ani\nhé lène\nhur tt\nhur ns\nhi bari\nhabi bie\nha fod\nh fb\ngran ata\ngoat man\ngo vardhan\nglac é\ngi de\ngal vatron\nfu ster\nfl out\neric wareheim\nduvvadajagannad ham\ndo ggg\ndevon seron\nder bez\nde anc\nd wain\ncut the\ncon sensys\ncommunic ado\nchal kidiki\nch appa\nc za\nbot olph\nbarthele my\nban jar\natta wapiskat\nat tax\nar vs\nand rena\naman si\nallo fus\nagar ajan\nad ms\nðŁĴ² ðŁĴ²\nðŁİī !\nðŁĮ Ĥ\nzim bardo\nz ev\nyot tawa\nyahoo live\nxander berkeley\nwo de\nvisi oned\nu og\ntwir led\nturbo fan\ntimeto fly\nthun dered\nthearcan agame\nthe fire\nthe bb\nte et\nta wh\nswee tums\nsun danese\nsp lish\nsnake pit\nsidd arth\nshot by\nshop lift\nsheamo isture\nshar mel\nsam bu\nsaint msg\nro dge\nresolu te\nren to\nrecal cit\nque eni\nqu ili\nq am\nputin rf\nprun ty\npla stica\npla gue\npark lane\noligon ucle\no ingo\nne ch\nnab awi\nmy nba\nmuse umm\nms ds\nmihaj lovic\nmaxi mu\nmax chilton\nmari ote\nmarch esi\nmam ey\nlal bagh\nkov ski\nkj ell\nkendal calling\njust icec\nju re\njamaic ap\njab oo\nist p\nisi o\ninvest ing\nhypo xic\nhyou ka\nhay hurst\nhappy newyears\nham madi\ngur inder\ngrin ded\ngiam bi\ngi be\ner mah\nen yi\nen ie\ndu charme\ndis locate\ndesic cant\ndat l\ndam ping\nda inese\nconnor army\ncoachdan mullen\nclause witz\ncel li\nboat right\nble wett\nbit ar\nbirk beck\nbelitt led\nbackin black\nay yyyyy\navanti ka\narin ze\naparthe idweek\nanimal crossing\nan berra\nallison b\nal vida\nail leurs\nacec ourse\nab org\naal to\næĻ º\nãĤ¢ ãĥ«\nà¸Ħภ§\nà ®\nyon hap\nwrong doings\nwilliam and\nwest cork\nwarwick castle\nw vc\nvi rendra\nuniv groningen\nunion ization\nunder reported\nto pd\ntiger air\ntic o\nthing sin\nteam effort\nsydney trains\nsupple ment\nstru an\nstraf ford\nsteal in\nstalag mites\nsmoke stacks\nsic ure\nscatter gories\nsc avo\nsay z\nsanjayazad sln\nsand more\nsag rad\nraw kus\nra hel\nra ds\npro fe\npe cor\npal meri\noo ohh\nnu aimi\nnar vik\nn alls\nn afc\nmiz ell\nmiro ir\nminniem ouse\nmichal ski\nmer credi\nmenstru ationmatters\nmctom inay\nmcfar land\nmarine science\nmar ston\nluci enne\nle mm\nl ss\nl ome\nkimso hyun\nke ur\nk uper\njoon as\njerus ale\nj ti\nishi gaki\nintere st\nina itis\nhe si\nhau ssmann\ngo choctaws\ngi ese\nfolk rock\nflour noy\nfau t\nevery thin\never day\neup en\nent endres\nel ke\nec ancer\ndu ker\ndoppelgän gers\ndial up\ndesignated survivor\ndela et\ndarkest dungeon\ncogni zance\ncityof hamilton\ncecili o\ncabo chons\nca ed\nbraz illian\nbol ler\nboboi boy\nbishop scourt\nbet ta\nber nama\nbe beto\nb xb\navis itor\naro ad\nak un\nag lecam\naf oods\nade ep\nache ampong\naash ish\n--- >>>\n*: ãĥ»ãĤļ\nðŁĩ¨ðŁĩ¦ .\nðŁ¤£ðŁ¤£ðŁ¤£ðŁ¤£ ðŁ¤£ðŁ¤£ðŁ¤£ðŁ¤£\nè ´\nzeet amil\nyu ne\nwri f\nwil ner\nwhatson antv\nwar te\nvander pumprules\nus jn\ntr tworld\nting gal\nthisi sthelife\nsy yc\nsuperblue bloodmoon\nsundar pichai\nstereophon ic\nsql pass\nsl so\nsis fur\nshe erin\nsharon vanetten\nsha adi\nsarwat valim\nsal al\ns walk\nruth men\nquiztimemor ning\nquit te\npucke red\npre menstrual\npost cards\nporsch enewsroom\npo wel\npin oys\nparty with\noffthe grid\no wain\no esophageal\nnu minous\nnational tequiladay\nnational filmawards\nna stro\nmy vancouver\nmo sport\nmas vidal\nmar zi\nmano el\nmal oy\nm chi\nlock en\nlil nas\nlang side\nkey pads\nkas u\nkam asi\njar ia\njan owicz\nink off\nib mi\nhr vy\nhierogly ph\nguide to\ngreen line\ngraphi que\ngrandtheft auto\ngor ney\ngomoo sego\ngod rich\ngo hogs\ngan ley\ngab en\nfuturen hs\nfare share\nel swick\nebr pd\ndy scal\ndro vers\ndon kor\ndomin ions\ndilla hunt\ndc ps\nday trader\ncÅĵ ur\ncowli shaw\ncon ed\nc zu\nbryan bros\nbrumbies rugby\nbleed orange\nberwick shire\nay ev\natl ant\nat é\nat rack\nastra khan\nard al\nam able\naless andria\nagri ppa\nade kun\nad ak\nabag nale\n" ):\nðŁĶ¥ ðŁĴª\nðŁĵŀ :\nè° ·\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ı@\nzu zana\nzo zo\nz idan\nwy ld\nwilli ger\nwil ms\nwheel wright\nvol tas\nuni das\nty d\ntwee die\ntra ub\ntol ar\ntiber i\nthim bles\nthelauren graham\nthel one\nthatsmy dodge\nthan ga\ntan ey\nsyl ph\nsty x\nstan ne\nss bm\nsou to\nso han\nsig erson\nshimabu kuro\nsh kov\nsco smetics\nschne iders\nram bler\nr vw\npul ly\nprotein world\npran av\npolari ze\nphil co\np mg\np ami\nop re\nop an\nof peace\nny senate\nnou mea\nnorth co\nnac elle\nna shi\nmygov india\nmumb led\nmother sbaugh\nmasa ko\nma thes\nm wy\nm dg\nloi shua\nlee jonghyun\nknick stape\njuli ere\njose fine\njan sch\njamesra hendry\nj ng\nit amar\ni beacon\nhot dog\nhoo e\nhi mal\nhert zog\nhel plines\nhand stands\ngr annis\nglobal ised\ngab ardine\ng weru\nfred ricks\nfo t\neye hate\nev cen\nen eco\nen dian\neli ason\nelectroly tic\nel puig\neidol on\ned dings\ndrin kal\ndre ric\ndar vin\ndani al\ndan ser\nclutter buck\nci k\nche eta\ncele br\nboard masters\nbo bol\nbi ao\nber te\nback britishfarming\nbaby gift\nat tie\nar drey\nann aw\nall indiab\naj r\n. ðŁİī\nðŁĮ Ĺ\níķĺ ìĿ´\nyan bu\nyadv ashem\nwill acy\nward ley\nvine et\nve eder\nv tt\nusafric abf\ntx educhat\ntraffic crash\ntodd whitaker\nti dur\nthr oneof\nthisi shome\ntaylor momsen\nt sports\nt jackson\nswiss re\nsurviv ability\nsul is\nsublux ation\nstagn ated\nsno g\nsk telecom\nsize well\nship builder\nsharks za\nsam sam\nsaint patricksday\nsacchar ine\nrye ong\nrunner bliss\nrose bay\nroger stv\nran x\nquoti dian\nqip co\npub crawl\nproduc tiv\npri vee\npre y\npram ila\npra bu\npast ner\nown voices\noliviach ow\nofficial rezz\nnil am\nnight bird\nmo tter\nmo tet\nmith ril\nme guro\nmc niven\nmau g\nmar gy\nman music\nlou bet\nlion sclub\nlar ock\nl bb\nko caeli\nkitt i\nkid slit\nkhamoshi yan\nker messe\nkac zynski\njane ane\nimogen heap\nhol douts\nhel oise\ngu ria\ngoka iger\ngoal mouth\nglamour maguk\nflower photography\nfire station\nfern tree\nfam es\nextracur ricul\neve leigh\nelectro plating\ndup date\ndun bar\ndubl inohio\ndo i\ndia stolic\nden ham\nda ang\ncthul hu\nco don\nclean tech\nca haya\nc ses\nbu ma\nbread and\nbing crosby\nber ridge\nbase plate\nball erin\nbal fron\nasseen in\nashley monroe\naq r\nanil kumble\nam dry\nalo es\nallmy children\nalad in\nadam richman\naap ka\nðŁĻĮðŁĻĮ ðŁĻĮðŁĻĮðŁĻĮ\nè© ±\nå ¢\nãĥ¢ ãĥĩ\nzo ya\nyou then\nyor kies\ny ster\nwoj cik\nwhile youwere\nwel cher\nweight lessness\nweb marketing\nwake fulness\nvibe magazine\nventrilo quism\nutt aran\nur on\ntranspor ter\ntho pe\nthe ken\nthe junglebook\nth awk\nterab ithia\ntb in\nsuper storm\nstru ly\nstellenbosch uni\nsqu ote\nspor um\nshon telle\nshad rack\nservici os\nschisto somiasis\nsch rade\nsau to\nreci ation\nre discovers\npul leys\nplat en\npensac ola\npencil sketch\npah lawan\nosucoach meyer\nopp er\no eh\nmullagh more\nmis behaviour\nmil dest\nmall in\nmadmax furyroad\nmabino gi\nloko ja\nlic enti\nl ru\nkkkon colors\nker fuffle\nkar thika\njoseph us\nith appen\ninstitution alization\ningate stone\niffe rent\nidol producer\nhe iss\nhappy valley\nham at\nh sas\ngeton mylevel\ng cap\nful k\nfree to\nfoie gras\nfly pal\nfc stpauli\nend yk\nehl inger\ndub v\ndou that\ndoc week\ndin din\ndie hard\ndie bold\ndi sharmony\ndhan raj\ndeco ders\ndanny pudi\nda ik\ncollar oy\nclean beauty\ncin zia\nchildren sla\ncar share\nca che\nbusines speople\nbt as\nbr kfst\nbor ris\nblick ling\nbill inge\nbell port\nbe sta\nbau com\naz c\nar sons\nap ak\nanim ism\nangkor wat\nang pilipino\nang am\nandi ka\nalbu mart\nðŁĺİ ðŁijĬ\nðŁĮ ĸ\nðŁ¤ª ðŁ¤ªðŁ¤ª\nìĹIJ íĶĦ\n京 éĥ\nت Ùħ\ná r\nyani v\nwind jammer\nwil ayat\nweek uk\nus movie\nun recognised\ntu cuman\ntoi mumbai\ntil ford\nthom asians\nthe ys\nthe forum\ntetra hedron\ntat weets\nsunny slope\nsub stratum\nsu bba\nstubhu bcenter\nstro mal\nstrengthen er\nstar ched\nsri jit\nsig fox\nshrew sweb\nshow boating\nscry pt\nsag af\nrox anna\nri ft\nre ju\npuertor ican\nps lon\npro meth\npin ball\npend se\npat tim\noutw ards\nol atun\nof ir\nobl ation\nnu ku\nner fed\nnaughty america\nn ä\nmw ana\nmv rp\nmiss this\nmerchandis ers\nmascar ol\nmagen ta\nm sha\nlu sted\nlou ps\nlife crisis\nley endecker\nlevan ter\nles miz\nle tha\nle brock\nlc bern\nlcbern alo\nl icia\nke ko\njustin baldoni\nju sco\njoe bob\njeff coat\nintere ss\ninter bike\nim no\nid hu\nhh d\nhetero sexuals\nhesit ancy\nhead way\nguillo che\ngo wa\ngag genau\nfree app\nfon z\nfile system\nfe stin\nf mw\neu st\nescal ope\nequal sfreedom\nenjoy illinois\nef fin\ndu sen\ndro pin\ndrew ry\ndis order\ndestabili zation\nde sain\ndaysuntil qatar\ndaily quotes\ncustome rengagement\ncic cio\nbuder im\nbook con\nbay h\nax im\natt enders\nak su\nak chod\naim es\naero gel\n! ðŁİĤ\nðŁİī ðŁĴĸ\nðŁ¤· ðŁı¾âĢįâĻĤï¸ı\nìķĦìĿ´ ëĵ¤\n구구 ëĭ¨\ná´ ľ\nz are\nwurz els\nwsu pullman\nwing sof\nwhyi march\nwan de\nvill an\nun reality\ntru sh\ntrop med\ntreasure hunt\nthe thing\nthe acc\ntetra zzini\nter ris\nteam titleist\ntac eae\nta here\nsynchron izing\nswoo plife\nstrand bookstore\nsteril ised\nsteel yard\nstar set\nst sci\nspy master\nspring forward\nsp ils\nsoulful house\nsocial responsibility\nsme ar\nsiss ons\nsid grauman\nsibb ald\nshin wari\nrsv ps\nrough guides\nroh tang\nriems dyk\nresin ous\nrehabil itative\nregurgit ate\nregal movies\nrainbow laces\nra ffel\npur fleet\nprincess diana\npower systems\npost menopausal\npope ye\npere grin\npan isse\npall bearer\nober land\nob st\nnew biggin\nmusic scene\nmun oz\nmorning ton\nmish ere\nmetho dist\nmel ani\nmake som\nmac iel\nm laden\nlux ton\nlmm fao\nlie big\nleeu w\nko hen\nkad hi\njovan ovic\njohn piper\njeppe sen\nit ak\nio ve\nin dre\nhuang shan\nhans zimmer\nhan afi\nhagg ai\nha rel\ngri mmy\ngra us\ngive th\ngen ove\nge saffel\ngar n\nfunctional medicine\nfri ede\nframer ate\nfo yers\nfelipe melo\nfault line\nfaul ted\nencryp ting\neby zio\ndevel ope\ndeser ting\ndeni alism\nden si\ndeep dream\ndan the\ndag ny\ncyno sure\ncherry ville\nchar line\ncancer bats\nbur un\nbram lett\nboroon dara\nbooth by\nber gg\nban ken\nbal int\nayo shi\nattune ment\nar lfc\nant witter\nannas ophia\nacry lamide\nabc de\naas l\n[ ðŁĵ·]\nðŁĵ± #\nèĭ±èª ŀ\nzy gote\nze ts\nyed chat\nye sler\nyay ay\nw sk\nvaudre uil\nvaness amerrell\nv magazine\nusch o\nup gradation\nturt len\nton ly\nthir deye\nteam english\nte very\nsyco ph\nstri ped\nstaf fan\nsmo cks\nsketch book\nshu ker\nsch nur\nrob bert\nro ft\nreve rently\nrefr acting\nrecer tified\nra yer\npy romania\npix i\npente cost\nparod ying\npan ka\nomidy ar\noffici albull\nofficialbull srl\nno kian\nmyas thenia\nmur g\nmu stre\nmiti gates\nminne ola\nmend onca\nmem ling\nmc george\nmb en\nmarke aton\nle ches\nlaur inaitis\nla ak\nkol lar\nkirk ley\nki xx\nkelly ville\niwan rheon\ninstitu ting\nim brettdalton\nhy pom\nhome studio\ngn awed\nforum nyc\nfli ghted\nflec ks\nfl anger\nfab four\nedu ar\ndurham college\ndom mett\ndigni dad\ndigital singlemarket\ncultiv ators\ncu zz\ncrewd son\ncreative review\ncole brook\ncl é\ncel la\nce to\ncas ares\ncapacit ance\nbru ton\nbla sco\nbla sberg\nbig show\nberg son\nbel don\nbblo fficial\nbacteriopha ge\naqu id\nanti pasti\namp oules\nag ym\nafl crow\nadden brooke\n> "@\nðŁĶµ âļª\nåħ¥èį ·\nت س\nzal man\ny une\nxi bal\nwood brook\nwo burn\nweb isodes\nwar g\nv dub\nunci ations\ntwilight sparkle\ntroll tunga\ntele sur\nsy ston\nstudi es\nstro mer\nstral sund\nstpat sfc\nstand o\nsoviet union\nsnow falls\nsle iman\nslan ting\nsixword story\nsh oneys\nsarcast ic\nruba diri\nroad nats\nregi o\nray u\npromo tocross\nprati que\npo prock\npear man\npe go\npaul pierce\nparam oun\np nh\nou as\noli mar\nodel rosario\nob ay\no san\nnauti yal\nmo ze\nmau ch\nm ssa\nlove songs\nles que\nlanca strian\nkun ai\nkey t\nkar amel\nk ne\njonah ray\njo t\njim al\nj kd\ninfo graphie\nif only\niden hout\nhuub design\nhumb lest\nhigh boy\ngul liver\ngros mont\ngolds berry\ngo tr\ngirl probz\nfro thing\nfri en\nfloss moor\nfal tered\nexplo sively\nexemp ts\nex itos\nes en\nerin dale\nenr anta\nelstern wick\neleven se\nelec tor\ndig deep\nde brah\ndavid muir\ndav alos\nd cn\ncow ens\nconfe ss\ncon traflow\nchittor garh\nchiro po\nchima era\ncer veris\ncani bus\ncal gon\ncabare t\nbrandre th\nbicker staff\nball i\nbac cano\nati fs\natel ateshow\nat resia\nassn chat\nanglo gold\nandalu z\nan kari\namdry zen\namadeus itgroup\nalv ador\naccred iting\nðŁı ®\nãĤ¿ ãĤ¤\nâľ ĵ\nà¹ĥ à¸Ļ\nار ÛĮ\n¥ o\nyo wie\nyan et\nworld wi\nwigg ler\nwar lingham\nw iry\nvande mataram\nvaish navi\nurva shira\nuch us\ntour ne\ntoot sies\nthess aly\nthe kenny\ntgi fridays\ntail piece\nsymbo list\nsuppor tin\nsub sp\nsp ons\nsim kins\nshar mon\nsf wa\nsar apascoe\ns march\nrev ans\nreid hoffman\npsy c\npoison ings\nphospholi pid\npain lessly\npa zzi\noto ño\norl pride\nom il\noc cam\nnur kic\nns dc\nni mue\nne ith\nnah ant\nmon ito\nmom ina\nmmb ht\nmissjess wright\nminchin hampton\nmetro park\nme trix\nmau ra\nmar ras\nmani ax\nmand uka\nloin cloth\nliber tas\nlessi smore\nlacer ations\nkl are\nkingofthe monsters\nk rock\nj lr\nj jab\niti zens\nin scribe\nhouse martins\nhesit ates\nhaydock races\nhay makers\ngra ils\nglas vegas\ngha uri\ng pe\nfran sen\nfor tomorrow\nfle che\nf nl\nes war\nencamp ments\nekstra klasa\neco logic\ndor rance\ndom ici\ndevi ent\ncund all\ncollie buddz\nco sin\ncircul ars\nchristian bale\ncell therapy\ncarnau ba\ncapri les\ncai ley\nbuff ington\nboo dles\nbo pe\nbiz rt\nbir on\nbig dataanalytics\nbey az\nbe hera\nbal ne\narnau lt\napprehen sions\nani ela\nak kians\nagh y\naa i\n! ðŁį»\nðŁĻĮðŁı» ðŁĻĮðŁı»\nðŁij©âĢį ðŁĶ¬\nðŁı ĭ\nо ÑģÑĤ\nyoun gen\nx one\nwillo spre\nwillospre ay\nwil da\nweareall harry\nwahi awa\nvel á\nvar una\nvan helsing\nunion chapel\nun bound\ntr ach\nthread gill\nthe sharksza\nthe fish\nten chu\ntellu ride\ntaver ner\ntand ridge\nta ren\nt los\nt ente\nstur key\nsteve case\nsru thi\nspiritu als\nso lex\nsilver mine\nsch wager\nsarfar aza\nredcros scanada\nra sch\npy i\npru ri\npro lo\npepp ering\npenguin awarenessday\nostraci zed\nof ia\noccupy dc\nnh on\nna sta\nn cic\nmo ty\nmid america\nmichelrou xjr\nmh ra\nmam tay\nmaha shivaratri\nmadison beer\nm zuzu\nlul ling\nlore t\nlof africa\nline as\nler on\nlennox lewis\nkri z\nkle z\nkh ancats\nk outa\njurassicworld fallenkingdom\nj rp\niv ka\niter ary\nis lah\nino ids\nimp ong\nid wal\nhoch uli\nhe intz\nhar ford\nhae jin\nh medabad\ngeith ner\ngat ers\ngam bled\nfox hill\nfive star\nemerson barrett\nell ena\nek ins\ndj quik\nconfla gration\ncommu tative\ncinemain my\nches ney\nchen once\ncer vez\ncelo sia\ncas is\nbutt resses\nbirthday present\nback down\nas phal\nang aa\nambro ise\namandashi res\nalpha phi\nadam antly\n! ðŁIJ¾\nðŁĩ©ðŁĩ °:\nا٠Ĥ\nâ tre\nzlat ko\nyou ville\nyach tsman\ny ic\nxan the\nwhizz ing\nwhisen hunt\nwhen they\nwap ato\nvicuni wgtn\nure sh\ntul se\ntheo logically\ntheav club\nswoo pe\nswee tromance\nstar musicph\nsocialmedi atips\nsk ul\nsic b\nshan aya\nsequ entially\nsekar ang\nsecretary meity\nsat ana\nsanti bernardez\nsa hay\ns vic\nrt j\nrout t\nrot j\nro ge\npor lock\npis atower\npin kel\npel ota\npau se\noutdoor photomag\non time\nold trafford\no ore\nno isier\nnational watermelonday\nnan ai\nmovie twit\nmotor plex\nmor wen\nmon ceau\nmom mys\nmilli metres\nmat ina\nmagic man\nmag tang\nly cam\nlove eeeee\nllan do\nlittle mermaid\nlang ga\nkeith haring\nkaty b\njoaquin castrotx\njo casta\njacqueline fernandez\njackson ms\nj bj\nistandwith ahmed\nir reverence\nin shorts\nhy er\nhv n\nhuic hol\ngrizz nation\ngra vy\ngg v\ngesaffel stein\nfren chi\nfir ings\nf de\nent wine\nelimin ation\ned gley\nec dc\ndra gger\ndo sto\ndis illusion\ndal in\nda we\ncul zean\ncro ats\ncontra bass\ncon ex\ncap rica\nbur zum\nbridg ton\nbri ant\nbrau tigan\nbou bou\nbeau soleil\nbe ate\nbat th\nbag ong\nawh hh\nas ae\nandy bell\namphi bia\namaz ov\nalfie boe\nðŁįĬ ðŁįĬ\nà´ ķ\nø ya\nwu or\nwonder bra\nwell com\nwc zyk\nw elive\nver ba\nuniteand conquer\nuni oslo\ntz comics\ntravel india\ntrad cat\ntra kai\nto hru\ntik kun\nthe girls\nthe far\ntele play\nteam unity\nte mora\ntaraw era\ntan field\nswachhbharat mission\nsw aging\nst ecker\nss ave\nspine farm\nsne yd\nsn sh\nsk atal\nscu zz\nsch lock\nsb swinner\nsa ale\nrural crime\nriver dale\nrel pool\nra jut\npre selection\npantal eo\nnun zio\nneutr alizes\nnav otas\nna jah\nmu de\nmtn l\nmoun a\nmon agas\nmind the\nmichaele aston\nlu cus\nlol lo\nlo ftheday\nlee h\nle ta\nlaun dries\nl losa\nktn lifeandstyle\nkro k\nkp fa\nko tigobba\nkkw beauty\nkappa sigma\niti ate\ning us\nice prince\nhu mic\nhaywar dgallery\nha good\ngre sham\ngran town\ngoo die\nglaz ersout\ngeneral news\ngen gar\ngell ert\nflying dog\nfire bird\nfar ri\nfa hm\ney en\ner hard\nepile p\nemo tor\ndev araj\ndev akshi\nde colonize\ncouch base\ncoil over\ncine mam\nchiz uru\ncellu litis\ncalom baris\nbu fo\nbre it\nbill rancic\nawa g\nassemb lages\narcham bault\nak ola\nagne se\nach ines\nðŁĺľ âĿ¤ï¸ı\nðŁĵ¸ -\nÑĩ аÑģ\nzet land\nyel ps\nwak en\nvel den\nvall ée\nus lims\nuni kent\ntizi ana\nthisi sco\nthem icky\ntheat ro\nthe frank\ntam inas\nss am\nsk now\nsh aki\nsed atives\nsal ai\ns rush\nrobin thicke\nre organise\nre nova\nraz avi\nrambo donkeykong\nr anny\nque ene\nquag ga\npower pc\npo sie\npeyton manning\npal frey\nori k\nok tib\no dess\nnipa win\nneutr alise\nmy cin\nmesti zo\nmaz andaran\nman ston\nmamtay patnaik\nlun da\nlady ship\nko hi\nko chan\nkav y\nka hane\njud kins\njoo won\njak bar\nja si\ninn keepers\nin ness\nhi vos\nhal k\nhackath ons\ngue strooms\ngu mmo\ngas light\ngal en\ng bbf\nfuture day\nfrick ley\nflipk art\nfi ef\nfcgo aofficial\nes fahan\nedge fest\ned policy\neccle sall\nearth moving\ndin da\ndiero ten\ndarby shire\ndam os\ncredit score\ncol u\ncic le\nche main\nbul o\nbul lett\nbron zy\nbio m\nbeta wi\nben icia\nbellamy young\nbb bots\nball ons\nbaarba arde\nat na\nar bury\nant age\nanit adon\nam cu\nallu du\nabil ty\nab ach\n?! ?!!\nðŁijī ðŁı¾\nâĸł âĸł\nâģ£âģ£ âģ£âģ£\ná´ ´\nz inho\nyasi elpuig\nwolfs bane\nwma onedirection\nwand sworth\nvideo drome\nvas ool\nunion square\nun compromised\nun adilla\nuconn mbb\nto shin\nthatgame company\nth air\ntal dÃŃ\nsugar land\nstar tv\nst cuth\nspi ra\nspe zial\nsmall hd\nsho reline\nse dm\nsa dek\nross ella\nros aparks\nregen bogen\npresident kovind\npre ico\npolit icos\npar ds\npa wh\noregon state\noppre sses\nold pic\nof fe\nnu u\nnr c\nnic d\nnay ak\nmonop oli\nmill and\nmetro land\nmen il\nmcpar land\nmckend ry\nmatthew j\nmasi si\nmar ge\nmal acan\nmacmillan coffeemorning\nma thai\nlü beck\nlifeok tv\nlie bling\nle gio\nlaspal mas\nkle mmer\nker st\nkar ki\nju bal\njohn b\njenny packham\nj ü\nj oux\niv w\ninti mate\nincant ations\nhumph ry\nhu mored\nhu ggers\nhagg adah\ngra do\ngoo dre\nfin min\newe cisme\nel ady\ndu tra\ndown south\ndog spotting\ndish water\ncust is\ncou peville\ncoono or\nconstan cio\ncoccy x\ncam ira\nbron zing\nbran dish\nborg warner\nbom berg\nblue mont\nblue friday\nbig ness\nbe mine\nbbvacom pass\nbaf tac\nash can\nand care\naltr arunning\nallindiab akchod\nacar ter\n. )"\nðŁĶ ĵ\nðŁĮ¤ ï¸ı\nìĿ ¸ë\nyvon near\nyehrish taky\nwar randy\nvive andalucia\nver ulam\nvalent ini\nvale ting\nur be\ntragically hip\ntr ouncing\nto tara\nthat ss\nthali domide\nter ol\nte ki\ntam m\nsto c\nsti jn\nsp rees\nsou maya\nsm oment\nsloven e\nscience ctr\nrob itu\nrobitu ssin\nritu ximab\nris borough\nrein ert\nrames waram\nqui ero\nquebec ers\npe ca\np ach\nor man\nonward lu\nonline gaming\nold skool\nno worries\nmy son\nmor itz\nmo li\nmir zap\nmanojtiwar imp\nmah out\nle von\nlaps ley\nkrist tps\nkor f\nkom mer\nkno ch\nkan aya\nkab u\njin ho\nist itu\ninvari ant\nineffec tual\nindy indians\ni bex\nhon aker\nhigh lin\nhes burgh\nhear tedness\nh winkler\nh fr\ngo dd\nfoo kin\ney ards\nengli shri\nen sayo\ndisin i\ndeser tisland\ndeb it\nde camped\ncumb res\ncourteney cox\ncos kie\ncordi ale\nconsul tancies\nchurch goers\ncf z\ncentr alize\ncap as\ncanthelp falling\ncam mell\nbi vens\nbbc berkshire\nbb u\nbarnab y\nban te\nav ore\nastro samantha\nasf andyar\narti an\narmy navy\napo phis\namund son\nalcor con\nain tv\nafrican fashion\nafl tiger\nab oud\na this\n# ?\nðŁĺİ ðŁĻĮ\nðŁĺĤ ðŁIJ¶\nðŁĮ Ķ\nì¹ ĺ\nè ĥ\nز ÙĬ\nwrit ting\nwakeup call\nwainf leet\nverizon fios\nundu latus\ntro ad\ntheme park\ntaylor swif\ntat um\nt che\nsy am\nswo boda\nsw bts\nsteel ers\nso se\nsm le\nsk icks\nside as\nschie hallion\nsar copen\nsam hsa\nri ev\nrepaire rs\nrat zenberger\nraise droyal\nquent intar\nqual ys\npu stu\nproscen ium\npressu rec\npj bowles\npang ako\npa peete\noãĦ ¥o\nop ment\nolo f\nok ur\nnwalest weetsuk\nno xu\nncl b\nmontju ic\nmilli kan\nmikkeller beer\nmen tof\nmass eria\nmarsh on\nmar aton\nmale gaon\nmahan adi\nlyo to\nlot ti\nlitu ation\nlife form\nlee hi\nleak ages\nku lu\nknight pride\nke dron\njun it\njulian clary\njud son\ninstig ators\nhu gu\nhot wife\nhope college\nhome work\nhe ge\nhc ska\ngur dji\ngargan ey\ng tbicycles\nfiresi de\nfides z\nfarn ham\neu ijin\nerec ts\nemb olden\nem enike\ndou dna\ndon di\ndisfru tando\ndho far\ndev dutt\ndd orp\ndani ka\ncy bill\ncson ka\ncorn dog\nconcer ned\nchee ta\ncc fest\nc jb\nby am\nbux us\nbre anne\nbrad don\nbossi er\nblue water\nbarre iro\nb politics\nauburn tigers\narden ne\nar ven\napp ened\nam om\naivo arm\n/ /#\nðŁĴĭðŁĴĭ ðŁĴĭðŁĴĭ\nðŁij©âĢį âĿ¤ï¸ıâĢį\nðŁ¤¦ ðŁı¼âĢįâĻĢï¸ı\nçĿ Ģ\nãģ ®\nw sav\nvegas weather\nupanish ads\nuniof brighton\nunder handed\nun j\ntoo wong\ntath agata\nsympathi zes\nsudan massacre\nstop tober\nste yn\nsol or\nshi moga\nshark science\nsen ya\nsen rehmanmalik\nsch wi\nsaqib saleem\nsad ams\ns vil\nromp in\nrisk on\nrepri sed\nrele m\nre possession\nre buil\nrapi des\nr ri\npir ouettes\noxic lean\nopen ai\nolder people\noaken shield\nnow icki\nnote pads\nnorth fleet\nnor ville\nnawalel zoghbi\nn mireland\nmott ola\nmind scape\nmin ter\nmilit ari\nmen kes\nlympho cytes\nlsuf ball\nlesar cs\nkow ens\nkh ir\nkeaton stromberg\nke tsu\nke ay\njar ano\nistandwith israel\niron i\niceprince zamani\nice field\nhil ma\nhammer sley\ngay athri\ngabrielle doug\ng leave\nfu ssell\nfro mc\nfree ebook\nf sh\nexofan art\nepi thet\nei dos\ndiscipline equalsfreedom\ndemocratshate america\ndefence day\ncurt smith\nctc mediaboy\ncrew men\ncon on\ncolorado live\nci arab\nchem society\ncar rero\nbur rough\nboo ke\nbobro ss\nbj w\nbenedic ta\nbeat nuts\nbe ed\nbank ston\nbad gering\nart trail\napo stol\nanky losing\nangel ov\nan heuser\nalfaj iri\nagn ello\nabim bola\naa ve\n? ¿?\n.. ?"\nðŁĺ³ ðŁĺ±\nðŁij° ðŁı»\nðŁIJ§ ðŁIJ§\nðŁĮ¶ @\nà¹Ĥ à¸Ń\nzak ariya\nyu yu\nys r\nye dder\nx pt\nwich man\nwcc w\nvr la\ntr ès\ntom kaulitz\ntheceltic manor\ntam baram\nsun way\nsp j\nskatal ites\nshak o\nsean an\ns oooooooooo\nro sca\nq un\npunjabi rooh\nperu vian\nperi vale\npe ameal\npap on\npa quito\none towatch\nnic ols\nnh lers\nnational tacoday\nnate berkus\nmy sjaday\nmodern life\nmis kat\nmar mol\nmanzan ar\nmahi dol\nlondon birds\nliz mcclarnon\nkochadaii yaan\nking swear\nkin ta\nkar y\njami em\nj crossover\nit smi\nislam ujeres\ninstra gram\nhems well\nhealthye ats\nhav licek\nhaile mariam\nha itham\nh kust\ngun an\ngul man\ngrze gorz\ngrena dian\ngrav ell\ngli ac\nglam ori\ngentri fying\ng illa\nforge din\nfor theride\nfe thul\nf ttp\nez ri\nexplo rec\nepilepsy awareness\nekkle sia\ndrexel univ\ndoni phan\ndon nee\ndo onan\ndigis coping\nde sau\ndaisy ridley\nda j\nculture days\ncul ley\ncompreh ended\ncho g\nchic hay\ncel les\nce devita\nca ver\nbun ited\nbun cee\nbr ice\nbenne teau\nben sley\nbb k\nbal dur\naw aka\narri ola\nap ko\nane ela\nandrew schulz\nallahu akbar\n!! ~\nçĮ «\nâĺº /\nyoutube spac\nyour quote\nyn l\nyag nik\nxeno gears\nx mm\nwhere of\nu vas\nu cn\ntxh sfb\ntw ila\ntrum ple\nter res\ntempor ally\ntani sha\nsten cil\nstand withrand\nsque aler\nsla vs\nsi pi\nser vic\nsel ah\nsebasti andan\nsebastiandan zig\nse tya\nschu ur\nryan vaughan\nruss ert\nru sk\nro derick\nraven symone\nrac is\nr bs\nprovoc atively\nphor aone\npet ted\npart time\nouth florida\nob ong\nnic orette\nnext chapter\nnaraco orte\nmy burgh\nmusc ling\nmur ine\nmovie tv\nmirac leman\nmi b\nmcpart land\nmartin j\nmart one\nmal aka\nmakar ska\nlu kman\nlouise redknapp\nlor ong\nlivel iness\nld pe\nlach lan\nkud zi\nkhar an\njo bbing\njas par\nhog town\nheriotwat tuni\nhazle hurst\nh ca\ngrosse st\ngn oni\nel niño\nek afka\ne ja\ndu guay\ndr atch\ndirt car\ndel val\ndeathwish inc\nde coupled\nco hl\nchen yuk\ncha eng\nbri slington\nblood sugar\nbezu idenhout\nball rooms\nbal ak\nat cc\nas kins\nap mc\nalphon stourism\nalham dullilah\nal don\nakiz aka\nak ville\nagu ez\nad ae\nac inemas\na hahahahahaha\nðŁĺĬ ðŁijı\nîIJ ķ\nãĤ»ãĥ¼ãĥ©ãĥ¼ãĥł ãĥ¼ãĥ³\nãĢij ãĢIJ\nâŀĸâŀĸ âŀĸ\nภ¨\nzi yech\nzi bah\nyogate acher\nyi pee\nwärtsil ä\nwould you\nwo za\nweather field\nwa edu\nv ith\ntransduc ers\nthe silent\ntait ung\nsylvan as\nspic inemas\nsne e\nsky dive\nsbswinner shour\nsad ashi\nrobin tunney\nren yc\nre vul\nramire z\nquit aine\nqueen rania\nqu har\npro era\npro creation\npop tart\nplo tt\np agu\nono dera\nnursing school\nne men\nnatalie grant\nna gh\nmun ising\nmu lino\nmit so\nmind fully\nmc griddles\nmc feely\nmart lesham\nmac ou\nm spaint\nlun cheon\nlovel orn\nlin ky\nlat tices\nlaf ite\nkashmir bleeds\njoesp ub\njenni woww\nj era\nisur ppo\nine aux\nin nately\nig ley\nheisman trophy\nhanni gram\nhamble n\ngrac ec\ngeo science\ngend ron\ng pc\nfu d\nform alized\nfiendish ly\nfall game\nevry one\net yuk\nenye ama\ndiscol our\ndetroit tigers\ncusto des\ncommerci alizing\nclau rak\nchel i\ncer am\ncap ability\ncam ier\nbra sen\nbio process\nbeauty queen\nbb claurak\nbargh outi\nbal amory\nav ra\nar hi\nano dyne\nafri kaner\na sexuality\né ns\nwin elife\nwhite friars\nwan z\nwall ner\nw enty\nvictori aday\nv ris\nur ania\nunder achiever\nultr atech\ntwer ton\nturk cell\ntro th\ntne du\nti ote\ntaminas nuka\ntab ilis\nsy rin\nsum pah\nstreetfighter v\nstone arena\nstar cross\nsma shin\nske ws\nseren ata\nscrutin izing\nsand tats\nro cc\nric ca\nri kara\nreviv alists\nrannvijay singha\nr bm\nportu mna\npor s\nphin sup\npen ni\nout shot\noju kwu\nno hotch\nno cs\nniz wa\nn cla\nmy lor\nmusic notes\nmotor craft\nmon chele\nmit am\nmission possible\nmetaph oric\nmasi yiwa\nmanfro muncle\nmackin ac\nlongboard stuff\nlen ox\nle blond\nle ask\nlap kus\nku fuor\nku ai\nknuckle heads\nkis wahili\njim mer\njessica simpson\njar ama\nj day\nhlat ahai\nhell scape\nhealth fdn\nhaus mann\nhacksaw ridge\nh enty\ngurdji eff\ngentle woman\ngeno typing\ngame trailers\ngal vin\nfreak azoid\nfi ware\nfcc ps\nfashion trends\nf anni\nesp r\nelo ves\nearly voting\nds q\ndrain pipe\ndi fy\ndaniel platzman\ncott man\nco tuit\ncanal plus\nbutterfly fish\nbot elho\nblackgirl nerds\nbi man\nbetsy devo\nbest meow\nbbc wiltshire\navan am\naspi red\nar yeh\nap mso\naor aki\nandreab ocelli\nanah ita\nake hlatahai\nai weiwei\nagra bah\nag ada\naffili atelink\nðŁ¤ ½\nå Ĥ\nãĤŃ ãĥª\nม à¸ŀ\nØ´ Ûģ\nzan ussi\nys avage\ny anna\nwf sullivan\nweare messi\nwdy tya\nwat usi\nvisit rwanda\nvanilla ice\nu rious\nturtle beach\ntu eindhoven\ntrique tra\ntri duum\ntipsfor new\nthetommy dreamer\ntema gami\nsvi zzera\nsuppo sing\nstep well\nste gall\nsound box\nsocon sports\nsho whouse\nsh urt\nsel fridge\nsche els\nrob be\nren derman\nre ff\nray field\nrasp bian\npu u\npressuri sed\npran it\npiggy backing\npar vo\npai stenation\none es\nnivin pauly\nnau voo\nn ti\nn sh\nmy calvins\nmkt gnation\nmin ns\nmi af\nmeg apolis\nmadawas ka\nma irie\nlit mag\nle them\nkier ra\nkey akizaka\nke ila\nkayak fishing\nkar gentina\njä rvi\njeff mauro\njacoby shaddix\nj itter\nish ta\nin case\nhomos assa\nhitch in\nhi as\nhat tie\ngh n\nful well\nfoun dress\nfor newindia\nentoura ge\nembar goed\nem era\nely sian\negg sy\ned wyn\ne mina\ndv all\ndisintegr ates\ndin na\ndg classics\ndel toid\nded man\ndavi dicke\ndar am\ndanc zuk\ncur to\ncro i\ncritic schoiceawards\ncour onne\nconfu cian\nci ba\nchi oma\ncent in\ncamel bak\ncac o\nc ni\nby bike\nbi ii\nauburn u\naru z\narro whead\nar ace\nangar dens\nalle gre\naaaa ay\nðŁĺĦ ðŁİī\nðŁ¤ĶðŁ¤Ķ ðŁ¤ĶðŁ¤Ķ\nëĮĢ íľĺ\nâļł âļł\nâĻ¥ âĺĢâĻ¥\nаР¼\nzo sa\nyy ates\nyoutu betv\nyoung jeezy\nyou the\nyo shimi\ny iss\nxseed games\nwel che\nvis y\nvermin tide\nty outh\ntro on\ntou sa\ntoa sties\nto bu\nthe forks\ntap low\ntab ular\nsur ma\nstanley cup\nsta o\nsprezz atura\nspit toon\nso bra\nsk ane\nshou rie\nshoebury ness\nshal lower\nsend help\nscrutin ise\nsanctuary asia\nrsac onference\nretic ent\nred nose\nre marketing\nragg amuffin\nproudof you\npres age\npot ters\nphe be\npescat ore\nparadise papers\norient alis\noo die\nnon no\nnin na\nmusi ka\nmother lode\nmire les\nminu it\nmi des\nmf h\nmerri on\nmediev alist\nmasterpie cepbs\nmarie mont\nmaki as\nlu ssier\nlittle girl\nli des\nlan than\nkrispy kre\nkle infeld\nkiyom izu\nkah in\niy ad\nit awamba\niso cial\nin patients\nime che\nig li\nhol bert\nho ty\nhi jama\nhi iiii\nheresi es\nhead hunting\nhand sof\nhag strom\ngre z\ngeck o\nfur tive\nfree scale\nfre ey\nfei ffer\nfal le\nf dle\never man\neuro bike\neti ology\net canada\nep son\nengle field\nel ook\ndin gos\ncul hane\ncro fting\ncour tier\ncommunity spirit\nco fer\nchrist fic\nchim er\ncanar sie\ncamp day\ncali bers\nc gw\nbu mbu\nboer boel\nbir nam\nbi enne\nbern heim\nbeau sejour\nb appi\nazi kiwe\navoce ts\nas mode\narch diocesan\nanu bhav\nak ri\naha fo\nagar ci\nad os\nacar los\nac em\n# [\nðŁį» ðŁįº\nâŀĸâŀĸâŀĸâŀĸâŀĸâŀĸâŀĸâŀĸ âŀĸâŀĸâŀĸâŀĸ\nyoga inspiration\nx z\nwer sching\nvisual ised\nvisitu ganda\nvictori aave\nve sel\nun troubled\nump teenth\nu acc\ntrolley bus\ntransp ire\ntradcat knight\ntr indade\nthe moon\ntd bank\ntai sho\nstro bo\nstra ka\nst g\nsouthern stars\nso quel\nsky scape\nshi ina\nshar jeel\nsha ped\nsent i\nsam csmusic\ns loo\nrumin ations\nrt ve\nrol f\nro ding\nric ke\nrhi zom\nrevolution ist\nrecogn itions\nreal pigfarming\nrble ipzig\nr tb\npyro lysis\npv z\npre pubescent\npower puff\npic hler\npd w\nparti t\nparalle lism\npam an\nob eng\nnwm waypolice\nno watch\nno guera\nnicole byer\nncb wa\nnam it\nmu res\nmot son\nmik ro\nmi dy\nmersey travel\nman den\nlee hom\nkvo awx\nkun try\nkul am\nkingsme adow\nki ang\nker ala\njus reign\nj asons\nis chae\nimper atives\nij at\niced coffee\nhuck le\nhomecoo ked\nhis ss\nherald leader\nglend enning\ngey sir\ngener ator\ngar bi\ngal chenyuk\nga thon\nflori dian\nfel ker\nf tb\nestre ll\ner rington\nend ine\nelli avram\nec khar\nduchessof sussex\ndry cleaning\ndire tta\ndel tab\ndeath stranding\nde gnan\ndan as\ndalla sschools\nctb b\nconstra ining\ncoin drop\nchic ho\ncfl s\ncatson twitter\ncarol decker\ncare quality\ncall sthe\nc cre\nbubble uk\nbre c\nbin ondo\nbel inelli\nbasel itz\nbaal bek\nast ars\napach ekafka\nann woll\nallo yed\nale sha\nack ay\nabhay deol\n.... :)\nðŁĴĻ ðŁIJ¾\nðŁĴķ )\nðŁĮ ĩ\nåĴ ²\nà° °\nö calan\nziller tal\nzaid hamid\nz dar\nyu kie\nwin kelman\nwilliam zabka\nwei qi\nvan ç\nval let\nu tau\ntwitch retweets\ntravel awards\ntrans dayof\ntiru pathi\ntan felix\nt seva\nsuzu miya\nstormb re\nstormb lood\nsto h\nstan thorpe\nsp ang\nsou lar\nsnow blind\nsira gusa\nsign boards\nshir at\nshe said\nseic aday\nsd lplive\nscher r\nsapp eal\nruss y\nrol leston\nrod inger\nrik ke\nre gin\nre enter\nr nh\nr ari\nr allo\npon oka\npolitic snation\nober to\nobam a\nnoxu bee\nnew scenter\nnear sighted\nnai vely\nmis leads\nmicro blog\nmanbear pig\nma dia\nlo kal\nlegion ary\nlawrence town\nkir sti\nkalam unda\njic ha\njh us\njennab ush\ninciner ate\nimmuno therapies\nhi ff\nhe wwo\nhar twood\nhage man\ngre ce\ngoo fy\nglack ens\ngin ghs\ngeelong addy\ngames don\nfren sham\net ce\nent rain\nem elianenko\neastern ghouta\ndream ing\ncosm in\ncom ence\nclough jordan\ncho zen\nchicken foot\ncerti fies\ncambridge analytica\nbrook house\nbow sher\nbillyray cyrus\nbarrac lough\nau han\nard ingen\nap ron\nann am\nanj ir\nanim alier\namer chemsociety\nal gar\nah la\naff ney\nadore delano\nadam ferrara\nabout you\na eta\n! ðŁ¤©\n« à¸Ļ\nwith holds\nwis fb\nvisitt ampabay\nvermon ter\ntwit z\ntw ays\nturn bc\nttur tles\ntt t\ntroy ave\ntro ya\ntom delonge\nthestar kenya\nthereal daytime\nthan et\nte mberg\nson orous\nsok onews\nsobot ka\nsla sher\nsf as\nservice women\nsent sov\nroar lions\nro dos\nrith vik\nreef ers\nre zone\nre tread\nre gev\nranch itti\nprin cel\npr j\nporcel ain\npeop lenow\npent ine\npe conic\noun try\nopen door\no town\nnusrat chirps\nnsw waratahs\nnom ex\nmusic tech\nmo ville\nmir tz\nmh ingis\nmass o\nmaris cal\nman ero\nmagand ang\nmac mahon\nma ah\nlt museum\nlolo lolololol\nlin dow\nle pa\nlappe enranta\nlanc elo\nko bi\nkin ne\nkaty turnbc\nka inan\nk yser\njessic ad\njer se\nix s\nimmun ity\nhye sung\nhut chin\nhu tu\nhel imed\nhay ati\nhar n\ngir paten\nged don\nfro ot\nen antio\ne strange\ndiver ge\ndis membering\ndha hran\ndesk og\nde wdney\ncre gg\ncor ry\nconceiv ably\ncommonwealth sec\ncoal inga\ncinde rella\nchi pp\nchampag nes\ncal man\nc shs\nburge s\nbre don\nbran ly\nbombay sunshine\nbli xen\nblanch flower\nben cy\nbal da\nb ated\nax um\nauchin leck\nar cing\nappare ls\napho bic\naor us\nantic om\nannies land\nam wa\nal labout\nactor dougjones\na high\nðŁĻĭ ðŁı½\nðŁĺĬ ðŁijį\nâĻ¥ï¸ıâĻ¥ï¸ı âĻ¥ï¸ıâĻ¥ï¸ı\nઠĤ\nwhi ppets\nwestern cape\nwazz u\nwate rer\nvigil antism\nven go\nvasude van\nvap elyfe\nv lf\nusp icious\nunionchapel uk\nun quiet\ntre forest\ntothe future\nthe train\ntain ment\nsu raksha\nsnit zel\nshaku hachi\nsam pan\nsafe t\ns frs\nrh in\nresc ape\nrecor dist\nquarri ed\npom pa\npol tava\nphoto chromic\nphilippine star\npan niers\np fo\nop ole\nonly the\nomor phs\nom id\no valle\nnot ill\nnot arized\nni ku\nne wi\nnbad league\nnas ag\nn ju\nmor ire\nmohawk college\nmo reco\nmax ims\nman awa\nmadal ena\nmad hur\nma pple\nm jj\nm cap\nleather goods\nkry pto\nkou ign\nkoo yong\nkil cullen\nke aly\nkc ca\nkal impong\nju el\njohn no\nittake savillage\niti k\nit stime\ning res\nic and\nho tei\nhen rich\nhato ful\nguerri eri\ngolf chat\ngolden hobiday\ng crf\nfronten acs\nflor ina\ners dorf\nemanci pator\ndo dos\ndn rr\ndal hart\ncourtau ld\ncounterfe iters\ncle v\ncendr illon\nce ano\ncade te\nbutler mbb\nbru hhh\nbla kley\nbi valves\nbas cule\nbal lista\nb wal\narmy team\napprehen ding\nantho logy\nala jones\nai ha\n" =\nðŁĺ¬ ðŁĺĤ\nðŁĩ²ðŁĩ °\nîģ ĸ\nãĥ¼ ãĤ¢\nâģ© )\nÑĩаÑģ Ñĭ\nzen as\nys man\nyer ry\nwy lambrewery\nwhib ley\nwey land\nwawa see\nwah ls\nw valderrama\nvt beer\ntraxx as\nthemicky dolenz\nthe weekend\nte mas\nswing ing\nstyle guide\nstop es\nspotthe shuttle\nsn stuff\nsm ilo\nshaw in\nscrutin ised\nscrew tape\nschom berg\nsch or\nsav anna\nsa hel\ns derot\nrin ce\nrene auberjonois\nrei mann\nraj endran\nr nd\npru e\npre sta\npis ci\npeli gro\np ct\nou sts\noriz aba\nopen water\nonto pp\nnoise makers\nno kian\nnational ised\nmoon stones\nmil one\nmiddles boro\nmi sic\nmar ve\nmanis calco\nman alive\nmachiavelli an\nlo blolly\nlikefor likes\nlambeau field\nla blab\nkn aus\nkasabian hq\njo vana\nisthis reallife\nini ki\nhel ig\nhae user\ngre yer\nga ethje\nfor bearance\nfly high\nfit show\nfin ley\nf ng\nex ito\neith ne\ndul ly\ndul cet\ndracaen awines\ndoo fen\ndo dder\ndigital spy\ndevin der\ndesi ree\ndejavu love\ndef min\ncy hi\ncigar illo\nchun soft\nchitec t\nchir lane\nbur bank\nbo ite\nblue print\nblaze pizza\nbir doftheday\nbendel acreme\nba ÅŁ\naz navour\nay inde\nasian food\nas aad\narcha ea\nanton yms\nang ham\nan ett\naldub dejavulove\nabsor bable\na dism\n) ).\nç ®\nÎ ¸\né tienne\nz akes\nys g\nyou uuuuuu\nyor n\nye eun\nxi umin\nxen osaga\nwilliam son\nwheat stone\nwex po\nwdy wt\nwall street\nwa aaa\nvo tel\ntric orn\ntof ed\nthe angel\nswa thed\nsulph ur\nstormb rian\nsouth kensington\nsout doors\nsegui mos\nscience and\nschool safety\nsb last\nsaty endar\nsatyendar jain\nsar al\nruru madrid\nru lez\nrev jjackson\nrei der\nre packaging\nr music\nquentintar antino\npu lak\npop con\npati dar\npam ore\npakv sa\npaddle fish\nom nis\nohiostate hoops\nof all\noakland raiders\nnu on\nnormal ising\nnin an\nni az\nnew life\nnaac pi\nmuzz les\nmu min\nmo pani\nmiy ano\nminim ised\nme ji\nmccly mont\nmar illa\nlu gg\nlou dand\nlleg ar\nlets dance\nlar aine\nla sports\nkon ami\nkel kar\nkan sa\nkal ym\nisle ta\nislamic finance\nintra operative\nhope solo\nhog ans\nho ic\nhi z\nhenry rollins\nhell bender\ngur bani\ngun ga\ngeis inger\ngarban zo\nfree bobiwine\nfo ci\nfen se\nevo te\neucaly pt\ner yn\ner skin\nel makias\nde standaard\ncroy als\ncow slip\ncommer ical\ncitadel le\nchri sley\nchihay af\ncastle milk\ncar drona\ncap ron\nbroad stone\nbri anger\nbehind bars\naur on\nath saust\nanjan aom\nanae mic\nambu shes\n*____ *\nðŁĺĺ ðŁĺī\nðŁĴĭ ðŁĺį\nม า\nwi ba\nvyach eslav\nvel ha\nusl pro\ntre go\nthe ating\nteam sideline\nsun yani\nsummer ton\nsocial business\nsloven ia\nshim za\nroosen daal\nro gal\nrivalry week\nrepet itively\nredbul lair\nre investing\nre engineering\nragn bone\nradio graph\nradio day\nracer back\npon ferrada\npic ta\nphiladelphia eagles\nper les\npent ameter\npan tie\nou ttv\nok leg\nok at\noil seeds\nnoi seymusic\nno ths\nnieder sachsen\nnegli gee\nnau seated\nn mh\nmusk ox\nmukun dan\nmud larking\nmonu mentally\nmonte sano\nmis cavi\nmind bender\nmi ele\nmel en\nmc fe\nmanmohan singh\nmake lele\nm tor\nlilnas x\nli etz\nlanthi mos\nkeem star\nkan aa\nk ander\njimmy barnes\nintre sting\nhigh point\nhelpin gothers\nheart ly\nguj rati\ngu rashi\ngi zzi\nga elle\nfrontpage stoday\nfra y\nfool hardy\nfoo ts\nfly withus\nfi ume\nfathersday gifts\nfabi ani\nek berg\ndz ong\ndram ani\ndigital diplomacy\ndel ite\ncommunity matters\nchannel seed\ncbc p\nbus boy\nboru ssi\nbo band\nblogger bees\nbeam line\nballa gh\nbalbo apark\naw adhi\nas ntm\nadv a\n] âĢ¦\n( +\næĹ ħ\náµ ĩ\ná´ µ\nÕ ¡\nzig go\nz ta\nwomenin history\nwhat ttt\nweb server\nvla ardingen\nve eck\nupper classman\nuni sphere\ntu zla\ntu aran\ntrul lo\ntor me\nthe sky\nth kapoor\nteam bc\ntam ago\nstin do\nster mann\nstan wick\nspee dier\nsol tan\nsn are\nsiddhan thkapoor\nse kai\nsd news\nsche ffer\nscan avino\nsansk riti\nrud beckia\nru fa\nro barts\nradiof ree\nra zing\npur wak\npsychop harmac\npre recorded\npou illy\nplat formers\nper ino\nparok ya\npark stone\npark jimin\nparam aribo\np nut\noxid ase\nnot today\nnext step\nnew week\nna tha\nmit ri\nmi ha\nmer lino\nmehrang arh\nmari ama\nma sab\nm ative\nlaur in\nlam kin\nkor yo\nkor sakov\nkor bin\nkem pe\nkei go\nkeep texas\nka aya\njennabush hager\njangh yuk\nindividu alistic\nil sen\nil a\nhor lick\nhongkong protests\nhill ery\nhappy dussehra\ngur us\ngod hra\ngli m\ngle aners\ngeor gen\ngav ilan\nfre ars\nfor bade\nflo es\nfidd ly\nempir ically\nel iti\nea stri\ndisp assion\ndindi gul\ndenni stoun\ndeer skin\ncru ller\nche sson\nc gu\nbora hansgrohe\nbir gitta\nbel ur\nbel leau\nbe moaning\nb cy\nalgin ate\nal ae\nab elli\n; \')\nðŁĴ¯ðŁĴ¯ ðŁĴ¯ðŁĴ¯\nðŁijĢ @\nðŁĮ °\nîģ Ĺ\nâĸ ¼\nุ à¹ī\nÉ Ľ\nwroble wski\nwomen fashion\nwimp ykid\nwhiteri bbonday\nweizen bock\nve i\ntru ee\nton ers\nthepc clondon\nte ed\ntas is\nstadi umau\nspotify playlist\nsper ms\nsken worthy\nsk omo\nsimple ment\nsikor ski\nsig nore\nshe tty\nsch ur\nsch eller\nsara hin\nsa stra\nriver cats\nreal cider\nre ily\nprotestan tism\npo conom\nphetch aburi\nper ia\npac t\nor tal\no bras\nnew lin\nne hal\nnar inder\nmv choops\nmoc tane\nmo cker\nmelodi festivalen\nmed alla\nme lek\nmcken zi\nmarcell in\nlu pines\nlo pped\nleed scity\nla ibach\nkitak its\nkaran ja\njohnjay college\njo or\nja key\ninternational mountainday\niclass ical\nhype m\nhy sics\nhash browns\nguy brush\nguay nabo\nfuk rey\nfrit illaries\nfran ki\nflight path\nfeil ding\nfav o\nexotic cars\nearly morning\ndive sting\ndave east\ncé dric\ncul ham\ncobra kai\nche pauk\nce ti\ncat aldo\ncanon bury\ncake boss\nby as\nburtonalbion fc\nbrit a\nbit rate\nbeh nke\nbe vins\nbe falls\nbe bel\nb pm\natom os\nat boshoff\nap helion\nan tequera\nan sin\nah il\nagameof tones\nafel lows\nab atic\nab aad\na weee\n// âĢ¦\n. ðŁĺĮ\nðŁ¦ ¸\nworld govsummit\nwo ss\nwith ou\nwil fully\nvan ja\nun addressed\nturnit up\ntroglody te\ntouch of\ntor ney\ntherealmike epps\nthegreat outdoors\nthe h\nte ven\ntan dem\nsyrian children\nsub system\nstreet outlaws\nstrat agem\nstop trump\nstigmati ze\nstephen marley\nsquaw king\nsport scenter\nsin namon\nshar ry\nsen jeffmerkley\nscreen prints\nsch elle\nsap ariba\nrou ghead\nroo tless\nrivers of\nri sco\nrhy olite\nre integrate\nradham ohan\nquin nell\npurple bricks\nprod ded\npower slave\nphi er\nparalym pians\npa ther\nou an\norke stra\nnudi branchs\nnational chocolateday\nnar la\nmu ta\nmo q\nmili aromagna\nmile sluna\nmeren da\nmanipul atives\nmagento imagine\nlor al\nlin dahl\nligh ten\nlife as\nlhot se\nlgb ti\nleaf cutter\nky let\nku tu\nkn u\nkiel ty\nkex press\njer m\njak ku\ninter locked\nhone sty\nhi yori\nhau ff\ngoknight sgo\ngo kwan\nfore foot\nfigh ters\nel lement\nei du\ned icion\ne ita\ndegen kolb\nde cried\nd old\ncostel loe\ncher n\nchaud hari\nchang won\nchancell ery\ncameron diaz\ncam illu\nby t\nblu to\nblackgirl scode\nbi den\nben nis\nax ess\nartemchig vin\nari q\nanti semites\nannen berg\namir ul\nami don\naf ine\nad hd\naction on\nðŁĴģ ðŁı½âĢįâĻĢï¸ı\nðĿĻ¤ ðĿĻ\n⼠ħ\nâĹ Ķ\nâĢ¢âĢ¢ âĢ¢âĢ¢\nx inc\nwell ings\nwe ga\nvas arja\nval ero\nv lan\nusa ha\ntwitch online\ntu ille\ntranspo sed\ntopp dogg\ntele casted\ntatt le\ntar ang\nswind ling\nsum mum\nsubha dra\nstran millis\nsof italy\nso can\nsil kair\nsi eving\nshiro gane\nsep timi\ns vidler\nru bra\nro tonda\nre men\nrapid deal\npy thian\npublic transit\nprostatec tomy\npmp st\npav lyu\npathfinder rpg\np nca\nor dsall\nop fun\nnau l\nnau er\nmoto gp\nmossel bay\nmen en\nmariote stino\nmar to\nmar git\nmar con\nmadein india\nliby ans\nle we\nlang ella\nkhi zr\nkawhi leonard\njustice reform\njohn sentamu\nindi ag\niban ezofficial\niam up\nhot fix\nhor sfield\nhomestead er\nhm treasury\nhiro aki\nharpsic hor\nhal y\ngw enda\nguide posts\ngt chat\ngladi ator\ngi gu\nfan cher\nf zs\new t\nemirate sair\ned mundo\ndna day\ndept ford\ndeep ender\nde ichmann\ndariof ranchitti\nd mas\nd mag\ncul ross\ncrohnscolitis uk\ncontrover tible\nconcentration camps\ncollegi al\ncla rett\nchill n\nchihayaf uru\ncher s\ncheat day\nchach ki\ncast agna\ncar rico\ncar load\nc ck\nbusiness forsale\nbn ld\nblack girl\nbay ona\nana res\namin ta\nal tag\nak ilah\nab ic\nðŁĺĺ )\nðŁĺIJ ðŁĺĤ\nðŁij©âĢį ðŁį³\nðŁı ĺ\nðĿIJ İ\nê· ¼\nÎ ·\nyaaaa as\nvel tins\nvag ner\nun tu\nun quote\nty er\ntsu yoshi\ntro va\ntrail blazer\ntit illating\nthin kin\ntheware xo\nthes ats\nthe ca\ntermin ations\nsudha kar\nstar ley\nsr pg\nsj h\nshre ck\nshameon you\nshah ed\nsar kari\ns jo\nru sthall\nrol lon\nrish na\nrevealed rec\nre distributed\npull down\npu po\npro col\npolice dogs\nphra gm\nphil ando\npesc ador\nperki omen\nparaÃŃ so\noke x\noc ell\nnorth westerly\nnohotch nowatch\nnew tons\nnet z\nne uland\nmonster products\nml is\nmir jam\nmine ol\nmake amovie\nleic spolice\nleci thin\nleaf green\nlare rtu\nlad broke\nknox rocks\nkell yl\nka ghan\nir ac\nhye jin\nhidden gems\nher in\nhe ati\nh pv\ngone girl\ngoldent icket\ngil ts\ng won\nfr ampton\nfe ig\nfal la\nf va\nf peck\nengel hardt\ndu mans\ndigital artwork\nderi ving\ndeep rai\nde activates\ncrum mock\ncric k\ncow bird\ncor nes\nco cu\nch ely\nbun kie\nbravo wwhl\nbo canegra\nbies mulders\nberchtes gaden\nbe moan\nbath spa\nbar tered\nau tz\namar go\nahrc press\naf te\nadvi see\naas ld\n. ðŁĺĴ\nç· ļ\nâĢĵâĢĵâĢĵâĢĵ âĢĵâĢĵâĢĵâĢĵ\nØ´ رÛĮ\né tat\ny anny\nwithdra wal\nwas san\nwarrandy te\nw ason\nun worn\nun sent\nu vi\ntween ies\ntw oc\ntime stamps\nthankyou jesus\ntelevision acad\ntele phonic\nt line\nsz ymon\nsuper size\nst davids\nspo s\nsonali bendre\nslur ring\nsku dai\nsignsyou re\nshort lists\nsher d\nshar meen\nsens itisation\nsen nen\nse uro\nsd w\ns guy\nru ster\nrou x\nroc zen\nro eland\nrimm ellondon\nray al\npsych ometrics\npo hang\npeng elly\np wned\nospre ay\nosc i\noo hl\no borne\nni dd\nnarrow band\nmo ded\nmicro surgery\nmentalhealth month\nmb tc\nm anderson\nljung berg\nkla ar\nkha as\njust keep\nju beir\njr v\njami elaing\njam ena\nitt ner\nimmun g\nic sid\nho pia\nhipp y\nhe itz\nflower friday\nfi gg\nfair ouz\nex trude\nenglish bulldog\nene w\nellip ses\nech al\nds gn\ndivyan katri\ndiscolour ation\ncumbri an\ncour y\ncol ma\nclair sville\nchi v\ncastro ville\ncam hnews\ncafe bar\nc fra\nbro ilers\nbl inged\nba yo\naz off\naki moto\nai jobs\nac bc\nabu elita\n@ @@\n) ,...\n! âŃIJï¸ı\nyo il\nyaros lav\nx vs\nwolves races\nwho i\nway nel\nun cor\nun ceremoniously\ntu omas\ntop ten\ntom perez\ntom ales\nto pos\ntk ss\nthesse hydro\ntex ti\ntan doh\ntac tful\nta kako\nsy st\nsuperse de\nsuper naturally\nsun ga\nsultan pur\nstre aty\nstr ung\nspread love\nsp ul\nsoweto derby\nsin itta\nsin dustry\nshah nawaz\nsave theday\nsab ri\nrobinson cano\nrecycl ers\nrecu sal\nrazz ano\nratat at\nrainf alls\nrailroad ers\nr fruit\nquin ine\npuer co\npokemont cg\nphoenix es\npha ed\nper rins\npent acles\npaynes ville\npan ja\npac ademy\norre ry\nopfun kill\noni musha\non no\no att\nneo tropical\nne vi\nne kop\nn guni\nmoon cakes\nmoby dick\nmo est\nmi msy\nmesni l\nmeh wish\nmazz ei\nmateri alist\nmar im\nlumber kings\nlost found\nlion heart\nko aa\nkevinand bean\nker shim\nkay kay\njoe strummer\ninu it\ninst anti\nin communicado\nicenine kills\nhik mah\nhal sparks\nha igh\nh fg\ngle ek\nge ducation\ngar io\ngan gof\ng listen\ng kids\nfinding nemo\nfighter wing\nfemen il\nfee q\nfal ter\nf nn\neye s\never leigh\nend gbv\nelevense shour\nei sts\ndima pur\ndilip kpandey\ndeep tech\nde haven\nctv kitchener\ncri bbing\ncra pp\ncm ts\nclimate finance\ncham bly\ncgp grey\ncd nimm\ncc isd\ncart ago\nbyu hoops\nbuu ut\nboris kodjoe\nbon dar\nbl s\nbi hh\nbenaz ir\nbar son\nbal dri\nbal ado\nassinibo ia\narch enemy\nafloo ds\nafgh ani\nab stra\na jol\nðŁĻıðŁĻı ðŁĻı\nðŁķº ðŁĴĥ\nðŁı Ļï¸ı\nðŁı Ļ\nëĭĿ 맨\nãĤ·ãĥ ¥\nâĶĥ âĶĥ\nya str\ny aboy\nwords withfriends\nwo lowitz\nwit kowski\nwick en\nw by\nvogue williams\nvil helm\nvictoriaave yard\nve u\nv gn\nurban ites\ntv sports\ntorn illo\ntoi business\nticketmaster uk\nthisisla bor\nthis be\nthe vegan\nthe pursuit\nthe edit\ntam pon\ntal ay\nsword smen\nsu par\nsta ab\nss ong\nsong books\nsli gh\nsli ding\nsik sika\nsi um\nsho igu\nsee doil\nscre ative\nschre yer\nsahi wal\ns ican\ns dublin\nro pp\nresu l\npur pura\npu du\npower list\npo zzo\npect ations\npat labor\non nie\nom es\nnorse up\nno place\nmy coskie\nmu lan\nmi asma\nme sk\nmar ui\nmangesh kar\nmagh era\nlyce umtheatre\nly ns\nlud vig\nla sk\nke ever\nkalyp so\njeff gerstmann\nisrael mfa\nin seong\nifwe date\ni fra\nho way\nharlequin books\nhar gett\ngrape vine\ngod backs\nglobe arts\ngil dea\ngat esville\ngames nostalgia\nextingui shes\nen um\ndro gue\ndep ted\ndenni spra\nde valuing\ncurriculu ms\ncur ta\ncorbin wwe\ncoo ber\nconf ounds\ncli mac\nchrise u\nchis eling\nchi at\nc frs\nbuy tolet\nbu ssa\nbook ended\nbethe sda\nbear ss\nbaron corbinwwe\nbar dwell\nbam bo\nau ton\nati erra\nark dg\namin aticsofc\nace us\n:* :*\nðŁĮ¸ ðŁĮ¼\nðŁĮ¸ @\nìľ Ħ\nzin c\nyork beer\nx vx\nwow wee\nwm ms\nwednesday morning\nwalter boro\nunfor getable\ntor che\ntom kinson\ntoks vig\nte airra\nt sos\nsub tweeting\nst wm\nspad den\nsol na\nshar bour\nset the\nsalt box\ns like\nroyalo ak\nro keby\nriver cottage\nri mouski\nrep gh\nrat dog\nraj veer\nr lg\nq assem\npv lonabscbn\npv cs\npre zzies\npr riya\npose hn\nplor ation\npit so\npetroleu mmin\nper rot\npeople over\npedestrian ised\npath art\np afa\nox ana\nott tanak\nosw al\non twitter\nnol ito\nniag ra\nneo soul\nnaw af\nnano crystals\nmovie history\nlor os\nloch side\nlarra bee\nlang sung\nkol len\nkhali fah\njewelry lovers\ninternet archive\niima hmedabad\nhighend audio\nhelens vale\nhate week\nhan sson\nha ig\nha ad\nha ack\ngula bi\ngu skenworthy\ngoing global\ngenetic ists\ngam bang\nfood trip\nen jo\neli b\nelan valley\nec cl\ndun nigan\ndreamgirl hema\ndoctrin al\ndiy sos\ndestre han\ndel coronado\ndef s\ndeath lok\nda ia\ncs rs\ncopi ah\ncol wick\ncoccin elle\ncla ws\nchelse alfc\nce tus\ncar keys\ncampbell claret\nbuydo texpress\nbu ma\nbrig itta\nbb clocal\nbattle ments\navailab lenow\nas os\nartemchigvin tse\narm bureau\naqu is\nanodi sed\nami um\nalas dair\naho y\nab bado\nab ating\n_ ~\n$ \'\nðŁĺĨ )\nØ§Ø µ\nza hi\nwo reit\nwho a\nwall enda\nusc ellular\nup es\nunder written\nun dyed\nu verse\ntü rk\ntu pdates\ntrumppro test\ntra vers\ntip sare\ntha ip\nter mer\ntam en\ntag along\nt ppa\nsyriacivil def\nsun ghoon\nslee pless\nsle ssor\nsegreg ating\nscot ney\nsat lanta\nsandra oh\nsal vi\nsakura jima\nross ell\nrosen stiel\nro go\nran au\nra pan\nqui era\npsi onic\nprometh azine\nprogram ming\nprakash an\npotus geeks\nportra itist\npopefranci sph\npod sincolor\npin ni\nph f\npe mi\nout strip\nor ail\noktib beha\nnaacpi mage\nmur amasa\nmr nick\nmot mot\nmon aca\nmomo chi\nmiumi u\nmilitar isation\nmes ra\nmaximo park\nmatthe wl\nmapre duce\nlucian aberger\nlost pets\nlif ted\nkul tura\nkran ji\nkle o\nkil ic\njrl web\njohna thon\njayawar dene\njammu kashmir\nir f\nipa day\nhu hn\nhil tz\nhi go\ngun by\ngru ver\ngou nod\ngo trojans\ngn k\nglen ys\nger asi\ngamesdon equick\nfood co\nfit c\nfantasi afest\nfan boost\nexasper ation\nent ally\neleanor j\nel te\neast midlands\ndun drod\ndiver sionary\ndimp act\ndev is\ndas raghubar\ncur lin\ncotte rell\ncom illas\nclo ds\ncity view\ncindy crawford\nchew ton\nchel seag\ncen c\nbuxton brewery\nbull nose\nbrig itte\nbore k\nblack clover\nben do\nbar ot\nas mine\narne son\nalternati va\nallisonb janney\nalberta ferretti\nala inde\nal agna\nagu ada\nag ay\nag ari\naberavon rfc\n:) ))))))\nðŁij» ðŁİĥ\nðŁıį ï¸ı\nìĹijìĨ Į\nz ea\nyour city\nworld fish\nwild heart\nwi kis\nwc choops\nwater house\nvu elo\nvill i\nvill amor\nvalent inos\nval co\nv kontakte\nux ury\ntra ill\nto shack\nth ampi\ntchotch ke\ntat an\ntal liance\ntab ora\nta sha\nstun de\nsto you\nstay true\nshort crust\nse gers\nse dar\nsa je\nru iner\nros ch\nroot sy\nro des\nrc stweets\nrai ji\npre ading\npli o\nplay your\nphon ology\npeter hollens\npai hia\nor ri\noker lund\noccul tation\no dy\nnadi az\nn map\nmon ten\nmk d\nmental ities\nmar mon\nmad hat\nmac each\nlove mk\nlogi k\nlisten up\nlets roll\nki pla\nkath bum\nju gar\njosh henderson\njose fa\njen nac\niron ical\nipad mini\ninternation alliteracyday\ninfier no\nindie game\nin expressible\nilovemy cat\nhomogene ity\nho ww\nham mon\ngö ttingen\ngross mann\ngran ule\ngood acre\nfron twoman\nfowler pga\nexclu siva\neco le\ndo dgson\ndespi erta\ndent sply\ndefe rent\ndam acy\ncoo tes\ncoffeewith acop\ncm hr\nchim my\ncam on\nc tot\nbur nes\nbrahman andam\nblack spot\nbe witch\nback stag\nauto bant\nanjanaom kashyap\nambas sade\nak ley\nafl hawk\naf ly\nac wa\naa ad\na jaz\nðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺį\nðŁĺ© .\nðŁĴ¡ #\nðŁĩºðŁĩ ¬\nìļ° 리\nâĿ¤ï¸ı ðŁĸ¤\nâĿ¤âĿ¤âĿ¤âĿ¤ âĿ¤âĿ¤âĿ¤\nâĢ¦ ."\nà¸ĻภĦ\nzoro astri\nyu ma\nyeon dan\nye ayyy\nx me\nx bet\nwra ppings\nwor dings\nwen digo\nweight man\nway yyyy\nvli eland\nv ites\nun tainted\nul lr\nton yi\ntee total\ntam alajones\nstro y\nstar lights\nspace ibiza\nsoun de\nsoft skills\nsob server\nsne x\nsilver hawks\nshropshire star\nshout cast\nsch lag\nsaf fire\ns wn\nrajeev khandelwal\nquick draw\nqueens speech\npa que\noverestim ating\nold time\nnu al\nnon lge\nnio br\nnigh tinthe\nmos shart\nmatthew santoro\nmass ad\nmarou lis\nmammamiam usical\nmam ma\nmakeup forever\nm lauer\nlu gging\nlt frb\nlost cats\nlogan air\nla sser\nkristi ann\nkitt in\nking arturo\nkil gour\nke pri\nkay es\njon bonjovi\njj cc\niss ler\nisa itl\nilove the\nic alli\ni dents\nhof en\ngodsown country\ngoat skin\nglenn howerton\nglaci ation\ngen asis\nfortune cookie\nfat ou\nfar be\nfaith and\nfa reg\neyewitness news\nengad ine\nee ve\ne ung\ne jb\ndra isaitl\ndown to\ndar ity\ndanny mcfly\ndajj al\ncuri al\ncure ttage\ncoo kin\nconsci ences\ncenturi on\ncalli han\nbot nets\nbooksare mybag\nbol dman\nbod ø\nbnld italia\nbit burger\nbeg ley\nbeati fic\nbay stars\nbac laran\nash tons\nar pit\nagain stracism\nag li\nadulter ation\nðŁĺİðŁĺİ ðŁĺİðŁĺİ\nðŁĶ¥ ðŁĻĮ\nðŁİī ðŁıĨ\nðŁĩ®ðŁĩ³ ðŁĩ®ðŁĩ³\níĹ Ī\nìĭ ł\nzab ala\nyehrishtaky akehlatahai\nyastr zemski\nwillem stad\nvul fpeck\nvol vos\nvar lamov\nunion station\ntt olle\ntravis mcelroy\ntra sporti\ntra qu\nta kin\nta cho\nsty ling\nstress awarenessday\nstop childabuse\nstick land\nstampe ding\nspets naz\nsol amente\nsoe toro\nsne st\nsky ways\nsi rio\nsec tioning\nscoo bies\nsch achter\nsaha ba\nroun dy\nrose music\nrobert shaw\nreverber ating\nreal j\nprobab ly\npreci ado\npou pon\nparam aham\nouarzaz ate\nopening day\nnie buhr\nnh sscot\nne ds\nnan ometer\nn atta\nmy club\nmi way\nme chag\nlysi strata\nliken esses\nlear d\nko zi\nken sho\nkelli her\nkay bee\nk lr\njon quil\nja veri\nindira gandhi\nimplac able\nima bad\nhill yer\nherst mon\nhaun tings\nharima u\nhal tand\nhaku oki\ngul barga\ngrowth hub\nglo ver\ngil as\ngi anyar\nfort son\nfood facts\nextru sions\nest eves\nero les\nen gr\nen gender\neffec tual\ne zer\ndieroten bullen\ndho bi\ndem ith\ndecapit ating\ndanko jones\ndam ania\nd te\ncou sine\nconserv atorium\nco len\nco biesmulders\nci offi\nchin naswamy\ncheri sh\ncharlie brown\ncaru anagalizia\ncar leigh\ncapit alistic\nbroc ke\nbi aly\nbelcher town\nbe chet\nbangkok post\nback road\naz ek\nann ae\nal vor\naa q\n< ==\nðŁıĬ âĢįâĻĢï¸ı\ní ij\nåħ ī\nâľĮï¸ı ðŁĺİ\nà¹ģภĽ\nzab ul\nyay i\nwit te\nwhone ed\nwhiskey myers\nvigner on\nve do\nvall on\nus y\nthe move\ntech week\ntafa hl\nstove pipe\nstone masonry\nstol tz\nstern ly\nstephan jenkins\nslam dunk\nskind red\nsin tered\nsanmarino gp\nru thy\nru ge\nrind t\nren ouncing\nre tton\nre introduces\nre assembling\nre animation\npyg mies\npush kin\npso as\nprince william\npreston sburg\npr wx\nposi donia\npol at\npick meup\npay asam\npark board\non w\non nn\nny ak\nnoo k\nnic eties\nne vel\nnati xis\nn reid\nmurph twn\nmon el\nmedi af\nme gi\nmayday parade\nman que\nlin ne\nlatin a\nlabyrin thine\nkir it\nke hl\nkaina atar\njoyceme yer\njo vita\njo de\njeho vah\njason aaron\njar ratt\niso propyl\nhu men\nhir ata\nhard fest\ngw tweets\ngun t\ngru pos\ngru it\ngre ssive\ngra bb\ngon ia\ngolden voice\ngi stics\ngb doc\ngarda sil\nfuture isnow\nforsa king\nfo sun\nfarm fresh\ner zur\nelizabeth taylor\ne learning\ndyffr yn\ndowntown la\ndd b\ndawg sontop\ndavid chang\nd bl\nchuck berry\ncat cafe\ncarab obo\ncan sa\ncamp and\nc giar\nbrit tafahl\nbrae head\nbegin ning\nbc s\natlan tean\nas oke\nar network\nar ale\nal meda\nag ray\naf shan\nad ais\nace re\naccordi onist\n( -)\næ° Ĺ\nãĥķãĤ©ãĥŃ ãĥ¼\nâľĬ ðŁĴ¯\nÙĦ Ùħ\nwoj tek\nwi recard\nwhite stown\nwhite girl\nvish wa\nurum qi\nur ora\nun ceasing\ntoday news\nto ils\nthomas cook\ntest able\nsub section\nstav ro\nsp ta\nsound view\nsof ties\nske ets\nsk loof\nshop style\nshir anui\nsharmel sheikh\nsh yn\nsett ing\nsean patrick\nsax mun\nsatt va\nsaras wathi\nsantor a\nsan angelo\nsaf ak\nsa ji\nsa ari\ns done\nrou ler\nre assembly\nram ie\nra utela\nra bih\npoquo son\nper gi\npenguin classics\npendi entes\nover statement\noutside thebox\nore stes\nofcaldub koto\nobnoxi ously\nnic ca\nne vel\nnag er\nn man\nn korea\nn kem\nmoth balls\nmis understands\nmin ang\nmax thewanted\nma î\nlu ki\nlovel ine\nlol jk\nloath es\nliti gants\nlime crime\nli spe\nleonardo davinci\nle uk\nle coq\nlaur at\nlat vians\nku sum\nkin ard\nkast ner\nk plc\nindiana univ\nincentivi zing\nic ruise\nhv dc\nhin chin\nhappy veteransday\nfuture bass\nfront men\nfried l\nfinn hour\nfin ck\nevery child\nenders game\nembal med\nel wyn\nec us\nec astle\ne qc\ndexter ous\ndestiny schild\ndeck le\ndeath inparadise\nd ric\ncv x\ncul two\ncine plex\nchak wal\ncem paka\ncarlo sm\nbul man\nbro iling\nbi shopp\nbay ridge\nbay ram\nbay ah\nbarrow lands\nbarra za\nb ür\nauck landers\nar notts\nap inv\nanastasi ades\namy lee\nal fre\nacri mony\nabujatwitter community\n! ***\nâļ½ ðŁıĨ\nzoo pla\nzib bet\nyoun us\nwine studio\nwe bassembly\nw enger\nvi irs\nvas an\nvander voort\nu az\ntri ang\ntram pa\ntopol ino\ntime keeper\ntic ide\ntheal thy\nted dibiase\ntal lia\nta tham\nsteve letarte\nstenc illed\nss ri\nsor guk\nson er\nsil ky\nsc olo\nsal il\nsabo l\ns stl\nround hill\nricci ardi\nreag ans\npsylli um\npipe band\npi ques\npen nock\npand it\npachu co\noutsmar ting\nout numbering\noscill ate\noo om\nofficialo afc\nobjec tor\nnew space\nne way\nnational hand\nmo ch\nmiscavi ge\nmc millin\nmavis staples\nmat field\nmal lets\nmad z\nmack le\nmaaa an\nley afc\nlee ton\nleaveno doubt\nle llo\nko sten\nkil learn\nkid wai\njaga dish\nit ss\nili ff\nib sa\nhun nic\nhowtotrainyour dragon\nhoo kah\nhaw khurst\ngr ity\ngopal akrishnan\ngo los\ngarden hire\nfore tell\nfore sta\nfitt ler\nem rick\neli en\neiz amusica\nechever ia\neaton town\ndushy ant\ndee dee\nde silva\nday soff\ndark star\ncup cakeday\ncu chi\ncu caracha\ncric buzz\ncraft fair\ncove guardians\ncorne ille\ncomet landing\ncoiffe ur\ncili p\nchuck anut\nchristian music\ncha b\nbre on\nbrandon flowers\nboxing day\nbook promo\nbh ool\nbe fall\nbat la\nbag ani\nback bench\nam berg\naffin ities\nðŁİ¾ðŁİ¾ ðŁİ¾\nðŁĩ¬ðŁĩ³ ðŁĩ¬ðŁĩ³\n룰 ëĭĿ맨\nâĨ ł\nÊ· Ê°\nzi ker\nze enew\nyose op\nx ul\nwen die\nvoice over\nvit aisland\nver du\nve oli\nve h\nvan ita\nuf h\ntum he\ntour ner\nthisis london\ntac ony\nta vis\nt kb\nt its\nsubro to\nspiro sis\nsou tah\nson taran\nsh ichi\nseven oak\nseas pray\nscep tics\nsar noff\nsacred heart\nru tin\nro ter\nrefe ction\nred team\nre miss\nram ones\nradical islam\nra eng\nr hoops\nq adri\nprosthodon tics\npok kiri\npi oli\npeper on\npedan try\npaw trol\npad res\np shr\noutand about\nopen ssl\nom mi\nol t\no eno\nnu d\nnorth cliffe\nnbcdfw weather\nnational runningday\nn dd\nmu ur\nmt lal\nmo shi\nmee thi\nmatch week\nmanig ault\nmand ara\nman ok\nma hood\nm rap\nlul ls\nlipp ies\nli sc\nlepto spirosis\nleather neck\nlau thor\nla sek\nkyam bogo\nkreay shawn\nkra ddick\nkean university\nk bh\nju gs\njo bli\njig ging\njc su\njack knifed\nj cre\nit anagar\nisland wide\nin delhi\nin controvertible\nhaltand catchfire\nh än\ngrove town\ngreat team\ngl hf\ngimna sio\ngig ichibi\nger des\nfoam ems\nflu gz\nfl er\nfish kin\nfini ster\nfer mat\nfa eces\nent ury\nemul sions\nell ys\ncummer bund\nconval escing\ncon form\nci encias\nchri sh\nche ee\nchange d\ncat ron\ncarre ira\ncar hire\nbf si\nbetter idge\nbang alow\natt ys\nar ath\nand then\namox icillin\namandab ynes\nam eric\nalternative medicine\nagon cillo\nag ila\nadomin icana\nacor ah\nabduc ts\nðŁİīðŁİģ ðŁİĤ\nâĹ Ĭ\nâĸ«ï¸ı âĸ«ï¸ı\nyoung day\nwei mann\nw go\nun workable\num kc\ntv awards\nthe tre\nthe jack\ntel ok\nsuper lot\nstro zzi\nst als\nsqu atch\nsports memorabilia\nspar kas\nsm ca\nsk ata\nscoff law\nsar ki\nru aha\nrick sen\npractic able\npoblen ou\nplant power\npiece meal\nphi rek\npen pals\npadma bhushan\np marca\np inger\noro go\noni er\nob ata\no gan\nnorman whiteside\nne atoday\nnascar goeswest\nnapp i\nmus ico\nmo p\nme ep\nmc clay\nma drug\nliv ni\nlen sman\nle coq\nlax mik\nlan kershim\nkim taehyung\nkeven ingecho\nkaf ka\nka steel\nka ino\njedediah bila\njar ro\njap het\ninf eld\nindecent ly\nin adequ\nice man\nic q\nholm wood\nhog fish\nhatt an\nhass anandani\nha go\nha gens\ngun ov\ngool wa\nfri eze\nfree time\nfore lock\nfonte yn\nfinancial brand\nfern bank\nfamily love\nf ator\nexother mic\nev or\nessential mix\nes ling\nen hage\neg be\ndm z\ndiscoun ters\nder am\ndave morrissey\ncri spin\ncour tre\ncor keveningecho\ncomor bid\nchoice hotels\nces ario\nca bel\nc spi\nbou vet\nbody by\nblue coats\nbhat i\nbeat us\nbe smart\nbangladesh is\nbalo gh\nb cle\nas mp\nambro gio\namar ley\nal dc\nair transat\naf rl\nab ud\nâĿ¤ âĺº\náIJ ħ\nÙ Ģ\nÌ²Ì ħ\nzom boy\nzapho d\nyon atan\nxi omara\nworldd omination\nwl bt\nwhiteri bbon\nw fc\nviper room\nvign ale\nval o\ntu bule\ntu berlin\nthu ll\ntaip ans\nsur mise\nstor ico\nsta hl\nst n\nst anced\nsmex aminer\nsip smith\nsi rs\nshin awat\nshalo tt\nsche epers\nsc bc\nsasol sa\nsam sa\nroy d\nrib chester\nrhy dian\nre assessing\npro vine\npoo ch\npom on\npic ado\npi ma\npg x\nperiodon tist\npd ca\npann acotta\np win\nom avirus\nni dal\nneon trees\nnal co\nmy viking\nmuj uru\nmtlal ouettes\nmo zes\nmo ren\nmcv itie\nmat thes\nmani x\nmac donnell\nma zen\nma ass\nluis ito\nlord stown\nlight painting\nlevan te\nlegal advice\nle iria\nlap angan\nla ze\nla the\nkrish n\nkol on\nken sal\nkare y\nkam ya\nkad lec\njig arth\nitsadog slife\nis ae\niron birds\nhyu koh\nhm nation\nhe ssler\nhas na\ngore tex\ngood memories\ngonetoo soon\ngoe tta\ngel dings\ng mm\nfr yman\nfoot ballis\neric a\nend sleigh\nek tar\nec lub\near p\ncorn market\nconcur red\ncoet zer\nco ker\nclap board\nciz re\ncic m\ncare e\nca ep\nbush baby\nbub bler\nbread basket\nbre p\nbrazilian jiujitsu\nbod ger\nbi sho\nbeng kulu\nb itti\nav eline\narchiti zer\nangel ine\nall c\næĽ ²\nyl u\nxon r\nworld snooker\nwest cliffe\nux mal\ntoto wa\ntoo early\ntipp ler\nting z\nthin c\ntf tuesday\nt itt\nsupporting women\nsru hle\nsom nam\nsm itty\nsly ke\nslur ping\nsi miles\nsemir amis\nsee ma\nsec ca\nsc g\nrite sh\nriseupred hawks\nrho dy\nres nik\nqu wain\npá irc\npun kand\npropag andhi\nprincipal ities\nprem chand\npr zy\npotenti ometer\npol ke\nplu gand\npf nicholls\npark field\npall ant\nophi uchus\none happy\nnews reel\nner r\nnat geom\nna ah\nn to\nmu ffle\nmi at\nmanchu ria\nman ai\nmac ross\nma sand\nlockthe gate\nlo far\nle pak\nkemp sville\nkather yn\niucn congress\nirrepar ably\nhi kaye\nhack able\ngund agai\ngoodwithout god\ngo teamusa\nge milang\nfunko pops\nfix it\nero i\neel am\ndun raven\ndro st\ndra ther\ndorn birn\ndesign and\ndar wyn\ncut ler\nco bit\nchimbor azo\ncar oftheday\ncar ned\nbrown trout\nbroc kett\nbre vard\nbluer ising\nbin n\nbidvest wits\nball ena\nb hari\nauto drome\nasphyxi ation\nar dr\nappet ito\nanitadon gre\nam ayi\nalla scala\nall ontheboard\nabsten tion\nðŁļĢ #\nðŁĺī ðŁĴķ\nçĽ ®\nâĿĮ âĿĮ\náµ Ī\nwyn jones\nwsf cs\nwrong ful\nwinand yourein\nvill on\nvel ho\nurtic aria\ntravel writing\nthework isworthit\nth ye\nsvf social\nsubmer ging\nstrelit zia\nstevie j\nsr va\nsport speople\nsport park\nspiderman movie\nsouven ir\nsott sass\nshel le\nsenti ence\nscotu spick\nsco bie\nsamu dra\nsa amy\nrope walk\nrickie fowlerpga\nquadr ille\nqu k\nq nx\npr itt\nplanetrock radio\npaul ricard\npag el\npack ag\nour people\normer od\noppos itional\nopol itical\nolafur arnalds\nne ared\nnaz gul\nnaveen jindal\nmy four\nmorning run\nmor by\nmcin ally\nmari eee\nmangeshkar lata\nmall ord\nmalaw ians\nmakeme smile\nlol lar\nlindy hop\nlar do\nlam as\nl rd\nklax ons\njim jefferies\nj tag\niter ature\nhouse and\nhomeboyz radio\nho omin\nhari prriya\nhand guard\ngrou ted\ngretsch drums\ngre go\ngi do\nfriend satthetable\nfootball archive\nf nc\nen ate\nem cr\ne iland\ndor ayaki\ndioce se\ndaniel craig\ncz k\ncustar d\nco var\nco ban\nchetri sunil\ncher no\ncanone os\nc train\nbub nagar\nbo jana\nbo dley\nbetra yals\nbeh rouz\nbas sing\nbar bas\nbank rolled\nbag no\nassan te\nas j\nanni elennox\nalab adi\nðŁĻı ðŁĩºðŁĩ¸\nðŁĺħ ðŁĺħðŁĺħðŁĺħ\nðŁĶ® ⾨\nðŁĴ§ ðŁĴ§\nðŁij ±\nìĤ °\nâĺĢï¸ı .\nत र\nı oÄŁlu\nz up\nys l\nwol v\nwi da\nwe k\nver mette\nve trano\nval on\nup skirt\nunt ying\nu rena\nts ong\ntro v\ntoy collector\nthomas ina\nthe ts\nthe stoneroses\ntf boys\nten th\ntelang an\nta ite\nswas ft\nsu wa\nstrip elife\nsport paleis\nsoccere x\nsm pls\nsin to\nshop ads\nsher ratt\nser ous\nscreen ers\nscot th\nsch wag\nsai ko\nry croft\nro dders\nrein ier\nrange ley\nqual ino\npoign antly\npicador books\nph orm\npete foramerica\npescet arian\npan war\npa edo\npa chter\nornam ented\norac er\nopp erman\nnefer tari\nnan amusic\nmur ton\nmu mias\nmol lo\nmitri one\nmill field\nmichael muhney\nmediacom poser\nmass ari\nlu iz\nlicen se\nley on\nla style\nkamp ar\njosi elong\nintra week\ninner circle\niit bombay\nid una\nhydro dynamic\nhomes ites\ngri mey\ngoogle cardboard\ngi gged\ngal sworthy\nfor animals\neu com\ndon nay\ndoing right\ndil opho\ndad aism\ncu v\nchi pola\ncallsthe heart\nbristolold vic\nbhattachar jee\nassembly fest\nanything ispossible\nactor karuna\na arti\n. ðŁ¤Ĺ\n## ##\nðŁĺĤ âľĭ\nðĿIJ ĵ\nãģ ¨\nz nik\nwitch of\nwinter berg\nwh summit\nwell ard\nvel oute\nu ter\ntv dsbmath\ntur p\ntreat day\nto inton\nthevoice kids\nthev ra\nther ich\nthe intercept\nthe coach\ntel aviv\ntam sen\ntal garth\nsuper impose\nstr fans\nsr sg\nspar kes\nskitch en\nshel ob\nse ant\nsakur acon\ns offer\nru dman\nru ah\nronnie o\nrocksolid show\nric carton\nrabbin ic\npuz der\npunch line\npu ft\npot latch\nphil os\npacqui ao\nover hear\norn ella\nopend ns\nnational nutritionmonth\nmusic hub\nmu ybridge\nmoody grams\nmissing cat\nmicro plastic\nme il\nmari ecurie\nmar williamson\nmar al\nman za\nloch gelly\nlifein pieces\nli q\nlen ni\nleader ships\nlat robe\nla ie\nkor y\nkong skullisland\njane goodall\njak cloth\nintra ocular\nin ves\nim zaheer\nhurricane season\nhol lowell\nhahahahah haha\ngu ac\ngreat people\ngon go\nfr acing\nflight attendant\nferry boat\nfern ley\nfar ang\nex im\nex hum\nerec tor\nef ford\ne gle\ndry stone\ndoy enne\ndiscred iting\ndia hann\ndelta zeta\ndam ascene\ncor less\ncon scripted\ncolmc ille\ncol ca\nchase water\ncarden al\ncanad apost\ncam wowapp\ncab ane\nbud de\nbrian w\nbra ding\nbor st\navan ade\nask ell\nashi da\narche o\nar lo\nander sen\namazing racec\nam brin\nalt stadt\nalam gi\naig adesign\nadu que\n!! ðŁĺįðŁĺį\nðŁ§¡ ðŁĴĻ\nðŁ¤Ł ðŁı½\nìĨĮë ¯\næĥħ åł±\nâĺij ï¸ı\né dou\nzahaha did\nym un\nyel e\nwith congress\nv dara\nundoub ted\nu din\ntri pler\ntoday sdoodle\nti ang\nthink and\nthe villa\nthe jay\nten se\ntart u\nta kai\nsycoph ancy\nsuperlot biz\nsub verted\nstickle back\nsky hook\nsho tter\nshar in\nsg br\nse uro\nsb hs\nsardon yx\nsarah jane\nsal er\nrou e\nretirement planning\nren dle\nprison er\nportal berni\npaulricard track\nparam ore\npara professionals\npap akura\npali ka\np tech\norion books\nne dv\nn ali\nmondad ori\nmis fires\nmil verton\nmex borough\nmet service\nman gg\nmam i\nm fah\nlyn ds\nlpr nyc\nlet girls\nlandsc apers\nkrish nan\nki raz\nkd nuggets\nkalym nos\nkab badi\nka ira\nk achi\nju vie\nji zzle\njab bing\ninfantry men\nib botson\nhunter valley\ngu z\ngrow up\ngre nadi\nglo scricket\nglee ks\ngiri raj\ngel in\nge ste\nfre twork\nfore bears\nflor ance\nfitz gibbons\nf natic\ness m\nembaras syour\nelectro plated\ndur ness\ndne pr\ndemon ology\ndaily gist\ncycling weekly\ncour ser\ncor net\ncol td\nclosing bell\ncip are\nch nl\ncapric or\ncal houn\nbur rito\nbouti qa\nbor ys\nboo zman\nbk stg\nbj k\nbi osis\nbal en\nanthony jeselnik\nalem bic\naccentu ating\n... /\nðŁĶ¥ ⾨\nðŁĮ ĺ\nzom bo\nyard girl\nyar is\nwisconsin ite\nwid dop\nwest van\nwe sen\nwaste basket\nuper y\nunited coaches\nuncle blazer\nun ready\nun perturbed\ntor tue\nton igh\ntim scott\nthiop hene\nthe tribune\nthe blackpanther\ntend re\ntat au\nsumbur gh\nsubo tic\nsu eno\nstre icher\nst cloud\nsoulcalibur vi\nsof light\nsing en\nsig man\nselfiest ick\nscott skomo\nsad an\ns fax\ns den\nrock field\nreep ham\nredd war\nq ais\npresiden tever\nprefec tural\npol li\nperi helion\npanto ja\npais aje\nolli elocke\nohi a\nocel ots\nobe isance\nnor is\nni shar\nni dho\nne fer\nnancy drew\nmy brother\nmodern monday\nmin ories\nmill ard\nmc mick\nmatted mondson\nmat kearney\nmasa aki\nmar le\nmam ared\nmali c\nlo chee\nlay away\nlau di\nlam he\nkungfu panda\nkong sberg\nkan z\nkac per\njo gos\njam huri\nj rod\nis for\nindiav spakistan\nin coherently\nim erick\nhun nid\nhu it\nht cone\nhin demith\nhe pb\nhat ake\nhan aa\ngutt man\ngopal an\ngal les\nfer mo\nfashion jewelry\nfar mar\neug bil\nesc c\nego istic\ndy stro\ndin ve\nder ya\ndend rites\ncw batb\ncounty fa\ncork ery\ncon descension\ncomplic ates\nco gno\nco ffy\ncherry belle\nchelt festivals\nchef ou\ncall acu\ncal as\nbou los\nbobbyl lew\nblack ening\nbishop ston\nbe zer\nbe bb\nbacal hau\nba ath\nb pw\nat enas\nassi stir\nas bel\nandhrapradesh cm\nand c\nan ap\nade al\n* $\nðŁĺĬ ðŁĺĦ\nðŁijĩðŁı¼ ðŁijĩðŁı¼\nãĥ³ãĤ º\nãĥ ¡\nwor ton\nwool er\nwil bur\nwick man\nwe it\nwe iner\nwc sd\nvisit brussels\nvian sk\nu ah\ntu gu\nto kyu\nthre ss\nter williger\nte ef\nta va\nsyno logy\nsuomen linna\nsunray sia\nsu lit\nstewar desses\nska ite\nshop ko\nshin do\nshi maz\nshe ads\nshan shan\nse yed\nscream fest\nscience fair\nsathi sh\nsas ummit\nre yer\nraffa ella\npurwak arta\npromp tlist\npet portrait\npawl enty\npaw circle\npauly shore\nparat ransit\npar thian\npapen brook\nndr rmc\nmul ligat\nmc dreamy\nman jeet\nmahesh sharma\nlap ine\nlam onte\nkey card\nker oro\nkaz ak\nkarl urban\nkainaatar ora\njur gen\njimal khalili\njames dean\nj radio\ninform ality\nin authentic\nimit ator\ni haven\nhin dman\nhealthy hair\nhar oun\ngu ast\ngraveyard carz\ngal lucci\ngab b\nfi roz\nfarm houses\nentry ways\nenjo bs\nelectric picnic\neddi emurphy\neagle ville\nduff town\ndon nelley\ndesi sto\ndate able\ndak otas\nconfi ding\nco des\ncity rail\nchi angra\ncharlies loth\ncer t\ncc funkandsoul\ncas sels\ncarequality comm\ncar mello\nbru e\nbie gel\nbachelorette abc\nawe want\nastr alis\napp design\nall td\nair band\nad hs\nactu alized\nðŁĹ ¡\nðŁĸ ±ï¸ı\nðŁİĬ ðŁİĪ\nðĿĹ ¢\náµ ĸ\nॠĥ\nzoy sia\nzeenew shindi\nyav uz\nxx l\nworldof warships\nwink news\nwesth off\nweb tour\nwe te\nwal lawalla\nwah peton\nw ben\nvol and\nvictory beer\nvicky rubadiri\nven eration\nup éry\nu anl\ntw iss\ntur alists\ntron foundation\nto fun\ntm ills\ntin am\nthe legendofzelda\nth ays\nter lingua\ntamer amowry\ntaldÃŃ acomohoy\nsupre ma\nsound ness\nso su\nsj l\nshin sen\nscot amfa\nrene wal\nre animate\npy les\npra ja\nper nice\npedr ito\npat ong\npa ura\np ello\nover laying\nor way\nonthe green\nnot as\nnin ful\nnil i\nnav o\nnatural hair\nnan chang\nmust weed\nmuseu marchive\nmun sey\nmill ers\nmc ternan\nmc spadden\nmant illa\nmagic mike\nma dailygist\nlü neburg\nloren zana\nll np\nle iv\nkel burn\nkayag nik\nkatie holmes\nk mel\nju ric\njessica jung\njan ak\nio d\ni ffic\nhu ai\nhtc tryouts\nhitthe floor\nhi rap\nhi bi\nhel low\ngoul den\ngold ber\nfrie de\nfire baugh\nfin nis\neuro pac\nen livened\ndul thood\ndhru vasarja\nde duce\ndavid h\nd si\ncruis ing\ncrimestopper suk\nchun li\ncho le\nchery shev\ncat orce\ncasper vandien\nbristol nhs\nbre m\nbo ij\nbo gal\nblr citytraffic\nbirch ington\nbeti bacha\nbbcscotland news\natt kisson\nasym phony\nanti histamine\nanind ya\namp suk\nal dez\nak pan\nacer bic\n- "@\nðŁĺı @\në¸ Į\nåł ´\nâĪ Ĵ\nย ว\nاÙĦب ØŃ\nwo aa\nwic kett\nwi on\nwedding decor\nvoj vod\nvent spils\nven ray\nvel uwe\nv ahan\nur key\nup staging\nune scap\ntro yal\nthi em\nthe ug\nso car\nsi h\nshu mai\nsen ai\nsecre tions\nse ssi\nrup tures\nrubi doux\nrestore thevra\nrefriger ants\nqu illin\npu mba\nprobowl vote\nprivati sing\npra i\npolice family\npo ya\npo cho\noldman crew\nok ent\nnomin ative\nno pf\nnet label\nnei va\nn itti\nmulligat awny\nmen asha\nmar gao\nmanpower group\nman sory\nman son\nmagal ur\nlun eng\nlove oz\nlal ang\nla on\nla ire\nku duro\nknot fest\nkele la\nkamer on\njohn newman\njerky xp\nio ta\ninter jet\nich thys\niam lenaheadey\niam cannabis\nhenry holt\nham ban\nh mua\ngur riel\ngour i\ng berlanti\nfl n\nfior ano\nfight ingfor\neu taw\nenz as\nend ly\nel c\neco watch\ndyscal culia\nduba ic\ndon mar\ndil se\ndi ola\ndi kt\ndefl ates\nde sensitized\nconvul sive\ncon la\nchowd ary\nce bit\ncb ct\ncar not\nbrianger vais\nblack hawk\nber lingo\nbel is\nbar jatya\nay k\naphrodi si\nany who\nann d\nam lw\nak s\nai jaz\nac oo\naaa ad\nðŁĩ¯ðŁĩ ´\nyour heart\nwhati learned\nwear redday\nwar moth\nwalshy fire\nver lo\nvarney co\nvan ill\nus g\nun balance\ntre ec\ntoscan ini\ntitlei steurope\ntick ell\ntexts anta\nstay focused\nstat ecraft\nstar garyen\nso bhi\nsmex y\nsmart contract\nsids riram\nshi geto\nshawin igan\nshare alittle\nsells vintage\nse ba\nschi emer\nru su\nreal cj\nqnl z\nprojec toftheday\npower plants\npover a\npoll star\nplay box\nphili pham\nphel tzcomics\nparallelo gram\np she\nover shadowing\nouter hebs\nolf club\noil paint\nnicomaine at\nnaw abs\nmor cheeba\nmel fi\nmatador records\nmat tr\nlondon bronco\nlist ener\nle ist\nkim guilfoyle\nke wanee\nke ffi\nkarti keya\nkaad hal\njo ynt\njeff botl\nje gs\nj re\nj omin\nj illa\ninstaf it\nib times\nhull fc\nhiro mu\nhex agram\nheff ley\nhand carved\ngri ego\ngen aro\nfunic ello\nfrom dusktilldawn\nfood friday\nfollow ing\nfit and\nfeli u\netsy sellsvintage\neli braries\ndu bi\ndis qualifies\nding li\ndesign junction\ndeni grate\ndavidar quette\ndavid b\ndaddys gurl\nd jam\ncryogen ics\ncon fit\ncommun itech\ncolorad oriver\nck ner\nchetu mal\ncharliec rist\nce sky\ncdn screenawards\ncb ase\ncarto graphers\ncan tatas\nbwa hahaha\nbun yip\nbrigh twood\nbracketo logy\nblan ke\nbet tel\nbarcel os\nballa deer\nbab us\nba eday\natt ilio\nart world\nar zu\nanthropom orphism\nanim ales\nan ath\nam ua\nalye ska\nad com\n(âī§âĪĩ âī¦)\nâĢĶ ->\nà¹ģภŁ\nzel aya\nz ann\nx pose\nwra iders\nwc w\num laut\ntranspo se\ntr é\nthey ll\ntat sun\ntal isa\nsz ky\nsx moctane\nsob chak\nsig is\nshu cking\nshol ders\nsen ju\nsel borne\nse bor\nse acroft\nscottish highlands\nsaad at\nrpo online\nrn tata\nrichar da\nrebel hearttour\nrc sd\nra ich\nr alo\npun kd\nposter design\nphosp hates\npett way\npersonal care\npe gram\npanther s\npad ley\npa zza\nover working\nop ala\nol czyk\nnic ke\nneu meier\nnatu ren\nnational cookieday\nmor re\nmaruti suzuki\nlob dell\nliter acyday\nlip kin\nlic orne\nla bre\nla bial\nla ad\nkrish nar\nken ting\nkemp en\nkc caug\nka id\nju stre\nj reed\nitu din\nit au\ninsinu ate\nich rist\nhu lot\nhpnoti q\nhome school\nhay don\nharrieth arman\nhand lin\nhal ilovic\nh sts\ngur purab\ngamers gate\ng mod\ng beng\nfranch itti\nflashi kat\nfigue iredo\nfen ske\nenter o\neas dale\ndh v\nd sn\ncru dit\ncorin thia\nconference usa\ncoloni alists\nco agul\nchocta what\nchie fex\ncharlesd ickens\ncharle swood\ncen o\ncall ery\ncal football\nbul ley\nbrigh twell\nbree am\nbol ding\nbi plab\nbetsydevo sed\nbar il\nbankni fty\nbani shes\nban yo\nban iyas\nba reminer\nasking for\nas pho\napp sych\nap late\nand day\nade ga\naber corn\nðŁij¸ ðŁı½\nìĭ Ŀ\nâķ ¥\nye pa\nya eger\nwrest lin\nworld history\nwindow sserver\nway faring\nward man\nvers ac\nupen patel\numass lowell\nu my\nu local\ntheodor ou\nthe weekend\nten ergy\ntce cardinals\ntas min\nta ira\nsrijit speaketh\nsmo d\nslv sa\nsland erous\nsk cv\nshag gy\nsen an\nse ber\nrich burg\nre uses\nray toro\nrav ager\nraim ond\nproser pine\npol lok\npar ami\npap illary\noy uki\nosme ña\nor thy\nop ac\nold mane\noldmane bro\nob scu\nnon conforming\nnatl prep\nnam as\nmyri ad\nmud flap\nmono theism\nmetan oia\nmedi en\nme xt\nmartinlutherking jr\nmap making\nmake out\nma hay\nli gnes\nli ba\nlesleyann brandt\nle ki\nlaver cup\nlar ner\nku zu\njoe dotie\nits agreat\nisa ia\nintermittent fasting\nin china\nhy dride\ngub bio\ngher bo\nge tover\ngd live\ngar re\nflame throwers\nexab eliebers\nenchong dee\nemo de\nedg iness\neaster brook\ndow ler\ndor ing\ndirector ship\ndeadly sins\ncurling canada\ncu tes\ncontempl ations\ncl enden\ncar oni\nbra ggs\nbotan ico\nblog paws\nblackink crew\nbetibacha obe\nbatt lers\nban bury\navi atrix\nav and\nanu bhav\nann ya\nanheuser busch\nalo dge\nalamgi rizvi\nage ek\nac ti\nac rack\nðŁĻıðŁı¾ âĿ¤ï¸ı\nçĽ ®\nಠ¸\nà° ľ\nzhong shan\nww elive\nworl dexpo\nwoo p\nwai hi\nvo t\nvil lo\nvid éo\nvas cu\nvagu eness\nv usd\nunder value\nu see\ntut bury\ntrache ostomy\nto kam\ntir ith\nthere sa\ntauto logy\nsynchron isation\nswan berg\nsu ad\nspl urged\nsp lan\nsound less\nsmile more\nsitt we\nshil ajit\nsh agreen\nschoo le\nsab ry\nryan reynolds\nroth child\nrbge hort\nrafsan jani\nra shan\nqu be\npsycho analyst\nproprio ception\nprofess r\npro me\npp d\nporcup ine\npo stel\npang aniban\noubli er\nol die\nmoo gle\nmo sler\nmemo ire\nmc di\nmath ed\nlon drina\nlla ve\nlive action\nle ering\nlaw ers\nku ehne\nkirk dale\njulio jones\njez reel\njetti son\nip ag\ninduc tor\nici um\nichthyo saur\nhyster ic\nhu pp\nhr lich\nhouston heights\nhome away\nhe int\nhat ting\nha aga\nguildof finefood\ngidd iness\nghost buster\ngen next\nfou dre\nfo res\nfloren zi\nfeu illes\nfer ret\nfe ve\neuro a\nep is\nenrique gil\nend les\ne tim\ndidd ly\ndic taphone\nde mining\ncubat ravel\nco calico\nclarkk ent\nchor tle\ncb ellracing\nbul las\nbren o\nbirth marks\nbe jarano\nbbcradio stoke\nb tho\nb kt\naudi ere\natp masters\nas sp\nap his\nang ol\nang ere\nalex s\nal tran\naic p\nag gia\nðŁĺĩ ðŁĻı\nðŁ¤Ķ @\ná´ Ħ\nze spri\nye ws\ny go\nworld run\nwind lesham\nwe uro\nvogel song\nvho enen\nus olympic\nur ning\nu sun\ntwitchretwee tr\ntv network\ntor rez\nti be\nther see\nther itz\nteresh kova\ntak firi\nsy ra\nsplot ches\nspaw n\nsnow barry\nsight lines\nsi mc\nshilo h\nse wu\nschi ff\nsaviler ow\nsan wa\nro ten\nrizzoli isle\nre eee\nrat ap\nr factor\nqualityof life\npur posing\npul man\npu tten\nprocreate app\npost i\nphi the\npa quet\nofficial charts\nnor west\nnit ef\nnick groff\nnev ada\nmono hydrate\nmon ckton\nmolson coors\nmod ellers\nmc tell\nmaj ithia\nlow cost\nlouisian agov\nlahore qalandars\nl be\nju lly\njeux video\nj man\nisland records\nintothe wild\nim ss\nili brary\nig inal\nhydro logic\nhou chen\nhoo ter\nhom am\nhi madas\nher ve\nher ren\nhel loo\nheinz vhoenen\nhe ey\nhas z\nh mer\ngel inas\ng elliott\nfrench quarter\nforthe weekend\nfor honor\nflorian opolis\nfa sho\ndun t\ndu aa\ndom itian\ndj max\ndin k\ndescon to\nd johnsonpga\nclear skin\nbut u\nbras sey\nbody board\nbk v\nbit pay\nbigro ck\nbene detta\nbar ony\nbal art\nbad uy\nba q\nat ami\nas umi\nandrew christian\nan fa\nan ever\nam usa\nal medalen\nair busa\naero space\nðŁİĦðŁİĦ ðŁİĦðŁİĦ\në¬ ´\nå¼ ¾\nér ôme\nzuc chero\nyer caud\nwork table\nwe win\nwb sdcc\nvill ena\nviewfromthe office\nusta z\nupenpatel world\nun ah\nuit enhage\ntyler cowen\nthereal morrison\nthame side\nter na\ntar if\ntani guchi\ntaf ter\nswag man\nsunday service\nstre b\nsky forge\nsimm o\nshinawat ra\nsety rn\nsar kis\ns bank\nreal men\nre ja\nprime au\nplum tree\npardub ice\npal mera\nor phi\noff setyrn\nnak heel\nmulti stakeholder\nmichel is\nmc cafe\nmary stown\nmar bach\nmad in\nmac ungie\nlove that\nlo hn\nlo ffici\nli thic\nles niak\nlegi onnaire\nlee z\nl lah\nl ity\nkor ang\nko vil\nkho j\nke olis\nkar ls\nkab o\njordan stown\njeni fer\nje maine\nire x\ninquirer biz\ning ly\nindul gences\ni abc\nhor ological\nhar ring\nhalcy on\nhaj ji\ngru s\ngra vois\ngis d\ngi js\ngetur riskon\nga jar\nfrom space\nflash forward\nfight news\nfer ried\nfast fact\nfair water\neski mo\ner be\neich ner\ndo reen\ndhi vy\ndavid afrench\ndarren hayes\ncyclon ef\ncth k\ncre f\ncowh er\ncor wen\ncopp elia\ncool ing\ncoco ons\nchar vel\ncar lie\nbro sh\nbri dles\nbreaking dawn\nbre snahan\nbel grade\nbandof horses\nbailey may\nark ley\nar kra\nagreat bigcity\nag ip\nadi da\nad rs\naac ps\nðŁIJ¬ ðŁIJ¬\nï »\néĽ »\nç Ĭ\ny ati\nworld blooddonorday\nwn es\nwha thapp\nweare the\nuw badgers\nuni ak\nunder lies\nulti mates\ntw oway\ntso tsi\ntriangu lum\nthermal take\ntheover tunes\nthehow sofus\nthec rick\ntameramowry two\nt shir\nsymph on\nsurfer sparadise\nsuncorp stadium\nstyles p\nstick ball\nsp rockets\nsne tball\nsna c\nsmart mobility\nside steps\nself worth\nsecond chances\nscri be\nsar mad\nsam ms\nsaakash vili\ns mullen\nredefin e\nre tooled\nrale kha\nraider strong\npur view\npu gn\npranit asubhash\nperme ated\npar apar\nnov ations\nnigh tin\nnever surrender\nnc ell\nmole hill\nmetho w\nmar tes\nmar sy\nmanek shaw\nmale m\nma zo\nma had\nma ddin\nm qa\nm jj\nm ji\nlu ter\nlove it\nlin ha\nlifel ock\nle twin\nle gh\nkathmandu post\njou e\ninstitutional ised\nim ac\nillumin ators\niko kaz\nhome fortheholidays\nhel pu\nhe chos\nhau liers\nhar nish\nguer neville\ngre gan\ngon dal\ngo outside\ngh and\ngen thaler\ngabri ell\ngaben fica\ng list\nfox sportsnews\nfly tpa\nflan eur\net in\nesc rit\nend at\ndump the\ndor aville\ndam aris\ndale steyn\ndal ley\ncran brook\ncor oll\ncome up\ncla de\nchol mon\nchess base\nche es\ncein ture\ncarre gabenfica\ncann ell\nc sem\nbox games\nbou squet\nbiz dev\nbenef icent\nautom obili\nass ant\nar ati\nann ell\nan tri\nambassad ress\nagra ham\nadren aline\nðŁĺįðŁĺį âĿ¤âĿ¤\nðŁıĢðŁıĢ ðŁıĢðŁıĢ\nðŁĨ Ķ\næµ ·\nãħ Ĥ\nãĥĪ ãĥª\nãģķãģı ãĤī\n๠ģ\nzell ner\nz ill\nysleta isd\nyach trock\nxylo to\nwolf hard\nwest combe\nwedding inspo\nwar hammer\nwal de\nvir sa\nvictim less\nvan go\nv uganda\nv hl\nuk bff\nts agov\ntri ble\ntravan core\nto ton\nto rey\ntime scales\ntheword alive\nthe team\ntex ashi\ntalkto pd\nsulphu ric\nsu rer\nso len\nsing la\nschlu pp\nrubb ers\nru y\nra fc\nr anta\npy rus\nprat ts\npos iting\npof icial\npoetry society\npn brock\nphragm ites\npenn ard\npeach y\npar atriathlon\nost p\noro ville\no gh\nny mf\nniki for\nndu bz\nmoz fest\nmon cks\nment ally\nmc comas\nmaytheforce bewithyou\nmay flies\nmat ram\nmaqu illage\nmag is\nlyn dale\nlucap as\nlou rens\nleu ci\nle xie\nle shan\nle ota\nlaw enforce\nlatingram my\nlat ou\nla a\nkubla i\nkpm guk\nkitch ener\njuicy couture\njoin there\njedi diah\njay and\njan ky\nitalian style\nig as\nhul kam\nhorni manmuseum\nhimm at\nhil lock\nhen shah\nhail southern\ngrass ington\ngore ski\ngeno types\nfleet management\nflav ell\nfiction alized\nfi du\nfascin atingly\nfar allon\nf ma\nett inger\ner music\nel lam\ndu leep\ndrive insured\ndar pan\ndae mun\ncy bil\ncur rys\ncontin o\ncon oci\nco ent\nchand rika\nch ulo\ncen ser\ncaw thra\nbu shi\nbrandy well\nbou ie\nblock ading\nbla do\nbin ky\nben be\nbel gis\nbau ti\nbau le\nbaro ss\nbar ite\nasseenin columbus\nalm shouses\nag ol\nachristmas story\nìľł ëħ¸\në³´ ìĿ´\nê¹Ģ ìĦĿì§Ħ\nಠ¿\nye tta\nyaf fe\nwordof god\nwen zhou\nval astro\nur f\nunitedwe dream\nula res\nuit p\ntit ley\ntiff ani\ntag on\nsugar and\nstru mp\nstri m\nstri ker\nstem day\nsme er\nsine w\nsha hada\nsh older\nsey dou\nsahar awi\nrol lup\nro stro\nre im\nrac quets\nqu ise\nppro ject\npp ina\npol let\npis an\npha res\npak sha\nour town\nor kest\nopp ement\noh mi\nogbon na\no ord\no brist\nnin ot\nne bel\nnas ca\nms fc\nmol ts\nmohom bi\nmel hores\nmal en\nmaithri pala\nly da\nlon da\nliquid ating\nlick ers\nless or\nleard blockade\nle mbo\nle ash\nku fi\nkam illa\nkad abra\nion izer\nin cle\ni all\nhyper text\nhill town\nhigh tea\nhang u\nhadd am\ngut tural\ngu ap\ngran adilla\ngr ö\ngoff stown\ngee king\ng pro\nfum fum\nfreetheni pple\nfloo dgate\nflat man\nevil hag\neuro control\nepitom ised\nedinburgh zoo\ned ance\ndro ad\ndiatom aceous\ndi ds\ndatascience ctrl\ndar ko\ncomb in\nco ye\ncc cu\nbuch tel\nbogo sian\nbig nell\nben harper\nay ar\nau teuil\nas ol\narc and\nam att\naga g\naf forestation\nae w\naal apor\nðŁĻĪ )\nðŁĶ Ħ\náIJ Ľ\nyu mmi\nyj hd\nwy ant\nwin eco\nwil pf\nwil lumb\nwhaaaaa at\nwa inaina\nvolunteer day\ntrasi meno\ntitu t\nti so\nthetalk cbs\nthe jump\nthe homeof\ntender izer\ntech geeks\nteam ucm\nta en\nsw asan\nsuu kyi\nspra gg\nspo c\nsien asaints\nsi rois\nshoton oneplus\nshere met\nshel man\nsheepi shly\nserendipit ously\nseaf ire\nscott gshore\nscen ography\nscarlett moffatt\nsale town\nru salka\nroman ization\nridg ely\nre constructions\nre classification\nrap mon\nquebec city\npronoun ces\npre ti\npre defined\npo pin\nplay on\npetrol heads\npen er\npa hl\nor dre\nof music\noctavi aspencer\nmr tommy\nmoon lights\nmin ott\nmik los\nmase go\nmari af\nmaha yek\nly kan\nlin dal\nleg ant\nlat eran\nlamba sted\nkom mt\nkit amura\nkill cliff\nkap itan\nk ace\nit suki\nis il\ninsur gentes\ninf lorescence\nich it\nich ay\nhu an\nhistory day\nhi eu\nhai kyu\ngrand mom\ngir alda\ngi en\ngetto know\nfrederik sen\nforger ies\nfly day\nfl stateparks\nfin twit\nfeeling blessed\nfay outh\nf ya\nev elin\nera worth\nent deck\ne dea\ndwn twn\nduf fus\ndro om\ndic he\nder mody\ndelhin cr\nde stra\ndal gety\nd cau\ncyber sec\ncour te\nconten tedly\ncongres sperson\ncol tart\nbrown lie\nbre x\nbour ret\nbog side\nbo esch\nbel phe\nbarber ini\nar bab\nam mer\nacham pion\nabsor bency\n:\' \'\nðŁĺĦ âĿ¤\nðŁĴĶ #\næľ Ľ\nä¼ Ĭ\nâľĮ ðŁı¿\nâĸ« ï¸ı@\ná zar\nzehn der\nyer kes\nxero x\nww wf\nwomen surgeons\nwit n\nwe star\nvinay aka\nven ator\nvari ously\nun translatable\nu fl\nu dan\nty rr\ntren tuni\ntott ington\nthe savoy\nthak or\ntegern see\nsur ve\nsmithfield foods\nshi u\nscott baio\nsaur usrex\nsalon pas\nsafety tips\nrun offs\nrestaur ation\nreal world\nr ón\nquan tumb\nq ml\npulmon ology\npir atas\npi ra\noven den\non ny\nollan tay\noc weekly\no hit\nmusth aves\nmur tabak\nmul ford\nmuhammadi yah\nmu dv\nmon roy\nmon geau\nmo liere\nmis sle\nmiddle ages\nmic ke\nmc p\nmb fwa\nm di\nlumin ate\nlondonbronco srl\nlil ting\nlau rid\nlare my\nkow tow\nkom ando\nkar z\nkamalha asan\nk gu\njournalis mis\njo shab\nintre sted\niff r\nic ty\nharro dsburg\nhard inge\nhange ul\ngott acat\ngl n\ngam bir\nfre richs\nforever with\nfex po\nfay az\nexpan se\netch ells\net ool\neluci date\nel rick\neast devon\ndistribu torship\ndis affected\ndiar rhe\ndeme o\ndeenday al\ndean s\nde martini\ncoldwar kids\nchildren shospital\nchee zy\nchar cot\ncas andra\ncar reg\ncap turing\nbrown lee\nbrother ali\nbeck ner\nbas ak\nb boy\nauto psies\nau stal\nagu da\n\' !"\nðŁĺİ )\nâľ ¶\né ri\nzoe trope\nz alab\nyoshi oka\nyogal ove\nx cond\nwinter ville\nwild west\nwedder burn\nvi varo\nuryn hill\nun colored\nthe calm\nthe arti\nteatro allascala\nte ays\ntas bih\nt smith\nt lo\nt elic\nsunday selfie\nsun u\nsummari zation\nspell book\nsmu ckers\nsli e\nsksk sk\nskill share\nskatec anada\nsicure zza\nshou ka\nsel by\nsc te\ns again\nro loff\nren ouf\nrema pped\nred u\nreci o\nre val\nplu mp\nph yl\npetre scue\npest ana\npart age\npaper man\npaper magazine\non tiveros\non enew\nne ira\nnare lle\nmi one\nmanip uri\nman md\nmale ek\nmal ays\nlu bang\nlo ic\nle ur\nlar tigue\nla vis\nke sel\njal y\nis ob\nin ski\nice do\nhoof ddorp\nhere come\nhau ts\nha or\nh mph\nh dr\ngreen ing\ngo pala\ngad son\nfon i\nfed con\nf hc\nemer aude\ndunnell on\ndub ya\ndon don\ndhu l\ndevinder raiji\ndak hla\ndais aku\nch lin\ncavat appi\ncast away\ncap rio\nca strate\nbur nit\nbond holder\nblo tches\nbirch grove\nbir tles\nbevil acqua\nbet wn\nbbc merseyside\nbas ak\nbapti st\nb cus\nat ake\nanok hi\nannes ley\namber ly\nal eck\naero star\nador kable\nadel leo\nack lam\nabscbn ball\n"" ""\nðŁĺ£ ðŁĺ£ðŁĺ£\nðŁij¯ âĿ¤ï¸ı\nðŁĩ®ðŁĩ ©\næĽ ´\nÙĪ Úº\nÙĩ ÙĬ\nرÙħ ض\nzel mer\ny atim\nwr on\nwies er\nwheel jack\nweiz hou\nweare weber\nvene dig\nven ham\nu chu\ntwitter party\ntru elove\ntrade craft\nto ve\nthestor mishere\nstri bling\nspel thorne\nsk anda\nselfre g\nschla pp\nround tables\nroad hog\nrish tey\nray more\nraj in\nqu ity\nqian long\nps media\nproduc toftheday\npre port\npou ched\npis d\nphi beta\npat o\npand ita\npal le\np ni\noyor ooms\nove ts\none humanity\nomni directional\nomidy arnetwork\nnorthumbria uni\nnon members\nnidho gg\nmur willumb\nmtb life\nmtam aryland\nmorg ann\nmen folk\nmel len\nmarkr pellegrino\nmariab rink\nmar tock\nman abu\nmainten ance\nlor ds\nli fy\nlean in\nlan awwe\nkw q\nkillthis love\nkil mallock\nkag erou\nk wc\nix p\nis que\nhol men\nho is\nhaven lust\nguaj ira\nget north\nge healthcare\nfox ley\nfle eces\ndivas confessions\ndesperate housewives\ndel phic\ndame wine\nd jay\ncoun tin\ncity kitchener\nce smma\ncay es\ncarlin ville\ncampo ree\nc ge\nbluestar media\nbene ath\nben askren\nbee bee\nbeat niks\nb ghs\nath iya\nasi acup\nash el\nase sino\nalainf cae\nakh ya\naj ar\nadmon ition\nad harshini\nå°ij女 åīį\nãĥ³ãĥ Ī\nyour vote\nxia oming\nwux ia\nwat lington\nwal esa\nw fr\nve el\nva shish\nun settle\nun dr\nug wu\nty rel\ntr nc\nthu gga\nthorn dike\nthal loween\ntan a\ntam la\nt ma\nstr ating\nstock trading\nss g\nsp ick\nso tu\nsnow mobiles\nsing son\nshy lock\nsfor the\nsfor peace\nser mon\nschiz oid\nsar gentina\nsam arth\nrac coon\nqui ddick\npur s\npsychedelic art\npro europe\nperme ating\npere grym\nour finland\nori ello\no guri\no dus\nni obe\nnet scout\nnatural products\nnatural ised\nnato summit\nmt dc\nms rachel\nmisssaig onuk\nmis represent\nmetac ar\nmedi are\nmaree ba\nmarch mont\nmal pass\nmal ite\nloveu all\nlondon city\nlocal auckland\nlo key\nlma ker\nley endas\nlau g\nlancelo teh\nkul wicki\nkhat ter\nkas son\nje tz\niv m\nitf db\niso k\nimpeach ment\nik lanceloteh\nhu eso\nhouse hold\nhor den\nhani fa\ngras strack\ngam ine\nfree ski\nfibro id\nfi ds\nffe y\nf fo\neur on\nernest moniz\nenforced disappearances\nendimp unity\ndro medary\ndon nelly\ndod son\nde ba\ndal edc\ndak o\ncur tice\ncran ky\nconfi ance\ncon tender\nciti sports\ncircu mv\ncash for\ncarra way\ncal pis\nbro mas\nbre al\nbour ses\nbo za\nblack jack\nben ni\nbeing boycie\nbale stier\nbaker mayfield\narctic circle\nar sht\nangu l\nanal i\nallo p\nal nico\nal murray\nag ol\na africa\n! ðŁĺĪ\nðŁij Ĵ\nyo soy\nwhizz er\nvijayak anth\ntyn wald\ntre volution\ntre han\ntrac tive\ntit li\nthir dly\nthin lizzy\nth form\ntelang ana\nsympathi zing\nsub d\nstu be\nstgeorge s\nsterili zing\nsoul train\nske p\nshiva ay\nshinsen gumi\nself made\nscal gary\nsb j\nsal ice\nri vie\nreverber ates\nrang elands\nral ston\nrad tke\nq oq\nproven çal\npro khor\npi miento\nperfec ter\npaw ley\npack pride\noak bank\no hr\no are\nno problem\nnews net\nnews bud\nnew sit\nnav deep\nnap ier\nn da\nmy du\nme ineke\nmaster system\nmajor league\nmac nee\nma quo\nma cha\nlen zi\nkn ack\nkid lington\nkat arin\nkalye serye\nkad al\nkab ba\njud ds\nip on\ning net\nin he\nikokaz ike\ni pod\nhy on\nhu cker\nheinz field\nheck lers\nharmon town\ngul berg\ngo bel\ngar mon\nfree trade\nfloridag ators\nfan sided\nescapethe fate\ne bell\ndox ology\ndeb es\nday club\nd ally\ncontex tually\nconom ic\ncom and\nclai borne\ncit rul\nchu ll\nchristma sy\ncavall ini\ncavall aro\ncas sville\ncap n\nbrown hill\nbou ldin\nblau w\nbirch field\nbio dome\nbehren dt\nbc v\nbarri ere\nbar cs\nbal last\nb wn\naustinand ally\nau mont\namil car\nadri any\naa sif\n& &&\nðŁĽ ¢\nà© Ī\nÑ Ħ\nyvonnear naud\nwork sfor\nwishi was\nwilly wonka\nvi vos\nvann in\ntylerj blackburn\ntow son\ntoler ation\nto ffice\ntlax cala\ntfl ers\nstar maa\nstan ko\nstall er\nss diski\nsquare d\nsnug bucket\nsi skind\nshaw nee\nscotamb service\nsardaar gabbarsingh\nsan tonio\ns med\nroy bal\nro goff\nrizzoliisle stnt\nring le\nreptil ia\nrecord keeping\npren up\nposter paper\nphoto sby\npad dler\npa ho\noutra m\nout ag\nour d\nosso buco\nomni vorous\nod zilla\nnew blogpost\nn kc\nmusic ologist\nmulti sports\nmor iches\nmitchell vii\nmil ken\nmem u\nme kas\nmc chesney\nmat tam\nlun ny\nlocke din\nlake city\nkristen ledlow\nki thar\njubil ate\njoy as\njal aluddin\njal ade\ninuk titut\nintensi fier\ninocul ated\nhouse fly\nhi biya\nhash em\nhar away\nha peville\ngen ii\ngaw xcond\ngand ara\ng way\nfried mann\nfree wifi\nfivb women\nfine gan\nfar amir\nestab rook\nepau lettes\nent se\nen nie\ndur ations\ndru mma\ndil ys\ndg wick\ndar nall\nct k\ncow ans\ncontact center\ncol y\nco wed\nclam pett\nchuk w\nchronic ler\nchil led\nchem ed\nchappa quiddick\nch th\ncen mag\ncampan elli\ncaldic ot\nbutter fish\nbur gen\nbol sena\nbike ways\nbi yori\naz m\nauchter arder\nate me\naren ds\nalani z\nai ge\nadi sa\nad ream\nactu aliz\nab sent\n... "\n. **\nðŁĩ¬ âļ½\nðŁĩ¬âļ½ ðŁĩ±\nä¸ Ģ\nâĨ Ļï¸ı\nâģł âģł#\nਠµ\nÙĦ ÛĮ\nÌ ³\nwin tney\nwi hm\nwan ee\nwalmart strikers\nus ss\ntv drama\ntro vatore\ntor pey\ntops field\ntito ortiz\ntic khill\nthoo ver\nthiscouldbe us\nthelu cky\ntheband musical\ntech tips\nteam razer\ntc v\ntake offs\nt sev\nsub national\nstreet ly\nstay hydrated\nspo to\nspee do\nsier ung\nshu shu\nshel li\nserious fun\nsens ori\nsd h\nsay ani\nsave gaza\nrock ery\nrcl ens\npä rt\npoy thress\npoy dras\npopp lewell\npet renko\noxen free\nold n\nofficial baileym\nno tam\nnkotb sb\nmurwillumb ah\nmitso takis\nmill wright\nmaz on\nlt gov\nlo quillo\nle icht\nlar us\nkul dip\nkanti pur\njapan times\njamie kennedy\nj wh\niam jojo\nhouse sitting\nhou traffic\nhotair balloon\nho ian\nh jr\ngocat sgo\ngo wo\ngis day\nfuneral care\nfri m\nfire lli\nfer rule\nfeminis mis\nevery night\nem sp\nem ount\nelec table\ndor rit\ndomestic ate\ndik sha\ndesmar ais\nde ason\nd juma\ncz ars\ncrest fallen\nchew tonglen\ncan oa\ncad dis\nbro zovic\nbov ington\nboo kex\nbod kin\nbo whead\nbluet sunami\nbel fiore\nban tul\nav z\nast olfo\nappellate twitter\naon tro\nanti histamines\nanant kumar\nalton brownlive\nalic ja\nale ye\nal kas\nair frames\nç Ń\nâĺ ľ\nÙħ د\nye syou\nwü rt\nwy ff\nwed more\nversail les\nve b\nu ddingston\ntor ise\ntoni thecat\ntodayim wearing\ntiger style\nti pps\nthe osophy\nthe most\ntabri zi\nsy ma\nswa ins\nsw ca\nstac kexchange\nst ex\nspace channel\nsno ddy\nsne h\nsepte t\nscutt ling\nsal zman\ns min\nros al\nreal romadowney\nran ade\nradi ative\nra bie\nproto culture\npresidenti rl\npo ddar\nphari see\npec ado\nom ad\nocre gister\nniobr ara\nnew telegraph\nmy i\nmuhaj ir\nmudv ayne\nmradam scott\nmontp ellier\nmissuni verso\nmile ena\nmezu zah\nmd p\nmar mo\nmad is\nlu pit\nlove by\nload star\nlo che\nlev ana\nkyle kinane\nku fa\nkraken rum\nkne ale\nkenne ally\nkam as\nitch er\nit smar\nironwork thursday\ninternacion al\ninag arten\nimper ishable\nig ma\nhon ka\nhome time\nhome economics\nhigh nesses\nhar gre\nh aces\ngol fon\ngi app\nfro ebel\nflo rek\nflavour ings\nfive fold\nfir str\neight fold\neckhar ttolle\ndr f\ndor it\ndon ta\ndi se\nden ou\ndemo is\ndel im\ndatt atreya\ndarb hanga\ncu k\ncsu mb\ncran leigh\ncran bury\ncot in\nchoctawhat chee\nchamele one\ncapp adonna\nc plusplus\nbur gum\nbuch wald\nbrie fest\nbreastfeed ingweek\nau sd\nari alv\nali venews\naj na\n! ðŁĮŀ\nðŁĶ Ń\nðŁij¨âĢį âļķï¸ı\nåį Ĺ\nठĿ\nzoom zoom\nyn ich\nwor sfold\nwol itzer\nwatch word\nwarr iner\nwad low\nvÃŃ deo\nver dy\nupper most\nuni for\nun ami\ntwee dle\ntro pon\ntril log\ntrans kei\ntime warp\nth amar\nstud illo\nstrick ler\nstreet scapes\nstim ming\nspren ger\nsm tickets\nslo sangeles\nsherry ontopp\nsen ter\nschem ers\nsch acht\nsaw fly\nsan j\nsal tram\nsafe cofield\nrumin ant\nrosen wald\nron ja\nron g\nrev athi\nred olu\nreb sbsb\nre flog\nrafi k\nquen elle\nporphy ry\npisco tty\nper vs\npale strina\nomis sions\nnord stro\nnagach aitanya\nmp naveenjindal\nmosqu era\nmorin aga\nmin ski\nmi ras\nmedi an\nmed scape\nmany ara\nli bret\nlewis ville\nlev ated\nleague intheworld\nlaryn geal\nkar ski\nkap tur\njohn muir\njhump a\niso bel\nind say\nhurricanes rugby\nhu ila\nhol ga\nhit music\nhearing aids\nhahahaha hahahahah\ngri quas\ngold stream\ngoe demorgen\ngo ads\nglam sham\ngeoc ities\ngent ing\nge sellschaft\ngaillar dia\nfum fumfum\nfedex forum\neo valdi\nenergi zes\ndrag sters\nderby shi\ndena fil\ndemonstr ative\ndav ro\ncu mnor\ncis l\nci aldini\nchrist off\nchin di\ncharle son\nchander i\ncar adoc\ncanop ic\ncal usa\nby culla\nbure aus\nbrit tri\nbr ini\nbower bird\nbor chardt\nblack sad\nblack people\nbic oastal\nbc bs\nbad die\nbab o\nba shar\nav r\nav aaz\nar roman\nangel ini\nalz forum\nake redolu\nak ame\nag ma\nadjour ns\nadam west\nðŁĴĻ ðŁĴĹ\nÅ ij\nyou zhny\nyama shiro\nxer is\nx ania\nwing nut\nwing dings\nwee eeee\nwad ge\nwach tel\nvil lu\nvic pol\nver ducci\nv wt\nv aka\ntwop ad\ntu ney\ntown son\ntinke rer\nthereal kiss\nthe jake\nthar mon\nterriclark music\nsuf is\nsu roor\nstu dia\nstron geurope\nstorm bringer\nsti k\nstateof decay\nsseairtricity lg\nss quare\nspor tre\nspecial collections\nspe idel\nsol di\nslugger nation\nseam os\nsaf tey\ns ying\nra yel\nra jon\nprun ella\npis sy\npas u\np be\nox hey\non usa\nobam acare\no cl\nnonlge progs\nnis sim\nnews dc\nnba history\nmur naghan\nmi pim\nmen ses\nman utd\nm che\nlit man\nleg on\nlan sley\nla si\njon bellion\njang ly\nj wala\nistandwith pp\ninter news\nhawaii fb\nhard knocks\nhar sin\nh jh\ngö tze\ngul da\ngo bbo\nger ona\ngarag erock\nfu mar\nfr acti\nfly frontier\nfightfor iowa\nfal lof\nesp en\neritre ans\nemil yos\nemc donald\nem mitt\near vin\ndouce ur\ndon nan\ndon ation\ndo en\ndj akarta\ndesign lab\ndel tad\ndel lo\ndamas us\nd under\nconse jo\nclock maker\ncl ancey\ncic lo\nchis en\ncapp elletti\nboot legs\nbe iner\nbar bat\nbagh el\nbac kedby\nbab alik\nbaarbaarde kho\navic enna\nav ner\narach ne\nangel ababy\nad ss\nad ry\n... ðŁĺĴ\nðŁĩ¨ðŁĩ ©\nö k\nzo ethe\nyou will\nye at\ny alu\nwn v\nwin ched\nwater beach\nwan k\nvibrant gujarat\nven ner\nv mm\nut am\nuniversity sa\nun buried\ntourisma us\ntor valds\ntor reon\ntit led\ntimber man\nthen ats\nth aven\nth april\nsyd filmfest\nsu arez\nsthe best\nstepp es\nste ier\nsr kfc\nspin master\nsol aria\nsleepy hollow\nsj f\nside effects\nsh att\nschool book\nsan ko\nsamo thrace\nsab ir\nsa wah\nromantic ize\nramesh waram\npur vi\npreten ses\npow ter\nperri go\nper plex\npe si\npe akers\npaul brandt\npastu re\npang eran\npablo picasso\npa xon\nout burger\noun ders\nou di\noccul tism\nnoth appy\nnh tsagov\nn nc\nmyfox ny\nmye yes\nmun guia\nmori bund\nmorgan field\nmis k\nmed calf\nmar ans\nmal en\nlover ly\nlaure us\nkinder hook\nkatherine kellyl\nkar amazov\nk shat\nju ist\njeth malani\njad oo\nj ist\nj emma\nitch in\ninterior designers\nin capacity\nhoop z\nhemen way\nharri ss\nhari pur\nhappil yeverafter\nhanson sauctions\nha fer\ngon ç\ngo tyourback\ngo bots\ngin ning\nfury fc\nest oo\nenergy star\ndon keys\ndi ast\ndesi rables\ndave doyle\nd hoop\nchil oe\ncedarssin ai\ncar so\ncallaway golfeu\nbwa haha\nbri zen\nblue origin\nblu sher\nbinghamton u\nbetty who\nbernab e\nbenjam ins\nben sen\nbeg on\nav us\nas om\narqu ite\narielle kebbel\nanatom ist\nag ga\nad re\nacro ce\nab dali\n! ðŁijĢ\nðŁļ´ ðŁı»\nðŁĵ IJ\nëij IJ\nê ½\nãĤ± ãĥ¢\nâĨIJ #\nà¸Ļภķ\nÅŁ a\nzdrav kost\nyan ka\nx tend\nwomenin horror\nwinter halter\nvikram bhatt\nvascul arization\nun us\nu media\ntrump s\ntransliter ation\ntos sup\nthi eme\nthames water\ntel lement\ntal ita\nsusan cain\nsugar creek\nsu ar\nstylist ically\nstatue ttes\nstar ker\nsn ice\nsil ay\nsemiah moo\nseam stresses\nri ma\nrei ver\nrat m\nprosthe ses\npre date\npil chuck\nphoto sportnz\npeter mansbridge\npeder nales\npe led\nou ris\nole sya\nnortheast ward\nnight call\nneur oradi\nmun ns\nmor ad\nmiss india\nmesh ach\nmcgee han\nmass aso\nmark zuckerberg\nmare lli\nmam baday\nmah mou\nm sic\nm da\nlo wey\nlo ks\nlimerick clg\nlily whites\nle pr\nlake george\nkit siang\nkay seri\nkap aun\nkam pa\nk je\njuli ed\nin sensible\nimpac thub\nhaaretz com\nh nb\ngreen keeper\ngrac ey\ngin tonic\ngi dea\ngemeente museum\ngam bill\nfr cs\nflores ville\nflit croft\nfire bomb\nfahriye evcen\nf ch\nexal ting\neu foria\nel st\nel ord\neir com\ndowag iac\ndog sitting\ndiscur sive\ndepreci ating\ndaily motivation\ncur tly\ncuck field\ncoroll ary\ncolle tage\nco balt\ncho isi\nchil las\nchiangra i\nches ed\ncav en\nca yoglu\nbisp ham\nb unions\narch dale\narag ones\nanu mber\nand only\namor tization\nambu shing\nam ania\nagu erra\nadidasu prising\nacces shollywood\nabdi rahman\nab ow\nãģĨ ãģ\nâĨ ¬\nzi u\nzach ry\nz ole\nwk bn\nwicken heiser\nwhe ed\nweed ore\nwa aaah\nvisitu tah\nviny ladd\nvic mignogna\nvand ellas\nva vel\nusd chf\ntu lu\ntrust towbars\ntow trusttowbars\ntobe your\nthetribune chd\nthereal joebob\nthei acp\nthe pit\ntanu ja\nstar bomb\nsr h\nsnow dog\nsimco ecounty\nshun ted\nshaw tv\nsh off\nsarcopen ia\nru sts\nroger io\nrodolph e\nro skill\nre dedicated\npron ovi\npress news\npoo h\nphy tic\npetro c\npaper clips\npa wned\np tb\np sch\nouss ama\noccit ane\nnew construction\nneel ofa\nnd cs\nnai docweek\nna den\nmusician life\nmu hr\nmount lake\nmetal detecting\nmc nay\nmarque e\nlymp stone\nlisam arie\nlewi sp\nlang sford\nkwest adakar\nkramer girl\nkati ep\njes see\njae jin\nis may\nim pri\nido lish\nho que\nhail storms\ngoo k\ngoo domen\nglimp sed\ngio conda\ngi path\ngev rey\nfurry tails\nfox baltimore\nfor sett\nfoll ome\nfar chitecture\nf th\nf dc\ney ring\nes af\nendor p\ndrumn bass\ndri vers\ndre p\ndo dy\ndispar age\ndilopho saurus\ndbel twrites\nd for\nco scarelli\nchi quis\ncha oyang\ncelebr ants\nblack diamond\nastro physical\nassun ta\narkra zor\naristop hanes\narchon sec\naqu is\napple pie\nance l\namazing grace\nall ou\nal sea\nak ert\nadjunct professr\nabo lishes\na pod\na anchal\n.. ;)\nâģ© :\ny anno\nximen aduque\nwro e\nwent zel\nweap onize\nwater shed\nw tvr\nvel oce\nu idaho\ntweet ad\ntrigon ometric\ntou ght\nthyroid cancer\nthey callme\nthermo polis\nther ington\nspace apps\nsnow dogs\nsmither man\nshami sen\nser kan\nsch outen\nry ce\nroger stone\nro sko\nrep ousse\nreal gilbert\nre offending\nracha ele\nra hab\nr pharms\nqui o\npu pae\npresbyo pia\npetr cech\noffer ta\no fro\nnotim pressed\nnor is\nnil and\nne pt\nnatalie portman\nmyfav murder\nmsla urynhill\nmil spouse\nmende sarmy\nmbio journal\nmati ang\nman k\nluke pasqualino\nlope zo\nlo ge\nle kh\nlam bat\nlago di\nla jong\nko stov\nkee sept\nkay sville\nisol ationism\ninnov atively\nimmuni ze\nim hoff\nidi omatic\ni ves\nhusk orkut\nhu ds\nho bart\nhar tofdixie\nh dcp\ngram ado\ngir dles\ngau hati\ng slv\nfrench ay\nfour che\nfor sa\nfin don\nfilm score\nfici ent\nevil twin\nevan halen\neisen man\ndx c\ndoris day\ndonat elli\ndmy tro\ndeepender shooda\ndavi dax\ncur fews\ncryp ton\ncrank worx\ncorning ware\ncommon est\ncommi sioner\ncoent rao\nchoose kind\nchoice summer\nchar gé\ncentra irl\ncareer goals\ncalder ón\nc tec\nby re\nbur styn\nbetter future\nbern inger\nbel ka\nbeaver dam\nb how\naptac sm\naphili ppe\namp ly\name ans\nam alive\nall meansall\nali ers\nail and\na indonesia\n________ _____\nðŁĺ¹ðŁĺ¹ ðŁĺ¹ðŁĺ¹\nðŁĴķ ðŁİ¶\nâĸª âĸª\nÙħ س\nza atar\nwalk men\nw ör\nvis u\nvin ni\nvideo in\nval ry\nus outhflorida\nun corrected\numa ir\nu oe\ntribute to\ntransfer talk\ntherun way\nthebig issue\nter zo\nter ious\nsilver lining\nsi ss\nseattle u\nsarato gas\nrit eaid\nrent ola\nrasal khaimah\nrap allo\nple sio\npit v\npet stagram\npap adi\nover by\nor bo\noo st\nonda atje\nof change\nnun chaku\nnottinghill carnival\nnc gov\nnatali ya\nn ourse\nmy nottingham\nmusici d\nmultic ast\nmobile first\nmm j\nmitho on\nmirzap ur\nmck er\nmam ou\nm key\nluca still\nlo siento\nlin ate\nletter men\nlec tura\nle maitre\nkra kowski\nkol usola\nkim bell\nkill bill\nke aggy\nkarl towns\nka hr\nk pf\nji ffy\njam sil\niwe ala\nisti klal\ningex tinction\niac eae\nhurst bourne\nhigh jump\nhi miko\nhe ilig\ngoj evich\ngly fada\ngen n\nfluor ine\nfair head\nepi stol\neon ni\neaster ners\ndisin vestment\ndin of\ndhivy adharshini\ncre asing\ncod ling\nchri si\nchees man\ncer vera\ncd tv\ncardi gan\nbread winners\nbonni es\nbon nett\nbne storm\nblu cher\nblack alicious\nbla gojevich\nber thel\nballin robe\nassn at\nashok selvan\nanu ja\nambul ation\nakal amusic\naho i\nacadem yof\n; )!\n! "#\nðŁĻĭ ðŁı¼\nðŁĺĤ ðŁĺį\nð ĵ\né Ĺ\nå®ĩ å®\nâŀ¡ï¸ı â¬ħï¸ı\nâľĶï¸ı #\nâĻ §\nâĹ¼ ï¸ı\nاÙĦ ÙĬÙĪÙħ\nyoun an\nyom kippur\nwv lt\nwies ner\nwhite plains\nwhen callstheheart\nwee der\nu loom\ntraver so\nto wolfpack\nteuk ury\nten jin\ntele x\nsummar ily\nstat work\nspeci ous\nspace ksc\nsof joy\nsis back\nshen k\nshark skin\nsha ikh\nsh oll\nscho oners\nsal mahayek\nsac rum\ns beach\nrose anna\nride along\nricky skaggs\nri blets\nremb ert\nrealkid poker\nr bb\npub blic\npro le\npri ley\npp is\npo ha\nos setia\nom ms\no ker\nni ketan\nni ghted\nng media\nnam iss\nmy friend\nmu ere\nmodel ers\nmo ssa\nmilitar ised\nmetv startrek\nmel amed\nmc fee\nmary queenofscots\nmadein uk\nlucapas qualino\nlit le\nlim kitsiang\nletthem stay\nlark field\nkorn heiser\nkn wn\nju bin\njigarth anda\njames the\nj ne\nj gd\nio st\ninter missions\ningu inal\nincarcer ate\nin offensive\nideolo gues\nid k\nicahn mountsinai\nhyper sport\nho dag\nhandof hope\nhand anovic\nhan eef\nham dard\nh cfc\nguar ani\ngu mmy\ngratu ities\ngrand ly\ngraci ano\ngoogl enew\ngi ons\nfunny man\nfrench toast\nexplore spaceksc\ndeniz li\nde wx\ndavedoyle mma\ncr pg\ncle ang\nchang zhou\ncathe terization\ncatch pole\ncake shop\nca rel\nbur ys\nbug fixes\nbray ford\nbrand shatch\nbo che\nbi dens\nbard sey\nbaeday alden\nba asha\nb mb\nay et\nathel stan\nas cat\nart smia\naro ssa\narkrazor backs\narc angelo\nar lon\naf ball\n> =\nðŁıĨ ðŁijı\níĹ Į\nâĺºï¸ı ðŁĴĻ\nม าร\nил ан\nzerot olerance\nyoutube channel\nye wande\nyarra wonga\nwar sash\nvote katniss\nv neck\nv mf\nunder passes\nulster gaa\ntremb led\nton is\nther ave\ntheq arena\nthau vin\nsym metries\nsuperf icially\nstrike apose\nst azione\nspeci alist\nsp su\nskam italia\nsheremet yevo\nsgt pepper\nse journal\nsalt ford\nrupa huq\nroc as\nreuter spictures\nreport ing\nren k\nredu cere\nred panda\nphithe takappa\np inet\nnowon air\nneu illy\nnephro logist\nmo tw\nmike will\nmide ast\nmeadow dale\nmar kin\nman teno\nmal len\nmac ario\nma sika\nlovel ife\nlong well\nlocal beer\nleed smot\nlay field\nkom arov\nko ech\nkitak yushu\nkenny rogers\nju ho\nj ent\ni var\nhira eth\nhemer ocallis\nhar r\nhappybirthday srk\nhann s\nha ass\ngreen juice\ngood ness\ngalve ston\ng ll\nfru g\nfou quet\nfo aled\nfi ma\nfaf ner\nen gie\nen feld\nemascul ated\neasthar lem\ndn ssec\ndi stancia\ndi siac\ndegener acy\ndau be\ndaphne oz\ncloud land\nchy stryder\nchad mendes\ncal trans\nbre vi\nbook bub\nbobb les\nbis nis\nbig mouth\nbe za\nautu m\nask dr\naldubarkad spreparation\nalau ddin\nðŁĴŀ ðŁĺį\nðŁijĢ ðŁĴ¦\n⾨ ðŁĮĻ\nyuru yuri\nyo ong\nyo gaf\nworldof wonder\nwork work\nwhiskey town\nwall work\nvol stead\nverdic chio\nvat anen\nun match\ntypi fies\ntte okbokki\ntrou ville\ntribe of\ntre va\ntra g\ntom parker\nthe style\nth ilo\nte aand\nsu jit\nsu ic\nsu bu\nsow den\nsmall batch\nsimple pleasures\nshow masters\nshort stops\nser gent\nsecul arist\nscor members\nsap sec\nsand ag\nsalli saw\nryan serhant\nrubin report\nro te\nro la\nrichmond kickers\nreza aslan\nrevol ved\nreha shing\nreedtimmer accu\nrazor smack\nram lee\nradhar ani\nrad hi\nquali es\nprincipal sinaction\npri ed\npre condition\npen so\nout sell\nny ck\nno zawa\nnicky morgan\nni ka\nneuro physiology\nneeti mohan\nne dc\nnatural light\nmy lifeis\nmu c\nmr tom\nmom in\nmo je\nmi ette\nmdcps north\nmckel din\nmay le\nmarr iner\nmanoeuv ring\nman sel\nmakesom enoise\nm itali\nlo quat\nliquid mayhem\nlill ington\nla veau\nkulbhushan jadhav\nku lim\nkhel o\nkala handi\njulie chen\njud icially\njol anda\njay akumar\nit sti\nindi v\nin saan\nin fi\nick enham\nhms qnlz\nhe res\nhal abi\ngr ackles\ngo di\ngn an\nglobal tv\ngha jini\ngang ed\ngan ti\nfolk festival\nfo aling\nflo gging\nfis c\nfight forthe\nfelicit ations\nfa ille\neri reland\nemmy kinney\neiri k\nebony mag\ndor fer\ndg love\nde man\ndat en\ndar ingly\ndap to\ncollect sideshow\nclassical guitar\nchichester ft\ncelebr ates\ncar lease\nbund chen\nbr yer\nboxer dog\nblog con\nbi modal\nba ati\narra yed\napp s\nah it\nðŁı ·\nðŁİ¶ ðŁİ¤\nðŁĩºðŁĩ¸ :\nðŁ§ ¦\níĶĦë¡ľëĵĢ ìĬ¤\nåŁ İ\nãģ£ ãģ¦\nर ह\nÊ ³\n} :\nyoshi moto\nwn du\nwhite party\nweare mkto\nurbant vuganda\ntransform ers\nto death\nthe following\nteddy b\ntaylor wimpey\ntax slayer\ntas lim\ntableau public\nstock photography\nstar i\nssur gery\nsoli dus\nsimon etta\nsathletic shoes\nsarah millican\nrv h\nrussell p\nro hi\nreign cane\nrealmatt lucas\nrd bms\nraku go\nra fat\npromo si\npepp apig\npatron a\npam per\nor un\nnor ia\nnct fanart\nnc sl\nmc swain\nmc gui\nmandre ll\nmal ave\nmag ics\nlud mila\nlogi stica\nlipstick day\nleague mag\nlatin as\nlas well\nlan ni\nkor ch\nknaus gaard\nkid son\nkal t\nj fw\nit tuesday\nis mart\ning gi\nind itex\nimagin atively\nic s\nhoo ge\nhf pa\nhalo ween\ngroove shark\ngol dy\ngo jhl\ngivingtuesday ca\ng weedore\nforever leedsmot\nfeatured concerts\nfan u\nf ci\nex clu\never after\nequ atorial\neg more\ndup online\ndong saeng\ndirk gently\ndi ddy\nden ter\nd printers\nd hole\ncush nie\ncruci al\ncre tech\ncre sa\ncliffcentral com\nchapter house\nchanning posters\ncareer teched\ncardcaptor sakura\ncar ney\nca jal\nc wre\nbreath lessly\nbreakfast club\nbrachy therapy\nbol in\nbo sw\nbay city\nasi ad\narkan san\narie ge\nandre wn\naldubhappy baedayalden\nal ward\nahu bble\naffl alo\nad yen\nach aille\n^^ "\n? ......\nðŁĶ¥ðŁĶ¥ðŁĶ¥ @\nðŁIJ¶ #\nðŁĩ¸ ðŁĩ¦\nëĦ ¤\nãĥ¬ ãĤ¹\nz te\nz quad\nz atar\nye ileen\nwide field\nwearethe arsenal\nw ru\nvo tem\nub hai\ntu tta\ntrump lies\ntro ve\ntravel card\ntor cida\ntoge thers\ntmb g\ntime zones\nthro cks\nthre epenny\nthisi sac\ntbin chat\nstudi ously\nstagi aire\nspro m\nson et\nsit z\nsh j\nsel ondon\nscitech museum\nsai shopkins\nricko wen\nraw ski\nrail freight\nrachael ray\nqu ade\npurpose tour\npu h\nprehen sile\npharmacokine tics\npersian gulf\nper cale\npatient sfirst\npan cas\npab lito\norland ounited\no chi\nnv g\nnext week\nne gie\nne ff\nne bext\nmorgan freeman\nmix e\nminnew aska\nme p\nmat aji\nmashi rafael\nma atv\nler os\nlapi dus\nkh iri\nkaz mir\njann atul\nja que\nj vp\nishqba aaz\nirrit ants\nir m\ninsi debates\nimperme able\nim mobility\nhigu chi\nhallow en\ngul food\ngrease monkey\ngrandcanyon nps\ngoto southafrica\nglass work\ngan apathy\ng ses\nfu dgy\nfo gging\nflee ce\nfi ord\nfalcon i\nfab ra\nentom ological\nem ami\nek iti\ndx cc\ndeno sau\ncyber stalking\ncrohns disease\ncro es\ncn mi\nclapper board\nchris thile\nch isol\ncf ca\ncarib beans\nca zares\nbo vell\nbed well\nbb w\nbarrow afc\nali sta\nadhe rents\nad han\nãģ ¥\nâļ¾ï¸ı ðŁĴĻ\nzelda thon\nze ze\nwro th\nwomen rights\nwel ches\nwald wick\nul rik\nu iw\nthe predator\ntax march\nt song\nsüd tirol\nsupply chains\nsupere xclusive\nsub frame\nstoichi ometry\nspe akin\nsom ato\nso yo\nsl fp\nsky rockets\nsh azz\nsam po\nsa che\nrochdale hornets\nrid wan\nrealmike wilbon\nr ce\npu sam\nprinci p\nport patrick\npl x\npe ve\npatriot league\npa ston\npa sen\npa har\noutw ard\noop sie\nol ero\no sak\nnom es\nno bi\nnel les\nna ipaul\nmulti versity\nmomo iro\nmo sco\nmit ter\nmic u\nmegat jp\nmay aguez\nmar ucci\nman gusta\nm world\nluth ria\nlock step\nlinn he\nlength wise\nle sher\nla presse\nla kers\nla barbera\nkom ar\nkla i\nkasab lanka\nir um\nir lemb\nintern day\ninadequ acies\nima genes\nich kov\nicalli han\ni fixit\nhulk buster\nhoni ara\nhomony ms\nhome staging\nholly woodland\nhill day\nguy ane\ngun ton\ngreen sborough\ngordon hayward\ngood girl\ngoo bers\ngo guins\nglen mont\ngiz mo\ngi velife\nga aclub\nfor ni\nfish wick\nfer l\nfel tman\nethan vansciver\nerne sts\ner agon\nemilyos ment\nella henderson\nee zer\ned wyn\ndown turns\ndont crack\ndd ino\nday stil\ndav o\ncra ins\nconsumer reports\nconspiracy theory\nconqui stad\ncolmen ares\ncoach d\nciti ess\ncharge dup\nchal ices\ncease lessly\nce tt\ncav ers\ncake and\nbr angelina\nbo kan\nbil ty\nbig star\nbaz il\naz l\naz ha\navail able\natx weather\narca ea\nanthon yo\nang ga\naler mo\naid i\nage uk\nag ganis\nadekun legold\naccou stic\n,,,, ,,,\nðŁĺĬ âĺºï¸ı\nðŁijįðŁijį ðŁijįðŁijįðŁijį\níĥľ íĺĦ\nå¯ º\nาภª\nü re\nyoun ghollywood\ny ia\nwith me\nwi eden\nwhy wellington\nwell played\nwe cker\nvier tel\nvi var\nvas antha\nvall one\nvad hana\nu kip\nts ss\ntrouble shooter\ntre ece\ntravag anza\ntomas berdych\nthon dan\nthal amic\nthack ray\nte du\nstade toulousain\nssc s\nsor bus\nsocial protection\nsme m\nsho tover\nseen u\nrho dy\nread yyy\npur éed\npost codes\nperce val\npawh uska\npatti smith\nover dressed\noui met\noooooooo oooooo\nollantay tambo\nod da\noccur ing\nno aas\nmun ic\nmodern fam\nmob in\nmk p\nmissing no\nmik ko\nmi sen\nmayweather v\nmate er\nmadhuri ma\nma sin\nlough nane\nlogan square\nlo or\nles seps\nlab oured\nla font\nkra h\nkad jar\nk tx\njos é\njon gh\njohn lock\njeff dunham\nist i\nin yc\niheartt ally\nho ima\nhedley online\nhau denosau\ngro yne\ngor inchem\ngoo ssens\nfood city\nfau zia\nexp consulting\nexpconsulting es\nelem mathchat\negi dio\nedwyn collins\neat well\ndym church\ndof the\ndetro i\nden z\ndefer ral\ndaphne caruanagalizia\nconcent rix\ncomorbid ities\ncat elynn\nbt ls\nbrid well\nbra wijaya\nboy ar\nbeli z\nbarro wraiders\nbal dini\nbai jiu\nawa ited\naw tg\naw aki\nauster litz\natra de\narchae opteryx\nadjudic ators\nach oli\na hy\nľ ëĵľ\nz wave\nyour home\nwo ahh\nwinning wednesday\nwestvirgini au\nwan ge\nwa sif\nvi elle\nvec tored\ntx politics\ntomor i\ntin chystryder\nthenight manager\ntheatre uk\nstur minster\nsouthwark cathed\nschmal z\nsarban es\nsant illan\nsam l\nring mer\nri et\nrath gar\nrant oul\nradhamohan bjp\npun ked\nplanet comicon\nphan tic\npaul polman\nos am\noet ker\no es\nnott age\nne ven\nmulti use\nmon agh\nmira beau\nmille miglia\nmicro biological\nmeetthe artist\nmedi agu\nloe wen\nl sr\nl sh\nke aney\nka ÅŁk\njag jit\ni dig\nhex um\nhaz ama\ngou ter\ngentle mens\ng sfc\nfra sca\nfr ö\nflower stagram\nesc ro\nell inger\ned corlando\ndro oping\ndor mice\nding er\ndies fc\nde balt\ndebalt seve\ndaw yck\ndarao briain\nd age\nco hosted\ncla u\nci alis\nchocol aty\nchin may\ncac ia\nbret bielema\nbrahman yam\nbott en\nblanc as\nblack on\nbla d\nbey ers\nbeir ness\nbab bs\nanne cy\nangi er\nana huac\nale gg\nagger scricket\nag lew\naer u\nâĮļ ï¸ı\nzap ruder\nz burg\nxx xiv\nvir gina\nv ong\nthat boy\ntele casts\ntc margate\ntar di\nsun ye\nsu er\nstani er\nsquar tet\nsickkids news\nsi mad\nshoe bill\nsepul cher\nsarahm gellar\nsach ems\nsa ura\nrich woods\nress ources\nreal sway\nreagan omics\nre tellings\nre marque\nra ijin\nquer cetin\npyro graphy\npunkand stuff\nprincipal es\nplat oons\npl ari\npin der\noz ge\nover populated\nny gaard\nneu romancer\nnativeamerican heritagemonth\nnap aracing\nnach t\nmuriel bowser\nmotor mouth\nmon tt\nmo is\nmercer sburg\nmaz ama\nmanj ari\nmal c\nm js\nlu vr\nlin oleic\nkwang min\nkir n\nju u\njapanese art\nj li\nitso kay\nitsmohit sehgal\nipp f\ninag ur\nim planting\nic tp\nhil den\nhavean iceday\nhar by\nhan cox\ngro fers\ngrand niece\nglo p\nglasgow uni\ngladi atorial\nfm drive\nfi on\nfeeling festive\nfair wood\nf legg\ner col\nem rich\ne bc\ndr ongo\ndefe o\nde wolf\nde ux\nday ang\ncycle tour\ncur ate\ncor avin\nco dsall\ncircuit ous\nche ena\ncate rer\ncart lidge\ncan y\nbrook green\nboo gaard\nbol ick\nblue bear\nbin ding\nbi ms\nbale wa\nayurve dic\nauto express\napp ena\nang ai\nalo gic\naj in\nagu er\naddic t\nad tech\naco e\nðŁĴª ðŁijĮ\nðŁijĬ ðŁijį\nç ¸\nã ı\nâĺħâĺħâĺħâĺħ :\nâĺĢï¸ı âĿ¤ï¸ı\nzar korel\nxi en\nwil kes\nwfm z\nwap akon\nwak elin\nvideo tron\nvass allo\nv wap\nus military\nun graded\nuk ho\ntusc umbia\ntsumt sum\ntoro company\ntool kits\ntomar ket\nthondan kani\nthisis lany\nter fs\ntang lin\nsura u\nstock wood\nspor tireland\nspar sh\nsom alian\nsidd ons\nshel a\nsham ers\nsg vn\nsf symphony\nselvar aj\nseb agai\nsant illi\nrumin ants\nrt ls\nrr v\nrichardy ap\nrex ford\nqi ong\nprecipit ous\npat ta\npaget paget\nover abundance\nolimpi ja\nnu dged\nnu dge\nnon pareil\nnoi settes\nn ni\nmusi q\nmur rells\nmu ds\nmon tac\nmir s\nmingh ella\nmaric hal\nmakebetter happen\nma eyoung\nludd ites\nluc ban\nlou reiro\nlo tos\nku mano\nkre ta\nkha dka\njess on\nje sh\njane te\nin news\nher javec\nhelioc entric\nhead rick\nhackney wick\nh lundqvist\nguil lot\ngrun dig\ngrin drod\ngrimac es\ng sma\nforest fire\nfin chel\nexplor ation\nex upéry\neraser heads\ndvent ures\ndun g\ndor rington\ndj tira\ndeser ters\nder rek\ncur du\nct buh\ncra iova\ncolle dge\nchildren shealth\ncaren cro\ncal lup\nc twx\nbrock university\nbr antly\nbig fan\nbeyourown boss\nben na\nbeautiful game\nbb curdu\nbat kid\nbarbi ere\nbackin time\nay sen\nas cher\nas aram\nalbatros scam\naire uropa\nag ac\nadom ah\nac rm\nðŁĺĺ âĿ¤\nðŁİ ½\nÙĦ اÙħ\nyassi zzle\nwine growers\nwilhelm sen\nwho dini\nwer oll\nwater fowl\nwai alua\nw shs\nvine sauce\nvi lest\nurban ecology\nu ssi\ntwit ness\ntro gon\ntouch down\ntechno logic\ntar chives\nta eler\nsudar san\nstump towncoffee\nstre amy\nspar go\nsou ra\nsni k\nsk ow\nschmid t\nsam ah\nsab atino\nrunning uk\nro gge\npublic education\npu ber\npri zep\npied ad\np ting\nnebra ska\nnaz imabad\nnaj ran\nmun di\nmo ed\nmitchel stown\nmimi kyu\nmil ke\nmi yam\nmann ering\nmanjun ath\nmac iver\nm ten\nlyn g\nla gat\nklein burg\nkay ako\njor dache\njohnnewman music\njohn waters\njasmin walia\nindiat vnews\niey asu\nhu moured\nho fers\nham brick\ngurdas maan\ngreat comet\ngamer gram\nford trucks\nfi lem\nfal ck\nf ys\nf ct\ner tel\neleanorj calder\nduche sses\ndrought lander\ndigital leader\ndi parole\ndend rum\ndemor alized\ndemar com\ncray ford\ncp x\ncosum nes\ncir colo\ncalli ance\ncal zada\nbraun stone\nbott lings\nboo ya\nblack men\nbhu pathi\nbestin the\nbailey lakings\nau fman\naspir a\nas lef\nariad na\nar tec\napple pencil\nangelcake pics\nad dd\nab mb\nðŁĺĤðŁĺĤðŁĺĤ ðŁĺŃðŁĺŃðŁĺŃ\në ¡ľ\nç³ »\nâŀ ¤\nà· ĥ\nت ÙĬ\nzing erman\nx eter\nwright stown\nwoo sung\nwhit elock\nwar bling\nwa chau\nve ctis\nus en\nty burn\ntop dog\ntb v\nt sel\nswim swam\nsud afed\nspectro photometer\nspare parts\nspace exploration\nsouth ard\nsmart cities\nshi raz\nshar an\nse inen\nscu tt\nscout ing\nsac i\nrubi x\nro milly\nrev engers\nre marry\nraghun ath\nra ver\npv da\nps itt\nprescri bers\npoc so\npo ppo\npl zzzz\npj py\nph ua\npar asy\npac em\np nj\np crm\nover charge\nopening soon\nof ilm\no ton\nni archos\nne gin\nnational bossday\nmzansi magic\nmulti state\nmidge ure\nmb asketball\nmathi as\nmarried atfirstsight\nmar low\nmalcol mb\nly ak\nkre utz\nkiri akou\nkinka jou\nkei thing\nkean sburg\nkarmal oop\nkalam kari\nk netz\nk alem\njames blunt\nintra squad\niller time\nholo graphy\nhi roh\nhal tom\ngri maud\nglovers ville\nfranki ekazarian\nflock hart\nfacial recognition\neveryonec an\nere k\nep at\nec lac\nearth sea\ndug gie\ndub fire\ndrew lachey\ndont forget\ndo vid\ndirec ts\ndescendant softhesun\ndegu station\ndaniel marven\ndales man\nda rena\nd nab\ncr ary\ncompac ting\ncle wiston\nci ones\nci ety\ncat andu\ncarabini eri\nbusiness model\nbp mn\nblan ck\nbe ok\nb hog\naye shat\napar ra\nam th\nalkal inity\na peoples\nÃŃ m\nyu uka\nyeas ayer\nxmen movies\nwest garth\nwapakon eta\nvi shesh\nuss ocom\ntu tup\ntu mon\ntri poto\ntor oro\ntor is\ntherise of\nthereal russellp\nthe progressives\nterre stris\nteo chew\ntar ahu\ntae jin\nstan fill\nstag gies\nspn famiiy\nspectacular nwt\nsketch bet\nsin love\nsho dge\nshin ies\nseku low\nse gui\nsay egh\nsar dana\nsamanth as\nrescu eme\nrenn sport\nrefugee schief\nre double\nrat pack\nrandy moss\nprith vival\npric ed\npower lessness\npierre pont\nphosp hat\nperpetr ation\npave se\nparab éns\npa ole\np wb\non duty\nofficial psl\nno zaki\nno wing\nne wart\nna via\nmu tism\nmodu lators\nmi hir\nmarypoppins returns\nmap maker\nmadi ha\nma ben\nlonger term\nlogarith ms\nle amy\nlake hurst\nladi ators\nku shida\nkate mansi\nju ster\njan ele\nj heri\nj hen\niso ch\nir leach\ninde mni\nichi kawa\niam mr\nhopl ite\nhank green\ngretchen carlson\ngine st\nginapu stor\nford ing\nfashion finds\nfa den\ness ent\nen ationalpark\ndun given\ndontcrack underpressure\ndom brov\ndil fer\nder mis\nde very\ncynthi abailey\ncu lum\ncon signing\ncocor ahs\nchortle town\ncho ise\ncheap ness\nce fas\ncc bvb\ncal pur\ncabinet maker\ncab bag\nc ba\nbelphe gor\nbag gers\nav c\nav am\nart ford\nare ola\nanton iom\nantal yaspor\nand rada\nafilm fareawards\nab ingdon\nðŁijı ðŁıĨ\nâķ± âķ±\nÑĤа илан\nÑĤаилан д\nã es\nyl td\nwo er\nwhit marsh\nwaldor fa\nvoltac atalunya\nvander hoof\nut me\nun mastered\ntruman sburg\nthe merry\nthe hype\ntele fon\nsuper volcano\nspad aro\nsin kers\nser ral\nse pak\nschön brunn\nscen es\nsam bit\nsal ter\nroundrock isd\nriver way\nreali gned\nre qd\npush forward\npu sch\npowder ham\npie man\npi era\npen alosa\noreilly media\non dcp\nof shame\no gee\nno dui\nnew beverly\nnatlib scot\nnational policeweek\nnamad gi\nn tom\nmu du\nmor ti\nmon ton\nmin jung\nmel bour\nmedi acity\nmcgra il\nmc kiernan\nmazz oni\nmartin imonday\nmar tech\nma ven\nm fo\nlliber tat\nletter forms\nle the\nlar aza\nking g\nkids activities\nk liz\njudd monte\njohn king\njere bko\njak un\njab arda\nimprovis es\ni versity\ni hn\nhome theater\nhoki enation\nhick en\nhar king\ngu igno\ngb pjpy\ng pw\nfrancis can\nfo tor\nfeels goodman\ndragon fly\ndr p\ndl ls\ndhe yar\ndepreci ate\ndemon ization\ndel ap\nde ads\ndd ca\nd hee\ncur tailing\nculture l\ncollecti ble\nco sma\nclay ne\nchrono graphs\nche re\nchas sagne\nch one\ncab ras\nbren da\nbluecol lar\nbbc so\nbasti da\nbam bi\nballet day\nbalder as\nbal zer\navi dheyar\narcher field\nanti mony\nanna akana\namo on\nally girl\nalco y\nalbu men\nalbu maday\nac rum\nðŁIJ¸ ðŁIJ¸\nðŁ¥ Ħ\në§ Ī\nç Ĩ\nØ® اÙĨ\nмÑĥз Ñĭ\nzo ie\nyour allypally\nxian lim\nwestwoo done\nwein man\nwar fighters\nvul pix\nun compressed\nun acknowledged\ntshep o\ntroglody tes\ntoli sso\ntho tep\nthisisp vris\nthed appy\nthe esh\nthats what\nthanksgiving week\ntal er\ntake backthe\ntakam atsu\nsx ii\nsuki waterhouse\nsmol ders\nslopp ily\nskin health\nshe arers\nshawnmendes the\nshar jah\nshak shuka\nscrap the\nscho eller\nsaveour seas\nsalary man\nrun asone\nroy c\nri fat\nrevoke article\nred sonja\nre bb\nrand b\nra strick\nra son\nquar shie\npre so\npre k\npot coin\npol ansky\npleasee eee\npeter scanavino\nperiodon titis\npe dley\npat aky\nparvo virus\np bhushan\now y\nomi ami\nofficial ghsa\nnorth central\nnie bla\nnhlon nbcsports\nnew era\nneko case\nn tia\nmuswell brook\nmom oh\nmik kelson\nmicrone edling\nmichael wsmith\nmer in\nmckin zie\nmc wane\nmark dice\nmari pos\nmar os\nmag adi\nler ouge\nle pus\nlam berti\nkno pp\nki kki\nki hu\nke dai\nkatheryn winnick\nk ko\njon montag\njamiele ecurtis\nir well\ninfu sion\nimp ru\nim purity\nim par\nhy tner\nhu ta\nhs bc\nhoag y\nhis sy\nhimm el\nhey erdahl\nhersh man\nheir loom\nhealthy diet\nhe v\nharts dale\nhar uno\ngro tte\ngom on\ngoel bjp\nge mili\nfuzz ing\nfrench wine\nfree state\nfore vs\nfood park\nfon o\nfay oum\nf gg\ndessert day\ndavid harewood\ndata analysis\nd music\ncyn wyd\ncycl orama\ncras sula\ncor dele\nchag ford\ncecil erichards\ncatelynn lowell\ncas u\ncas sock\nbrevi ary\nbrave souls\nboss u\nbi ram\nbha jans\nbalmoral show\nbal boni\nb under\naver e\nartscouncil ni\nar ji\nan san\nan ali\nail eron\nagu er\nag ical\naaaaaa and\na versa\nðŁIJ´ ðŁIJ´\nðŁ§ ¹\nðŁ¥ºðŁ¥º ðŁ¥º\nðĿĹ ĺ\nxxx vi\nww mtnews\nwood thorpe\nwhar ves\nwel over\nwag ener\nvsco de\nvery proud\nun justifiable\nun burnt\nue matsu\nu ef\ntulip siddiq\nts ys\ntri shul\ntrampal ji\ntol tec\nteacher prize\ntai shi\nsyn crude\nsunshine coasto\nsu sty\nsouth offrance\nsha aan\nseper ated\nsavat age\nsau veur\nsam mies\nsal az\ns dag\nri bet\nre twit\nre ines\nqueen bee\npun to\npp ke\npersu ader\npay n\npantom imes\noun try\nor ko\nopen mic\nonly you\nny stag\nnairo bian\nmy jasper\nmor ny\nmor ioka\nmichaele mann\nmean smore\nman ha\nloy ally\nloc atie\nlam pre\nla thi\nl luis\nking scote\nke mer\nkaz imi\nk naw\njakeand amir\nit uri\nin competency\nhispanici magines\nhen rye\nhe dd\nhe aping\nhair port\nha sui\nh sct\ngur um\nglo e\ngh ard\ngggg ggg\ngate am\nforest school\nfle te\nfla shover\neschen bach\nerd rich\nej ad\neden derry\ndy y\ndu su\ndu bc\ndialec tics\ndel acor\ndefi lement\nde sus\nde ob\ndan ede\ndal arna\ndaddy shome\ncross keys\ncro mer\nconcili atory\ncol po\nchri spine\ncham pe\nc ation\nbut true\nbrock ington\nbrecon beacon\nbrad ner\nblur ted\nblum spew\nblom berg\nbha gal\nber an\nbel grad\nbaf tag\nat allah\nartic lev\narru da\narmy rotc\nan tt\nam mo\nalit rophy\nalam enti\naed an\nad w\nðŁĺij ðŁĺĤ\nê¹Ģì§Ħ ìļ°\nм оÐ\nÎ ·\nz na\nyun o\nyu da\nym outh\nworking mom\nwild water\nwhit lock\nwedding fair\nw woof\nw sn\nvo dianova\nun seemly\ntwitter storm\ntf h\ntextile design\nt dx\nstraight ness\nsoci opolitical\nshek hin\nsh ung\nseabour n\nse aways\nrock away\nre zende\nraj shah\nquant cast\npsychopharmac ology\npietr angelo\nphil odendron\nphe x\npengu inte\npend ence\npeer j\npaho kee\npa pe\nod awara\nnet books\nner gal\nneh gov\nmtvbase africa\nmill street\nmicro scale\nmeh wish\nmax ence\nmash rou\nmand ingo\nlu ers\nlokay ukta\nlabor atorio\nkalon gan\nkac z\njim inday\njan a\njagmeet singh\njack knife\ninside ferrari\nin hand\ni vies\nhi mb\nhatchim als\nhar ang\ngau mont\ngar bled\nfiz dale\nfig tree\nfidd lin\nfanci ulli\nfal tan\nemily y\ne bbs\ndiv yak\ndis da\ndavidax elrod\nd lm\ncle ws\nchri qui\nchatur anga\ncedar cove\ncatch oftheday\nbush whacker\nbuilding bridges\nbritish birds\nbrak pan\nbo snow\nblack swan\nbi sha\nbel bin\nbal lester\nbab bb\nase ema\nam z\nam diabete\nam bia\nag ito\nacaci as\n% âĢ¦\nðŁĺĬ ðŁĴŀ\nðŁĺĨ .\nìĺ¤ ìķĦìĿ´\næĿ ¥\næ ¶\nâĢįâĻ Ģ\n° !\nxxxx xxxxx\nxim enez\nwyn berg\nwom bat\nwi ed\nwan king\nviadu ckworth\nup lifts\nulla dulla\nu ea\ntwent yman\ntraut mann\ntrade centre\ntowno fficial\ntop cat\nto losa\ntheori zed\nthenewe uropean\nthe torocompany\nted to\ntac it\nt mux\nstudent debt\nspn chi\nserv ais\nsen zo\nsaw ada\nsale sians\nsal twell\nsa q\nro do\nri spoli\nreel sofficial\nre join\nre home\nram lila\nrak ish\npurple day\npre fabs\nplym stock\nplot lib\npi azon\npetrol head\npav on\npalm tree\npal med\npa sek\np wu\nori go\none planet\nnikk il\nnc ad\nnas ahubble\nn the\nmobb deep\nmo bike\nmira sorvino\nmha iri\nmechan ised\nmb mbam\nmatta rella\nmat z\nmanz anares\nmall ari\nmag dy\nlo veridge\nlimb ed\nle panto\nl pm\nko suke\nkelly sue\njun in\njay apura\nit sco\nio les\nim monen\nici mod\nheu res\nheteronor mative\nhelpto buy\nhar tog\ngu yot\ngly col\nghu rair\ngh in\nger tner\ngenoci de\ngain ax\nfri erson\nfitness journey\nfer mor\nfeature ttes\nemc gee\nel chapo\ne kin\ndor rell\ndon air\ndog gie\nder mer\nden eb\nde schi\ndali da\ncriso stomo\ncouncil members\ncornelis sen\ncoo lie\ncolli gan\ncodi fied\nclan destin\nchuk ar\ncho wa\nchen in\nchat ard\nchar vet\nchar ged\nc mma\nbute town\nbuech el\nbudget travel\nbel gaum\nbb cred\nbar ce\nbah ri\nbab alola\naz ion\nawal sh\naus stellung\nas rock\nalvar o\naless andr\nakademi ks\nai wa\nahmadre za\naditi rathore\nðŁĻĮ @\nðŁİīðŁİĪ ðŁİĬ\nðŁ¤ĺðŁı» #\níĶĦë¡ľëĵĢìĬ¤ x\nyar ov\nxpla p\nwvprep fb\nwicker park\nwa chowski\nvinay avidheyar\nvar os\nva ide\nus ace\nurvashira utela\nupheav als\nun learned\ntre i\ntre as\ntoread or\nthedavid crosby\nthe cloud\ntemple man\nteam on\ntb ayne\ntad lock\nswiss made\nstu mbo\nstu arth\nsqu ill\nspaci ousness\nsol arec\nslopp iness\nsle ben\nshe x\nse be\nroy lilley\nre kka\nre ev\nraz van\nran maru\nrabbit mq\nqalam oun\npre bble\npi at\nperfor ate\npat ara\npar ga\npam lico\npam ilya\nover steer\nonelast time\no tun\nni mrat\nnfl kickoff\nnest lings\nmy name\nmother languageday\nmini o\nmeyer hoff\nmen dips\nmar iss\nmal formations\nm prnews\nlyth goe\nlopezo brador\nle lia\nle kha\nlast nite\nla duke\nkyr sten\nkv ass\nkur gan\nku kul\nks giving\nklu b\nkeny aredcross\njou et\njewl ery\njanasen ani\nit sat\nit oh\nis ara\ninterce ding\ninge ducation\nic ron\ni priyank\nhebb al\nhand sup\nh he\ngyeon ggi\ngor rell\nglobal new\ngig wise\ngarni delia\nfun belt\nfon taines\nfold out\nfeel better\neu dat\neri elive\nenglish town\nelph ick\ned guy\neaz ye\neagle sham\ne one\ndemonstra bly\nde ya\ndab bles\nctv wpg\ncl on\nchu ter\ncharlied aniels\ncf kargentina\nbuñ uel\nbody language\nbleak ness\nbeso in\nbent aleb\nbeat it\nbe ab\nback off\nb nai\nb co\nb chockey\navec chia\nauk land\nastronom ically\nas wang\nar ric\napilot seye\napi zza\namar ina\nalph ac\nad lv\nachi mota\n=_ =\nì² ľ\nåŃIJ éŁ\nz ary\nyy cevents\nyehu di\nwol man\nwild wednesday\nwasi kowska\nvisit goldcoast\nvi sting\nunity tips\ntechno logie\nsul phide\nstre at\nsovere igns\nshar n\nsh ats\nseven logics\nseton hall\nscreen printed\nsan cha\nsa kuma\nra ymer\npu review\npre amps\npr cc\npoké mongo\nperfor ations\npe wee\npare jo\nover man\not z\noh the\noh saasports\nmohit sehgal\nmeh med\nmcfad yen\nmark lanegan\nmarc garneau\nman j\nmadri gals\nluxembour gish\nlp wan\nlookat my\nlife ontheroad\nkin dra\nkhar ge\nkei ichi\nkai grun\nkaigrun witz\nisu net\ninsinu ates\nii ed\nih me\nhewit son\nhc sd\ngro tta\ngo wri\ngau ck\ngandol fo\ngab c\ng ach\nfro mn\nforest whitaker\nfe k\nfamily medicine\nenergys aving\nec sc\near wolf\ndont nod\ndj mix\ndis ki\ndir lingusamy\ndand eli\ndainik bhaskar\ncork city\ncon cisely\ncollege basketball\nclear ly\ncla yo\nchu giak\ncho sin\nchi kin\ncare for\nbrunel uni\nbio systems\nbetibachaobe ti\nbach rach\naz ami\nat socialmedi\nash elf\nas cott\nas cal\nan tae\nam rav\nalpham ale\nalli want\nalle go\nak sel\n$ \\\nðŁĺĽ ðŁĺį\nðŁijģâĢį ðŁĹ¨\nðŁ¤ Ĵ\nâĶĪâĶĪ âĶĪâĶĪ\nzon ne\nwhite tip\nwhat about\nweing art\nun ceded\nturner prize\ntimes live\ntime scale\nther os\ntg k\nter centenary\ntalyl lyn\nsyl viaduckworth\nswing arm\nsubstance designer\nsu td\nsu mber\nstor rington\nspace govuk\nsp et\nsl bc\nskate shop\nsharepict chibi\nsent ries\nseewhati didthere\nsan ssou\nsammy wilk\nsam bha\nred row\nre power\nramnath kovind\nprofun dity\npoly phia\npero gies\nper vad\npan kow\no estrogen\nnor tel\nno break\nniagar aparks\nnh mla\nnc se\nmurrumbi dgee\nmo val\nmnc tv\nmis matches\nmi ket\nmex chat\nmat plotlib\nmarco g\nman nu\nmalacan ang\nma stung\nlog ers\nlj mu\nlis sette\nlign um\nlan cement\nla gran\nkristy na\nkristiann airn\nkam ila\nk du\njyo tish\njud gen\njin xx\nitu n\nitu ation\nipp atel\nintrigu ingly\ninte bnlditalia\nim ple\nice music\nhun ziker\nhi bees\nhend ren\nhd k\nhaver straw\nh ico\ngr r\ngeh ring\ngar dot\nfoun taine\nflo ret\nfertil ised\nfer net\nfelicit ates\nfat rophy\netsy sale\nepo ca\neh v\nearl sfield\ndwee zil\ndunhill links\ndoll houses\ndis respects\ndigital sales\ndietiti ans\nde spots\nde shaunwatson\ndak u\ncr tv\ncount mein\nconst anta\nco rella\nclin k\nchuck wendig\nbri sco\nblac keyed\nbhak ta\nbenbe cula\nben nion\nbar go\nba sto\nastralis gg\nandrea petkovic\name z\nal awine\nafoo tball\na issa\n:\' \')\n.. ???\n!!! <\nðŁijįðŁı» @\nðĿIJİ ðĿIJ\né Ĭ\nãħłãħłãħłãħł ãħłãħł\nâĻ¥ ~\nâĺºï¸ıâĺºï¸ı âĺºï¸ıâĺºï¸ı\nöl nir\nê t\n~ âĻª\nyu bikey\nyellow fever\ny ato\nwrigley ville\nwr fc\nwilliamand mary\nwh arncliffe\nwar mest\nwang chuk\nwall dorf\nwa ju\nurban ity\nup ending\ntrach tenberg\nto sachat\nti ar\ntho orn\nthe tls\nte fillin\nsu in\nstiff en\nss wiss\nspru e\nsol la\nsnow cap\nsnoo ks\nskyblue fc\nsilk screened\nshi rob\nse bright\nschool sport\nsarang ani\nsa po\nrevel a\nre quote\nra ppe\nr ó\npyrene an\npend ine\npaul k\npar go\npanam acity\npainting silove\not an\norder now\nolivi ers\nnws seattle\nneuro toxin\nn scorp\nmovietv techgeeks\nmorning coffee\nmor tales\nmi ral\nme demb\nmargare tha\nmarch itec\nmar cano\nmanz ini\nlion sclubs\nlimp bizkit\nker pen\nkel mscott\njjab rams\nj atta\nitv wales\nici m\ni septaphilly\nhu eco\nholm strom\nho sein\nho ola\nhit c\nhi ley\nhat ice\nhappyear thday\ngurmeet choudhary\ngrown ish\ngro aned\ngo canada\nger sen\ngau cher\ngar bag\ngango tri\nfu jitsu\nfoo bar\nfire hawks\nfer dy\nfat berg\nfar rand\nface plates\nequin or\nepp endorf\nedchat nz\ndur m\ndisch em\ndemol ition\ndee z\ncopper belt\ncom pres\ncolored pencil\ncog burn\nclinton fdn\nchisol m\ncedarcove tv\ncat zingano\ncan son\ncam ba\nbrant daugherty\naz aad\naustin isd\nat ours\nastro boy\nasak ura\nap ier\nannual report\nand dean\namal aysia\nalphabe tic\nalbi rex\nahed tamimi\naden tro\nad har\nabo tt\nðŁij©âĢį ðŁı«\nච½\nà ½\nyork sambulance\nyo cum\nyin z\nwye valley\nwinch more\nwestpac stadium\nweather caster\nwater marking\nv precords\nupthe dubs\nuky p\ntw ts\ntrit ic\ntourde yorkshire\nthesm sd\ntheori ze\nthe weirdworld\nsunshinecoasto z\nstur gill\nsteak n\nspiegel online\nsper kin\nsiri kit\nshe han\nse aming\nsc rabb\nsave hannibal\nrosal ine\nright scon\nren du\nred card\nrang sit\nrak shak\nrac ingextinction\nprin toctober\npre ppin\npre cis\nppe al\npow assan\npoo ds\npolychro mos\npir bright\npiezo electric\nperfect as\npatt an\npat os\np elling\non li\noh sen\nnn h\nngw sd\nnd ale\nnar dini\nn infa\nn ating\nmuhl ach\nmotivational quote\nmonster high\nmiam ipd\nmer aj\nmeanwhi lein\nlucas cruikshank\nligh tof\nleapfro gging\nkremlin russia\nkan angill\nka or\nine au\nhunnic utt\nhundred ths\nhe ger\nhay seed\ngra byour\nfleis chman\nfen berg\nfa herty\neconet zimbabwe\ndt by\ndifferenti als\ndel ma\ndeath valley\ncp ca\nclear cut\nche kk\ncer ium\ncann ata\nboycott nfl\nbookweek scot\nbby awards\nbay ing\nbaske tof\nball ance\nay on\nar sh\nand you\nanastasi ya\namé ric\nall ying\nali ke\nala ura\nal mont\nad zuki\nach mad\na als\n:" ">\næĪ IJ\n⾨⾨ ⾨⾨⾨\nච¯\nઠ¤\nzi zi\nzac chae\nyom bo\ny q\nwq am\nwhit emountains\nvoteblue to\nvol turi\nus bankstadium\nunil incoln\nund mhockey\numbrella academy\nuc v\ntri mb\ntourism week\ntime les\ntile fish\nthe amy\ntart ine\ntang ina\ntan ith\nstates manship\nsnet tisham\nsmu ggles\nsmir nov\nsky copter\nseptimi us\nschu maker\nsch all\nruth lessness\nru ffins\nred cap\nred bus\nrandall stown\nrad ziwill\npowere dge\npol ari\nperiodic table\npager ank\nowl boy\nover print\nong ate\nno bler\nnaz eer\nnational doctorsday\nmor well\nmoe ed\nmin dyour\nment as\nmclaren vale\nmax joseph\nmat tz\nmary mary\nmapper ley\nmanu shic\nmandi bles\nmahal akshmi\nma ek\nlith os\nlat terly\nlam onica\nkö nen\nkonzer thaus\nkir rie\nkingdom of\nking aroy\nkess ock\nkam aal\nkai ja\njonesc apo\njim jonescapo\njackier obinson\nja siri\nj bf\nism raceway\nis sf\ning space\nhou renergy\nhindr ances\nhay dee\nhann is\nh fuji\ngen erico\ngar ak\nfilli p\nfe ssenden\nfan boying\nenor me\nem placement\nec tin\ndow l\ndont miss\ndms guild\ndivis adero\ndi sher\ndemarcom urray\ndebau ched\ncs ds\ncont actor\ncom ingof\ncher iton\nce mpire\nbo ilies\nbo dd\nblade andsoul\nblack all\nbbclocal ite\nav ito\nau riga\nasa hi\narizon adot\nanton ine\nandre s\namar ket\n( âĢ¢\nðŁĴĶðŁĴĶ ðŁĴĶðŁĴĶ\næľĢ æĸ°\nãĢį âĪł)_\n⼠º\nà¸Ńะà¹Ħภ£\n£ ¨\nzef firelli\nyyj arts\nyu mmmm\nyar darm\nya semin\nx ri\nworld tv\nwild lings\nwi dgeon\nwhel ks\nwe stra\nvir ile\nup selling\ntru enorth\ntime forchange\nthor ning\nthe montydon\nthai day\nth june\ntele mundo\nsurrep titious\nsubstanti ate\nsu dip\nsteph breakfast\nsteier mark\nsteel heart\nst dm\nspar ta\nshu ja\nsha ista\nsequ in\nse tubal\nsalisbury cath\nrubb ings\nrollsroyce cars\nre formulated\nre ath\nquanti fies\npur ity\npro pan\npo stre\npar abol\nop ent\non ye\nneil son\nneal mccoy\nmy protein\nmx f\nmue stra\nmr george\nmou at\nmorpho genesis\nmodic um\nmo dic\nmisidenti fied\nmichael jordan\nmia universe\nmer n\nmelbur nians\nmel ded\nman tooth\nman kin\nmac master\nlou cks\nlitt leneck\nla sk\nkri sto\nkpr clocal\nkipla gat\nki gali\njuan fran\njared kushner\njab ong\nidoli zes\nidesof march\ni the\nhun ny\nhowtogetaway abc\nhospital isation\nhn tb\nhiz bullah\nhar pal\nhan sel\ngy da\ngun dar\ngordon stoun\ngo bows\ngerry mander\ngang aa\nfriday focus\nfly half\nel h\neco school\nea sia\ndomain name\ndoing business\ndesh one\nder ic\ndeni ability\ndebt free\nday u\nd itta\ncush endall\ncun nington\ncud joe\ncu ssons\ncor rode\ncon gos\nchristma seve\ncat rin\ncast ag\ncarfag no\ncar ballo\ncaci que\nc saba\nbuil ders\nbox of\nbom beck\nboe ken\nbeparto fit\nbel lotti\nbarber life\nb zh\nb fa\nautumn statement\nark hu\nard ha\narch a\nar h\nanalog photography\nalban i\nak bari\naeron aut\nad cruz\naa viation\na abb\n? ):\nðŁĺİ ðŁĺĺ\nðŁĺį ðŁĺŃðŁĺį\nê± ¸\nล า\nÑ Ķ\nzon go\nzakhar chenko\ny pn\nwon do\nwomen sbball\nwb tourlondon\nwann see\nvo well\nvig eland\nun sympathetic\nun ilife\nun coupling\num bel\ntivo li\nthibau t\nthe arts\ntechno crats\nte ti\ntal ente\nsugar rush\nsto i\nst immung\nspring has\nspirit of\nspeed art\nsouthern mis\nsnoo zin\nsil ene\nshul kin\nshu pe\nshoul dering\nsh su\nsen dero\nse ery\nscare dy\nroy moore\nro vi\nrann fl\nqi yah\npoly chae\nphi pp\npartic k\norigin ators\noleksi ak\nne shat\nn irs\nmur ri\nmr porter\nmorgan ville\nmon dy\nmike schiemer\nmi fi\nmet zen\nme ers\nmari do\nmar nock\nman olis\nm ny\nluncheon ette\nlud lum\nlincol ns\nle akers\nku bler\nko viÄĩ\nkit tredge\nkilling sworth\nki hara\nju mble\nju cy\njay lin\njackand jack\nj hr\nital yday\nish afoundation\nir regardless\nir ani\niono sphere\ninter states\niman gel\nifi were\nhuman ness\nhri sto\nho ess\nhick ox\ngv m\ngoback modi\ngill ings\ngil key\nged ney\nfull time\nfluoro carbon\nfail ure\nex arch\neric hard\nent rapped\nelliot ts\nel zhi\neh ner\nduci dni\ndu par\ndigg ler\ndiff rent\ndemocrati sation\ndc s\ndavid love\ndatdu debp\nculp ability\ncoffee bean\nco yl\nco ston\nclean seas\nchak de\ncapri sun\ncad dis\nbu ari\nbry her\nbrock ley\nbro ich\nbonniemc kee\nbo ey\nblin kers\nbel and\nbari atrics\nbar ad\nbagu ley\nat large\narri vo\nand wine\nall ter\nak tien\nag ario\nabi erta\nab ike\naad c\nðŁĩ °\nᶠł\nঠĹ\nédou ard\nze ist\nyout u\nyor chard\ny azz\nwo bbled\nwith syria\nweather authority\nwe heart\nwan chai\nvo ynich\nusk asing\nun selfishly\nun encumbered\nul ly\nts arist\ntofthe month\nte cla\nte americ\nsp hil\nsneaker pedia\nsku b\nsi kit\nshort lived\nsch rodinger\nsas kag\nriver kings\nreson ators\nre ordering\nrashmi kamand\nrandom ize\npush button\npri ons\npre party\nportrait challenge\nphil lauri\npha go\npeople with\npee ked\npat man\noste ology\nonthe spot\nontari ondp\nonair romeo\nomni pollo\nnuclearbla steu\nnu un\nnsc c\nmor lock\nmodel trains\nmccl urg\nmaxi mization\nman ser\nman jit\nman booker\nlud wi\nlit as\nlisal oeb\nlin enews\nleop ar\nlennon nme\nlb su\nlag man\nla skar\nko lod\nkingdom comed\nke uk\nkap uskasing\nkan eda\nkal kaska\nk jl\njohn sburg\nidoli sed\nide v\ni muk\nhind head\nhem nes\nha ins\ngazette er\nfuture s\nfox x\nfox man\nfore going\nfjord norway\nfirst snow\nff ington\nexpun ged\nesp in\nesh re\nend humantrafficking\nen tailed\nembarrass your\nele an\ndro x\ndrmike murdock\ndow ska\ndi radio\ndef jam\ndeben ham\ndanede haan\ncor darrelle\ncommunity garden\ncol clough\ncochin ita\nclear out\nchurch man\nchil lest\nch aley\ncas sel\nc siriano\nbrook sby\nbron y\nbo cking\nblind cat\nbi aus\nbenig ni\nbat ton\nbaskin robbins\nbang ko\nbag gie\naxi oms\naund h\nas ba\nartu ria\nango stura\nand real\namwriting scifi\nadobe premiere\nabsr dnews\nabse con\n: âłĢ\nðŁĵ½ ï¸ı:\næ ¤\nz auber\nworkout motivation\nwood stown\nwill hill\nwe ste\nve don\nvar ta\nunder wear\nunder insured\nun gal\nu mofficial\ntri ot\ntou rers\nton go\ntiv at\ntish man\ntic s\nti gnor\nthe time\nthe ic\ntej eda\nte emo\ntatu aje\nt acy\nsö der\nsur anne\nspace museum\nsou lection\nsoci ali\nsm ys\nsky watcher\nsense of\nsecret garden\nsde france\ns studio\nrho dolite\nrene au\nrecru iter\nran vir\nra oul\nprotom artyr\nproof of\nproduc tive\npriz ren\npretty woman\npe can\npark chester\npar in\nopp ong\nmusic studio\nmun z\nmis laid\nminu ets\nmichael angelo\nmic o\nmathis fun\nmar wick\nmal fi\nmaeyoung classic\nlee anne\nl cem\nkn h\nki ren\nki am\njob vacancy\niwant one\nip cpr\ninge xpo\nilu sion\nil ament\nifl science\nhutch ens\nhe parin\nharyan vi\nha sani\ngleneagle shotel\ngir lup\nginny goodwin\nfu z\nfrit ts\nfin ito\nfelicity huffman\nfan sn\nfair hill\nencroach ments\nel of\ne town\ndö ner\ndow dell\nder ksen\nde pasquale\nczecho slovakian\ncox ed\ncoming up\ncholmon deley\ncentime tre\ncaz adores\ncambi um\nbur dwan\nbun z\nbug ü\nbu gli\nbr amb\nbo ell\nblu rofficial\nblack fire\nbelle vu\nbeauti fu\nb mbf\nb cause\naugu stan\natal ant\nal shaq\nairdrie onians\na experience\n-- (\nðŁļ¶ âĢįâĻĤï¸ı\nðŁĺŃ ðŁĺĺ\nðŁĮ¿ðŁĮ¿ ðŁĮ¿\nìķĦìĿ´ ìĺ¤ìķĦìĿ´\nê³ ł\nâĹ ĺ\nঠ¹\nе л\nál bum\ny vel\nww jd\nwrath ful\nwil i\nwal is\nvampire the\nv ys\nun molested\nul ars\ntri aled\ntrain to\ntok ki\nto tty\ntn leg\ntech land\nteam red\ntar jei\nsummer bee\nsteam newrelease\nss ow\nsoor ma\nsomers worth\nsimulation friday\nsie grist\nsho velling\nshag ging\nservic ed\nsax a\nrom ford\nroch dal\nriv alling\nret te\nregre sa\nreal martin\nras gulla\npru frock\npicto graphs\npi ad\nphal anges\nparachu tist\npaddy mcguinness\npa iz\nout eni\noo zed\nny arla\nnic anor\nnatu ur\nmuse i\nmu ddling\nmu ad\nmr teller\nmo sis\nmitro vica\nmispron ounced\nmele ch\nmechag odzilla\nme es\nmar soc\nmali m\nlon avla\nlin sanity\nle usm\nlam elo\nlake garda\nkir at\nkal ka\njo bi\nindianoil cl\nin brotherhood\nhippo griff\nhee jin\nham worthy\ngreen spring\ngor oth\ngil ham\nge bran\ngast rectomy\nfe stu\nes miles\neasy recipes\ndu mble\ndj shadow\ndennispra ger\nd ils\ncrimin ologist\ncork coco\ncop i\ncompa ñ\ncome stible\nchou teau\nchi uni\nchagu anas\ncas ali\nbur sle\nbruce willis\nbook mail\nblack lab\nbint aro\nbenefit uk\nben dera\nav or\nat us\nangu sti\nakhi lesh\nadam ski\nactiv ites\nðŁĴĹðŁĴĹ ðŁĴĹðŁĴĹðŁĴĹ\nðŁĮ± #\nê± ¸\nç§ ĭ\næ´ ¾\nâļ½ï¸ı ðŁijį\nyo shis\nww d\nwis d\nwage red\nvishnu vardhan\nvis cardi\nve k\nuniversit ät\nunderthe sea\ntin plate\nthewhisky agogo\nthec ct\nthe writ\nterry pratchett\ntech ne\nteam no\nteam fortress\ntch ouk\nst birthday\nsqu am\nslim ited\nsli din\nskillet music\nshopp ers\nself defence\nsaxmun dham\nsa ipa\ns van\nru sky\nrosel awn\nrene sas\nreen actor\nre classify\nradnor shire\npupp i\npo dunk\nplu med\nplat ja\npic tus\nperpe rennial\npar sec\npan chi\np ined\nou saf\nori el\nom al\noldd ominion\nnow available\nno st\nnga io\nneu chatel\nnepen thes\nnca af\nnational french\nmo dc\nmid nighter\nmicha elek\nmichaelek lund\nmc nee\nmacron utrients\nly kes\nlooooooo ool\nlim my\nli bin\nland shut\nlab ine\nla ar\nkron wall\nkatat onia\nkad ha\njonath and\nj annis\nit stony\ninner visions\nimmort elle\nimer ini\nig ur\nhomedecor ideas\nhim ley\nhert shour\nhawk sley\nhard point\nhar perperennial\nhan auer\ngyp sophila\ngradu ationday\ngow land\ngirl gang\nfy f\nfranç oise\nfoli ate\nflogging molly\nfil adel\nenjoy ably\nempor io\nechel on\ne zi\ndun cle\ndr michael\ndp ms\ndaysof blackcosplay\ndau gav\ndarren shan\nd se\ncri sing\ncri bbins\ncontamin ates\ncn traveller\nclipper nation\ncinde rel\nch ye\ncastell ana\ncarly aquilino\nc vs\nbreath itt\nbrass eri\nboston comiccon\nbor delon\nblon din\nbetter makeroom\nbenedic to\nbathy metry\nbal tz\nbac carin\nau gen\naster y\nasic samerica\nas thana\nalekh ine\nacci esfc\n( [\nðŁļ ®\nðŁijį ðŁijĮ\nðŁ¥ £\nçĶ °\nâĢ¢ ~\nz s\nz ette\nyoung boy\nyan ko\nwomen supportingwomen\nwat l\nw bir\nvirgini awoolf\nveer u\nultr amodern\ntu ur\ntrun cate\ntru ef\ntri pe\ntof te\nte cn\ntape worms\ntac tix\nta pley\nsut til\nstrong side\nstratfor don\nsrisri u\nspec kle\nsp art\nsim cox\nshannon bream\nshal it\nsc lay\nsam r\nryan leslie\nroyal visit\nrond out\nrol lovers\nroc codi\nreis z\nre dragon\nrath down\nr thk\nqu ello\npre science\npen ha\npen do\npatt ani\nou thouses\non nnn\noftheyear hma\nob t\nnigel barker\nnew church\nnau s\nnan tuc\nnadiaz anelli\nn spra\nn mn\nmustang nation\nmulti drug\nmonster monday\nmon ch\nmo yam\nmigrant sday\nmicro blogging\nmel robbins\nmedi vac\nmecklen burgh\nme dak\nmax pain\nlun i\nlubav itch\nlock ridge\nliver disease\nleed suni\nl arios\nkil twalk\nken naugh\nke mlu\nkatsu shika\nkat anning\njuxta posing\nje ay\njaz baa\njal gaon\njac co\nilike samizayn\nide c\nhic hi\nhapp s\nh km\nh ci\ngyna ecological\ngow ans\ngottacat chemall\ngood work\ngene wilder\ng tourney\nfu qing\nfresh prince\nfarn don\nfamili arization\nfairground snola\ne chev\ndul verton\ndeer hurst\ndam ie\ncro z\ncou par\ncorrespon dences\ncompe tion\ncoc ci\nchu uya\nchin skiy\nchenonce au\ncbr ne\ncar na\nc cat\nbu suttil\nbox fish\nbon jovi\nbin u\nberk off\nbe ere\nbe com\nbbc surrey\nbai ze\nb johnson\nastro physicists\naden auer\nacqui esce\nacqu it\nacomic con\nðŁļ ķ\nðĿĹ ľ\nä¿ ¡\nè te\nyaari yan\nva ghela\nuse fully\nup asana\ntrudeau mustgo\ntransport ation\ntor ock\nton kinese\nti os\nthusi ast\ntheatre ldn\nteab agging\ntaym or\ntake a\nsuper powered\nsun birds\nstru b\nstefano gabbana\nstand on\nsp liff\nsp ersons\nsp ds\nsl int\nsidd al\nsher pas\nroa sted\nrid ler\nri gid\nrheu matologist\nquis ition\nproro deo\nprophe sies\npro static\nprithvival labh\npreste igne\nperfect gift\npeniel shin\npaw ling\npan get\nosle isure\nosiris rex\nneon ate\nnational trust\nmrs browns\nmgsv tpp\nmerci an\nmay nor\nmar cher\nmaquo keta\nman by\nmall inson\nlo kk\nlis gar\nla sley\nla ho\nkwq cnews\nkir ya\nke vo\nk lee\nju se\njebe diah\njagu are\nja ib\ning man\nigh tham\niam dr\ni osis\nhu day\nha yy\ngwand shows\ngun safety\ngov mattbevin\ngondo liers\ngilded balloon\ngen u\ngar di\ng fd\nfor hillary\nflo ssy\nflo bots\nfeel ies\nelvis duran\nelrey theatre\nedi ger\ndri ss\ndram as\ndeton ates\nde broy\ndad os\nd sey\ncoy gig\nchro mis\ncharge back\nchapelhill shooting\ncanadian opera\ncal vet\nca hier\nburo happold\nbu ton\nbru ery\nbrawl stars\nbra ine\nborder patrol\nbirmingham pride\nbeth nal\nbait fish\nasqu ared\nar ue\naon ach\naldubin italyday\nal dia\naksh ar\nablu tions\nðŁĵĮ #\nðŁıĢ ðŁĴĻ\nᣠĴ\nzacchae us\nworldbook night\nwil fried\nwest king\nwat ere\nwasi lewski\nvent ers\ntrac on\ntony pandy\nthene ed\nsy re\nswe ene\nsw offord\nsuper majority\nsuper mac\nsun it\nsuje eth\nstyle by\nstu voice\nstate oforigin\nske wing\nsj sj\nshey enne\nsen ge\nschool master\nsch itt\nsaf mradio\nro secity\nric kowens\nrei vers\nr saf\npuru lia\nprep star\npon tos\nphoto album\npharo ahe\non at\nomni potence\noffice dog\no townofficial\no cul\nnative breeds\nnam askar\nnach richten\nmy fwc\nmor phia\nmargare ta\nma aaaa\nlon gy\nlin ka\nlang worthy\nkra hn\nkale v\ninstac ar\ninser m\nhyper ventilation\nhopen ot\nhale wood\nhah ne\ngre aser\ngrand tour\ngrac eville\ngon zo\ngo via\ngo bel\nfun atwork\nfree mind\nforbe stech\nfold sofhonor\nfiji airways\nend ry\nemo sh\nelly se\nelizabeth warren\nec is\ndush ku\ndrinkal sace\ndown with\ndit or\ndialo gic\ndg and\ndevop ssummit\ndemocratic debate\ndele tions\ndel sol\ndeath rock\ndat acom\ndal zell\ncute off\ncompu ter\nci vita\nchum phon\nchemain us\ncaliforni adre\nbro ten\nbou ch\nbosch global\nbor r\nbon ta\nbhatt arai\nbhar vard\nbecau sey\nbe scot\nbal ks\nbal ama\nbad chicks\nay ato\nat rade\nas kim\narro yo\nagil bert\nadam cole\nacou sa\nac ist\na eda\nðŁĺ° ðŁĺ°ðŁĺ°\nðŁijĮðŁijĮ ðŁijĮðŁijĮ\nðŁ¤¦ ðŁı½âĢįâĻĢï¸ı\níĶĦëł Įë\nا Ûģ\nzeyne pab\nzan ski\nzack y\nworlds best\nwool ard\nwomen schampion\nwom bourne\nwilliamj hague\nwill l\nwad ham\nvari ances\nva q\nv angel\nukcoach calipari\nuconn football\nu oy\ntten nis\ntre sco\nto pre\nthisi sn\nther ob\nterran ce\ntam ie\nswa im\nsun foil\nstill withher\nst aser\nspoke smen\nspencer ville\nsouth wards\nsheldon ian\nseac at\nsaltwater fish\nroom ed\nroman owski\nrob art\nreceip t\nre shuffling\nrd grade\nrazor blade\nran j\npyrr hic\nplay dough\npide mia\npar tey\npar menter\np batour\nou in\noooo ps\non ald\nom ish\nmusic in\nmur ci\nmo gami\nmispr inted\nmisanthro py\nmine ers\nme iling\nmark land\nm smith\nliv cathedral\nlex an\nle ane\nla fia\nko daly\nkit chee\nkir sch\nkids first\njan cic\nite mized\nini go\nimg academy\nicosa hedron\nhuman itas\nho soda\nhi was\nhe wes\ngreatcomet bway\ngerman yin\ngenuin eness\ngentle mans\ngaz al\ngau zy\nfun tastic\nfm j\nfilmin dustry\nfbun ational\nfa enza\nest at\nenjo ined\neh den\nearth sci\ne ffa\ndrew gulak\ndow ni\ndo ti\ndiv y\nder oy\ndemon ic\ncy cad\ncrowned heads\ncon text\ncon nally\nclu te\nchristi any\ncf g\ncatandu anes\ncanecor so\nbt me\nbrussels attacks\nbriti an\nbook art\nblock house\nbett in\nbalu sters\nbacchan alia\nbab ich\nb awards\nash eville\nap ix\nago da\na eu\n- âłĢ\nðŁĻĤ ðŁĻĤðŁĻĤ\nâĿĦï¸ı #\nâĻ¡ "\nâķ² âķ²\nઠķ\nÅĤ o\nyemen crisis\nwhe ath\nwater conservation\nwa iner\nvir das\nvic ent\nviad uc\nvermel ho\nvent agli\nvas ko\nvamp y\nunion station\ntwin ed\nturn again\ntunder ground\ntu lio\ntu azon\ntomy future\nthe brand\nthe better\nth ark\ntaun us\ntal aq\ntak acs\nt sle\nsyracuse chiefs\nswith amazon\nstu gotz\nstom orrow\nsri mad\nsm kc\nsimpl yaj\nshan em\nse os\nse alions\nsanc lemente\ns meal\nroby ns\nrib oud\nrepri sals\nrecalcit rant\nre states\nquar ies\nq eh\npromo cion\nplo it\nplay listed\npine grove\npin edale\nparty in\nparaly zes\nopen call\nop tionally\noffici ates\nnum erically\nnow lin\nnov itiate\nnew designers\nneer u\nne mec\nmyco plasma\nmister giuntoli\nmil stead\nmarcel kittel\nmag ician\nm fat\nlook man\nlat ah\nlang i\nla ville\nla ury\nktv tamil\nkra vet\nkor ona\nkis d\nki ai\njim breuer\njax on\nindi g\nhight stown\nhei der\nhard wa\nham ida\nha jj\nha insworth\ngreatday tobe\nge bre\ngabbie show\nfriend sforlife\nflori bunda\nferment ers\neuro sport\nes el\nepic urus\nengel mann\nelo cution\ndor tch\ndj jazzy\nda gher\nd á\nd illian\ncuti eee\ncup w\ncrp findia\nconsul ta\ncom res\ncollective evol\nci dg\nchur ns\nchumb awamba\nchar lier\nchap eron\ncf adden\nce arch\nbru mmell\nbox ed\nbook talk\nbla upun\nbe ja\nbar acoa\nback sliding\naver ts\naudit or\nat gm\napri ze\nan day\namelior ate\nalo se\naddis combe\nab bate\n: _\n% (\nðŁļ¶ ðŁļ¶\nðŁĺ³ ðŁĻĪ\nðŁĵļ ðŁĵĸ\nðŁĴĻ âļ¾ï¸ı\níķ ©\nãĥ©ãĥĸ ãĥ©ãĤ¤ãĥĸ\nÅ¡ a\nwroc ÅĤaw\nworkplace safety\nwex gaa\nwakat obi\nunc charlotte\nu ws\ntwic ulate\ntruthor dare\ntil lett\nti ma\nthisi swa\nther y\nthanks forthe\ntal ley\nsyco phantic\nsubsidi sing\nstopthe bans\nstandard bank\nsri xon\nspring awakening\nspin out\nsp outed\nson ship\nsi ma\nshra van\nshel p\nseok ang\nsak ha\ns enda\nro ki\nrelinqui shing\nrecre o\nre vers\nre interprets\nram se\nra so\npreservation ists\npp ms\npac bio\np nj\noh pa\nob it\nny rb\nnottoo young\nnonleagu epaper\nnichol ls\nnew wave\nnancy sinatra\nn phs\nn lo\nmum life\nmou vement\nmotor park\nmo dak\nmo ama\nming kki\nmik kel\nmick o\nmi mar\nmi drash\nmeli ora\nmcmick en\nmatch boxes\nmase field\nmac donald\nly all\nleot ards\nlasvegas shooting\nla hav\nkon st\nkeeptexas red\njuli usc\njointeam alpha\njar mo\nj ila\ninner city\nin ala\nig uns\nhy les\nheartsof oak\nhear ses\nharam ain\nhamilton island\nguatem alans\ngil boa\ngh d\ngb hockey\nfri berg\nflori daf\nfe tid\nextrapol ation\nestac ado\nerne sto\neddi evanhalen\ndragonball fighterz\ndragon stone\ndiv aio\ndiame trically\ndf bharvard\ndecrimin alizing\ndais ley\nd ites\nch ko\ncebu ana\ncas elli\ncarri acou\ncardo za\nca pet\nbur qas\nbru it\nbridle way\nbr yl\nbir tley\nbe toys\nbais den\nax xx\nastru c\nas ophia\nas lo\nartist center\nani moto\naf shin\nadam stown\nabra sions\nðŁĻı ðŁĺĩ\nðŁĺ¢ðŁĺ¢ ðŁĺ¢ðŁĺ¢\nðŁıĬ ðŁı¼\nðŁİģ ðŁİīðŁİĪ\níĶĦëłĮë ĵľ\në°° ì§Ħìĺģ\nê³ł ë§Ī\nà¹Ģ à¸Ńà¸\nyoung buck\nvol com\nver itas\nvam shi\nty mon\ntwi xt\ntwe ener\ntoxopla sma\ntom riley\ntoby keith\ntho sp\nthe de\nte tt\ntales of\nsuicide squad\nspend in\nslo at\nsling sby\nsky one\nsjo gren\nschool innigeria\nrv f\nru ffs\nrtx rt\nrfd tv\nreden bacher\nre past\nrat as\nrai b\nquer cia\npu ku\nprincipe ssa\npresiden to\npo tage\npo stive\nover acting\nor uk\nof lu\node brecht\nnaruh ina\nmyprotein uk\nmckis sick\nmatriarch al\nmar ito\nmand vi\nmadrug ada\nling ling\nkin ko\nkai bab\nkaf a\nk wave\njon favs\nje g\njanh vi\ninau t\nim pulse\nilove u\nih in\nhoo oo\nhoo ge\nhoney z\nheck mond\nhe ita\nhallucin atory\ngu zzo\ngreen horn\ngirard perregaux\ngee zers\ngadge try\nfri son\nfoot way\nerotic romance\nent onces\nen trance\nen shrine\nel mina\nec centr\ndu mer\ndomestic workers\ndok lam\ndj danny\ndis quieting\ndis continuation\ndin is\ndigitalleader sa\ndiap ering\ndeleg iti\ndav adi\nd me\ncow dray\ncopp ens\ncon tru\nclair vaux\ncf ps\ncav endish\ncate chi\ncar ina\ncar agh\nbuster love\nboy shoops\nbhu pend\naw restaurants\nauto body\natlan te\narticul ates\narri etty\nan tero\namur thy\nalde burgh\naic ha\nadel hills\nacadem ical\nab negation\n(^ ^)\nĸ ðĿĻ\nâĨ Ĺ\nË Ĩ\nyoak land\nyl ancs\nyakov lev\nx terra\nwheeling nailers\nwendy davis\nvintage traffic\nvari ate\ntransdayof visibility\nto pley\nthe gabbieshow\ntan in\nswimswam news\nsven son\nsubstanti ation\nstat man\nst birthday\nsportsday hs\nso frock\nsixnation srugby\nsin motion\nsd sc\nsaraha ines\nro vs\nring land\nrecircul ating\nray com\nrav ings\nrail hawks\nq ri\nprogram mer\nox chambo\not ss\non thisdayinhistory\no dum\nmo graph\nmind set\nmic om\nmar thar\nmanne quin\nman ak\nmac gillivray\nlg p\nlam est\nknu dson\nklai peda\nkenny florian\nka ap\njust because\njose altuve\nivan chuk\nirish film\nico splay\ni lea\nhu ffing\nhorton ville\nhe izer\nhaudenosau nee\nhanover ian\nh atim\nguer rera\ngotham ist\ngoe tia\nglyndwr uni\nglaci ated\ngl hs\ngit ana\ngec dsb\ngal mudug\nfizz er\nfin c\nfebu ary\nfatt ened\nexplore your\nes ns\nep ting\ndot pict\ndom usic\ndis locations\ndd newslive\ndanis ordo\ndai fuku\ndaener y\ncurb appeal\nclear lake\ncbc toronto\ncat ley\ncase break\ncarned dau\ncarla hall\nbye e\nbuild series\nbook sof\nbollywood flashback\nbloor dale\naz umi\naw newyork\nat ag\nas oli\nas ok\nartist oftheyearhma\nard ening\nanton ym\nanthropom orphi\nanne of\nanatom y\nanast asi\nan new\nalice keeler\nalber talli\nalai ka\nal anc\naccru al\nðŁijģ ï¸ı\nðŁİģðŁİģ ðŁİģ\në IJ\né»Ħ åŃIJéŁ\nاÙĦ Ùģ\nyuvraj singh\nyi ff\nx mend\nwood workers\nwing ert\nwanti rna\nwal ch\nvol pi\nvit abio\nvirtuo sic\nvir na\nvici ous\nval ise\nun availability\ntx sen\ntx f\ntir zah\nting u\ntime code\nti ant\nthe bige\ntardi grades\ntafo ya\nsuper conductor\nsu ta\nstra db\nstradb ally\nstand byme\nsong do\nsm tg\nskylar grey\nsa pperton\nry er\nrush koff\nrural women\nrecon figuring\nre life\nraun ds\nrajon rondo\nport ents\npon tard\npok é\npoetr yeileen\npic one\nphoto weather\npatron ise\npatric kk\npastor a\npandor a\npand avas\not sego\nomni vores\nok san\nofthe future\nnumb ingly\nnor by\nni mh\nnew snl\nneph jc\nmy poetryeileen\nmus ice\nmin as\nmicro waved\nmicro chip\nmev simi\nmccar roll\nmc nerney\nmash ed\nmark w\nliv v\nl annon\nks ss\nkno win\nkigur umi\nkho jaly\nk fans\njun gler\nji han\nja quet\nja ay\nisti gh\nip sf\ninau ghton\nhmrc govuk\nheme path\nhave eru\nharrystyle slive\nhang outfest\nha ddy\ngru newald\ngou de\ngli ese\nglam rock\ngla dy\ngif tw\ngar ms\nforti ssimo\nfor girls\nfon zi\nfollow spree\nfamily matters\nextram ile\ner adi\nentro pic\nemo cione\nef its\nee es\ndurgap ur\ndom ar\ndillian whyte\ndi bles\nderri ere\nde young\nconquistad ors\ncon cour\nchip sets\nchim o\nchi vo\nchester races\nchang jo\ncan ticle\nbur gle\nbraban tia\nbc tv\nbattic aloa\nbas ks\nbar ve\nbal raj\nasympto tic\nasbury park\namar illa\nald ar\nagr itech\nabet ted\n> ,\nðŁĴĢ #\nðŁĩŃ ðŁĩ·\nëĤ ´\nãĤ¯ ãĥª\nÛĮ Ùħ\ny wc\nx ms\nwire line\nwee h\nventagli diparole\nve ining\nv show\ntv patrol\ntt ol\ntri pof\nting les\ntho tel\nte sch\nsplat tering\nsong pop\nson dre\nsom one\nslowh and\nsi man\nschool room\nsch ek\nsarah h\nsain ty\nsad day\nrubi u\nrosal inda\nrig our\nrat tigan\nradio graphic\npublic enemy\npost le\nposse ssor\npoi esis\npn k\nphoto synth\nparap sychology\npar due\npad mé\nop ie\nond kar\no swin\nnoo h\nnj tv\nnewcastle upon\nnag ore\nn gala\nmu sco\nmode ste\nmid oriya\nmi uccia\nmedia art\nmatri archy\nmary kay\nmalak off\nmakeit rain\nlight up\nli ath\nlehigh ton\nku lik\nkozlovsky d\nkiz ito\nking swinford\nkenner ly\nkees maat\nkar g\nk roo\nk love\njust transition\njo zy\nj fe\ninnovator s\ning arden\ninf ur\nhor vitz\nholo type\nhof meister\ngregg sofficial\ngre if\ngo zags\ngl antz\ngg es\ngb ta\ng wer\ng mit\nforrest griffin\nfarra go\neviscer ated\neurope ana\ndura bles\ndu bber\ndrug gie\ndig nam\ndan ville\nd hir\ncoa sted\nco ill\nckin non\ncaul drons\ncambu ur\nca zz\nbou dhan\nbio gen\nbenid or\nbelieve that\nba ai\naw ash\nask twitter\nar mers\nanonym ous\nana erob\nal the\nal pro\nal adee\nafranc is\naction jackson\n! \'.\nħ ¸\nðŁIJį ðŁIJį\nîĦ ħ\nìĦ¸ ìłķ\nçĻ ¾\nà¹ĥ à¸Ĭ\nà¸ķ à¸Ńà¸Ļ\nà¸Ĥ à¸Ńà¸ĩ\nرÙħض اÙĨ\ny is\nwürt temberg\nwokeup likethis\nwind horst\nwim wear\nwc n\nwc m\nwan ag\nvow les\nviva an\nvisit korea\nvi ed\nvel oz\nvain queur\nuv ella\nunder sheriff\ntuesday shoesday\ntuber ous\ntraf studios\ntoo fan\nthose who\nthe ar\nteh rani\nte pes\nsummer love\nstates b\nsta ste\nspal ted\nsno bbish\nshar kie\nshannon poe\nsh ick\nse pik\nsc m\nsay id\nsan sad\nsa hu\ns dorff\nroyal airforce\nroth ley\nremb lant\nre share\nplu shy\nplay on\npg itte\npent z\npe aker\npaid leave\np bo\nover hangs\noo dy\nolemiss rebels\nock ham\nobserv ator\nnel da\nnecess itated\nn nuh\nmorning walk\nmol as\nmin de\nmill ner\nmanufactur inguk\nmanta she\nmalcol mn\nmaj ili\nma ute\nlook n\nle ora\nlabel le\nkü bler\nku ha\nkis sthe\nki ara\njoannak rupa\nj scott\nital a\nirish cancer\ninter library\nindy statefair\nin berlin\nichin ose\nhyper dimension\nhs j\nhouston flood\nharrell sllc\nha kim\ngup te\ngrenadi ers\ngreatesth its\ngame pro\nfu rio\nfly spicejet\nfire work\nfini stere\nffd pgitte\nfed soc\nfe bs\nfanc ourt\nenki du\ndream wave\ndon wood\ndevdutt myth\ndefer ring\nde jah\ndand elion\nd hinchcliffe\ncon gra\nclemson tigers\nch retien\nch itten\nch assi\nceru tti\nce b\ncanvas back\ncall eri\ncad wellpark\ncab infe\nbro aches\nbon nin\nbk d\nbin chy\naz ules\nays garth\nay ee\nathen s\nas mbs\naru ban\nari ffin\nar uk\nam rap\nall inclusive\nall hiphop\nal die\nair tran\nafro basket\nabor ts\nab ounded\n@ -\nðŁĺĤ ðŁĺĴ\nðŁĴĽ âĿ¤\nðŁij ²\nðŁ¦ Ĵ\nðŁ¤ ¾\nðĿĻ ĸðĿĻ\në´ Ħ\né»ĦåŃIJéŁ ¬\nâĿ¤ï¸ı ðŁĴĭ\nâĢ³ ,\nÛĮ ر\nÍ Ł\nzi arat\nyoshi o\nxia oping\nx wa\nwether ill\nwelcome tomy\nw wn\nvoc ational\nve endam\nv league\nusp sa\nun questioned\nun counted\nucla health\nty le\ntor rilla\nthé âtre\ntas o\ntaran is\ntampabay rowdies\ntal u\nstro mat\nstart les\nst ca\nspend thrift\nsnu gs\nsm m\nslobo dan\nser fdom\nse fo\nscifi fri\nscience spo\nsanger institute\nroccodi spirito\nrc p\nrandom ization\nplac ita\npioneer woman\npau wels\npate ley\npalo alton\nonetown oneteam\nohi om\nobi m\no gni\nnw sc\nnight in\nnew sm\nnaz ri\nmrdan walker\nmothersday gift\nmonstr ance\nmi stery\nmashre q\nma or\nlene han\nkur land\nku bik\nki kim\nk gl\njoey ryan\njason mohammad\njamaic a\ninterior style\nindiegam elover\nim modest\nik aw\ni hat\nhyper cube\nhump ty\nholme sdale\nhod kinson\nhk jc\nhemi spheric\nguigno l\ngranad areports\ngran te\nglon ass\ng djb\nfra port\nforte an\nforesth ill\nfli pping\nflam b\nfeed thefuture\nexperiment ally\nestim ators\ner manno\neo sio\ne bury\ndivine mercy\ndistinc tiveness\ndiaspor ic\ndelhic apitals\ndc wx\ncv h\ncsu sm\ncray ton\ncoon an\ncolom bo\nchris ber\nchak an\nchai fetz\nc fw\nbuy ck\nbri j\nbre mbo\nbou zouki\nbe sty\nbarry wyman\nas me\nart glass\narrog antly\napologi a\nany as\nantony cotton\namon te\namar is\nam ining\nal aphilippe\nafter hour\nad resse\naccor ding\nðŁĴĥðŁı»ðŁĴĥðŁı» ðŁĴĥðŁı»\nðŁIJIJðŁIJIJ ðŁIJIJ\n⾨ ðŁijij\nÃ¥ le\nzu manity\nyou make\nyearswith out\nye lection\nyas ar\nwine pairing\nwi ffle\nweekly chris\nwee ee\nvo tol\nvar vara\nud ta\ntouri smb\nthi steam\nthat matters\ntemer loh\nsw mrs\nstrac zynski\nso ory\nso hrab\nsky lit\nsho red\nsan tis\nrip saw\nretro s\nrem nick\nre breather\nre attach\nre appointed\nq tip\npo cruises\npen at\npatho logic\npar ichay\npang ong\nneiln mukesh\nnawab shah\nmye verything\nmor na\nmo hun\nmen inga\nmc gibbon\nmar ins\nmann ington\nmall o\nly rik\nlor dan\nlitter ally\nlamar que\nko haku\nkew science\nket ches\nk pol\njuli ef\njap onic\nit ches\nir ano\ninver keithing\ninclusion ary\nimti azali\nil ite\nhigh flyer\nhappy times\nhant scricket\nhani ya\nhan kinson\nh ma\ngo lovin\nget n\nfüh rer\nfou che\nfl on\nexoner ate\nentic ement\nengv snz\nenglishri viera\nemp tive\ne fre\ndz mm\ndo don\ndi pan\nder mo\nde hn\ndale e\ndak o\ncun o\nctvnews vi\ncon vocations\nck x\nchriso cearch\ncharn wood\ncathao irleach\ncapit ulate\ncac p\ncab over\nc elife\nbun ya\nbrue gger\nbook ers\nbon nier\nbang olufsen\nautisma warenessmonth\narc gis\nand relton\nan fer\namo han\namdiabete sassn\naf oo\nab m\na stig\na jai\nðŁĺ¢ âĿ¤\në³´ìĿ´ íĶĦëłĮëĵľ\nâĿ¤ï¸ı ðŁĴĻâĿ¤ï¸ı\nह म\nzoom ies\nzo is\nzeynepab dullah\nyour welcome\nyou them\nyear with\nyard sale\nwhathapp ened\nwedd ingo\nwc ps\nw shed\nving t\nvic ary\nutu san\nus arm\nugar te\ntom ate\nto ten\ntin da\nti angu\nthomas mtv\nthelu mineers\nsu ya\nsteven rinella\nspeci fiers\nske ete\nsk ru\nsign posted\nse bts\nsch ut\nsar son\nsanti am\nsam ahan\nsafe hands\nry ou\nrock xx\nro get\nrevul sion\nresi d\nre tooling\nre ple\nradi ophonic\nr fafighting\npol lies\npf aff\npatriot sfight\nparty bus\npal afox\npack age\nott ley\no zan\nnor k\nnice comms\nnh se\nnevere ver\nmulti point\nmu kesh\nmovie posters\nmolen beek\nmil ward\nmid nap\nmick jenkins\nmen tosa\nmedemb lik\nmber gen\nmb ag\nmas ar\nmanu fc\nmane ki\nmakh ni\nmaced on\nlove gwendoline\nli sowski\nlafour cade\nl cb\nkol lection\nkey biscayne\nkar son\nk dr\njo bo\nj ope\ninsu fficiently\ninol vid\ning on\ning lives\ninde mann\nhy pn\nhuuuu ge\nhigh tide\nhel mick\nhari ini\nhar alson\nha wes\ngy ar\ngaslamp quarter\nfer ulic\nfarah zeynepabdullah\nfa aa\nex pul\nes al\nequatorial guinea\neo tters\nempire ofthe\nelie be\ne wo\ndon ts\ndeme sne\nde paola\ncu o\nconvers as\nconvers ant\nclaiborne farm\nchlorop last\nchi odo\nchand an\ncan ape\nbur net\nbrutal ities\nbio chem\nbin ford\nbiennalear te\nbibi ana\nbernas coni\nazz ura\nau ber\nar pan\nanuradha pura\nanton ini\nan kur\nalcal de\nal gha\naflo or\n\'\' \'\'\nðŁĺı ðŁĺıðŁĺıðŁĺı\nÙ¾ ت\nzy g\nyy ceats\nwol v\nwi di\nwhale bone\nweare mg\nwater week\nvilla vicencio\nver in\nva jazz\ntre the\nthisweek in\nthefutureis female\nthe chef\nter rel\nte waar\nt pr\nsujeeth sign\nsu lay\nspon d\nsouth wales\nso ami\nsh ko\nse idl\nsc rowder\nsag s\nsad u\ns science\nrow les\nrockingham uk\nreturno f\nqu avers\npro mesa\npolice women\npo kok\npet terson\npa as\nor jan\nonly badchicks\noff broadway\nnwc fl\nnsw labor\nnoble woman\nno control\nnic asio\nmy sskin\nmusic to\nmo hin\nmil ord\nmichal is\nmckit trick\nmari ann\nmanit ob\nm sau\nlove yall\nletgirls learn\nlakel ouise\nkuro o\nkni ghting\nkel laway\nkashi wa\njudi dench\njon benet\njessiej decker\njanet lynne\nin dro\nilo vela\nil ar\nicon forhire\ni blis\nho eness\ngo ans\nfun palaces\nfre port\nfinn skata\nfil ion\nfare ast\nev y\nelasti girl\nei fs\ndigital uk\ndi gue\ndi bb\ndar gan\nczar ina\ncy rene\ncre ggan\ncr da\ncor ra\ncon nelly\nchan y\nce elo\ncaper ca\nboysand poets\nborder lines\nbol lettieri\nblue plaque\nbar isan\nb wc\nb life\navi ano\nav ang\nauden shaw\namoe bamusic\namerican eagle\nacro phobia\nðŁĺĤ ðŁijĮðŁı»\nðŁĺ± ðŁĺŃ\nðŁĺ« ðŁĺĤ\nðŁĵ Ķ\nðŁ§ľ âĢįâĻĢï¸ı\nå¿ Ĺ\nâľĪï¸ı #\náĬ ł\nн а\nwith confidence\nwh ooooo\nvu ren\nvik ki\nvie ille\nuru guay\nunivers als\nuk garage\nuigh urs\ntrans mute\ntr ys\nti dd\ntheme parks\nthaic ave\ntent acled\nt suru\nstyle inspo\nstani forth\nsi yah\nshar ris\nshah zada\nsell ick\nselfcare sunday\nschwe iger\nscar olyn\nsas co\nsak ta\nsa jal\nrosar ia\nric kett\nr ale\nq asem\npower apps\npir ri\npeter crouch\npeculi arities\npap ineau\nover stay\nout strips\norange man\nopto electronics\nny er\nnow isthe\nno win\nneu star\nmur rays\nmon serrat\nmoisturi zes\nmg u\nmcgi v\nmat ai\nmam un\nmain ieri\nlu ft\nlolo jones\nland marked\nlam anna\njuli antina\njallian wala\nisee you\nin ki\nin icio\nid om\nhurst pierpoint\nheat ing\nhad lee\ngrey water\ngreatest leagueintheworld\ngorgon io\ngood beer\ngo girl\nglobalnew sto\nga si\nfording bridge\nfla vel\nf ally\nestro gens\nell ingham\nelder of\nef ya\ned lund\ndod dridge\ndi ger\nde mentors\ndah lan\ncuad ros\ncu x\ncro fter\nchikar apro\ncharl bury\ncape coral\ncanadian army\nborder s\nblow ing\nbig gies\nbeng tsson\nbel in\nbank rate\nav ary\nast ros\naspin wall\nash by\nas wan\narrow root\nanimation dev\namazing places\nallegi ances\nair box\naff ton\nacu shnet\naaa al\na jaz\nðŁĴĸ .\nðĿĺ ¢\nðĿĺ¢ ðĿĺ\nìĥĿ ìĿ¼\nâľĮ @\nâĺºï¸ı ðŁĴĸ\nà¸Ħภ£\nÊ Ķ\nô n\ny nares\nwmn hist\nweid mann\nwe sh\nwb g\nvoi ding\nvis ca\nvast o\nval ette\nuni que\nunex citing\nty ana\ntv fest\ntutankham en\ntt chelps\ntrip to\nto see\ntell eria\nteam nl\nteam gaspari\ntaly bont\nswo ons\nsugar cubes\nsub bu\nsto ya\nslo fficial\nsla ver\nshire brook\nsham okin\nschu ett\nsan oma\nsail cloth\nroyalairforce uk\nro ids\nr gu\nproto typical\npro bly\npork belly\npon orogo\nplesio saur\nplau sibility\npin chas\nperro tta\npeori achiefs\npen ic\npe kar\npathan amth\npas ch\nparks rec\npa quita\nnewcastleupon tyne\nneal brennan\nn ze\nminic omic\nmetro stars\nme ghana\nme chas\nmarketing land\nmarit imo\nmari ad\nmagic fm\nma hel\nloon athe\nlo ei\nlife inthe\nlemon de\nle mmer\nkro ft\njuliet landau\njinder mahal\ninti mated\ninfe sting\nind ilens\nin compatibility\nii ight\ni irc\nhydrogen ation\nhooke don\nho wol\nhen in\nhar ip\ngreat schools\ngrapp led\ngo bind\ngeb bia\ngarri gan\ngareth cliff\nfou n\nfashion model\nfab ula\nexal ts\nex upery\nem oments\ndur rell\ndou bloons\ndl rcc\ndis figu\nde tt\ncur dled\ncre swick\nconceptu alization\ncolour ings\nclaus sen\ncitys c\ncis ne\nciné ma\ncb cradio\nc ón\nc sio\nbus boysandpoets\nbru hits\nbluelive smtr\nbloem endaal\nbi dd\nbh lib\nbed sit\nbe twood\nbe tong\nbbcred button\nas man\nar twiculate\nap ca\nanth on\nam ran\nam orosa\nam molite\nalo to\nalfa jor\nal tro\nahu t\nagu adilla\nade pitan\naag pbl\nðŁĻĮðŁı¾ ðŁĻĮðŁı¾\nðŁĺĬ ðŁĺİ\nðŁĺĤ ðŁĻĦ\nðŁIJ¶ ðŁIJ¾\nðŁįĵðŁįĵ ðŁįĵ\nï ĥ\nç ½\nâ ¸\nzar doz\nyougo girl\nymc as\nwr acked\nwomen tech\nwin ther\nwin big\nwifis funeral\nwel low\nwe we\nvisit noosa\nun tiring\nun shackled\nun romantic\nun pronounceable\ntur keye\ntric losan\ntothe people\nto wy\nto di\nthriller writers\nthe muppet\nthe money\nten ser\ntan an\ntack ling\nstron gest\nstri e\nss bn\nsnow bell\nshu jaa\nsho tel\nsett in\nsave daredevil\nsarawak ian\nsac rosan\nsacrosan ct\nrspb minsmere\nrotor craft\nrevol ve\nre ordered\npu st\npropert yoftheweek\npor twine\nponder ous\nplateau ed\npel z\npan mure\nor ville\nor dov\nor am\noo sten\nof ans\nnor gay\nniek ro\nni blett\nnati v\nmsu ext\nmonsie ur\nmj ölnir\nmiss gem\nminer vois\nmer pol\nmen ier\nmay enne\nmati vity\nmascot te\nmar uf\nmar ani\nmad h\nmad decent\nm night\nliving ston\nlaw lz\nlaut aro\nkill menow\nkad en\njfk airport\njc mo\njagann adh\nj gp\nitstony bennett\nine qu\nig aming\nhyper cholester\nhofstra u\ngosn ells\ngold hawk\ngior giom\ngil crease\nflo m\nfla pped\nfau chon\nes m\nepo c\nendeav our\nemmy lou\nechi um\ndontb omb\ndo ering\nden ly\ndemi gods\ndaw i\ndarab ont\ncycle ways\ncolori sts\ncolonial pride\ncold cut\nco ilovers\ncli ving\nchow chilla\ncho pped\nchin ar\nchicagom usical\nchat elain\ncar mouche\nbuffe ted\nblack letter\nbir dr\nbi utiful\nbev ington\nbelly ache\nbel lu\nbeh ring\nbal lew\nb bog\nazz opardi\nasymp tote\narnold schwarzenegger\napr incipal\nam ole\na ans\nðŁĻı ðŁij¼\nðŁĴŁðŁĴŁ ðŁĴŁ\nðŁĴĻ ðŁ§¡\níĥĢ ìĺ¤\nãĥ¼ãĥ Ń\nzo oniverse\nyeee ah\nwinter games\nwhite horn\nwand wmusic\nwal sch\nvote thomasmtv\nvill amaria\nusd learns\nubiquit in\ntriglycer ide\nton n\ntit in\nthrel fall\nthe mars\nta ft\nstr ously\nste cher\nsor oti\nsnarky puppy\nsha han\nschre ier\nsc ai\nsay i\nsaw amura\nru der\nref ill\nredbullair race\nre matches\npro sec\npray ingfor\npp ur\npointe dly\npay kel\npau sch\npat ni\nparti zan\nparrot let\nparen thetical\npac elli\nout fall\nodu sports\nobstruc ts\nmun du\nmilleni um\nmel gar\nmar dyke\nmame town\nmam aw\nly cans\nlove sick\nloose strife\nlin tels\nle uc\nlawson official\nlau toka\nl ura\nkour nikova\nkindafunny vids\nk ns\nju dic\njohn williams\ninter solar\nin kosi\nic orp\nhb ddar\nhar ton\nha fe\ngreen burgh\ngom ti\ngi gha\ngar gan\nga shed\nga aru\ng mn\nfu trell\nfoxnew ssunday\nfloridian creat\nfire news\nfar rant\nfal ci\nexpression less\nesof tball\nendodon tist\nele gies\nelderof ziyon\neg ba\ndenis coderre\ndecad al\ndar ting\ncro pre\ncro pp\nci vit\nci az\ncho wn\ncharlize africa\ncdn tv\ncandycrush saga\nblood stains\nbig machine\nbert kreischer\nbelow deck\nbellin zona\nbbc somerset\nbaltimore uprising\nay lestone\nat official\nalle m\nale ena\nai z\nah sa\nabyss inia\nab hisar\n>> @\nðŁķ¶ ï¸ı\nåĿ Ĥ\nൠĩ\nzy gous\nx rays\nwal don\nvoc ation\nvalen cian\nuwh uskies\nuni sport\nun hurried\numb c\ntu dou\ntriplic ate\ntr é\ntony kanal\ntmobi learena\nthe tony\ntel com\nstra dio\nstom y\nsong writer\nshoo ky\nsheil agun\nsheilagun nreid\nseraf ino\nscho enen\nsam bhar\nrspb birders\nrival smike\nred act\nreck ell\nready for\nre distributing\nre dedicate\nquotes forlife\npit ying\npf sense\npaul weller\npa zo\np mu\nou vindo\noren burg\nnws bayarea\nnonchal ance\nnolla ig\nnihon bashi\nnicol ay\nnewfound landers\nneph rite\nmushroom ing\nmiko yan\nmetho dis\nmer cnews\nmende leev\nmcl ars\nmccri mmon\nmc sherry\nmag loire\nly ster\nlow boy\nlo pam\nlam pley\nkul p\nknow it\nkier on\nkar ly\nkab lam\njol liffe\njay baer\niri st\niri ga\ninstinc tual\ninclin ations\nin line\nhigh note\nherni as\nhe yarnold\nhartz ler\nhappen shere\nfun day\nexp ounds\net nowlive\ners baseball\nen et\nemili ana\nem ps\nel ice\ne hi\ndun smore\ndra enei\ndor mont\ndistribu ted\nder v\ncta flash\ncraig smith\nconstitu tionalism\ncon soled\nchoose cruz\ncer ta\ncel led\ncarrie ann\nbut ner\nbro mel\nble ddyn\nbienven u\nbbc music\nbar kov\nback kk\nba injal\nay ak\nav endre\nauto logous\nat ago\narru pe\nanze kopitar\nany am\nanantkumar h\nakshar dham\nafternoon tea\nafric om\nadvance auto\nad era\nachrist mascarol\nac fc\naar thi\naa official\n+ +,\nðŁĺĺ ðŁĴķ\nðŁĺ» ðŁĴķ\nðŁİīðŁİĤ ðŁİĪ\næĻ ¯\nå¤ ı\nà¸ĩ à¸Ĺ\nworld rugby\nwest brom\nwag gy\numph rey\nu chicagop\ntweetapicture that\ntrade shows\ntr ze\ntepp ei\ntcr no\ntakar azuka\ntac c\ntab e\nt set\nsuper res\nstyle tip\nstocking stuffer\nstanley park\nsn v\nsilk worms\nshish ir\nshim omura\nseattle children\nsarrac enia\nsandal wood\nsal low\nsa pped\nrol linson\nrick wood\nrest ling\nrecipe blog\nr tty\nquarter deck\npres sphoto\npil at\npe asantry\npav in\nparasit ism\nor ison\no zer\nny cd\nnmm greenwich\nnhsm illion\nnewlook fashion\nnan or\nnam anana\nmyco toxins\nmira sol\nmika il\nmccoll ough\nmaj ka\nma shiro\nlrb ht\nlow ville\nlow ns\nlou lou\nlo pen\nlim be\nlack adais\nla sto\nla pride\nkram ers\nkoss off\nkingdomcomed eliverance\nkindergar ten\nke ef\nkaye adams\nka ve\njuli amichaels\njoyce didonato\njon batiste\njo ginder\njo ear\nira bad\nily ich\nich wein\niback thenats\nhan lin\nh sing\ngran ulation\ngra velle\ngou dy\ngor ging\nget fit\nfrank warren\nfootb ath\nfl outing\nfisher folk\nfall winter\nextracurricul ars\neugen emir\neugenemir man\nem mit\nek c\neic hel\ndis associate\ndhol era\ndark soul\ncraig millar\nconte h\ncol locations\ncod champs\nchristmas special\ncheer sport\ncc tv\ncall anish\nca ppo\nbob seger\nbin do\nbin ch\nbill simmons\nbhak ti\nbelo v\nbe mani\nbar uchel\navail ble\nat se\nat anas\nasjad nazir\nase f\naren adublin\nakro polis\nabo ah\n*:ãĥ»ãĤļ ⾧\nðŁĻĬ ðŁĺį\nðŁĻĤ #\nðŁij¼ ðŁĻı\nðŁıİ ðŁĴ¨\nðŁĩ± :\næĹ¥ ãģ®\nâĢĶ âĢ¦\nà¸Ī ร\nöz ge\nï a\nzamor ano\nzai us\nza habi\nyy xx\nyay ayay\nx ol\nwool ridge\nwho cares\nway ner\nwat ters\nval lum\nu hmmm\ntraffic chief\ntrafficchief ng\nthru xton\ntholi prema\nthene c\nthe walking\nthe tournament\nte on\ntales ofthe\ntake astand\ntakan ori\nstateofthe union\nsor table\nsonal chauhan\nship wrights\nsee a\nsar ria\nsampo erna\nsahar are\nsah len\nrock i\nresi duals\nre hire\nrashmikamand anna\nra del\nqueri ed\nputin atwar\npropag ator\npre heating\npow ner\npostand courier\npo cs\nplan cha\nplain tive\npedro za\npay am\nop as\non our\nol g\noh boy\nofficial wexgaa\nny j\nnoto kay\nnight clubbing\nnd p\nnathan s\nmy at\nmumb ail\nmonarchi st\nmegay acht\nmedical research\nman cs\nmali ha\nmal et\nlou donville\nlost teddy\nlegion fx\nlanz amiento\nkpop ers\nkmf dm\nkindergar tener\nkidero evans\nkhan e\nkc wx\njuliet telewis\njazz times\niwon a\ninter actively\ninfiltr ators\nimage awards\nice age\nhor ch\nhc ps\ngri mas\nge birge\ngang star\nfriday mood\nforevery thing\nfor amini\nfoot plate\nferru ccio\nextor ted\nespor te\nesk ay\ner rata\nejec ta\neast bank\ndry skin\ndoom patrol\ndombrov skis\ndet ling\ndesi rous\ndell tech\ncy presses\ncros scountry\ncre stron\ncompar te\ncli q\nci amis\nchri mbo\nchibi usa\ncamerat rap\ncairn sgbr\nc plp\nbrown rigg\nbrad t\nbou w\nbluem tn\nbloss er\nblau er\nbit w\nbe itar\nbc stx\nbase bal\nbar ani\nbaini marama\nbai ji\nar ow\nanac apa\nagribusines stalk\nafric aine\n................ ......\nðŁĺį ðŁ¤©\nðŁĶµ ðŁĺĪ\nðŁİī ðŁĴĹ\nðŁ¤ µ\nåѦ éĻ¢\n⼠©\nà¹Ģภĭ\nzz one\nzapp one\nz gan\nyeah hhhhh\nwhole sale\nw us\nv sts\nusaid transforms\nure thral\nupanish ad\nunite c\nu dit\ntim bo\ntempl ating\nswachhat ahi\nsw osu\nsuwa idi\nsuppos ition\nst ma\nspeed boats\nsol ti\nsk ö\nscottish canals\nsab z\nro sin\nriv ka\nrask ass\nrafc gy\nra sto\nqu ing\npw res\npro di\npress ler\npoplar ville\npol lens\nph re\npal y\npakar my\noz ona\nover seas\norda z\nor ite\nonero vers\nny we\nno ye\nnis ka\nnew world\nmr j\nmo rella\nmo berg\nmichelinguide uk\nmi ria\nmez cal\nmarilyn ne\nmacer ata\nlth trust\nloo kahead\nloc q\nline berger\nleek wang\nleed ong\nlan des\nla opera\nkri er\nkel ani\nke di\nkac chako\njen naw\njay park\njas wim\nj soc\nindian summer\nima gic\nhuber tus\nhou tte\nhot press\ngom pa\nghat ge\nfrick collection\nfor sman\nfol o\nfisher cats\nfifa e\netsy teamunity\neric an\neras mo\nelm hurst\ndollar general\ndic om\ndele vi\ndehuman ize\ndegan wy\ndau g\nd cb\ncu dd\ncru cero\ncord mn\ncor vette\nconvers aciones\nconceptu alart\nci gale\nci bia\nchristmas dinner\nchill o\ncedric alexander\ncarra ig\nc ung\nbush meat\nbon ello\nbo eser\nbli k\nbiomole cular\nbio graphic\nbha agam\nbest buy\nber thon\nbeck a\nbe om\nbbc norfolk\nbar th\naudi bly\natt ar\nassi stindo\nash ell\naro che\nar kad\naper to\nami e\nam ese\nal sip\nadhe rent\nab ondthatcantbebroken\nðŁijį ðŁĺĺ\nèij ī\nè ĵ\nà« ĭ\nı z\nym el\nworld triathlon\nwind blade\nvolu si\nvle uten\nvintagetraffic usa\nvaness o\nvac tress\nur la\nun il\nterrori zer\ntad worth\nt sw\nsyl vanesso\nsubju gated\nstel zer\nst q\nssss sssss\nsf alls\nseren aryder\nsee ff\nseas ickness\nsav arese\nsar keesian\nsane wwe\nru i\nros é\nrob m\nric hert\nrc u\nraj ar\nrail ton\npun akha\npri sco\nprecipit ated\npositi vel\npos ity\nplat ting\npitt sbvb\npin ho\npi ph\npeople matter\nore e\nordov ician\nor sett\non twitch\nol pc\nnu cor\nnightinthe woods\nnever leave\nnatu rism\nnas w\nnano bots\nmore ra\nmis za\nmign ons\nmet ar\nmello tron\nmc pd\nmarcjacob sintl\nlostin translation\nlon line\nlo isa\nlearning disability\nlak l\nlak is\nkw anten\nku bra\nkim zolciak\nkhu shal\nkairi sanewwe\nka dir\njoeyryan online\njeet bo\nje k\njake pittsbvb\nja imel\nitsme marcog\niron bowl\nir da\nine miliaromagna\nhug your\nhosp icec\nho ttt\nho ar\nhiro kazu\nhelp ful\nhawaiian air\nhan ae\nhaider alabadi\nha eun\ngen cia\ngame zone\nfre de\nfirst place\nfast way\nexpo sed\nevely ne\nend el\nemerson drive\nel met\necu baseball\ndou ll\nclin micro\ncl w\nchuck liddell\nceil ing\nca zy\nbur rowes\nbry k\nbrizen orton\nbrac ket\nblunt ness\nbishop stown\nbetti epage\nben nell\nbel ters\nbap ak\naz leg\naw onder\navi ka\nascend ance\nartist sofinstagram\nannel ies\nangel ayee\nandru w\nall sup\nair fryer\nahmed patel\nafford ances\n> )\nðŁij¼ ðŁı»\nðŁIJ ¿\nðŁįī ðŁįī\nï¹ ¡\nઠ¸\nشرÛĮ Ùģ\nzindagikime hak\nyz ma\nwhat culture\nwell travelled\nwe missyou\nvilla verde\nut x\nultr amar\nu efi\ntv illa\ntruste eship\nthrel keld\ntheamerican sfx\ntechno terrorist\nte guh\ntart ar\ntamsen fadal\nstother t\nstor mon\nshat tered\nscrip ture\nscar ff\ns sci\ns bla\nro ton\nrithvik dhanjani\nren es\nrefra ins\nrefr act\nraj skub\npvr cinemas\npur ges\nprote omic\nplim soll\npix ley\npc bb\npace makers\np suv\np bafinals\nnin kovich\nnicolas cage\nnic eness\nnew quay\nnarrow boats\nnadez hda\nn ter\nmutil ating\nmon aya\nmobile punch\nmizu hara\nmichael shanks\nmic ks\nmc que\nmati z\nmas nor\nmar ar\nmaggiel awson\nluxury watch\nlug nut\nling le\nliacou ras\nle mahieu\nlaw firms\nlam oriello\nku cera\nklar man\nkill ough\nkemp en\nkas erne\nkar aj\nk crew\njul liard\njohnny g\njoh nette\njeffrey combs\njake shears\nj walsh\ninve ste\ninsane cham\ninsanecham pwres\nifly mia\nic ture\nhp celebration\nhol lick\nhodder books\nhi ren\nher ping\nhard body\nha go\ngour ami\nfrag mentary\nfr s\nfe deli\nerr day\neng ates\nel sworth\nel ster\nec lips\ne mig\ndream less\ndesigner sguild\ndel pozo\ndaf na\ncress kill\ncosmo sdb\ncomman deering\ncoal port\ncheck point\nch acousa\ncaw dor\nbuck den\nbour bons\nbb mp\nbad enoch\nasjadnazir sexylist\namphi polis\na acs\n???????? ????\nðŁĴļ ðŁĸ¤\nðŁİĦ ðŁİī\nà¯į _\nz ol\nyouthen voy\nyan kees\nwo tan\nwish bones\nwind starcruises\nwho woreit\nwah ed\nunic anberra\nudd hav\ntx stars\ntri ppi\ntreva than\nti ful\nthread ripper\ntho p\nta irport\nsu hani\nspring fiel\nspl ant\nspaceship two\nson paper\nso apo\nsm koneru\nshak en\nsh ood\nsh dop\nsasi kumar\nsar lat\nsar gam\nrefer rer\nre tractor\nre appointment\npnca rena\npin z\npau die\npa wesome\nour in\noc v\no lowo\nnar va\nnam ics\nmy hero\nmonopoli ze\nmom afilm\nmodi fiable\nmid mo\nmi el\nmercado libre\nlon nie\nlia ising\nli ker\nles ch\nle tyour\nlam brecht\nlagav ulin\nlac ofd\nkne ast\nkh eng\nke j\nke aley\njun to\njay sus\njadav pur\nj wilson\nj jones\nj hum\nir pur\nim j\nikar ia\nhu ahin\nhon ora\nhispan ia\nhex is\nhersh berger\nher schel\nhel zberg\nhan ok\nhal berd\nha ggin\nh jal\ngreen island\ngr ttweets\ngautam rode\nfnd tn\nfluore sc\nferro vial\nfc splayoffs\nexpand ers\nethical hour\nemocione scan\nel sie\neid as\ne ying\ne ah\ndumfries and\nduck ula\ndiop side\ndh alls\nden yse\ndeme trio\ndead space\nde twe\nde ignan\ncynic ally\ncram ton\nchil ds\nchead le\ncharter schools\ncath ays\nca icedo\nbé ar\nbur chill\nbot in\nbor odin\nbig data\nbel isle\nbe joy\nback kkk\nbab bit\nba jar\naw la\natlanta fx\nat tridge\nas ali\narya stark\nart us\narroman ches\nan ies\nal sadd\nais for\nai dy\nactu ation\nab ula\nðŁĺį âĺº\nðŁĺĤ ðŁĴĺ\nðŁİĻ :\nçij ľ\nãħİ ãħİãħİ\nzo han\nzah raa\nz wan\nyn elson\nyank sonyes\nwinter warmer\nwheeler dealers\nwarand peace\nwar same\nviv ab\ntri phala\ntrend z\ntraci iguns\ntoyo tas\ntime keepers\nthe odd\nsu liman\nsu hr\nsu are\nstepan akert\nsteal z\nson owal\nso yer\nsko glund\nsie ges\nshutt ler\nsep timus\nse eta\nscar ra\nscab iosa\nsaxi frage\nsand ers\ns magic\nrit ory\nresent ments\nre location\npuff balls\npu yo\nperegr ine\npd ash\non cidium\nofficial pvfc\nofficial pes\nn spc\nmy tton\nmonop lane\nmono coque\nmarmo zets\nmanu bennett\nmang la\nlymp ne\nlund university\nlr ath\nll ly\nleyon hjelm\nleon hart\nleg alism\nlees ung\nle pton\nlac onic\nkw es\nkapp as\njj rockxx\nimplic ates\nii faut\nia sen\nhot yoga\nhappybirthday liam\nham lisch\nh na\ngyn lais\ngriffin shockey\ngravit ating\ngrace jones\ng thr\nfel ici\nfac ce\nescape ment\nen ballet\nelic iting\nel mb\ne tomi\ndu rell\ndestined tobeyour\ndam our\ndal u\ndab ke\nda stan\ncre sson\ncn sa\nchap manu\ncen bank\ncand ling\ncalum best\nbrent butt\nbo ger\nbie hl\nbetter off\nb kl\nauxili aries\narbitr ators\nap cu\nandri od\nalu ae\n. ðŁĴ¥\nà° ħ\nØ§Ø ®\nzan in\nyo sh\nwith y\nwitchof gric\nwar dy\nwain scott\nvir ility\nvice president\nv mu\nune z\nun delivered\nto vo\ntin dal\nthen ra\ntele vise\ntal ex\nta wad\nsturgill simpson\nstu arts\nstal king\nspeed line\nspani en\nsol in\nsnow blower\nsel k\nse alife\nsaf ta\nsa karya\nry land\nroot sport\nrobre iner\nric t\nrefresh ers\nqueen sugar\nq wop\npre conception\nper dida\npe plo\npe ay\npar amotor\none us\nom ron\nof arms\nnicole tti\nnew stuff\nnat oma\nmy u\nmy co\nmu iz\nmore life\nmoom oo\nmol alla\nmi leg\nmercy ful\nmckin ley\nmatthar vey\nmark logic\nmamared carpet\nmal on\nlor as\nlom adia\nleg ler\nlec tro\nlar go\nlar don\nkwe se\nku le\nkom bo\nk oper\njourno request\njad is\nisak ov\niri dology\ning ness\nindividu alist\ni she\nhor sell\nhol ub\nhij ra\nher ford\nhac i\ngay romance\nfre tted\nfe zz\nfarmto school\next enders\neric j\necou tez\neck mann\near lof\nde values\ndaw na\ndal ys\ncro oz\ncoul ro\ncostab ile\ncomb ichrist\nchin ni\ncher one\nche fe\ncharli eco\ncarav ana\ncano eists\ncan ak\nc trip\nbye ee\nbun b\nbridge of\nboom boom\nbok rugby\nbit ties\nbig things\nbetibachaobeti padhao\nbas ri\nbapti stry\nbag lan\nat ley\nastra galus\narcen eaux\nali ona\naa ÅŁk\n, \'\'\nðŁĺģ ðŁĺľ\nðŁĮ¹ ðŁĴĢðŁĮ¹\nðŁĮ ¯\nìľ ¼\nâĿ¤ï¸ı ðŁ¤Ĺ\nâĿ ģ\nyeon jun\nwithout limits\nwire cutter\nwing s\nwear pink\nwal brook\nwa sters\nval v\nun supportive\nun drinkable\ntrevor jackson\ntough er\nto paz\ntheyoung turks\nther am\nthe police\nthe grove\nthe fieldhouse\nthe bush\ntewaar aton\nte ter\ntanger ine\nsu jan\nsp lines\nsla voj\nsigma hq\nshu ld\nshu ben\nshen mue\nshan am\nschmel zer\nsc x\nsan ai\nsalam on\nsak on\nrott we\nrh us\nree zy\nred line\nred cliff\nrandal stown\nrag am\nprogressive metal\npon da\npnin ator\nple uro\nplayoff final\npitch man\nphoto catalytic\npeople whom\npatre se\npat erson\np flp\non elmstreet\nomari hardwick\nny ard\nnorth wales\nnew shindi\nneuro psychiatric\nnece sit\nnative americans\nnat ter\nmor as\nmissi ves\nmis su\nmirac leon\nmic odelrosario\nmi pi\nmcil wain\nmar oto\nmar imar\nlly welyn\nleit rim\nkn wa\nkir ara\nkevin m\nkat as\nkaf u\njuliere ichwein\njour dain\njingo ism\njean grey\niy ar\nhol loween\nheil man\nhar in\ngri bbin\ngra j\ngetat me\ngerald orivera\ngeo x\nfu sca\nfant agio\nes now\nem yr\negyp tologist\ned na\nec cw\ndige stive\ndi zi\ndet ama\ndark lines\ndan cere\ncos se\ncor fe\ncomicbook men\ncoly tic\nclaudia jordan\ncityof perth\ncine a\ncham paran\ncep k\ncatalan referendum\ncad enas\nburk hard\nbur ga\nbrook lynn\nbron ski\nbri anne\nbrett kissel\nbon omo\nbeg ich\nayo ze\navo gad\nau sout\naren aof\naontro im\nanec i\namand ase\nalle le\nal vi\nai v\na ves\n!! ⾨\nðŁĺľ ðŁİī\nðŁĺį ðŁĺĩ\nðŁĴ¯ ðŁıĪ\nä¹ ĭ\nz ation\nvoye uri\nvj se\nver da\nunion saustralia\nty hafan\ntul lio\nthings done\nthi er\nte men\nte at\ntab ler\nta veta\nsy en\nswi wx\nsuss kind\nsteve wal\nspecu lum\nsoft works\nso thern\nshu bha\nshant ung\nserkan cayoglu\nsel lar\nsclo thes\nsc so\nsc ira\nsavedbythe bell\nsanto shi\ns garden\nro ev\nro ba\nretweeet please\nren ton\nprim rosehill\npresident duterte\npolit ec\npatri mony\np ctto\nover holt\nover drawn\nov adia\nonthe water\nnli reland\nnfldraft scout\nnew smy\nnail sworth\nmy kha\nmsam ber\nmostbeautiful faces\nmonof ilament\nmo lex\nmississipp iriver\nmeister singer\nmaur its\nmat ua\nmari anor\nmal vin\nmal to\nlive authentic\nlaurel hurst\nlan kesh\nki bby\nken ly\nke bab\njanel parrish\nis qua\ninstall ation\nigno u\ni ipa\nhol zman\nheron dale\ngun ships\ngran do\ngill ylancs\nfur ler\nfor humboldt\nflo rette\nfire y\nfigure drawing\nfar g\nex horts\nent ano\neccle shall\ndriver les\ndrive on\ndove cote\ndenzel washington\nd ä\ncomm vault\ncoll ingham\ncer atop\ncamoufla ges\nbristol news\nbristol city\nbocc accio\nblythe wood\nbk twtr\nbay lon\nbass musician\nbasil an\nban za\nbaham ians\nas sche\nas l\naren ts\narbit ral\nam iss\nach ra\nac press\nðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį ðŁĺįðŁĺį\nðŁĩ« ðŁĩ®\në°ķ ìĭł\nâĿ¤ ðŁĴľ\ny utu\nwr p\nwny wxguy\nwiley updates\nwest wing\nwe urope\nvojvod ina\nvit tori\nvir gie\nvie tto\numphrey smcgee\num bus\ntx milesplit\ntrespas sed\ntitan sof\ntime sunion\nthest style\nthener d\ntam popo\nta ppers\nsv ball\nsuper user\nsun dari\nsu sand\nstrath spey\nstan chion\nsta e\nsl trib\nsilver side\nsig gy\nshop fronts\nsar it\nsamsun gs\nsakhar ov\nsa ie\nreg n\nrec ent\nre re\nr head\npron ghorns\npin cers\np te\nonlinec asino\nnzv ban\nny liberty\nmotivational speaker\nmol der\nmil air\nmaw dd\nmarin aro\nmar yo\nmanto vani\nmanj hi\nmandra gora\nman dos\nmal loch\nlynd sey\nloffici el\nlin tott\nli gation\nkick as\nki bet\nkatiemc grath\nkarti ka\njoo hyuk\njinxx bvb\niz aguirre\nirregular ity\ninter breed\nintel pro\nint ents\nimuk biz\nhu uuuu\nguil lemb\ngradu ands\nglan bia\ngat ot\nfootball friday\nfle cha\nfind me\nfel ly\nfe ste\nfe aver\neuro furence\negg cup\neffu sive\neagle hawk\ndye sebel\ndiagon alley\ndeer field\nde iv\ndan ka\ncraig ella\ncountry duty\ncou lon\ncorning museum\ncomedynight swith\ncollec tives\ncn sphoto\nclari dges\nci bona\ncher if\nche se\ncharacter ise\ncav ender\nbra chio\nbr acks\nbooksto read\nboij mans\nble m\nbi zer\nbattle on\nbat lle\nbaker va\nbai doa\nbad blood\nback boris\natap ult\nasi mone\nal uska\nðŁĺįðŁĺįðŁĺį .\nðŁijij âĿ¤\n° ï¸ı\nyounus algohar\nwom anist\nwer neth\nvs bos\nvil ification\nvi all\nv roman\nun sullied\nun making\ntr inians\ntol booth\ntele casting\ntaylormade tour\ntau k\nszyman ski\nsz ka\nsteph ani\nsse arena\nsou tho\nsilent disco\nsho taro\nshah ram\nse ath\nscout master\nsar dina\nsam ani\nrick world\nric cardi\nri gaud\nrenee graziano\nrant zen\nps le\npro saic\npoly unsaturated\npa jaro\np scs\nonline poker\nohiop yle\nof cl\nober ge\no ei\nnev schulman\nne dra\nmemor ably\nmb am\nlo gr\nlnp fail\nleu ch\nleaveyour mark\nle di\nkin hai\nken burns\nkemp es\nkeeping you\nk roy\njohn leguizamo\njames mar\nitsall goo\nik hil\nhyper dunk\nhusky nation\nhu lud\nhr in\nhol landia\nhick forco\nheures dumans\nhallucino gens\ngu detama\ngian marco\nfren chal\nfox searchlight\nfivb men\nfarm pics\nexpun ge\neste ban\nend family\neaster house\ndiaspor as\ndepress o\ndemar re\ndave mcclure\ndar l\ndaf tar\ncro che\ncour tly\ncor ie\ncol ine\nco tai\nco flood\ncn alive\nchen yi\nchasu ble\ncast in\ncafe cito\nburger week\nbri gs\nbra ds\nbot as\nbor gman\nbhil ai\nbestnigh tever\nbeauty tip\nbal ada\nato jr\nanno ying\nam la\nal cides\nais in\nag lass\n@ .@\n* ]\n\' ".\nëŀ ©\nå¤ ľ\nãĢĭ ãĢĭ\nد ÙĪ\nzen nor\nx pe\nwych avon\nwom ad\nwol fies\nwhat car\nwell spent\nw daz\nvag aries\ntranspo sition\ntrack man\nto lima\nthe orie\ntand f\nsun sout\nsun gei\nstradi vari\nspic ers\nsn ur\nsmithson iann\nsarah jaswim\nsal ine\nryan hunter\nrid ger\nrico che\nriche mont\nre spire\npuri foy\npe kalongan\npe et\nparo di\npan try\np th\noc pd\nobam aday\no wa\nnu ked\nnoman sland\nnekop ara\nneg ating\nmu lago\nmorecambe bay\nmontt remblant\nmm film\nmello dy\nmehwish hayat\nmega shot\nmay sles\nmat tera\nmanag ing\nma dala\nlitho graphic\nli gia\nkon kon\nkitti wakes\nki yomi\nkhel oindia\nker ins\nkate beirness\nkap ag\nkam asutra\njay len\nint ell\nhour glass\nhex ham\nhaz im\nhaupt bahnhof\nhal ston\nhal d\ngrand ches\ngrandches stour\nger akan\ngam brel\nfracti ous\nform alize\nforgi one\nfl andres\nfa kku\nex claiming\nenig ma\nemili eder\nemilieder avin\ndy ar\ndu ri\ndough ty\ndob son\ndesecr ating\ndar ri\nd hir\ncrou te\ncr nas\ncoyo acan\ncomeon you\ncol ón\ncling mans\nche sser\ncharity shop\ncer via\ncampe sinos\nbu ckey\nbri j\nbo yet\nbertrand piccard\nbas sie\nback breaking\nbab ineaux\nazu lejos\nas cp\nandy grammer\namba reesh\namat suri\nalu va\na jose\nðŁĺģ ðŁĺī\nðŁĺ¯ ðŁĺ¯\nðŁĴĵ ðŁĴĵðŁĴĵðŁĴĵ\nðŁİĬ ðŁİīðŁİĪ\nðŁį ²\nìĿ´ ëĮĢíľĺ\nãĢ ħ\nت Ùģ\nÃ¥ r\nz waan\nz our\nyoun gre\nx fce\nwomenin ag\nwhatdoyou mean\nwat sapp\nwalker booksuk\nw cdma\nv annan\nusa ir\nun subtle\ntrout beck\ntrend micro\ntor turers\ntol li\nthereal gokwan\nthe mary\nthe jon\nthaw kins\nten so\ntaleg gio\nta hoe\nsupportlocal music\nstrato cumulus\nsthe world\nstephen mangan\nspeci alizations\nspe el\nspani er\nsonny digital\nsnow berry\nsmar tt\nsloane stephens\nserv ative\nsch is\nsanantoni ofc\nrum ley\nrot tie\nrna seq\nrin at\nriff raff\nregal es\nreen acts\nre dress\nrajat tokas\nr alli\nquiztimemorning swithamazon\nquis ling\npro social\npres sey\npra p\npoom sae\nphysi atry\npat more\np skov\nor rr\nontheroad with\noneteam one\nomy ces\no hhhhhhh\nno bill\nni sei\nn mp\nmy night\nmp cs\nmon essen\nmo one\nmnight shyamalan\nminister io\nmile le\nmifi dii\nmeander ings\nmccar ley\nmb oldo\nman atsu\nm pire\nlenny gaspari\nkiran shaw\nkir ko\njohn berman\nj la\nincentivi zed\nin viol\nin attentive\nin accurately\niii ight\niam ond\nhockey hub\nha ast\ngray wolf\ngoogle drive\ngar dein\nfire andrescue\nfar hi\nestrange ment\nenew sletter\nell acruz\ne fr\ndul han\ndon giovanni\ndo ÄŁ\ndjim on\ndd hi\ncreative mornings\ncorred or\ncongre ve\ncom hairle\nclau diab\nclar os\ncinemainmy genes\ncholec yst\nchite ttura\nchil mark\nchi ya\ncassa day\ncan lon\ncal mar\nbri se\nbra ked\nbob white\nblack country\natl ay\nathar va\narchitec tsuk\nanth o\nanime con\nalph anu\nalp eng\nallu de\nalac rity\nagri goi\nafloo d\nade bate\nad tran\nðŁıĦ âĢįâĻĢï¸ı\nðŁĮ Ĵ\nว ม\nø y\nyogur ts\nwedding present\nweare stv\nwau ters\nwalkthe talk\nve ith\nunder powered\nun spent\num braco\nty rian\ntur aco\ntsu taya\ntroy bakerva\ntricia helfer\ntre esur\ntoi world\nthur s\nteam nuh\ntau be\ntasmani ans\ntamago yaki\ntake that\nt dg\nswa ppable\nstur gis\nstewar tuk\nstare down\nss badal\nspr ats\nsla shers\nshee ted\nshanty town\nsha ji\nset swana\nsaf ai\nrep l\nreg ge\nrebu ts\nre tz\nradio deejay\nr sl\nproperty forsale\npromom yshop\nprofit eroles\npon cho\nplu shes\nplay for\npat mcgrath\npas su\norchestr ates\nnyarla thotep\nnut field\nnunatsi avut\nnorth up\nnorfolk va\nnat asa\nn maa\nmyviking story\nmust ache\nmunster gaa\nmess inger\nmegan n\nmed ill\nmarsh lands\nmarau der\nmar yan\nmam ed\nmag ura\nly die\nlu ddington\nlo iseau\nli fo\nlec lub\nlang try\nl mics\nl mb\nkyri akos\nkey club\nkay i\nkarmen uvella\nkarao ke\nkali uchis\nkal ima\njuvenile justice\njosap hat\njan am\nj mattmiller\nj ali\nian us\nhiroh ito\nhigh est\nhel s\nhe hir\nhb hai\nham me\nha thletics\ngu ts\ngog com\nglen campbell\nger ak\ngany an\ng ela\ng day\nfrand sen\nflat white\nez pass\nesp ina\neri der\nen claves\nem mm\ndran ath\ndig ang\ndi leo\ndefe rence\ndead lands\nde marcu\nculi acan\ncru gby\ncro sland\ncor bitt\ncoco on\ncardi stry\ncar ona\nbunb trillog\nbu ttle\nborne misza\nbor ley\nbogal usa\nben savage\nbay ly\nbaby steps\nb inet\naz ir\national guard\nati dora\nand are\nalic eroberts\naf sp\na strup\nðŁĽ ¸\nðŁĴģ ðŁĴģðŁĴģ\nðŁĩµðŁĩ ¯\nze ee\nyou meatsix\nx ers\nx amas\nx adee\nwing sscotland\nvol lrath\nus wa\nur ts\nuneas iness\nunder lie\ntucson newsnow\ntrues dell\ntroo dos\nti ro\nthisis roc\nthe original\nthe incredibles\nte do\ntaylor swift\nstaur ant\nst illing\nso j\nskee ball\nsher ie\nshak shouka\nsen io\nscher rer\nscand alized\nrou garou\nring way\nrever ies\nre mer\npp ap\nphilom ath\npc sreeram\nou asport\northo pe\noral b\nonly way\nodd job\nnz post\nnic le\nnatural news\nnat ation\nmuh sin\nmis behaves\nmcfe tridge\nmagu ey\nlo ga\nlet r\nkh qa\nker on\nkel tie\nkash kari\njud ger\njazz ercise\njanh vikapoor\njak art\nit ment\nis chool\nilike it\nhomestead ers\nhol mer\nhi zon\nhead man\nha zes\ngirl gamer\nge gen\ngarth tander\nforma zione\nfinn forchange\nfing ers\nfifae worldcup\nfal o\nfa sta\nfa e\ney n\nextern als\neve leth\ner satz\ne ip\ndu gs\ndow land\ndis dain\ndi kan\ndel phos\ndef uniak\ndeck ers\ndal go\ncumber batch\ncp su\ncoro coro\ncon ade\ncitad els\nci otti\nchitten ango\nchil o\ncheck mates\nchai kin\ncastle ton\ncaram ac\ncar week\ncann ing\nc ly\nbur rowed\nbro sseau\nbor re\nble akest\nbianch ini\nbi yombo\nbi sta\nbe mba\nbar gnani\nau chen\nas ays\narci mboldo\nar agua\nalky l\naffl ict\nðŁĴŀ ðŁĺĺ\nðŁİ¤ ðŁİ¼\nðŁĩ ¼\nðŁ§ ģ\nëŀ ľëĵľ\nzim zalab\nxibal ba\nwt bs\nwi fey\nwheel man\nwat in\nvisite den\nvam ily\nusic festival\nusc lay\nu um\nu ille\ntwit terers\ntwarri or\ntur pentine\ntu sker\ntron aut\ntric entennial\ntrade marking\nto iv\ntam ira\ntabas sum\nsymphonic metal\nsuz lon\nstaf fies\nspor tives\nspa ins\nsilver io\nshu hei\nshi ii\nsha hin\nsen ough\nself magazine\nsandwich ing\nsal ma\nrory stewartuk\nrichmond park\nri skin\nri ber\nregurgit ating\nred tour\nrecali br\nran del\npur va\nprophet sof\nplay towin\nperturb ation\nped lar\npas chall\np rus\noxygen os\nobre gon\nnu v\nni avar\nnav a\nnad die\nna hal\nmtu kudzi\nmeng ele\nme dyo\nmat tocks\nmartham ac\nmalavi ka\nlu la\nlot ton\nloks atta\nlev it\nleon ov\nle master\nlan cey\nl vo\nkristian sen\nkris shdop\nknowyour status\nkhar if\nket el\nkeegan mkey\nkarapar aaÅŁk\njuilli ard\njellic oe\nincen dio\nik lant\nig liano\nif sa\nidol bday\nhu bo\nhen nen\nharsh man\nhappy vday\nhad dix\ngum pert\ngu ff\ngood news\ngill ray\ngeneral ised\ng sis\ng dt\nfu lof\nfreck leton\nesp y\nef alls\ndy r\ndonald sonville\ndino sau\ndi bi\ndescar gar\ndeltag amma\ndeconge stant\nde commission\ndau r\ndaily show\nda ig\nd guy\ncolor adan\ncode breakers\nchu gg\nche u\nchampag nel\nbu tyou\nbrdg stonearena\nbo iiii\nblue wave\nbi shara\nbe kka\nbal tus\nbach ir\nba rend\nathle ti\nar cho\nar bore\napeoples journey\nann cleeves\namor is\nalone together\nafflic tions\nadam sss\na hal\n] ?\n) <\nðŁį ĸ\nðĿIJ Ī\nz ando\nyam un\nxab ial\nwy verns\nwinter lude\nwil pon\nwastel ands\nwar di\nvote dem\nvoor de\nvi ke\nvar don\nuse recycle\ntwi bi\ntsun a\ntrum puk\ntre kon\nto an\nthe adventure\ntf ny\nstech nology\nstay humble\nsmilo don\nsmart sheet\nsmall things\nsilver stonec\nshahi dafridi\nse ik\nsaqq ara\nsam mut\nsal umi\nsal ita\nru ok\nro tan\nro mm\nro jer\nre fitting\nravi zacharias\nrain bird\nra oka\nquest for\npuc cio\nprairi eville\npra chidesai\npor bandar\npitt ance\npir in\nparamaham sa\npacha uri\nos burn\non al\nob vio\nny ab\nnsc w\nnorth wards\nmultit ool\nmtv star\nmrsbrowns boys\nmollu sc\nmoeed nj\nmixed martialarts\nmen slacrosse\nmari ash\nmahar astra\nlu gogo\nlondon jazz\nlindsay jones\nlaim beer\nla vand\nkou delka\nkant é\njulie tta\niw sc\nitunes movies\nit like\nho by\nhar ar\nh wood\ngra j\ngo yt\ngi aa\nfu seli\nfrederick md\nfol f\nfather john\nfarewell tour\nfai the\nex por\nemo ting\neliza veta\neffec tive\ne studios\ndu hon\ndont end\ndog leg\ndirection less\ndavi da\ndav ar\ndang it\ncuttinge dge\ncontac to\nconfl ate\ncitizen four\nchester hour\ncar lier\ncan asto\nbör se\nbul taco\nblu ffer\nbio processing\nbas adi\nazu read\napor tugal\napo ker\nann av\nankylo sing\namur ray\namand af\nalan walker\nacl tv\nðŁĺį âĿ¤ï¸ıðŁĺĺ\nðŁIJįðŁIJį ðŁIJį\nâĺ ĩ\nz ameer\nyoutube music\nx cellence\nwel ham\nweare indigenous\nvapori zing\nusarm yeurope\nun mixed\ntyrr hen\ntyr ant\ntiv ities\nthe vfl\ntamer hosny\ntakay uki\nsympo siums\nsym metrically\nsubor bital\nstun twoman\nspag nola\nsofe urope\nshal u\nsh mirtz\nse ales\nschil dren\nsag enda\nron dell\nrepre nd\nredu cible\nre deployment\nr dan\nprize winning\nplau sibly\npit tock\nphil taylor\npan ji\nome gap\nni renberg\nng d\nnever see\nnebl aruz\nne ele\nnavar ino\nnag pur\nmis sin\nmini atur\nmin um\nmikewill madeit\nmic as\nmccre adie\nmc whirter\nmc bath\nma ju\nm newsradio\nlong don\nlit vin\nlet sen\nleaving cert\nlauren koslow\nkyun ki\nkw un\nklu ane\nkimber lee\nkess inger\njun aluska\nju baland\nju ab\njoh ancru\njeron teng\njac e\ni aap\nhedgehog society\nhappy family\ngo thard\nger wyn\nfur pals\nfu ori\nfreak nik\nfe ssler\nf me\nexemp ting\nen fer\neigen mann\ne golf\ndont shoot\ndisson ant\ndec agon\ndataf low\ndai shi\ncru it\ncross y\ncr pc\ncivic si\nche to\nche apo\ncess ary\ncbc thenational\ncalaf ate\nc sg\nbéar naise\nbreaking barriers\nbraun er\nboost vibes\nbiennalear chitettura\nbeer wah\nbassmusician mag\nbar io\naza adi\nauthent ics\nar mc\naparna dixit\nant acid\nan dex\naman ullah\nam erson\nall that\n( /\nðŁĻĦ #\nðŁĮ¿ #\nðŁĮ§ ï¸ı\nî Ķ\nâĿ¤ï¸ı ðŁĵļ\nâĿ¤ ðŁİ¶\nÌ «\nzz oli\nyp silon\nworldwide web\nweare warriors\nward ha\nw fl\nviol on\nvie len\nvad uz\nun unu\ntx plants\nti bbits\nthunder wolves\ntemple more\ntem bro\nsw sh\nsurviv able\nsuper conductors\nstar times\nst robes\nsquare enix\nspark led\nsole a\nskunk works\nsibling love\nshrove tuesday\nshol m\nshikar pur\nsam trans\nsa astr\nryo hei\nrose and\nrit annia\nremark able\nrecuer da\nre examine\nps bl\nprophe sying\npro pul\nprasar bharati\nph vegas\npet abytes\npandor ica\non os\nol ak\nnyct subway\nnigel farage\nni verville\nnag ler\nmouni roy\nmomot aro\nmn ch\nml stadium\nmisper ceptions\nmer u\nmer mhart\nmasch era\nmartin heinrich\nmarque se\nlo ys\nlauri ers\nlab ella\nla ven\nkrist offer\nkle mm\nkingshead thtr\nkar go\nkam akhya\njon pardi\njo bbers\njj redick\njar os\njane austen\nireland amtv\nim my\nicol lection\nholm fir\nhaz ari\nhad dow\nhackney council\nh tu\ngo q\ngary numan\nfill an\nff rench\nfen ris\nfast jet\nero adtrip\nelast in\neddi ep\ned cs\ndustin poirier\ndun gan\ndomin go\ndis bands\nden of\ncountry lifemag\ncon tem\ncl b\nchurch radio\nchrisky le\nchri sar\nchai wala\ncar boot\nbron k\nbra gi\nbol lin\nbob vand\nbds fail\nback yar\naur icula\naskingfor afriend\nappro vingly\nanaesthe tics\namrav ati\namic ably\nalief isd\nacademy brix\nab ai\n) ãĢį\nì ¢\ná´ ĺ\nØ· بÙĬ\nž i\ny alo\nwil co\nwerthe imer\nw ace\nvm vc\nvisit lisboa\nun selfishness\nun rolling\nun followers\numu ahia\nuj world\nu daya\ntz is\ntwitter art\ntouris mus\nther ium\ntheother artfair\nthe taste\nthe mira\nthe call\ntak am\nta deo\nstre ch\nstopp able\nstop suicide\nsto janovic\nsteve krohn\nsle ip\nsit g\nshirob ako\nselfie expert\nscol ombia\nsce aux\nsay yes\nsarah mclachlan\nrey ne\nrelap ses\nrel in\nredemp torist\nre hearing\nqu ev\npuk aki\npharmaco genomics\nperse baya\npathanamth itta\npal ko\nopp i\none oh\nolivi eri\noffice depot\nodell brewing\nnon agon\nnh out\nnational internday\nnagas wara\nmuk wege\nmissgem collins\nmichel lea\nmi as\nmcdou gald\nmar king\nman isa\nlost lightfest\nlightitup blue\nle ut\nkingh enry\nking kong\nkil coyne\nkat elynn\nkali das\nka el\nk ku\njen carfagno\njan nik\nj izo\nitsu ku\ni ant\nhou elle\nhideand seek\nhelenclar knz\nhah haa\ngreat work\nglau cus\nghul am\ngaf as\nfree base\nflavor flav\nfinger printed\nexpen sive\netsy trending\nepau lette\neat right\ndun man\ndoo dad\ndisin fo\ndevol ves\ndele terious\ndanny glover\ndalgle ish\ncrow le\ncross mag\nco zzi\nco intelpro\nclums ily\ncity tshwane\ncinema scope\nci vari\ncastle man\ncas al\nbuild that\nbrasen ose\nbblo gger\nba the\nb pn\naw on\nav int\nast us\nari ley\naran manai\nar sd\naontroim gaa\nammon ites\nag usan\nadi po\n> __\n.. ðŁĻı\nà¥ĭ à¤Ĥ\nz rx\nyor am\nwwe thebigshow\nwi ds\nwell sboro\nwar museum\nwaldorfa storia\nw enge\nvi borg\nut sa\nu lisse\ntz ou\nty ers\nton tine\ntelegram dotcom\ntaren as\ntam ala\nsw oon\nsuper glue\nstrike out\nson ika\nsme a\nsho guns\nsel kirk\nse fi\nscen ted\nsauti sol\ns beauty\nro sleh\nrim sky\nright most\nri emer\nr jl\nqu bits\npre sta\npoem trail\nple b\npeter boro\npep to\npas ca\nparen teau\nover reaching\nouth unger\nofficeof ssbadal\nne wa\nn pf\nmusic business\nmoy ra\nmi yyah\nmelchi zedek\nmcne illy\nmayor alty\nmasnor ioles\nmagn animity\nlo dy\nliz gillies\nlibrary journal\nlecoq sportif\nkt nuk\nksr nv\nking lear\njes c\nj degrom\nisth mian\ninter zone\nine music\nindo siar\nik könen\ni annucci\nhur rr\nhondaci vic\nhar riton\ngri mbergen\nglobal artisth\ngeo ca\ngen iu\ngar ston\nfunk houser\never wood\ner vine\ndisinfect ants\ndiscover your\nde famed\nde cai\ndancing withthestars\ncur tiz\ncruis eline\ncrow son\ncoo ver\nclu bc\nclaws out\ncent a\ncas sim\ncaperca illie\nbun an\nbr v\nboyn ton\nbou twell\nbo ke\nbi ent\nbe creative\nbarit ones\nash lar\nas ahd\narnol fini\nard ently\narchitek ten\nar rangers\naman resorts\nal tri\nair worthy\nair conditioned\nagainst cancer\nag bu\nðŁĺį âĺĢï¸ı\nðŁĶ´âļª ðŁĶµ\nðŁĴª âĿ¤\nðŁĮ´ ðŁĮŀ\nãĥĭãĤ ³\nâľĬ âľĬ\nÌ ¯\nér rez\nye tto\ny hoo\ny abe\nwar isan\nvive ko\nverul amium\nvanguard news\nus ra\nur ing\nur bis\nun answerable\nturbo diesel\nton ie\ntol ani\nthisis america\nthirty one\nthe handmaidstale\ntest accio\nte mis\nsuper cat\nsquid billies\nspr in\nspe an\nsla pper\nsi vo\nsi stani\nshu le\nsheab utter\nshaw mut\nsev res\nsenyor atidora\nse tau\nro so\nride shimano\nreic helt\nre interpret\nrbg canada\nquin tos\nq y\npw ba\npoise tt\npi beta\nper rie\noptome tric\nom onia\nofficially dale\nny gma\nnobill nobreak\nniavar dalos\nnen es\nnce atalk\nn ado\nmegh wal\nmc murphy\nmati ja\nmar ving\nmal liance\nma des\nlooking glass\nleather y\nlaser hairremoval\nl rl\nkoffeewith karan\nko fori\nkofori dua\nkliz an\nkil ims\nkhur d\nka hu\njr w\njohnc mcginley\njohn h\njing yi\ninfo com\nidiosyncra sies\ni thin\ni olan\nhouelle becq\nhay dar\nhaik us\nger aci\ngar rin\nfu dan\nfar fan\nevolu cion\ndumfriesand galloway\ndj j\ndiar maid\ndemois elles\nde yo\ncoo lock\nchi zik\nchann ell\ncates by\ncarson kressley\nc ink\nbur dening\nbra cho\nbn pa\nbludge oning\nbeauty salon\nbb celeb\nbar cal\nayre some\nas dru\naro ss\nap ley\nany o\nal styne\nal amb\nagi ft\naf bf\nac x\nðŁİīðŁİī ðŁİīðŁİīðŁİīðŁİī\náĥ ¦\nاÙĦÙĩ ÙĦاÙĦ\nzo tti\nystrad gynlais\nwi gle\nver mes\nvalle dupar\numb rage\ntrans fe\nthur l\ntg is\ntex ture\nten ere\ntelli gence\ntech f\ntakeme home\nta fc\nsto gie\nsn aring\nsilver classic\nser hat\nseapor t\nsatyamev jayate\nsat inwood\nsat ins\nry un\nru beng\nromantic izing\nro lin\nprocu re\nprah lad\nplari del\npen ley\npe koe\nparam speak\nozz ie\nomnam ah\nomen ico\nol az\no ip\nnm fcofficial\nner ul\nnaj ia\nmulti modality\nmul larkey\nmul her\nmargin alisation\nmarch al\nmanti ses\nm life\nleban king\nle ola\nla fuente\nkor le\nki est\nken ickie\nk mbappe\njik lian\njait dp\nj churchradio\ninge agle\nin dor\nik pe\nhop ital\nhal ak\nhac ket\ngo hawaii\ngen ève\ngar row\ngar finkel\ngam ely\nfiladel fia\nfight ins\nevil legas\ner st\nec inemas\ndncle aks\ndisembar ked\ndemp o\ndanneel harris\ncv f\ncre matory\ncinder block\ncatal ina\ncar lyon\nbrown y\nbody power\nbo quer\nbli fe\nbarber o\nav ram\nausv wi\nat mo\napo loo\nandy serkis\nali ano\nak dong\nag twitter\naffe e\nðŁĴĸ ðŁĴŀ\nðŁıĢ .\nðŁħ± ï¸ı\nðŁ¤ º\në°ķë³´ ê²\nãģ® åĽ½\nzhen ya\nzach arie\nxo yo\nwra bel\nwait wait\nviro qua\nvijay an\nvi veros\nvet tai\nve ut\nvance joy\nupro arious\nun tag\nud ell\nu thman\nts ars\ntoys betoys\nti meeee\nthe york\ntay port\nsub divisions\nspor tw\nspart annation\nsouthern miss\nsla ys\nsh ange\nse ke\nscriptw riters\nsch nu\nsar l\nsac ross\nsac anime\nsa stre\nsa inted\ns sps\nrol an\nre attached\nralu ca\nrai ffe\npublic sch\npremon itions\npoint and\nphantom opera\npa ha\nout world\nout d\nofficial c\noffic efurniture\no tu\nnong shim\nnew game\nnerd camp\nna iman\nmull ica\nmlb fc\nmis in\nmaurici om\nmatta poisett\nmaster man\nmaris ela\nlet toysbetoys\nlei dy\nlanc elin\nlam ott\nlac asse\nkri zz\nkir on\njozy altidore\njig nesh\nj allow\nint al\nin chief\niffic ult\nhotho thot\nhar ma\ngry bau\nglobalartisth ma\nglassof bubbly\nf ong\neyel ash\nexol selcaday\nendow ments\nen raging\ned mv\ne ab\ndesig no\nder yn\nder rius\ndaniel la\ndam ara\ncou pe\nconstric ted\nconfin ing\nconce tta\ncoma stia\ncom ac\ncoach bill\nco ale\nclau diag\ncityo fo\nchandra pur\nch anti\ncedar town\ncards againsthumanity\ncap uch\ncan ol\nbts world\nbru eg\nbrand t\nbitcoin talk\nbcu hb\nbat week\nay aw\nastu rian\nast and\nar nim\nappe al\nano des\nam ang\nalex change\nakh mat\nak sar\nag utter\nac cone\n) \'.\nðŁĺĤ ðŁijĮðŁı¼\nðŁĩ§ðŁĩ ¸\nîIJĴîIJĴ îIJĴîIJĴ\nèª ŀ\nâĬ Ļ\nzz le\nzen aida\nyo hannes\nxadee journalist\nvolei bol\nvit rio\nvitrio lic\nveronic aroth\nup fest\nunmatch able\ntrumpuk visit\ntriple talaq\ntim ryan\ntemp at\nte sfaye\nt weak\nsw aby\nsuz ana\nsupply co\nstr acker\nste marie\nstab by\nsta verton\nsq ld\nsou la\nsnow board\nshinj iro\nshim kus\nser an\nsb ks\nsant amari\nryanhunter reay\nrun tastic\nrun skg\nrip nelsonmandela\nregi us\nraoka vitha\nrajag opal\nradio surgery\nquili brium\nquaide azam\npride parade\npon nu\npollok shields\nplat y\npa ju\np and\nover bridge\nor ona\nophy l\nonline auction\nnus ingapore\nnc pc\nmurphys law\nmur uga\nmu shishi\nmu hur\nmtv uk\nmoving quickly\nmo ora\nmis d\nmcget tigan\nmam ar\nly st\nlu carelli\nlex ile\nlass wade\nlamar ca\nla vaux\nkir alı\nkings things\nkim berlin\nkar ura\nka aa\njin x\nji my\njadap smith\nit gets\nirre deemable\ninno gy\nilla warra\nhydroxy cut\nho cr\nhef ce\nhand al\nhaeun dae\ngrass field\ngha ffar\nfu leight\nflat ly\nfi as\neu il\nes adler\nemployee benefits\nelin coln\neditor schoice\ndrawe veryday\ndor ji\ndonat elife\ndl f\ndepaul u\nde tik\ndand unn\ncur rie\ncor sini\ncon tort\ncompet ently\ncod man\ncla hrc\ncic carelli\nchaper oned\nbur nin\nbuc to\nblan kety\nblacklist irgc\nbetterthan yours\nbenedic tus\nball an\nate man\nalexander skarsgard\nacceler ant\na ach\n. ðŁĺĨ\n**** ****\nìĦ± ìļ´\nëł ¤\nâij ¢\nÌĦ âĸ½\nyou too\nyo sp\ny it\nxen akis\nwoo sh\nwonder women\nwicked wednesday\nwi max\nway days\nwatch oftheday\nw ends\nv me\nu af\ntw illiams\ntu llis\ntru by\nthu l\ntech comm\ntai you\nsi su\nscip y\nscho ch\nsch es\nsc lera\nsc ali\nsalam u\nsa dist\nrobert smith\nro miti\nrich ton\nreminis cen\nredol ent\nre arranges\nransom ed\npinch punch\npilgri mages\npeter king\npan americana\npakistann ature\np gb\nover top\nornitho logists\nol aya\noff wht\nnasa earth\nmé rida\nmy man\nmurdershe wrote\nmu do\nmor ikawa\nmoo i\nmoney bag\nmodel e\nmix show\nmit ra\nmind fullness\nmin iso\nmeravi glia\nmer an\nme ols\nmazz eo\nmartin o\nmari en\nmar acle\nluck less\nlotu ses\nlogic pro\nligh trail\nlifeat sea\nlets doit\nlee kuan\nlebo res\nlar s\nlamborgh ini\nkunsthistor isches\nkmc kidd\njo ely\nir retriev\nin play\nhome renovation\nhom eles\nhere eee\nhem lines\ngrave tt\ngr ane\ngov garyjohnson\nge tsu\nfrench polynesia\nfree world\nfour cade\nfa es\nf ap\neveryday iloveyou\nentrepre nuer\nem iller\nearth month\nea seof\ndrogh eda\ndpan ikkar\ndolby atmos\ndirty water\ndevon franklin\ndeath wing\ndad s\nd oud\ncuri eux\ncowboy fb\ncolour ation\nclassic film\nchri sn\nching on\nchin sky\ncher aw\nch acal\ncav snation\ncamp bestival\ncall ard\nblue dot\nbere jiklian\nbaris al\nawa ji\natt inam\narizon afball\narbaaz skhan\nap nic\name th\nal ts\nal fam\nade goke\n:: .\nðŁıĪ @\nðŁıĩ ðŁı¼\nâĿ¤ï¸ıâĿ¤ï¸ı #\nาภĹ\nzing ara\nyou have\nwo ahhh\nwind less\nvietname se\nvampirethe masquerade\nv hope\nur ss\nun noticeable\nuk photoshow\ntur gut\ntranscrip tomics\ntr bin\ntor ano\nthemac belfast\nthe pack\nthe bachelorette\nter ium\ntd kr\nswif ty\nsuppos itory\nsportscenter ph\nsports blitz\nsofar sounds\nshu ck\nsasikumar dir\nsan th\nsan joy\nri ess\nreasonswhy welove\nre tells\nre programmed\nram p\nplot line\nplay more\npharmaceu tics\npay pigs\nover strand\not ville\nomni presence\nola fu\nokon jo\nocon taldo\noccident alis\nobedi ently\nob elli\nmuseum next\nmuscle car\nmontan ez\nmis ner\nmi hara\nmess ick\nmedi atour\nme ret\nm for\nle tti\nkinok uniya\nke ion\nka hanam\nkahanam oku\njim erson\njame stown\njam et\njaguar usa\nit sgo\ninst ay\nimpre ss\nhuman i\nholliday sburg\nhealth policy\nhe mma\nhardwell onair\nhaiku jam\nhaha hh\ngucc icruise\ngom en\ngold mining\nglen ferrie\ngennar ocontaldo\ng star\nfox rock\nfly fishing\nflo o\nfin alization\nfalsi fication\nfa hadh\nesta dio\nequit ably\nenumer ation\nemil yy\nem elt\near m\ndom ineering\ndevop sday\ndeborah annwoll\ndam ba\nda beast\nchu bs\nchik magalur\ncarsand coffee\nbx tch\nbri quette\nbi bio\nbanff np\nbad hairday\nattenu ator\narnold palmer\napple day\nandre au\namericor ps\nalph ington\naham ed\nag amma\nadobe illustrator\nadi e\nðŁĺı ðŁĴķ\nðŁĺįðŁĺį âĿ¤ï¸ıâĿ¤ï¸ı\nåĦ ª\n« ม\nzdar sky\nzah ira\nyo ku\nyeare ver\nyar mol\nyach ting\nwy bor\nwork arounds\nwin free\nwhowhat wear\nwey den\nwer nick\nwaw g\nvallu var\nvallab hbhai\nv crs\ntran scriptions\ntic hin\nti ron\nthe hills\nth im\nteh ri\nteam messi\nsty rke\nstro h\nspirome try\nspald ing\nsothebys realty\nsling in\nshrews berry\nshipy ard\nsher ali\nsha stri\nse less\nschem mel\nsch movies\nsc magazine\nsafe schools\nriz wan\nresna is\nrec rimin\nread more\nre ws\nquan ah\nprince sse\npokh ran\npel u\npel otas\npaw ning\npat eros\nover spill\nover burdened\noun is\non fleek\nolatun ji\nofficial camogie\nni ji\nng lifestyle\nnewton more\nneu e\nmy d\nmulti mode\nmis cues\nmis carried\nmichael chiklis\nmicha ux\nmatt taven\nluci fans\nlucas oil\nlostgirl series\nli sat\nleekuan yew\nlakeland terrier\nki pru\nkate garraway\nkapp ak\njonny wilkinson\njo edon\njn co\njas in\nirishcancer soc\nim seth\nig ing\nhurricane prep\nhinchin brook\nha vo\ngyne comastia\ngigu ere\nghan oush\nfy ing\nfootbal lau\nfine man\nfig c\nfatherjohn misty\ndigital agency\nd now\nd line\ncurmu dge\ncsu sb\ncon comit\nclay man\nchi omega\ncher ni\ncharle mont\ncer van\ncan ino\ncamil amendes\nbrown barrie\nbomb proof\nbk club\nbintur ong\nbest es\nbend or\nbam bini\nback home\nav ity\nat omar\nart ane\narmi jo\nangelique kidjo\nal avi\nad hoo\na university\n^ âĸ½\nðŁĺį ðŁĻĮðŁı»\nðŁijįðŁı¼ ðŁijįðŁı¼\nâĢº âĢº\nઠĹ\nzimzalab im\nzi um\nyy ours\nye stur\nwi vedi\nwe sa\nvs jax\nv official\nun free\nu hhhhhh\nturf way\ntuney ards\ntun ny\ntread le\ntransp acific\ntitus oneil\ntitusoneil wwe\nthereal kmckidd\ntheposh official\nthegreat gatsby\nthe basement\ntaj mahal\nsuf fixes\nspiritual awakening\nspike island\nsoccer dotcom\nso hu\nsky bus\nsk ater\nshar ara\nse tag\nrz esz\nrte gaa\nroad tripping\nripp ed\nrick springfield\nrich ter\nra uk\nq do\npom be\nplay harder\npenc illed\np man\nown town\nodd s\nns ls\nnko sa\nng am\nn wed\nmu ssa\nmr darcy\nmicro car\nmar wari\nmalm stro\nmac jc\nma ung\nm wo\nlin in\nlake view\nl summit\nku ja\nkirrie muir\nkeepfighting michael\nk maw\njhal akon\nja ja\nislam istheproblem\nic title\ni ven\nhudson weather\nhov land\nhol steins\nhipp ea\nhar dens\ngwy dir\ngw ladys\nguy zz\ngod manchester\ngo ti\ng ors\nfu jin\nflash tweet\nfirst grade\nfac daniels\nf kd\nen sing\ne wing\ndu shi\ndet sky\ndel mont\nday stom\ndan h\nd sena\nd land\ncy fair\ncu mali\ncraft bizparty\ncour son\ncoffee script\ncho han\nchi ons\ncep tive\ncar doftheday\ncampe ona\nbuli mic\nbri mbank\nboudhan ath\nboom slang\nboom bayah\nbo ty\nbo the\nbis wa\nbin us\nbaby led\nb hh\nas par\narkh angel\namnesty usa\nalve olar\nalle stree\nali a\nafro house\nadrian edmondson\nactu ate\nactress life\n(( (:\níĻ© 민íĺĦ\nèĭ± ä¼ļ\nج Ùħ\nz andi\nyose ary\nyaf antasy\nwhipp any\nwbb mnewsradio\nwall bridge\nw you\nvy rn\nvar chives\nun ak\ntritic ale\ntre sem\ntoo hot\nthe journey\nten anted\ntall ship\nta pio\nt morello\nsyn ched\nstep family\nstay la\nstaser aintv\nspringhas sprung\nsla ppin\nsl mc\nsko ch\nshad ings\nsh kin\nsergio garcia\nsav vas\ns gi\nru pali\nron del\nri va\nrequis ition\nrendle sham\nrecon quista\nraven scourt\nrah mah\nragh eb\nra ir\nqur an\npuro resu\npor gs\npneu ma\nperiodon tics\npen alise\none ering\nod ourless\no cker\nnu bbin\nnaf is\nmy hill\nmin v\nmil azzo\nme gau\nmanu rewa\nmad h\nmac es\nlil ja\nlibby schaaf\nlarge sse\nlaid ley\nl trs\nkur saal\nkome diab\nkfm za\nj antz\nhand cart\nha ining\ngu yoseary\ngoldenstate warriors\ngil les\nger ads\ngames master\nflu o\nflavor ings\ner onen\nenergy access\nen ro\nek im\neco logie\neart fair\ne stel\ndisney channel\ndgand yofficial\nden isa\ndel vecchio\ndead rising\ncu bi\ncro eso\ncredit cards\ncor oz\ncli ocup\nchew able\nchamber land\ncad dell\nbook out\nbla bla\nbis p\nbill yon\nbhar ti\nbec ton\nba ret\natro x\nani us\nall rise\nadve ction\n? ðŁ¤Ķ\n<<<< <<\n( ^-\nåħ ī\nൠĭ\nworld fest\nwith heart\nwat kiss\nvinyladd ict\nvino gra\nve dt\nvander pool\nuss ain\nur mi\nun sophisticated\nun desirables\nun approachable\nty rie\ntu lp\ntrust me\ntraumain formed\nthedead daisies\nthe jagmeetsingh\nthar bour\nsy ro\nsy chi\nstop avn\nsteel town\nst francis\nshu ichi\nshav ing\nsecond home\nscar f\nsas ural\nsandwell council\nsab lan\nrohan bopanna\nresc ities\nrecor riendo\nration alist\npie stewa\npeep z\npap ato\npal af\npag odas\noh s\nneel ima\nmother ingsunday\nmonet ary\nmassaso it\nlö f\nlu lay\nloch ner\nlo vering\nleedu chat\nkyungsoo day\nkj show\nkil ala\nkh ate\nkay ani\nka ist\njhalak reloaded\ning post\nin opportune\nin concert\nimage sof\nike men\nhalloween time\ngo tem\nglend inning\ngender bend\ng afford\netihad stadiumau\nel by\neaster monday\ndon nap\ndiamon t\ndeano gorman\nda sia\nctvmorning live\ncron kit\ncir lik\nchri scar\nchin ta\nchi ado\ncam bon\nc dre\nbrandonj routh\nbon doc\nbo olin\nbid ston\nbi kela\nbegum nadiya\nbab an\naun gier\nartiston instagram\naqu arist\nannihil ates\nanim enyc\nald abra\naj m\nair dro\nad ome\nabor tive\nðŁĺ¬ #\nðŁĴĻ ðŁıĢ\nðŁij¼ ðŁı½\nðŁij¨âĢį ðŁı«\nðŁİ Ĵ\nà® ´\nर द\nzeecine awards\nwildflower ctr\nwater management\nwai kiki\nvon taze\nvoice top\nunlv mbb\nun born\nul er\ntweeta photo\ntrans acting\nthe jeep\nthai pusam\ntech sters\ntasty trade\nsw ich\nstom ata\nsta th\nst mt\nsol l\nsla thered\nside y\nsegu ros\nsc ps\nsc chat\nsar ag\nrn k\nrend ts\nreel foot\nray ana\nraisingthe bar\nra pin\npu tri\nprophe tic\npress burger\npor ty\npla xico\nper r\nper ps\npal matum\nover age\nouteni qua\noro driguez\nordin aire\nopen farm\nnj dv\nnike uk\nnau ck\nnar thex\nnacion ales\nmor ti\nmone ill\nmoneill sf\nmed spa\nmcclo y\nmc grain\nmat rons\nmaryam nawaz\nmar gate\nm ds\nlease holders\nlaura osnes\nlamin itis\nl den\nko stya\nkis mat\nkii ara\nju bb\njames r\nil ham\nico in\nhy me\nhou rigan\nheart landon\nheart fulness\nharper adam\ngoogle pixel\ngon u\ngirly things\ngin i\ngillian jacobs\ngenoci des\nfon dled\nfi ster\nfashion gram\nf tr\nexplo der\nexib ition\nex ilis\nesh our\nenglish language\nedd zeko\ndon ot\ndo led\ndisal low\ndavid giuntoli\ndalla ss\ncouncil day\ncon boy\nchan thaburi\ncerebro vascular\ncast ros\ncalgary police\nc ÃŃ\nbromel ain\nbridal market\nbilly crystal\nbij li\nbatman vs\nba ise\nammy virk\nadil hussain\naap ki\n.... ..!\nðŁĴ¦ ðŁĴ¦ðŁĴ¦ðŁĴ¦\nä¹ ĥ\nâĿ¤ï¸ı ðŁĴį\nའ²\nà± ª\nz suz\nz sc\nz ali\nwor g\nwillie geist\nwar shaw\nwant s\nvi vat\nve co\nvanat chathiram\nvan brugh\nusic live\nureport ke\nunchar ted\nun too\nuil texas\ntoulouse fc\ntom oka\nti jani\nthe town\nted leo\ntechno polis\nte itel\nt zi\nswith un\nstudio city\nslovenia info\nsl q\nsky bar\nsi raj\nshain anc\nschipper ke\nrolling loud\nro dro\nrio ter\nre populate\nrain or\nragaz ze\nrac tice\npoint les\nplot kin\nplayer stribune\npic ador\npeewee herman\npay roll\npac os\nour stars\nou sia\nother kin\nor rrr\nob trusive\nnorth well\nno ongar\nnin jas\nnic hd\nnewpor tri\nner dgasm\nne res\nnational dessertday\nmu vy\nmayweather pacquiao\nmaximili ano\nmasti mania\nmar sy\nman ap\nmal ate\nmakelife aride\nly y\nly ria\nleas owe\nlea quitaine\nlay un\nlast chance\nlan ow\nla quan\nl porchestra\nks v\nkor ach\nkil dee\nk nation\nju iz\njohnnyg weir\njes sel\nj arri\nital ks\ninun date\ninter weave\ning rati\nib is\ni aido\nho ste\nhar ket\nhapp p\nhan amaru\nha ug\ngreat memories\ngo tyj\ngo ines\ngilber to\ngeek dom\ngalax ya\net ana\neste fania\nellip ticals\ne stro\ne ecs\ndur gin\ndontbomb syria\ndo dsworth\ndead beats\ncurric u\nct politics\nconfigur ator\ncolly er\ncollegi ality\ncolec cion\nco su\nco dex\nclau ss\nck ler\ncityand colour\nchi mie\ncardiff bay\ncapital stb\ncallo fcthulhu\nbruhits zach\nbru yere\nbray brook\nbraintu mor\nbolly mastimania\nbo gar\nbeth lem\nben ro\nben ck\nbang ura\nbal adi\nati as\nar curi\nankylosing spondylitis\nanc elife\nan eda\nambi ental\nalpin ist\nalexandro v\nabo lishment\nab dash\na hin\n.... ..?\n! ðŁĶ¥\nðŁĺĤðŁĺĤ ðŁĺį\nðŁĶ ī\nðŁĴľ ðŁĴĸ\nê·¸ëŀ ¨\nãĥĸ ãĥ©\nãĥ³ãĥ Ĩ\nà¸Ķ à¸ĸ\nza ghari\nym b\nyc nature\nxabial onso\nweather watchers\nve gal\nus womensopen\nunob tainable\nun volunteers\nu selections\nu donis\ntwer ks\ntr na\ntish james\ntimber frame\nthistle down\nthe stage\nthe palm\nthe champ\nth ely\ntee zy\ntax cut\nsé rie\nston efly\nssun stein\nss om\nshum way\nse bas\nsale sian\nsak shim\nry se\nry pt\nrotor adar\nred hook\nre creations\nran jan\npu dd\npom poms\npl tw\npemb scoast\npe als\nparliam en\npalindro mes\np sim\nover rides\nonep ur\nnik laus\nnen ownews\nmueller investigation\nmicro bead\nmehra uli\nmb alula\nmateri alizes\nlyre bird\nliv ant\nlightning deal\nku roi\nkp j\nko va\nkims convenience\nkh of\nkatzen berg\nk under\njour dandunn\njnj news\njim ura\njeep thing\njamesp oulter\njamesmar ster\njag ga\nich ry\nia fe\ni sport\nhuntingdon shire\nhorseand hound\nhope fulness\nhonor ing\nhazel dean\nhappy tweet\nh fo\nguti érrez\ngu ery\ngrace church\ngo explore\nghes quiere\nfunky town\nfly catchers\neuro centric\net witter\neli sts\ned sheer\ndrink bodyarmor\ndispro ving\ndefinit ely\ndecath lete\ndebt trap\ndan sen\nd memories\ncw f\ncsn chicago\ncostu m\ncom pre\nclimateaction now\nchlor o\nchall en\ncec ina\ncas ssunstein\ncanon usapro\ncad wal\nbro force\nassas in\nart crew\nalve ar\nal toon\nagon isingly\naga st\n. )!\n- +\nðŁĺĤ ðŁĺĪ\nðĿĻ ļ\në ķ\nç ¤\nà¹ģภ¡\nzom bs\nzof ia\nyan key\nwokv news\nwiz bi\nwi pro\nwe buk\nwarwick adavis\nviz wizbi\nvilla franca\nvie tor\nvenice filmfestival\nvehe ment\nuefa championsleague\ntsne deker\ntri eu\ntoro idal\nther ight\ntheli st\nthe arto\nthank youn\ntemer ity\nswachh india\nsth d\nsta a\nss wim\nspin abi\nson oda\nsock sout\nso dding\nsimul acrum\nsimpl on\nsign posts\nside walls\nshak yam\nsetau ket\nsat ine\nsand storms\nsa adia\ns vet\ns grace\nrun o\nr ham\npro long\npre tori\npo veda\nphir se\npe gues\npatro clus\npal omo\nover lake\nout magazine\nour heroes\noun ce\nori ordan\non gus\nol le\nof sted\nny heter\nno conversion\nnight spot\nn ols\nmy twitter\nmood iness\nmo pa\nmo dems\nmedit ators\nme spo\nmax ted\nmax pro\nmal olo\nmail let\nmag nier\nloo ka\nlo sar\nlear month\nlandmark game\nl wk\ninfer no\nin gos\nhy nd\nht ml\nhe wa\nhar ap\nhal ore\ngra yer\ngold thorpe\ngal gos\nfusil ier\nfrei berg\nforward together\nfm wales\nfat ai\nez idi\nexp consulting\netv scandal\nelevate gg\ndoofen shmirtz\ndo we\ndi restra\ndefin iti\nde ely\ndan ke\nd smith\ncreepy puppet\ncot man\nconfl ating\nchinese theatres\nchan tier\ncelebr atin\ncashme recat\ncaravan serai\ncar photography\ncamp ello\nc pos\nbryce papenbrook\nbrand tsnedeker\nboo te\nbobvand illen\nblon der\nbizim hikaye\nbil ko\nbha id\nbensen ville\nbear sted\nbath i\nballa chu\naw oman\naven e\narts district\nart u\napcu kingdom\nanti static\nandro b\nalphanu meric\nalmer ÃŃa\nagit prop\nad reno\nðŁĺĬ ðŁĺĭ\nðŁ¥ Ľ\nðĿĹ¢ ðĿĹ\në¹ Ľ\nâĹ ĩ\nze bu\nyor lando\nyoff ish\nx anthi\nwork up\nwetherby hour\nwaveform gaming\nv ory\nus nsa\nus ami\nun ning\ntri on\ntravel noire\nth burne\ntb ptv\ntan zi\nsy b\nsun trap\nsummers lam\nsr ch\nspl ant\nshot left\nshan tou\nsapp arel\nsanssou ci\nsal ang\nrod kar\nrho desi\nrh cp\nre fashioned\nqui am\npumpkin seed\npuma southafrica\npre ux\nprati ma\npog dogs\nplatt ner\npint size\nphen mj\npau lan\npau dybala\nost ler\non style\non salenow\nol oroso\nni ddry\nnew burg\nnast ase\nmu six\nmoi sten\nmixer streamer\nmar mal\nmakav eli\nma fa\nlou n\nlong ter\nlon done\nlime wire\nla en\nkor ba\nkom olika\nkk crvenazvezda\nkav ana\njur gensen\njamesmarster sof\nit sma\nip sen\nino saur\ning love\nic ml\nic amp\ni wt\nhi dup\ngre bel\ngra dings\ngr antly\ngl ück\ngilli gan\ngar aki\nfor freedom\nev als\nesh t\ndu ga\ndo gin\ndc sd\nct z\ncow man\ncor ke\nconvey ancer\ncontribu tory\nchiric ahua\ncatal in\ncarstar phenmj\ncar yl\nc pi\nbu bur\nbrun dle\nbrown sboro\nboston fire\nbody painting\nbethnal green\nber line\nbedd gelert\nbe zz\nbakers field\navi acion\naustrali as\nagu ita\nage ant\naeroline as\n$$ ,\n! ðŁįĢ\nĤ ĺ\nðŁĻĮðŁı» âĿ¤ï¸ı\nðŁIJŁðŁIJŁ ðŁIJŁ\nðŁĩ±ðŁĩ ¾\nìĺ¨ ìľł\nä» ĭ\n人 rt\nâĥ£ âŀĸ\nya day\nx slasvegas\nwatch face\nw ge\nvoyeuri stic\nvo va\nvisual merchandising\nver wood\nvas ile\nup y\ntwopad docks\ntweet link\nther ace\nte be\nta ar\nt go\nsun danc\nsting less\nsosn icaragua\nsingleuse plastic\nshare file\nse acombe\nscre ek\nsargas sum\nsarai va\ns enga\nroosevel ts\nright sarehumanrights\nrejected jokes\nreg icide\nre ais\nra sika\nra kh\nq urban\npul ps\npom pe\nplat ano\npic tori\npeter roskam\npase kand\npasekand paul\npan oz\nno it\nnew mom\nnd ma\nnapp anee\nmur mu\nmotor hour\nmorph ism\nmen ted\nmatra ding\nmath art\nmark duplass\nmariob autista\nman official\nman gel\nmal low\nmal formed\nmadein scotland\nm seto\nlo bato\nlive jazz\nlin ac\nli salam\nla ge\nko ken\nkey strokes\njuan man\njohn elway\njagu a\nindeb tedness\nin ri\nin conveniently\nhuar aches\nhost as\nhook worms\nhil ip\nheartsofoak gh\nhaw kinson\ngreg jennings\ngom m\ngod flesh\nglos sum\nghar ana\nfreed land\nflori dat\nfl atlay\nfin ola\nfin ear\nfeder ation\nfan euil\nent en\nen quanto\nefan club\nedmundmc millen\ndistant worlds\nderek theler\ndc te\nda esh\ncu dnt\ncreati ven\ncra ver\ncoton easter\nconfor mance\nclar kie\nciar án\nchrisber ghd\nchi w\nchekk achi\nch ach\ncav anagh\ncas pers\nbrew is\nbeck ys\nbe hm\nbaz za\nasap nat\nar rrr\nani sta\naneurin barnard\nameans business\nalex slemonade\nale cology\nad sit\na hil\nðŁij ŀ\nðŁİ¤ ðŁİ¶\nâĺ ¢\nzi el\nyu ku\nyam ec\nxi ah\nworldskill suk\nwn ation\nwh omes\nvw beetle\nvo sloo\nvale ska\nul va\nucht dorf\nu cros\nucros spop\ntough man\nthought bubbleuk\nterp stra\ntay m\nsyzy gy\nswe mfa\nsun ni\nsun king\nsumm ering\nstone island\nsteph curry\nss ch\nsp insters\nshim o\nseen ur\nsap cp\nsan jo\nsac valley\nra bal\nprogram ma\npresidenti alelection\npic on\npiano forte\npegas o\norchi daceae\nopen space\nop rint\nocean arium\nn fm\nmore years\nmor umbi\nmezz o\nmeu len\nme up\nmal dive\nma kau\nlovemy family\nlouren co\nlo hen\nliket kit\nkick son\nkel u\nkare lian\nju nee\njohn travolta\njersey boy\nit yo\ning ian\nimper o\nhud hud\nheight ening\nhapp ily\ngri fo\ngreen tech\nge dsb\ngaz asi\ng gh\nfrench town\nfest ool\nex is\nesc apology\nempire strikesback\nel ga\nel fen\neck ner\ndra che\ndonne come\ndonnecome cipare\ndj booth\ndi jual\ndecor ah\ndaf f\ncul o\ncro ghan\ncovar rubias\ncold case\ncas cio\ncar canet\ncap alaba\nbur meister\nbo lete\nblu ess\nblo k\nbioshock infinite\nbg motogp\nbbc nottingham\nbaybay in\naz oulay\nay eeeee\nappetite for\nanti ga\nanil ine\nangk lung\nak ap\naids walk\nah p\nag rf\n!! -\nðŁĺ¨ ðŁĺ¨\nðŁĴª ðŁĴ¯\nðŁijij ðŁĴĸ\nðŁIJ¦ ðŁIJ¦\nðŁıĥ ðŁı½âĢįâĻĢï¸ı\nðŁĮ¬ ï¸ı\nðŁ¤© ðŁĺį\nìĿ´ì Ķ\nâŀ ¢\nÙĤ ÙĪ\nün den\nyt ff\nyoko gawa\nyears agotoday\nyacht club\nwinner sh\nwhite people\nweyer haeuser\nwab o\nvzw buzz\nvine sh\numm i\nu vula\nu cia\ntraditional home\nthe sen\nthanks givin\ntempl in\ntal ca\ntai led\nsyl wia\nswift key\nstru m\nsk yn\nshadow cat\nsees outh\nseb divo\nse mu\nscy cle\nsar daar\nsan guin\nrani khet\nr hames\nquar tey\npre emption\npoldark tv\nplebe ian\nper ations\npen ang\npawn brokers\nox blood\nonto logies\nod ni\nnuf fiel\nnorth pennines\nnico tortorella\nmur gh\nmir amax\nmil bury\nmicro biomes\nmega projects\nmcgla shan\nmaurice benard\nmarr show\nman cino\nlo as\nlive inthe\nlegobatman movie\nleaves den\nle thaw\nlake town\nkru is\nkin ison\nka fue\njen kins\njaide ep\nim prisons\nichi ello\nhil aria\nhi mani\ngrizzly bear\ngreg grunberg\ngor gas\ngn z\nglan ford\ngam elab\ngage town\nfc academy\nfanta st\nexpen ding\nevan sdale\nemp angeni\nemily slist\nem presses\nell park\neli hu\ndul lahan\ndr jason\nday atthe\ndan ariely\ndam sels\ncsi ro\ncomm ing\nclare mont\ncivari ze\nciut at\ncity farm\ncis gender\nche did\nchantic leers\ncal care\nbur tons\nbon ton\nbom et\nbl ough\nben haenow\nben ben\nbegu sarai\nbee de\nbak an\nbag ua\nas cc\nar cy\nanni ster\nanglic ans\nalle les\nal ute\nagu delo\nafl north\nadri aan\nade osun\nab bv\nðŁĻĪ ðŁĻĪðŁĻĪðŁĻĪ\nðŁĵ· ðŁİ¥\nì°½ 민\nå¾ IJ\nz ino\nyouth summit\nyour call\nwn cwx\nwith nature\nwi eck\nway station\nwatchme work\nvoor hies\nviews for\nveri thanam\nv fest\nus new\nura sawa\ntv j\ntroop a\ntri fluorome\ntrans duction\ntom or\ntin dle\nthe press\nte oh\ntan zer\nsuper ted\nstor i\nsth our\nsteam punk\nsl oman\nshil pi\nshamp oo\nsh ash\nsex periment\nsan sevi\nrugg eri\nron ix\nrob shaw\nri vette\nrc slt\nraghe balama\nrachel doesstuff\nque ster\npropeller head\npra z\npotenti ality\npo groms\nple e\npinup girl\npetz old\npattim urin\npat ang\nor ley\noce ancity\nnur gle\nnun dah\nnowisthe time\nnor wood\nnomuslimb anever\nni vas\nnef yn\nmous avi\nmiddle village\nmey hem\nmedal of\nmaxim ises\nmart elly\nmarianor ajoy\nmalmstro meu\nma hur\nma fu\nlu bber\nlovel ords\nlong ship\nle pel\nlat l\nla chowski\nl alab\nkarab akh\nk oral\njewellery quarter\njay mewes\nj dc\niri zarry\nini sterio\ninfection prevention\nin eland\nicy cle\niclassical com\nic re\nhou f\nhoo fed\nhol dren\nhek mat\ngrote sk\ngreat apes\ngo thel\ngi at\ngadel maleh\nfrenchal ps\nfore telling\nfilm tv\nevery ones\nengland v\ne ppo\ndo ar\ndc is\ncool um\ncompeten ces\ncolon ise\nco bi\ncity year\nci anci\nchild protection\ncandle mas\nbullet proof\nboat y\nblv ck\nbeing coop\nband q\nbally mal\nbagsof help\nau llo\nanirudd ha\nangeli e\nam gu\nam ab\nal annam\nabo i\naban kers\naaaaaaaa aaa\n. âłĢâłĢ\nðŁį´ #\nìĦ ł\né¤ ¨\nà¸łà¸²à¸ ŀ\nzan es\nz illa\nyor dano\nwahe eda\nw stc\nvolcan ology\nvic eroy\ntrum pian\ntric ycle\ntre ys\ntomo hiro\nthe profit\ntake s\nswi pe\nsumptu ously\nstock holder\nstead iness\nstar log\nss ilver\nsre i\nsp igen\nsor presa\nson ye\nsoccer six\nsmall talk\nsky cricket\nsie wert\nshimaz aki\nshiki gami\nsco ble\nsantay ana\nrup turing\nrose well\nrosco ff\nroot stech\nroman zi\nredwhite andblue\nraic hur\nrai han\npv p\npp u\npharmaceutical medicine\npey to\npa zuzu\npa vic\nof en\nobam ba\nob om\nnor lin\nno confidence\nnn sa\nnk ana\nni pe\nn cep\nmultic enter\nmouth guard\nmi az\nmeop ham\nmd v\nmay nes\nmau de\nmari jke\nlun aire\nlifeof desiigner\nle comte\nlaine y\nksh b\nkom in\nkir win\nkane wwe\njic ek\nisal oni\nisa ach\niran election\nin attention\niit madras\nhype app\nhero in\nhepatoc ellular\nhar key\ngwilli mbury\ngu altieri\ngo camel\nglycer ol\ngk union\ngangnam style\nfre ke\nfre el\nfel brigg\nfaz ura\nfaul ds\nfau rot\nev aa\nerskin eville\nepic reads\nechel ons\neaster seal\ndr ane\ndoc teur\ndisney hyperion\ndiplom at\ndiade troit\nde wees\ndd lc\ndar ci\ndant as\ndanne mora\ncout u\nchor lton\nchic ou\ncar fest\ncap sizing\nc micon\nbritish spiders\nbrac keted\nbom ar\nbo ber\nblog paw\nbay les\nba chill\nba cher\nath ousand\nar leta\namuk erji\nale ague\nad ames\nacc tourney\nab rit\n??? ?"\nðŁĺįðŁĺįðŁĺį ðŁĺĺðŁĺĺðŁĺĺ\nðŁĵļ ðŁĵļ\nðŁĴ© ðŁĴ©\nðŁİĵðŁİĵ ðŁİĵ\nzapo tec\nye pes\nxx yyxx\nwit kin\nwhipp oor\nvu lus\nvivi ano\nvisit japan\nvar den\nvanqui sher\nvan u\nv dsl\ntu xie\ntrivi athursday\ntravel africa\nto kaji\nteve rest\ntekno logi\ntech nis\nta vit\nsyncop ated\nsw ool\nsuper couple\nsundar ban\nsub mitter\nstru ff\nstar force\nsportsc asters\nsp ä\nsmriti vidyarthi\nsig sauer\nshi bu\nsequo ias\nsc b\nsaul williams\nsare k\nrosen kavalier\nron in\nren toul\npra de\npink history\npic hardo\nphyto ph\npen za\npal et\nourland our\nor li\none year\nnr lakl\nnew urbanagenda\nne iges\nne els\nn stom\nmom ota\nmade at\nlyn donville\nloonathe world\nlo anees\nliquid lipstick\nlay men\nlar avel\nkim bo\nkar thick\nk sf\nk ren\njun yeol\njav elin\ninequ itable\nimag ing\nida home\niam dbanj\nhagg en\ngul mohar\nglar ingly\ngd antes\ng elo\nfu xin\nfren kel\nfrank ness\nfr ys\nfollowthe cow\nelectro magnetism\ndublin marathon\ndubai marina\ndesig ne\ndeb nam\ndare ss\ndar rion\ncontinuous delivery\nclarem bee\nclar dy\nclan william\nciti bikenyc\ncebu anos\nc figueres\nbu mming\nbra p\nbra ben\nbier ut\nbeauty bloggers\nbeauty and\nbeaker head\nbalon mano\nbal derton\nback slash\nback nt\nba ilo\nb flo\naward winner\nau te\nat sb\nassou line\nas oc\narmand de\nand dddd\nali jo\nagu ardiente\nadvis or\nad alli\na events\nðŁĻĮðŁı¼ ðŁĻĮðŁı¼\nÙ ¢\nع ر\nzai batsu\nz if\nyog scast\nwww blogs\nwake andbake\nwag gon\nvol aris\nvaleri o\nval ores\nv yan\nulster museum\ntranshuman ist\nthri ving\nthr ur\nthere for\nthe island\ntc ja\ntaw dry\ntam riel\nsugar hut\nstay well\nstan bic\nsp idad\nspidad mitchell\nsolenn heussaff\nsimil ar\nseo joon\nsas ne\nsand ino\nru zzle\nrestar ta\nreli asson\nre ten\nraz ones\nr khan\npri js\npp ls\npou lain\npo ire\npin points\npetre lla\npeer age\npec kem\npeace forchange\npas kal\npart is\nparasit oid\nor adell\nonz ales\nober st\nnps official\nnph w\nnicole and\nnichi ren\nnational loveyourpetday\nmu za\nmol ysis\nmiri anag\nmirianag rassi\nmichelle phan\nmateri alizing\nmasa o\nmargare tta\nmake m\nmag as\nle ire\nle ab\nlabor sec\nketu pat\nkam ble\nk croyals\njor hat\njo su\njeffreestar cosmetics\njak er\nj lab\nishq subhanallah\ninduc er\nim and\nilo cano\nick worth\nibm security\nhi po\nhand knit\nha em\ngo peng\ngim sswiss\nga etan\nflipk ens\nfil led\neye onthe\nes la\nencoura ger\nely ons\ndy i\ndr sarah\ndough boys\ndiscover able\ndel imitation\ndear born\ncr sh\ncontemp tuous\ncoat rack\nco xe\ncl inger\nce fc\ncapp rentice\ncam pero\ncaliforni awild\nbur wash\nbu stour\nbu sker\nbreakfastclub am\nbo dak\nbit trex\nbarri ga\nback packer\nb wt\nb sg\nat onal\nasu xx\nart matters\narro char\nap sphysics\nantic lock\nant sula\nalo isi\nak ins\naer yn\n" <<\nðŁĴĭ ⾨\nðŁİĦ âĿĦï¸ı\nðŁĮ ¨ï¸ı\nãĤ° ãĥ©ãĥĸ\nâĢ¼ï¸ıâĢ¼ï¸ı âĢ¼ï¸ıâĢ¼ï¸ı\nد بÙĬ\nä ki\nzah ran\nxe han\nx force\nwi za\nwho tel\nweekend read\nweb toons\nweare jcps\nwc ps\nw str\nvermic om\nveg ard\nunzi ata\nulti mas\nul trafine\nucl ambb\ntwin ks\ntime outs\nthe gallery\nth ence\nswift ness\nsuc at\nstrato varius\nstats zone\nsn cla\nsexy sunday\nsevery body\nsep toria\nseenur amasamy\nscorpion fish\nsco s\nrun neth\nric ki\nrhi an\nretic ulum\nres foundation\nred lion\npo sco\npba ontv\nparro toftheday\npap hi\npan ela\no zeri\nnortheast news\nno wa\nmuseu mc\nmotor land\nmccl ary\nmate ship\nmadhu du\nmaceach ern\nlin ec\nlie man\nlette rer\nle aches\nlamb ily\nla sairport\nkon st\nkle berg\nkle a\nkaushal army\nkait lynn\nkafka esque\nju raj\njohn carpenter\njay mcguiness\njacque storres\nj sp\nirish design\nire zumi\ningui de\nimpe tuous\nid ade\nich ella\nicec ap\nholi bobs\nhir schi\nhil ts\nhe dren\nharrypotter film\ngyeong bok\ngor nal\ngo recki\ngo further\ngla as\ngarri gle\ngan ap\nga illi\nfren k\nforte an\nfish lock\nfin det\nfer ron\nfanni emae\nexfoli ator\nex claims\nes mee\nenti es\nemmitt smith\nemb ree\nell it\ndrummond ville\ndr d\ndogs nyc\ndiversity intech\ndil um\nde pon\ncomment ated\nclu ff\nchi dori\nche fan\ncategori zes\ncar dell\ncanasto ta\nbride shead\nbri v\nbri jesh\nbre search\nbold ly\nbli ppar\nblack stone\nbiz women\nbefore i\nbe dou\nbe ag\nat ong\nar ges\nanalo gues\namare lo\nabhan sali\n- [(\nè Ļ\næµ ľ\nâŀ °\nâĶĬ âĶĬ\nಠŃ\nzax by\nxin yi\nwr ps\nwhiskey wednesday\nwak iso\nvici ou\nvegan recipe\ntt g\ntrivi umofficial\nthe cbso\nthati sall\nth iri\ntee zer\ntav leen\nt sak\nsubtrac ted\nsto le\nsteam town\nss rn\nsop io\nsm fm\nshe ppy\nser pa\nse ato\nscand rick\nsc ir\nsaw telle\nsac and\nro mig\nrent schler\nred lobster\nrealclear politics\nre growing\nrat v\nprojec ts\nprin sen\npri show\npe lec\npaw fect\npal merton\nota ki\not di\nor tunity\nonthis date\nol alla\nogden sburg\nof rac\nni ggling\nmy slf\nmuhyi ddin\nmini figs\nmikaela shiffrin\nmend inger\nmen ot\nmat es\nmagi sta\nmade inspain\nma kalu\nlympho cytic\nli kowski\nlauren holly\nlau be\nkur ti\nkrish namo\nkh uri\nkh ill\nj ör\nj haveri\nisol ationist\nintothe unknown\ninnocent i\niheart country\nhorn dean\nheartlandon cbc\nhabil itation\nha ole\nha ffner\ngreen landic\ngly de\nge ot\ngario ch\nfundament al\nfro ots\nfor one\nflat fish\nfayouth cup\nfaul k\nfathom s\nespre sso\nel na\neke inde\ndiversity matters\ndi ther\ndan ja\ndam ita\ncustom s\ncoa sta\nchou ler\nchen ery\nchembur studio\ncc np\ncassio bury\ncarla harvey\ncam pin\nby les\nbuc cos\nbu yon\nbou lay\nbook tours\nbene gal\nbap tise\nbalti erra\nball ymurphy\nat rac\nas itis\nar vest\nantagon izing\nan tre\nan amne\nall youcan\nalam in\nadventu res\nadel boden\nade b\nad jani\nacer ola\nðŁĺħ ðŁĺį\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ\nðŁĴ¸ ðŁĴ¸\nðŁIJ¯ ðŁıĪ\nðŁ¥ Ĺ\nì² ł\nãģķãģıãĤī åѦéĻ¢\náħł áħł\nystr dy\nworkington town\nwalk outday\nwakar usa\nvirtu emoir\nvideo tapes\nves sey\nv line\nusatf outdoors\ntu e\ntk allday\nthiem domi\ntheevil within\nswa ard\nsu ster\nstr atten\nstam ey\nst live\nsr ks\nslo ck\nsle ee\nship ston\nshi rakawa\nshaf ting\nsbu f\nsau sa\nsar ja\nsaint motel\nrockwood nyc\nro ys\nrif kind\nrecircul ation\nre shuffled\nratt us\nration alism\nrand fontein\nrais i\npul sation\npra x\npiazz ale\np tm\np my\np few\nover diagnosis\nno tobacco\nno fur\nnav an\nnas uwt\nmoer aki\nmobile phone\nmen zi\nmen tira\nmen go\nmel illo\nmc café\nmaggiel indemann\nmade it\nmacdon ell\nlo rene\nliven ow\nlanding page\nkyrsten sinema\nkuro ki\nkier nan\nkid dush\nkai ley\njo sten\njad er\nir za\nin situ\nice breaking\nic tures\nhy nix\nhu huhuhu\nhopenot out\nhippea strum\nhg hair\nheis en\nhe ddle\nhat chards\nham mock\ngranth am\ngary oldman\ngansett beer\ngall antly\ngal lion\nfur thered\nfranco phones\nfin ne\nel iner\ndol and\ndo ire\ndne ews\ndemo gorgon\ndementi auk\ndayof pink\ncv spharmacy\ncor adio\nco be\nclyde side\nclarine ts\nchung king\nchocolatec ake\nchi antic\nche c\ncer ney\ncar pel\nc sdp\nbren au\nbol on\nblack swan\nbill ye\nber magui\nbel loc\nbeart ooth\nbal aram\nate gui\nast it\nash s\nascor bic\nas pers\nare mos\nar vid\nar rakis\nan sf\namar anthus\nal biz\nagu st\nadul terer\nðŁĺįðŁĺĺ ðŁĴķ\nðŁĺĤ ðŁĺ´\nÆ Ģ\nzet tai\nz c\nyo a\nwwii museum\nwalking tour\nw kt\nvisit ms\nvide ophone\nver k\nuach tar\ntry m\nto bler\nther ace\nteslamo del\ntech navio\ntaver ne\ntail coat\nta quitos\nstil ted\nshal f\nsec conf\nscra wl\nschri stian\nsaifu ddin\nrosat om\nron delle\nrhu dd\nrebeccas ugar\nre iman\nquin tiles\nquer é\npur don\npun tag\npro by\npre conditions\nplu mer\nphoto gravure\nphac elia\npep tic\npatty jenks\npal let\nopen vpn\nobo ist\no vale\nnz x\nnor ges\nnewsp olitics\nnasa insight\nnarr ators\nn je\nmusi que\nmsh saa\nmr music\nmmk maymay\nmine fields\nmdc p\nmb laq\nmaxim ised\nmati bo\nmar cle\nma pi\nly ri\nlowe red\nlove thy\nlord minion\nle froy\nkri stal\njubi le\njack olan\njack nicholson\nisland peeps\ninter county\nik ke\ni win\nhorten sia\nhor sman\nhil len\nhe bel\nhe aux\nhawes water\nharmon ising\nhard drive\nhamban tota\nhai k\ngrey town\ngrenou ille\ngar ance\nfur con\nfresco baldi\nfilm forumnyc\nfather like\ney in\net x\nequ itter\nel ens\nejac ulation\ndrake hogestyn\ndeyoung museum\ndere r\ndeal withit\ncy be\ncri xus\ncountdown to\nco chem\ncl ancy\nced illo\ncatapul ting\nbu gat\nbrigg s\nbra ai\nbow eni\nbeyon der\nbest buds\nbeauty by\nbar a\nback dated\nb too\nawe st\nat its\nase k\narm streaty\nar amide\nany a\nan fal\nall winner\nalici avi\nðŁĺķ ðŁĺķðŁĺķ\nðŁĺ¬ )\nï¸ıâĥ£ /\nâĻ¥ï¸ı .\nz atch\nyour life\nwrecking ball\nwho youare\nwe streamers\nwe gs\nw fyi\nvite bsk\nvis njic\nveld hoven\nvaun wilmott\nus bp\nun pleasantness\nu stennis\ntonyi ommi\ntoe hold\nto bio\nthisis what\nthe barn\nteam yoshiki\nsven sk\nsubur gatory\nsto chowa\nstereo scope\nst maarten\nspit ality\nspa stic\nsor ters\nsno we\nsl fl\nsight line\nsh antz\nser gal\nseng ineland\nsa ung\nrober ge\nring lets\nri ed\nred wolves\nraj ab\nr km\nq nd\npreten tiousness\npine do\npeter hook\npastry chef\npar ce\non kiss\nnzo ia\nno vio\nnie g\nnfl redzone\nnag ara\nnab er\nmookie betts\nma sten\nlu ganda\nlove field\nli j\nletsgo warriors\nleone an\nle tham\nkrist novoselic\nkin da\nkas uri\nkali ka\njupit us\njonah nro\nj ide\nim ing\nil te\nholy cow\nhemorrha ging\nharris ville\nhar less\nhand cuffing\nhamp us\nhal ala\nhagan ai\ngulli bility\ngran ado\nglass blower\ngareth malone\nfu u\nfriday nigh\nfree e\nfr ate\nfoxsport ssw\nfore warning\nfm hs\nflu te\nfer rar\ndri mn\ndown shift\ndoire gaa\ndepreci ated\ndaenery stargaryen\ncrush monday\ncmicon tent\nclenden in\nchurch down\nchi kka\nchalo bah\nch war\ncar cosa\ncar ap\nbur ness\nbrick leberry\nblun den\nbi pa\nbemid ji\nbelieve movie\nbc sn\nba ot\nb prd\naur al\natomar aullo\nastro cytes\nasi andream\nart brut\narmandde brignac\nal ge\naap kad\naa ap\n.. ðŁĺįðŁĺį\n!!!!!!!!!!!!!!!! !!!!\næķ £\nå®Ŀ çŁ³\nÑĦ ле\nʸ áµĴáµ\nz hai\nya official\nwoj nar\nwith h\nwinter weather\nwater bird\nwait omo\nw dam\nvol kova\nvi hara\nv kook\nus ms\nup field\ntravel ers\ntrail magazine\ntrac tions\ntoken ism\ntobo lowsky\nthequeen bean\ntel stra\nt atten\nstutter heim\nsto ichkov\nsporting news\nsp atch\nsna k\nsky liners\nsix tus\nsimp kin\nshortland street\nshag ari\nsep tal\nsen markey\nsalta ire\nsair at\nsad dar\nsa sebo\nro an\nrene es\nreal ricky\nps ons\nppc chat\npo red\nplent yoffish\npeople analytics\npensacola beach\nparty list\npad er\np ère\noutandabout scotland\nornam entals\norn dorff\noracle database\nor nately\noldschool rs\nocclu ded\nnovo a\nnine wells\nnic astro\nnew spring\nmultic ore\nmore land\nmo azzam\nmescal ine\nmell anox\nmaw lana\nmart lets\nmalcolmn ance\nmag as\nlp tnhs\nloh mann\nlo were\nligh the\nlat ins\nlar usso\nlam ont\nlaf rica\nko g\nkf z\njay cutler\nj klf\nits complicated\ninv ader\ningh ands\ning ate\nin sets\nin day\niam writing\nhungar ian\nhomelo ans\nhel lebores\nhad nt\ngreat deals\ngouver neur\nglade water\nge su\ngalar za\nfc family\nextrapol ate\nenic ole\nel ver\nd family\ncrypto twitter\ncontent creator\ncole moore\nclear brook\nchol lo\nchatt ooga\nch ry\ncelebr ities\nce sme\ncatastroph ically\ncar ducci\ncann an\ncadi eux\nc cia\nc bos\nbur atai\nbuilda bear\nbo fam\nbn ha\nbird wat\nbio available\nbetten hausen\nbarbar ous\navogad ro\nashi elds\nap tx\nap lace\namphi bi\nalli reland\nain scough\n_ ...\n?? ..\nðŁĵ° âŀ¡ï¸ı\nðŁİĨ ðŁİĨ\nðŁĮ² ðŁĮ²\nرÙĬØ§Ø ¶\nаР´\nzad ok\nz ado\nyoung band\ny ilan\nwunder land\nwhite boy\nwheel an\nwend ling\nwade yar\nwa yofthe\nvo ise\nvidy ar\nven era\nusaid gh\nu shanka\ntropon in\nthe stra\nthe english\nthe boris\ntatt va\nste agall\nstar sailor\nsou tient\nsmur ray\nsignofthe times\nshi ka\nschaff ner\nscani agroup\nsand boxes\nrough shod\nromantic ized\nromanceno vel\nrochester rhinos\nro mul\nrit ter\nrebeccam inkoff\nran fur\npop choiceawards\npo boy\npipe fitter\nper aza\npe mp\nount down\nok aku\no ecs\no budu\nnun aw\nnunaw ading\nnosy crow\nmu mmer\nmonarch ies\nmin oring\nmichael jai\nmichaeljai white\nmccar ney\nmarch break\nlu oyang\nloc alist\nles se\nki din\nkal aw\njan ek\niwas aki\nile ostomy\ni ally\nhonor club\nhigh performance\nhd w\nhat v\nhahahaha hahha\ngy or\ngreen idge\ngreen backs\ngrant kirkhope\ngra p\nglass ell\ngla ize\ngied royc\nget outthere\ngema yel\ngat z\nfun niest\nfree access\nfreddie highmore\nfisch ler\nepas cott\nepascott pruitt\nep yc\nen tearth\neasy recipe\ndur kee\ndrogheda united\ndoc x\ndis u\nde mars\ndavid zwirner\ndavid spade\ndat os\ndalhou sieu\ncv v\ncraigella chie\ncosmo logist\ncongreg ated\nci gano\nchal mer\nbu ste\nbrew crew\nbli xt\nblat z\nbal aban\nb itta\nauto somal\nau ghters\nataste of\nasi es\nart yom\nark itek\nantoni ob\nadv ant\nab antu\naa aw\n, ?\nðŁıĩ ðŁıĩ\nðŁįĢðŁįĢ ðŁįĢðŁįĢ\nðŁĩºðŁĩ¸ ðŁĩ¨ðŁĩ¦\níĭ´ íĥij\nç© º\nâĺºï¸ı ðŁijĮ\nà¸Ļะ à¸Ħะ\nмÑĥзÑĭ ка\nzag ora\nye esh\ny ce\nwrink leintime\nwoman iser\nwestern union\nwee tin\nweare ready\nvou ches\nvolu mab\nvikram vedha\nvelá zquez\nu ark\ntr v\ntoshi ko\ntole dano\nto wey\nto de\ntie de\nthin ners\nsylve on\nstudio canal\nstatecapture inquiry\nsso good\nsoufri ere\nsnoo per\nsj v\nsite map\nshilpaf am\nsharealittle sun\nse hs\nscic luna\nsche ide\nsalem wgna\nrugged ness\nrub ins\nri ppers\nre flation\nrav ina\nrat ana\nraf finity\nradi als\nque tte\npro om\npregn ant\npra sh\npep so\npen pal\npar da\npam m\npaide ia\nor it\none goro\nolvi do\nnuman cia\nni volumab\nneversay never\nn dez\nmuvy z\nmusic bank\nmu gu\nmr scot\nmor and\nmon than\nmollusc monday\nmic e\nmerchi ston\nmati sts\nmarvel legends\nmar oun\nmahil acongress\nmache tes\nmac omb\nma den\nma dai\nlieu tenant\nlauri emit\nkerber os\nkan ungo\njawa an\nit ng\nin sar\nima izumi\nide es\niam john\nhpp lay\nhan ous\nhal us\ngu ler\ngrounds keepers\ngour cuff\ngay men\ngam ali\ngall and\ng ba\nfujis awa\nfireemblem threehouses\nf sw\neuropean art\nesp aces\nel eri\negg ar\nedmonton expo\ne ka\ndy ersville\ndor rie\ndong wan\ndewal ttough\ndev ac\ndeter rents\ndel one\nde so\ndale m\nd group\nczecho slovak\ncw the\ncustomer journey\ncrystal bridges\nconvivi ality\nclassicrock mag\nchange iscoming\ncan ice\ncal is\nbu res\nbru cie\nbro din\nbren an\nbota iku\nbe fearless\nban j\nbaking championship\navon more\nasi mmons\nas mith\nappenz ell\napo plectic\nao y\nanticoagul ant\nanti thetical\nanne frank\nam ined\nalu cas\n\\ "\n! ðŁijij\nðŁĻ İ\nðŁİ¸ ðŁİ¸\nðŁįİ ðŁįİ\nðŁĮ ¦\nâĸ ³\nyoung love\nwinn dixie\nwf es\nwend ler\nvinayavidheyar ama\nug p\ntru glio\nti elemans\nthorough fares\nthe os\nthe magnificent\ntal ar\nsyna esthesia\nsv cc\nsul zer\nsu enos\nstop ed\nsof ya\nshim amura\nsebastian bach\nsab riel\nsa chem\ns itta\nrs gb\nrosleh tinen\nris don\nrew ery\nre activating\nquint us\npoppy pride\nplumb ing\npend leton\npark slope\nor tner\nop ress\nof nature\nnm true\nnirav modi\nnil da\nnhv natural\nnew mr\nnaz z\nmonth sof\nmis interpreting\nmil sim\nmer cola\nmedve sc\nmat tern\nman mademo\nmanmademo on\nmac l\nm sw\nm kh\nly l\nlong muir\nlion babe\nlabel mates\nla urus\nl nh\nl ne\nkin gham\nke saath\nkan ojo\nkal ay\njohn john\njoanne wheatley\njay inslee\niv ry\ninvali dation\ningel heim\ninge vent\nimperial nhs\nij ff\nig worldclub\nia ia\nhuac achina\nhistop athology\nheckmond wike\nharness racing\nhack worth\nha skin\ngovernment za\ngoli ath\ngilmore girls\ngh ome\ngee ta\ngav ino\ngang an\nfredd ys\nfad hil\nest ren\neno chian\neducation ally\neb ke\ne ather\ndex ters\ndev as\nde wolfe\ncomp ter\ncdn paralympics\ncallo whill\ncal thorpe\nboo ps\nblaupun kt\nbe sola\nbathspa uni\nbair ro\nay yub\nauto detailing\naureli en\natre us\nat eng\nar dini\nangel ita\nan zo\naham m\nacry l\na aba\nðŁļ ª\nðŁĩ¬ âļ½âļ½âļ½âļ½\nðŁĩ¬âļ½âļ½âļ½âļ½ ðŁĩ±:\nرÙĬ ا\nzu i\nzor ah\nyou ri\nyazidi genocide\nwis c\nwin ed\nwc pss\nvla da\nvisit southdevon\nveli yi\nve irs\nuu ya\ntir tha\ntir rell\ntim horton\nthan asis\ntar mac\nsub versi\nstopthe hate\nso po\nsl h\nsch aper\nsatur ating\nsand worm\nrotten broadway\nriden our\nretren chment\nren ick\nreed hastings\nra chana\npoor am\nphonec ases\nphic hit\nor deals\nom git\noath breaker\nnew caledonia\nne mes\nnbaallstar to\nmulti story\nmi rab\nmanfred weber\nmal ama\nlon gy\nllan fair\nliver nois\nlettu ce\nleon is\nleaf ly\nlanc spolice\nkor on\nkon di\nkn acks\nkin man\nkeepit wild\nkas er\nkali sto\niz har\nhorse fly\nhelsinki airport\nhand tools\nhal an\ngru be\ngor oyals\ngobi ge\ngame changer\nfr yers\nford son\nfle voland\nexp ound\neuropean parliament\nessi e\nel anor\ndo jima\ndiamon dd\ndave berry\ndab olu\ncw janethevirgin\ncv hs\ncsu football\ncour tice\ncom hghair\nciut adella\nchristian keyes\nc puc\nbra gger\nbr ame\nbel tz\nbad ai\nautom ob\nauto club\nauror ahu\nate st\nas kl\nas aro\nar sle\naphrodisi acs\nanti pathy\nan field\namy dumas\nam atu\nalou ette\naller dale\nal inda\naccen ting\nac tc\na wit\n! ?!\nðŁįŃ ðŁį¬\nãĥŀ ãĤ¯ãĥŃ\nâĿ¤ ðŁĺįðŁĺĺ\nzen der\nyoung stars\nyat ton\nyar on\nx tian\nworld balletday\nwildcat nation\nweir ded\nw kar\nvu v\nving e\nun fixed\num el\ntugger ah\ntuck well\ntu mk\ntraffic jam\ntho ta\nthe ph\ntestic ular\ntel t\nteach meet\nsuper family\nsummer party\nstaf fa\nsp ouse\nsmashing pumpkins\nsil bert\nshad rach\nsemi otic\nsa whorse\nsa pps\nrust ler\nrudi mental\nrosen berger\nroots music\nretr or\nregi sta\nre seeding\nre buff\nr dium\nquir is\npron ti\npoliti ken\npol hill\nphil bert\npa sion\norson welles\norgan elle\nom un\nold photo\nojib wa\noberst dorf\nnws norman\nnikon nofilter\nnike soccer\nnew hair\nneonicotin oid\nnatu ur\nnates ilver\nmul downey\nmousekete er\nmock asin\nmmm gorgeous\nmid wales\nmid sole\nliver poole\nlion sxii\nlen ham\nlady hawke\nla vers\nl hw\nkuchi pudi\nko les\nkir stend\nkho dor\nkam asi\nkaappa an\nk rell\nju ca\njhalakon colors\nitali aricci\ninternational museumday\ninte zaar\ninexor ably\nindustri alised\nigo ta\nich art\nicef all\nic ol\nhyper real\nhumidi fication\nho jicha\nhin aholics\nhel ia\nhe pi\nhat ari\ngun stock\ngrin spoon\ngov za\ngl ancy\nfor far\nfloren tin\nfish uk\nfish bourne\nexorc ised\ner ris\nepping forest\neco c\ndyne ema\ndouble fine\ndine tte\ndine out\ndie gol\ndi blasio\ndesign build\ndermat ological\ndel age\ndece dent\nde el\ndata quality\ncoy f\ncombu sti\nco sas\ncl ts\ncl sa\nci fuentes\nchillax in\nceelo green\ncar ve\ncar milla\ncapital and\nbun te\nbrook man\nbrompton bicycle\nboul ting\nbir twistle\nbid co\nbech stein\nbal doyle\nbachill erato\nbab c\nbab ago\nan sbach\nallo dds\nahut chinson\nac ey\nabh brows\nðŁ¤¦ ðŁı½âĢįâĻĤï¸ı\nâŃIJï¸ı ⾨\nâĿ¤ï¸ı ðŁĺįðŁĺĺ\nzom er\nyoak um\nwsw v\nworl dday\nwil ier\nwhig ham\nwag len\nwaglen ikhil\nvn dev\nvisit dorset\nuofl baseball\ntull amore\ntrack master\ntome asure\ntoge t\ntip sand\ntin u\ntimp anist\nthisi su\nthe halls\nthe bar\nsun glas\nstudy english\nsti x\nstandar ds\nsta il\nssel f\nsper rys\nspace week\nsp nn\nsig ne\nsi mca\nsi ani\nsha dia\nse ann\nsare en\nsap ir\nsale straining\nsal in\nsaha ja\nrow den\nron ning\nrock aways\nriky rickworld\nregin apolice\nrefu se\nrau fareg\nraufareg besola\nr st\nqui enes\nq ura\npreemp ted\npil chard\nparen ti\npad o\np tak\not int\nol phin\nohl sson\noce t\nnoy noy\nnipi gon\nnewton abbot\nmu kt\nment one\nmanzoor pashteen\nmadel a\nm sco\nlo ing\nlimb less\nlethaw aii\nlethawaii happen\nlab as\nknur led\nkn agar\nkel ing\nkal u\nk iti\nk illian\njust sayno\njel gava\njeansfor genes\nitsm illertime\nitsd anny\nim v\nhi a\ngrin dle\ngir r\ng winn\nflo p\nfil iz\nfamily holiday\nfam elab\neye works\neri ley\nen livening\ned ress\necho arena\ne ens\ndrag queens\ndock less\ndi meo\ndel grosso\ndeci mus\ndau lat\ndam ron\ncudd ler\ncrê pe\ncrowne plaza\nclub houses\ncer ci\ncarolin apanthers\nca vies\nbsc sd\nbru jer\nbru ins\nboss ert\nbet ches\nbel reddevils\nbe est\nbar chetta\nban ov\nat nagar\narthi story\narre stees\nar fon\napp leeduchat\nag etv\naf m\nach rome\nab de\na quest\nðŁĺĦ ðŁĺĬ\nðŁĵ ¿\nãĤŃ ãĥ¥\náµ Ī\nའ¦\nzz st\nzi ppor\nxfinity racing\nvishak ha\nvideo gam\nvid ant\nul kom\nu coms\ntu am\ntrans figured\ntotal dhamaal\ntom ies\nto stan\nthrill jockey\nthistle tweet\nthin kaboutit\ntham ilton\ntank less\nsz w\nsyr crunch\nswed bank\nstem pel\nskoll wf\nsis lands\nsigh thill\nside saddle\nsidd hi\nsick ens\nsi y\nshec an\nsh pong\nseventeen mag\nsen te\nsan iga\nsabar imal\nrosam ond\nrescueme ohio\nred star\nre cher\nration alizing\nradio carbon\nportland me\npha e\not directo\nore o\noo bi\non des\nolo ber\nolafu reliasson\nno wata\nno confidence\nner va\nnau ert\nnatali a\nmysti k\nmyo dd\nmun desley\nmoz art\nmor p\nmisanthro pic\nmining indaba\nmicro economics\nmeat wad\nme ggan\nmari et\nman singh\nmain tainable\nmaersk line\nluc chesi\nlou vered\nlo ken\nlightsfor liberty\nkorch noi\nko tal\nkeepit up\nke ating\njustin colemoore\njere mi\nj pd\nj mpd\ning é\ninfo blox\nindiscre tions\nig ent\nhol croft\nhob house\nho tor\nhistor ica\nham macher\nhalla han\nh inging\ngun as\nguj ju\nguillemb al\nguillembal ague\ngi aro\ngg day\nfoxwood sct\new ski\new adi\nenter al\nenergy fc\nen yo\nemprende dores\neil idh\nearly momentsmatter\ndun murry\ndin di\ndi mos\nderby dell\ndeplo res\ndeon dre\ncrossmag len\ncomic fest\ncolor run\nco cas\nci dent\nchun ni\nchristiany elich\ncategor isation\ncarrick macross\nbur dine\nblu stein\nblaster jaxx\nbig ley\nbernar deschi\nben enden\nbeau bourg\nbe ssel\nbar camp\nbar ay\nban ded\nba shir\nasse tte\nasam blea\nary ab\narenaof valor\narchitec t\nar matrading\nalphabet success\nah ma\naeru ginosa\n... \n) ":\nó¾ Į\nðŁĺĬðŁĺĬ ðŁĺĬ\nðŁĺĤ âĺºï¸ı\nðŁĸ¤ ðŁĴĽ\nðŁij¨ðŁı»âĢį ðŁį³\nðŁĮ¸ ðŁĮ¼\nó k\nwhereare they\nwed eliver\nwar ily\nw ame\nvisit italy\nvillage voice\nvasilev skiy\nvanguard ngr\nvan aqua\nur on\nunivers ite\nuni westminster\ntwee tt\ntt ly\ntrung pa\ntr ino\nto power\nti ae\nte ana\ntaver ham\ntam ora\ntal ese\nta ps\nsweet waterbrew\nstjohn ssmith\nsteph ane\nstay wild\nstac ys\nsou kup\nsnap artcrew\nskerry vore\nshud dering\nshap ira\nser vir\nsecre twars\nse shadri\nscott j\nrsh yr\nrow blanchard\npro sport\npho tometry\nper center\npas sos\npancas ila\npag ibig\npad mal\nore illes\nodon to\nnottooyoung torun\nnom in\nnikol aj\nni eri\nnau shad\nmun ghana\nmu tsu\nmq vist\nmoto cycle\nmin kus\nmin do\nmarri ot\nmade ine\nlon gla\nlip sey\nlight sc\nli skova\nletsgo tothe\nleck hampton\nlane way\nlacer ated\nky ros\nkn oop\nke lem\nk hem\nk ando\njuri sts\njo i\njagu war\nix elles\nit sky\nit mo\nislam isation\nir ud\ning ale\nine very\nin black\nimman ent\nhu se\nhero e\nhender shot\nhe tti\nhart shorn\nham dy\nhadd adi\nha glund\ngustav son\ngray wolf\nglobal foundries\ngil merton\ngener alists\nflat water\nfield stud\nfelic itas\nfasti dious\nfar ney\nf music\nexit poll\new ert\nespou sed\nelf yn\neki den\ned henry\nec ri\neas me\ndynam obim\ndwar ven\ndon nal\ndo therightthing\ndied onthisday\ndfa records\ndel boy\ndare you\nda aay\ncyber risk\ncow drey\ncost as\ncomm eng\ncocac ola\nco git\nclassi fier\ncla dy\nchristopher lee\ncheri moya\ncap en\nc py\nbut first\nbr bird\nbodh ran\nbin yamin\nbestteam ever\nbenck iser\nbe thri\nbang ar\nbad ler\nayeshat akia\nas com\nap ag\nama waterways\nali via\nal za\nag grey\nabo dy\nabdomin oplasty\n# âĿ¤\n! âľĮï¸ı\nðŁĽ ©\nðŁĺĤ ðŁĴŀ\nðŁijĢ ⾨\nâĿ ĭ\nà© Ń\nz ns\nwer king\nwedding anniversary\nwealth tech\nwater way\nve wy\ntv f\ntru cke\ntropo sphere\ntrees for\ntrain in\ntodd barry\ntit os\ntic ky\nthisi sirish\nthi o\nthe hype\nten niel\nteam alex\ntable mountain\nswi mathon\nsun studio\nsun dials\nsound wave\nsj v\nsir in\nsgo p\nsco v\nsaras wati\nsalman khan\nsaar aa\nryand un\nrun g\nri xton\nren ren\nrat es\nran ken\nr se\nq wq\nq sr\npresta shop\npre ety\npow les\npodi atric\npic her\nphosphor ous\nphon es\npet unias\npear ling\npatoran kingfire\npac c\nocta ves\noath keepers\nnovem bro\nnorth wind\nnorah jones\nne zha\nne elix\nnat ron\nmuse umb\nmiamid ade\nmediamar kt\nmat tum\nmar acan\nmait ri\nmah end\nlove itor\nlisalam panelli\nles band\nlass ico\nku ehl\nkk t\nkhand a\nkent wildlife\nji brin\njeopar dized\nis ay\ninstap assport\nindependent artist\nim bb\nil ma\nian jamespoulter\ni wk\nhy rum\nho quiam\nhe ff\ngor am\ngon orth\ngb p\ngame ready\ngal erie\nfuture world\nfortune mpw\nflu ent\nfire brigade\nfac king\neuro athletics\neaster holidays\ndisfigu rement\ndhe ena\nder ci\nded chat\ndad asaheb\nd kp\ncoulro phobia\ncot tes\ncoach p\ncoach k\ncl ouser\ncine mas\ncher ui\ncharity week\ncha hine\nbi gear\nbeverly wilshire\nbethany hamilton\nbent en\nbath on\nballachu lish\nbal tica\nasp net\nas kem\naperfect circle\namreading romance\nah is\nadap tions\na beautiful\n% !!!\nðŁĺĬ ðŁijįðŁı»\nðŁĮł ðŁĮł\në°ķìĭł íĺľ\nå ¡\nචº\nzu cco\nzan jeer\nx ango\nwowo wow\nwh ill\nwal de\nvilla gelife\nustad h\nun screwed\ntry hard\ntro ms\ntorrance coombs\nthi ra\nthe whole\nt sy\nsur facep\nsupere xcited\nstudio tour\nstop it\nsil vic\nsi bi\nshakespeare lives\nself development\nsare not\nryan bingham\nrossi ya\nroad sides\nright s\nreboun ders\nre posts\nqueen spark\npur se\npro gess\npres rajapaksa\npostpon ements\npinchpunch post\nper ie\npel in\npe ther\nparti als\nparach ute\noro adshow\norganic beauty\nop hora\nontari on\nnuclear power\nnj d\nni aaa\nnext bigthing\nnet news\nnb football\nnan se\nna ach\nmy car\nmo ppet\nmo gador\nmira belli\nmil ah\nmichel barnier\nmen teri\nmen otti\nmarun ouchi\nmargar ito\nm ram\nluke combs\nluci en\nlu tton\nlock ley\nlive export\nli sandro\nli bert\nlgb trights\nle toy\nlaver stoke\nlast call\nlake ofthe\nlac alle\nkuno ichi\nklin gh\nking lake\nkh s\nkar pinski\njo sy\njamest cobbler\nirish tv\nieb ckenya\ni ast\nhusey in\nhop god\nhom ophone\nha ake\ngy ra\ngy aan\ngrit tier\ngreat deal\ngot tes\ngor st\nglad ney\nfv k\nfu do\nfit ty\nfish market\nexpo sure\neval ue\nesken azi\nem eline\nel berg\ne mia\ndri essen\ndon official\ndon kis\ndisin cen\ndi gha\ndi gest\ndac re\ncup sleeve\ncostar ic\nchurch planting\nchriss ununu\nchelse al\ncann ings\ncan opus\ncaloo sa\nbü nd\nbrian j\nbr oun\nbest sho\nbare tta\nbar tos\nba ee\nb sr\nap rn\nam prog\nal atina\nak shi\naber dyfi\nðŁij©âĢį âļķï¸ı\nâĻ¨ ï¸ı\nâĺºï¸ı ðŁĴĹ\nا٠ģ\nÑĪ моÐ\nÑĪмоР±\nÑĦле ÑĪмоб\nç ay\nyor dan\ny aqui\nwith love\nwestfield london\nwelove music\nwater bottle\nwanted wednesday\nvi zier\nvi b\nv rr\nuttarak hand\nun realistically\ntur p\ntown sley\ntor ne\ntop oulos\ntolu ene\nthat searth\ntam pin\ntable topr\nsv end\nstoparming israel\nste pin\nstars bbl\nso cap\nsin city\nsean pertwee\nse young\nsat cher\nry nn\nrudy mancuso\nru pe\nray man\nqueen radio\npublicis groupe\npop concerts\npoo tie\npix ography\npenny royal\npen knife\npeer support\npar sh\nor ts\nom eric\nnw schicago\nnic ulescu\nmycen aean\nmor do\nment z\nmeet meat\nmarshall ampsuk\nmargin alize\nmana fest\nman nes\nloc avore\nliver si\nliver sedge\nlan zhou\nla bette\nkor f\nko smo\nko hi\nkiraz mevsimi\nki eu\nkhaled azia\nkey and\nkevino lear\nkal orama\njume irah\njon jon\njennal dewan\niba secretariat\nhois ington\nhermi esadler\nh bos\nh bc\ngun ite\nground less\ngreta vanfleet\nger th\nge mas\ngalla gh\nfutureof mining\nfur u\nfunke akindele\nfra ss\nfarmer sday\nf ptp\nezekiel mutua\nex ped\nen ner\nem tech\ndy le\ndy c\ndu gongs\ndru gre\ndream land\ndoub table\ncon sett\nco ches\ncn at\nchri smar\nchir la\nchar co\nc sis\nbuk hara\nbhaagam ath\nber nice\nbed stead\nbana gher\nbaj rang\nbah rami\naust mus\natri be\nastre a\nard in\nann unci\nan v\nami z\nalter nation\nalis sa\nalex y\naf dn\nabo yne\n- :)\nðŁĺ»ðŁĺ» ðŁĺ»ðŁĺ»\nðŁĺ³ðŁĺ³ ðŁĺ³ðŁĺ³\nðŁij¼ ðŁij¼\nðŁĮºðŁĮº ðŁĮº\nðŁĩ ½\nâĿ¤ï¸ı ðŁij¯\nzam alek\nwren ched\nwra ys\nwar precords\nvalken swaard\nup stream\num ri\ntuk ur\nto fficiel\nthu rai\nthor selfies\nth march\nterry gilliam\ntaylor gang\nsurvivor au\nstree twalker\nstacy london\nspur n\nsprad lin\nslv ban\nsky raider\nskipthe dishes\nsig sauer\nshaw kan\nsec schoolinnigeria\nsar am\nsap nextgen\nsad er\ns folly\nrune quest\nrumple stiltskin\nrick hoffman\nredd ine\nreclin ers\nre gaz\nre collecting\nraw vegan\nra ww\nra se\nposter art\npo partist\npluto tv\npitti uomo\npi eve\nph ou\npeng u\npand ajay\npal ert\noz ma\nom ino\nok olona\nofficial b\nnicolo di\nnh lan\nneu ss\nnba xmas\nnationalpark week\nmsc cruise\nmontre aler\nmodel town\nmens conference\nluci ani\nlizar do\nle ston\nl vp\nku stom\nkha w\nkele mentary\nke du\nkanhai yakumar\nkan ellis\njiu jitsu\njimmy sheirgill\njay mi\nitsme deaner\nisthmian league\ninge borg\ning rat\nine en\nima gens\nily as\nhiwas see\nhi mi\nhaus of\nguit are\ngues thouses\ngoodnigh tt\ngood loe\ngo gos\nglycae mia\ngi shu\ngardner md\ngan ji\nfur rer\nfreec ell\nfre twell\nfe spa\nf lection\nexoluxion in\nexasper ating\new ington\neni um\ndy al\ndiver ticul\ndistric theating\ndesen ho\ndemon te\ndaily life\ncron aca\ncousine au\ncon nan\ncl nolan\ncar ral\nc jk\nbrew pubs\nbraintumour org\nbra cha\nbom bast\nber ling\nbella houston\natb financial\nart price\nare well\nag ib\nae gis\na you\nðŁĺĬ âľĮ\nðŁıĥ ðŁı½\ná´ ¼\nà® ī\nØ· ÙĦ\nzzzz zzzz\nxen omorphs\nwu zhen\nwomen ofthe\nwalk üre\nvitamin b\nv no\nunder nutrition\nun popularity\ntri fling\ntre bbi\nthe film\ntch as\ntab er\nsuther lin\nsu co\nstock still\nsp ams\nsouth pole\nsor ti\nslau ghters\nske ma\nside chain\nse shat\nscam orza\nsam pat\nsab har\nrival s\nreligi onof\nrebeli on\nreaper mini\nreading agency\nr cd\nprojekt red\npher i\nperip ate\npeculi arly\nover stating\nnyle dimarco\nnaval history\nmur shid\nmonochrome photography\nmik maq\nmew seum\nmeetthe maker\nmay nil\nmar indu\nm clay\nkuy kendall\nku ber\nku bam\nkro gh\nklu te\nkit trell\nkin tail\nkan at\njungfrau joch\njd ff\njacquelinem jos\ni ster\ni pi\nhun g\nholly r\nholiday giftguide\nho stin\nhisp ana\nhi awassee\nharak iri\ngue sser\ngett n\ngam brell\ngal va\nfol an\nfaze ley\nfaneuil hall\nfamily reunion\nex pe\nendear ingly\nec su\ndy skine\ndramatur g\ndine ren\ndent ition\ndel py\ndel ing\ndefac ement\ndd k\ndan sk\nd hall\nd alli\ncustomer care\ncrudit és\ncre x\ncod ger\ncas sells\nbush kill\nbre ady\nbon jour\nblogpaw schat\nble eder\nbistro t\nbel staff\nbeg ins\nbaltus rol\nback k\nauthori zations\nandre rieu\nalici af\nain ley\nadmon ished\nabsolut ly\n: ^\nðŁıĨðŁıĨðŁıĨðŁıĨ ðŁıĨðŁıĨ\nðŁİµ ðŁİµðŁİµ\nîĢ ij\næķ ij\nä» £\nyour love\nyorkshire terrier\nyon as\nx g\nwre athed\nwomensmar chon\nwart burg\nvolks fest\nuofl wbb\nun ama\ntin ari\ntessell ate\ntanisha amukerji\nta zo\nsugarray leonard\nstur geon\nsto u\nstigmati zing\nstay safe\nsqu amish\nsle a\nsignal man\nshi bani\nshav asana\nserv ando\nsakshim alik\nrp motorsports\nroman die\nrobert mondavi\nrobby gordon\nrhyth mand\nrest day\nrepro health\nrealmichael kay\nre ineke\nrads one\nra ymon\nr br\nquiz night\nqu illiam\npun ks\npul lovers\npublicenemy ftp\nprophetsof rage\nproject lit\nple yel\npil ates\npi kin\nphilip glass\nperkin elmer\nper rott\npaphi ope\npa ay\nov na\norlando shooting\norlando bloom\noral care\noo j\non n\nol fe\nol dis\noccup yoakland\nobje tivo\nnag l\nmy g\nmul lett\nmu hl\nmovie stars\nmontan er\nmir pur\nmi bf\nmeteo gib\nmayored lee\nmasc aren\nmaim ing\nmadr yn\nlongu eville\nllan wern\nliv miami\nlein en\nlanes borough\nk vp\njudy blume\njuanman santos\njo wa\nj tweets\nj ce\nisi zulu\ninnov azione\nindi afirst\nim lay\nich on\nhor an\nhere andnow\nguar aldi\ngu len\ngreen flash\ngra gg\ngoldie hawn\ngod scountry\ngo jay\ngal ley\nfromthe groundup\nforestry commeng\nflor ine\nfan wars\nexmoor np\nek ar\necw press\ndro ite\ndit mas\ndiss enter\ndisney nature\nconceptu alised\ncon volution\ncoachella valley\nco ber\ncivil service\nci j\nchefou cauld\ncenter fielder\ncatoc tin\nca official\nbrendan cole\nbren ta\nboat swain\nblan ching\nbiz talk\nber ic\nbeauty world\nbbc facup\nauden cia\nas ahutchinson\narav alli\namor pho\nalcohol ic\nak int\nacademic swith\n< =-\néĺ² å¼¾\néĺ²å¼¾ å°ijå¹´\nâĦĥ ,\nà° ¬\nzab aglione\nwind row\nwelcome week\nwb kb\nvoc i\nvision aire\nuni da\nua em\ntyphoon display\ntrow dy\ntraveler schamp\nthesavoy london\nthenation aluae\nsy scoin\nsu v\nsu tah\nstanlee comikaze\nsky science\nsjo erd\nsilk men\nsco c\nsam su\nsam eth\nru dan\nroo sts\nrela ying\nred volution\nre paints\nquad cities\npu pillage\npro challenge\npower books\npear n\npalm desert\noro ck\noran allo\nolic ity\no gra\nno chill\nnicolodi daria\nnico ya\nmulti show\nmu ter\nmo ws\nmi jares\nmatthewk heafy\nmassac ring\nmac art\nlunch boxes\nlu ber\nlittle brown\nla berge\nl alande\nker jak\nkaz ak\nkas u\nkad ai\nk van\nk brown\njö nk\njm gardnermd\njerry lentz\njas df\njad zia\ninsi dere\ning gris\ninfinity thegame\nin bath\ni yan\nhu kum\nhoe hn\nhirez studios\nhi jazi\nhi ers\nhermo sas\nhel u\ngreek mythology\ngravity rush\ngor in\ngo wd\nglobal runningday\nghan af\ngenie francis\ngam brin\nful co\nfu tch\nfu king\nfrog let\nfm qs\nfest nyc\nfactsabout me\net xwx\nen h\nearth work\ndy sm\ndra a\ndisplac ements\ndish man\ndest america\ncush wake\nclay aiken\nci ii\ncen as\ncast d\nbomba dil\nbog ast\nblin dd\nblau velt\nbirch mount\nbing su\nbest coversong\nberen saat\nbeat airpollution\naz nar\nau trey\nattenti onal\narti equitter\nanton du\namlw ch\nallsaint sday\nal ake\nagri ppina\nðŁĺĮ ðŁĺĮ\nðŁķº ðŁı¾\nâĻ¡ #\nâĪ Ĥ\nÐ ¼\nwy vern\nwol ken\nwal esc\nv ult\nuper girl\nunion budget\nun dar\nultimate warrior\ntumk ur\ntu ska\ntro c\ntop story\nto home\nti gno\nthe interview\ntemple stowe\ntehel ka\ntech ne\nteam kitty\ntan za\nsyfy tv\nsumma recon\nsuccul ent\nstra ying\nstjohnssmith sq\nstasi areport\nsr ms\nsportsp ersons\nspor te\nsor an\nson ate\nsli mes\nseu mas\nser ow\nscal zo\nsaskat oon\nsarah drew\nsanjay leel\nring rose\nrest ing\nrehome hour\nquarre ling\nqc times\npontard dulais\npla sse\npharmaco therapy\npen ya\npeep al\npat ou\nostro wski\nopier adio\no thering\no gers\no cam\nnigh tie\nnicom ir\nnasa history\nminim alist\nmed len\nme men\nmarseilla ise\nmagnu mpi\nmaf fia\nlu tt\nlove her\nll vm\nliter atur\nlakshmi manchu\nlady bay\nkling berg\nkeral ites\nkauff mann\nka he\njane mari\njag jaguwar\nit amil\ninter nist\nid alp\niam d\nhustle hard\nhone gger\nho ws\nhealthcare forall\nhar leen\nhahaha ah\ngye ong\nground hogs\ngreen keeping\ngor uck\nfu sible\nfrank caliendo\nfinal ride\nfertil isation\nfer mata\nfen burg\nfau zi\nfang amer\nfalli ble\nent group\nei u\ndogs rock\ndisappro vingly\ndeton ating\ncub ator\ncor mega\ncollege hockey\ncoal ash\ncleveland browns\nchar g\ncham ak\ncan las\ncaer au\ncad ca\nbuck enham\nbra ska\nber beris\nbel ville\nbbcwales news\nbac one\nba im\nb vov\nb dj\naç ores\nato logical\nar qi\nambassad orship\nale storm\n^ ^^\nŀ ĺ\nðŁĺħ #\nðŁĵ» @\nìł ģ\në°ķë³´ê² Ģ\nyetto come\nyear sin\nxehan ort\nwy f\nwho les\nwelling united\nweb chat\nwal let\nves alius\nven oms\nve dre\nvas ili\nvall ance\nusman ov\nur gence\nu mble\nty co\ntransfor mable\ntoron tonow\ntmobile careers\nti jn\nthrombo cyto\nthin h\nthewomen stour\nther mae\nthe tank\ntechno phobe\nteameric sson\nsummer break\nsubju gate\nstone fc\nspo ker\nshard london\nsee torontonow\nse tembro\nse gh\nscrap books\nscoo ts\nsci kit\nsch or\nsad ler\nrhe ingau\nrgv wx\nrem hq\nredletter media\nred together\nreci ous\nreal john\nraz ine\nrahe en\nqpr v\npu reed\npsla fc\npon tes\nperi shes\npel aez\npal erts\noiland gas\nofthe seas\noffice max\nmodern baseball\nmeth ylene\nmatriarch s\nmasse ffect\nmal com\nmakin wa\nlough gall\nlon gg\nlister iosis\nlibr arie\nlean ing\nlazi o\nlam u\nlal oo\nl by\nko zo\nking ussie\nkil rush\nken ward\nken ard\nkazimi erz\njoey lawrence\njasmin evillegas\njac key\nit ree\niron age\nincis or\ninar team\nhr ys\nhopen othate\nhog sett\nhe ili\nhal let\ngid do\nger vasi\nge sf\ngall man\ngall inu\nfor abetter\nfi ven\nf bre\nexp ounding\nes an\ner vice\nen sa\nen ingly\nemmy awards\nelms ford\nelg ouna\nel ya\ne dul\ndk v\ndie ren\ndee waan\nct in\ncon ecu\ncomor bidity\ncollege signingday\ncli j\ncd projektred\ncarr fire\nca jam\nbusiness coach\nbu be\nbruck heimer\nbob sledding\nbhag wati\nbakhti ari\nbailli eu\nbag gott\nbab il\nato ken\nann ers\namit sadh\nagar uda\nad w\nðŁĩ °:\nçľ Į\nç« Ļ\nãĥĩ ãĤ¶\nâĺĥï¸ı âĿĦï¸ı\nà« ģ\nzz aro\nyu rika\nye asts\nwomen sashes\nwo to\nwmp dogs\nwc tv\nwall on\nur dan\nupcoming releases\nunder lings\ntyntes field\ntoronto symphony\nto pen\nthe challengecup\nsya oran\nsvan doorne\nstruc turalism\nstam ens\nsta ip\nst b\nspit ball\nsl ama\nsim simi\nsim plic\nsid he\nsex trafficking\nsa hai\nrupauls dragcon\nrun ralphi\nrunralphi erun\nrip ens\nrepar tee\nrep co\nred for\nre percussion\nrack ley\npu ren\nprin tvilla\npever il\npen edes\npas k\npal au\norlando sentinel\none ocean\noff cl\nnom i\nnin omiya\nnh p\nnant asket\nna pel\nmun ga\nmubar akan\nmu is\nmoving imagen\nmovingimagen yc\nmor goth\nmopar chat\nmindbody spirit\nmes illa\nmaur oranallo\nmarvel led\nmanaged services\nman sor\nmale ev\nlu le\nlok manya\nlin ny\nlaver ock\nki sta\nkan ta\njw marriott\njo ab\nji had\nit ok\nisi s\nish ti\niam lp\nhot lines\nholling shead\nholden graber\nhigh gate\nhel wig\nheil ong\ngu al\ngo tr\ngel denhuys\nge hrke\ng gu\nfun gi\nfu raffinity\nfron ing\nf ended\neuropeana eu\nesken azi\nep cs\nen ciso\nemul lin\ne zo\ndor oro\ndi visi\ndecon gest\ndaph nia\ncu yam\ncu sk\ncook out\ncon dom\ncambo dge\nbri ard\nboard shorts\naz riel\nau teurs\nattach ment\nar vel\nam pradio\nam fam\nal cor\naal smeer\nðŁķ¸ ï¸ı\nðŁĴħ ðŁĴħ\nðŁ¤ŀ ðŁı½\nãĢĤ ãĢĤ\nà¸Ļ à¸Ļ\nË Ļ\né d\nzag li\ny ns\ny appy\nwr g\nwf council\nwar ming\nver den\nveganrecipe hour\ntrevi thick\ntough ening\ntou rettes\ntoni storm\nto ome\nthe boat\ntay som\nswag at\nsur inder\nsub divided\nstill water\nsteve tignor\nst vincent\nsnow flake\nsmart water\nshow mance\nsho lo\nscratch ings\nsal divar\nriev aulx\nrei des\nray uki\nrache le\npropo fol\nproc tologist\npown all\npha ilin\npew ds\npens wordbooks\npe cora\npan telleria\norange wood\nora for\nonlin enews\nodon ata\no ires\nnow open\nnovi grad\nnose worthy\nnois y\nnicomir allegro\nnetapp insight\nnat c\nms ar\nmro dofficial\nmo cambo\nmegal opolis\nmc mansion\nmarci a\nmang ling\nman marzi\nmaking of\nmade tomeasure\nleop ardi\nknott ingley\nkishore kumar\nkinky bootsuk\nking sley\nkin tore\nkhu ra\nkevin max\nkaz eem\nk haw\nja aye\ninfectious diseases\nin with\nilovelu cy\nhorror family\nho stal\nhh mi\nh bbtv\ngor acing\ngolden boy\ngarret son\ngamer life\ngal asso\nfushi gi\nfu tah\nfre dol\nform als\nfood safety\nfi rish\nfair phone\nes am\nem trains\nel ver\ned app\ndi anat\ndhe ere\nde sul\nda pest\ncorrobor ate\ncorri gan\ncolor me\nciv milair\ncine timee\nch ich\nces spit\nc andre\nbro dies\nbre g\nbha in\nbarry hearn\nbabyled weaning\nba el\naw ai\nathan s\narnau d\nar amos\naq il\nappor tion\nanc illa\nallu sion\nagu do\nafter burners\nabc newsbrisbane\naar c\nðŁķ ĸ\nå¼ µ\nyne kev\nyadav tejashwi\ny abby\nwhim sically\nwh ou\nwe sel\nwayne sermon\nwar speaks\nwander n\nuru an\nunder dark\nu uponline\nu od\ntze dek\nts z\ntrin itarian\ntri fon\ntoo ke\ntodays special\ntimp f\nti so\nthing swe\ntheo cratic\nthe unit\nsun news\nstra thy\nsto x\nspi er\nsho liday\nser very\nsc dc\nsayye sto\nsave ur\nsa ko\nrr v\nrouge mont\nregul arization\nreas sert\nre dron\nram nagar\npy mat\npru den\npil fering\npan zero\npad mash\nopent ennis\nnys fair\nniy kee\nnightmare beforechristmas\nnicoleand bri\nn ber\nmrscot teddy\nmosthaun ted\nmm al\nmichi okaku\nmen ti\nmama hal\nmaha sabha\nlyt chett\nlov ley\nlo ade\nlie zel\nkin zer\njah nke\njaboo wins\nj emmy\nital ymfa\nit shappening\nis aw\ninstru mented\nilean adcruz\nhur stresort\nhighlin enyc\nhang nail\ngor din\ngon oodle\ngo dragons\ngeorgi ev\ngarden birdwatch\ngar diners\ngame board\ng elli\nforre stal\nfive point\nfit es\nff be\nfat ta\nfa zak\nendemolshine ind\nembarrass ments\neli ud\nea se\ndw ade\ndump site\ndou ga\ndonal dd\ndj uri\ndebru ynekev\ncure ton\ncuff ley\ncrack heads\ncra is\ncov ell\ncor c\ncopp ock\ncan de\nc agon\nburn outs\nbrü hl\nbrun twood\nblon d\nbeer lover\nbber ing\nbb coxford\nbassi sts\nbarone zaza\nbar chester\nbag al\nbab b\nazte cempire\nausout backnt\nauction at\nate f\nas rar\narkhu hro\narab ella\naldub you\n:- \\\n/ .\\\nðŁĺĦ ðŁĺĺ\nðŁĩºðŁĩ¸ ðŁĻı\néĺ²å¼¾å°ijå¹´ åĽ£\nà¸ķ ร\n ¥\nzoo cbs\nz all\nyuvas ena\nwaz ed\nve idt\nval ery\nvad undee\nus asa\ntz ed\ntt ourism\ntimel ine\ntiger n\nth inf\ntetra drachm\nsyno vial\nsummer camp\nstro heim\nsquir rela\nsin ked\nshar ada\nsamu ele\nsaan ich\nrio ted\nri pro\nqueens berry\npsycho somatic\npre treatment\npr il\npla isance\npickup shadowhunters\nover stretched\nov ni\nostr ac\nok orafor\noc z\nnikit in\nneutro phils\nnau seam\nmonic as\nmis on\nmini stre\nmercat us\nmd x\nmal usi\nmad hura\nma shan\nlu iss\nlive sound\nli iiii\nlau v\nkil ledit\nkap ler\nilove wpb\nibu solih\ni wb\nhull city\nhayward sheath\nha bano\nguthri e\nground nuts\ngreen all\ngod father\ngobier no\ngiar dia\ngand hara\ngag liano\nfr ings\nfox field\nff u\nfeel in\nfe compendium\nfau teuil\nevery little\nethno botany\net zion\nesp alier\nend sars\ndum dum\ndrif twood\ndisin her\ndisch ord\ndigital globe\ndigi bytecoin\ndethr oning\nde mur\nday job\ndas sler\ndark wood\ndan forth\ncommercial ise\ncom us\ncolon nades\nchiff re\nchem ung\ncbc falc\ncap ut\ncap ucine\ncan tus\ncaix inha\nbikini body\nbha bie\nbatt y\nav aya\nar bat\napoloo hno\nanesthe tist\nam bati\nalo ves\naker shus\nait ken\nafan art\nabay omi\n... ðŁĴķ\n! ðŁĮ¹\nðŁĩ¦ ðŁĩª\néĸ ¢\nا٠ĥ\nz radio\nyz ors\nwra yzors\nwr hs\nwp sproud\nwhat more\nwer x\nwe p\nvish wan\nuw madison\nun suspected\ntri fari\ntodd dammit\ntegr ity\ntee shirt\nsx s\nswear ingen\nsugar foot\nstr ouse\nsof steel\nshy glizzy\nscu stom\nsb se\nsant acon\nsaint field\nsahy adri\nsaaraa alto\nrow se\nrod taylor\nren tin\nre formatted\npubl ick\npro enzas\nproenzas chouler\npon gal\npolaro id\npic tou\npex els\npeop l\npay per\nparthasar athy\noutre mont\nor cl\noptic h\nol hos\noc ket\nnes j\nn cats\nmy favourite\nmusk aan\nmontal to\nmon forte\nmon ami\nmom bas\nmi shi\nme on\nmarried life\nman madhudu\nlunch box\nlovefor sam\nlong port\nlicht steiner\nlawandorder svu\nlater als\nkunst museum\nku czynski\nkorn gold\nk run\nk ramp\njeopardi se\nj ati\nip es\niop sych\nio annou\nintegral yoga\nini ka\nigen berg\nifc center\ni ppy\ni hrc\nhynd land\nhar bert\ngreat nature\ngre engage\ngiug no\ngirls that\nghost sign\ngetex cited\nge henna\ngast ineau\ngarden city\nfrankieco cozza\nfr itch\nfat was\nfar me\ney res\netri gan\neti da\nent on\nen ak\neg w\ne spirito\ne rebor\ne migr\ndis orientated\nderby museums\ndavide igenberg\ncountryfile live\ncorin thos\nconstric ting\nco stest\nclassi st\ncla rey\ncherui yot\nch he\ncastate parks\ncassandra sleee\nc gt\nbun gend\nbott ineau\nbor gne\nblood good\nbleed in\nberg gren\nbaku go\nav ely\nat ang\nari fin\naquan aut\namph it\naldub for\nalco ves\nagha doe\nagent ur\nabric ation\nabri stol\nableton live\nab yan\nèģ´ãģĦ ãģ¦ãģĦ\nâĢ¦ ...\nÙĩ ا\n³´ ìĿ´ì¦Ī\nzin chenko\nyou willbe\nwv ua\nwhite wood\nvu yo\nvitabio tics\nv ont\nv aren\nu mina\ntro eg\ntravel quote\ntr yn\nti zzy\nthrombo tic\nthol yoke\nthe fight\ntar vin\ntaj iri\nsyke sville\nstraight outta\nstock brokers\nstobart group\nster ility\nsta h\nsky sportnz\nsinglec ell\nsidel ining\nshou sing\nshi jiaz\nseon gnam\nseanpatrick flanery\nse sam\nscream ers\nsch moe\nscar nival\nsaharare porters\nrr u\nro sab\nright stuf\nrake shroshan\nrake em\nr yoga\npul let\npubli us\npro finet\npor at\npol vo\npic cini\nphi delt\nper icos\npau low\nowen sound\nnorth end\nniykee heaton\nnewsar ama\nnew release\nneutr alised\nn co\nn clc\nmove theneedle\nmort lock\nmodel railway\nmo cho\nmis sour\nmigra ine\nmewseum monday\nmati gnon\nmat ula\nmat tawa\nman eesh\nlu vu\nkyo jin\nkurtv ile\nkne ec\nkir kenes\nker rie\nk pcb\njones music\njo ema\njer oen\njen lisa\nj vs\nj anni\nix ia\nintelli j\ninte xt\nint acct\ning my\nindic ud\nignit er\nhor dern\nhol ms\nhin ching\nharvey weinstein\nh ff\ngroo k\ngreen burg\ngreat times\ngrad life\ngopher hockey\ngi galert\nge sucht\ngael scoil\ngab p\ng me\ng afc\nfy inglife\nfortn it\nforfe iting\nfol i\nfo day\nfilm life\nfiel den\nff ert\nempath y\nek or\necre ek\ne mond\ndra vet\ndje mba\ndis qualifying\ndiam anti\ncush wake\ncommo dore\ncom unity\nchrissi efit\nche ff\ncentrifu ges\ncal vert\nbrief er\nbridge fc\nbran de\nber minat\nbenef ic\nbe ziers\nbam berger\nba jan\nazi one\nax elle\nas cl\nare gbe\narch stl\narapa ima\nar round\nanyou neversee\nann ago\nank ole\nam bula\nallin with\nali on\naap ko\n! ðŁİīðŁİī\nðŁĴķ ðŁij¯\nðŁıĨ ðŁıĢ\nâģ Ħ\nÎ ¾\nzoom car\nysle ta\nyaz awa\nyar wood\nwoo do\nwkr c\nwhite horse\nwhatilearned today\nwhati slife\nwh dh\nwat ain\nvol quez\nviol encia\nun moving\nun luckily\ntra versed\ntommy wiseau\ntom asso\ntodddammit kerns\nti mate\nthe zoo\nthe vic\nthe amas\nten ews\ntc w\ntal bot\nstan es\nspast icity\nsm soc\nsla unch\nsi ang\nshi pper\nsheik hu\nshar pless\nsf m\nschoon maker\nsales manship\nry thm\nrotar act\nromu aldez\nretail design\nrescin ding\nrcmp mb\nran sacking\nq ic\npsin sp\nprogram matically\nphone mic\npequ annock\npe a\npc game\nparas auro\nous ley\none iric\nof x\nobjec tivism\nnz inga\nnwa chukwu\nneck pain\nn aper\nmyodd balls\nmuch hhh\nmr h\nmoom oos\nmob ilit\nmiro slava\nmillin ocket\nmiddle grade\nmel co\nmcdon ogh\nmaroon dah\nmarit ima\nlong ine\nliver adio\nles bi\nle me\nle frak\nlady boy\nkat zman\njo da\njen is\nj ss\nitsuku shima\nis ap\nili z\nigh ty\nidentity theft\nhiphopp antsula\nhel ichry\nhealthcare it\nhan au\nham park\ngu jar\ngp cr\ngo gulls\ngang war\ngal low\nfu rie\nfbal lus\nfather son\nec assidy\ne zzard\ndur row\ndu vets\ndoub leg\ndor na\nding a\ndev aki\ndel homme\ndaga ati\ncorn ella\ncinephile photo\nchamber of\ncam mack\nbungend ore\nbun o\nbott band\nblood money\nbit d\nbend ita\nbar ah\nav ad\naust ins\narvin dg\nar od\nanti doping\nant ar\nali ster\nal vie\nai ps\naerop onics\nadidas fballus\n\\ (\n. âľĮ\nðŁİ¼ ðŁİ¤\né Ĵ\nyo gad\nyel verton\nwol pert\nwld life\nwi ggers\nwat amu\nwaffle crew\nvere em\nthunder nation\nten sioning\nte cla\nte cha\ntang ential\ntan ke\ntall ships\nstep wise\nsor ong\nsn d\nsmy lie\nsilicon hbo\nsil vey\nshu mmels\nshan ter\nseton hall\nse ble\nscar abs\nscal ps\nsaumy atandon\nsang ay\nroysoc med\nrevolu tapp\nrelax er\nrelax ationday\nrege x\nreadju sting\nra kel\nr jc\nqui res\npubli shable\npleni potenti\npiti fully\npar takes\noy ler\nover hyped\nou ise\nosa ki\nolober syko\nni bel\nnewed ition\nmv ci\nmu cker\nmt ps\nmonte agle\nmobi lebanking\nmello phone\nmegab yte\nmanga studio\nlover ugby\nlondon npc\nlit fest\nlind blad\nleff erts\nle dgers\nlc cc\nlauren lapkus\nlamo ille\nlam bourne\nkry ten\nkhodor kovsky\nkal enjin\njo suke\njefferson town\njc zyk\nip man\ninterior decorating\ninstam oment\nidhunamma aalu\ni dontw\nhun do\nhether sett\nhau ghnessy\nha ith\nh iso\ngwyn ne\ngu ck\ngra un\ngra ub\ngob bling\nglenfidd ich\ngi jón\ngi bill\nfri is\nfl sen\nfire tv\nfe delin\nfc ps\neu refre\neo incol\nentomo logists\nenni g\ndu th\ndu melo\ndrop zone\ndining nc\ndepu y\nde stry\nde eded\ndanc o\ncouple ts\nconcu ssion\ncol chic\ncl onic\nchil ena\nchat tel\nchar mian\ncan be\ncafe press\nbt spor\nbren ner\nbrae side\nbonnie and\nbear mccreary\nbang on\nba stow\nba die\nav ta\nanti fouling\namrap ali\nak ota\naccessori zed\nac rid\nab big\n= \'\nðŁļ Ľ\nðŁij° ðŁı¼\nðŁij©âĢį ðŁİĵ\nðŁİī ðŁĴĥ\nðŁĮ ĵ\nâĿ¤ï¸ıðŁĺĬ ðŁİĤ\nÊ ĺ\nye won\nyak ko\nwr m\nworl wide\nwor x\nwi elder\nwater proofs\nvivac c\nvi rens\nunequ aled\ntl picks\ntiger sfamily\nthe mc\ntex eira\ntellem jaye\nte are\ntanner foust\nta are\nt enta\nstory map\nstockhol ms\nstandardi se\nst rock\nspeci a\nski pper\nsiem ens\nse ai\nsdg action\nrone ttes\nrichard j\nri ata\npel meni\npeking duk\npe ffer\npas sin\npab on\not n\noo on\none gative\nny autoshow\nnj enga\nniki fyinglife\nnew i\nnew car\nnb alive\nnanow ire\nmt fc\nmorbid elli\nmarqu ina\nmarindu que\nman gwana\nlyric belfast\nluzh niki\nlu sive\nlid combe\nlib man\nli ban\nleve ret\nlatch for\nlan go\nl spraggan\nkel si\njoshab bottband\njim sterling\njanemari elynch\ninternational kissingday\nid wp\ni yaz\nhungry house\nho ppa\nheb buli\nhd ms\nhappy pride\ngrand teton\ngr rm\ngold box\ngang i\ngame strong\ngam i\ng fg\nfu ente\nfen oli\nfal sa\neye brow\nerri ble\ner hardt\nencant ado\nem slie\nedu coach\ned itio\nechof ox\ndrew seeley\ndol lis\ndi ene\nder ay\ndaw it\ndan an\ncryogen ically\ncre o\ncra bbers\ncorrobor ated\ncooki ed\ncitrus bowl\nche b\nchander paul\ncham plain\ncar forsale\ncanyon fire\ncaloosa hatchee\nbumb ashi\nbl undering\nbillie faiers\nbe intheknow\nbbc cov\nba bes\nb ason\nay er\nautom arketing\nauto crats\natal ji\narri vab\nantoni osab\namo c\namerikk ka\nam ax\nalbat rosses\nal ha\nail i\nah wah\naga h\naffil ate\nabri el\nab ase\nab ak\nðŁļĻ ðŁĴ¨\nðŁĶ¥ ðŁİ¶\nðŁİµ ðŁİ¶\nðŁįª ðŁįª\nðŁ¤Ļ ðŁ¤Ļ\nì² ľ\nèĪ ŀ\nਠ¸\nyl va\nwo chen\nwestern ghats\nwal kleys\nviveko beroi\nurban iak\nultra europe\ntun nell\ntrail way\nthe mbi\nthe evening\ntexas monthly\nsuper fici\nsu di\nsqu ill\nsouth ayrshire\nsoft wares\nsny man\nsmer ch\nsmallstreamers connect\nsk rein\nsilver hill\nsh andi\nsen sen\nsea power\nsat anas\nsare gama\nsa ren\nrow ville\nrosen zweig\nrich gang\nreserv as\nred bulle\nre mon\nq ds\nprag matics\npr ound\npiece hall\npersuasi ons\nperformance art\nos mania\non paper\no ae\nnor il\nnfl sunday\nna jar\nmr joe\nmn timberwolves\nmm cr\nmel by\nmeghan mccain\nmc moran\nmax g\nmaup assant\nmarriage bootcamp\nmargare triver\nmac eda\nm sal\nlieben berg\nleys in\nle dg\nla ster\nkis san\nkar and\njohny hendricks\nji ocare\njean loup\nje ant\njacob s\nisa beau\nintersec ted\nhrishi kesh\nhockey town\nho ca\nhin richs\nher nameis\nhel enab\nheart and\nhar ra\nhan z\nhal di\nha sk\ngun sout\ngodzilla kingofthemonsters\ngit eau\ngame digital\nfof ana\nexo genous\nesc at\nerzur um\ndigic el\nderi paska\nde soto\ncrew mates\ncor ail\ncopper smith\nconsig liere\ncon cho\nch ingly\ncau very\ncarra geen\ncandle mass\ncal k\nc chooks\nbru mis\nbritish summertime\nbram cote\nbb ar\nb pr\navent ine\nauctionat alive\nashley judd\nankit lal\nale cia\naimee mann\naham eed\nagon zalez\nabdash soul\nab ert\nðŁ§ļ âĢįâĻĢï¸ı\nè½ ī\nå®ĿçŁ³ ãģ®åĽ½\nâľį ðŁı¾\nâľ ª\nè que\nyour majesty\nwrps rockland\nwith dean\nwilli emullin\nwhole wheat\nwhenin rome\nweather alert\nwab ara\nwa then\nvijay deverakonda\nup tuks\nu or\nti sing\nthoughtful thursday\nthe shardlondon\nthe digital\nsur realists\nsun ol\nstormbre aker\nstim me\nster ic\nstein hauer\nstaip ans\nsru d\nsportsc asting\nsports massage\nsin ne\nsi guen\nshi ppen\nseet trading\nsave themall\nsat er\nsa igh\nsa hr\ns ft\nru as\nro mil\nrespon se\npu ca\npropri o\npro vable\npri der\nplan as\npham ous\nperpetr ating\npel ita\npe ddled\nparasy te\npan tha\nout witted\nout ils\nous seau\not k\nol ake\nny ad\nnor mann\nno edit\nnag araj\nmire la\nmi eux\nmega house\nme rend\nmary rose\nmarc ille\nmanushic hh\nmad man\nm jin\nlo set\nlim pets\nlen hart\nleg ance\nlacey chabert\nkoin ange\nkle ve\nkesh asuxx\nkc traffic\nkab uk\nk nac\njur mala\njaun diced\ninvali dates\nini photo\nilm wx\nido los\nic at\nhum vees\nhappy yyy\ngrub street\ngo zips\ngo bbled\nger minal\ngen re\ngand his\nfollowyour dreams\nflore sta\nfellow ship\neyewitness nyc\nevangel os\neskenazi health\nes ad\nelle decor\ndo bel\ndel his\ncri sfield\nconge aled\ncomp diningnc\nchicken wings\nchae bae\ncer atops\ncar michael\ncairn staipans\ncade tsuk\nbrax tons\nbour seettrading\nbook direct\nbon if\nblin ka\nbil our\nbick more\nbei sel\nbeau bien\nbeach walk\nbackto you\nat midnight\nak hand\nad ari\naardvar ks\n] @\nðŁij® ðŁı»\nâĿ¤ï¸ı ðŁĴľ\nâĢ¢ *¨*âĢ¢\nØ® ت\nÅĦ sk\nyo shis\nyat ai\nyale britishart\nwoody inho\nwhel chel\nwake ham\nvolvo trucks\nvol land\nvl tn\nverti ginous\nval met\nv wf\nunited by\ntimb its\nthy mus\nthur day\nthe village\nthe face\ntas kin\nsuc cour\nsub mission\nsu mar\nsocial ised\nsnu ffer\nslav yansk\nsj fc\nshow choir\nsha ren\nsas ki\ns biz\nreal monarchs\nre gol\nram mandir\nra bab\nr vaidya\npuer tom\npoldark pbs\npninator nai\nphilosop hic\npay zer\nparasauro lophus\npaphiope dilum\notra sheffield\norganiz ational\nor tona\nole mia\nod deven\nobfusc ate\nny fwm\nnorth london\nno deal\nnm fc\nna ak\nmyfour cats\nmul ga\nmonte go\nmodel sown\nmod cloth\nmic an\nmet alist\nmega structure\nmcgoo han\nmarth ac\nm acked\nlu bumbashi\nla ich\nkup chak\nko bolds\nki pps\nki and\nkev ich\nkap uso\nk wat\njet se\nje j\nj nd\nj ml\nitsal way\nit um\ning rate\nin expensively\nhyn chus\nholmen kollen\nho berman\nha inaut\ngrader ocks\ngen ies\nge mat\nfrancis cus\nfoxsports go\nfollow er\nflat pack\nfabi ano\nex clamations\nepistol ary\neoincol fer\nema m\nek deewaan\necu piratesfb\ndo stana\ndiverticul itis\ndiscover la\ndisciplin arian\ndi benedetto\nde weese\nday togo\ndavey havok\ncomedy show\ncolo ssi\nco win\nclande boye\nchang elings\ncastan o\ncanadapost corp\nbu jang\nbre slow\nborge ousmusic\nbin x\nber hampur\nbenson henderson\nbas ka\nartsc entre\narmor ial\nantigu abar\nantic y\nant olin\nanony me\nalmost famous\nallo h\nall thebest\naj ola\nafternoontea week\n^^ *\nðŁıĬ ðŁı»\nðŁı ĺï¸ı\nðŁĮļ ðŁĮļ\néº »\nâľį ï¸ı:\nâĢ¢ âłĢ\nyoung ji\nyou se\ny wood\nwo begon\nwhite marsh\nwhi ppy\nwhere with\nwf nz\nwester lies\nween ies\nwe ard\nwash outs\nwaron yemen\nvi bert\nvar u\nvalley fire\nv rt\nuc its\ntu me\ntravel quotes\ntravel agents\ntrade talk\nthemira gelv\nsuper novae\nstol t\nster ols\nshereen bhan\nscri pta\nsanjay manjrekar\ns ved\nreve re\npretty boy\npredic ate\nport colborne\npin zon\npin el\npic tet\npas richa\npan talla\noutag amie\non fc\nnissan uk\nnewsp ic\nnew shoes\nneve u\nner fs\nnen go\nnac i\nmose by\nmon hegan\nmom ento\nmo hr\nmisse dit\nmete pec\nmeen u\nmcin tyre\nmat shummels\nmaje ski\nmah y\nmah lon\nlycam obile\nlumin al\nlis ation\nle vison\nlaurid sen\nlar khill\nlam ina\nl brut\nkou m\nking ricochet\nkin ged\nkildare gaa\nkell man\nkc pe\nkay ley\nkal pat\njar vie\ninst l\nhob good\nho gle\nhe sh\nhall inan\ngyeongbok gung\ngou k\ngaz ipur\ng ny\nfulton coschools\nfront als\nfootball league\nfilms official\nfaul ting\nfau s\nextor tionist\nerin cruz\nengine ersweek\neless ness\ndox ey\ndis comforts\ndio u\ndazz lingly\ncut throats\ncomedynightswith kapil\ncle liam\nchine sel\nce duna\ncat olica\ncar ya\nbrexit deal\nbo swell\nblun kett\nbill u\nber ges\nben sen\nbatchel der\nbarbic an\nbar the\nb bu\nav athi\nautum ne\nau vsi\nator sk\nass ja\nar lan\namu sique\nall one\nahon a\naf shar\n! ðŁĺĿ\nðŁĴŀ ðŁĴĸ\nðŁijĢ ðŁĺį\ná´ ¥\nyol andi\nyogare treat\nym ous\nym cofficial\nxoxox ox\nwilliemullin snh\nwido wers\nwex ham\nwesthigh land\nwar is\nwa ay\nuranium one\nun gli\nud ham\nu calgar\ntweet likeagirl\ntur lough\nthunder cracker\nthor is\nten sity\ntang ere\ntan pa\ntal mu\nsuni el\nsm sd\nshow addy\nshop girl\nshankar raja\nsha fie\nsextu plets\nscroo ged\nsc alling\nsans tha\nsag ara\nrovere to\nrossi o\nrec all\nprairie chasers\npepe aguilar\npapill omavirus\npan ico\noo ey\nodal isque\nnotan other\nnol lywood\nnikon owner\nnightshift beer\nnesj loch\nmú sic\nmy rie\nmy great\nmy fan\nmun caster\nmon ier\nmipim world\nmat suz\nman je\nlo pilato\nlew dness\nkul m\nkom iks\nklingh offer\nkepp ler\njustin hartley\njust love\njer zy\nit oo\nilo pez\nhermi da\nharjit sajjan\nh alling\ngun ne\nguer illa\ngo dan\ngirls not\ngearo id\nge us\ngar u\ngale abrewer\nfri endo\nfish fry\net cs\nesoter ica\nelek tro\nduck bill\ndot me\ndistill ery\ndisfru ta\ndiamon dring\ndeu sto\ndefence men\nde anda\ndd firish\nday tripper\nd windle\nd gaming\ncrui secontrol\ncruelty free\ncropre dy\ncran nog\nconval escence\ncol beck\ncb buk\ncat tery\nbudd hi\nbot tes\nbolt action\nblack dress\nblack beauty\nbeque ath\nbe son\nbar bag\nbante ay\nbang ko\nat tests\nartific er\narn ley\naregbe sola\nap sc\nan ot\nalphon se\nalab amade\nacci ones\nabat to\naat r\na ill\nðŁļĹ :\nðŁļ© ðŁļ©\nðŁĴª ðŁĻĮ\nðŁį©ðŁį© ðŁį©\néĢ ±\nãĤ¤ãĥ© ãĤ¹ãĥĪ\nâľĶï¸ı .\nâ¬ĩ â¬ĩ\nঠ¾\nwhit etv\nwat ing\nvin ilo\nvagab onds\nun welcoming\nun wary\nun masks\ntux edo\ntru g\ntp wd\ntouri sme\ntouch my\ntoo ker\ntoast day\nto lo\nthe clown\nteng ger\nten ino\ntatt nall\nt ö\nsum mith\nsug ata\nstwee tings\nstu pas\nstewar ton\nspray tan\nsop ron\nsion i\nshi moda\nshash lik\nseh ri\nsc ure\nsab iha\nrush cutters\nrudimental uk\nroy ds\nrober tg\nridley scott\nre ap\nranz kyle\nr breich\npopular ised\npol onium\npo kor\nperplex ity\npart time\nparis marathon\npadman ab\nosco da\noregon football\noo of\nom kara\nny pa\nnorth wood\nnew school\nner music\nneh len\nnationalvoter registrationday\nnation alized\nmur mer\nmu u\nmand ela\nm sti\nlw lies\nle ggins\nla haye\nkon adu\nkokol ondon\nkir tley\nkh oops\nke sho\njon ation\nja ane\nj du\nis mrm\nirreversi bly\ninsubordin ation\ninsafi ans\nignati eff\nhor ns\nholt mann\nhenni ker\nheilong jiang\nhead and\nharperadam suni\nh elling\ngu ap\ngreat service\ngood kind\ngol spie\ngetting ready\nger be\nge deon\nfuzz ed\nfree picks\nfour tet\nfon ics\nflann agan\nfire r\nfethul lah\nfeline friday\nfan wood\nf mea\nem rah\ndil shad\nden sification\nde bar\ncrit ch\nche il\ncene rentola\ncaram bola\ncal lip\ncabinfe ver\nbusiness strategy\nbri stling\nbre ann\nbiz markie\nbio ethanol\nbig ler\nbab ers\nb movie\naz gov\nasphy xia\naqu aman\napple edu\nani ze\nan az\nam h\nalamo bowl\nah iri\nadar sh\n? âĢĶ\n... ðŁĺħ\n-- \'\n! \',\nðŁĺŃ ðŁĴĢ\nðŁĴĥ ðŁİī\nðŁij½ðŁij½ ðŁij½\nìĹ ł\næ §\nå² ¡\nÙĥÙĦ ÙĨا\nzu an\nx ara\nwolfal icemusic\nwm tw\nwillo wh\nwik icom\nwi ggling\nw inge\nvill al\nverdad era\nveg f\nush l\ntv s\nthe leader\nthe hive\ntequil as\ntag al\ntack lers\nsur feit\nstyle blog\nsteins gate\nstar finder\nss ure\nso ireland\nsla pdash\nsko dauk\nsequ atchie\nsebastian rulli\nschem bechler\nsal mag\nrevan che\nrepl ou\nre evaluated\nraf brizenorton\nr fo\npo lem\npat waris\np cn\nonly on\nnulli fies\nmuscle tech\nmul lein\nmou li\nmont illa\nmo tho\nmil ap\nmiguel cabrera\nmedi adays\nmc cambridge\nlong life\nli mbers\nlet aba\nle yo\nlabu an\nkemb awalker\nke len\nkcr anews\nkcc afc\nkar lie\nje evi\njason dufner\njagadish bliss\njag ged\nit sv\nir one\nipriyank sharmaa\ninter ac\ni vig\nhil sa\nhe ttinger\nharpers bazaar\ngun show\ngu lli\ngrowingup black\ngroupp lc\ngroup set\ngro ad\ngri saille\ngreet ers\ngor go\ngoodto great\ngo colts\ngener o\ngc morningdrive\ngav yn\nfitz water\nfel ty\nes ol\nes ada\nerry body\neeee ek\ndingh ies\ndhru vanatchathiram\ndem party\ncy syll\ncon rado\nchange severything\nchal oner\nchal am\ncer titude\ncdn sci\ncar quest\ncar lina\ncabez as\nbus stop\nbob saniga\nbo sko\nbmo harris\nbetty white\nb sor\naz tlan\naruban etworks\narti stique\nar mando\napoor v\nall gä\nalice a\nair cargo\nag ur\nadalovel aceday\nabot anist\nabac us\na otd\na ayi\na ara\nðŁĴ©ðŁĴ© ðŁĴ©\nê¹Ģ íĥľíĺķ\nâĢ¦ (\nzor ya\nzoo z\nx liv\nwyan dot\nve tt\nunic y\nu waterloo\nu ja\ntren a\ntoy spotting\ntower hamlet\ntl ry\nthorn berrys\nthom ast\ntelekom wall\nte shima\nt pk\nsur mount\nstrange music\nstead ying\nstandwith israel\nstam ets\nspell caster\nspedi zioni\nsn ac\nsin bad\nsilver oak\nseb aceous\nsau dagar\nsalam is\nride to\nremo teness\nready togo\nre asure\nradioc itizen\nqu ie\nq magazine\npymat uning\npul sars\npu spa\nprofit eer\npro du\npresu mes\npitt ard\npeak auto\nparathy roid\nover consumption\nou tre\noli vers\nofthe sea\no thon\nnov ae\nnot me\nnorder ney\nni me\nni hilo\nnetwork security\nneed ville\nne yed\nnarasim han\nmusix match\nmotor able\nmo ger\nmini mization\nmin ting\nmen ia\nmcil rath\nmarinel itter\nmadi keri\nlu stre\nlive world\nlever hulme\nle lang\nle com\nknight stown\nki evan\nkhim ki\nkee pers\nka ag\njudith light\njeremy piven\njas mith\nj ji\nioc media\ninver loch\nim plan\nil vo\nij ssel\nibrahi ma\nher ff\nhelli well\nham mes\nha chem\ngreet z\ngreek wine\ngreat york\nfriday feature\nfo gg\nflax man\nfal chuk\nfail ing\nescu do\nery x\nehr hardt\ndur man\ndubu c\ndis connected\ndev arak\nder yk\ndar g\nd green\ncu ello\ncounter acting\ncor win\nconstruc tionist\nci brian\ncanadian open\nbreath nach\nboling broke\nblacke verything\nblack well\nblack catsrule\nbergh olt\nber lay\nbegin shere\nbeaut ys\nbe eee\nasi at\nas selin\nartgalleryof nsw\nani kan\nangel haze\nan gol\namal ick\nadhi kravi\nabar ca\na inc\nðŁĴ¯ âľĶï¸ı\nðŁIJİðŁIJİ ðŁIJİ\nçĽ ¸\næĭ ¡\nÃŃ rez\n´ âĪĢ\nzam asu\nye aaaaah\nwrestle mani\nwin driver\nwaffle day\nvin italy\nvideo gamer\nver wo\nval ya\nuniver selle\ntv w\ntumble down\nts it\ntra urig\ntr ond\ntoken ized\nthe doctor\ntg sports\nsy ch\nsport pe\nsocial ites\nsham en\nshakyam uni\nsepte m\nseib old\nsalesforce devs\nsaha j\ns vin\nrestaurant news\nred hawk\nrebutt als\nre titled\nrajiv message\nprolifer ating\nplumb ago\npe tu\npe leg\npd st\npale face\nover running\nonon dag\nnn pa\nnetro ots\nn illa\nmy bb\nmon duk\nmoisturi zers\nmohan lal\nmo pen\nmil kovich\nman aka\nmaid ment\nmah ina\nlance storm\nl me\nkleptom aniac\nkingsc ross\nking stree\nkindle book\njay buma\njaybuma om\njas inski\nivin ghoe\nim r\nifbb pro\nic ent\nhuf nagel\nhit sville\nh th\ngy am\ngood witch\ngo titans\ngo ffman\ngear shift\nfy b\nfre ds\nforex trader\nfol s\nfad l\neun an\ness chau\nesp ouse\nen sky\neagle man\ne store\ndre wett\ndraw tober\ndj h\ndizz bee\ndece ase\ndeath stalker\ncra il\ncour noyer\ncoun seled\ncolor ant\ncl wyd\nchon ors\nceram ica\nceli k\ncareer tech\nbryan clauson\nboooo om\nbol li\nblooming daledc\nbl ico\nbe tway\nbe muse\nbasili que\navi shai\nastro photo\napal ace\nanti ageing\nanodi zing\nanne hathaway\nanjan avj\nalvv ays\nalmu dena\nac ai\naak nopf\n? ðŁĺŃ\n; $\nðŁĴ· ðŁĴ·\nâŃ ķ\nâĿ¤ï¸ı ðŁĺİ\nâĿ §\nร าย\nÛ Ķ\nË Ĭ\nya o\nwo y\nwinter in\nwinston salem\nwi king\nwarhorse studios\nusur ping\nur ca\nuni fy\nun ita\nun alienable\nu ht\nu asin\ntraitor trump\ntrac s\ntr illian\ntourde suisse\ntomas elli\ntinari wen\ntiddly winks\nthree js\nthe pig\nthank ss\nth rap\ntechno cracy\nte ake\nsuper mare\nsummer bash\nsu dip\nstri al\nsto key\nsk up\nsimad wasim\nsha fik\nsee ster\nse mer\ns ical\nruhr gebiet\nron sexsmith\nrochelle humes\nro tondo\nred z\nred pill\nreal news\nre processed\nraj hi\npomer antz\npho cu\npete y\nper al\npaulma sonnews\npatho logy\npalam pur\nover rules\no had\nnv h\nnorthant shour\nno cera\nnatali ep\nmun ari\nmu hd\nmtu td\nmigu ero\nme cum\nmccour y\nmanushichh illar\nmancity women\nmain landers\nmadelaine petsch\nlove hate\nllll llll\nlic ey\nli mm\nli dell\nlet tera\nlegoland florida\nlag ell\nla gaan\nkvad rat\nku ff\nko san\nkevinolear ytv\njohnnie walker\njer g\njenna jameson\niran talks\nim bert\nilliam son\nil ynx\nichthyo logy\nhorse sofinstagram\nhor ti\nholo han\ngw mag\ngujar att\ngrrm speaking\ngre ave\ngla xo\ngh pl\ngaz ania\ngain fully\ng ics\nfreedom caucus\nfoto sred\nexu ded\nes war\nentre met\nelectric ity\nel itch\nei le\nei k\near le\ne bs\ndry bar\ndi metro\ndeta ching\ndath lete\ncze wski\ncommon s\ncoach k\nce mil\ncan as\nc summit\nbur treynolds\nbur row\nbu ana\nbharathan en\nbeer tography\nbat tist\nbas ca\nauto chrome\naudi os\narvi at\nap lit\nan ley\nalim entation\naliciavi kander\nalegg ero\nak ids\n... ðŁĻı\n)))) ))))\n$$ !\nðŁĺĬ ðŁĴĽ\nðŁĺ±ðŁĺ± ðŁĺ±\nðŁĩ¿ðŁĩ ²\nðŁ¤¸ âĢįâĻĢï¸ı\nâĿ¤ï¸ı ðŁĴĹ\nà¸Ļภģ\nಠ£\nà¥Ī à¤Ĥ\nze itz\nwyn ford\nwr its\nwalla hi\nvotedem sout\nvic parkacademy\nv md\nup voted\nu tong\nu ani\ntr yn\ntodayin prog\nthere bel\ntamiz h\ntake walks\nt fm\nswann anoa\nstre cords\nst ns\nspec new\nspace marines\nsocialmedi am\nsd x\nscroll work\nsai fi\ns gbv\nrin dge\nrailroad er\npu ddicombe\npop mech\nplan thealth\npiti ed\npav lik\nout lasting\nnff network\nnew ell\nne trunner\nnd pldr\nmu sson\nmor ass\nmon sef\nmiracle treatday\nmcki bbin\nmaz ara\nkron berg\nkm ss\nkis on\nkhan de\nkeepit public\nkam sa\nk san\njust ici\nj co\nis ymf\ninter fax\nick en\nhast ens\nha ka\nh tweets\ngre sford\nge trowdy\ng lines\nfu zion\nfu gs\nft nqt\nfre a\nfo sho\nflo rea\never body\net attoo\ner stalk\nent rap\nempor da\nellen son\nel aval\nekdeewaan atha\nee er\nea stover\ne ion\ndrumb agus\ndr al\ndor rian\ndomest ica\ndine fwr\ndigital learning\nde baser\ndavid ferrer\ndareto achieve\nda oust\ncroco dil\ncrit ica\ncos ch\ncorks redfm\ncooper ator\nche me\nce deno\ncanary island\nca ele\nbrit ton\nbil angpilipino\nbhan ja\nben souda\nbed stuy\nbed der\nbac sin\naval ok\narti stin\nart sctr\narri age\nappro che\nankush loveuall\nand alex\naldub ftnqt\nadvance qld\nac ckickoff\nðŁ¦ Ķ\nìĹ IJ\nzul ki\nyel a\nyayo tte\nworld whiskyday\nwo whead\nwira djuri\nwim bush\nwee ty\nwav ell\nvijay tv\nvibr ators\nvel indre\nva ine\nucu strike\ntze hn\nti german\nthin ness\nsunset strip\nsun records\nsul than\nspeak ership\nsne ach\nsl r\nsky harbor\nsi pri\nshut en\nsho bu\nshe ilah\nsearch andrescue\nsch euer\nsaving system\nsav ar\ns shop\nrut kowski\nrun streak\nronde santis\nr pas\nr ala\nquadri ga\nprof dev\npork ys\nor dem\noffer te\no hene\nnw sw\nnoaa fisheries\nner am\nne so\nn sel\nmitchel musso\nmega project\nmccre ady\nmc peak\nmas ke\nmary lander\nmar ris\nma es\nlu gh\nlovel ove\nlohen grin\nlev ick\nleigh anne\nleeds museums\nlazz aro\nkv bohra\nkra fty\nkom mer\nkim jun\nkha e\nkempe gowda\nkad ı\njuli ahb\njeopardi zes\njdff fn\njaw ara\njason reynolds\njar boe\nindie films\nil mu\nhinching brooke\nhar ahan\nhai me\nh enton\ngrac in\ngoon di\ngirl school\ngar bett\nfore tells\neye em\net g\nelimination chamber\neff endi\ne hhhh\ndy bbuk\ndor ries\ndom pet\ndir ilis\ndioce ses\ndefaul ter\ncron an\ncring y\ncopp icing\ncle atus\nclam ouring\nci elo\nced chat\ncareer center\ncare ening\ncapit ole\ncan nock\ncal state\nbusy ness\nbrown thomas\nbrown ing\nbou ille\nbj ör\nbio y\nbergen county\nbe abin\nback pages\nbab lu\naw sum\naval ance\nav anna\narti k\nantoniosab atojr\nanan avarro\nalu ckett\nall ene\nak or\nach tzehn\nac anth\nabou bakar\nðŁĺĤ ðŁĴĶ\nðŁĴķ ðŁİĢ\nê´ ij\nê° IJ\nza hid\nyel les\nwra c\nwer q\nweis ser\nvit ek\nvisu ally\nvill ach\nvandana shiva\nur win\nuniof glos\ntweet suk\ntoo short\ntil les\nthenext one\nthe grind\nter ai\nten sai\ntele vising\ntann is\nstrath allan\nsolihull moors\nso lie\nsj hs\nsier re\nshop at\nsex posed\nresu me\nram lal\nra zzo\nra uh\nra ggi\nquatu or\npulled pork\npon za\novo xo\nnokian etworks\nnbs frontline\nnation alization\nn qf\nmy lanta\nmonoli th\nmish kin\nmarshall u\nmal enko\nma ire\nluxur yy\nlu chino\nlps leads\nlog ne\nlah bati\nkno tto\nke me\nke ito\nkalani thi\njönk öping\njab ot\nj cg\ninthe woods\ninter lace\nin reallife\nin kers\nillusion ary\niam super\nhorri fies\nhi ebert\nhex ane\nhere comes\nhep cat\nhenning sen\nhe dden\nhb wx\nhalt whistle\nha ine\nh kl\nh bu\ngreatocean road\ngi gan\ngi ardina\ngeek out\ngas prices\nfra sers\nfor thood\nfirst champ\nextre mo\nespou sing\ner ci\neng irl\nds band\ndram atical\ndisa strously\ndil ruba\nde freitas\ndaugav pils\ndaress alaam\ndam ine\nclean technica\nclassic motor\nchristopher sean\nchif ley\nchan teur\nchag os\ncesen atico\ncar chives\ncancer prevention\ncamillu ddington\nbwn sft\nbro dgar\nbo it\nbil ad\nban ki\nbam bara\nbachelor nation\nbabie jaan\nba rer\nb sh\naurorahu skies\nashi k\nas de\nar uknews\nanu ma\nanamne sis\nall ant\nalex the\nab ug\nðŁĴķðŁĴķ ðŁĴķðŁĴķðŁĴķðŁĴķ\nðŁijĮ ⾨\nðŁı ľ\nðŁĮ ģ\në§ IJ\nâļ Ľï¸ı\nà® ±\nÙĥ Ùħ\nz iro\nwonderwoman film\nwash spirit\nward han\nw va\nvolve remos\nuser research\nunstopp ables\nun youthenvoy\ntnt vote\ntie breakers\ntic hy\ntheblue coat\nthe pro\nth alab\nte tes\ntan dil\nsw u\nstunt men\nstat erooms\nsri aurobindo\nspear heads\nsos fanart\nsma drid\nsig mak\nshung ite\nshelove sme\nsee hofer\nsamu raic\nreg la\nredro ses\nrad agast\nqueen stennis\npink villa\npin jarra\npad an\np tofed\np list\noy j\noswald twistle\noh u\nnu va\nnotor acism\nnot that\nnor wic\nne ste\nmiz utani\nmis sma\nmick legate\nmed lab\nma sto\nm ve\nm pre\nlit o\nley music\nlev ator\nle pine\nla ket\nkwant len\nkor dei\nkk onen\nki ppa\nkell yayotte\njim james\nj assie\nit ories\nio h\nindian river\nhom ilies\nhom enor\nhe mmo\nhe do\nharland williams\nhang i\nhak ama\nhac ke\nha cha\ngray bar\nglob alizing\nglen mark\ngirl ll\ngi essen\ngar hi\ng wang\nfri jns\nfreedom pop\nf op\nf bisd\necuad orians\nea stre\ne toe\ndro me\ndri vin\ndk b\ndispro ven\ndir co\ndb sk\ndays gone\ndan aroh\ndanaroh rabacher\nda ira\ncuse football\nct fletcher\ncoch lea\nclan sman\nchit on\nchandra a\ncente redness\ncci w\ncat kin\ncarpet cleaning\nc mcs\nbur ritt\nbur rit\nbur ps\nbristol council\nbreconbeacon snp\nbr ous\nbmoharris bank\nbittrex exchange\nbhagal pur\nberg ü\nbath chron\nbad boye\nay ami\nauto shrine\natlantic ocean\nash ur\nany where\nand ora\nan r\nalabamade ptofed\nal smtl\nal goa\nag ener\nad missible\naci do\nac sc\n(** *)\nðŁĺį ..\nxoxox oxo\nwood cliff\nwa hhhh\nwa ala\nvi official\nval da\nun revealed\nun ct\nuc ina\ntucker ton\ntop or\ntony t\nthe cottag\nthat momentwhen\nsã opaulo\nss and\nsp ates\nsoar ing\nslu mming\nshy la\nshir king\nshak ha\nser ino\nsequ al\nsea quest\nscum villain\nsan chita\nsamsunggalax y\nsakura ba\nsag ot\nrosen field\nreclaim temples\nre vent\nre housing\nradi ot\nra wer\nra kia\nq music\npubli ka\nprimary school\npic say\npha i\nph ans\npg tips\npelo tonia\npanzero tti\npad auk\npa pps\np fl\noster ville\nnu oc\nnrl storm\nnor c\nnid drie\nnationalcheese burgerday\nnation alize\nnan og\nnag ma\nmy rin\nmonifi eth\nmat twal\nmar kups\nmag ery\nma zie\nm dotnews\nll cs\nlinsey godfrey\nla don\nklu mp\nkings road\nkher son\njon te\nje had\njagi ell\ninter ludes\ninstagram aviation\ninspir a\ningeni eur\nin z\nike me\nhotel ympia\ngu agua\nglo ved\nglo ats\ngh ook\ngam pel\nfuel band\nfree guys\nfre un\nfilip iniana\nfil ipa\nfield view\nfelic ite\neye sof\nen strom\neat local\neaster by\ne je\ne est\ndys morphic\ndur ston\ndoge ver\ndinner party\ndic kie\ndelhi governance\ndave matthews\ndar waza\ncor zine\ncoc chi\ncirro cumulus\nci err\ncfl draft\ncash cow\ncall al\nbunting ford\nborder security\nbobby flay\nblood wood\nblo on\nbible verses\nbham bri\nbelo it\nbay da\nas microbe\nar lyn\nar ada\nan derer\namandase ales\naerom edical\na angan\n-------- -\n(*´ âĪĢ\n\' -\nðŁĻĮðŁı¼ âĿ¤ï¸ı\nðŁ§¡ðŁ§¡ ðŁ§¡\næ¸ £\nâĻ ¿ï¸ı\nñ an\nyu kino\nyim by\nworlds best\nwood chester\nwonder la\nwire tapped\nwas ley\nwal shy\nvisit wiltshire\nu av\ntun aji\ntororo sso\nti sd\nthalai vi\ntay lore\ntan ev\ntag esschau\nta vener\nswift water\nswayam sevak\nstat ecollege\nsm oooo\nslu dgy\nshirat aki\nshic ooks\nshell no\nsenbill nelson\nscro ps\nroar for\nrider nation\nreza ian\nreu el\nren nan\nreis inger\nreflec tance\nrecali bration\nre eeee\nrailway men\nqueré taro\npri am\npre stel\npran dial\npost grads\npo too\nplas matics\npeace full\norganic chemistry\nonther ange\no zeki\nnvi dia\nnuit blanche\nnau fal\nn mw\nmusik verein\nmurmu red\nmillen colin\nmeth ley\nme ggy\nmatti oli\nmaha veer\nmah mut\nmagno liam\nlo cum\nlive work\nli pi\nli le\nlet son\nlavany ab\nlarkin poe\nla isse\nkro ko\nkor is\nkal ev\nk snt\nk mox\njojo lion\njersey boys\njamai raja\niz nik\nhypn ago\nhuawei mobile\nhr weather\nhol son\nhighway sengland\nheteronor mativity\nher berger\ngy ps\ngp b\ngo vikings\ngat wick\ngal al\ng vs\nfra zer\nfotogra fo\nfoot ages\nfogel berg\nfashion diaries\neurope union\neti seo\neni elsen\nen no\nemr gency\nell and\ndu bie\ndrac onic\ndi rec\ndi du\ndelta pi\ndeci de\ndav its\ndar shana\ncu ta\nctfletcher isymf\ncra zing\nclam per\nchup ke\nchampion sof\ncap city\ncand ys\ncafe bustelo\nc phi\nbut chie\nbro ca\nbox hq\nblack deser\nbin dle\nbi si\nbeautifu lon\nball python\nbali united\nav elli\naster son\narkhangel sk\nar ail\nantan en\namc clain\nak au\nagen i\nag ril\nafric ageo\nadult work\nadri atic\nðŁĺĤ ðŁijĬ\nðŁijĮðŁı½ ðŁijĮðŁı½\nâķ Ĺ\nà¹ģภģ\nwyff news\nwwe backlash\nwe fly\nwal deck\nwa ira\nvideo art\nvaill ancourt\nuri ah\nupto date\nup en\nun ay\nu shahidi\ntree of\nthen g\nthelonely island\nthe pig\nthe houseof\nthe first\nthe bronx\nthe bobby\ntere x\ntemper aments\ntar bes\ntab u\nstreet party\nst catharines\nsport said\nsou bise\nside hustle\nsi donie\nseptic art\nseal ers\nsanjayleel abhansali\nsam jarvis\nsam bassador\nsaiful lah\nross more\nrish on\nrise borough\nri jo\nreferen da\nrdr hw\nrdrhw ke\nra glak\nque eze\nqld maroons\npun tarenas\npulwam ater\nporta ventura\norang i\nor fc\nod ham\no sma\nnikon canada\nnew blood\nmul led\nmissan dei\nman cer\nmamed yarov\nmaha kumbh\nly co\nlow fat\nlov ington\nlou ds\nlost planet\nlor rain\nlocal syr\nloc ascio\nlo ker\nlat vi\nla thletics\nkope ch\nkk f\nkhan al\nkaw amura\nkang ta\nka arora\nk out\nk bye\nk block\nju che\nip eline\ninter regional\ninhal ers\nil ynn\nhoward winn\nholocau stuk\nha gue\ngu mbs\ngu ddu\ngo fer\ngear talk\ngani zation\nfunction alization\nfri dman\nforthe culture\nfight likeagirl\nfiba europe\nfel trin\nfar ner\ndu sun\ndivers ities\ndig na\ndi grassi\ndela uro\ndel is\ndatt ilo\nct as\ncre b\ncost i\ncook stove\nchild labor\nch haya\ncer as\ncastell an\ncam ming\ncallfor papers\nc music\nbul keley\nbuffer chat\nbre tz\nbla i\nbird studie\nbig bend\nbet to\nbest deals\nbelfast trust\nbehindthe scene\nbeard day\nb koepka\nastro family\nap ki\nap ath\nand in\nan sty\namericanc rime\nak dn\n/ âĢ¦/\n!! ).\nðŁĵļ âĿ¤ï¸ı\nðŁĩ¦ ðŁĩºðŁĩ\nå® ¶\nÄį iÄĩ\nz ater\nyaq oob\nyach ts\nxcel energyctr\nwoll man\nwit zel\nwhere it\nwh w\nw uss\nvichy sso\nun assembled\nu an\ntttt tttt\ntin ed\nthe same\nth und\ntest is\ntar quin\nsudan ese\nsu jin\nstr acing\nstati k\nstar zz\nsleep well\nsilicon beach\nsig nes\nsecur itisation\nsad lier\nrs one\nrondesantis fl\nred band\nray han\nray bucknell\nqu ain\npris matic\npo dia\nplo de\npitch er\nphirek baar\npar doe\npap onmusic\nou tran\nom men\nnvi vo\nnight ma\nnewham london\nnar done\nna has\nn carb\nmustlove dogsnyc\nmoyam ee\nmore h\nmorales nbc\nmoral monday\nmo hana\nminer alo\nmicro dot\nlough or\nlondon underground\nlin ked\nley endo\nle ke\nlam otte\nl rc\nkrysty na\nkore sh\nkor do\nkim on\nke bang\nk boo\njat in\njan maat\nj cf\nisland peeps\nis gusting\nione sco\nhorticul turalist\nher mia\nhau f\ngre ate\ngre aney\ngeot agging\ngan ador\ng kg\nfelicit ating\nfaf nir\neye dea\neu greenweek\ne gon\ndun stan\nduba itour\ndol lmaker\ndeod ori\ndahl strom\ncy ne\ncoz ying\ncoor paroo\nbun nic\nbrumis brill\nbli sh\nbla ker\nbi bek\nbertol ini\nbear up\nbarri o\nbad religion\natheist pics\nargu in\narah ma\nar bil\nanupam apar\nan laby\nam ans\nðŁĺĤ ðŁijĢ\nðŁİĤ ðŁİī\nðŁ¥³ ðŁİī\næ ¡ľ\nå· ¥\nãħ ħ\nyou love\nye osu\nwool lard\nwith rome\nwhit ted\nwaz owski\nvam usic\nv icia\nut karsh\nunis an\nun hq\nun disguised\nud fa\ntrebbi ano\ntreason summit\ntot tering\ntiny desk\nthef dci\nt mu\nt ellier\nsun dazed\nsullivan stapleton\nsublime withrome\nsto on\nstar tyour\nspringe tt\nspec tat\nsow mya\nsoun ion\nsm ommy\nshu ghes\nshin agar\nsar oundtheworld\nsamp aguita\nsal tney\nsacri sty\nrepri mands\nrefu sals\nra yos\npu glaas\npo den\nphone bank\npet lovers\npat kar\nparty wear\npalom ares\npab a\nos nat\noperation alize\nob son\nnat museum\nnap er\nmustafi zur\nmrat andhan\nmisogyni sts\nmedical school\nmb b\nmat tryan\nmanus amoa\nmake you\nma seno\nma iri\nm shs\nlollo brigida\nlo ssy\nlegend re\nle tra\nla sha\nkon ig\nkin loss\nkhu zdar\nke ba\nkay ah\njointhe hunt\njo equ\njennifer lopez\njazz guitar\njack reacher\nja ho\ninsta stories\nhyper converged\nhor miguero\nhi ep\nher zig\nhenry mcmaster\nhard life\ngü rel\ngra uer\ngott al\nglo bo\ngar nham\nfv glive\nfro moz\nfo tom\nfever few\ner berg\nent zel\ndu ology\ndri scol\ndit c\ndi mages\ndi ante\ndeli ke\ndel li\ndejec tion\ndeci siveness\nde presse\ndazz le\ncu cur\ncre ll\ncorpor at\nconstitution alist\ncomplete streets\nco ziest\nchop tank\nchast ises\ncare sse\nbun naha\nbull s\nbreath ers\nbol ong\nblock stream\nbi zi\nbetter life\nban deira\nau det\nat tern\narric hannel\napportion ment\nap ti\nangelas canlon\namin ata\nam roth\nall me\nag rant\na akin\nä¼ Ŀ\nzz acnn\nz scaler\nye dition\nyak ub\nwg x\nwene ed\nw kw\nvacation rentals\ntran z\ntoy town\nto gar\nthick ener\nthe sopranos\ntent en\ntar getting\ntalent acquisition\nta wil\nswar ts\nsw and\nsusan ville\nsuno cor\nstan chions\nsputnik int\nspay and\nso bu\nsig ala\nshu ter\nshigh school\nsg len\nseri ksen\nsensiti zing\nsd summit\nsalv adore\nsai bot\nsaber metrics\ns my\nra avan\npod fix\npier zynski\nperri man\npensami ento\noro der\noranje stad\nober lin\nnul led\nnol enation\nnew fane\nn jac\nn alu\nmush ers\nmou lins\nmo il\nmo he\nmilitari stic\nmah boob\nlima hl\nlift bridge\nlabr ys\nla dolcevita\nkur tz\nkram atorsk\nknow sley\nking makers\nkas am\njuli aroberts\nje der\nin ae\nhar jit\nhack berry\nground works\ngreg sestero\ngre ninja\ngolden era\ngo duhawks\ngiu giaro\ngirar dot\nget ter\nger ken\ngem sona\ngang adhar\ngam ingh\ng wich\nfish cakes\nfar fetched\nfal sify\nevidenti ary\ndy spe\ndun gloe\ndpt student\ndmv hoops\ndemar ini\ndel wp\ndar lin\nczar necki\ncustomer service\nclt food\ncilli zzacnn\ncentin ela\ncc bl\ncag op\nbu achaille\nbrü cke\nbru gby\nbrit ts\nbret michaels\nbrave st\nbooboo stewart\nblow out\nblack tie\nbi h\nbert strips\nber ano\nbeforeyou go\nbe rel\nb ance\nato cracy\nati oneu\nat alan\nast age\nar li\nap lang\nand ung\nambiti ously\naint no\naid il\naged don\nad avies\naba journal\nðŁĻĮ ðŁĴª\nðŁĺľ ðŁĺľðŁĺľðŁĺľ\nðŁĶ¸ @\nðŁĩ¨ðŁĩ ¿\nðŁ§ĺ âĢįâĻĢï¸ı\nðŁ¥ĩ #\níĶ ¼\në° Ķë\nä¸ ĥ\nâĿ¤ï¸ı ðŁĮĪ\nyoung leaders\nyamaham otor\nwomen inste\nwir h\nve dette\nuser interface\nunboun ders\nulster grandprix\nty ran\ntri pathy\ntil tro\nthe hi\nthe cle\nterry fox\ntempl enew\nsusan n\nsp aeth\nsop hy\nsoko lowski\nskan sen\nsit z\nsik hi\nshar am\nsham balla\nshadow banned\nsent om\nsel d\nsd ick\nsch emed\nsal eyards\nriff age\nre submit\nre mora\nre hired\nradi ans\nra unch\nprinceton upress\npowder magazine\npost traumatic\npi eno\npflu eger\nparade of\npakv sind\npa q\non etwork\nome de\no esophagus\nnys dot\nnot forsale\nnom is\nnol on\nn gara\nmu cosa\nmou lya\nmer q\nme giddo\nmaxg schneider\nmat tc\nmal herbe\nmaison avendre\nma sumi\nlucas dirt\nlaquan mcdonald\nlan gholm\nkam os\nka ash\nk do\nju bei\nittake stwo\ninduc tors\nib sf\nhorror core\nhomo erotic\nhenness y\nhase ul\nhang out\nhal m\ngui ao\ngiriraj singhbjp\nfuse box\nfree zy\nfaro ese\nfaci ally\nex ocet\nenlar ges\nemrgency kittens\nel ul\ndysp nea\ndream girls\ndistrict speed\ndigital twin\ndeple tes\ndanny sullivan\ndal ab\ncounty durham\ncol v\ncol lum\ncoffeet able\nchicago symphony\ncherno byl\ncaz ador\ncapric e\ncam utd\ncal mes\nbur mester\nbur kha\nboli de\nbo wne\nber c\nben aras\nbal ewadi\nase er\nas obi\nang g\namp adu\nall ones\naha asan\n!! âĢ¦\nèĩª æķij\nâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ı#\nÅ¡ i\ny xe\nwhoa jordie\nwerewolf wednesday\nv achi\nun cut\ntom boyish\nthe legal\nten de\nswanse acity\nstig ma\nst lukes\nspiri don\nspectro graph\nsoch aux\nsn omg\nshaz ad\nsha henshah\nsd awson\nsalford cityfc\ns north\ns back\nriaz or\nrallye montecarlo\nrad wan\npu ting\npter anodon\nport ant\npopul ationday\npo ple\npic fair\nphyl lida\npath mark\npastor alist\npap ar\np inging\nor tom\noooo oooh\nonor ris\nnor aho\nnom nom\nnetball worldcup\nnatash aleggero\nmysteri esof\nmy happyplace\nmove it\nmoto corp\nmiss them\nmile high\nmh p\nmezz otint\nmeme monday\nmediat ama\nmargare ts\nmadhu sudan\nm duk\nlucre cia\nlu bis\nlocal ise\nline mates\nligu rian\nland onorris\nlac er\nl varchives\nku ne\nkour i\nko kane\nko ban\nkis lyak\nkin daichi\nkennedy nation\nke ister\nkashmir floods\njoh no\nit vs\nistitu to\nise kai\nioanni dis\ninter val\ning var\nin britain\nimmun ological\nigu anodon\nhe mme\nhart pur\ngru bbing\ngre gari\ngor ki\ng lead\nfree beacon\nflu es\nfl l\nfin try\nfa xe\nexplore victoria\neugeni des\nee ks\ne frem\ndiv yadutta\ndi pa\ndi orio\ndee v\ncrypto spor\ncreative market\ncor undum\ncoo pride\nconspir atorial\ncongr ates\ncommerci alised\ncitizen suk\nchristian slater\nchamber layne\ncath kin\ncake pops\nboxerdog union\nboss logic\nboar drooms\nbo fill\nbellec i\nbbca q\nbali ka\nbale ful\nb gt\naudi southafrica\natom ica\narab net\nar vis\nanam era\nai guil\nagu stin\nadel le\nade vine\naber cynon\n^ *)\n. ðŁıĨ\n-_ -"\n! =\nðŁĴĽðŁĴļ ðŁĴĽ\nðŁIJ ģ\nì¸ Ħ\nঠ¡\nन म\nx media\nworm ley\nwedding dresses\nwe own\nw ps\nvon tae\nuto pias\nun salted\nun ation\nun adorned\nty m\nty che\ntou la\ntou l\nthuli madonsela\nten aga\nte jay\nt bird\nsy nec\nsuk ses\nstron aut\nstock mann\nst w\nspark fun\nsleek makeup\nsk w\nsi dr\nshanth nu\nseed bed\nse mba\nsau thentic\nsat oko\nsam gye\nsa heli\nrye o\nroar withpride\nriverfront times\nreclaimed wood\nreali gning\nqu ants\npul le\nprice waterhouse\npreserv ationist\npp op\npadmal akshmi\nox fords\notta viani\nnuis ances\nnu tan\nnsc ad\nno filters\nneuroradi ology\nnan aman\nmutu ality\nmodel mgmt\nmod pizza\nmemor able\nme tten\nmary rose\nmarthamac callum\nmar wat\nmai ze\nlyne ham\nlin sley\nli fan\nkro onstad\nkre ms\nki dding\nkeffi yeh\nkar ley\njman rara\njeff brazier\njeal ously\nip ython\ninebri ation\nincumb ency\nik ko\nhun ches\nht cafe\nhelichry sum\nhe sj\ngren dizer\ngc v\ngat ineau\nfly together\nfind sorguk\nfag us\nex ss\nelaw ler\neg n\neck elibrary\ndi eck\ndeaf ened\ndddd dddd\ndal ston\ncustomers atisfaction\ncuri ae\ncolorad ans\ncoach mike\nco sc\nclar kin\nchuck palahniuk\nchron am\nchav annes\ncau ser\nca rele\nbur u\nbren gle\nbren de\nbly leven\nbhagav an\nbh hs\nbein eckelibrary\nb ta\nati an\nast en\napp raise\nanticoagul ants\nan ings\nage a\nadri anj\nac ros\nðŁĻĥðŁĻĥ ðŁĻĥðŁĻĥ\nðŁĶ¥ðŁĶ¥ @\nðŁİīðŁİīðŁİīðŁİī ðŁİīðŁİīðŁİīðŁİī\nðŁĩ¹ ðŁĩ¹\nå¨ ģ\nม าà¸ģ\nठħ\nyou cef\nyo hei\nulkom inisterio\nturn blad\ntren chant\nthel as\nthe velve\nthe futureof\nte he\ntal manac\nsv ill\nsu gru\nstony brook\nstar sfc\nss ay\nsports nutrition\nsolo lastyle\nsix point\nsime on\nsilver agetv\nsho well\nseeyou again\nse ena\nsamira wiley\nsaf l\nro ent\nread women\nram ÃŃrez\nproduct development\npre installed\npietra santa\nperistal tic\npast it\nparami yer\npal ette\npai gey\noberge fell\nnu ñez\nnkosa zana\nnas ser\nnam aqu\nmuscul ature\nmor tu\nmillion ai\nmii foto\nmick conlan\nmav ro\nlackadais ical\nl án\nkro gan\nkarl skrona\njournalismis notacrime\njimin hofe\nislandpeeps birthdays\nincre dulity\nhonest ly\nher si\nhealth systems\nhaj du\ngu pton\ngreat clips\ngott es\ngo lia\nghost land\nfitz carral\nfaru qi\nfabric live\nf he\neverythin ge\neu dy\nere tz\neli yahu\neigh ty\nec pr\ndz hok\ndu kat\ndiaz epam\nde regulated\nde hydrator\ndanny kanell\nd total\ncycl ine\ncan filmday\nbroadway com\nbrigan te\nbox cars\nbombar dier\nboin net\nbo witz\nbi agi\nber toni\nbay le\nbab li\nav illage\naudio technica\narm end\napo thecar\nandre greipel\nambul anc\nadil ray\nad nate\nðŁĻĤ .\nðŁĺį ðŁijĮðŁı»\nðŁĶĿ ðŁĶĿ\n渣 åıį\n渣åıį æ´¾\n渣åıįæ´¾ èĩªæķij\n人 渣åıįæ´¾èĩªæķij\nziau ddin\nwell wishers\nvyrn wy\nvolcan ism\nvolcan ic\nvideo love\nvan meter\nul brich\nuh manoa\ntwenty something\ntri delta\nto vic\nthe sportshub\nth onet\ntex hibit\nstau dt\nstarry night\nsouth pacific\nsof ie\nsmart phone\nsl h\nsky ride\nsir specialists\nshing led\nsh sm\nsecon ding\nse any\nsau jani\nsan miguel\nroad rage\nro dent\nrhyth mically\nradiocitizen fm\nra ymi\nq j\npresi dium\nperfec tion\npa illard\noutfit grid\nout t\nok ayy\nnú mero\nny ghoops\nny akun\nnile postnews\nner ine\nne ate\nnanse mond\nnag ap\nmy mc\nmust reads\nmuni er\nmoo rel\nmo sconi\nmit tag\nmin tel\nmh chat\nme pratap\nmass aged\nmarri yum\nmark ku\nmarchitec ts\nmaha vishnu\nmag ph\nmad dox\nlot z\nlea ke\nld week\nla force\nkor bol\nkorbol orbo\nja jafri\nitsallgoo dep\nimin love\nhuss am\nhollyj green\nhirsch horn\nhi do\nhen party\nheartw alk\ngu revich\ngreen ie\ngre lle\ngom ers\ngan bare\ng wx\ng burg\nfr m\nfos sum\nfil mcenter\nfeel z\nfe dri\nfash nerd\nfacility management\nero yal\nermah gerd\ner so\nelev ated\nel ay\nec ken\ndur rett\ndream stime\ndh any\ndefend ing\ndef our\ndec ay\ndani elli\ncyclonef ani\nco wan\ncaw ston\ncatte drale\ncarbon ell\nbreastre construction\nbois vert\nbhu van\nban ews\nas le\nar ren\nar jan\napp ar\naom ine\nantag onize\nandrew scott\nam exico\naircanad acentre\nain z\nagi letd\naften posten\naf thunderbirds\nabhil ash\n; ))))\nðŁİ¾ ðŁİ¾\nðŁį ®\nìŀ ī\néģ ¸\næĶ ¾\nåĬ ł\nâĻ¥ï¸ı #\nঠ¨\nzo tac\nza ine\nym pathetic\nyab ooks\nwx pn\nwoo fs\nwild thing\nwar gamer\nvir ani\nv its\nus of\nunder body\nu kie\ntsu shima\ntri pl\ntrabaj ando\ntejas wini\nte os\ntb alls\ntash amed\ntar kington\ntamar aw\ntaitt inger\nt pay\nt cl\nsuss an\nsupersport fc\nst francis\nspringh ouse\nspas modic\nsonic mania\nshear waters\nsharp stown\nser hiy\nsem plice\nse vo\nsalam at\nrubber duck\nroo sa\nrocke ts\nribo somes\nri bon\nrac ci\nprojec tx\nprescri ber\npendi dikan\npayday loans\npaol achi\npan te\noff sides\nnorth walest\nnorfolk show\nnevers leeps\nmy favorit\nmust ad\nmoel fre\nmirac les\nme der\nmayor kun\nmass ac\nmargo twall\nloy le\nloyle carner\nlove flowers\nlindsay mendez\nlight sticks\nkur ram\nkirstend unst\nkar aw\nkami akin\nk him\njessic aes\nisi ana\nio anna\nin vocations\nin ma\nike barinholtz\niamraj choco\niam lindsayjones\nhyper trophic\nhummel stown\nhiro o\nhill enburg\nhe bb\nha utes\nh anian\ngur ram\ngiving soul\ngh raib\ngabou rey\ng sburg\ng ite\nfy ne\nfreak in\nfor him\nfollo train\nfire boat\nfi stu\nffi on\nferr ite\nfe stac\nfe bbra\nfall acious\nf ê\nf twd\nesto u\nescri va\ner sa\nent j\nefin itely\ndol son\ndiplom atically\ndhanush fans\ndewsbury rams\ndegre ed\ndan il\ncn sc\ncharless oule\ncham bery\ncarrageen an\nbun kered\nbre lade\nbran dished\nberser kers\nbb ad\nbanger ter\nbaj aur\nb sy\nauburn football\nakh laq\nadv i\nabh ors\n. ðŁĺįðŁĺįðŁĺį\nðŁĶ Ģ\nðŁĴĸ ðŁĴľ\nå¸Į æľĽ\nyin yang\ny way\nwillowh erb\nwhereis adtr\nwait itu\nw lv\nvin ces\nvi zzini\nvers ity\nver icks\nur v\ntwi p\ntrustthe plan\ntj es\nten newsmelb\ntax us\ntang mere\nsun music\nstor min\nstor ation\nsti pa\nspro ductions\nsol ms\nsingh ji\nsid malhotra\nsi eves\nshijiaz huang\nsh vili\nsh eller\nset as\nsel ine\nse tra\nsd am\nscifi actor\nsan tha\nsab ourin\nsab bah\nrte soccer\nrough est\nro stec\nro mil\nrepeat ability\nrejoin der\nreducere userecycle\nre interpreting\npy charm\nphotor tg\nphilly chic\nphill amarr\npatri zio\nnuman official\nnorthan ger\nnor anda\nni pes\nnext cloud\nner s\nnandit adas\nnanai mo\nna hhhh\nmutt day\nmend ous\nmediab ias\nmary katrantzou\nmarsh wood\nmarkh enry\nmar ami\nman ou\nlo ong\nletsgo heat\nlee schools\nlax atives\nlatchfor devans\nlang age\nla ing\nla chs\nl latchfordevans\nkom al\nkho khar\nkel vedon\nka io\njuxta poses\njo josi\njagran news\nir ambulance\ninstagram down\nhon k\nhill croft\nhelle buyck\nhe mis\nharmon izes\ngun it\ngu é\ngru bbin\ngrac ies\ngo ire\ngo flashes\ngo crows\ngel ora\ngamer retweeters\nfer ial\nf sk\nec ymru\neaton ton\ndubai worldcup\ndomin ate\ndin as\ndic ec\ndeclin ation\ndbt india\nday tour\ndat elin\ncounter measure\ncle ghorn\ncent i\ncancer moonshot\nc mrf\nbuy british\nbon zi\nblack ferns\nbirdstudie scan\nbhatt a\nben to\nbelk bowl\nbar ison\nautom at\natal aya\nar cona\nanten natv\nalex bowman\nakwe sasne\nadore e\nablu e\nab lock\na ÃŃ\nðŁĺĺ ðŁijį\nðŁ¤Ķ )\nâĶ Ķ\nwin dians\nwellcom elibrary\nwee ter\nwan chope\nwad is\nw week\nup your\ntoshi ya\ntomat ometer\nto dom\ntal u\nta haw\nswwap nil\nsweater weather\nsul cata\nstru ble\nss cho\nsonequ a\nso bo\nshari fa\nsham ilton\nsex tra\nscan di\nsan andreas\nsagitt al\ns graffito\nrhudd lan\nred hour\nradi ata\npwe ase\nphil ology\np ells\np cin\northo graphic\nor bea\nocto pizzo\nnade ch\nmy friends\nmur re\nmohun bagan\nmo dit\nmissi le\nmir u\nmed star\nme hs\nmass dcr\nmac er\nlukas ulic\nlu isi\nlocker room\nleeann womack\nle edy\nl sjnews\nkol om\nkar ao\njae hyo\nitsabout time\nij er\niafe ssia\nhu ot\nhu bert\nhom icide\nherni ation\nher f\nhar uko\ngun dry\ngu ri\ngrit stone\ngries bach\ngreenman fest\ngou w\ngolden yearsof\ngo pers\ngiorgiom oroder\ngilead sciences\ngh l\nget stealz\nfun i\nfru its\nfront stretch\nfri skies\nfoxy gen\nfion n\nfex ile\nferguson october\nfair lady\nf pu\nexac ts\neugen iafessia\nepal ace\nei ras\neco leman\ndo bler\ndeutsche telekom\ndesay uno\ndead fall\nd hand\ncun anan\ncrimin alised\ncolonial williamsburg\nchi haru\ncherrybelle indo\nchallenge yourself\nchad bourne\nch eva\nch azy\ncdw festival\ncarolin ed\nbox nationtv\nbottle shop\nbook facefriday\nbook buzz\nbonda renko\nbon voyage\nboardof directors\nbo sk\nbit of\nbigg ame\nbi jl\nbetween the\nbatter ie\naz tex\nathe istic\nas nr\nar ki\nannap aquin\nange rer\namp p\nalcin dor\nal tab\nabove thelaw\n_ -_\nðŁijįðŁı» ðŁijįðŁı»\nðŁ¤· ðŁı½âĢįâĻĤï¸ı\nðŁ¤¦ ðŁı¾âĢįâĻĤï¸ı\nìĿ´ìĶ ½\n⾨ ðŁĮ¸\nâĺ¹ï¸ı âĺ¹ï¸ı\nâĹĸ |\nØŃ Ø±\nz b\nwildbill photo\nwild wood\nwi ecki\nwhippoor will\nwest law\nweihnach ten\nweall bleedblue\nvu u\nvideo clips\nutt amav\nunge rer\nun desired\ntw alls\nthe lead\ntere ssa\nte ich\ntchouk ball\ntabletopr pg\nsur fcity\nsudarsan sand\nstan away\nsque ez\nsoli psi\nsm yl\nshot crete\nsen alexander\nsemit railer\nscill onian\nsat anic\ns endra\nqueensugar own\nprogno stication\nphil trum\npervad ing\nper vasi\nparis jackson\npar ous\npaloalton tw\npalindro mic\note y\nonceuponatimein hollywood\noff beat\noff as\nob as\nnoraho donnell\nnon ito\nmul tan\nmortg ag\nmer nda\nmelo dica\nmari za\nmar ki\nmand ino\nmaddie and\nlive on\nliti gious\nkul len\nku mag\nkni p\nking sisland\nkin neil\nkather ina\nkani mozhi\njan ick\nis eries\niam bohemia\nhon ored\nhin ze\nhell s\nhatcher ies\nhar da\nhammer smith\ngun s\ngre ases\ngel ada\ngefil te\nfront door\nfri m\nfother ingham\nfoo de\nfleuri eu\nfieldre cording\nfer ric\next asy\nexas cale\nest ados\ner can\nen voi\nell sberg\nel vina\nel sen\nec pa\nearly year\ndub awi\ndo yon\ndirestra its\ndg f\ndetwe iler\ndestruc tor\nde castro\ncraw leytown\ncorpor atocracy\ncor biere\ncontor tions\nconecu h\ncomm ending\ncolle gues\nchar ging\nchakravar ty\nbtsout castd\nbi gos\nbeagle facts\nbe ani\nbath nes\naxi al\nastru d\naru th\naragon ite\napr ili\nap aw\nantiguabar buda\nandroid app\namor ya\nakhmat ova\nad ine\nac ot\naam c\nðŁĻĭðŁĻĭ ðŁĻĭ\nðŁĹĿ ï¸ı\nðŁĴ¯ ðŁĻĮ\nðŁijŃ âĿ¤ï¸ı\nðŁ§ ¸\nâĺĿ ðŁı¼\nà¸Ńม ส\nঠ®\nÚ© پت\nکپت اÙĨ\nай д\nzen ia\ny ami\nwoo dring\nwee ked\nwa aw\nw bap\nver din\nvan diver\nus br\nun ruffled\nttly teala\ntraqu air\nthrill ingly\nthe cool\nten ax\ntai v\nsupp lant\nstate street\nst tropez\nsquir ting\nsports media\nsn cb\nsik lan\nshould be\nshi pra\nsgo t\nsedi mentation\nsaw ley\nsatur nia\nrock wiz\nro chefoucauld\nriver hawk\nrene ged\nrecord label\nre aney\nran ney\npur dah\npre ordering\npla bs\npaolachi occhi\noxidi zing\nover spent\noko lie\nofficial tulisa\nob serve\nnystag mus\nnon duality\nnewstalk zb\nnet mediatama\nne ung\nnazar é\nmy kitchen\nmu toh\nmon ads\nmis ur\nmi metic\nmei sha\nme thi\nmc as\nmau boy\nmarien assar\nmac kidsbooks\nly dd\nluka ther\nlov ell\nler che\nleekwang soo\nlam phun\nkirst jen\nkansa shistory\nk wwl\nk ello\njuli ec\njohn cross\njn rs\njac anews\niu chi\nion izing\ninvest is\nintroduc er\ning omar\niconocla stic\nhm givingsoul\nheph zibah\nhen ze\nhell ll\nhakkasan lv\ngus beef\nguiller mo\ngeode tic\ngeek s\ngd ha\ngame gear\nga day\nfre ema\nfox hunting\nfirstalert ct\nfe kete\nentren ch\nenni als\nela dies\neducation fest\ne wer\ndrau ghts\ndog u\ndisp late\ndenou ement\ndag i\nd ack\ncynthi ana\ncyber tron\ncur ated\nctvmorning wpg\ncottes more\ncontextu alized\ncon acher\ncomman do\nck k\nchin nery\ncent aurea\nbünd chen\nbv n\nbry ana\nbole lli\nbit shares\nbish ley\nbisd pride\nbevac qua\nbest wood\nbarbar alee\nbar rowland\narnotts dublin\narac elyar\nantondu beke\nalyci adeb\nakl council\nah vaz\nactiv ated\naa sia\nãĥ ĺ\nãĤ°ãĥ©ãĥĸ ãĥ«\nyou do\ny cat\nwom mack\nwgx anews\nway laid\nw bell\nvu ght\nvel via\nv fm\nut saf\nuss ari\nus by\ntur ku\ntunaji bu\ntran shuman\ntopo data\nto ka\nthedaily meal\nthe very\nthe out\nte anu\ntc prepzone\ntas si\ntacho graph\nswis consin\nswi veling\nsuper coppa\nster k\nsteakn shake\nss aint\nsports fan\nsplatter house\nsk filmsofficial\nsi akam\nscary farm\nsar iska\ns good\nrun ton\nross o\nreverber ations\nresh mi\nr ba\nproto zoa\npil son\nouri f\norientex press\none way\non ow\nok han\nofrac osmetics\noble zada\no group\nnuclear weapons\nnoki amo\nne sters\nnarcissistic abuse\nnab ard\nn ta\nmosh pit\nmispron ouncing\nmiam il\nmi va\nmegal omania\nmasi ello\nmariano divaio\nmar ve\nma uk\nli sel\nle azes\nlamp man\nl alife\nkonz ert\nkin donesia\nkh ater\nkeyand peele\njob st\njeremy mjordan\njal ouse\nitsc old\nit done\nill ys\nhouse trained\nhf ma\nhel ove\nhay u\nhann ay\nguer tin\nguay abera\ngu sher\ngaurav kapur\ngary gulman\nfu thark\nfire pro\nfil mand\nfil lup\nfansn stars\nf pack\nexaminer com\nevo shield\net ang\ness ington\nen eu\neli zab\near mark\ndru ce\ndissoci ate\ndiag ne\nden isle\ndeb icki\nde sfile\ndau k\ndam es\ncsic yber\ncros stour\ncrafty chaching\ncr rc\nconversation us\ncole tti\nchy trid\nchriswe id\ncheri e\ncbit weets\ncareer sin\ncar land\ncampus rec\nbuch ner\nbrain tumor\nblue tones\nbirth of\nbio geochemistry\nbh or\nbeliev eland\nbe j\nbe greater\nbao babs\nbaftac ymru\nav ene\nattan asio\nater ra\narrow fieldstud\nard ell\narchenemy metal\nar or\napoorv amehta\nanticlock wise\nans gar\nand en\nalto adige\nalo st\nal lots\naf low\nac w\na story\n) !!!!\nðŁĻĬ âĿ¤ï¸ı\nÑĢоР¼\nzu baida\nz ima\nz ager\nyong bosch\nyade j\nwood side\nwhati sschool\nwf my\nwewill waitfor\nwar ford\nusu f\ntu chman\nthe fall\nth fan\ntemplenew sam\ntemple ogue\ntat raffic\nt dr\nsy ne\nsucr alose\nstan dees\nst ites\nspon ging\nspi ffing\nsky music\nskew ering\nsit rep\nsister ship\nsis sel\nsin éad\nshog goth\nsho b\nseed sman\nrspca qld\nroy blunt\nrobber y\nriver plate\nrin th\nride the\nric asoli\nrenthusi asm\nre spo\nre man\nr anco\nq ala\npr iciest\npr fm\npomer ania\nplu n\npic hincha\npeperon cino\npent ennis\npay in\nott weather\nnom inet\nnational nurses\nna ves\nn xi\nn gah\nmuslim pro\nmud died\nmu ffed\nmon ark\nmol lison\nminim ises\nmic t\nme lectro\nmaxim alism\nmarn grook\nmacau lay\nma or\nma gri\nm wu\nlu zzi\nlong boards\nlike toknow\nlia ise\nlev ada\nlauren cimorelli\nlan us\nlan dish\nla valier\nkaryak arta\nk len\njohnny yongbosch\njohncross mirror\njessicaes anchez\njeong min\njeet music\nitor loseit\nindign ities\nill s\nil div\ni bang\nhox ha\nhol lo\nhoce ima\nho bia\nhigh ton\nhat man\nh ici\nh anc\ngosp artans\ngood hew\ngo sox\ngit ano\ngg m\ngamesof thrones\nfour teen\nfor throad\nfolger library\nfigh ton\nfi bra\never son\nev att\nelton john\neli eve\nele mento\neel grass\ndream theater\ndog ge\nde gla\ncy mo\ncrush ingly\ncott ons\ncot ler\ncor m\nco stal\ncan ari\ncaf o\nca cha\nbushy park\nbryan ferry\nbrun sw\nbreak room\nbow fishing\nbishops stortford\nbe safe\nbav o\nbau ch\nband olero\nbadrin ath\nbab un\nart mag\narcher fx\nam far\nallman brothers\nalan ritchson\nail ity\nager wal\nae ther\nadul yadej\nace comiccon\nac rrm\n!! âĿ¤ï¸ıâĿ¤ï¸ı\nðŁķ £\nðŁ§¡ ðŁ§¡\næĸ° èģ\nಠ¦\nØ§Ø ³\nzu a\nzar qa\nzapat illas\nyakima valley\nxia olin\nwe bane\nwa hey\nw ttc\nveto ing\ntribecaf ilmfest\ntrex ate\nto kor\ntheoxford mail\nthan ol\ntend ance\ntatt y\nt lu\nsurviv alists\nsty lis\nstjohn su\nst fb\nst ard\nspre ston\nspinal cordin\nsp ry\nsop ris\nsomni um\nsmil k\nsmart data\nslam online\nskel os\nsignore lli\nshi rey\nsenator timscott\nscrutin ising\nscarlet blue\nsandra bullock\nru bai\nros setto\nrock tober\nro dt\nrip curlpro\nrebu king\nrapi ds\npil chards\nphenom eno\npent lands\npe ee\npau los\nparam par\not ps\not actic\none dog\non gole\nnh t\nnewton grange\nnaj at\nn itec\nn dio\nmoff it\nmo bbs\nmitch albom\nmin oso\nmid south\nmcgau ghey\nmc garrigle\nmc callister\nmb el\nmal tepe\nlove golf\nloqu acious\nlibraryof bham\nlea hey\njac are\nj np\ninthe game\nimangel abassett\nid leg\ni heid\nholly gshore\nhel ado\nhe gg\ngu ld\ngro ysman\ngri schuk\ngri dman\ngori zia\ngif ford\ngd p\nfy vie\nfu kn\nfoo dd\nfocu srs\nfender gbi\nf ä\nf te\nevan oblezada\nev amarie\nesch eric\nech t\ndon tour\ndo illon\ncorn forth\ncomplement arity\nco drington\ncitywinery nyc\nch id\ncbs boston\ncaball ito\nbrown fields\nbriano driscoll\nbor dir\nblakk rasta\nbj t\nbio steel\nber tsch\nball point\navalon hollywood\narma geddon\nap atosaurus\nandy milonakis\nan jar\nalham bra\nal ising\nade deji\nac cultur\nabal os\nðŁĺĤ ðŁĺĦ\nðŁį IJ\nå Ķ\nन ह\nÙ İ\nÑĥ Ñģ\nzel dab\nzap atos\nzad ran\nza idan\nwubb zy\nwrays bury\nwolfies mom\nwie demann\nweare hiring\nwater course\nw tem\nvitamin water\nvaxx ers\nvander griff\nunfail ingly\ntun dras\ntri vera\ntoken pay\nthisi sanfield\nterrible towel\nsymbi ont\nsunset sunday\nstro mbo\nstra bis\nsome time\nsohail khan\nsmu sh\nski dder\nsi we\nshoes andcare\nsclero therapy\nscint illa\ns book\nruben diazjr\nrome e\nroisin murphy\nri singer\nresults with\nrestom od\nr si\npriest man\npre ll\npo es\nplate aus\nplan te\npi va\nperman ency\npastit sio\nparan al\noar fish\nnorthumb rian\nno en\nneil ston\nne mor\nnational walkoutday\nnational agday\nn power\nmyfox houston\nmelting pot\nmcal pin\nmarque elv\nm ggs\nlu co\nlive feed\nlinds borg\nlike fatherlike\nlid strom\nletsmakeit awkward\nleigh onsea\nkoreand rama\nkoll witz\nkitchen decor\nker naghan\nkappap hi\nkail as\njomalon elondon\njemi ma\ninst are\nik ha\nice bridge\nhrithi k\nhomen agem\nholy grail\nhockey day\nhenry danger\nhel lier\nhar av\ngroup ama\ngrote squely\ngroes beck\ngri ddled\ngreen smith\ngilli ard\ngi ggly\nghet tos\nghe gola\nfro gotd\nfraterni zing\nfor nature\nfil oli\nfb family\nfalcon ers\nentang led\nencu entr\nel p\ned fest\ndri g\ndoro thee\ndg trends\ndes lauriers\ndemp sie\ndeid rick\ndavematthews band\ncon tiki\ncomingof age\ncoming out\nchrisweid manufc\ncfc w\ncar vell\ncan tone\ncamden fringe\nc gk\nbull whip\nbu isson\nbro der\nbran scombe\nbel ang\nbeg int\nbe de\nar vato\nann one\nane williams\nandy priaulx\naly pse\nagerwal nidhhi\naf arm\nack worth\nabq topes\n.. ðŁĺİ\nðĿIJĦ ðĿIJ\në ģ\nঠ¼\nya ws\nx dr\nwork and\nwm of\nwern her\nvo to\nvel opark\nvaness am\nus ky\ntto vino\ntre ally\ntime and\nthr onged\nthe palace\nthe eric\ntex cellence\nsustran sscot\nsuperstar life\nsphin xes\nspeight stown\nsmur f\nsma sters\nsin uk\nsang i\nsan ni\nru sted\nru brik\nroger k\nrewar i\nrest lers\nrepar ative\nrajar am\npunc turing\npun go\npsy chol\nplagiar ised\nphytoph thora\nphoo ey\npeace ably\npan ax\npaleo diet\noni ght\non oa\noffici alle\no intments\nns ford\nno ell\nniku man\nni alla\nnag ambie\nnadin en\nmusic as\nmulti spectral\nmichael berry\nmetal smithing\nmelissa fumero\nmca chicago\nmax xie\nmax ene\nmaris sam\nmari oc\nmambo ibiza\nmam mu\nmac fellow\nma ww\nlou vre\nlat onia\nlar gest\nkor ah\nkin an\nkeri keri\nkeepit simple\nke tut\njun gen\njoom eara\nj pj\nit snick\nifam edia\nhoo gland\nho per\nhigh speed\nhealthe deng\nh Äģ\nguy sssss\nguy fawkes\ngru ss\ngop chairwoman\ngl ers\ngil strap\ngeneral issimo\nfutu ro\nfun sies\nforthe boys\nfo sse\nfivb grandprix\nfe dup\nfav ell\ney re\nexhor ting\nexcel ent\nelix irs\nel wha\nein mal\neh ret\ndulwich college\ndro zd\nder ide\nde mic\ndcy oung\ndanielj gillies\ncu la\ncorte ge\ncom unica\nch mp\ncanvas lms\ncant lie\nbutton willow\nbu low\nbirdwat chie\nat oning\nasi am\nas ki\napay ao\nanand an\nan amosa\nam ily\nalyciadeb namcarey\nale es\nah m\naction shot\na ung\nðŁĻĢðŁĻĢ ðŁĻĢ\nðŁĺ©ðŁĺ© ðŁĺ©ðŁĺ©ðŁĺ©\nðŁĶ´ @\nðŁĴ ¶\nìĥĿìĿ¼ ì¶ķíķĺ\nå ŀ\nൠĤ\nz aa\nyyj traffic\ny aaaaaaaa\nx sos\nworld boxing\nwill ink\nwest leigh\nvy se\nvs galang\nvichysso ise\nvic times\nvesti gial\nun raced\nul na\ntrifon ov\ntorture report\ntir so\nti j\nthul in\nthe deal\nth ach\ntaylor r\ntam aqua\nta rell\nta etiseo\nsun co\nsullen berger\nsug andha\nstu ka\nsteve woz\nsp aul\nsophi a\nsl b\nskidmore college\nshort coming\nshan ked\nsetag aya\nsere vi\nsand bars\nre purchased\nre publish\nram el\nque ally\npsycho drama\npremier boxing\nportsmouth news\npin kies\nphyton utrients\npen ile\not chouston\noj ala\nny mets\nnon white\nni a\nneuro ma\nmusik messe\nmu stan\nmsamber priley\nmiw band\nme ade\nmaravillo so\nmar um\nma kit\nm no\nlove twitter\nlm h\nlik ability\nles den\nkn apping\nkingsisland pr\nki ess\nki dron\nju ans\njam ala\njalo ta\njad yn\njab iru\nirish town\ninfiltr ates\nimmigr an\nih or\nhighland games\nher p\nhard scrabble\nhabit ability\nha gd\ngro ynes\ngreat news\ngra phology\nglit ching\nfraun hofer\nfoot long\nfolkl orist\nfo ire\nfernan dez\nfener o\nfe strail\nel mas\neileen fisher\ndolant win\ndiam antina\ndev days\ncur cuma\ncor tazar\nchri seriksen\nchand ana\ncha il\ncather iner\nbu tti\nbro g\nbro berg\nbosco bel\nbo dog\nblaz ey\nbestplace to\nbarist alife\nbar ata\nball ito\nbairro alto\nbai x\nasdfgh jk\nart fx\nanubhav sinha\nant lered\namo slee\naly th\nadministr ative\nad uri\nabove water\n(... )"\nðŁĸ¤ ðŁĴĻ\nðŁĶ¥ ðŁijĢ\në² Ī\næ ħ\n⾨ :\nà¸Ħว าม\nzul te\nyogaw ith\nye atman\ny ro\nx bt\nwomens rugby\nwet plate\nwes farmers\nwal gett\nvu ka\nvivam exico\nvarad arajan\nvalla dares\nup stair\nunder write\nun palatable\nuc merced\nu wi\ntwil d\nture brevi\ntri estina\nthe shoe\nte bbit\nta ac\nste ddy\nsr iti\nsony liv\nson iam\nsoli do\nsmar ti\nsmacc dub\nsi ron\nshe eler\nself harm\nse alth\nscrit turebrevi\nsar va\nsapp hic\nsa hur\nron din\nro anne\nris ner\nrie hl\nrec ant\nrct council\npur rp\nproxim ate\npost workout\nphylo genetics\nphotonic swest\nopol ice\nop ined\nnucle arenergy\nnh w\nnan jiani\nn itta\nmom an\nmaî tre\nmar ren\nman asa\nlumix uk\nlu pica\nlt ps\nliti gate\nlenny henry\nlam arche\nkol ha\nkin taro\nkilo watts\nkeen en\nk holi\njuju bee\njojosi wa\njan ma\njackson rathbone\nitv racing\nintu os\nimpe x\niifaut savam\nig bt\nhou tbay\nhe yl\nhass le\ngy rating\ngur don\ngro ome\ngre ns\ngoldcoast suns\nghou li\nfu gao\nfri gga\nfo go\nfamily life\nfactor ization\nex hume\nespe jo\nequi distant\neccentric ities\neb k\ne ha\ndunman way\ndo rel\ndharma puri\ndevelope ment\ndevel o\nde jean\ndating me\ncrop sey\ncorr ingham\ncord ner\ncoquet tish\ncoon skin\nconoc er\nconcert goers\ncolle tte\ncol ling\ncj fl\ncivit avecchia\nchri shol\ncherry belle\ncatechi sts\ncarol peletier\ncar ifta\nbrett kavanaugh\nbre cht\nbor inqu\nbol lington\nboden kirk\nbo sie\nblu st\nblack bird\nbattist elli\nbaser unning\nbad astronomer\nat aris\nandrewr sorkin\nallthings mayo\nair max\nad sby\nac tres\n] ]]\n! âĿ¤\nðŁĶ¹ #\nðŁĩ³ðŁĩ ¦\nìĭľ ìļ°\nì½ Ķ\n人渣åıįæ´¾èĩªæķij ç³»\nâĢ¢âĢ¢âĢ¢âĢ¢ âĢ¢\nzim cricke\nyuvan shankarraja\nye tt\ny entl\nworld market\nwill sasso\nwil shaw\nwhoare you\nwaters meet\nvit ry\nvac s\nv lb\nu hq\ntun khan\ntu sh\ntren tharmon\ntre ta\ntre law\ntranqu illo\ntoki doki\ntn r\ntichin aarnold\nther anch\nthe di\nter tulia\ntak aki\nstipul ations\nst mike\nspla yer\nsphoto grapher\nspeci osa\nsp offord\nsor b\nson tv\nso ichiro\nso dmg\nsn sd\nsmal en\nsic her\nshe believes\nshari ef\nsh anthi\nsalom ons\nsalam one\nrhein metall\nren sen\nregulat ory\nrc pch\nran dol\nran cocas\npower women\npapato etoe\noce and\nnothing to\nnomin ate\nnebu las\nmom an\nmish con\nmichael kiwanuka\nmelani stic\nme ddled\nmckin nie\nman sha\nmalte se\nm hy\nly ly\nly cia\nloveoz ya\nlma oooooooo\nle za\nlau ch\nla boe\nkyle hebert\nku cing\nkpop fanart\nkee so\nke ema\nkal uuya\njo d\njim ma\njb laudio\njau zofficial\nja ic\ninver kip\nintegr ative\nindi rty\nhypercholester olemia\nhoo m\nhertz berg\nherstmon ceux\nhelle borus\nhau ght\nh wee\ngrou lx\ngre gy\ngrazi ella\ngraphic art\ngo bruno\nglit tered\ngay ness\ngame tography\nga hhh\nfoot patrol\nfood processing\nflag stones\nfemme fatale\nfc bb\neun uchs\net cher\ner mac\ndynasty warriors\ndouble days\ndiaphrag matic\ndear rings\nco ing\nchou chou\ncho ksi\nchini ot\ncastle blayney\nbu cherer\nbrig man\nbridesma id\nbr aless\nbo tsford\nbo ffo\nbeth houf\nbeth behrs\nbbc thevoiceuk\nbaw l\nbase uk\nba sir\navoy ages\nassi me\nanimal league\namit ri\naffl icts\nad ded\nac yl\n.... .(\nðŁĺ» ðŁĺ½\nðŁĸ į\nðŁĴ« #\nðĿĻ ŀ\nâĿ£ï¸ı âĿ£ï¸ıâĿ£ï¸ı\nâĻ¥ \'\nâĻ Ĥ\nس ÙĬ\nz enda\nz ard\nwin ema\nwin drush\nwhites ands\nwest port\nwash stand\nwa haha\nvander cook\numen yi\nuc can\ntransport news\ntodayin moviehistory\ntod dr\nto kel\nterry androb\nswind led\nsw oll\nsuper jail\nsty mon\nstou dt\nstar power\nspir iting\nsol ares\nsmo kies\nskip ton\nsigni fier\nsi or\nsho lom\nshaw bury\nrtn ba\nren as\nre awakened\nrdeye girl\nranvir shorey\nrais ina\nra on\nquality assurance\nqu agli\nq pf\npy rac\npu sser\nprince charles\npra yuth\npower trains\nplagi arist\npar wan\npap uan\nout stripping\not itis\nor ugby\nopen cl\nol sen\nofficiale gl\no sus\no brador\nnstom ar\nnor bert\nnon compliance\nnic hole\nnat pe\nnam usic\nmy dream\nmv v\nmusketeer seurope\nmor u\nml rs\nmiy awaki\nmelissamc bride\nmd ant\nmc com\nmargotwall strom\nmace wen\nlondon artfair\nli bb\nlec ito\nle then\nlb ma\nksn news\nkr b\nkir choff\njoh ri\njay araman\njam ul\niz abela\ninter connected\ningrat itude\ninew snow\nik onic\nhy lan\nhouse breaking\nhard worker\nhan go\nha ston\ngo wild\nglo ves\ngie thoorn\nfried richs\nfreshman advice\nfootball news\nfetch am\nfau recia\nfarm boy\nfan chant\ney f\neric acampbell\nem me\neh sa\negoti sm\ndot tir\ndesign indaba\ndeep kaur\ncro ssett\ncps reds\ncou sens\ncosmic consciousness\ncon ine\ncleliam ussari\nchin ensis\nchee ch\nch iri\nch aco\ncast ler\ncare bears\ncap ella\nbusine ssi\nbrack ins\nbor ic\nbelle mare\nbeati fied\nbal ke\nbak re\nbad y\natta way\nastor ga\naspe cies\narsen ess\nari ff\nangel ito\namiz han\nafter image\nðŁĩ¬ðŁĩ§ ðŁĩºðŁĩ¸\nðĿĹ µ\nà¸Ńภ¥\nà¤Ń à¤Ĺ\nzy ı\nzaf ra\nyou thre\nx ux\nx team\nwhereyou live\nwex med\nwell l\nwalk highlands\nvla ams\nvienne tta\nuro logic\nune qually\nudemy coupon\nu gur\ntwitter takeover\ntrethe wey\ntre me\ntororo sso\nti sl\nthink like\nthe cab\nth feb\ntain ting\nspo hn\nspho enix\nsp cs\nsoup kitchen\nsnod land\nsmith h\nslo dge\nsin thenfl\nsi dor\nshoes ource\nseg mental\nsea weeds\nryth me\nrothschil ds\nrejuven ates\nredress al\nread yourworld\nre solve\nre med\nrandolph harris\nproprio direct\npoles itter\nplay style\npe ming\npdx music\npal aro\noz ora\noyin bo\noni official\nomnis cience\nnewcastle herald\nner diest\nnational parkcity\nn acre\nmin era\nmelani escro\nmam etz\nmagi stral\nlive better\nline age\nli even\nlau l\nlab one\nkentish town\nkas o\njal pa\niran air\ninter dental\ning time\nind welling\nimple menter\nheal ty\nham idou\nhachim an\ngraf ana\ngrab ner\nghm conline\nga un\nfre se\nfre enas\nfr yar\nfaw cett\nfaroo qui\nex hort\nespn seattle\nep aul\nent is\nennis more\nenf j\nenantio selective\ndisen franchise\ndik ko\ndevo to\ndev camp\ndes jar\ndaniel agger\ncran borne\ncon tends\ncob ley\nclun kers\ncincy childrens\nchrissy costanza\nce aser\ncau dwell\nbulgar iofficial\nbu har\nbu ettner\nbow ler\nboots riley\nbi aly\nbhi da\nbha sk\nbe zier\nbasse terre\nbac co\nas kia\naro adshow\nannex ing\nand ys\namar jeet\nam cor\nal stott\naj green\nagainst trump\nafri end\nðŁĽ Ģ\níģ¬ 리\nâľĬðŁı¾ âľĬðŁı¾\nâĸªï¸ı âĸªï¸ı\náµ į\nzen ko\nwriting prompts\nwowo win\nwood carver\nwon line\nwh ith\nweare james\nvs nyj\nvortic ity\nvhong x\nur sul\nuo chester\ntreasury mog\ntra kker\ntoad flax\ntivi dale\ntiki barber\ntick ner\nthe bull\nteil hard\nteam got\ntash ir\ntake control\nswee zy\nsurvivor cbs\nsur lerouge\nstra us\nstay ner\nso ad\nsilver point\nshor thai\nsho eracing\nscott mgi\nscottmgi mple\nschool pr\nsc sd\nsaw dust\nsafdar jung\nrugged maniac\nrudi ger\nri aan\nreal lisamarie\nre doubtable\nque rel\npul sen\npul po\nprocess o\npre mratandhan\nprag matist\npowder ham\npeplo e\npe ine\np kane\noul son\nop é\nones i\none fc\nno dy\nnishi oka\nnaves ink\nnationalschool walkout\nnar umi\nnan oro\nmusee orsay\nmont se\nmisez surlerouge\nmc tiernan\nmc elli\nmark azi\nman tou\nmal vina\nmaketheroad ny\nmah in\nluc re\nlon grich\nlegionof boom\nle zz\nlar wood\nkum in\nku so\nko diaq\nkey west\nkaz emi\nkatelyn tarver\nk ourt\njuli eg\njohn hurt\njason witten\njam my\njaars veld\ninfl ame\nii hm\nian ism\nhum buckers\nhon ble\nho ps\nhe dy\nhair and\ngy r\ngurum urthy\ngoal u\ngla ube\ngin acar\ngeo coding\ngator s\ng anim\nfre yr\nfotogra fi\nfotogra f\nfil des\nfam ines\nfac u\nextru ding\nevil queen\neve myles\neu mundi\nemis saries\nechofox gg\ndriving test\ndespon dency\ndec ile\nde dal\ndan ticat\ncran field\ncosmopolitan uk\ncc ts\ncare mark\ncall ington\nbur ley\nbu uuuu\nbreakfast show\nbig gardenbirdwatch\nbi ju\nberg sabc\nbb qing\nbacsin szky\nb ner\nb inning\nashley y\napp same\nannex es\nanat ol\nam bre\nal anal\nakint ola\nahe gao\naflat oxin\naf tv\nacade me\nabu dapest\nabi asi\nðŁij½ ðŁij½\nìľłëħ¸ ìľ¤íĺ¸\nâĿ¤ï¸ı ðŁĻıðŁı½\nâĵ ľ\nzimcricke tv\nye ssssssss\nye sh\nwinston churchill\nvirtu ality\nvap il\nur wa\nunra velled\numenyi ora\nul aris\nturn back\ntry somethingnew\ntou hy\ntimb ale\nthe adelaideoval\nthan q\ntaf fair\nta imur\nsu id\nsty gian\nstorm frank\nstoken ewington\nsquad up\nsocio cultural\nscott moir\nsaw ston\nsarkis sian\nsa kal\nrival sons\nri velin\nras berry\nrandomactsof kindnessday\nr mg\nquality control\nqu yen\npro foto\npri sa\nporsch esauce\npodu machi\npete dun\nper vez\npe ir\npave ment\npat cham\npasquale totaro\nparklife fest\nparas ke\nous sef\nni un\nnever be\nnam as\nna ston\nn intex\nmu kho\nmosi mann\nmodern home\nmis singh\nmis sel\nmenin black\nmeg son\nmc cs\nmaz el\nmanv sale\nmal achi\nmagnet ite\nmac cag\nlisar inna\nleh tinen\nl slofficial\nkill ingly\nken suke\nkat el\nkab al\njol yon\njen net\njack posobiec\nja yo\nj rees\niz ar\nisha an\niran elections\nhouse ch\nhou sings\nhol ls\nhealth workers\ngta vonline\ngreen eyes\ngover ner\ngok delivers\ngn cc\ngi meno\ngg ler\ngesh wari\ngene editing\ngay oom\ngar ment\ng anti\nfris bie\nfo ad\nfil mon\nfebbra io\nfam i\nfad den\nessence mag\ndu sek\ndread noughts\ndor ton\ndir rell\ndesp ising\ndaw on\ndamas o\ndam bro\ncumu lus\ncrop top\ncri ssy\ncre mate\ncontextu alize\ncoach b\nci ana\nchir ality\nchester fiel\nchar lotta\nch atime\ncag nes\ncab ourg\nbu tan\nbritish swimming\nbook bag\nbir bs\nbig bro\nbibliothe ca\nbc rich\nbate aux\nbaden horst\nba official\nb awi\naur icular\narbuth not\nap assion\nann unziata\nan ker\nalista iro\nali bhai\nale so\naj et\nahar u\nac ts\n. ,\n- ______\n+ £\nðŁĺĭ ðŁį´\nðŁĴĻ ðŁĴķ\nðŁıİ ï¸ı\nðŁį ¡\nðŁ¤® ðŁ¤®\næĸ°èģ ŀ\nâı º\nಠļ\nyouth power\nwick steed\nwest fiel\nwer un\nvincent price\nvani er\nuu uh\nug bu\nucc ello\nther ing\nthal afan\nth jan\ntele m\ntast ico\nsu kha\nstar day\nstand ridge\nst ello\nst austell\nsoun dre\nsou my\nsli berty\nsin isa\nshill ingford\nshe sh\nshak ila\nselet ar\nsecur itas\nschmel ing\nsau lo\nroger craigsmith\nri obamba\nrevi vals\nregal os\nreas ures\nrapha els\nq erim\npubli sh\npi got\nphi bes\npe muda\npavlo vian\npau lam\nover ran\nontari an\nof o\nocci dent\nny tt\nnintendo ds\nnewpor trfc\nneko atsume\nnd as\nmulti role\nmr cp\nmo preps\nmetaboli ze\nmeccan ica\nmccre esh\nmaterial design\nmaqu illa\nmad bum\nma bou\nm sleg\nlolli pop\nletoy aluckett\nleaf ing\nlady vols\nl dap\nkey dets\nkevin saunderson\nkesh et\nkentuc kiana\nkartika aryan\nkarak orum\nk sis\nk itting\njohn mellencamp\njo leon\njess ore\njay shree\nitstaylor yall\nis at\ninvulner able\ninoc ente\ningen io\ni ys\nhuman os\nhot ti\nhive mind\nhigh am\nhi fk\nhall er\ngo local\ngauth am\nfuture learn\nfun dingh\nfr n\nforthroad bridge\nfinn art\ner vices\ner obinson\nenthr onement\nent wick\nend om\nearth skyscience\ndug gee\ndrar aut\ndon thug\ndj mo\ndis aggregated\ndhy ana\ndhau la\ndemar ai\ndecep tions\ndayof giving\ndance wear\ncryp sis\ncommon ground\nco digo\ncity pgh\nchin cha\nchican ery\ncat ala\ncarolin amud\ncarolinamud cats\ncal ex\ncac ao\nc vw\nbulgar ians\nbrooke henderson\nbroad mead\nbois set\nblob fish\nbing aman\nbbc sportsound\nbau douin\nbal un\nba ws\nav aris\nauditi onees\nat vi\nat ena\naravindha sameth\narac ely\napol icy\nanthro pome\nandy mientus\nand all\nam blin\nagricul tura\nado or\nac nes\nabove ground\n# %\n! âļ¾ï¸ı\nðŁļ¨ðŁļ¨ ðŁļ¨ðŁļ¨ðŁļ¨\nðŁĺĺ "\nå µ\nâĪ ļ\nÅ ¾\ná e\nwustl med\nwil ken\nwel burn\nwal lowa\nvra iment\nvar num\nur j\num be\nturtlen ecks\ntrump budget\ntri pa\ntrape zius\ntingu ely\ntime splitters\nthisisd urham\nthe hip\nte sori\ntb sofficial\ntachi kawa\nsyn tactic\nsyn ge\nsweet land\nsu mon\nsten ting\nsober ly\nsi val\nshop if\nshields fc\nshield maiden\nseren issima\nseish un\nsecre tos\nsci acca\nscand y\nsa uro\ns diner\nron johnson\nrep kevin\nrear guard\nreal politik\npeter greste\npet ard\npamban sa\np mik\nosh park\noneoh trix\none ofus\nnx umalo\nnw l\nnorthant sccc\nno war\nno rell\nno ire\nni mble\nneg ley\nne sian\nmy nah\nmwa haha\nmusicis mylife\nmodern day\nmo zar\nmo har\nmlb pa\nmind q\nmic mac\nmf is\nmetho trexate\nmari ane\nm frost\nlen zie\nlari ver\nky lar\nkut ter\nknock aert\nki shin\nkak ai\nji ah\njel utong\nit carlow\niron monger\nil ga\niconocla sm\nhen ery\nhell spawn\nhaworth ia\nhar bi\nham bly\nhail u\ngyeong ju\ngra ef\ngoooooo ood\nfom ent\nfo glia\nfel ino\nfam oso\ney vind\nexorc ising\nepi thets\nelli son\nelectrocu ting\nelas mo\ne hehe\ndou rif\ndo xford\ndi bang\nde mentor\ncotedazur now\ncon rail\ncompar ator\ncolson whitehead\ncat alu\ncare en\ncamer ino\nbur se\nbry z\nbreit ner\nbledis lo\nbla ise\nbiome thane\nba iser\nb amp\naver il\nambassador power\nall mets\nal acrosse\nak utagawa\nabigail spencer\nab dn\n// :\nðŁĺłðŁĺł ðŁĺł\nðŁijijðŁijij ðŁijijðŁijij\nëĭ ĺ\næ£ ®\nâĿ ¦\nè dre\nyan u\nxma sparty\nx lu\nwy prk\nwg st\nwestern sydney\nwak ana\nw tam\nvizi anagaram\nvers ini\nvander waal\ntunkhan nock\ntoyn bee\ntie out\nte phra\nsy nucle\nsy mmes\nsun care\nsub in\nsub contracting\nstre ssed\nstopthe debttrap\nss w\nsper m\nspee die\nsoci ability\nsmall youtubers\nsm x\nskan sk\nsinu so\nshri mper\nsheff council\nseh ban\nsamaritan spurse\nsalish sea\nsal ted\ns jones\nrid out\nred bourn\nram shaw\npredic aments\npn pi\nplo ys\npitch forks\npet tai\npen ampang\npajar ito\notter burn\not ice\noro ss\none ills\nnieu wen\nmr b\nmo esha\nmmmm mmmm\nmat us\nma homie\nlouden swain\nlipo somal\nlal af\nlag ana\nla vette\nko bler\nking and\nkhay al\nkh ri\nkat wijk\nkai sen\njun ia\njelly man\njeff bullas\njash n\niri sd\ningh a\nhire me\nhey sel\nhelm sdale\nhake em\nhaber mas\nh ounding\ngregg rosenthal\ngary leff\ngarden centre\nfoto g\nforza italia\nfibro blast\nfell running\nfee ley\nfe k\neve of\nevangel inel\nero deo\ner tiga\nelo gic\nelly awards\nelef ther\neg shore\nedward tufte\necol lector\nebon ics\neast nor\ndungeon master\ndragon ite\ndig in\ndhol akia\ndev day\ndental hygiene\ndefro ster\ndataware house\ndam avand\ndal ers\ncu ppy\ncu entas\ncrew mate\ncolon ising\ncode foramerica\nclip stone\ncitiess ky\nci at\ncheese cake\ncdn crown\ncandel ario\nbunnic ula\nbron wyn\nbra edon\nboi leau\nban co\nbal alaika\nattic arace\natticarace wyprk\nary newsofficial\nangelsof fur\nand h\nan ick\namera action\nalli ums\nali assime\nac rif\nðŁĺĭ ðŁĺĤ\nðŁĺĤðŁĺĤ ðŁĺ©\nðŁĴľ âĿ¤\nðŁĴĻ ðŁĴĸ\nðŁ¤ĵ #\nëĿ¼ìĿ´ íĬ¸\nâĿ¤ï¸ı ðŁĺĩ\nâĨ ĺ\nÚ ¡\nwom e\nwc pd\nwall onne\nw le\nver ti\nvel ia\nv ung\nurdan eta\nun likeable\nu mia\ntur l\ntrail head\ntoyo tan\nthe oph\ntarot cards\ntanan lam\nsu hoday\nsteely dan\nst century\nsport sturf\nspin offs\nsphero id\nsper ry\nspartans will\nsmo yer\nsk j\nsion yc\nsch latter\nsat am\nsan jac\nroman ian\nreminiscen ces\nre animator\nraw ling\nra tho\npriyadar shan\nprabha karan\npo rec\npi tha\npeoplewhom ademy\npar minder\np liz\np ities\nonem illion\noff y\nnoril sk\nnor rington\nne tti\nne ma\nnav ys\nnational aviationday\nmcne aly\nmauriciom acri\nma ssing\nlittle dragon\nliss at\nlin go\nlead byexample\nle ix\nlar ia\nl bo\nko tha\nkho ya\nkhan om\nkaz en\nk radio\njyr ki\njuma anewilliams\njoe mantegna\nji v\nits ellacruz\nit trivedi\nipp olita\nic tsi\nhoch stein\nhipho pawards\ngrow ur\ngrac iosa\ngloom haven\ngag an\nfore seeing\nfi lets\nfeature less\nfa ial\neviltwin brewing\ner au\nei rene\nedge mere\ned surge\ne are\ndracon is\ndowntown ptbo\ndj clue\ndine o\ndem at\ndel tron\ndecrimin alized\ndante basco\ncrou ches\ncra shed\ncr inan\ncounter acts\ncontest able\ncnblue gt\ncitrul line\nchristo logy\nchris bosh\nchas ms\ncaring bah\ncar ll\nbur rage\nbru ticus\nboxer vijender\nbo water\nbo letus\nblack enterprise\nbi asi\nbear sden\nband ha\nbaby go\nb br\narvindg aur\narrivat w\nar asan\napic ulture\nant y\nali zafar\nali stas\nalex constancio\nal imi\najin omoto\nair fields\nacci on\nabar are\naar ohi\na preci\n... âłĢ\nðŁĺģ âľĮ\nðŁĺ½ ðŁĺ½\nðŁ¤£ðŁ¤£ðŁ¤£ðŁ¤£ ðŁ¤£ðŁ¤£\næŃ £\nãĤ¤ãĥ «\nãģ¨ ãģĨ\nyyyy yyyyyy\nwoo duk\nwi bowo\nwh on\nwarcraft movie\nvoter suppression\ntud denham\ntruck n\ntrav ails\ntom ska\ntimm is\nthe wiggles\nthe beauty\nterr r\ntal kis\nta ja\nstu l\nstar flyer\nstam u\nstalag mite\nst aley\nssi de\nss ongs\nsp ahr\nslow downs\nshil don\nshi rayuki\nsexu alised\nscul ly\nsch l\nsar re\nru pal\nrn zaf\nredhour ben\nrace ways\nra ichu\nqueen sof\nque te\npromo cional\npremi xed\npractic als\nplan ica\nph rom\nparadi so\np mt\nover stepped\nor loff\nnz ta\nna an\nmplo yers\nmosthandsome faces\nmo edas\nmis dproud\nmey cauayan\nmc vicker\nmatt kemp\nmak ura\nmagic ofthecup\nmaci ek\nlove actually\nlipo ic\nli mber\nlevi mitchell\nlake house\nla dan\nl bci\nkul in\nkor net\nknu x\nkentu ck\nkab inett\nka strup\njun hong\njone ss\nji yala\njak el\njaimie alexander\nj ats\nipp r\nin may\nin ji\nil ja\nic tafrica\nhy bpa\nhour fitness\nhoh mann\nhare woodhouse\nh lt\ngro win\ngramophon emag\ngraceand frankie\nglo ttis\ngigan det\ngic lée\nger ri\ngcse results\ngames aus\nga shes\nfunny pictures\nfron tieres\nfriday morning\nfo ard\nfit i\nfish mas\nfi stral\nfc zenit\nevent sin\nesp anya\nemporio armani\nel ene\ne comm\ndre mil\ndon no\ndof theweek\ndo ye\ndo che\ndh anya\ndela hunty\ndecarbon ization\ndd avis\ndcyoung fly\ncorruption case\ncommerce gov\nco darmy\nco creation\nchi d\ncf m\ncest lavie\nbritanni c\nbody suits\nboc cioni\nbe evers\nbe eni\nbbc shropshire\nbal aam\nbad stuber\naspr illa\narth us\nannam arie\nanimal liberation\nalistairo vereem\nab attle\nðŁĶ¸ ðŁĶ¹\nðŁĨĺ #\nç¾ İ\nwgn america\nwest van\nwad don\nwad den\nvrou wen\nvictor ial\nvaleri y\nvalen za\nv rush\nv inter\nun ti\nu hs\ntx ts\nttm success\ntre garon\ntre blinka\ntrain able\nthisisco ventry\nth acker\nt pv\nt pas\nsustainable finance\nstring band\nspen son\nsm day\nsk ole\nsham bhu\nsf ontein\nseong woo\nse sam\nscol ts\nsanc ta\nsa ire\nross marquand\nrenew timeless\nred hood\nramyak rishnan\nquadru ped\npubl ically\npra ya\npetro ssian\nperfu mer\np ccw\nourlandour news\nnwa as\nnor aen\nn anne\nmyk ki\nmykki blanco\nmusc led\nmorgan spurlock\nmonclo a\nmm une\nmiti e\nmichael h\nmichael b\nmetv batman\nmeer schaum\nmarcu scooks\nmarak wet\nm wbb\nlong niddry\nlive updates\nleader less\nlan phier\nl xc\nkup fer\nkre utz\nkev adamsss\nkarnataka world\nk pae\nju ku\nji ddu\njday golf\njan ka\nj ies\nhye res\nhu sni\nhollow knight\nho yne\nhead house\nhar laxton\ngym wear\ngul ates\ngroom bridge\nglobal britain\ngh ita\ngere ja\ngeophy sicist\ngeno ise\nexop lane\neco sphere\nearly learning\ndre we\ndirec tness\ndigit als\ndenti stry\ndell matchplay\ndark skies\ncv payne\ncounter tenor\ncoun tri\ncostume design\nconst ancy\ncn try\ncityo fatlanta\nchukw uma\ncheshire police\ncele stino\ncar freeday\ncad dick\nc dos\nbul losa\nbravo andy\nbramb illa\nboz os\nbosw ellia\nborough fc\nboad icea\nbo soms\nbiz boost\nbau hin\nba ars\nb sl\navi dson\nau glaize\nattend ance\nasdru bal\nar ar\napar napkin\nap enn\nall ornothing\nair plan\nafl ori\nadi m\nab last\naaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa\n:) âĻ¥\nðŁĺį ðŁijĮðŁı¼\nðŁijĮ "\nðŁIJ° ðŁIJ°ðŁIJ°\nав ÑĤ\nî t\nz ior\nyon ex\nyo ver\nyestur day\nwun sch\nwon o\nwl bz\nweb casts\nwarner music\nwar re\nwale ed\nwag i\nvesp asian\nveliyi dai\nvar roa\ntro ilus\ntraffic scotland\ntmc lebanon\ntla que\nthis ssss\ntenov usc\ntar nishing\nstu dly\nstar tet\nsleigh s\nsilk wood\nsil ves\nshiv puri\nscr unch\ns va\nrealbobby roode\nreal sarathkumar\nrd mas\nrace for\nr ci\npride fest\npodumachi goalu\npo theads\npnpi fugao\nplay backs\nplane tor\npatr onal\nparty yy\npale tta\np ssi\nos sett\noce ph\nneopla sms\nna ic\nn dy\nmut tered\nmorri ston\nmin cha\nmi igwe\nmh day\nmen ai\nmang ler\nmah mu\nmadri distas\nma ham\nlittle port\nkha pa\nkaz aam\njis r\njimmy bullard\njen ners\njan ia\njagann atha\nin cs\nil ir\niklan barison\nike auk\ni ak\nhypere mesis\nhu maim\nhotel belair\nhot chner\nhiphop history\nhijab day\nhepat ica\nharvey fierstein\nhampton court\nhammer down\nhabit ants\nh nn\ngrand hotel\ngra eae\ngr ing\nger rish\ngab onese\nfur freefriday\nfss ai\nfolk song\nfo amped\nfil mc\nfdm group\nfaw zi\nes wari\ned leaders\ndutch bros\ndis contents\ndescu bre\nder abad\ndepresse dd\ndat ass\nda et\ncysyll te\ncraig lockhart\ncot ter\ncom ba\ncoast walk\nchis um\nchees elo\nchaf in\ncha sti\nbus er\nbroad institute\nbre snan\nbon nici\nbol año\nbo vines\nbledislo ecup\nbl ang\nbharat natyam\nben it\nbeabin ene\nbar bato\nasi onal\nareth usa\nar tos\nallgä u\nag p\nacu ba\n* ----\nðŁĺį ðŁĻĬ\nðŁIJ¶ :\nðŁį ¶\nìłľ ëĭĪ\nâĢĶâĢĶâĢĶâĢĶ âĢĶ\ná Ĵ\nਠķ\nzay ousaf\nyouth month\nyoun kers\ny po\ny enko\nx liii\nwigw ams\nwal nu\nwa aaa\nviaduc ts\nverkho vna\nun principled\ntypo logies\ntor telli\ntin d\nthere stless\nthecottag eneedle\nthe aus\ntem pu\ntaye diggs\ntam ana\ntake five\nstry pes\nstra ddled\nste geman\nst chat\nspringer nature\nsper mato\nspeed weeks\nsk otti\nshu gart\nsfor good\nsehban azim\nscoti abank\nsch an\nscal pels\nsc id\nsas c\nsaf c\ns music\nru pauls\nrestor an\nrazor bill\nr mef\npurch asable\npu cker\npoly hedral\npimi enta\npen arth\npaul smith\nparachu ted\npaci fics\npa wel\nov hd\noutd channel\nop tout\no ep\nnovel isation\nnorth fork\nnoraen pure\nnicholas sparks\nnevel son\nnay sayer\nmoney talks\nmi mir\nmegal o\nmaz da\nmarke tability\nlooking ood\nlondon grammar\nlland y\nlike that\nlef son\nla gta\nl les\nkorbolorbo jeetbo\nkho isan\nkam andi\njettison ed\njefferson ian\nittake s\nitso knotto\nisth mian\nim cc\nidec tomy\nid sa\nhoo vering\nhitch hiked\nher rings\nhealth ug\nhand cut\nhan ap\nhammer ton\nh ph\nh kr\ngujaratt ourism\ngre u\ngla uber\ngho sh\ngar madon\nfuture past\nflo ve\nfleet week\nfire bombing\nene mas\nen ow\nele men\neg eland\ned wi\neast ney\neast dulwich\ndrag ana\ndj mustard\ndeep am\nd ın\ncre ag\ncor owa\nchuck comeau\nchop shop\nchloe fashion\ncatal pa\ncas a\ncal ac\nbun tin\nbree zed\nboho jewelry\nboer sma\nbl ine\nbig gies\nbi joy\nbelen enses\nbat themusical\nbar ito\nballa gha\nbal ala\nasu ppor\narbor io\nano les\nannalyn ne\name dia\nambl yo\namazon primeday\nallegh eny\nall mendinger\nall black\naaf london\n:\' )))\nĪ :\nðŁĺĪ ðŁĺĪðŁĺĪðŁĺĪ\nðŁĮ ©ï¸ı\në³ µ\nåº ĥ\nâĻ« âĻ©\nyork cityfc\nyemi aladee\nx au\nwiv pak\nwin ward\nwilli ford\nwhiti anga\nwee ping\nwarriors ground\nver sus\nv ly\nup votes\ntra verses\ntown head\ntour ne\ntop up\nti money\ntho ver\nthewe bbyawards\ntheatre works\nthau sen\ntb ath\ntaxi ed\nstate ivlp\nspring fashion\nspeed ed\nsocial mobility\nslur pees\nsi regar\nshiv angi\nshawne merriman\nsepan x\nsch aut\nsat ar\nsand strom\nsan bernadino\nrose bruford\nri bisi\nrhetor ics\nretail therapy\nrequ ena\nrelax in\nraji b\npreten sions\npre ponder\npois oner\npis mo\npen tire\npar olin\np crg\nony m\noffer tory\node tta\nob ando\nnot chback\nnormali zes\nnorfolk county\nnkn kk\nneph rectomy\nmymorning jacket\nmirpur khas\nmani than\nmal indo\nliber ato\nleeu win\nlater alus\nlar ries\nkirk up\nkinder garden\nkhawar ij\nker kyra\nk rac\njuli ana\njone z\njax jones\njaket austin\nitsti meto\nis thebest\ningh all\nine ssa\nin oo\nilli gan\nii ia\ni fr\nhood wink\nhide outs\nhel enium\nheck uva\nhealth summit\nhand saw\ngene v\ngan tries\nga ily\nful kerson\nfro llo\nfor goes\nfor ages\nflic omovies\nfirst love\nfeder man\nfc groningen\nfarmers guardian\neru dition\nels mann\nel wick\neichel berger\ne online\ndrawing aday\ndot day\ndock weiler\ndit v\ndak en\ndah le\ncy farth\ncomhghair deas\ncom hal\ncataly se\ncaer laverock\nbottom sup\nbobble head\nbo hot\nbir gitte\nbien al\nawe bb\navon dale\narte san\narra ial\nar bel\nandrew mcmahon\nan tron\nan el\nal let\nai zu\nad mir\nad av\nab ao\nðŁĺĶ ðŁĺ¢\nðŁĺĪ ðŁĺĤ\nðŁİ¬ ðŁİ¬\nëįĶ ìĩ¼\nåĩºæ¼ Ķ\nãĢ Ī\nzim toti\ny cp\nwood burning\nwho weare\nwaller racing\nvijay goelbjp\nvalle es\nusab mnt\nuniversit elaval\nultra wide\nttan dem\ntranslu cency\ntori bio\nto phobia\ntist mgmt\nthen ana\nthecalm zone\nthe guy\nthe chri\nter ming\nten napel\nteam sesh\ntai b\nsve ti\nsur u\nsugar daddy\nsteel making\nsta ver\nshirt friday\nship week\nshaw ns\nsel v\nsalondu bourget\nsa kari\nrunning man\nro fe\nrevolu t\nregg ina\nrecon dite\nrc vd\nrav allo\npr ar\npoly morph\npolar plunge\npla intext\npi shin\npeter ose\npen ola\np lit\noro sso\none music\noff white\nny penn\nno tion\nne jad\nnc soft\nmusic mondays\nmoet blindcat\nmid sized\nmi rian\nmer cure\nmcgiv ney\nmb lue\nman ka\nmake music\nmait lis\nm ó\nly cée\nluci dum\nlu minor\nlo pes\nline less\nlarry blustein\nlab neh\nla galaxy\nl tf\nkur une\nkrat on\nkra it\nkos gei\nkno we\nking angi\nkil lester\nkaw agoe\njungfrau region\njon culshaw\njoe walsh\njin soul\njennie garth\nj érôme\nirk some\nic in\nhuman ization\nhu mph\nhoge school\nherom anoj\nhe mam\nhan sal\nha wala\nha voline\ngz chef\ngreat fashionfinds\nglo scathedral\ngetting married\nge tenough\nfundra ising\nfree h\nevent inglive\nescal era\neri eotters\ndul cinea\ndor bz\ndong daemun\ndemago gues\ndemago guery\ndallas lovefield\nda ai\ncrunch ies\nconservator ship\nco ple\ncla es\ncees ay\nbur kle\nbur kitt\nbig pond\nbi mb\nbell one\nbeer bods\nbe ghe\nbaltimore county\nbackward ness\nat le\nascle pius\nas ger\nangel olsen\nanc re\nallo ween\nai h\nace attorney\n! )\nðŁĴķ ðŁijŃ\nçŁ ¥\nر د\ná ras\nzoo svictoria\nzo ster\nye she\nwest la\nwest elm\nwelove shilpashinde\nvol vulus\nvick erman\nur ge\nun modified\ntwit ts\ntweetad run\ntu bac\ntrac coon\nto kill\nthegold bergsabc\ntar oko\ntan x\ntal ton\nsummerof love\nspo oling\nso ss\nsilver stream\nshari fah\nrosen dahl\nroman jancic\nre ste\nraphaels barge\nq k\npur merend\npublic protector\nprivacy matters\npo ggi\nphant asma\npe eth\npadilla bela\not acon\nolympic park\nolu femi\nol ap\nojh lofficial\nness on\nnam eh\nn cart\nmutual fund\nmo sso\nmitsu ko\nmissing people\nmemo irist\nman ick\nmagne tometer\nmag ination\nlive ira\nlets do\nleather craft\nl enti\nkumb hal\nkon yaspor\nking span\nkay lyn\njon lovett\njoer ger\njanee spenson\niso ara\nis k\niq ra\ning re\nin coherence\nhoshi arpur\nhorror fans\nhomoe opathic\nhen rys\nha val\ngul ley\ngre ferendum\ngrace less\ngrace e\ngra spop\ngirlsnot brides\nger main\nfro mt\nfr wy\nfoodand cosplay\nfiel dy\nfa hn\nend ro\nelvis duran\ndraw dinovember\ndouble think\ndo sen\ndl hughley\ndeline ate\ndef ene\nde sam\ndavi dre\nd top\ncus rise\ncounty sheriff\ncor ts\ncor sican\ncongradu lations\ncon ch\ncollo ids\ncol lon\nco soc\ncleveland artmuseum\ncircum polar\nchy pre\nchris martin\ncherly chibi\nchan in\ncartm ell\ncar hop\ncanvas print\nbra es\nbobm ckenzie\nbob marley\nbe ville\nbaby animals\nbab ic\naw ade\nau byn\narm let\nar dyn\nal tc\n?! ?!"\nðŁĶ¥ ðŁĺĪ\nðŁĴķ ðŁĴĻ\nðŁijĮðŁı¼ ðŁijĮðŁı¼ðŁijĮðŁı¼\nðŁıįï¸ı ðŁıİï¸ı\né¾ į\nâĢ ķ\ná´ ı\nxy mox\nx lk\nwood smen\nwi fu\nvis ity\nvel vets\nvallab h\nvalent a\nv pm\ntwit pics\ntut ti\nthe sheep\nthe edge\ntand ing\nstur div\nstan stead\nss wans\nsouthern california\nsouth point\nsil ento\nshinse gae\nshen yue\nsa che\ns but\nryu jin\nrivu let\nripon cathedral\nrep lika\nrel ph\nred mill\nrc cs\nqu ast\nq wp\npro ffer\npreston steve\npr yer\npower grid\npostu late\nporto fla\npo styour\npo ble\npend rive\npal oo\nover staying\nosteo spermum\nnon smoker\nno son\nnithyam enen\nnick diaz\nnew chapter\nnav aho\nmoz con\nmortal instruments\nmongo loid\nmini mathur\nmene my\nmemori alizes\nmc cu\nmax lucado\nma sai\nlow carbon\nlong more\nl vac\nkonta veit\nkenny g\nkawar than\njanet varney\ninter gender\ninstagram mable\ninge agles\nine ducation\nhebrew u\nheat culture\nharde eville\nhar tal\nhack tivism\nhaber dasher\ngreen book\ngran at\ngom avs\nglend ening\nfree from\nfoto speed\nfh g\nffbe ww\nfe iner\nen dia\nela sto\nef eld\nedexcel maths\nea ina\nduba it\ndu gin\ndiferen cia\ndic ted\ndec icco\ndance hall\ncé cile\ncuyam aca\ncu bi\ncru achan\ncorri eri\ncom ent\nco enen\nchen kova\ncay de\nby all\nbur ro\nbron son\nblue october\nbis leri\nbirdof prey\nbio steel\nbil kent\nbad er\nau sk\nast ellas\nasian art\nasi r\nas aa\napp ended\nandyburnham gm\nan diamo\nall ard\nale urope\nalbic ans\nafternoon express\nab ms\nab arab\nðŁĺµ ðŁĺµðŁĺµ\nðŁijıðŁijıðŁijıðŁijı ðŁijıðŁijıðŁijıðŁijı\níĦ °\në² Ħë\nÙħÛĮ Úº\nØ µ\n|âĹ Ĺ\nzumi ez\nzu elo\nzin aida\nyuki hiro\nyu qi\nyajam ana\nwood in\nwinthe dark\nwave music\nvon leh\nvar de\nv ram\nuw sp\nun thinking\nun defeat\ntram el\ntrack less\ntlaque paque\ntion ately\nthreeday sgrace\nthedukeof york\ntheater shooting\ntex ter\ntahqu itz\nsylve stris\nsustainab lec\nspir alled\nsock game\nso di\nsk imp\nsi ii\nshot ley\nshor ta\nsh games\nseal skin\nsco d\nsap hire\nsant inof\nsam us\nsad vocacy\nry sz\nry hope\nrela yed\nred point\nray hudson\nrainbow fish\nra gg\nq x\npu zha\npr ange\npo ile\nple ssy\nplay it\npenn sville\npen nin\npar ijat\np ts\nosu wexmed\nom ed\nole v\nol faction\nodd balls\nobli vi\noak engates\nnoo tka\nnnnn nnn\nnewh ope\nnar da\nmort decai\nmor sy\nmor rice\nmoney inthe\nmer ca\nmelaniescro fano\nme rec\nmawdd ach\nmat ley\nmasji ds\nmary ann\nmanik andan\nm pho\nlou l\nlitt let\nlegally blonde\nlangu r\nlam acq\nkri pa\nkount ze\nkk as\nkem merer\nkel sen\nkc mo\nka ichi\njudge ship\njo sse\njame shet\nir ally\niphonex smax\nio hk\ninconspic uously\nhum zayousaf\nhelp us\nhe tch\nhadley wickham\ngold mark\ngo iter\nglobal music\ngh um\ngau din\nfro de\nfor me\nfioren tini\nfastn loud\nfa im\nee ight\ndine sen\ndi emon\ndefibrill ation\nde vis\ndare rising\nd pu\ncwre ign\ncurb you\ncroco dile\ncounter insurgency\ncocoro cha\nchuk chi\nchil cotin\ncf cs\nce berano\ncarb ines\ncar dew\ncaptain hook\nbuck tail\nbro se\nbre gat\nbra sch\nblue day\nberlin ers\nbene field\nbar mby\nascri bed\narnold sports\nar rings\nangou leme\nandy c\namo sun\naman zimtoti\nal britton\naj la\nadair sville\nacre ative\na beach\n_ <\n. *\nðŁĴģ ðŁĴķ\nåĵ ¡\nà¸Ħ à¸Ļà¸\nzamalek sc\nyearend sale\nx vid\nworld populationday\nwhi story\nwen z\nwe got\nwatkin sville\nwak awaka\nvotol atino\nvenew shoes\nve iga\nv amovie\nuk baseball\nud murt\ntw ane\ntre sor\nthen ff\nthe writer\nthe andy\nten ille\ntechno gym\ntag oe\nsun ne\nstu bai\nsto ically\nsquig gly\nspreck els\nspeech writing\nspayand neuter\nshon ours\nsharman joshi\nsemic ircle\nseed and\nscre es\nscott stapp\nschool sweek\nrow ley\nring side\nreli e\nrelent les\nrb cs\nrand olf\nquercu sbooks\npublic history\npu tte\nproudly southafrican\npol lin\npod genie\npli moth\nphy no\noligo poly\noil price\nof qual\nnick swisher\nne vik\nnay ana\nmis si\nmichaelberry sho\nmccul ley\nmap ada\nman ische\nman er\nmai er\nmagin ot\nmag das\nlun ney\nli zation\nli ong\nlewis and\nlen sed\nle hrman\nle fort\nkurune gala\nkof u\nker lin\nken ingau\nkar ap\njusti fied\njhope day\njay co\nir ama\ninfra sound\nimpact live\nilli p\ni spo\nhumaim amalick\nhei ji\nhahaha aa\nhage mann\nh unie\nguys borough\ngreenvill enews\ngodre j\ngen tiana\ngautamrode team\ng burg\nfriday flashback\nfranken heimer\nfo ibles\nfemto second\nesche ws\nepoch times\nek hu\nei en\ndos box\ndisney d\ndiar yo\ndi methyl\ndeep ellum\ndebla sionyc\ndebat er\ndar kangel\ndar cis\ndan dekar\ndan abrams\nda hir\ncull in\ncri velli\ncour cy\ncor tel\nchrisley knowsbest\nce dro\ncatter all\nbrad burn\nbol dinsider\nbigbrother ca\nbic ameral\nben tiu\nbeforeyou exit\nb fly\nb alian\narmy tage\narjun official\nanyan wu\nameli o\nalo vely\nak arjunofficial\naj pur\nah w\nacon cert\naadhi official\nðŁļ¶ âĢįâĻĢï¸ı\nðŁĴĻðŁĴļ ðŁĴĽ\nåĥ ı\nâĹķ )\nà®İ ன\nyu ill\nyha official\nwimbledon final\nwc ba\nwater logging\nvo lim\nvampire academy\nuru zgan\nun drip\nthum or\nsuppos itories\nstopthe violence\nstarwar sep\nspe ttac\nspati o\nspace shuttle\nsono ita\nsomo sporto\nso hyun\nsneaker snstuff\nslee man\nsko vic\nsin spired\nsil vassa\nsi vers\nshowaddy waddy\nsh ingen\nsen ri\nsco tathletics\nru cian\nresearch impac\nrealjoey b\nre ema\nre ath\nralph macchio\nrail head\npre ller\npre ggers\npottawat omie\npick oftheweek\npeter sson\npas es\nparis motorshow\nover time\nogo pogo\nnw lc\nni da\nnau i\nmsf tedu\nmr g\nmorethan agame\nmic i\nmccor mack\nmath letes\nmarriage equ\nlur kin\nlove bts\nlook good\nlo ben\nliversi dge\nline arly\nle eu\nlamar re\nkre we\nkop ing\nko gi\nkn abe\nkhu tba\nken nys\nkas sab\nk vapil\nk rates\njoel creasey\nji ocinema\ninv ar\nintu itive\ninad missible\nimpregn ates\nilo gical\niced tea\niam abotanist\nholiday home\nho de\nhard tail\ngun barrel\ngreen music\ngre vy\ngoooo o\ngas cony\nflix bus\nfatin sl\nfar uq\nevi leye\nesz ter\nent eng\nenni stymon\nel itch\ndre ier\ndranath tagore\ndo ddington\ndisdain ful\ndigitali sierung\ndi af\ndest iney\ndel sin\nde itsch\nde code\ndata storage\nd pb\ncor dle\ncongression al\ncon script\ncommunity shield\ncommis so\nclo t\nbud worth\nbor ovets\nbook sin\nblue throat\nblackwomen didthat\nbir atnagar\nbernar dsville\nber chem\nbeau chemin\nbe ppu\nbatmanvs superman\nbaseball canada\nbackthe pack\nback tracked\nba ard\nannamari abiasi\nangel alan\nan iche\name v\nambigu ities\nalek sei\nakar ni\nahs freakshow\nah ack\nacar thy\n_ ^\n[ +]\nðŁĵļðŁĵļ ðŁĵļ\nðŁijĢðŁijĢ ðŁijĢðŁijĢ\nðŁ¤£ðŁ¤£ ðŁ¤£\në¡ľ ìłľ\nâĺĨâĺĨ âĺĨâĺĨâĺĨ\nâĢ¦ âĢ¦..\nâĢ¢Ì ģ)\nyouare loved\nye ds\nx pl\nwr oughton\nwaiting for\nw luk\nvic h\nval halla\nv tv\nusopen cup\nun sorted\nuk volkswagen\nturbo chargers\ntrout dale\nton na\nto cco\ntimo thee\nthe bone\nteam ceec\nsuj atha\nsto renvy\nstje pan\nsti pes\nsteen burgen\nstay gold\nssa ints\nsou tar\nsno whour\nsm sp\nsli ghted\nskotti eyoung\nshe sa\nsha ab\nseo inguk\nseab ikes\nse yi\nscreen sho\nsant elli\nsagrad afamilia\nsabhar wal\nros set\nregre ssions\nproto star\npricewaterhouse coopers\npho bla\npele liu\npegas i\nparathy ro\noo hhh\nong ata\noneon one\noli fants\nnkem diche\nneed leman\nmy writings\nmy my\nms b\nmr inal\nmou f\nmolly mauk\nmmun ol\nmirren fc\nmin ichiello\nmilit are\nmic cosu\nmetro tech\nmeridi ana\nmee ce\nmedi ations\nmead er\nmanu ka\nmaith ili\nmaccab iah\nluch alibre\nlaurel schuett\nlam lash\nl ri\nkripp arrian\nkore aboo\nkl n\nke phart\nkang an\njazz dotorg\njay r\njam mer\nhoch schule\nheure use\nheadline pg\nhar mos\ngre edy\ngott aget\ngo bowling\ngeode sy\ngam mas\nga ited\nfrontiers man\nfish back\nfair brother\neval yn\neuro bond\nesch aton\nemal ick\nel via\nehr mann\ned fu\nec le\near gasm\ndimetro don\ncrimesof grindelwald\ncoyo tes\nco zi\nchuck y\nchar ing\ncat ul\nby rum\nbuzz kill\nbran te\nbowhun ter\nbor ton\nblack owned\nbe urope\nba sim\nba ic\natic i\nate en\nassoci ati\narchit rave\naracelyar ambula\nappar at\nankylo saurus\namar sh\nam rish\nall ari\nal tin\nal thorp\nair train\nðŁĺįðŁĺįðŁĺį @\nðŁİĤ ðŁİīðŁİģ\nðŁ¤ŀ ðŁı¾\nâĺº #\nà° ®\nÄį a\nzen imax\nyl en\nwith thebest\nwh ood\nwest de\nwego tem\nweb apps\nwal czak\nw mw\nut martin\nunder desk\nun does\nug al\nu bp\ntweetapictureof your\ntun ning\ntsn bobmckenzie\nto ji\nthe blue\ntender loins\nten ures\nteitel baum\nsug awara\nstreat ley\nstrabis mus\nstr yn\nsquee zy\nspec tre\nsp afford\nsouth afric\nslay age\nsil kin\nsie ben\nsi sse\nsars gaard\nrule set\nro eper\nrich wood\nread yyyy\nre ges\nraw materials\nram bis\nral f\nrac q\npra dy\npp cli\npon yo\nphilosophi zing\nphil by\nph ron\npeter hickman\npetedun ney\npetedunney xb\npend ers\np ée\no herty\nnott ur\nnic ee\nnh week\nner vou\nn br\nmou l\nmelo che\nmcgu ckin\nmat tre\nmarie fre\nmar sone\nmal practices\nlucas digrassi\nlightning network\nleg ged\nleg are\nla reunion\nl bh\nkol ton\nknotts berryfarm\nkeepingit real\nkai sha\njoin me\njo of\njam tour\nja ia\nj collins\niwak uni\nish peming\nis af\ninvision app\ninfe stations\nhuy ghe\nhome inspection\nheil tsuk\nhat te\ngreatyork show\ngre sini\ngram marian\ngor os\ngood karma\ngolden child\ngoeth als\ngerman e\ngarrin cha\nfu jit\nfor tb\nfla vian\nfine ssed\nfair funding\nf ng\ney non\ner hu\neconomic growth\ne he\ndive sted\ndinner tonight\ndia thecat\ndd ya\ndas u\ncultiv ate\ncom ox\ncollege colors\ncnc pts\nclean in\nclaw diathecat\nchekkachi van\ncelest ite\ncan tal\nc engage\nbull fights\nbuck lin\nbronco sports\nbot ello\nbird softwitter\nbe hr\nbasile us\nb nu\nazu buike\nay al\naw con\naviation geek\nathletics weekly\nashken azy\narro wheads\nar bon\nar boleda\nar bogast\nam artinez\nam ap\nalu so\nalten ango\nallo graft\nal bie\naege an\nadmoni shes\n( ãĥ»\nðŁĺĦ ðŁĴķ\nðŁĺĤ ðŁĺħ\nðŁĺĢ )\nðŁĶĶ ðŁĶĶ\nम न\nÏĦ he\nworld liness\nwinnie harlow\nwence sla\nwar ga\nwall aroo\nvote anc\nvogue uk\nvery play\nun ar\ntoile tek\nthenu mbers\ntell er\ntan on\nsuper ba\nstruc tur\nstrength and\nspar khill\nsoular tistmgmt\nsitu ate\nsi ón\nsheep ish\nsexu alization\nsen thomtillis\nsecondary schoolmemories\nseam ers\nse dimen\nschoo ley\nsan key\ns faf\ns atti\nre zo\nre ig\nre affirmation\nrain sy\nrail fans\nqual itye\npu rie\nprinze ssin\npre peration\nplow shares\npla ited\nping ame\npeñ arol\nperipate tic\npenalty rates\npart yof\npa olog\northope dist\norang eroom\nod nb\no va\nntv newsnl\nnin aag\nninaag dal\nni eva\nncaaw bb\nna or\nmy phone\nmulti hull\nmudge er\nmosqu ito\nmiguel ferrer\nmack trucks\nmacart ney\nma belle\nliss itzky\nligab bva\nlife changing\nlazare tto\nlaw fare\nland side\nla ppy\nko chs\nknight swood\nkisar agi\nketu rah\nka tho\nju by\njosh devin\njoshdevin edrums\njack hammers\nja ise\ninvest ec\ninfection control\nindie pub\ni kut\nhydroly sis\nhu tz\nhot and\nhen ni\ngu mmed\ngoo b\ngo flyers\ngior gione\ngeo scientists\nfu sz\nflat ted\nfiest y\nfer us\nfar th\nfai roz\nexcep tion\nent rop\nembal se\nelfon ashelf\nef w\nec cs\ndigger land\ndiffu ses\ndes sel\ndeal sof\nde dic\ncá ceres\ncyber ark\ncultu red\ncryp topsy\nconsu elos\ncomi furo\ncobal amin\nclari dge\ncarden ales\ncallip ers\ncallacu tieout\nca ireland\nc xl\nc tid\nbru cker\nbroken lizard\nbofam l\nbb ck\nbb capprentice\nband la\nban erji\nay han\navalan che\nase va\nas ato\nartificial inteligence\narmedforce s\narant xa\narad hana\nar j\nanton opoulos\nanor th\nallu re\nadidas soccer\nðŁĺ« ðŁĺį\nðŁĴµðŁĴµ ðŁĴµðŁĴµ\níķĺ ìĦ±ìļ´\nâĿĦï¸ı âĽĦï¸ı\n⬠ľï¸ı\nоР±\nyu rio\nys by\ny ili\ny ates\nxbox uk\nwil ts\nwe tan\nway lon\nwat to\nvoel ker\nutt ley\nuncas ville\ntum se\ntu dy\nto hono\nthe pioneerwoman\nthe misfits\nth ag\ntaw fik\nt town\nt for\nsuit elife\nst leonards\nss mh\nsports radio\nsonequ amg\nsol ons\nsen ility\nsen ado\nse dinburgh\nsalv aje\nsaint es\ns belike\nrol fing\nright towork\nreo speedwagon\nra bs\nr hh\nquik pro\nqantas airways\npo sed\nplom acy\npinto fotografÃŃa\npin ault\npav lovsk\npatag oni\npan starrs\nos garage\noc d\nnue stra\nnj sp\nnaci miento\nn ack\nmu thi\nmu ling\nmoyamee haa\nmotor car\nmoth balled\nmortgage broker\nmohand as\nming tsai\nmidnap ore\nment zer\nmegan amram\nmaneuver able\nman none\nmal ing\nlu ddy\nlex xx\nlat ers\nlaff an\nla famili\nkwes é\nkilling me\nkeep corbyn\nkat anas\nkam bi\njay wick\nitsagreat day\nis bt\nis awa\nili festyle\niconocla sts\nic osmetics\nho ak\nhe med\ngri ppy\ngil kes\nfried chicken\nfol x\nfle urie\nfive guys\nfaun af\nf pc\nf out\ner bb\ner anow\nemo cracy\ned an\ne ji\ndu cote\ndo oling\ndiscover overberg\ndigit alliteracy\ndi eta\ndelta state\ndean morgan\ndari ya\ncr ys\ncou lsdon\nconsu mp\ncon signer\nco vin\ncart land\ncakeboss buddy\nbu hari\nbtsloveyourself tour\nbru hl\nblood stain\nbill browder\nbell x\nawar ner\nas pher\nas ghar\nart daily\nargan oil\nar kush\napu lian\napol it\nanz alone\nandre ak\nan sk\nan lonsdale\nalzheimers disease\nalex honnold\nal can\naf phq\naf fine\naci ar\naccu satory\n____ ___\n! ðŁĻĪ\n! ðŁĺħ\nðŁĻĮðŁı½ ðŁĻĮðŁı½\nðŁĺĵ ðŁĺĵðŁĺĵ\nìļ ´\nìĹ ´\nâļªï¸ı âļªï¸ı\nà®ķ à®®\nÉ Ľ\nzer land\nz elig\nyaa asss\ny rn\nwester field\nwen ye\nwe play\nwar ders\nvisit sweden\nvam ani\nun icity\ntto loso\ntro ss\nthro mb\nteof ilo\nteenag efanclub\ntc mi\ntavit ulle\nsymboli sed\nstron k\nstaple hurst\nstack ers\nspas sky\nsore head\nso suke\nskag it\nsigmar gabriel\nshe ild\nschur ch\nsama atv\nroad sof\nr fu\nquit ted\npu san\nproject mangement\npla x\npiercethe vic\npe ery\npan u\nohi sto\nofficials blessing\nof death\no bie\nnun nally\nnt ate\nnaomis cott\nn dia\nmo xie\nmedit ator\nmc crum\nmaynil ad\nmariefre ttoloso\nlule Ã¥\nliz otte\nlawy ers\nkid ap\nke ta\nkart ell\nk ery\njustgo shoot\njuic ery\nju ggy\njor jasmith\njmichael tatum\njed york\nix ora\nin ata\nid one\niam jer\nhuday dah\nhu sam\nhooge veen\nhitch en\nhich ki\nguide dog\ngrowur startup\ngali za\nfault lines\nfau det\never glow\nescu char\nesc s\nelvis es\nelse vier\ne then\ndreamtheater net\ndoc tson\ndin ara\ndil ara\ndefe atist\nczer ny\ncw tch\ncul leton\ncour tin\nchur cher\nchri stu\nchitrang ada\ncard assian\ncan am\nc wallerracing\nby choice\nbrom ham\nbrite eye\nboon ton\nbiop sycho\nbezan is\nbasketof deplorables\nb flo\nauto harp\nap adilla\nanthony cumia\nan jem\namc talkingdead\nal bia\nair foil\n> ;\n= ))\nðŁĹ ¿\nðŁij ľ\nย ย\nà¥ĩ à¤Ĥ_\nÊ ĥ\nyoungand therestless\nyork town\nyearen d\nwaw ild\nvitam ine\nv hi\nut pal\nuni sex\ntur ma\ntu pi\ntrafalgar square\ntitle town\nthrap ston\nthisi sr\nth man\ntech update\nteam sasha\nteake ttle\ntay miyyah\ntan ish\nsye da\nsuper nanny\nst ent\nsplay house\nsou der\nson ger\nsolo preneur\nso bral\nsla gging\nsivi glia\nsi min\nshri ft\nshr tampa\nshen long\nshamit abh\nseri alisation\nsen na\nse where\nscy thes\nsat uan\nrudy giuliani\nru ly\nrosen do\nroad y\nro sequ\nri ghting\nri eti\nri dis\nrhu le\nretro horror\nrel ents\nr mbr\npun kie\npul ped\npowderham castle\npou f\npot es\nph ritis\nout moded\nom et\nnomin ally\nno sler\nno sleep\nne za\nnau t\nnap es\nna hai\nmystic seaport\nmou stach\nmj keenan\nmistransl ation\nmiamidade county\nmegan tic\nlun aleso\nlev asseur\nkin ny\nka atru\njk tourism\njames franco\ninten se\ningh ot\nilu stration\nili v\nij t\nhub bucket\nhry v\nhome tips\nheli um\nheb ner\ngu tu\ngle w\ng jr\nford india\nfire arm\nff c\nfcau gsburg\ner ste\nele e\ne consultancy\ndu bay\ndramati ze\ndec red\nde metris\ndance co\ndae kim\nctv winnipeg\ncru ijff\ncor mick\ncomplain ants\ncom ico\ncj spiller\nci oran\nchain rings\nbroward county\nbelgis che\nbel va\nbarat aria\nbam av\nbal lasts\nbad luck\nb mus\nashley mcbryde\nash down\nash bridge\narkan sa\nar oon\nanna beth\nad dai\na bear\n======== ====\nðŁļ İ\nðŁĺį ðŁĴį\nðŁĴļ .\nðĿĺ Ģ\nãĥĹãĥŃ ãĥ¬ãĤ¹\n¬ ´\nzi ad\nyu v\nworld t\nweare mumbai\nwast aken\nwand bc\nvoxel art\nvis ayan\nvi bha\nvau ban\nupper deck\ntur nhout\ntur gid\ntre xp\ntot land\nto grapher\ntill i\nti mu\nthereal xpac\nte ste\ntau fik\ntat amag\ntainte d\nt pot\nsug aya\nstre ater\nstat i\nsrisri in\nsport sau\nsouth indian\nsk ers\nsinthe city\nsim ko\nsilver link\nshoe fie\nshar dul\nser ravallo\nselfie time\nsear ls\nscott rogowsky\nrune stone\nru elle\nrober th\nri perton\npv f\npromoting women\nprogen itors\npro pe\npro fuse\npriv ated\npre raphaelite\nprand elli\nporfi rio\nporcup ines\nplu ck\nplanet x\npersi ja\npalla volo\nnotbe infringed\nnorse mythology\nnim rud\nngay ong\nnevad ans\nnego cios\nnb hd\nn italo\nmulti band\nmonument our\nmn gt\nmisssaig on\nmiss america\nmersey police\nmegali ths\nmc f\nmax keiser\nmali gning\nmaha vir\nlen awai\nlap is\nkra sny\nkir ui\nkil bourn\nki maka\njust girlythings\njuniat acollege\njo sua\njimo heir\ninish more\nindiscre et\nimplo red\nimpercep tible\nillegal aliens\nhigh clere\nheav ed\nh mos\ngroo vies\ngre search\ngr v\ngoo fed\ngoing strong\ngems bok\nge za\ngar ant\nfrye burg\nfriez eartfair\nevangelinel illy\nesk ar\nepi da\nenglish ness\nel ser\nel ani\ndres den\ndonthug cacti\nd town\ncornell mba\nconden sers\nco sponsors\ncityof toronto\ncine family\nchrist of\nchim eric\nchennai rain\ncheeselo versday\ncfa institute\ncastig lioni\ncaitlyn jenner\ncad enet\nbru gger\nbra sse\nbgg con\nbbc questiontime\nbarg ello\nbalear ic\nb hy\naur aria\natro pical\nar mco\naqu inn\naje sh\nai ro\nah met\naga o\nðŁĺĭ @\nðŁį ļ\nèĭ±ä¼ļ 話\nç« ĭ\nâľĸï¸ı âľĸï¸ı\n© :\nyofthe seas\nyas uk\nyas sa\nxxx holic\nwriter wednesday\nwh p\nvil ain\nuvm vermont\nupgrade yourworld\nun spectacular\nuk oug\nug dsb\ntw angy\nturtle back\ntt om\nthestra infx\nten aglia\ntb u\ntam amo\nt ú\nsuble tte\nstraigh teners\nstor ag\nspor ades\nspar ql\nsn ark\nshi ve\nsharon lawrence\nser ry\nscand ale\nsave theworld\ns sex\nri béry\nres ented\nremun er\nreign ites\nraveng lass\nra anj\nquir inale\npy re\npu jol\nprate ek\npoo jab\nper ic\npay bill\nparadigm shift\nouro ceans\nota valo\nnyc gov\nnoris ring\nnintend ouk\nnat ya\nnas ugbu\nn ka\nmyel ination\nmr chris\nmonkey island\nmo stest\nmiles morales\nmike pence\nmedi asummit\nmal er\nmaiden hair\nmaddieand tae\nlu ÃŃs\nlos ada\nlong case\nle phants\nld ny\nking sx\nkd v\njet port\nj alo\nira ivi\ning show\ning america\nindi ameansbusiness\nig ad\nideser venewshoes\nhoax er\nhistoric preservation\nheavy weight\nhappy memorialday\nhandel sman\nhak am\ngj allar\ngastro post\ngam betta\nfuture star\nfootball season\nfield school\nfay yaz\nfamili arizing\nexercise works\nenam elling\nen stone\nember js\nelectro therapy\nedwardj olmos\nec ma\neb don\ne badi\ndex com\ndemocrati zed\ndaco its\nda xe\nd ft\ncux haven\ncupp les\ncorpor atist\ncor nick\ncoal brookdale\ncn ooc\nci enti\nchildren underattack\nchic co\ncardio vascular\ncaliforniawild fires\nbuss mann\nbu cadi\nbroad heath\nbri zzi\nbrady haran\nbor des\nbo en\nblue hour\nbibliothe ek\nbi thell\nbi gamy\nba sted\navery brewingco\naspir ator\narmb ruster\nap aper\nang y\nan vi\nan sascity\nale ko\nah rq\níķĺìĿ´ ëĿ¼ìĿ´íĬ¸\nèĦ ĩ\næĿİ æķı\næ± Ł\nåİŁ å®\nãĥ Ł\náķ Ĺ\nà³ Ĥ\nÆ °\n® )\nx posed\nwre sting\nwest bury\nvon k\nvic trix\nvamp y\nusc upstate\nus enet\nur w\ntu chova\ntrumple aks\ntong ans\nthestor yo\nthaicave rescue\nten nison\ntele graphs\ntejas vi\nte sta\ntakeover day\ntab ur\nt pt\nsumed ang\nstoltz fus\nstar ro\nstar fm\nst mag\nspir ates\nsnaggle puss\nsm iting\nsi mel\nshar min\nschuyl erville\nroberts dale\nricci rivero\nresearch day\nrachel dolezal\nput ney\nproud fan\npr jct\npoli shed\npk gs\nparam edical\npa ko\nordin ations\nor poreal\nonno ghen\non asap\nofficial steps\nof ire\nnie res\nni mona\nnext stop\nnat la\nms gt\nmir ta\nmhat re\nmen angle\nmcro bbie\nmc kees\nmc frs\nmb abane\nmaha patra\nlur ching\nli gao\nlent i\nlenawai the\nla fave\nkonec ranes\nkirk cousins\nkiralı kaÅŁk\nkawak ubo\nkat unews\nkarn ali\njoh ne\njim bob\njessi es\njan fam\njac i\nj md\nis las\ninter reg\nheyit scarolyn\nhen low\nhari kota\nhand bag\ngulf coast\ngoo derham\ngla uca\nfor mars\nfilo sofia\nesche wing\neman ation\neliud kipchoge\ndÃŃ adel\ndou chey\ndor king\ndin or\ndesp ain\nden k\ndefen sie\ndan bilzerian\ncre ami\ncle fts\ncircum venting\nci ega\ncard ston\ncar lifestyle\ncandid ate\nbuff lehead\nbronx nation\nbrian schatz\nboul den\nbou ska\nborn and\nbogdan ov\nblack label\nbirch bark\nbio tope\nbiblio graphies\nbb bb\nbay ad\nbas rah\nbar ahona\nban kia\navi gdor\naro on\narab idol\nand redrum\nanan arama\nan ur\nafro disiac\naf oa\nac cardi\nabu ll\naborig ine\nabo d\nab d\nðŁĺŃðŁĺŃðŁĺŃðŁĺŃ ðŁĺŃ\nðŁĺĺðŁĺĺ ðŁĺįðŁĺį\nðŁĴį ðŁĴį\nðŁį¬ ðŁįŃ\nðŁĩ ¸\nîĮ ¨\nس Ùģر\nتص ÙĪÙĬ\nار ات\nzbrush central\nzaf er\nyun is\nyun amusic\nyo kel\nyear nings\nye vich\nye as\nwinter fashion\nwin ford\nwid dowson\nwhack ers\nwendi emalick\nwbr c\nval ances\ntot ley\nthisisd avina\nthenana aba\nthec wu\nthe wedding\nthe register\ntenovusc ancer\ntau p\ntan redron\ntanredron cal\nsuper capacitors\nsti mac\nsoft pedia\nsic ecream\nsheikhu pura\nsd or\nsco wl\nsan den\nsal vin\nro vira\nro versi\nrize spor\nrigh twing\nre pa\nrc cc\nram cinemas\nr gn\nquarter finalist\nqld labor\nqamish li\npremratandhan payo\npoul tice\npas son\npan neer\npac eu\np ite\nout matched\nol medo\nof osu\nnew usc\nncaa icehockey\nmolly quinn\nmo ta\nmichel led\nme som\nmcgre al\nmazz ini\nmatchday image\nmasar yk\nmanish mischief\nma fu\nlittle st\nlind seys\nley hall\nle schi\nlc as\nlatime sopinion\nlam pa\nky lee\nkra jicek\nkoz elek\nkon z\nkeen est\nkale mia\nk jel\njuliusc aesar\nja ha\nisma ily\ninter dict\ningra ssia\nin sha\nin mac\nib are\nhush puppies\nhoy te\nhom ma\nhol tren\nhan en\nhack neyed\nha doo\ngo kin\ngirl talk\ngab oury\nfund aci\nfueledby ramen\nfi zzy\nferru cci\nferra gosto\nfelsted school\nfarm market\nfamili esc\nexpul sions\nevolu zione\nendocr ine\neast burn\ne braeden\ndysm enorrhea\ndre ver\ndont look\ndj ou\ndis organization\ndevelop mental\ndefin able\ncruci fixes\ncot f\ncondem nable\nclu mped\nchy ron\nchro ma\ncent ar\nce gep\ncarav aning\nbroad foot\nbrix worth\nbraw ner\nbr d\nbellige rence\nbear r\nbarry island\nbar us\nbal erno\nbal co\nb tweets\nat it\narach tober\namazon giveaway\nais ling\naiac obelli\nafun eral\nafgh anist\naduri z\nadel itas\n( !).\nðŁĴĩ ðŁı»\nðŁĮ´ âĺĢï¸ı\nðŁ§ Ķ\nðŁ¤ĵ ðŁ¤ĵðŁ¤ĵ\nðŁ¤¢ ðŁ¤¢\nìĬ¤íĥĢ ê·¸ëŀ¨\nì¹ ´\nãĢ°ï¸ı ãĢ°ï¸ı\nâľĪï¸ı âľĪï¸ı\nاÙĦبØŃ Ø±ÙĬÙĨ\nzi yar\nze me\nyer im\nwo hoooo\nvo bis\nvillu puram\nvijay alakshmi\nvi res\nv rat\ntun ggal\ntropic als\ntri bology\ntrans fered\ntobykeith music\nto v\nto chi\nthur ston\ntex asto\ntere k\nsze to\nsuper cheap\nstat u\nsou rav\nso what\nshpong le\nshink awa\nshawn na\nsf d\nselfie olympics\nscru ff\nsc sk\nsc lassics\nraw ong\nrangi ora\nr Ä«\npp od\npopo cate\npolit icon\npersonal shopper\npel ayo\npau city\nover shooting\northo graphy\nny land\nnumber less\nnitalo wey\nnip muc\nnahai wrimo\nnac all\nmun dy\nmor osi\nmis uses\nmatthewl illard\nmar les\nmag alies\nm phs\nlime bike\nlegend aries\nlabru sca\nla se\nl bi\nks ack\nkre wel\nker li\njohancru yff\njoakim noah\njameshet field\niz anagi\niy aa\niam laceychabert\nhy pon\nhor ak\nhoo pla\nhawai inewsnow\nhan shika\ngur k\ngroup news\ngrl powr\ngreed ily\ngrad ations\ngoogle photos\ngoo oooooooooooooooo\ngolden retrievers\ngig guide\ngg olf\ngener alizing\nfun kiest\nfrail ties\nflower girl\nf stone\ner roll\nen ninful\nel repgh\nec ross\ndubo ce\ndoo bie\ndin ma\ndil dhadak\nder reen\ndallast nt\ndaily calm\nd chen\ncu yler\ncro teau\ncre on\ncr nc\ncon scripts\ncompen sator\ncol azione\ncoastal living\nco ley\nchekkachivan thav\nce volleyball\ncap acious\ncad burys\nca stries\nbunnaha bhain\nbike towork\nbhand up\nber tinelli\nbaske twomen\nbanc or\nban anab\nbaira va\nbab ul\nasho ka\nas gr\napar o\nall ly\nall bright\nalessandr ini\naku mara\nai ste\nafg anistan\nad ame\nab salon\n; }\n!! ðŁĺĤðŁĺĤ\nðŁĮº ðŁĮ¸\nìĽIJ íĺ¸\nãģ Ľ\nzi zz\nzi k\nyor ke\nwx mafc\nwwe bige\nwo wk\nwin today\nwin co\nwhati f\nwer kin\nvide tte\nvajazz le\nud h\nu mineko\nty ng\ntu pelo\ntrans vaal\ntotal cafcl\nthrur pg\nthe revolution\nth parallel\nter cel\ntal man\nta be\nswam ping\nsuper micro\nsu nexpress\nstigmati zation\nsteiger wald\nspur ling\nsports writing\nsport sclub\nspoiler tv\nsi ru\nsi dle\nshel bs\nsharon jones\nshari alaw\nsen deros\nsec nation\nsap r\nro dden\nresearchimpac teu\nredding power\nrashi ki\nr mit\nque brada\npuffin ess\nprince albert\npp aca\npop health\npoint lessness\npleas ence\nphoenix lp\npau lar\npat rouille\npantal one\np cl\nny che\nnu dgee\nneer atan\nnas ar\nnach es\nnab bing\nn he\nn ck\nmu umu\nmorning listening\nmoon watch\nml jet\nmiskat onic\nmis u\nmilk fish\nmi u\nmg tow\nmeh di\nmar athe\nlucasoil stadium\nlondon breed\nlizard men\nlive say\nlifes better\nliam fox\nled widge\nlavanyab hardwa\nkre wella\nkne eler\nkings north\nkeepcal mand\njoy al\njosep he\njon ni\njo edi\njeff tweedy\ninstagram stories\ningen ue\nine learn\nhow lers\nhipho partist\nhe mera\nhe mant\nhe kate\nhann ahs\ngold bergs\nglu cagon\ngad u\ngabri ele\ngabby giffords\nfrom where\nfriez elondon\nfre she\nfo shay\nfernet branca\nfer r\nfarm show\ner se\nend coal\nechi dnas\neastlanc srly\nearthwind fire\nduct tape\ndu bas\ndru cken\ndrive thrurpg\ndick ov\ndi gos\ndevarak onda\ndavid johnston\ndab omb\nconis brough\ncomple xo\ncolle geny\nclu mber\nchester tweetsuk\nche bet\nceano thus\nce ding\ncas lon\ncareer development\ncaoim he\nbru te\nborde leau\nbirdwatch extra\nbengal cat\nbel aying\nbeau s\nbbcsouth weather\nbatt in\nbase ballis\nbapp amorya\naz d\natt r\nan anias\nakshar ahaasan\nabhi jit\nðŁĺĦ )\nðŁĺĤ "@\nâłĢâłĢâłĢâłĢ âłĢâłĢâłĢâłĢ\nyoung music\nyo ke\nwin chesters\nwhok illed\nweare cue\nvo gl\nvi ji\nver asani\nuss k\nun manly\nul ite\nugand a\ntri vikram\ntran scom\ntor ye\ntime snews\ntheaf ccl\nthank god\ntham esp\ntele toon\ntat to\nta fa\nsu athletics\nstop commoncore\nst s\nspire a\nspeed hunters\nslu sser\nsir na\nsi put\nshaaan xo\nselen is\nscra zy\nscam mell\nsar tor\nsam ik\nsafer internetday\nruss els\nrogu ish\nrl tw\nrixton official\nrivie res\nrichard marx\nre inet\nre constitution\nre configurable\nra pson\npriyad arsh\npot c\npen american\npat tullo\npar acha\np head\nori shas\none wtc\nocu lus\nnorman lamb\nnick vujicic\nni ed\nnew products\nnar sis\nnab l\nmoy cullen\nmoo o\nmillion cup\nmicha eli\nmi dian\nmb aye\nmalay o\nm trainier\nm ser\nloveyou all\nliti gating\nlind ab\nlehigh u\nlaunch party\nlatch key\nlanca shirec\nlan dover\nkra thong\nko tz\nkint bury\nke iz\njubin nautiyal\nip mi\ninten sion\nhou la\nhou ght\nher ber\nhelge son\nhelge sen\nhe ireann\nharry appreciationday\ngimb als\ngill ingham\ngiftof life\ngel ber\nge iser\ngal z\nfanta sized\ney ard\next ella\nenter ta\nendless summer\neat fresh\ndyne vor\ndrunk ards\ndream ers\ndo ps\ndig able\ndesignby humans\ndart ford\nconfer ment\ncold front\nco health\nclaire fontaine\ncitiessky lines\nchin amcclain\nchan dio\nchae bol\ncec ily\ncaric atured\ncardiff met\ncar ven\ncameron mathison\ncab ourn\nbuen camino\nbrundle f\nbrazo sport\nbrand ao\nbio art\nbil stein\nbeacon house\nba her\nañ ejo\nauto group\nauthor amish\nas avi\naram kon\nantiquec lique\nann eli\nanand tech\namne si\nambro se\naji bade\naf raz\naber lady\naaron son\na etc\nðŁĺį âĿ¤âĿ¤\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥\nðŁĩ·ðŁĩ ¼\nðŁĥ ı\níķľ ë¹Ī\nìĶ ¨\nÊ °\nzen book\nzato ichi\nyo or\ny alty\nx html\nwomens facup\nwild horse\nweather wax\nwe some\nwar like\nwal tons\nvoteblueto saveamerica\nval emount\nv ml\nut kal\ntric home\ntresp asses\ntool ong\nthor aco\nthesquare ball\nthehard way\ntheatre awards\nthe drew\nthar anga\nsy reeta\nsur ridge\nsto inis\nsplend ens\nsp lanet\nsoultrain awards\nsophiel ady\nsom ec\nsmart buildings\nsmar a\nsing post\nshoshan abean\nshak ya\nsh agu\nscott pelley\nsat an\nsal yer\nsaint snation\ns vein\ns comedy\nrober ta\nro der\nrebel o\nrebecca jarvis\nraiffe isen\npul te\nps v\nprompt advant\npro visioned\npre iss\nportrait november\nport ela\nplan itia\npic xania\nphilipham monduk\npath on\npar ata\npan hard\nns live\nnovo gratz\nnh b\nneeratan den\nnam ida\nnam es\nmv agusta\nmun in\nmoney gram\nmicro climates\nmement omori\nmedieval art\nmedia ev\nmarqu es\nmark smen\nmar nie\nmad magazine\nmachine intelligence\nma pun\nly c\nlum sky\nlu me\nlewisham council\nlen inism\nkordo fan\nki as\nkel oid\nkathleen madigan\njud iciously\njose fin\njessic as\nje ti\njay z\njan as\njac en\nj ver\nir craft\nin th\nilli ans\nif adnews\nhopgod friday\nhalf price\nguitarri sta\ngrlpowr chat\ngreat indian\ngolf show\ngod win\ngobble gobble\ngo za\ngl te\ngigab ytes\ng lat\ng brow\nfrank reich\nfp jr\nessi g\nen theo\ned p\ned iti\nec ruz\neb st\neastern cape\nduke gang\ndover athletic\ndi emer\ndemo dex\ndecryp ted\nd bh\ncrusaders rugby\nclam our\nchoic ed\nchicago cubs\ncarai bes\nbren chley\nbree zer\nborn thisway\nben av\nay umu\navs nigeria\nantoniob anderas\nam art\nall eno\nal sh\nadi vision\naber porth\nabad don\nab hy\na bee\n\' ..."\nðŁĶµ âļ½ï¸ı\nðŁĵ ī\nê¹Ģ ëıĻ\nี à¹ī\nÙģÙĦسط ÙĬÙĨ\nا Úº\nzwart ble\nyoung spubs\nwc pw\nvolk off\nvijayan pinarayi\nval parai\nun produced\nun likable\nulcer ative\nu can\ntä nak\ntoxopla smosis\ntor ren\ntine a\nthegirls musical\ntexas strong\ntari que\ntami roman\ntake away\nta st\nt js\nsx melectro\nsweat pink\nsuresh chandraa\nsound mag\nsi ya\nsex tape\nsebad oh\nscott porter\nsatter white\nsar anya\nros ada\nro senior\nrecomend ado\npor tholes\npon tin\nplio cene\npe quod\npatho fexile\npak hi\np du\noff world\nnews busters\nnat vanlis\nna un\nmy fdot\nmoun troyal\nmicro fiche\nmiami bookfair\nmi q\nmh sc\nme sabi\nme ddle\nmau ch\nmath lab\nmateri alised\nmarqu ita\nmar tucci\nmacou pin\nlleg an\nlimit ers\nleonard cheshire\nlavo z\nkoin news\nking si\nkick offs\nki am\nkad aramkon\njo sho\njenni em\nje wer\njac ey\nj pi\nisaac mizrahi\nir thday\nin comparably\nima ke\nhou de\nho cked\nhit btc\nhigh seas\nheer babu\nhe dd\nhar kavy\nham irpur\ngy c\ngretchen whitmer\ngreat guy\ngraff erty\ngolf travel\ngiftfor him\ngh un\nger as\ngau vin\ngar agi\ngand alf\ng di\ng ades\nfrüh ling\nfri derz\nfrederick town\nfing al\nfibaeurope cup\nfanta sist\nesti mable\nellic ottcity\nek d\ned xonline\ne apc\ndu eled\ndon gs\ndog treats\ndish nation\ndie h\ndev ault\ndes apare\ndent es\ndavidg ill\ndar cel\ndad bod\nda di\nd km\ncraig lowndes\ncor ris\ncapetown cityfc\ncam poo\ncal d\ncairn terrier\ncad ence\nc mg\nbwal ya\nbw g\nbragg art\nbr ica\nbor nes\nbon um\nbon der\nbm ttandem\nblackdeser tonline\nbe vents\nbb ell\nbat dad\nather ton\nat witter\nask am\narnolfini arts\nandri ana\nandre an\namo reno\namit abha\nalan tudyk\nal van\nal ace\nad be\nab ayan\n? âĿ¤ï¸ı\nðŁĺĤ ðŁĴª\nðŁĵ² |\nðŁijĮ ðŁĺĭ\nðŁIJİ ðŁIJİ\nì¤Ģ íĺķ\nzom usic\nz ouch\nyyc music\nyu saku\nwwen eville\nwo ggle\nwick reme\nwestfal en\nweigh troom\nvr ps\nvote jkt\nv th\nty ard\ntu ks\ntruckn driver\ntravel ist\ntouch wiz\nthero bot\nther ag\nthelaugh factory\nter ma\ntel for\ntel erad\nteach ag\ntatamag ouche\nsummer glau\nsub humans\nsouthern star\nshaf ak\nseawol ve\nscu do\nscorch trials\nsat na\nsant en\nsanc on\nsan ghar\nruok day\nrumb led\nrogal and\nrevolver mag\nrailroad ed\nqueens land\npumpkin carving\npre sonus\npr request\npop dust\npo gona\nparl ons\non scott\nom ir\nok mesonet\nnu wara\nno vica\nnigh tt\nnh dems\nnewton ville\nnew beer\nnavar one\nnahu el\nn md\nmust i\nmorning star\nmodel cars\nmo peds\nmiyaz awa\nmichaele merson\nmi yoshi\nme tron\nmat angi\nmaker studios\nmadon naf\nlub be\nlosin j\nlivel ounge\nlead up\nladies g\nkre ut\nkin sey\nke et\nkar wan\nk bb\njoven es\nis bnpa\nindustrial music\ninde acon\nin dominus\nhenson company\nhay market\nhat ori\nha skel\ngy al\ngravit on\ngrant ley\ngood looking\nglu teal\nge ffen\nfreak indeacon\nflin der\nflick inger\nfi ved\nfemin amiss\nfar sighted\nerlen meyer\ndo gen\ndal beattie\ndaily herald\ncu ong\ncru mley\ncourt sey\ncould nt\ncotton seed\nco traffic\nchin ky\ncefas govuk\ncam mi\ncam bourne\nc sed\nc festival\nbur gee\nbro cante\nbreakfast with\nbrac keting\nbli brary\nbiggest loser\nbethesda studios\nbarry sanders\nbal in\nazamar avoyages\nauctione ering\natt park\nar ni\napp rised\nani festo\nal nassr\nal loc\nai mar\nadu bai\nadam woodyatt\nach on\n>> #\nðŁĺ¥ ðŁĺ¥\nçģ «\nãģ ©\nа ÑĢÑ\nzoethe ball\nzam ana\nzab ludo\nxia oyu\nww cc\nwre tch\nwi leman\nwhite read\nwal kab\nviktori ya\nvikk star\nun trusted\ntsa on\ntran stv\nthe knick\nthar aka\nt drs\nsw brail\nswbrail riders\nsw all\nsusu mu\nstar sonice\nstap ha\nspring well\nspinabi fida\nsoci os\nsn ard\nsmar ini\nsk use\nsit us\nship wright\nsep i\nsene cio\nse vin\nscho or\nschill inger\nsc sn\nsatis factor\nsachsen hausen\ns girl\nry uki\nrugge dized\nrosic rucian\nroman britain\nrl j\nreas sign\nrac ia\nproud father\npo je\nplu mping\nplenipotenti ary\npick les\nphosp hati\nphi b\nph enter\npepso dent\npartick thistle\npan ge\notter dam\nor re\nolym pe\nnut free\nnot ta\nnorther nontario\nnor fleet\nnoir summer\nmulti focal\nmudgeer aba\nmrporter live\nmovi eland\nmorning live\nmo ssi\nmir us\nminu tiae\nmin usma\nmetam orph\nmedic os\nmc glade\nmatch es\nmal amu\nmahar lika\nma ppings\nlik on\nler k\nkoro vin\nkaz insky\njobo aler\njac kiel\nin memory\ni io\nhowto basic\nhorn beck\nhm hs\nhel muth\nhay dens\nhashem ite\nhappy makarsankranti\nham strung\nhacket tofficial\ngon calo\ngolden temple\nge ist\ngator zon\nfredo santana\nfl acs\nfirst gen\nfil omeno\nf heis\nev intage\nen ali\ned iciones\ndragon gate\ndr j\ndo ina\ndisper ses\ndi wal\ndev hynes\ndeni grating\ndel rey\nde duplication\ndavido tunga\ndab lam\nd str\ncrow medicine\ncot grave\ncom ate\ncol drain\ncoffe es\ncity westminster\nchieftain cy\ncherry blossom\nc sto\nburgh leyhouse\nbu er\nbrom well\nbir bal\nberry tmr\nbered seered\nben the\nbc x\nbar atta\nbam se\nbal lade\naw is\nav adi\nas mat\nas cu\narmi da\napp ric\nanasu ya\nall llllll\nale theia\naldub xe\naldu be\nail lu\nagainst allodds\nadamcole pro\naccoun tab\na ane\n" ...#\nðŁ¤ ²\nãĥĸ ãĥ¬\nà³ ģ\nz day\nyouth for\nyoga pose\nwain ui\nwad ada\nw clc\nvar ona\nurin alysis\nunderdesk loser\nunder glaze\numich medicine\null mark\nukrain ian\ntzed akah\ntw ash\ntrump sters\nthink landscape\ntheoutdoor city\nthe town\nthe sar\nthath omas\ntez pur\nter no\ntas lima\ntar ta\ntafa wa\nta arab\nsuper mariobros\nsubhash ghai\nsub contract\nspublic ations\nsocial rights\nslo ppy\nski jumping\nsher born\nsehs thebest\nscuder i\nsar ova\nsal ah\ns room\nroman ova\nrock on\nregaz zoni\nr kt\nprodu k\npredi lection\nplaster work\npi ura\npen alizing\npan ta\npan enka\npal mares\nold english\noax acan\nnotredam ec\nnot fair\nno vik\nnic kie\nnast assja\nn said\nmyfox tampabay\nmom usic\nmoistu rise\nmedi amo\nmc quay\nmas dar\nmani yah\nmakeit real\nma kay\nm jakbar\nlpool council\nlowest price\nlass ic\nlar mer\nla win\nko conews\nkn apper\nkey stroke\nk rook\njoburg theatre\njack the\nhk ir\nhil der\nherre ra\nhei jden\nhe ley\nhaz ra\nhann ad\ngregari ous\ngerman shorthai\ngames manship\ngam p\ngal u\ng sy\ng ico\nfo b\nfe to\nfate ha\nexagger ations\nesur ance\neigh th\nec wa\ne thology\ndrug war\ndru gab\ndonkeys anctuary\ndiap hanous\ndi maria\nde cri\ndai quiris\ncor day\ncon leth\ncome at\nco bix\ncobix reyes\ncc sf\ncap radi\nc bo\nbsn sports\nbot ching\nbin n\nbike chi\nap ke\nannas ui\nanc as\nan aka\nalmir ante\nal bies\nait ana\nad alberto\nabar bera\n. ,.\nðŁijī ðŁijī\nðĿIJĪ ðĿIJ\néĢ ļ\nãĥ³ãĥ ģ\nye siam\nwere the\nwehave wewill\nwe ki\nwa ht\nvul gare\nura uganda\nup gradable\nuof regina\nun righteous\nu stra\ntwitch affilate\ntwee ds\ntv guide\ntop coder\ntom ber\nthe virdas\nthankyou u\nter man\ntele visual\nteam ajaydevgn\ntali ban\ntale of\ntac tic\nswains boro\nsupri sing\nsu raiya\nstu lsa\nstir rings\nsteph anos\nstand pipe\nspace coast\nsolart vnews\nsnoqual mi\nsn live\nsl un\nsh ole\nse wak\nscience advances\nsche ff\nsch roth\nscal ene\nsal atin\nsaf ran\nsab r\nroad runner\nri smo\nresemb lances\nreplic able\nreplac ement\nre trained\nre draiders\nr fef\npra chu\npol an\npesh wa\nongh ere\non ova\nome a\no dgers\nnew shead\nne eli\nnational lipstickday\nn ram\nn han\nmy heart\nmur nane\nmultic olour\nmtr cb\nmonte mayor\nmiguel tanfelix\nmck ell\nmark d\nmar m\nmango tsfield\nma bie\nm brundlef\nlulu lemon\nlouisi ana\nlog books\nlev itt\nleff ingwell\nla villa\nku nedo\nkra de\nken ma\nkarate ka\nk gp\njame er\njagad guru\nit ouch\nish h\nindul ges\nilig ence\ni prit\nhymn als\nho ppo\nhistor ico\nharmon izer\ngrant sville\ngoogle exper\ngm fc\ngemat ria\ngal breath\nfun c\nfraction ated\nfox newspolitics\nfi h\nfan light\nengag ing\nen esis\nec oli\ndiferen te\ndhen kanal\nde moralising\ndayo ade\nday tuesday\ncy m\ncra zzy\nconver gences\ncolou red\ncine spia\nchis os\ncer ullo\ncarno taurus\ncaric hampion\ncapp ellini\nc pyne\nbu land\nbri atore\nbradleys fight\nbracci ano\nbr ck\nbe atie\nbam asb\nbag na\nbad day\nay ran\nau do\nat ole\nastro logers\naround hampshire\narchi vo\naqu azzura\nant ourism\nalmir on\nairbus ds\nadeci mal\nacid house\nabell ana\na dis\n.. ~\n! ðŁİĥ\nðŁĴŀ ⾨\nðŁĴĸ ðŁĴĭ\nðŁıı ðŁıı\nðĿĺ ¦\n⾨ ðŁĺĦ\nâĺºï¸ı ðŁĴľ\nب ÙĬØ©\nzee man\nx cfl\nwill mott\nwikicom mons\nvibr ance\nvi ste\nune motional\nun truthful\ntom segura\nto pac\nthe bill\nter update\nteam sa\nte icher\ntam plin\ntailgat ers\nta haj\nsuper normal\nstat evb\nsn mp\nsi men\nshap er\nse vil\nsc as\nsat akarni\nsanit ised\nsam bro\nsaf wan\nrider strong\nre color\nrath fr\nquade cooper\npublic diplomacy\npronoun cement\npositive coach\nplebe ians\nplane te\nph le\npent yr\npen ko\npe red\npatron ised\norgre ave\nok l\no je\nnor ra\nnon et\nnas rullah\nmuseu mart\nmou tier\nmosas aur\nmonopoli zing\nmm schocolate\nmizz en\nmis l\nmal ott\nm con\nlud wick\nlooo ok\nlong den\nliver ight\nlitt a\nlit te\nlion nation\nlever ton\nlefthand brewing\nle petit\nkul iner\nkro pp\nkid sday\nkhali fe\nkh ound\nke shi\nkat la\nkasar agod\nkas lo\njer am\njef ford\ninfo sy\nho adley\nhimach al\nheritage fun\nheller town\nhass ine\nhard anger\nhallo ates\nhall yu\nha sit\nh sw\ngy p\ngron din\ngraub ünden\ngra af\ngon dar\ngo girls\nglas lyn\nge thealthy\ngan k\nga hh\nform o\nform ative\nforgi vable\nflu season\nfinding carter\nferrar ir\neuthan ised\nerr orists\nemb aj\neliz acarthy\ned unn\neat clean\ne max\ndrive safely\ndon ghan\ndom ec\ndo ts\ndivers i\ndeven o\ndea thanniversary\ndave ed\ndance onfox\ndair ying\nd town\ncyto skeleton\nct surgery\nconsumm ation\nconsoli dations\ncomrade ship\ncol ch\nchun ga\nc pu\nbusy body\nbu den\nbro chette\nbiz school\nbi bb\nbegley jr\nbeautiful places\nbbcradi of\nbar thez\nbah ram\nbachel der\nar que\nal iso\nagi bbons\nagglomer ation\nag unn\nag news\nachen bach\nach or\nabo gados\nab ster\nab azar\naar au\na shot\nìł Ŀ\nãĥķ ãĥ¬\nâĩ ©\nÙĪ ا\nzo va\nwou k\nwn p\nwindy city\nwego again\nwedd in\nwat esgroup\nvinod khanna\nve kic\nv lam\nunex amined\nunbeliev ing\nun labelled\ntur nal\ntransc athe\ntram mel\ntopra k\ntold story\ntodd ington\nthu ms\nthe union\ntau fiq\ntab an\nsuper intelligence\nstory behind\nstcuth bert\nsta w\nspell checker\nsl rs\nsk news\nsi pple\nsh kapoor\nsear a\nsaturdaynight live\nsatine phoenix\ns yo\ns meets\nrow lf\nro say\nrichard coles\nren c\nred dot\nrajag op\npust aka\npneumoni ae\npi ase\npetron as\nparl ors\npaolog ent\npaologent iloni\noverex tended\nover wrought\nou attara\noned bestfans\no teri\nni ère\nni gr\nne a\nnal gonda\nn wtf\nmor tification\nmo tala\nmiz rachi\nmilen io\nmil bourne\nmh world\nmeridianc u\nme yn\nme tri\nmat ariki\nmail and\nmad villain\nlove food\nlo des\nletsgotothe ex\nlec ricket\nla sen\nla fe\nkt va\nkon ink\nkir t\nkhal fan\nit ter\nira ja\nindo logy\nin bal\ni ae\nhuffpost live\nhot beds\nhom eland\nheaven officialsblessing\nhealth ed\ngroen links\ngro be\ngrace fulness\ngau ff\nfundam ent\nfr anny\nfeed lots\nfarmto fork\nfa bel\neve yone\netru ria\nesk om\nere whon\nenov aaw\ndr ough\ndown s\ndis kette\ndhi raj\ndesign miami\ndeck i\ndate time\ndash lane\ndasch le\ndam ay\ncra zz\ncoy q\nconfi dants\nchain maille\nchad dadon\nbun ited\nbraehead clan\nblue sea\nbillys later\nberlin a\nber it\nbehere now\nbbcin tune\nbareminer als\nbal luk\nbab ii\nau ll\nation alist\nat tu\nat reides\nasah ina\nas rs\narts offl\napp state\nameric o\naller y\nal az\n. ðŁĮŁ\n" .......\nðŁĻĨ ðŁĻĨðŁĻĨ\nðŁĺı ðŁĶ¥\nðŁĺ¬ .\nðŁĮ¿ ðŁĮ¿\nèģ´ãģĦãģ¦ãģĦ ãĤĭ\nâŃIJï¸ı :\nâĻ¥ï¸ı @\nâĨ ª\nzipp speed\nyel ahan\nwinter sale\nwatch me\nvir di\nvic ari\nval demar\ntu tton\ntrum pusa\ntriti ya\ntornado warning\ntomp kin\nto fin\nthen fb\ntheli ber\nthel ab\nthe est\nth rum\nteu fel\ntaxcut sand\nswind ells\nston i\nsto povers\nsteve perry\nster r\nstar flower\nss q\nsound track\nsigh isoara\nshutt led\nshen stone\nshaf aq\nsense making\nseis mometer\nseapor ts\nseaman ship\nsal cido\nsab u\ns thouse\ns arti\nrub chinskiy\nri poff\nrho dia\nretro fits\nrep jerrynadler\nrec entre\npurrr fect\npuff puff\nple eeee\npit roda\nphra o\nper se\npartsun known\nparaly se\npal mira\npaddington bear\npaci ous\nof london\nnorth pole\nnaga oka\nmost awaited\nmor ini\nmor arji\nmonast ir\nmo wins\nmike crapo\nmar janovic\nm chat\nlindac ohn\nli zza\nlever ly\nlegg ere\nlatch mere\nkuus amo\nku uga\nkle ist\nkha yr\nkevin mitnick\nkazant zakis\nkam araj\nka shu\njos buttler\nj sk\niolan the\nintere sante\ninter fans\nincu bus\nim richardyap\nim broglio\nhydro logist\nhouse boy\nhol ling\nhk sar\nhills comedy\nhere ee\nhar thill\nhal yard\ngov of\ngimna sia\ngie sen\ngg lobal\ngag tweets\ng mtv\ng board\nfu sed\nfru tos\nfight net\nfan sday\nexc elle\neph rem\nele me\ne tron\ndown slope\ndg w\ndesro ches\ndesk top\nderby uni\ndeli jah\ndar gis\ncrime drama\ncrevas ses\ncolo simo\ncla vell\nchiantic lassico\ncan nel\ncamise tas\nbusiness continuity\nbur lesque\nbun ched\nbudger igar\nbu ist\nbrun skill\nbrin ker\nbert man\nberber ian\nbar onial\nbalu ster\nbab ymama\nau mf\nas del\nand cream\nalannam asterson\n: ðŁijĩ\nĶë ¸\nðŁĩ¬ðŁĩ ³\nðŁ¥ §\né¦ Ļ\nzwartble sie\nzo omi\nwoo ot\nwhoop whoop\nwhitec astle\nwa as\nvirtual tour\nvar dan\nv uuren\nunter gang\ntu twiler\ntrevor jd\ntree brewing\ntogetherfor yes\nti ye\nthe ke\nter vuren\ntar pon\ntail ment\ntab ligh\nsund quist\nsummer fashion\nspreadlove positivity\nspec news\nsi dec\nshri venham\nseptu agenarian\nsales management\nri u\nresp ighi\nrecep tivity\nreal fpjr\nrational isation\nquin s\nquar tering\nquad rennial\npope inus\npol onius\npl sql\npiet sch\npan fur\nover simplified\nout smarts\nourcountry red\noris kany\nnew cifera\nne ons\nnational muttday\nn ji\nmyx musicawards\nmy erson\nmu women\nmr t\nmohen jo\nml bonfox\nmississipp ians\nmicro chipping\nmic keys\nmi yoko\nmc gowen\nmc atee\nmar uko\nmailand guardian\nmagneto sphere\nmac ritchie\nliz ia\nlife below\nletting go\nlets roar\nlea o\nlab life\nla et\nl anni\nkok stad\nker ast\nk met\njas raj\njame shut\njab u\nj brown\niz ola\niam intel\nhouseof lies\nhisto grams\nhal ite\ngood rum\ngbrow ingteam\nfu ÃŁ\nflugz eugbil\nflugzeugbil dde\nflamin goes\nfifty three\nfeile belfast\nfe ir\nfa sig\nespn greeny\ndothe work\ndont get\ndominick cruz\ndisal vo\ndis ables\ndigi dhan\ndi deas\ndeliciously ella\ndeaf lympics\ndai ji\ncur cio\ncon sole\ncis cou\nchekkachivanthav aanam\ncheer sto\ncasca bel\ncal dron\nbro dick\nbird dog\nber meo\nbel onghere\nar p\nal mod\nal ahly\naga c\nabe ille\nðŁĴİ #\nðŁĩ¨ðŁĩ µ\nçIJ ĥ\nç¬ ij\næĽ ²\nözge gürel\nzin ni\nyaku pov\ny for\nx si\nwright state\nworldar chery\nwin chen\nwell head\nvis erys\nvin da\nun glazed\nto cant\ntocant ins\ntin ky\nthi ther\nthemeat ly\ntemp ter\nteg mark\ntake charge\ntac tless\nsuppor tive\nsubsi st\nsu ha\nstil acosmetics\nssal on\nspar da\nsmarty rs\nsky sox\nshutt lesworth\nseismic ity\nscol lective\nschnit t\nsch ib\nsc d\nsar anda\nsantan acarlos\nsang ma\nsak ala\nris ation\nrein ders\nram fam\nprayfor peace\npra sadam\npleas uredome\npf leger\npe f\npatmcgrath real\nour pain\noss ining\non ear\nomer uo\noil man\nofficial alw\nob sse\nnorde ste\nneutr alizer\nnav s\nnational pet\nn andy\nms mith\nmorris art\nmorphe me\nmic limerick\nmari b\nman cos\nlagar to\nkish en\nkin lochleven\nke ffer\nkamasi w\nkak eru\njust ment\njohn nys\njamshed pur\njagga jasoos\njager meister\nj nan\nj ff\nirantalks vienna\niphi genia\ninas much\nin appropriateness\nil ve\niamami whoami\nhow z\nhorror hound\nholly holm\nhitmusic only\nhell yeah\nhel los\nhaye z\nharsh deepkaur\nharrogate town\nham er\ng tz\nfoo tre\nfinds friday\nfin edon\nfeminamiss india\nev aristo\neu th\neth icon\nepi gram\nend ays\ned begleyjr\ne wha\ndimm itt\ndenni ston\ndaysof oscar\ndal ot\nct la\nchristmas decorations\nchee sey\nceram ist\ncbc sby\ncattle man\ncamping world\nbru hn\nbrad stock\nbirthday month\nbirmingham weare\nbird flu\nbir sa\nbill kristol\nbh ana\nbel ice\nbb log\nbar kin\naz b\naturi smo\nath lone\naspe tt\narnou x\nanamari ecox\nan una\nam munitions\nall blackeverything\nagricul tural\naf ce\n\' ??\nðŁĻĪ .\nðŁĺī ðŁĺľ\nðŁĸ ±\nçĢ ¬\n~~ ~\nzuk erman\nzippor ah\nwitcher game\nwhor un\nwee tie\nwal thall\nvel as\nv hong\nus nft\nus asunrise\nun sheltered\nun ani\ntype casting\ntrans metropolitan\nthe guy\nsuper tanker\nsuggesti vely\nss m\nspol icing\nsm itten\nslo cal\nslash dot\nskybet league\nskam ania\nsing am\nsig gers\nsi mes\nshar ansky\nsh loka\nse dro\nschi frin\nsat yrs\nreve sby\nretail news\nran chom\nrackete er\npolon sky\nple dgers\npit u\nphenomen al\npe tah\npari stech\nor lin\nocean acidification\nobu asi\nnow toronto\nnewberry library\nneder lander\nn acks\nmy father\nmss ociety\nmount field\nmor tier\nmo in\nmischiev ously\nmicro service\nmicro green\nmc gown\nmatth agan\nlur kers\nlowes water\nlove wilko\nlmfa oooooooo\nkwan ghee\nko tv\nkau fusi\nkati em\nkat ori\nkat ar\nkare en\njorger amos\nj ems\nital design\nisp wp\nindia historypic\nignomin y\nif v\nhostel ry\nhope world\nhonor our\nhon d\nhe schel\nh alie\ngri sman\ngoondi windi\nget motivated\ngeek girl\nge tar\nfire bombed\nfeder ico\nfamily guy\nexcel sis\neve tt\nestac ada\nera edta\ndu kraine\ndr l\ndou ai\ndenisle ary\ndar la\ncryo lipolysis\ncruel ties\ncre ady\ncollecti vist\ncodeof vets\ncobra golf\nco gen\nclub med\ncloi stered\ncla gue\nchit osan\nchau dh\nchampionsle aguefinal\ncham pur\nce mal\ncarpenter sville\nbry na\nbrumb augh\nbroad green\nbrat en\nbram ante\nbob sledder\nblack lick\nbi alo\nbhar gav\nbhan j\nbbc northampton\nbay at\nbarrela ged\nbal som\nbaby ariel\nb gh\naz nude\nassoci ate\nas ound\nar coding\nalainde botton\naf es\naapkad haram\n** .\n!! ðŁĺģ\nðŁijı ðŁĺĬ\nðŁ¤Ł ðŁı¾\níĸ ī\né Ī\næĸ ĩ\n~~~~ ~~\nzu zanna\nwo wwwww\nwickreme singhe\nwau chope\nvoteuk mahomies\nvis arjan\nvir l\nvintag ep\nve rest\nur sel\nunve il\nuncle bob\nud n\ntu ite\ntr nd\ntotal access\nthe phantom\nthe gin\nthe fashion\nthe at\nten ter\ntasty poem\nsutton coldfield\nstream side\nstre mme\nstop fundingh\nsports file\nspeed man\nsp hen\nso arer\nsla dy\nsin ter\nshi st\nschne pp\nsch umi\nsat pura\nsalt spring\nsaj jan\ns arie\nrogo zin\npre volution\nponto ise\npo hlman\npetter sen\npd schargers\npas quier\npac ers\npac eman\np bg\nour de\noste op\noscar trial\no gura\nnsu kka\nnorthant spolice\nnatgeom ag\nmo shiri\nmis quoting\nmercury prize\nmemorial hermann\nmdant sane\nmad dies\nmac gruber\nlud milla\nlu sail\nlin ie\nlighthouse day\nlich man\nli ze\nlazz ari\nlay zie\nlar ussa\nkon ings\nknob creek\nki si\nkevin vonerich\nkayseri spor\njin ni\niso de\nis may\niprit amofficial\nine ws\nimplement ers\nig slovenia\nhy dr\nhof stetter\nhe ma\nh shanghai\ngreen planet\nglu can\nghi bran\nform alism\nflower oftheday\nfalak numa\nfac il\neric topol\nelo ise\nei go\nec statically\neast siders\neagle son\ndu er\ndrama beans\ndon skoy\ndon ata\ndesafi o\nde za\nde ste\ndani her\nd Ãł\ncre atu\ncraig melvin\ncr sp\ncon j\ncomhal tas\nclar us\ncity radio\nci fer\ncho let\nchlor ination\nchin ad\nch itti\ncatal di\ncar al\ncapacity building\ncagli ostro\nbullet storm\nbu ssiere\nbrisban ecity\nbride and\nbrendand assey\nbrac ts\nbo vard\nblue bull\nblack heath\nbest man\nbern stein\nbamboom usiclive\nath nico\nat rain\nar non\nappreh ends\namanda holden\nam ason\nalleg ories\naha dra\nactive yes\n-------- ----\nðŁĺģ ðŁĺĦ\nðŁijı âĿ¤\nëĭ¤ ìĿ´\nঠļ\nاÙĦ ر\nп ÑĢ\nç ons\nyouvegot mail\nyemen ite\nyear sofe\nyamahar acing\nx op\nx fighters\nwood lice\nwim an\nwan kel\nvin cat\nuplift ing\nun rehearsed\nub co\ntom fitton\nthe ek\nthe drake\nthab iso\ntes las\ntag er\nsuper sonic\nstro ve\nstonec old\nsine ws\nsieg ler\nshi rov\nshi ren\nsc liffe\nsalon en\nsac cessories\nrepublic adominicana\nrep your\nreload able\nreal isations\nread missions\nre genesis\nre confirmed\nrasto gi\nram jet\nraja beta\nrajabeta sharad\nqu itec\npra kritikakar\npolic ar\npol en\npo wri\npipe smoking\npint ado\nphoto aday\npet abyte\npend ry\npen lee\npaw z\np fen\np bw\noverex cited\nopen cast\noh god\nnishi kawa\nnish ad\nnikonowner mag\nnikol aev\nnas d\nmun che\nmu ahahaha\nmiss americ\nmil icevic\nmicrone sian\nme mes\nmc craw\nmatthew berrytmr\nmak am\nmacul ata\nm commerce\nlitt ell\nlit em\nlies beth\nki hn\nken ning\nke van\nkamalhaasan fans\njosel u\njo ssel\njim stweetings\njeet kunedo\nj sch\niy engar\niv ars\nincur s\nimpul sivity\nimpal ing\nili sts\nif msa\nic bms\nhor i\nhin da\nhead abovewater\nhe ye\nhaz y\ngul zar\nguil la\ngu stas\ngor get\ngoogle docs\ngood thing\ngameofth ones\ngamali el\nfu ssed\nfloridal ottery\nfe ma\nfar away\nfac er\nfab bro\nexpec tedly\nen circles\nele wis\negg en\nef ren\neaster seals\near ful\ndun ya\ndou rado\ndilo renzo\ndiade ma\ndeco ction\ndead heading\nde tre\ncusto dio\ncuer vos\ncrisscro ssing\ncor ral\ncombo ver\ncolumbu sohio\ncollecti v\nco yo\nco vel\ncn nee\ncho cor\nchar ityevent\nch avan\nbrass ware\nboy land\nbo twin\nbla gg\nbig play\nbadboye m\nbad illa\nba jas\nb gd\nardu c\naposto los\napo state\nantiterror ism\namar ah\nalex iso\nal men\nal bright\nadam jones\nad do\nad die\nðŁĺĺ ðŁ¤Ĺ\nðŁĮµ ðŁĮµ\nðĿĻ ļ\nå°ij 女\né mile\nç i\nzion nps\nz ian\nyan tai\nwr inging\nwon young\nwis ler\nwill ferrell\nwest lothian\nwah ro\nw ky\nw autu\nvin us\nvictori ous\nvee jay\nup fitness\nulcerative colitis\nuk ku\nu ÃŃ\ntrac ism\ntiru chi\nthe curren\ntemple of\ntak bir\nta wn\nt ver\nsuper crawl\nstop ford\nsoledad obrien\nsing ita\nsimul casting\nshe her\nse il\nsc apho\nsave gotham\nsaturdaymorning cartoons\nsars fields\nridge top\nri stic\nrener gracie\nram apo\nrach ita\nr vo\nproductiv ity\npp sh\npopocate petl\npi edmon\nperiod stories\npav é\npaul blackthorne\npachel bels\nor tolan\nop tane\nolom ide\nnw ts\nnewon folksy\nneuro logists\nnein quarterly\nnass nigeria\nna qi\nn rol\nn ooooooooo\nmysteriesof laura\nmun dos\nmotor mistress\nmontac ute\nmo chi\nmilan luthria\nmens shoes\nmam asap\nmadison square\nmac taggart\nma wr\nlo boc\nli wanag\nlev ites\nlegg ero\nlac y\nkus al\nkitt anning\nkey largo\nkemp is\nkam bli\nju iciest\njohn lithgow\njo bert\njameson whiskey\nic auk\nhu llo\nhom mel\nhl inger\nha su\nh reat\ngu sman\ngreen lights\ngo pen\nga thi\nfreakindeacon friday\nfonda theatre\nflamen co\nfic ation\nfeel better\neyehate god\nesk rima\neric ks\ner ag\nengland netball\ndis continuity\ndaniel daekim\nd so\ncryptom ining\ncrate red\ncoon abarab\ncoonabarab ran\nconfit ure\ncom pris\ncollegi ate\nco ssa\ncleanup day\ncere brum\nce qa\ncar donald\ncanc ún\nc newslive\nbtoo om\nbso azad\nbra zed\nblue wings\nbiom aterial\nbeer geek\naun er\nash is\nash ely\nas ob\nart class\narkan oid\narig atou\nangr yorchard\nanc c\nam irah\nah all\nago sta\na ep\n= @\n* ..\nðŁİ¶ âĿ¤\nðŁĮ² ðŁĮ³\nê´ ľ\nãĥ´ ãĤ¡\nâĶģâĶģâĶģâĶģ âĶģâĶģâĶģâĶģ\nॠ¤\nعÙĬ د\nzam ba\nza pote\nyuku stun\nyelahan ka\nyan jun\nwizzy jr\nwilson tennis\nve rey\nv qg\nun cy\nun conventionally\nultra hd\nud k\ntul lian\nth att\nter c\ntax ation\nsyl ver\nswat ara\nsune dison\nsunday read\nstri pes\nstopfundingh ate\nstein itz\nstartup grind\nssin ce\nspi elt\nsmar athi\nsle epi\nslack line\nshrou ding\nshi o\nshi geo\ns ry\nross lyn\nroman kemp\nrll racing\nrick on\nrep barbaralee\nratt y\npugn acious\npit ot\npig face\nphoto by\npad more\nor lovsky\nol ten\nol itis\nnz t\nnin is\nmo she\nmel nik\nmel bs\nmecan oo\nme flo\nmcmee kin\nmb sings\nmahal ingam\nm sch\nluther ville\nlondon town\nlilli an\nlewisp ugh\nlend ing\nlees ang\nlay asmine\nlaur is\nlast year\nland skrona\nl gu\nkey f\nkeon jhar\nkel ner\nkatrinapi erson\nkadı köy\njum bos\njose i\ni fra\nhy land\nhuss a\nhun grier\nhuck ster\nhondac rv\nhamble tonian\nhaji won\ngyneco logists\ngou let\ngol go\ngeneral aviation\ngc s\ngbag bo\nfragi lex\nfl anno\nfc business\nfasten ings\nfag un\nexi stance\neura si\nest ecker\nequal su\nepr df\ndou ses\ndiet l\ndefend our\nde plore\ndav pope\ndark sky\ndar ger\ndam pa\ncollector ate\nco sp\nclimax es\ncho com\nchar n\ncassand re\ncarbox amide\ncar ref\ncar naval\nca zij\nby k\nbruce prichard\nbowie forever\nboulevar dier\nblues brothers\nbluec ross\nbil bao\nbev hills\nbe venting\nbabest ationtv\nbab ay\natz maut\narc illa\naraf ah\nar ag\nann ane\nam etal\nale em\nald win\nah hhhhhhhhh\naf branco\nacce ssp\n;- ).\nðŁĺĭ ðŁĺĺ\nðŁı µ\nìĦ¸ ìļĶ\n기 ìłģ\nâĿ¤ \'\nâľĮðŁı» âľĮðŁı»\nâĺº ðŁijį\nö kull\nyas mani\nx lb\nwo da\nvote searly\nvoltag e\nuka itis\ntw ald\nton earm\nthof en\nthe antondubeke\ntessell ations\nswit z\nsturdiv ant\nspi v\nspec ts\nsoul sby\nslo we\nsj giants\nside mount\nsi et\nsi delights\nshrub sole\nsc ities\nsav aged\nsare thebest\nsarah grafferty\nsaint mirrenfc\nross all\nrocin ha\nrobin ince\nriver monsters\nqu ente\npur lo\npneumo thorax\npilipinas debates\npere c\npc mr\npar um\npaper back\npan til\nnu ma\nnb apra\nnano composites\nna shik\nmt gart\nmr schu\nmichellea z\nmegau pload\nmed line\nmatt le\nmaram ures\nmar torano\nmandel baum\nma ipo\nm ty\nm thood\nlu cc\nlifein apicture\nlepi dolite\nle ser\nlan ville\nl fn\nkil rea\nkil duff\nkay in\nkar war\nk mp\njonas blue\njin woon\njapan expo\nins berg\ninge ye\ninfinite simal\nind ar\ninam illion\nhusk isson\nhou ss\nher ter\nhen nes\nh fp\nguitar uk\ngom el\ngod ating\nfoo trace\nfinn jones\nfield ps\nfe ad\nfate stay\nemirate spalace\nelvisduran show\nele igh\ndysp horic\ndau bed\ndal le\ncollo quia\nco hle\nclari fications\ncla v\nchoir master\nchandrase karan\ncer d\ncdn tech\ncarry cot\ncan ina\ncajam arca\nca ino\nbusiness school\nbrown hills\nbox borough\nbor ak\nbig west\nbet d\nben well\nbarber motorpark\nbal by\nba aba\naz epam\nav isa\natur ns\narav ali\nam amos\na ção\n! ðŁĴ«\nðŁĮĬ ðŁĮ´\nìĿ´ìĬ¹ íĽĪ\næķ °\nâľ Ń\ná´ ¬\nwi sen\nwherearethey now\nweston supermare\nwar do\nw xc\nvertical farming\nv tu\nussk iteam\nur rea\nunder construction\ntus shkapoor\ntrans versal\nton n\ntodd terry\nthe kate\ntas os\nsubli mity\nsubed ar\nstop smoking\nstipp led\nspo ol\nson gever\nso haib\nsmu n\nskirk ja\nshen zhou\nshaun w\nshaun avon\nset suko\nsan ct\nsair force\ns than\nquir rell\nprog metal\npro mat\npr ati\nport age\npoli dori\nphi us\nper ls\npaper towns\npa un\np wy\np mh\np boro\noz s\nowler report\norak po\nor dine\noli gom\noc ton\nny gren\nnow play\nnot done\nno ory\nno kes\nnikifor ov\nnet ballers\nness man\nnam aqua\nnae em\nmovie actress\nmiddle wood\nmha feez\nmet life\nmelani ep\nmegan bata\nmeaghan rath\nmari ac\nmar steller\nlw anga\nlou kas\nline t\nlike an\nli ag\nlaure tte\nland holders\nla stampa\nl bg\nkk d\nkim jonghyun\nken za\nkat yal\nkali sto\nk mb\njustice forall\nju mana\njan ek\nis oc\nike chukwu\nicon ference\nic ome\ni mortal\nhydro philic\nhou da\nhotro d\nhind march\nheritag er\nhat pin\ngreenpeace uk\ngre x\ngoo ge\ngiga watt\ngerry dick\ngay weho\ngas conade\nfor ding\nfolklor ama\nfitness girl\neurefre sults\nerr le\neric decker\nemu eagles\nele giac\ne use\ne king\ndore mus\ndom biv\ncu tis\ncrank bait\ncranes bill\nclou ds\nclothing brand\ncling man\ncalifornia adventure\nbut chart\nbur gu\nbu scan\nboul mer\nboston logan\nbdn wheatkings\nbar um\nb zz\nay ziggy\nath o\nash kan\nash ankar\nart museums\nar lovski\nap gov\nand aya\najen ews\nafro z\nadam hillscomedy\nac grayling\nabish mathew\nðŁķ µï¸ı\nîĢ Ī:\nåľ ¨\nاÙĦع اÙĦÙħ\nza q\nz anni\nyum mies\nyou uuuuuuuu\nwriter sclub\nwhole someness\nwg ms\nwear red\nwales comiccon\nw cd\nvit ar\nvater drumsticks\nvan am\nun winnable\nuht red\nub co\ntx u\nthy pe\ntawad ros\nta jh\nswi de\nsveng ali\nstroke play\nstre ator\nstir k\nsol die\nslo f\nsf sketchfest\nsebastian kurz\ns bootcamp\nro cred\nrel le\nrain i\nqua shing\nqu or\npy xis\nproduc ers\nprakash raj\npir and\npatt il\npasqu ini\npari eur\np mik\noutnum bered\none show\nom h\noik ou\no tram\nnam pak\nmy cu\nmut ineers\nmosqu eda\nmontre zl\nmi thra\nmi roh\nmeji as\nmed aka\nmanchester fire\nmain frames\nmahoo sive\nmacn cheese\nma quettes\nluc ke\nlowes racing\nlondon eye\nlo lllll\nlaff ite\nki seop\nk wid\njody watley\njo a\nja akko\nipl final\niphone sia\nin memoriam\nihave adream\nhuiz ar\nhorse woman\nhom eric\nho ef\nhm ms\nhel las\nhart mut\nhar mandir\ngu pt\ngra flex\ngon char\ngh u\ngadget show\nflamin ia\nfaz lur\nfa rell\nether ic\nesh un\ner rs\necma script\ndream chasers\ndawg sup\ndan el\ncyto pathology\ncx nats\ncul verts\ncorner gas\ncolumbi arecords\nco ens\nclé ment\nchill ingham\ncha is\nbur la\nbudd leia\nbree de\nbou lud\nborden town\nbo ving\nbit ored\nbilly gardell\nbbcradiof oyle\nbbcradi okent\nbas ell\nbal me\nax id\naren dal\nap ine\nan tak\nan ky\nak osu\nair langga\nad au\n\' &\nðŁĺĤðŁĺĤðŁĺĤðŁĺĤ ðŁĺĤðŁĺĤ\nðŁĮŀ ðŁĮĬ\nìļ ±\né£ Ľ\nè¢ «\nâĢ ¡\nyaf fa\nwyn ton\nwoo delijah\nwinchen don\nwhereyou at\nwhatson in\nwalk together\nvoten ow\nvi seu\nval las\nun di\nulster bank\nu dub\nty bee\ntruecol ors\ntrack man\ntosc ani\nti kes\nten penny\nten no\ntem pests\nsword sup\nstra ph\nst cw\nsportb ild\nspec ters\nsophielady deparis\nslipper y\nshing ler\nser ved\nsei gel\nsal amand\nsai etam\nsa are\nruang bin\nru gani\nros elli\nrock os\nrishi kapoor\nreic her\nrd top\nrachi eskar\nrachieskar sten\npower trip\npope bars\nper rier\npas chim\nourtown ourteam\nom igu\nnote card\nner vi\nnational chocolate\nnarrati vely\nna ie\nn kab\nmontan ari\nme ha\nman gel\nma hu\nma am\nm ras\nlord shiva\nli ah\nleg ado\nlearning together\nlan cel\nlagun as\nla pe\nla bra\nkrewel layasmine\nkra ak\nkh ruangbin\nker stin\nken ney\nkellogg sus\nkan ani\nkai mana\nk line\njohno ates\njacc journals\nj js\ninn outburger\nie fun\nhum are\nhonori fic\nhog wood\nhistory today\nhappy spring\nhair pins\ngreen fingers\ngeis mar\nge wand\nfun ner\nfresh radio\nfree education\nfreddi eroach\nextro verts\neuro pride\nenation ale\nelm wood\nel ac\nedy the\ndumb arton\ndrop shipping\ndragon pride\ndorm ition\ndi el\ndesi gual\ndavis son\ndash ti\ndar yn\ndal am\nd wr\ncu scus\nct fcofficial\ncry wolf\ncorri endo\ncom yn\ncolla bro\nco ge\nco bram\nco bos\nclin ker\nchees i\nch ci\ncag ed\nbulldog ge\nbo ken\nbluedot festival\nbb alli\nbar nt\nbaek sang\nav anagh\nannon ces\nancestry hour\nalp ade\nak aw\nair fest\naga ints\nacce sori\nacade mi\n\' ~\nðŁĻı ðŁĴĸ\nðŁĺįðŁĺį ðŁijĮ\nðŁĴ° ðŁĴ¸\nðŁĴªðŁı¼ #\nðŁĴªðŁı» #\nðŁijį ðŁĩºðŁĩ¸\nâĢĶâĢĶ -\nziggo dome\nyour struly\nyoon kook\nwhom st\nwheath ampstead\nwalnut creek\nvisit neworleans\nvin ik\nvictor io\nvas co\nvallec as\nut aro\nun das\nugly ducklings\nu sparalympics\ntry sail\nthereal redman\nthe cc\nthe catch\nteam elite\nta kato\nswaraj ya\nsupportw restlers\nsuni dos\nsteve earle\nsp ms\nso gn\nsksk sk\nsecurethe border\ns giving\nross moor\nrosel ine\nrock line\nri yan\nrecal gary\nrec itations\nread by\nrazorback bsb\nrath drum\nrak hee\nqu im\npri ors\npri dgen\npre calc\nprat ama\nplay field\nperpetu al\nperpetr ate\npembro lizumab\npari etal\nparac el\noxford street\nop ere\no sin\nnyul angone\nnut job\nntw ales\nnew gate\nnear sightedness\nne wapp\nnal le\nnahu atl\nmor nig\nmo gov\nmiy ata\nmini ato\nmc caleb\nmass incarceration\nman tu\nmak ka\nma shie\nlincoln motorco\nleft most\nla hs\nl fe\nkru mping\nkolly wud\nkira kira\nkeys borough\nker zner\nke ad\nkathy najimy\nkappak app\njo st\nislington bc\ningh i\nilove monet\nier ce\nic hal\ni aquinta\nhom os\nhoho kam\nhin kson\nhawk shead\nhahahahahahahaha hahahaha\ngre mory\ngrazi ani\ngi rod\nghanaf aofficial\ngalvan ising\nfur se\nforamini fera\nfood hall\nfe ku\nfe igns\nexcre tion\nex py\neuro barometer\nesc anada\nepida urus\nepic research\nend ora\neh burun\ne weather\ndu bu\ndisambigu ation\ndesen zano\nde couple\nd stl\ncraw for\ncourte ously\ncor teo\ncor bally\ncooper ations\nclare ss\ncing ular\nchir inos\nchildhoo dobesity\ncann ady\nby ler\nbucadi beppo\nbru tus\nbrand design\nbl itt\nbig baby\nbethe force\nbeh naz\nbeauty products\nbbcsport scot\nbase balli\nban ki\nb drms\nay bar\nav lent\naus media\nar ghhh\nar dg\nap tnnews\nanne applebaum\nak if\nait zaz\nagul ati\nadmon ish\nabelli o\nab ic\n:) !!\nðŁĺĹ ðŁĺĹ\nãĤ¤ãĥ Ĭ\nz illi\nweg mann\nwat seka\nview bug\nvien tos\nvictor wanyama\nvar daman\nva sek\nuy uki\nuy ajola\nurin ates\ntun ned\ntu lane\ntranquili zers\nto victory\ntj dillashaw\ntimand sid\ntho lidays\nthe piecehall\nted wheeler\ntb s\ntam o\ntal anoa\nsupportthe swiss\nsun web\nsu ff\nstatik selekt\nstaffies aturday\nsri harikota\nsquare up\nsnar ks\nsm ate\nsh eart\nsax lokk\nsat su\nsas ana\nsantinof ontana\nsa st\nru the\nrr rawlings\nros sen\nron go\nroel of\nreal denise\nraz ole\nprovinci al\nprimer os\npot ties\npin ions\npatron ized\npas ukan\np smith\nou ji\nopen signal\nonepur suit\nol am\noh sc\nocean port\no pro\nnouri el\nnano pore\nn bi\nmr cc\nmr ancelotti\nmoulin rouge\nmon opol\nmj biz\nmic dro\nmi mmi\nmer anti\nmeg myers\nmatsu take\nmak ge\nlearning disabilities\nlanes boro\nlamb ada\nlam ers\nlac to\nla thers\nla hn\nku lak\nke fka\njeanne ret\njazz nation\nit cell\nindic ting\ni wai\nho dy\nhec ke\nha uk\ngwen n\ngrow ler\nglobal trade\nglaze brook\ngend arme\ngen nes\ngen ee\nge xpo\nfu er\nfrom nov\nfor bach\nfly guy\nfivea anews\nfilm director\nfeen stra\nfamil ys\netsu tough\neru th\neris kay\nepiso devi\nense i\nemb run\ndÅį terra\ndor able\ndj john\ndha de\ndeu el\ndal awang\nda aaay\ncul bert\ncosmic gate\ncom ity\nchi ana\nchau bey\ncharl ene\ncd cs\ncatt in\ncat ts\ncanadas wonderland\nbusines spro\nbur ts\nbrecken ridge\nbr aryn\nborgh ini\nbol lock\nbig room\nbi king\nbee flamb\nbeartooth band\nbe cht\nbaw dsey\nbarri ster\nbar dic\nbabylon ians\nato dos\nati ger\nartistre sidency\naristi des\narch ons\naquin nah\nalesha official\nade kar\nabar nes\nðŁĻ į\nðŁĹ Ĵ\nðŁij¶ ðŁij¶\nðŁIJ¥ ðŁIJ¥\nðĿĺ Ĥ\nâĸ ĵ\nภľ\nภ©\nyu ja\nyl t\nyan es\nya ha\nwwee volution\nwiden er\nwhite gate\nwautu th\nwas sen\nvy jay\nvoci ferous\nvivienne westwood\nvillar rica\nvili fying\nven nes\nvast a\nup allnight\nunivers iteit\nun encrypted\ntip the\nthermo fisher\nthe ecnl\ntake meto\nt bon\nsuc cor\nstor mi\nstan wix\nspl ans\nspar r\nsna sh\nsm caen\nskipp ack\nshireen mazari\nshan ola\nshanola hampton\nsh pe\nse gol\nscience innov\nschu errle\nsato shil\nsaietam hankar\nsag arma\nroy ndtv\nrogerk ver\nrichar dayoade\nrefin ers\nrec ency\nrational ise\nqay amat\nq ps\nprit char\nprannoy royndtv\nperri ello\npaulow nia\npatern alism\nparo dy\nox man\nno shoes\nni aid\nnational relaxationday\nnail design\nmy work\nmw amba\nmou sc\nmorwen na\nmit smr\nmcga w\nmas set\nmar ai\nmaple leaf\nman ea\nm ity\nliber ata\nlet there\nle fe\nland ini\nla paglia\nku hlmann\nking glass\nking air\nke c\nkal las\nk schi\njol lie\njeho vahs\nis so\nis forever\nis aca\niowa hawkeyes\ninfo blaze\ni zza\ni bru\nhot man\nhome fires\nhau ter\nhappy jiminday\ngric huk\ngri eve\ngold ar\ngo ian\nginacar ano\ngad h\ng police\nfrancis ville\nfer gie\nevalu ative\nent ure\nenamel pins\neleph ante\nduc tal\ndu rov\ndou bl\ndin om\ndiet ary\nde vol\nde is\nconstruc t\ncomence m\nci hi\nchit ter\nchickas aw\nchef slife\ncel ty\ncel anese\ncau sative\ncamel toe\ncalifor niag\nbuff o\nbrighton museums\nblack hearts\nbian co\nbac chae\nbaby shower\nazu cena\nat asco\nas ai\narap aho\nanni bale\nanne music\nancho ress\nan boy\nalo x\nal bam\nad alia\nab akery\n. âĢ¢\nðŁĺı ðŁĺĪ\nðŁĴª ðŁıĨ\nðŁİĵ #\nìħ ĺ\næĽ´ æĸ°\nãĤ £\nâłĢâłĢâłĢâłĢ âłĢâłĢâłĢ\nâĿĮ âŃķï¸ı\náµ ķ\nà° ¿\nاÙĦ ار\nайд ан\nza ke\nyan ick\nwu ld\nwoo oooooo\nwis casset\nwesten ra\nwell house\nwarner music\nvisit singapore\nvinyl mation\nvic hai\nvau tour\ntwitch ell\ntriath lons\ntopdrawer soccer\nthrom bus\nthe stormers\ntelerad yo\nsta ston\nsports marketing\nspor tn\nsli mmy\nsk un\nsk aro\nsiff ert\nshi ong\nshe aths\nschind ler\nsalvationarmy uk\nsacred heart\nsa ev\ns fts\nroll humps\nrodri quez\nresearch lab\nregi er\nrebellion racing\nreal jeffrey\nptc punjabi\nprep xtra\nportu gues\npic us\npha ya\nperkins will\npeng en\npe il\npavi thra\npanto graph\novers atur\nontari os\nob olus\noasi s\no keefe\no date\nnuc football\nni block\nnewzealand shooting\nnew pic\nne maha\nnbapra yers\nnb forum\nnatsci wk\nnati vist\nmut ter\nmulti strada\nmor awi\nmollu sks\nmicro organism\nmet zinger\nmeit ner\nmed anta\nmayo l\nmattb ourne\nmar saxlokk\nma juli\nm lo\nm hq\nlym phoe\nlu fisto\nky lene\nkom pakt\nkirch berg\nkim jiwon\nkim jaejoong\nkati el\nkali m\nkali kimaka\nk sco\niyan la\nikar uga\nhu u\nhog ben\nhay ami\ngujar ati\ngraywolf press\ngra ds\ngor is\nfron tal\nfor s\nflow in\nfir stuk\nfiel dy\nexper twitness\nexhum ation\nestro bel\nep silon\nee w\ndotte rel\ndock land\ndiss a\ndigi ov\ndel bonis\nde math\nde aky\ndd able\ndave hill\ncosi danews\ncos sette\ncooking channel\ncoo pe\ncoconut grove\ncoale scence\nclaress ashields\ncivit an\nch asse\nch alco\ncandid at\nbush heritage\nbu kitt\nbtsport football\nbor tz\nblm national\nbest giftever\nberlay mont\nber bera\nba ofeng\nathanasi ou\nart se\nare iner\napenn ines\nam undi\nalysi areiner\nalo tta\nal preps\nakh dar\nakak atie\nahadra zamir\nacram pton\nac custom\n? ..."\n... ðŁĺįðŁĺįðŁĺį\nðŁļ Ń\nðŁĩ¹ðŁĩ ´\nà´ ļ\nÄ §\nyut ani\nwont forget\nvar ty\nupri ghts\ntu pa\ntrape zo\nton ites\ntile work\nthor sten\ntere sina\ntech live\nsud ley\nstyle dotcom\nstrate gi\nstephen kamos\nspar ke\nsnel grove\nsharpe ville\nsemis onic\nsbse urovision\nsal sac\nsa ho\ns wnt\nrevenge ofthe\nrat ory\nrancher ia\nq tr\npiran esi\npicture show\npi as\npenetr ator\npattan aik\npaloaltontw ks\noul try\nos mani\nophy tes\nome gas\nole ds\nol inium\nof texas\nnfl honors\nnc wts\nnbak icks\nn newi\nmug la\nmonop rice\nmon áe\nmol fetta\nmohawk austin\nmo lest\nmo apa\nmir jana\nmiddle school\nmicro graph\nmecon opsis\nmc menemy\nmau romanzi\nman gam\nmal lah\nmac graw\nly kos\nlow brow\nlock n\nli mas\nleighton buzzard\nlang lais\nlale h\nlac ity\nkuch era\nkid sto\nkent in\nkell yosbourne\nkander steg\njourne yof\njohnny sauter\njenny slate\nje wison\nje ane\njaun pur\njame se\nisraeli apartheidweek\ninnovators mindset\ninfe ctive\ninfan cia\nindigen es\nin scri\niklan laku\ni bike\nhypo thermic\nhyper loop\nhy mers\nhar ge\nguar ini\ngreat lakes\ngood friday\ngf wc\ng pu\nflorid alife\nfer nan\nfeel my\nfat emi\nexport ation\nexpediti ously\nevidence based\ness y\neg ge\ned oll\nec ml\ndundalk stadium\ndown hole\ndo fc\ndeno ted\ndel tic\ndb q\nd ki\ncouples therapy\ncm da\ncine bl\nchth onic\nchelt litfest\ncharity jobs\ncasio pea\nby ington\nbuck nell\nbu kavu\nbrink worth\nbor do\nbog of\nbifur cated\nbhagy ashree\nbha sa\nbeech nut\nbb clondon\nbattle creek\naux in\natt itudinal\napu esta\nangel adu\nand counting\nðŁĺĪ #\nðŁĵ½ :\nðŁij¯ ðŁij¯ðŁij¯\nìķĦ ëĿ¼\nëįĶë ³´ìĿ´ì¦Ī\nç ¯\nâľħ ,\nâĺĢ ðŁĮ´\nà¤ı à¤ķ\nza anse\nz wer\nyon tour\nyo bs\nyearofthe bird\nyear old\nxx xo\nwomen against\nweapon ization\nwater berg\nwas me\nvail mtn\nun circumcised\nub ong\nu equalsu\nthe movie\nteh seen\ntaxcutsand jobsact\ntar u\nta wheed\nsuper kick\nsub tler\nstar ves\nstaff picks\nsqu inty\nspla ys\nsof fic\nsof america\nsher mano\nsher loc\nsheffield sharks\nshap ley\nshahi da\nsha hr\nsh ve\nser ps\nscifis unday\nscience isfun\nsat ra\nsaint louis\nro kko\nreyn or\nre tai\npro jared\npreven tive\nprest wood\npre cooked\nport us\npont cysyllte\npod fest\npet sitting\nperturb ator\npepper mint\npart agas\npal ay\nori e\noneof my\nno pressure\nnaray anas\nmy soul\nmy hre\nmurdere ss\nmund sson\nmoun ts\nmontour sville\nmesser smith\nmen with\nmedical tourism\nmed chem\nme azza\nmarsh alled\nman oran\nman ase\nles ss\nle auge\nlati han\nlat ini\nlass ical\nkelving rove\nkat barrell\nkam ak\njor da\njesper sen\njason momoa\njal ep\nira c\nic able\ni earn\nhan az\nhacker rank\ngrow ingthe\ngrand aughter\ngiant stalk\ngat ch\ng aca\nfurio so\nfor al\nflight plan\nfirst dogon\nfir dau\nfinal score\ner dal\nemer ic\neast carolina\nduc at\ndu enas\ndra gunov\ndilett ante\ndi aa\ndete sted\nde ferment\ndavid baldacci\ncu kes\ncu entos\ncoy gib\ncos way\ncof state\nco let\nchin apa\nchimp sin\ncat enary\ncardu elis\nbuck walter\nblue gills\nblair stown\nben nevis\nbday in\nauggie pride\natwater village\nas kra\narmy football\nalis al\nalebri jes\nala fia\nade adepitan\na itis\n... ",\nðŁĺį ðŁĴĥ\nðŁIJ¢ ðŁIJ¢\nåº Ĺ\nãĥŁ ãĤ¢\nãģĻ ãĤĭ\nâĨ ĺ\nย à¸ĩ\nب ÙĦ\nz andra\nye su\nye ho\nwinnipeg sd\nwin cities\nwil m\nwil dy\nwaz za\nwal ters\nvictory venkatesh\nvi el\nvel ika\nvej le\nus the\ntyrrhen ian\ntrze wik\ntri xx\ntravis fimmel\ntransvest ites\ntr ant\ntimefor wiltshire\nthebachelorette finale\nthe vijaymallya\nteam rubicon\ntax cuts\ntab ou\nstopthe pressure\nspu tum\nson ni\nsj m\nsemi h\nsat chell\nsapphi relv\nsa kon\ns sum\nryan sheckler\nrugby romania\nrn cm\nrebel des\npipp in\npaul kingston\npark let\npaint in\non zalez\nomni vore\nofficial foxes\nnive thathomas\nnext conf\nnewyork jets\nmongol rally\nmonday nigh\nmol teni\nmodi for\nmill sand\nmember news\nmechat ronic\nmayak oba\nmarriageequ aility\nman servant\nma rey\nm str\nly udmila\nlego starwars\nland race\nl kl\nkirky ard\nkir ani\nkil ic\nkeiyn anlonsdale\nkan awa\nkalisto wwe\njonjo oneill\njon ne\njohnny gill\njin hyuk\njd bc\njames ville\njag d\nja ip\nj clark\nj any\niz elos\nit rust\nin british\nig ins\nib v\ni pec\nhomolog ation\nholi er\nhead ford\nhappybirthday suriya\nh ki\ngli wice\nfro dd\nfon dre\nflag football\ney nsford\nen casing\nedy ta\nearnest ness\ndun ja\ndro pou\ndnrr ts\ndit official\ndistrict champs\ndinesh karthik\ndin ajpur\ndere kk\ndend rite\ndehuman ized\ncraft scounciluk\ncounsel or\ncou zens\nconven to\ncon uk\ncommu tation\ncolon izer\nco xy\nch ré\ncar star\ncan h\ncam ac\nblack musicmonth\nbhadra k\nbein sportsusa\nbean er\nballan trae\nbalag tas\nbad alamenti\nback ings\nay ork\nas gar\nall sorts\naldu bun\nakin ola\nai ir\nach ap\nabz love\nabsol ved\nabol ition\na heart\n(- _\n!! ???\nðŁĺĥ ðŁĺĦ\nðŁĺº ðŁĺº\nðŁĩ¨ ðŁĩº\nðŁĨĺðŁĨĺ ðŁĨĺðŁĨĺ\nâĹ¾ ï¸ı\nà¸į า\nà¤Ń à¤ķ\nz sas\ny igal\ny ho\nx sweat\nwon th\nwestlife music\nwe ahps\nvikh roli\nun certified\ntrish stratus\ntrishstratus com\ntran slivesmatter\ntor q\ntop cow\ntho resby\nsydney derby\nsun bel\nstol le\nsti verne\nstere otactic\nstage hands\nst ful\nson ge\nsl qld\nshow stopping\nshow room\nshakun tala\nsergi us\nsenator leahy\nsed ski\nseble febvre\nse gues\nsb meunier\nsatisfactor ily\nsalut ary\nsalmon arm\nsacro iliac\nrugby club\nrif fi\nrfr driven\nred squirrel\nrabin dranathtagore\npror sum\npresiden cies\npremi o\npe trick\npay master\noo hs\nonehappy island\non radionow\non dra\nold city\nni ma\nnd ong\nmy le\nmultiple xing\nmorning ireland\nmonday madness\nmo zi\nme urs\nmartin scorsese\nly nieg\nlou ella\nlittle more\nlegac yof\nle estrobel\nlancashirec are\nla skin\nla sch\nkhe da\nkang er\nkal icious\nka be\nj clayfield\nire alestate\ning season\ning ay\ninfinity ward\ninciner ators\nhv ff\nhun wx\nhol royd\nha gh\nguine an\ngrand hotel\ngr itty\ngol fe\nforhonor game\nfomen ting\nfla grantly\nfinn aly\nfat so\nfar ley\ney d\nent ra\nec fr\nearth changes\ne gli\ndvs bjp\ndutch sassenach\ndun ne\ndod gy\ndip day\ndichotom ous\nday ao\nda ja\ncul ter\ncrooz ef\ncrewe alex\ncontent creation\ncon very\ncom sat\nclimatec entral\ncin dere\nchoir boy\nchen es\nc grand\nbri stly\nbrew erton\nbragg ing\nboosie official\nbol on\nbisp hen\nbarbour ville\nau tent\nat exas\narmin ia\nari bbons\n$ "\nðŁĺĬ ðŁijįðŁı»\nðŁĶµ ðŁĶµ\nðŁİ¥ ðŁİ¥\nâĿ¤ï¸ı ðŁĻĪ\nઠ¿\nÙħ ØŃ\nzip lock\nzind ag\nzen y\nz hin\nyo hanna\nyan chep\nxen u\nww h\nwild horn\nwil tz\nwhist ling\nwatch nerd\nvj fan\nve eee\nv alia\nu vp\ntrans rightsarehumanrights\ntrac kies\ntr ong\ntoyo tat\ntop bloke\ntin dale\ntic kers\ntheodo sius\nthel word\nt Äģ\nt xi\nt life\nsuper furry\nsum ner\nstra thal\nstan sberry\nstag ey\nsoci alistic\nsimple minds\nsim guru\nshi pley\nsch mo\nsc ath\nsal kinstitute\nriyad h\nripp led\nregion alli\nre gran\nrab wah\nquan trill\npu ya\npu tre\npp en\npor tait\npo yer\nplang lobal\nox eye\nout ly\nnu mark\nnow ar\nnord kapp\nni kh\nnever forget\nne spress\nna ilogical\nmu kul\nmr sm\nmo hale\nmmor pgs\nmelli fera\nmediaev alis\nmed hi\nmd phd\nmascaren has\nmallikar jun\nma sha\nlor dand\nlisten ings\nlets work\nles doggg\nlac of\nkum is\nklu gman\nke ch\nkathleen lights\nkar d\njyo tika\njusty na\njimmy tatro\njere m\nje eta\njamal khashoggi\njac y\nivani sevic\nindistin ct\ninci pient\nic kes\nhush puppy\nht city\nho en\nhe kla\nguer os\nfood history\nflash tvwriters\nfa uns\nexten sibility\nevery can\neuro tour\ner da\nent ini\nelitch gardens\nef endi\ndublin ladiesg\ndj c\ndismoun ted\ndepu tized\nd ze\ncurbyou renthusiasm\ncook stoves\ncomeback home\nco di\nco chine\ncierr aramirez\nchristma sat\nchri sv\nchap ul\ncastell icycling\nbruce buffer\nbrownlee tri\nbra der\nboeh mer\nbezer ra\nbelievein science\nbek end\nband es\nban kin\nay ey\nas crs\nargu elles\nar ild\naniso tropic\name i\naltere go\nafate hi\nadri aan\nador as\n. __.\n+ +.\nðŁĺİ !\nðŁıĭï¸ı âĢįâĻĤï¸ı\nðŁ§ ¨\nப த\nyo hn\nyaf oods\nwoo de\nwith asmile\nwild dog\nwex for\nwacky wednesday\nvinogra dov\nvici ousness\nvan pool\nvan il\nvali dations\nvachi er\nurban ag\nur ate\nup ward\nunsun gheroes\ntom oki\ntit mouse\nthe full\nth ah\ntaarab t\nstopp ing\nsteve kornacki\nsports bet\nsmar ta\nsix flag\nshrey ast\nshashi kapoor\nsd pi\nrose mond\nrha egar\nrei ver\nran ter\nrac gp\nr nt\nquanti fied\npy bus\npre dating\npras tha\npi rogue\npay porte\np stn\noutra dio\nout size\non ita\no ez\nnt k\nnorr köping\nncp speaks\nnasty y\nnapp ingday\nnad z\nnab f\nmul enga\nmsc athy\nmon tie\nmo gensen\nmn gov\nmira bal\nmg book\nmenshealth week\nmen gi\nmelane sian\nlc willi\nl ound\nkap liskova\nkak u\njohn force\njoann ac\njam elle\nisal oniofficial\nillustration oftheday\nil las\nik oma\nid gi\nhyun suk\nhoo ker\nhome built\nhein le\nh ml\nh itec\ngun geon\ngrü ner\ngreater manchester\ngojay sgo\ngirlscout cookies\ngi elen\ngda ÅĦsk\ngateway msp\ngand ini\nfor migration\nflat worm\nfinalfantasy vii\nfet tuc\ney yc\nesp ence\nerry day\nero yal\nel t\ndubu isson\ndro ma\ndre x\ndont frack\ndom on\ndo ree\ndiony sius\ndic icco\ndaysof giveaways\ncour ter\ncomuni dad\nco ag\nclow ne\nclemen za\nclack mannan\ncivil s\ncate chist\ncash less\ncarlos vives\ncall toaction\nc jv\nbu suk\nbu soga\nbreaking dawn\nbrain awarenessweek\nboeing lovers\nbirch mere\nbic hir\nbenef ice\nbed does\nbc swx\nawwwww www\nau pe\nati shi\nas prin\narmy cadetsuk\nar um\namerican us\name me\namber rudd\nair print\na hahahahahah\n!!!!!!!!!!!!!!!! !!!!!\nðŁĺį ðŁĺĮ\nï¸ıâĥ£ âŀĸ\nãĢ ī\nâı ¯\në ns\nzha o\nz hir\nwomensmarchon washington\nwe yl\nwc x\nwalk outs\nw ampus\nvote selena\nvainglory game\nun blinking\nu clou\ntwat ter\ntrelli ses\ntrack way\ntom ino\nthewire magazine\ntheli brary\nth ly\nterm ly\nte vans\ntam pers\nsummer of\nstereo scopy\nstar in\nspatio temporal\nson u\nso called\nsl on\nsigma beauty\nshopp rs\nshopprs drugmart\nsevasto va\nse eu\nsally kohn\nror onoa\nri zz\nri xon\nredband society\nred cedar\nre imagin\nrathfr iland\nraman ath\nr vel\nquo ter\nqu ico\npur itan\npu ss\nprotec te\npro lac\nprin cy\npr icked\npioneer sports\npi hl\npc m\npaint balling\now boy\noper cula\noli mpo\nnewfound land\nnet w\nmulti polar\nms me\nmo hinder\nmetten berger\nlympho id\nlogi stically\nlock land\nlek ker\nker io\njas curtissmith\njap heth\njam rud\nissa char\nin schools\nic ba\nhil mi\nhereto fore\nhappybirthday tomhiddleston\nhappy camper\nhamilton police\ngrrr graphics\ngp news\ngore tober\ngetin the\ngar anti\nfor sch\nfirst nation\nfirel ord\nfe o\nexi le\neverything is\nescheric hia\nemmit sburg\nelec teds\negal itarianism\ned scifest\neag u\nds india\ndown burst\ndj sam\ndit ties\ndemo tt\nd zn\ncountyo fla\ncor rente\ncolom b\ncla ssc\ncivic engagement\ncircuit spa\ncer ita\ncb spittsburgh\ncase ys\ncad walla\nbuildthat wall\nbu rian\nbsnl corporate\nbru dder\nbrian dozier\nbrahma stra\nbor y\nbo gos\nblu eridge\nbio log\nbenzo yl\nbe lek\nbach pan\nask fc\nar haus\naq pk\nanimal s\nandrew garfield\nalex marquez\nafl cat\nðŁķµï¸ı âĢįâĻĢï¸ı\nðŁijĩðŁijĩðŁijĩðŁijĩ ðŁijĩðŁijĩ\nðŁıĭ ï¸ı\nãĤ¿ ãĤª\nãģ· ãĤĮ\nyu ha\nyo in\ny ooooooo\nwish master\nwis bb\nwin noch\nwiffle ball\nwh ch\nwas now\nwar sop\nwak ening\nw gy\nver gel\nvasek pospisil\nus gs\nty rer\nty lers\ntwilight zone\nthre estoo\nthe dani\nterri irwin\nte ez\nsr anieri\nspla sher\nsopra steria\nskysports golf\nsi bil\nshreyast alpade\nshipp eo\nshel lie\nsg haze\nserv ile\nsens orium\nsd ons\nsark cess\nsant al\nsag rad\nsa wang\nrey mond\nregent street\nre clu\nrayal aseema\nr kd\nquantumb reak\npy pchat\npu lev\npryn ne\npran am\nplacebo world\npj vfl\npis ky\nphoebe j\npaul malignaggi\npau lap\npar cheesi\noli an\noc ci\nobse qui\no hel\nnxi vm\nnoo b\nner ja\nneil gaiman\nnaf to\nmy on\nmutu alism\nmur d\nmil dert\nmicro brew\nmerz bow\nmel don\nmehe kf\nmary lee\nlun dell\nlucer omexico\nlo oooooooooooooooo\nle val\nle mann\nkru dd\nke dua\nkal itta\njustinbieber updates\njo stens\njae won\njack ingram\niz anami\niv t\nit our\niri sranieri\ning tons\nincon el\nilli m\nili kazi\nicon gress\niam humayunsaeed\ni ley\nhowit smade\nhiphop culture\nhighfive day\nhe tzel\nhe mic\nhat oum\nha aaaa\ngun du\ngoog lead\ng gie\nfuriou spete\nfood matters\nfire break\nev ang\nesk ridge\nen rico\nelectoral college\nef nd\ndemon io\ndas ari\ndan akil\ndaily bread\ncrosscu tters\ncot ours\ncommen taires\ncineplex movies\nchu ke\nchop house\nchae un\ncathy newman\ncan to\nc illiers\nbyrne offic\nbut su\nbush ranger\nbuild april\nblockchain news\nblephar itis\nbelle ville\nband aran\nbal ram\nautumne quinox\nat ate\narrivab ene\nanfer nee\nand ance\nan aw\namnesty online\naldi shodge\nald n\nalberta party\naha w\nac na\nabhi jeet\naashi q\n. ðŁĴ«\nðŁĹ ij\nðŁķ IJ\nðĿĺ ª\nï¸ıâĥ£ %\nç ¢\nåħ «\nâĿ¤ï¸ı âľĮï¸ı\nÉ ´\nysby ty\nwolf of\nwire taps\nwin nen\nweigh ton\nvis wanath\nvare se\nvar sh\nv mo\nu paz\nton t\ntoga dia\ntitmouse inc\ntir pitz\nthe goo\nthe en\nter psic\ntax returns\ntal mage\ntal espin\nsyl vio\nsword and\nsty mest\nstreet games\nstateli braryn\nstatelibraryn sw\nstar lit\nstan collymore\nspaz zing\nsk ender\nschlu ss\nricky martin\nri bon\nrep ta\nrelat edness\nream ers\nre pointing\nre grouped\nrd brwanda\nprivi le\nprimiti ves\npolitic shour\nplato oning\nphilharmon iker\npe cz\noutra ging\noutnumbered fnc\nound stone\nome coming\nnh ss\nne ills\nnatu real\nmustang monday\nmus kets\nmul ally\nmin ty\nmeth il\nme pauloavelino\nmargol yes\nmar sal\nmar lean\nmanage ability\nman joo\nmal volio\nlouise hay\nlo cky\nln dont\nlike sfor\nlein art\nlaurent fabius\nlau rak\nlang staff\nlake head\nl fb\nkö ni\nkut u\nkimjong kook\nkim chee\nkaz oku\njyrki katainen\njust wann\nindiebook sblast\nhyper glycemia\nhun ath\nhub ner\nhu en\nhel wan\nh pl\ngru dging\ngoth ams\ngir orosa\ngf dl\ngeoc ello\nfuen labrada\nfluor inated\nfal chion\nfad ell\nev am\nel or\ned urne\necm records\ndos barth\ndie sem\ndemon ess\nde michelis\ndale jarrett\ncu sa\ncre atec\ncoach t\ncher an\ncentri petal\ncentre for\ncc cu\ncañ ada\ncarpetb agger\ncap elin\ncamel ford\ncaliforni achrome\nbuz by\nbru cel\nbrit onedirection\nblow y\nbett pride\nbeth hart\nbasso onist\nbahau ddin\nbaaaaa ack\natleti smo\nassemblye lections\nasha ikh\nas usual\nari ola\narac al\nand harry\nand alou\namo dels\naffl icting\nad ric\nad ow\n................ .......\n.. ðŁĺ³\n" âĿ¤ï¸ı\nðĿŁ ı\nîIJ į\nìĭľìļ° 민\nâĻ¥ï¸ıâĻ¥ï¸ı âĻ¥ï¸ıâĻ¥ï¸ı\nâķ Ŀ\n๠Ħ\nÛĮ Ûģ\nzom b\nyas elf\nwonder ous\nwe oy\nviva x\nvictori afalls\nv do\nunder world\nultra suede\ntrafford centre\nthecameron boyce\nthe killing\nthe captain\ntech awards\ntabby cat\nsw gn\nstron omy\nstre s\nsto be\nsteer age\nstatedept spox\nspo em\nspeci aled\nson oma\nsocial saturday\nsli fer\nshow t\nscar th\nsaf adi\nroxeter aribbons\nroman us\nrock paper\nrock mart\nredbulle sports\nred fox\nram ar\nrade macher\npyri dine\npslon espn\nps ja\npra der\nporttal bot\nplay like\npern illa\npat miletich\npasse ig\npark haejin\npag ode\npack mensbball\npac ini\nosc e\noh sehun\nod ka\nocto bers\noc sd\nno vos\nnew amsterdam\nna she\nn he\nmz ilikazi\nmy future\nmun ny\nmu as\nmrmark millar\nmiccosu kee\nmatur ities\nmalay alee\nmake ssense\nmai sie\nmah nke\nmagdal eno\nmadon nina\nmac ul\nlocal love\nlist ing\nlife lesson\nli ot\nletter boxing\nlat ri\nlamar z\nkha rel\nkapp adel\nka ard\nk camp\njohnny orlando\njo geshwari\nit secure\nis yettocome\nir vana\nigh ted\nic r\nhoo kahs\nhell zarmy\nhappybirthday ssmb\ngo bison\ngille smarini\ngill mor\ngau dette\nfuture proof\nfondaz ion\ne tech\ndtop beautyworld\ndiam anté\ndi zen\ndar cie\ncrown royal\ncon ro\ncol er\ncoffee houses\ncho dy\nchi ao\ncer y\ncash master\nboys lax\nblack rod\nblack holes\nblack dog\nbig ass\nbig as\nbeau pre\naw p\naw oo\nau cd\nasi ant\nas cj\nas app\nartbasel miami\namo ss\naly ona\nach ro\naa shi\n!! ðŁĶ¥\nðŁĺį âĿ¤ï¸ıâĿ¤ï¸ı\nðŁĺ± âĿ¤ï¸ı\nðŁĶĿðŁĶĿ ðŁĶĿ\nðŁ§ ª\nê´ ij\nãĥ¼ãĥ ŀ\nãģ¡ ãĤĥ\nस म\né on\nzu ehl\nzent angle\nyu sh\nyoko ham\nyn books\nyamaham otogp\nx sd\nwu yi\nwhite oak\nvs v\nvend redi\nvashish tha\nty oung\ntwit r\nti ssa\nthelast airbender\nthe sz\nthe post\nthe fanatic\nthe batman\nthe barn\nthat ches\nter ah\ntech tip\ntam ente\ntake two\nsynucle in\nsy strom\nsummer learning\nsug u\nstill births\nstate visit\nspir ing\nsou ley\nsol at\nsir ken\nsham arie\nsd urham\nsale ha\nsab ena\nrosenber gradio\nroll chos\nrock ymtn\nrev richardcoles\nre formatting\nra abe\npyaar ke\npu dhu\nproperty investment\npron k\nprem peh\npoly morphic\nplains boro\npi fy\nparidhi official\nowen sville\nour blues\northo tic\norange county\none hit\noncein alifetime\nofficial fpl\noch il\nnoordinary park\nneed more\nna jm\nn wi\nmy voice\nmul loy\nmonopoli stic\nminne dosa\nmesqu ita\nmen za\nme sures\nmarketing derby\nmark bam\nmari aton\nmagni ficient\nmadagas can\nma bille\nly tic\nliquid metal\nline game\nl xi\nkoo b\nkap an\nk wo\nk kinen\njuice bar\njim town\njason taylor\njaku bowski\ninterro gator\ninsomni acs\nin orbit\nin cube\nilu lissat\nil ala\nhu p\nhotel chocolat\nhigh castle\nhi ggle\nharhar mahadev\nhar tt\nhal cones\nhain pyaarke\nh eneral\nguineap ig\ngreg cipes\ngra hi\ngordon sville\nghost light\ngeorge s\ngari bay\ngander bal\nflex time\nfish scale\nfight newsasia\nferru ginous\net trick\nei ge\neber hart\ne ile\ndzhok har\ndu mars\ndirection ers\ndinner with\ndelor aine\ndelac our\nde merits\ndari usz\ndan anda\ncor iginal\ncom port\ncityof stjohns\nchu eca\nch ya\nbul ling\nbuddy holly\nbru gman\nbri enz\nbri ans\nbreak sthe\nbrazil vs\nbon field\nbod mer\nblack ham\nbeer news\nbath lifemag\nbarber shop\nban y\nas chaf\nane gada\nand yl\nalways keepfighting\nafghanist anyouneversee\nacqu i\naco ach\nac red\nabb ington\n^ ;\nðŁĻĪ ðŁĺĺ\nðŁĺī "\nðŁĺĪ âĿ¤ï¸ı\nðŁĮĪ âĿ¤ï¸ı\nìĶ¨ ìĬ¤íĥĢ\nåħ ĥ\nâĿķ âĿķ\nz ica\nwiz ened\nwin co\nwhite boy\nwhi les\nvideo today\nves z\nvar um\nunite foreurope\nunic um\ntyphoon team\ntwcnews roc\ntren holm\ntoiletek prem\ntart aglia\nta ints\nsun daze\nstor ian\nsteff london\nste ez\nso hr\nsher gold\nshepp ard\nsean j\nsealteam cbs\nsd mc\nscott derrickson\nschwar ze\nsant olan\nsaad hariri\ns aper\nrep ú\nrein car\nrecou ped\nre mon\nraf typhoonteam\nprokhor ov\nprobation ers\npredic tion\npla sterers\npic public\npel sall\npe dium\npark hyungsik\npac ke\np ten\nor theast\nop sal\nop art\nold fashioned\noh snap\nof oundation\nnu k\nnsc n\nnoc news\nnl w\nnikki benz\nnik phillips\nni gri\nne ek\nnar singh\nn ulty\nmö bius\nmur komen\nmuj taba\nmt bs\nmobili er\nmo tti\nmin aur\nmil grom\nmei jer\nmeet me\nme len\nmatt kindt\nmarchin march\nmadhu kishwar\nlo fa\nliv tyler\nlilli putian\nligh thi\nli bo\nlfc tour\nleone tti\nlend ingclub\nl te\nky k\nkristy n\nkar asu\nk love\nitsecure gamer\ninv itee\ninter face\nin churches\nim hyunsik\nhyo sung\nhillsong united\nhiberni anfc\nhann um\nh wd\ngrime ys\ngreen leaf\ngom anga\ngof theweek\nger v\nger ring\ngeof fre\nfun hau\nfra ss\nfox holes\nfood academy\nflu dd\nferr one\nfau stian\nfal zone\nfairfiel dhalls\nes net\nenqu iring\near flap\ndud don\ndu pain\ndou h\ndon quixote\nde dan\ndam in\ndak shina\ncro co\ncraw lies\ncli m\nche pe\nch ona\nce bo\ncary atids\ncartoon saloon\ncapta insp\ncape zio\nc tica\nbuil ten\nblavat nik\nbigsky mbb\nbb najia\naw st\nato vic\narch icad\naniche be\nalz ado\nali mi\nale agu\naco aches\n, £\nðŁĵ §\nðŁĴ° #\nðŁį» @\nðŁĮį ðŁĮİ\nðŁĩ¿ðŁĩ ¼\nðŁĩºðŁĩ¸ ðŁĩ¬ðŁĩ§\nãĤ¦ãĤ ©\nâĺķ âĺķâĺķ\nâĸ¬ âĸ¬\nwindow pub\nwill an\nwester lund\nwemb ury\nwei z\nun wired\nu ih\ntrump world\ntradition alism\ntomor ro\nter apia\ntan nic\nswa the\nstri ppy\nst kitchen\nst ator\nspi aggia\nso ay\nsing appen\nshermano aks\nsha ima\nselek tah\nschir ra\nsali ence\nro castle\nrick steves\nrhy n\nregenerative medicine\nrahu lr\nra zy\npositivecoach us\npos is\npir aten\npi enza\nphoebej tonkin\npey roux\npenny mordaunt\npenguin book\nover comer\nott mar\norange shirtday\nor dos\nopen to\nopen society\nofsted news\nnomin ator\nnialla ppreciationday\nnew ent\nnab or\nn ão\nmy banff\nmusk er\nmusic box\nmun dt\nmtn training\nmol in\nmiz pah\nmind control\nmer sch\nmean green\nmarlon brando\nmarket day\nman ica\nlöf ven\nlusit ano\nloyal sock\nl bhf\nku f\nkri hanoff\nkindergar tens\nkgal ema\nker f\nkeg worth\nkal ba\njonm chu\nje ggings\nitu mbi\ni isd\nhur ries\nho del\nhashi motos\nhappy mondays\ngreenflash beer\ngjallar horn\nfun t\nfu ssing\nfreu denberg\nevening chron\nevan escent\nen stadion\nen li\nen eng\nemer y\neddi ggs\neber ron\ndys regulation\ndumfries shire\ndrive srt\ndown pipes\ndom ode\ndo vi\ndick ory\ndeal in\ndave eddiggs\ncyfarth fa\ncryp ts\ncro ix\ncro cody\nconju gates\ncma openaccess\nclo va\nciarab ravo\nchoic est\ncho es\nchel on\ncelesti als\ncar acci\ncape hart\nbuy itnow\nbur nishing\nbugs bunny\nbroad band\nbra ue\nbon usu\nblasphe mer\nbestin travel\nbaz oo\nazu mah\nat bristol\nasitis official\nasi asoci\napost ates\nannual meeting\nand ito\namar an\nalys sum\nalltogether now\nallinwith chris\nakh gar\naj opinion\nais yah\nade ma\nabi bi\nab dy\n[... ]"\n.. ðŁĺĺ\nðŁļ£ âĢįâĻĢï¸ı\nðŁĻĪ ðŁĻĬ\nðŁĶ¥ ðŁĺĤ\nìķ ł\nà± ģ\n° -\nzea xanthin\nyour quote\nyak umo\nwy rick\nweare bangalore\nwe mo\nwar lal\nwak rah\nvien nois\nveri fications\nuw gb\ntusc on\ntt ank\ntroy trojan\ntos link\ntil is\nthe struts\nthe square\ntax ila\ntahaj jud\nsyring a\nsyd al\nstra sberg\nstor ino\nsreed har\nsport news\nsouth la\nsoftware developer\nsk off\nsi ona\nshangha inese\nshack ney\nscou gar\nrv sed\nrockstar spud\nrm sothebys\nri pl\nproprie torship\npro ss\nphotograph ically\nphenter mine\nphase out\npe gging\npaul deveno\npart ys\np wa\nout put\nout ines\nor que\nok one\nnyakun dih\nnu suk\nnove m\nnew profi\nnet weaver\nne ot\nnb sat\nnapalm records\nmusical uk\nmoven pick\nmoss op\nmo so\nmi eri\nmets rewind\nmeta search\nmerry man\nmeh tab\nmar clay\nmaiden head\nlitur gies\nletsgo flyers\nlechu ga\nlari more\nlanter ne\nland trust\nlaber into\nklein hans\nkidap awan\nkat chi\nkam boj\nkal isz\nk é\nju bba\njorgeramos news\nj sw\niron bark\nine wa\nin oran\nideac ellular\nhey ne\nhex adecimal\nhemo dynamic\nhe ssen\nhaydn jones\nhand bills\ngru ene\ngrow the\ngretsch usa\ngooo al\ngood toknow\ngo sho\ngo sei\ngo il\nfreeall arrested\nfor bury\nfin cen\nfile maker\nfear rts\nevolu tionists\nes ben\nengle bert\neli ak\ndur can\ndit er\ndante wada\ndan rather\ndaler mehndi\nd jane\ncy world\ncomp ell\nclo ves\ncic lista\nchol angio\ncharlotter usse\ncar bor\ncap oue\nbuzz r\nbur goo\nbra sse\nbol dini\nboh dan\nbillion aire\nbha sker\nbemel mans\nbeach vb\nbarbar acrampton\nbar ik\naval kyrie\nau brac\nas cal\nappare l\nak ick\naa o\n\\ âĺº/\n) ðŁĺĤ\nìĻ ķ\nâĮ ¨ï¸ı\nÕ¡ Õ\nzen n\nyo te\ny allop\nwo tt\nweird beard\nw pc\nvogel sang\nvand or\nultra sa\ntrump colluded\ntriple m\ntimid ity\ntian men\nthree word\nthebold type\nth ops\nth oooo\ntess gerritsen\ntejas wi\ntaylor kitsch\ntar k\nswi ffer\nsu hsd\nstarted fromthe\nsr f\nsou dha\nsoon ish\nson theroad\nsoder strom\nsig ar\nsennheis erusa\nsch ley\nsant ner\nsa way\ns johnson\nru lon\nresi sti\nraj kapoor\nrad key\nplow right\npic keted\npha d\nper cept\nper alejo\npema quid\npatrio tic\nparas ympathetic\npak tika\norg is\norange amps\nol au\no jt\nnice day\nnat cap\nnandamuri balakrishna\nn indies\nmor ghulis\nmonk seaton\nmazel tov\nmat ura\nmariaton tini\nman si\nman kins\nmali shka\nmale fic\nmal tag\nmak ran\nmae gan\nma resca\nlove theatre\nlord swood\nloch gil\nlily hammer\nlicht man\nli kers\nli bia\nli bi\nley bridge\nla vag\nl ams\nkon itz\nkn aggs\nkar lis\nkam at\nkal uga\nkair at\nka on\njo brani\njim irsay\nja the\ni sim\nhywel dda\nhorn buckle\nhi za\nhekmat yar\ngu energy\ngratuit ously\ngo rebels\ngive way\nghay al\nfishing trip\nfis chetti\nfar da\nfabi en\neus kal\nes com\neco sia\ndu ar\ndenomin ators\ndel bene\nde hesa\ncoup de\ncor gi\nconstra ins\nco kie\nchiri qui\nchesney hawkes\nchange your\ncentral bank\ncb university\ncase mates\ncarra untoo\nca podi\nboy stown\nbloo dier\nble an\nbio remediation\nber til\nbar tali\nbar ryo\nbal ko\nb marshall\naw inner\naus geo\nath es\nash ami\nas ako\naquaf aba\nalle mands\nak havan\nagno sticism\nafl q\nafl power\nab sar\nab ong\nðŁĺĥ ðŁĺį\nê¹Ģ ì¢ħ\nÚ© ÙĪ\nاÛĮ راÙĨ\nä ger\nz wari\nz q\nyoung king\nyo joe\ny fg\nwpl g\nwmtw tv\nweare south\nvm wa\nviscer ally\nval ore\nuni part\nthe storyof\nthe crystal\nta fen\nt jr\nsure tte\nsuffolk wildlife\nsu thers\nsu mut\nsqu anders\nspringh ead\nso rey\nsin fully\nsimm s\nseme a\nse phor\nsarang ha\nsal sha\nsaga ins\nred turn\nram us\nradi onica\npre me\npolon aise\npo els\nplaystati oneu\npi hu\nphan art\npalu stris\npal misano\npab udget\noutdoor play\nout music\nont liberal\nold friends\nok amura\node tte\nnu star\nnews readers\nneural network\nn lighten\nn bbj\nmy artwork\nmscathy gonzaga\nmovie s\nmoen ch\nmit tee\nmi halik\nmenis cal\nmag ine\nmach loop\nlon garm\nlive veryplay\nlit era\nlingu ica\nlavat ories\nlau ber\nlat ona\nlang ata\nlake huron\nknu d\nkla ssic\nkin nikuman\nkad dish\njo dee\njap antour\njan ssen\nis cc\ninterior inspo\ninst al\nindian ambb\nin mortales\ni vens\nhumor less\nhead cover\nharvar dg\nhappy birth\nhani f\nhaha i\ngur gaon\ngun smithing\ngreat white\ngra ben\ngood read\ngim let\ngg ae\ngermanshorthai redpointer\ngeor geous\ng jer\ng adam\nflun ky\nfi p\nfat en\nexecu tors\nethno logy\nest alk\nel abour\nef arms\ne je\ndood lin\ndof fro\ndo ted\ndeutsch en\ndetermin ate\nde itz\ncre pe\ncorn u\ncoo tam\ncontinu ities\ncolumbia journ\nclassic films\nclaire holt\ncl ario\nchâ tel\nchief srugby\nchal ker\nch the\ncenter parc\ncaroliner hea\ncapric ho\ncan cun\ncan aday\ncam pp\nber land\nber dan\nban chan\nbab uji\nba aa\naustin healey\narmani exchange\nar jen\nanemon efish\nandre ana\nandreana vedo\nalu x\nabsten tions\naac tas\n\\\\ \\\n! ðŁĺ¡\nðŁĺİ ðŁĮ´\nðŁĺģ !\nðŁĹ ¯\nðŁĴª ðŁıĢ\nâĿĹï¸ı @\nâľĮðŁı¼ #\nyn hs\ny gl\nwise shopper\nwhatmakesme happy\nway bill\nvo key\nvo isins\nvampi rism\nuw f\nunce asingly\nun mentioned\nun impeded\nugly sweater\nuc chi\nu winnipeg\ntran sur\ntom ok\nthe odds\ntex tes\ntac tfully\nsyd fest\nstopbrexit save\nstin co\nsteven mnuchin\nsor tium\nsolom ita\nso tn\nsilvers miths\nsilke borg\nschotten stein\nsan zo\nsam winchester\nrust led\nru xton\nru tt\nroy ston\nrival schallenge\nrish fa\nrise again\nrig ours\nri or\nrepre zent\nrefe reed\nr antanen\npwn age\npure michigan\npro mark\nprithvi theatre\npride aux\npre spa\npre edy\npolyphen ol\npieceof me\npersoni fying\npalit choke\npa kor\nover flying\noo ow\nnifty warehouse\nne aq\nnay py\nnak usp\nn ør\nmuumu u\nmukun da\nmor ng\nmonth long\nmichael smith\nmetho dists\nmem ri\nmcallen isd\nmarkj weather\nmahindr aracing\nma wer\nma bus\nlc clondon\nku leuven\nklo of\nkir ill\nkant ner\nkalin owski\nk ichi\njuven al\njoe manchin\njesus freak\njenn colella\njem al\niwant clips\ninflam mable\nin ic\nif nt\nida ireland\nhudson sbay\nhert smere\nheati son\nhayden byerly\nhan nover\nh di\ngre tton\ngiff ard\nghis lain\nge sser\ngan ton\nfunhau steam\nfun t\nfuch sias\nfour five\nfonten elle\nfiber art\nfc basel\nfamily values\net pt\neri ff\nearl xsweat\ne map\ndy er\ndo jos\ndie ffen\nde files\ndavid c\nda ji\ncou shatta\nchi sholm\nche sh\nchannel uk\ncc dc\ncash time\ncar fest\ncalder on\ncald beck\nc india\nbway con\nbre ssler\nbi bis\nberg quist\nbeal ach\nbay shore\nbartol om\nbadtam eez\naz abu\nati sh\nappeti sing\nanti balas\nandre ja\nanand amayi\nalmaz an\nalit abattle\nali sher\nalexand ro\nakame gak\nai ves\nacon roy\nach ef\nabsur dism\nabhishek bachchan\n... ðŁijį\n! ......\nðŁĴĺ ðŁĺį\nðŁĴĥðŁı½ ðŁĴĥðŁı½\nðŁij ¢\nðŁıĢ ðŁĴª\nîĦĨ îĦĨ\në¶ Ī\nê° ľ\nÍ Ī\nwind ber\nwhat abou\nwen jun\nwe o\nver bas\nvalle lunga\nush kowitz\nurin ary\nuni directional\ntwin brook\ntwic elight\ntom udall\nto doro\nthreestoo ges\nther im\nthe je\nthe cam\nthe broad\nthe bol\nth nk\nth band\nteng en\ntam bora\ntai yo\nt ft\nsummer festival\nsu santo\nstark weather\nsor bara\nskin ks\nsil denafil\nshuben acadie\nse mm\nse j\nsan ilac\nsam ant\nsalesforce ohana\nsain tramrahim\nsaid hanshika\nsadhguru quotes\ns mic\ns key\nroev wade\nrif fe\nre constructs\npura skar\nprofun do\npres nell\npra vasi\npol kas\npo gs\npink hair\npepit one\npa de\np ú\norca dian\noni rose\noman is\no hed\nnu age\nnot vivoree\nno ty\nnico tin\nnewsc lt\nnct zen\nnascar salutes\nmrs gif\nmrsgif letcher\nmovie actor\nmour vedre\nmo gha\nmicron ized\nmi asto\nme myself\nmax illa\nmatsu shima\nmato sin\nmandy rose\nmak ens\nmag ala\nmadele ines\nma vens\nma snow\nloch end\nliving my\nlease back\nland sman\nkyr sten\nkrish nagiri\nkei ko\nkap ur\nkangaroo island\nkade tt\nka stur\nk dei\njust my\njonas son\njimmer fredette\njerry can\nintro biz\ninf n\ni era\ni dium\nhy del\nhul stone\nhistory matters\nhan dovers\nhampton roads\ngreif swald\ngold ner\ngim bel\ngau ci\nga res\nform labs\nforde ast\nfil ma\nfedor as\nfau stine\nfanta sizes\nfa oi\nf dn\nf bn\netou ffee\nentre at\nen ature\nelis sa\nel ddis\necol ts\ndemonstra ble\nde regulate\nde my\nde and\ndaz dillinger\ndallas comiccon\ndach stein\nd nam\ncustom shop\ncuis ine\ncox sac\ncorof in\ncontaineri zation\ncom modus\nci gi\ncelebs godating\ncarrieann inaba\ncap stan\ncampo bello\ncal ama\ncaf fenero\nbus sum\nbrown ells\nbrooklands museu\nbha sma\nbenji bananas\nbedro ck\nbe jewelled\nbe awesome\navi spa\nav go\natla irport\narmen trout\nanikan onirose\nandr é\nand ur\nand ale\namc kee\nab radley\na jac\nðŁĺŃ ðŁĺĤðŁĺŃðŁĺĤ\nðŁIJŁ ðŁIJŁ\nðŁĮ¸ ðŁįĥ\nâĿ¤ ðŁĮ¹\n⾨ ðŁĴĹ\nâļ¾ï¸ı :\nиРµ\nz ue\nyou ro\nwolf song\nwin ecountry\nwi eden\nwhispering bob\nwal las\nvinyl meplease\numi zoomi\ntwit te\ntv at\ntul fo\ntribun a\ntom sula\nto travel\nti zzle\nthisisirish food\nthi amine\nsyd nee\nsupp leness\nsu has\nsonic maxpro\nsomnam bu\nsnow line\nsme x\nsmall caps\nsky high\nsilk road\nshiv aj\nshibu tani\nsem la\nseaw alls\nseatt let\nsea otter\nschi ffman\ns ftp\nrosal ba\nrevent on\nrec sys\nre facing\nr ni\nplo eg\npe skov\nou trank\nott en\nong niel\none man\no sten\nnew mutants\nne onics\nmonk land\nmen sclothing\nmelane sia\nmedi mmune\nmcga han\nmary kill\nmark uk\nmar win\nmajor can\nmagal haes\nmadam ex\nmachine tools\nma bius\nlle gamos\nland art\nlady beard\nkur up\nkun gla\nkend zior\nk khh\nje ev\nit startshere\nin music\nin ish\nigers france\nhyp mic\nhouse hotel\nhome chef\nhere fords\nhe hee\nhay am\nhas bara\nhapp i\ngu ffey\ngitex techweek\ngit ane\nger gely\ngeo storm\ngate keeping\ngat ting\ngal oob\nfu ly\nfrom heaven\nfor deco\nfeni ans\nfantas ylg\nfair pay\neuro satory\nemmas later\ndown able\ndow en\ndi za\ndf j\nder aa\nde mu\ndan er\ndaaa amn\ncross on\ncon gs\ncivic a\ncircum navigating\nchampur rado\ncham ling\ncham ar\ncelebr itye\ncarrerac up\nbun nie\nbli ssed\nbant z\nbally mena\nbaby cakes\nare e\nantro bus\nanal o\namph lett\nal bro\nai ki\nah sd\n. ðŁ¤£\n( ^^\n! |\nðŁĸĸ ðŁı»\nï· »\nì² ¸\nâĺºï¸ı ðŁĺĬ\nà´ £\nÍ Ī\n ¶\nzind abaad\nyur man\nys ay\nwool folk\nwine shop\nwigan warriors\nwe u\nwau ke\nvi ole\nvam o\nun no\ntylero akley\ntu mi\ntree less\ntor ra\ntimo f\nti zi\nthemy scira\ntheben forster\nthe south\nthe hollow\ntel ma\nte vita\ntar quini\nta kaya\nt sou\nsub genre\nstell aracal\nss occer\nsno win\nsimon says\nshow you\nsep tima\nsch moke\nsave bsoazad\nsau de\nsaddle up\ns dogs\nrun ciman\nrow en\nrow botham\nrm hs\nri stor\nreco do\nre portable\nre groups\nre eagency\nra shaad\nquick quotes\npyroman cer\npuj ari\npu go\nprosely tizing\npirand ello\npick pocketing\npha sic\nph ryne\npeugeot sport\npetro u\npeter thiel\nperform in\npe trac\npani agua\npac ke\npa hari\np ge\nou risme\nod l\nnoval iches\nnewcastle hosps\nnew country\nneil d\nnavy blues\nnatural medicine\nmor atti\nmoon bin\nmihon ishida\nmic hon\nmesh el\nmck endrick\nmar stellaracal\nman ak\nmach aca\nlin thorpe\nlei dos\nlaur diy\nlamon gan\nl wt\nku sa\nkol hs\nkis ch\nki ano\nkeith richards\nkan sans\nk upa\nk club\njon kortajarena\njo ico\nj bt\ninsta quote\nineffec tiveness\nignomin ious\nici ousness\nhy yh\nhoo yah\nhippoly ta\nhealth month\nhal las\nhagi asophia\nh wi\ngob blers\ngn clive\ngnclive well\ngirl sss\ngan z\ngad olinium\ng ör\nfy ffest\nfriday freebie\nfree kesha\nfirst look\nfin acle\nfar maid\nfall river\nfala hee\nem mets\ne kin\ndon julio\ncran berry\ncoal mining\ncliff avril\nclas ica\nchurch land\nchugh tai\nchrist offerson\nchinese art\nchi veon\ncar acol\ncap tian\ncampe sina\nca kra\nbre z\nblack lives\nbit wise\nbeh nam\nbed ale\nbarry allen\nbar ral\nbalne ario\nbal krishna\nbadrinath ki\nback road\nauto dro\nattle foracause\nas sail\narte mi\napartment sfor\nap ba\nanand skfc\naldubb attleforacause\nagu ard\nad ino\nach eron\nabram ov\nab ente\nðŁĺĤðŁĺĤðŁĺĤ ðŁijĮ\nðŁĵ· ©\nðŁĮŀ .\nðŁĮ¼ðŁĮ¼ ðŁĮ¼\nìĿ´ì¢ħ ìĦĿ\nãĢ½ï¸ı ðŁıĢ\nzy gon\nzelmer low\nzak arian\nzabludo wicz\ny th\nwoo snam\nwon derer\nw trf\nw sa\nvocali ze\nv sop\nusc s\nuni kl\nun tried\nuclou vain\ntu gger\ntre gs\ntranscathe ter\ntom rw\ntom men\ntime slots\nthursday treat\ntho dari\nthen aked\nthe record\nthe hive\nteentit an\nte brau\ntailor made\nsur ti\nsun art\nstep children\nstandupp addle\nstan bridge\nsr lfc\nsportat orium\nsense mble\nsec ta\nseabourn cruise\nsalomon running\nsafe space\ns foods\nru ine\nredwood city\nre settling\nre fa\nran ong\nralli art\nq outes\npocon o\npiero gies\npi ppy\nperfect fit\npand as\np forz\nox igen\nor co\nofic ina\nnorth africa\nno dame\nnikk ic\nnicol led\nmonch hichi\nmon daw\nmo vers\nminim inter\nmin aya\nmilos z\nmedic aid\nmatosin hos\nmark jin\nmariash river\nmain aand\nlyon dell\nluc ci\nlemb ah\nlace work\nla king\nkschi thra\nkonop ka\nko tta\nko ek\nki bra\nkay le\nkann adiga\nint nl\ninfr inges\nin on\nim ready\nheavy duty\nhead lee\nhcp sarea\ngur s\ngor dano\ngo squirrels\ngo getit\ngilligan sisland\ngil breath\nfri ant\nfr ath\nfa thead\nes rd\nel j\ned elson\nec lass\ndv antage\ndown towno\ndomic iliary\ndo ber\ndi enes\ndevo y\ndebbie allen\ndang ly\ncurious er\ncrystal ball\ncre de\ncoor ong\ncokestudio africa\nclick ers\nchurch warden\nchar twell\nchamele on\ncar ica\ncad aques\nbrown bag\nbrock worth\nbo ere\nblackpanther party\nbla ker\nbin der\nbig ride\nbig give\nbha vi\nbecau ser\nballagha derreen\nbah ra\nbag y\nay aku\natter see\nathar vaa\nangel sinamerica\nanc afe\nan sara\namsterdam se\nam elle\nalmod ó\nali ot\nad amp\nac tioned\nac ron\nac el\na ana\n+ ).\nðŁ§ ŀ\níĶĮë Ŀ¼\n⼠±\nÅĤ a\nyung blud\nyo gend\nwick y\nweir racing\nwedem boyz\nwah ba\nw ame\nvishak ha\nveen endaal\nvee bha\nur schel\ntheros ary\nther ink\ntheo walcott\nterrac ina\nten yc\ntempor ality\ntele path\nteacup club\nte ems\ntc bc\ntafel musik\nsydneyo perahouse\nstrathal byn\nstee les\nsplen di\nspan ic\nsp olympic\nsou treach\nso tr\nskylar king\nshar ica\nshand ur\nsfu sd\nse cho\nsaving places\nsarah shahi\nsansevi eria\nsab aq\ns deb\nrosen bloom\nro jas\nrespe k\nredbull za\nre tra\nre housed\nra ham\nr do\npepe jeans\nout growth\non fd\non aga\nnurder hsv\nni ç\nnhs digital\nmy ron\nmy ne\nmy lfc\nmw ca\nmu rawski\nmthe mbu\nmon stress\nmil ledge\nmcca in\nmaxi priest\nmatan uska\nmasay uki\nmal hi\nma kabayan\nly rica\nlol wut\nlocal art\nlef in\nlead on\nle cu\nla it\nkyiv post\nkup i\nki anna\nkcr gwx\njoke day\njo ser\njeong in\njam bs\njalpa iguri\nj hay\nis ud\ningof the\nigre ja\nic ure\ni ones\nhunni ford\nhi mura\ngui yang\nguar do\nguan aco\ngrat on\ngrameen phone\ngossi py\ngoogleexper tuk\ngla zers\nge ers\nfun s\nfriende ver\nfri so\nfrees ample\nfree pick\nfleadh cheoil\nfit nes\nfamiliesc lose\nevi dential\neu h\nes ung\nepiscop alians\nem mott\nef conline\near wigs\ndougla ston\ndirects elling\ndem swork\ndel onte\ndeadly class\nde jeuner\nde caro\ndc shoes\ndarke sthour\nda aaa\ncra u\ncontinuou simprovement\nconfuci anism\ncomb ate\nco fi\ncleo bury\ncilli zza\nchiz uki\nchicken hour\ncay abyab\ncancer treatment\nc src\nc ml\nby ung\nbuzz cut\nbro war\nbro l\nbre cher\nblack by\nbilly tolley\nbee zer\nbam l\nbam a\nbake club\nbackedby aib\naz hs\naro b\nap ass\nanthonye tuggle\nanother magazine\nan art\nallegre tto\naftershock comix\nach hedin\naber tay\n! ðŁĴĺ\nðŁĻĤ ðŁĻĥ\nðŁIJ± ðŁIJ±ðŁIJ±\nðŁİŁï¸ı ðŁİŁï¸ı\nâĿ¤ ðŁĩºðŁĩ¸\nе м\nz anda\nyouthem powerment\nyl unch\nyam assey\nwomen with\nwinkel mann\nwh ay\nweis ner\nwater polo\nwar master\nvis cabarca\nvir ta\nven ia\nutter back\nun fussy\nuk orchids\ntour neur\ntime shift\nter kel\ntay son\ntamar ins\nta ipa\nsuperbowl lii\nsteph i\nspol sky\nsor okin\nsoldie red\nsk og\nshi ken\nse hs\nschulich school\nsay ing\nsagarma tha\nry leigh\nrocred wings\nrock n\nremor seless\nreed bed\nre deployed\npro tips\nplaystation vr\npel key\nparapar au\npalit oy\npa heli\noz amiz\nox alate\nofficial willow\nofficial triumph\noc tors\nnon commercial\nne do\nnai z\nmrtommy land\nmodel kit\nmen z\nme costa\nmay ash\nmato logists\nmaroo chy\nma hera\nlucky manzano\nltgov delhi\nlou rie\nlin derman\nleuci stic\nleez agibbons\nleeh sien\nle ino\nlaw making\nlaw are\nl zr\nkri ge\nkollywud cinema\nkirkle esc\nkhar is\nkarai kudi\nkapp el\njud moo\njb mauney\njay walker\nj ini\nitsar ush\ninter vista\nine f\ni six\nhow ler\nguardian witness\nguaj ardo\nglow up\ngis bergen\ngigli otti\ngertru dis\ngaming pc\nfran ti\nfluctu ates\nfishn tips\nff wd\nfab aceae\nfa illa\nemmaslater dance\nel ac\ndu dleys\ndu bbs\ndremil yamassey\ndog boe\nde use\nde oband\nde kton\ndaniel padilla\ndak shin\nda hisar\nd fc\ncorbin bleu\ncity bus\nchoisi won\nch fi\ncel entano\nbse india\nbrockle hurst\nbro dus\nbrit actor\nbritactor sfan\nborn free\nblogger life\nblack burne\nbird land\nbell labs\nbe fell\nbb cr\nbal laugh\nau nee\nastar oth\narag ami\napp ens\nan american\nalzheimer sday\nalmodó var\nal port\nair ings\nadeni z\nacol lusion\nach ary\n________ __\nðŁĺ© ðŁĴĶ\nðŁĶµâļªï¸ı ðŁĶµâļªï¸ı\nðŁĶ¥ "\nðĿij Ĵ\nìµľ ìĬ¹\nè¡ ĵ\nå®® èĦĩ\nâľĮðŁı» #\nاÙĨ ÙĬ\nyogur tland\nyarmol enko\nyankeec andle\ny sabel\nwri ddhi\nwire image\nwessel mann\nwar daz\nvis vim\nuttamav illain\nuchicagop ress\nubc tbirds\nty ms\ntu larosa\ntre bor\ntoyo tasa\ntou reiffel\ntor mey\ntoff oli\ntimber lands\ntiger football\nthisi sse\nthero se\nthelaw society\nthe ba\nter zi\ntananlam az\nsub o\nstage it\nspokane indians\nsocal gas\nsj games\nsi vi\nsi dd\nseta pak\nsavi ation\nsav arin\nroar ke\nro saleen\nrel an\nre gnier\nraiz awilson\nr dh\npy ré\nplate a\npavan wadeyar\npas sa\npar ki\npapad akis\npanneer selvam\npand anus\norange ade\no stara\no hau\nnostal gically\nnicolled wallace\nnde geocello\nnam po\nmy president\nmont ages\nmis sa\nmel bre\nmedline plus\nmcken nitt\nmat en\nmariek ondo\nmar oni\nmar ma\nma kan\nlivepd fantasylg\nladies fc\nl yoko\nku kush\nkor angi\nkom ple\nko g\nkkun drra\nkensington wm\nken oother\nkapil mishra\nk anner\njabarda sth\nic td\nhorn book\nha pand\ngrigor yan\ngit u\ngg f\ngeorgin io\nfreep sports\nfred matiangi\nfly fish\nfloren cio\nfla thead\nfl ers\nfirst group\nface spics\new snow\neri ght\ner got\nene sco\nelek trik\ne ick\ndt cc\ndrum life\ndol t\ndeod har\nde tracts\ncricket nation\ncoming back\ncochine al\ncnd world\nch our\ncdw corp\ncan ora\ncall o\nbu duc\nbrisbanecity qld\nbrett dennen\nbi eta\nbed wyn\nbed narek\nbar bu\nbacking green\nb icon\nashley banjo\nar tel\nan tron\nan bieding\nalbor z\naj mal\nahl berg\nabil is\nabatto irs\nðŁİ© ðŁİ©\nê´ Ģ\nó ria\nz art\nyork city\nyard goats\nwl ns\nwin nowing\nwin de\nwilden stein\nwild water\nweare marshall\nwe thu\nwatch fam\nwashington ville\nwage theft\nwac ke\nvocali zations\nunder manned\nun zip\ntrag icomedy\ntow boat\nto kimeki\nthor ton\nthelead cnn\ntar om\ntann eries\nsur co\nsreed haran\nsp inde\nsony xperia\nsocial science\nsmo te\nsma shedit\nsivas spor\nshop era\nshaunw keaveny\nshar bino\nshadow box\nse malam\nschro er\nsaturn awards\nsam at\nsal ameh\nsac ré\nroast y\nro kin\nrespe to\nre dis\nradio graphs\nq ni\nprescrip tion\npeter parker\nox ox\noun slow\noakham ales\nnor mies\nnitto tire\nnigh a\nnd grade\nnati vism\nmy cause\nmur derby\nmon arda\nmiss jillscott\nmindful monday\nmiddle weights\nmickey hart\nmelody jkt\nme tsu\nmcfar lane\nmasa ku\nmarchfor truth\nmaj e\nmainaand kingangi\nlwk md\nlec l\nlans downe\nlafarge holcim\nladu ree\nla ina\nla ffin\nkwame alexander\nkum manam\nkro kus\nkem boi\nke vitch\nke iser\nkathy raven\nkarun akaran\njeky lland\nje ga\njar lena\nirri gators\nin quests\nin ni\nic ot\nhomeaway fromhome\nho way\nhilari on\nheu mann\nhe ur\nharnessracing fz\nhappybirthday prabhas\nham bo\ngrybau skaite\ngran ter\ngrammy museum\ngoe ttingen\ngirl ss\ngigan tea\ngeor dies\nfv cking\nfromm ay\nfran kies\nfou cher\nfit ba\nevic ts\nevangeli ze\ner ol\nenter ovirus\neleph anti\ne eva\ndriverles scars\ndream work\ndoit right\ndis arms\nde funded\nde criminalise\nddfirish open\ndat en\ndar ach\ndaniel sen\ndani alve\ndance plus\nd brand\ncy d\ncory barlog\nconglomer ation\ncolle c\ncoach works\nclarine t\nchitra koot\nchir ur\nchandram ouli\nc vi\nburton wood\nbrek ke\nblu et\nbid ness\nbarry manilow\navery music\naudi gier\nattack uk\nar rabbi\nar ao\nar amid\nanc tified\nan society\namaz one\nam ooo\nallenand unwin\nair bn\naggie pride\nacc football\nac ini\nabkibaar modisarkaar\n^ =\nðŁĺį ðŁĴĸ\nðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥\nðŁĴª ðŁĺį\nðŁij¸ ðŁij¸\nì° ®\në ®¤\nãĤ³ ãĥ¼ãĥ\nâĺ ¯ï¸ı\nzi ak\nz wicker\nworking families\nwin dex\nwesternsydney u\nvar in\nu ep\nturkey hunting\ntre covery\ntour mnl\nthe mill\ntemer aire\nsur jit\nsub mit\nstan konia\nspinalcordin jury\nsouth en\nsor dell\nson david\nsimon books\nsi ron\nsi bert\nscot x\nscoo kies\nscare fest\nsantafen m\nsanc ti\ns sea\nrussiainvade dukraine\nrs no\nrose will\nrichard hawley\nram my\nprosecu tes\nprocli vity\npresidency za\npor ur\npod saveamerica\npag cor\npa yot\nott arts\nog na\no sports\nnieuwe marlean\nnewsal bany\nne villeg\nne mea\nmuradali shah\nmr cs\nmother house\nmont and\nmill sap\nmen indee\nmal asak\nmako ssa\nmake animpact\nlute fisk\nlot w\nli sk\nli i\nlegionof superheroes\nlate comer\nlat tice\nlake mba\nl bg\nkri sa\nkid life\nkhid mat\nkelli wardaz\nkari byron\nkappaalpha order\nk layton\njubi lees\njosh malina\nit ama\ninvest ni\ninternet billofrights\ninfec tiously\nilli quid\nic mr\nhy son\nhot an\nhen rico\nheming ford\nhellolove goodbye\nhear taches\nhead erfor\ngulf shores\ngreg j\ngre eley\ngor goroth\ngoe tt\ngh in\ngc sb\ngaunt lett\nfu xk\nfor ag\nfigure heads\nfeet sfriday\nfantasy league\nf ki\next ols\nelimin ators\neli ber\nele af\nechev arria\nead weard\ne anna\ndz rh\ndun levy\nduken ation\ndream fall\ndor ham\ndk weirracing\ndj sli\ndan quah\nd crising\ncyto plasm\ncri stela\ncrank case\ncount downs\ncorticoster oids\ncon con\nco readvocates\ncla va\nchry stia\nchiw enga\ncharle smil\nch hath\ncefal u\ncapp ucino\ncantab rian\nc wr\nc atters\nby uw\nbr or\nboye tt\nbir git\nbiopsycho social\nbest picture\nbell icose\nbbc newsbeat\nbath ampton\nbat alha\nbang arang\nbandit ry\nau tour\nassemb lea\nartificial grass\narchri val\nap fel\nandreja pejic\nan sal\namu jer\namph icar\namerican hero\nam sel\nam angala\nadapto gen\n. ðŁĺĩ\nðŁİī ðŁİ¶\nðĿĹ ¦\nðĿij ĸ\níģ¬ ëĤĺ\níģ¬ëĤĺ íģ\nëĵ ¤\n« «\nyy ys\nya hy\nx roads\nwhyi write\nwaite mata\nvidyar thee\nvarieg ata\nval gus\nvaj rayana\nutilit arianism\nusic ology\nundp nepal\nul rich\nuba id\ntur genev\ntracy morgan\ntr pg\nthe weather\nthe french\nterrit ory\nterr atech\ntemp t\ntele suren\ntelesuren glish\nte odo\nsv hs\nstyle inspiration\nstudent sfirst\nstu ttered\nstoo ped\nss art\nspi o\nsigsauer inc\nsharon stone\nser ban\nse akay\nscience center\nsaras wat\nsandi fer\nsam billings\nsal mi\nsak sham\nrub én\nroom nyc\nric keys\nri gas\nrei ley\nradi ore\npy are\npunk newwave\npromul gated\nprob ity\nprat ley\npin en\nph anie\npan in\nofficial somo\noel wein\nnws boston\nno thern\nnetflix andchill\nnbam emes\nnay er\nmylfc matchdayimage\nmy daily\nmy bad\nmultic ellular\nmoul ton\nmer redin\nmen hir\nmeach em\nmcclu sky\nmal ong\nluv v\nlooking up\nlogarith m\nlife sinked\nli scard\nleehsien loong\nlauter bach\nla pua\nko cian\nkil ob\nki pedia\nkar aca\nk hub\njo zo\njami ed\nj bf\niti me\nimmun ohisto\nhollow ay\nhelic arrier\nhan kyu\ngas ca\ngallery nucleus\nfore finger\nfo dera\nfast ener\nf ttc\nexer tions\nev ren\nelast omers\neis ler\negh radio\ned mc\neclec ticism\ndramatic tvactress\ndogge rel\ndile k\ndic tum\ndem townhall\nde eming\ndani o\ndaily artapp\nd pu\ncre ese\ncoton de\ncoo len\ncome tothe\ncolumb arium\ncolor ants\ncio glu\nchev rons\ncher ini\ncampa ña\ncall ousness\nbur kart\nbran dishes\nbrain port\nbps official\nbook design\nbess borough\nbed knobs\nbea del\nbe toftheday\nbas sm\nb ics\naw ow\nat tr\nat tala\nasi us\nas gupta\naround theworld\nando ther\namal thea\nalter cations\nale u\nal j\nail or\nag rill\nacon lin\nachi eng\nabc perth\nab k\n..... !!\n... ðŁĻĦ\nðŁĻĮ ⾨\nðŁĺĤðŁĺĤ ðŁĺĺ\nðĿĹ §\nè¡ Į\nâłĢâłĢâłĢâłĢâłĢâłĢâłĢâłĢ âłĢâłĢâłĢâłĢ\nÃł n\nzi val\nyuz uki\nyo sa\nx tz\nwarmest dayoftheyear\nwall man\nwab co\nvesper tine\nver hagen\nvaidy anathan\nuts engage\nuni one\nuk ko\nud yo\nubis of\nu ble\ntow and\ntoo tie\ntoo kes\nton us\ntheother palace\ntheor yo\ntham marat\nteam parieur\nteam marco\ntart us\ntarant ella\ntar sem\nsupportsmaller streams\nsubtrac tive\nstring ers\nstay ers\nst patrick\nspil sby\nspati o\nsor ay\nslat kin\nsi pos\nshare alike\nsel zer\nschill aci\nschan zer\nru lz\nrott nest\nren ter\nre start\nrashe ed\nquasi moto\npol ack\nplac id\nparty poker\npartic u\npar ri\npall ant\npaga dian\npa zz\nopen mind\nonu cle\nom ix\nodu ba\noc transpo\nnu zz\nnevilleg aunt\nnelli gan\nnathan caliendo\nmur ga\nmor iz\nmonta ña\nmoj govuk\nmc gorry\nmasseffect andromeda\nman tia\nmaj ima\nlu tea\nlode stone\nlef kowitz\nlaur amer\nla stra\nla quon\nku rashiki\nkingston uni\nkey logger\nkar upp\nkali dou\njust married\nju yal\njohn daly\nine ver\ninconveni ences\nholtren frew\nho efer\nhasan uddin\ngr rrrrr\ngen eric\ngab ap\nfredrik stad\nfra ile\nfl anagan\nfirst book\nf mcc\neri ko\nell ende\nee sha\ndu mo\ndown cast\ndo bry\ndivyankatri pathi\ndip onegoro\ndesi perkins\ndavid le\ncryp tic\ncort land\ncootam undra\ncolli o\ncla vel\ncin tra\nci rio\nce ann\ncau dal\ncary grant\ncan struction\nby hilton\nbudd leja\nbo gho\nbl art\nbis mil\nbirdr inging\nbilingu als\nbiggies malls\nbe kar\nbe careful\nbc boston\nbar sky\nbag naia\nav eli\nart books\naround thenfl\nant farm\namand am\nal over\nagra deci\nach he\nab ella\na beauty\na ade\n... âĻ¡\n! ðŁ¤£\nðŁĶĽ ðŁĶĿ\nðŁİ¥ #\nìĻ Ģ\nâĿ¤ ,\nâĺķï¸ı ðŁIJ¸\nÙİ Ùij\nzar os\nwj hg\nwind turbine\nwide format\nwhit nall\nwhist led\nwans beck\nuniof greenwich\nunder my\nu afootball\ntwitter arty\ntun ick\ntric ycles\ntri ss\nto fur\nthankyou lord\nterra zza\nter mas\ntellu rium\ntal abani\nta uri\nta official\nsupportw yo\nsqu anto\nsp edchat\nsor na\nshin da\nshi row\nsh ym\nscraw ler\nscam bridge\nsalmag undi\nru derman\nrit as\nricar dol\nredbull ring\nreal racing\npar x\npack able\nonthe table\nofficiali rishfa\nny ana\nnump ty\nn ellie\nmrschu reads\nmi ak\nmakge olli\nmahel ajay\nmac ondo\nlumi ere\nlive itup\nlegiti mizing\nlamor na\nlam ington\nksh mrmusic\nkit kat\nkin i\nkim itsme\nkelsey grammer\nkav adhu\nji ren\nji rayu\nji ley\njer rold\nisra r\ninter line\ninsur rec\ninocul ate\nino v\ninf urt\nin ther\nin skip\nill ings\nhul hu\nhs live\nhossein panahi\nho sford\nhfx gov\nhere ward\nhello kitty\nhan afu\nhal flings\nhad do\ngy ratory\ngoog learts\ngod ber\ngen nie\ngail kimitsme\nfutureis clean\nfootre sts\nflip class\nfirstdogon moon\nfiji water\nfant v\net one\nesof twitter\nen ze\nel ittle\ned ris\neconom e\nec rs\ndr pol\ndog man\ndirty south\ndikt at\ndichotom ies\ndeb harkness\ndanse use\ndaga anbieding\nd wor\ncut down\ncumbri auni\ncrossy road\ncros sen\ncot to\ncompare the\ncom ley\ncol a\nci le\ncc mfc\ncasc adel\ncas ap\ncab ella\nbu chs\nbrugman sia\nbraz ell\nbir dies\nbiblio therapy\nbehnaz akhgar\nb spencer\naz al\nautum ns\narqi va\nar z\nar ques\nandri ukaitis\nan ini\nan al\nam rap\nain da\nahwah nee\nadi alogue\nabo xer\nab dal\n... ðŁĺŃ\n) .\nðŁĺĺ âĺºï¸ı\nðŁĴį âĿ¤ï¸ı\nðŁİīðŁİģ ðŁİĪ\nðŁ§IJ ðŁ§IJ\nðŁ¥ĩðŁ¥Ī ðŁ¥ī\nê´ľ ì°®\nãĥIJ ãĥ³ãĥī\nâĢĵ ...\nम र\nÚ© Ø´\nyam ah\nversi ones\nusa rec\nunder ling\num g\nturi sm\ntune n\ntom greenlive\ntetra pak\ntessell ated\ntan auan\ntak ami\ntablo id\nsub domain\nstudent nurse\nstu hr\nstu bbins\nstrath more\nssoci al\nsociol inguistics\nsk la\nshrews morris\nshou ty\nsel vin\nsch unk\nsa ww\ns ago\nrose tta\nrene ef\nreligionof peace\nrefu els\nreduc tase\nredon da\nreal tristan\nrad or\nr ning\nprojec tion\nprofun dis\npop surrealism\nplym ou\npin on\npil ley\npe mc\nopen weight\nonce more\nom n\nom loop\nofficial itm\nny kv\nnucle o\nnove cento\nnim mayash\nnie miec\nni had\nni ge\nni eve\nnes sus\nnd sufootball\nnatur inaughton\nnash y\nnar m\nmr hs\nmotley fool\nmoren te\nmongre ls\nmol k\nmcelli gott\nmark mcmorris\nmani sharma\nmahesh war\nmahar aj\nlis se\nli pan\nlav ant\nlar ı\nkar avan\nkal inda\nka aris\nk dramas\njul quen\nju mah\njohn nosta\njethro tull\njar o\nit begins\ninve ctive\ninthe middle\ninstruc tables\ning bottom\nin sincerity\nim it\nhurl but\nhock omo\nhealth grades\nhe mat\nhappy jinday\ngreat read\ngh f\nge stede\ngaur ilan\ng biffle\nfx ck\nfrank ly\nfor charity\nfalci parum\nexplore tocreate\nexfoli ates\nestad ouni\nen id\nem cer\ndylan wang\ndull stroom\ndete sts\ndaysof happiness\ncoo oool\ncle te\ncl bv\nchitt y\nchap leau\ncatch me\nbush c\nbronchi olitis\nbroad street\nbo kor\nbig il\nbeltr ame\nbbc panorama\nbb bz\nbauhin ia\nbal ey\nb jr\nawe sum\naqu ilo\nantimal arial\nanti k\nangrybirds movie\namon dru\nal mac\nahor ra\nab os\nðŁĴķ ðŁĻĪ\nðŁĴ¯ !\nðŁijı ðŁĻı\nðŁijĢ "\nðŁıĪ ðŁĶ¥\nðĿĻŀ ðĿĻ\nðĿijĸ ðĿij\nâĸ Ķ\nÙĥ ر\nи ÑĤе\nzor ds\nzeit lin\nystr day\nyn p\nxiumin day\nwomen folk\nwind pipe\nwel ding\nwe pa\nwa ac\nvladimir putin\nvital ogy\nuni z\nunex pressed\nun dressing\nu tube\nu alber\ntor tora\ntony denison\nthor ny\nthereal autoblog\nthejeep boss\nthe flying\nstory corps\nstie ber\nste mp\nso al\nsin fin\nshiamak official\nshenmue hd\nsf aulkner\nsemantic web\nsarac en\nsar tain\nsammy watkins\nsak ya\nsac town\ns dept\nritu ally\nri shab\nri oux\nree de\nrealestate investor\nrat ers\nquad er\nq cd\npre dated\nportu k\nplan chette\npla iner\npink tober\npilo thouse\npar anj\npacker scamp\noutre ach\non elu\nobli gate\nnpl nsw\nnott jmiller\nnorthco teuk\nni ga\nne leg\nmy sad\nmust die\nmul tani\nmuen ch\nmsd honi\nminer alized\nmi ked\nmelbourne rebels\nmand saur\nmacro monday\nmacleod lisa\nma bon\nlunch special\nlove fool\nlo sch\nlist in\nlew ys\nlaurin burg\nlamin ck\nlaid ler\nkn auer\nkingsc lere\nkelly hoppen\nke mber\nk heim\nje anie\njan edu\njahn joyce\nja ey\nj nl\nj fb\nit ra\nirish athletics\ninvest ingin\nice pick\niam nathancarter\nia edchat\nhutter ite\nhong qiao\nhomi letics\nhand ball\nham burglar\nha eger\ngroup suk\ngos well\ngop shutdown\nglycol ysis\nglo ben\ngi aco\ngerring ong\nge bra\ngar do\nfruit and\nfein berg\nfat ma\nf ager\nerit age\ner la\nend ment\nei jun\ndro ege\ndown hearted\ndomode dovo\ndi mock\ndi gression\ndham mapada\ndell in\ndaniele wski\ncre aking\ncour tiers\ncortin as\ncook with\ncontextu alizing\nci pe\nchild actor\nchi usa\ncent conf\nce ducation\ncarol i\ncandy floss\ncan adam\ncab ri\nblue stockings\nbig hair\nber lyn\nbattle ship\nbass fishntips\naure ole\nas quare\nartscentre melb\narti ste\nard glass\nap ari\nan holt\nalph on\nalham dol\nal ano\naju da\nabq journal\nabil aa\naar ya\nðŁļĢðŁļĢ ðŁļĢðŁļĢ\nðŁĺĴ ðŁĺĴðŁĺĴðŁĺĴ\nðŁĺįðŁĺį ðŁĺŃ\nðŁĴĭ ðŁĴĸ\nðŁİĤ âĿ¤ï¸ı\nìĪĺ ì§Ģ\nç» Ł\nåı £\nà¸Ĺ ำ\nاÙģ Ø©\nÑĢом айдан\nyouknowyou lovethem\nwomen wh\nw tr\nuninterrup tible\nun treatable\nuk g\nuc susa\ntyne dale\ntri ston\ntim mies\nthener d\nthe breakfastclub\ntel er\ntail pipes\nsuren dran\nsparkle horse\nspac enews\nsoton bloggers\nsne ers\nsm lb\nshopif yl\nsch one\nsar us\nsale able\nsa kay\nrugby team\nreviv alist\nreadabook sa\nre sund\nqueen y\npropul sive\nprom out\npol sk\npo stol\npetron io\npecz wolle\npate y\npalm spring\nour councilday\nound le\noti um\nor pik\nor ne\nopera holland\nonlin eradio\nok ane\noj simpson\nobe tten\no war\nnw ssan\nnor afatehi\nnfl trainingcamp\nne agoe\nnbaf reeagency\nn vr\nmosque shooting\nmonster girl\nmiumiu official\nmay ben\nmares me\nmaic har\nmag li\nm din\nlyondell basell\nlo docom\nle em\nle corbusier\nlande cho\nland lines\nladies coffeehour\nkn filters\nkim es\nkihu en\nker shaw\nker no\nju bbly\njeremy shada\njeep neys\njare cki\nja jang\nisag enix\nintere sse\nindy fuel\nhi ggi\nhec kel\nhar io\nh á\ngrav ina\ngo kart\ngis ella\ngir llll\nge res\ngam bi\ngab r\nfu jimura\nfrog men\nforthe union\nff acts\nfe iler\nfatta hamin\nfamili ars\nevelyne brochu\neuro dollar\neu scienceinnov\neri zed\neri ously\neosinop hilic\nedward sharpe\ne ppie\ne jig\ne gil\ndy fed\ndued iligence\ndon nat\ndo ges\ndent i\nden ili\nde pil\nday in\ndata point\ndan acar\nconspiracy theories\nclo ying\ncl andon\nchoc taw\ncharger pride\nce se\ncarab iners\nc scc\nble e\nbi planes\nbe zal\nbat as\nbar ic\nbali kavadhu\nawu mia\napriv ate\nad fa\nacrif ice\nðŁĻĪ ðŁĻī\nðŁĩ· ðŁĩºðŁĩ\nðŁĩ²ðŁĩ ²\nìĹIJìĿ´ íĭ°\néĿ ¢\nÙģ ت\nØ® ÙĪ\nØ« ÙĤ\nzyl ka\nys w\nye sor\nyar ai\nya hia\nwheat croft\nwap ello\nwant in\nvo p\nvir ushka\nven yc\nuse lessly\nun tagged\ntw en\ntsu ji\ntre zor\ntn ks\nthelast word\nthefla bar\nteam r\nstrongman burner\nstra ks\nstoy show\nspor tv\nsom ani\nsof er\nsneaker holics\nshore ham\nshar nbrook\nsc broncos\nsays thanks\nsarah jan\nru pesh\nroc que\nran sparent\nquarter maine\nproven ce\npower wolf\nph onic\npeter reckell\nperturb ations\nperth saint\nperiscope tv\npere stro\nparty like\npartnership working\npar le\np vo\nori fic\non thames\non se\nod deven\nnt pol\nmy job\nmon sun\nmoment a\nmo hawke\nmj h\nmississ au\nminority report\nminer alisation\nmin cing\nmil ius\nmax in\nmarket smith\nmar griet\nmai ley\nlong town\nlisan andy\nlion t\nlam born\nlack o\nkyo ka\nkiku sharda\nkad okawa\njehovah swit\nj ú\nj heel\ninstitutional isation\nili on\ni yogibabu\nhu gest\ngreen bonds\ngra ze\ngra da\nget surrey\ngell horn\ngat ron\nfuel ledby\nfreddie mac\nflye ia\nfer oz\nf official\nexoplane tapp\nex one\nerin andrews\nentren ching\neltonjohn dotcom\ndz ire\ndrug policy\ndre bin\ndecor s\nde classification\ndalecar negie\nda than\ncryo sphere\ncrooked media\ncreative coding\nconcert series\ncel t\nce si\nbra zza\nborder line\nbook ofthemonth\nbobby deol\nbo vespa\nblue marble\nbit ola\nber man\nbench mark\nbel man\nbar bap\nbad illo\naz ore\nat ering\nand one\nan dere\namdav ad\namb h\namazing world\nale ment\nal verson\nal caz\nac tr\nab caustralia\naash to\nðŁļ ¤\nðŁİħðŁı¼ ðŁİĦ\nðŁİĤ ðŁį°\nðŁĩ²ðŁĩ¯ ðŁĩ²ðŁĩ¯\nðŁĩ µ\nãĤ¹ãĤ¯ ãĥķãĤ§ãĤ¹\nâĢ¦ /âĢ¦/\nzz ap\nyoung sheldon\nym piad\nwyn and\nwomen at\nwilli g\nwe cam\nwan less\nwald ner\nvil ar\nvi stap\nvb hardwaj\nvag h\nus now\nuri arte\nur baine\ntru ssed\ntru del\nto god\ntitansof cosplay\ntimb res\nthisi smo\nthink different\nthe empty\nthames and\ntec tonic\ntat yan\ntal aat\nstudi ob\nstar mall\nspanish wine\nspace plane\nsonyo pentennis\nsonic youth\nsom osc\nsolfe ggio\nsmar tie\nsiame se\nshore side\nsho tof\nshe han\nshark friday\nsh man\nserv ator\nsen dit\nsaw bone\nsave forever\nsage steele\ns burning\nrohit vbhardwaj\nrock centernyc\nriver head\nricer ca\nrestin power\nraise theroof\npresent ation\nprepar ando\npose fx\nplain smen\npic turi\nphotome tric\npen alizes\npaint ourcountryred\nout land\nou lihan\nont sciencectr\noff man\nny saf\nnun obetten\nnix es\nnik khil\nnav orro\nna ini\nmw ff\nmsu bear\nmont au\nmittel stand\nmi ahamm\nmedi apro\nmarcus rashford\nmale fic\nly sette\nlunatic fringe\nlover anch\nlik elier\nlandol akes\nku bas\nko djia\nkel an\njo bling\nji ayi\nj simpson\niñ aki\nim fact\nical cio\nholy prophet\nhk n\nharms worth\nhapppp py\nh gst\ngovisit donegal\ngear hart\nge mc\nfur r\nfromthe heart\nfreedom for\nfree bet\nfirst data\nepisode ix\nemoun tain\ndrimn agh\ndni propetrovsk\ndi ffs\ndev yani\ndesol ated\ncyto toxic\ncro pland\ncou pa\nco yy\nchristi ano\nchar ring\ncfas ummit\ncel lier\ncatt olica\ncas ely\ncar ron\nca they\nc suf\nc family\nbusiness world\nbu ong\nboo ooo\nbluebull srugby\nbest cover\nber tini\nb po\nb hide\nazam garh\narul nith\nanne hill\nanight club\namo u\nak sha\nair lifting\nab baf\nðŁĺĺðŁĺĺðŁĺĺðŁĺĺ ðŁĺĺðŁĺĺðŁĺĺðŁĺĺ\nâĻ Ŀ\n| âĢ¢\n| "\nyoun gent\nye lem\nx mpp\nwuor nos\nwrong doers\nworldwar z\nworl don\nvisi ón\nver su\nup one\nu cks\ntweeds muir\ntwd season\ntu fn\ntravis mills\ntran sasia\ntour an\ntot teridge\ntin man\nti ë\nthelad bible\nthe code\nthd specialt\nthdspecialt yops\nte poz\nt way\nt cb\nsydney harbour\nsura gi\nstro zier\nstay stron\nstar bird\nsqui shing\nsouth yarra\nsmall streamer\nskan ks\nsk imo\nshey i\nshaw kat\nsha di\nsece ded\nse de\nscul thorpe\nscal endar\nsay antika\nsaras vati\nsar afina\nrtel atelateshow\nroberts bridge\nri ser\nretro game\nred dragon\nreceipt bank\nre sour\nre nier\nra fan\npli ant\npinstripe bowl\npicof day\npear ly\npaladins art\npaci fied\nour planet\noikou mene\nnorman scat\nnfl gameday\nnewzealand terroristattack\nnat bookfest\nn ées\nn dogo\nmur ra\nmog wai\nmo kel\nmo bot\nmitch ells\nmin ner\nmer rick\nmen il\nmee go\nmat v\nmat eu\nmalate sta\nlund by\nlon glo\nless lie\nleip sic\nku las\nkit by\nke ala\nkan kar\njeffrey deanmorgan\njan an\nj iri\ninter aksyon\nin articulate\nhibern ates\nhfd cathedral\nhemost asis\nheidi montag\nharps well\ngri mble\nglu ckman\ngif tv\ngerard cosmetics\nfordair show\nford fiesta\nflying lizard\nfa zel\nendic ott\nem boss\nelen aof\nel row\nel al\ndiv ada\ndisp lease\ndis neys\ndigital inclusion\ndif fi\ndaniel pink\ndam aja\ndab u\ncuri g\ncur vil\ncompli mentday\nchicou timi\ncep heus\ncc am\ncasey stoney\ncalpur nia\nby polls\nbryl creem\nbre mont\nbox elder\nboom afoo\nbook tweeter\nbolly spy\nbig land\nbho pal\nbend y\nbemore bulldog\nauto didact\nat will\nann ayya\nal thy\nal ila\naf zal\nachil lea\naap ki\n. âĺĢï¸ı\n-------------------------------- ----------------\nðŁĴĹ ðŁIJ¾\nìĨ IJ\n人渣åıįæ´¾èĩªæķijç³» 绣\nÆ Ĵ\n¨¨¨¨¨¨¨¨ ¨¨¨¨\nzwar te\nzu biri\nzo gby\nzah ra\nyour style\nyes yet\nyash ar\nwei den\nveloci pede\nvan doorn\nuse dom\nup setters\nunmiss media\nun amused\nu ise\nty to\ntru triciahelfer\ntrans gress\nton bori\nthum amina\nthe sergiogarcia\nth planet\ntarge ted\nsy kora\nsw j\nsuppre ssants\nstree ting\nst patricks\nsports network\nsle at\nshiv amo\nserj tankian\nseago ville\ns oper\nroes ler\nriv kin\nrin king\nrel ite\nred l\nre go\nrc pe\nray rice\nque ss\npuntag orda\npoetry club\npl w\npet teri\nparac lete\np texp\noviya army\notta way\nole k\nnrl south\nng w\nn ber\nmorro co\nmic ca\nmeinl cymbals\nmar kova\nmanji mup\nmanav gat\nmalai kaarora\nmade lein\nmad ingley\nmad ill\nmad diec\nmacau gp\nm sian\nlogro ño\nlittle wood\nleon arda\nkol la\nko stic\nkeep grinding\njung koo\njulien solomita\njuilliard school\njaime murray\nitsoknotto beok\nir furugby\niphonex r\ninterrup ter\niam kevingates\nhypoten use\nholm quist\nhistri onic\nh gw\nguildhall school\nguant á\nground out\ngood trouble\ngoian ia\ngo pis\ngen ix\nform alin\nfilm friday\nfe tus\nevry thing\neudat ap\nestor il\neri sta\nep ines\nemil ys\nelisa bet\neli el\nedward norton\necor re\nechever ria\near ther\ne kywx\ndramati sation\ndo tan\ndism ally\ndia gh\ndi photo\nden el\nde ko\ndann yo\ndal bir\ncudd yer\ncon fort\ncommunity first\nclanc ys\ncharlesmil ander\ncau tioning\ncarre ra\ncad le\nby noe\nbro eck\nbrian may\nblue family\nbit me\nbil ayer\nbie bers\nbi ene\nbhu pen\nbeit bridge\nbat ala\nbas smaster\nbapti sing\nbad ak\nb ico\nar trave\nanu sh\nano tti\nang ley\nanaly tically\namor gos\namanda seyfried\nama hal\nakamegak ill\nair craf\nadi son\n[ ..]\n.. ðŁĺĤðŁĺĤðŁĺĤ\n## ##\nðŁĴĹ ðŁĴĭ\nâĺº @\nâĦ ĵ\nzen er\nyeezy season\nworkat bmo\nwil cox\nweare lions\nwater foot\nwat more\nvintage finery\nvanqui shing\nucbt la\ntw b\ntra ks\ntiru vann\ntheatric als\nthe peoples\nthe fresh\nthe culture\nterry ville\nter ate\nsyncop ation\nsubo dh\nsu steren\nstyx theband\nspir anac\nsl pp\nski e\nshur tle\nshu bin\nscor chers\nscorchers bbl\nscam bill\nrø de\nry uu\nrun day\nroyal nottingham\nroseng arten\nroo ters\nro ved\nrestorative justice\nrec d\nram k\nproduc ts\npral ines\npo hn\nphon te\nperry farrell\nopp en\nom entum\nolivi as\nol inger\noil prices\nnucle ation\nnoo ksack\nnikkhil advani\nnem rut\nmuzz in\nmuzi ek\nmul ligan\nmont seny\nmonster shockey\nmoney lifers\nmo sk\nmitt a\nmi thi\nmchen ry\nmay il\nmate ch\nmar jane\nmak ris\nmac aluso\nma bley\nm mol\nlions roar\nlimb u\nlegend sneverdie\nku si\nkqed news\nking crimson\nkar ok\nkane shiro\nk jal\nju gni\njm sdf\ninform ación\nin adequately\ni bid\nhend ryx\nheat world\nhard head\ngu lags\ngrand vintagefinery\nghar afa\ngar zon\ngallinu le\nfutu h\nfried rice\nfrey tag\nforever faster\nfluid ly\nfli kis\nflat sharkfriday\nfer it\nf tir\nev ng\ner kan\ne od\ndé but\ndz mm\ndyou th\ndogre scu\ndixie chicks\ndisc ordia\ndi ge\ndefen siveness\ndead of\ndac arter\ncom eta\ncm madhyapradesh\nchi architecture\nchennairain shelp\nchange agent\nce sta\ncategor ising\ncamp illo\nc cam\nbw ca\nbrendon hartley\nbreeze wood\nbon soir\nblue diamond\nblack pride\nblack moor\nbla sé\nbicycle day\nbibek debroy\nbergü zarkorel\nber nd\nbel apur\nbeav an\nbali ke\naz ri\naud ley\natt ini\natmosph eric\nash bar\nas ale\narulnith itamil\narte verywhere\narom ero\nappell ations\nante y\nalexiso hanian\nalder maston\nah g\nacon ite\naard wolf\nåĽŀ æķ°\nåĨįçĶŁ åĽŀæķ°\nöster sund\né ire\nà ¿\nzoek ravitz\nz inner\nyak ushima\nwood art\nwilliam morris\nwhites ell\nwest ling\nwe sti\nwall onie\nver ka\nvan badham\nuni fortheunion\nu mac\nto cs\ntiv ation\nthe tapi\nthe hsf\nthal ic\ntele babad\ntc boe\ntar kwa\ntan trik\ntac chini\nsustainable seafood\nsu chy\nstin ky\nspini fex\nsomer sethour\nskil ton\nsepul ch\nsci enza\nsang ster\nroad and\nres su\nrelation ships\nre so\nrand on\nraim und\nradi kal\nqu ater\nq lowes\npurpose less\npow pow\npix s\npetri fied\npaul fox\npan american\npa korn\np canada\now ls\nou ton\norig nal\non tour\nomo bile\nodi ya\no tunga\nnur ture\nnrl bulldog\nness week\nmon em\nmo akley\nmma worldseries\nmazz arri\nmayor gregor\nmaking it\nlo aiza\nlie bing\nler ay\nleng let\nla vac\nkon tor\nko thi\nkill star\nkhan e\njo konta\njer wood\ninner strength\nin cirlik\nin ap\nim un\nillion aires\niihf hockey\nhu mmm\nheather smusical\nhe arers\nhard talk\nhappy min\ngu sev\ngre athe\ngayath rie\nfli es\nfeno kee\nengineer sday\nenamor ada\ndu lli\ndro yal\ndewy ze\ndepart amento\ndenili quin\ndanielle peazer\ndanialve sd\ndanacar vey\ncymb al\nconcur ring\nco ins\nclari fier\nchol ar\nchi el\nchasti sement\nbug zy\nboon dox\nbody positivity\nbloodh ound\nbla go\nbi agini\nbath bomb\nbaby parts\nb pt\nawe bster\nash all\narr ancar\naq a\napal encia\nallegh en\nagains thate\nadventure dub\nadsby google\n! ðŁĮ¸\nðŁĺ³ ðŁĺĤðŁĺĤ\nðŁĺ³ @\nðŁĴĥðŁĴĥ ðŁĴĥðŁĴĥðŁĴĥ\næģ ©\nä» Ļ\nà¸Ħภ¥\nÏ Ł\n~ \'\nyo gar\nxmas gifts\nwmc actionnews\nwearit pink\nuof california\nukho zi\nuk coastwalk\nu hud\ntu shy\ntriste za\ntrek segafredo\ntrance music\nten sioned\nteam wendy\ntake warning\nsto dge\nstar dock\nst joe\nst fest\nsrish ty\nsri hari\nsony pic\nsol arc\nsiyab onga\nsirr fs\nsignor ia\nshe el\nshar q\nsel z\nsee tha\nschool shooting\nsali k\nsal aah\nsad atx\nrockos modernlife\nrit suko\nri mas\nreinde er\nre applied\nrat te\npri ses\npp sells\npir on\npavlyu chenkova\npapri kash\npalazz olo\npac kexpo\np alike\nousp lants\nopent ype\no vp\nnovis ad\nne wex\nnat ore\nmy jam\nmoun tallison\nmou stapha\nmoo somin\nmo state\nmo chizuki\nmi sere\nmar able\nmadeto order\nlut senko\nlongstre th\nlon hro\nleague acs\nle so\nlac tose\nl voe\nl nm\nku ze\nkriti k\nkir kelementary\nkidsin museums\nkc n\njermaine dupri\njazz giants\ninter weaving\ninstap undit\ninqu ilab\nillinim bb\ni pupa\nhyper sensitive\nhoch berg\nhig nett\nhi shoot\nhernan es\nhandmade withlove\nhand shaking\nhalloff amer\ngun sand\ngudi padwa\ngre v\ngrange gorman\ngoldber gabc\nget xo\nfl anne\nfi dalgo\nfeder alists\nes rc\nelf cosmetics\nef ell\neccle sfield\ne off\ndove tailed\ndiplom atic\ndi spiriting\ndead locks\ndavid haydnjones\ndarren aronofsky\ndak ini\ncritt all\ncor sair\ncompli ance\ncommittee woman\nchili bowl\ncher rapun\nchab rol\ncash money\ncambridge up\ncalde ira\nbu zek\nbol tzmann\nblood worm\nbird wing\nbil lah\nbhag want\nber ko\nato ols\nat d\nasi mha\nasa pro\nap ta\nan erley\naha ve\naccess oires\nab elson\nðŁĻı ðŁĺĺ\nçĪ ±\nâĢ ¹\nب Ø©\nÑĥ ÑĢ\nzo tero\nzach aria\nz ura\nyoung dems\nye hia\nya x\nwyo sports\nworld day\nwir th\nwil les\nwhatsin your\nvet college\nus ke\nupaz ila\nunk rich\nuni fies\nuk nighted\nu pike\ntroop ingthe\ntravel holic\ntoom any\nthisgirl canuk\ntheak ston\nter yl\nten o\ntecho bloc\ntali on\nt de\nsupri yo\nsunny and\nsul rich\nsu dd\nst croix\nspark s\nspace program\nspace ghost\nsomer ford\nsmash mouth\nsm wnyc\nsin dic\nshiv shankar\nshear man\nschmoe down\nru ark\nribon ucle\nreal dlhughley\nradial first\nrac ters\nquan go\nprome sas\npow a\npolitec nico\npol itti\nplayboy plus\nplay z\nphil health\npetr arca\nofficial rfdtv\nob ay\nnigel walsh\nnicol lette\nnic col\nni gar\nnatural capital\nmy kindof\nmonic ac\nminer strong\nmi zo\nmg mre\nmer in\nmend acious\nmcgin lay\nmay apur\nmatthewk oma\nmaterials science\nmark downs\nmac al\nm power\nlong branch\nlochgil phead\nllamas oft\nlive performance\nley ne\nlac us\nl sl\nkumbhal garh\nku dai\nke char\nkari mov\nkap ila\nka inos\njone goro\njohn wesley\njoequ esada\njam y\niwant my\nit l\nimpre cise\nii fym\nig noble\nid aniel\nhue ys\nhousen y\nhau er\nhart sock\nguan eng\ngu entzel\ngr rm\ngone withthe\ngn x\ngive back\ngaw thorpe\ng dc\nfrees kiing\nfli eger\nfer riter\nexc ite\nev anovich\neter n\nenergye ast\ndz ic\ndou gal\ndhan ak\nday party\ndaren th\nd tek\ncut worm\ncunnin gham\ncu fi\ncri men\ncrave online\ncool ly\ncollin sjr\nclo ture\nclavic les\nchelt scifest\ncarnaby london\ncalcare ous\nbuffe l\nbs gyn\nbrig and\nbo vey\nbo il\nbi eler\nbeverly hill\nbaz alge\nbazalge tte\nbarn house\nback plane\nbaby shambles\nba stani\nb nar\natthe beach\nation ists\nat aman\narticul ations\nargo sy\nap oria\nanimation history\nan ted\nadventuresof sabrina\nabdul kadir\nðŁĺĸ ðŁĺĸðŁĺĸ\nðŁĺĴ "\nðŁĹ ij\nðŁijĬ @\nâĢ³ )\nâĢ¢ |\nè ce\nzo ila\nzak i\nzait sev\nza har\nwonth aggi\nwcs district\nwai roa\nwag staffe\nvirgin radio\nvietnam war\nuwh arrie\nuss enate\nunder state\nugly sweater\ntw bb\ntux ford\ntsu gumi\nts ve\ntrophy less\ntri ppie\ntor ok\ntooth fairy\ntom baugh\ntoib engaluru\nto wards\ntime is\nti mex\nthun berg\ntheland news\ntell ing\ntee garden\ntc palm\ntb al\ntantrum jas\ntagteam titles\nstrong and\nstiff key\nsport sand\nsou k\nsi kar\nsher inian\nshaz aming\nsharon tate\nsh lomi\nsc inemas\nsap stat\nsag acious\nsa ison\nrut les\nroun drock\nrother field\nrosel ia\nrobert liefeld\nregi one\nrefor mists\nram adoss\npunks notdead\npriyadarsh ini\npower bar\npon tian\nphyno fino\npercy jackson\npa ek\np ds\nop hrys\noko h\nnor ds\nmugg ings\nmu barak\nmr ts\nmou sa\nmo pan\nmitch inson\nmis ao\nmi thai\nmall er\nmalcolmb arrett\nmainde foe\nmadison wi\nlp family\nlong drive\nlettu ces\nletsgo fish\nletsgo bluejays\nlahore blast\nla yl\nla wr\nla had\nknee bone\nken yc\nke yeast\nkc z\njust jane\njack averymusic\nj music\niso pods\nin chi\nil f\nho sey\nguanab ara\ngir nar\nfleec ed\nfla key\nfieldwork friday\nex bury\neu onymus\nen snare\nel acrosse\nek po\nebay deals\ndge y\ndee sh\ndaun te\ndam usic\ndac ascos\ncou lomb\ncotsw ol\ncoffe ec\ncityof york\nchristodou lou\nchapp atte\ncav ill\ncapo bianco\nbul kier\nbru jo\nbrit pod\nbristol museum\nbrady bunch\nbotanical garden\nbom e\nbol len\nbeau ce\nbe sit\nbe achi\nban ach\nbal tas\nbal jit\nazhar ali\nated atbirth\nar mon\nang ellic\nall ready\naerop onic\nadvis ory\nacul ture\nacri mon\naa aj\nĥâĸĥâĸĥâĸĥâĸ ĥâĸĥâĸĥâĸĥâĸ\nðŁĴĻ ðŁĺĬ\nðŁı ¢\nâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\nÎ ¹\nän der\nzet seguin\nza im\nym g\nyam en\nxfiles revival\nwomenin football\nwhe ely\nvisit nsw\nvill amil\nvar ur\nuj fm\ntur nings\ntri lemma\ntomas ino\nting in\nti em\nthrombo embolism\nthenext level\nthanks you\ntehseen p\ntaylor ville\ntank girl\nsuper mamc\nstipul ates\nst jinx\nsom d\nsnoo py\nsloven ly\nsini akova\nshi garaki\nshi bas\nse aga\nsawbone shex\nsalsha abilaa\nsa has\nru dess\nrelief ph\nquarry men\nquadru plet\nprin tr\npos thu\nport ent\npoli she\npo ffo\npi b\nph arre\nperson ae\npel inka\npe psic\nos mar\nop tom\nnr v\nnerdy bookclub\nnelli safb\nne zetseguin\nnayanth ar\nnav sari\nmus thear\nmon toro\nmon er\nmen shair\nmen ashe\nmeflo quine\nmazar ine\nman esar\nmack aye\nmaccab i\nmac eration\nlance hoyt\nkol ten\nko hut\nkne ipp\nki dul\nkeep cup\nkbr shanthnu\nkart arpur\nkapil dev\njj project\nji ho\njared keeso\njam session\njail ene\njag at\nisrael houghton\nisix hosa\ningex pert\nim kbrshanthnu\nherne hill\nheck ingbottom\nhead water\ngrue somely\ngregarious gus\ngov tof\ngored foxes\ngiri ja\nghat ak\ngh anim\ngaz coombes\ngastro esophageal\ngam le\ngab ino\nfry selectronics\nfor paws\nfor gan\nflat shoes\nfirepro world\nfinancial advisor\nfi it\nfe bo\nfashion revolution\nfarn combe\nexam inees\nes op\ndun shau\ndontbuy thesun\ndi val\ndday live\ndark man\ncole k\nclayo quot\ncity comiccon\nci han\nchop ta\nchi am\ncatal oni\ncap ensis\nbraue rei\nbra ying\nblue stein\nbillye ichner\nbenazir bhutto\nbel ami\nband elier\nb plant\nb mm\natx tvs\narbor vitae\nandrew bird\nand j\namericane wsroom\nalitabattle angel\nali h\nalbum review\nagu ars\nagen der\nafl footyshow\naegyp ti\naed rummer\nace to\na ahhhh\na abc\n< ->\nðŁĺ» #\nðŁĵ Ł\nðŁĴľ ðŁĺĬ\nâľ Ĺ\nص ب\nzil los\nzay lea\nys an\nye ea\ny kids\ny ge\nwondo lowski\nwn n\nwhen the\nweb deals\nwash post\nupgrade able\nunderground hiphop\nunder stating\nukbiz lunch\nucc as\nty k\ntu mut\ntoni morrison\nthemercury comau\nth ast\ntgi bf\ntechno cratic\nsusan oo\nsubmer sion\nsu at\nsty nes\nstel co\nstart growthhack\nsplin ting\nspeake asies\nsmtown engsub\nsh uru\nser ota\nschum peter\nsc atters\nsatra pi\ns mino\nric key\nrh show\nre ino\nre conversion\nrco bsgyn\nqu ynh\npy mble\npure blood\npu pil\npriyank sharma\nppe dup\nplough shares\npetal inews\non field\nnswe ducation\nnh scrisis\nnewscenter maine\nna id\nn be\nmr tim\nmm ts\nmic nice\nmeg awith\nmed ine\nmanu script\nlocomo tor\nlin tang\nley la\nlaureus sport\nlane ways\nkukush kin\nko lob\nkl k\nken de\nkaz em\nka ura\njoke oftheday\njoint address\nj das\niy ana\nis and\ninfirm ities\nincongru ity\nibmin sight\nhulkam ania\nhu mawards\nhow live\nhor stman\nhin akhan\nhealth coach\nhave it\nhardrock cafe\nha sel\ngrim stoyshow\ngood sell\ngods love\nfro ilan\nfm sport\nfisher price\nfinal cut\nfb heroes\nfaul tin\nfa kers\nex oxo\nemph is\nemo cion\nelenaof avalor\ned codes\neast bourne\ndun dru\ndu ur\ndog park\ndigital day\ndeve aux\ndel gada\ndeep space\nday byday\ndaveand busters\nda er\ncur sos\ncruis elife\ncrop science\ncott aging\ncor duff\nconflu ences\ncohe siveness\ncel an\ncat experience\ncaprio tti\ncag iva\ncaf ferty\nbus bee\nbuildseries nyc\nbu et\nbru el\nbookof mormon\nbo cage\nblax land\nblavat sky\nbenav ente\nbe sic\nbanc assurance\nautomotive industry\naston university\napproxim ations\namy adams\nam mal\nalex ius\nalber thall\naj arian\nac cc\n. ðŁijĢ\n. âľĮï¸ı\nðŁĺŃ ðŁĺįâĿ¤ï¸ı\nðŁĺ³ )\nðŁIJ «\nðŁİīðŁİĤ ðŁİģ\nñ ol\nzale ski\nz aib\nyouth hockeyhub\nyacht club\nwoof woof\nwith cnbctv\nwil born\nwhit efly\nwest water\nwest texas\nwen gie\nweare ky\nwater colorist\nwa ik\nw mca\nw be\nvou ching\nvisual isations\nvar ro\nv ants\nutt lesford\nus ing\nun feeling\nu fp\ntory belleci\ntiruvann amalai\nti schler\ntexas music\ntest drive\nte pa\nt wh\nsuper malls\nsun s\nstyle sheet\nspectro meters\nsol do\nsign ano\nsci pol\nscher zo\nsar b\nsanguine tti\nsan a\nsamani ego\nsalaf is\nsa wal\nro ep\nrit am\nrising fc\nreaction aries\nrang zen\nrado van\nra fer\npo tty\npetro logy\npel ters\npar sed\nopor tuni\noke fenokee\no ic\nnou ak\nnor doffro\nnaz ari\nnavo daya\nnat andalex\nnai adi\nmun chie\nmor uya\nmonu mental\nmir am\nmill house\nmi mar\nmet c\nmergan sers\nmb un\nmartial law\nmaro cain\nlocal artist\nlate junction\nl cac\nkur kova\nkrewella jahan\nkias oul\nkendall ville\njobsat sap\njay atv\njav elina\njar nail\njake snake\njad wal\nir rera\nim mobilization\nill ich\nheat pumps\nhar im\ngrou pltd\ngo bbi\ngin sider\ngen l\ngautam i\nfuji feed\nfra is\nfor mby\nfood systems\nfeel on\nfast ford\neye inthesky\nequestri ans\nef vater\ndream it\ndh ani\ndest inee\nderek blasberg\nde santo\nde mel\ndce aglecam\ndau di\ndarth maul\nd mi\ncw fc\ncontin i\nchristen sen\nchocl ate\nchil duk\nchatter is\nchallenge mtv\nchall oner\nca estecker\nbuz dar\nbo als\nbloomberg nef\nblon del\nbil gi\nbidden den\nbey eler\nber ti\nbe filter\nbc so\nbath couk\nban cos\nawami league\naw ls\natra vels\nannu alised\nangelamer kel\nand ray\namorpho phallus\namai zing\nagh oulihan\nac b\nabid sherali\n\\ :\nðŁĺŃðŁĺŃ ðŁĺį\nðŁĺĮ ðŁĺį\nðĿĺ Ģ\nãģĦ ãģ\nâĿ¤ï¸ı ðŁİ¸\nà¹Ĥ ม\nغ ز\nاÙĦ اÙħ\nzu er\nz lin\nyour face\nyo hio\nyn k\nwissen schaft\nwho afro\nwhite sox\nwhati wore\nwest norwood\nwak amatsu\nwa gh\nw abush\nvat an\nuno suke\nulster wildlife\ntrul ly\ntor il\nti sc\nthis weekend\nthel in\nthekenny johnson\ntheatric ality\ntapa chula\ntab ulation\nta waf\nsunder bans\nstrong room\nstop p\nsser vice\nsnow drifts\nsisse ton\nshriner shosp\nsherri saum\nsheil aedrummer\nshar m\nschul tze\nsch ow\nsaving species\nsahl berg\nru sin\nromul ans\nro tte\nre der\nrailway stoday\nra gging\nquarter backing\nqu ashes\nprolet arian\npor che\nplay renegade\nphoto sensitive\npasteuri zation\nparty city\nparkh rc\npa ed\nos bournes\noo ks\nocta hedron\noce ang\nnw mt\nnelly furtado\nne si\nnase by\nms sen\nmr sc\nmon ell\nmon acan\nmom entu\nme aker\nmayur bhanj\nmanische witz\nmag sa\nmac abe\nm cree\nludwig shafen\nluckywelive hawaii\nlodocom ello\nlil lahi\nlik ha\nliber ate\nleonard peltier\nlc sw\nlai kuanlin\nl boro\nkier vi\nki prop\nkerast ase\nkcb group\nkay yem\nkal dor\nk gf\njx mmi\njvp live\njo ee\njnd newin\njn tu\nite u\ninter nists\nindra dhanush\nilo tt\nid lesband\nhou mous\nhex en\nhend aye\nhani m\nha patra\ngwent police\ngo ar\ngli atti\ngla snow\ngir lof\nger land\ngarethe mery\nfreethe children\nflow cytometry\nflam ini\nfe ye\nest agram\nent reco\neng les\nelectro magnet\ndst govza\ndrugab use\ndri pper\ndl bcl\ndese gregate\ndemocrat sare\nday today\ndavidal angrier\ndavid w\ndae han\ncornell birds\ncolin cowherd\nco ia\nco el\ncloud busting\nclat sop\nci endo\nchilling adventuresofsabrina\ncha itra\nch kala\ncentral valley\ncan teens\ncam t\ncaffe y\nbrueg gemann\nbren ham\nbrace less\nboy ss\nblo wh\nbit on\nbig rig\nbig bluerising\nbharathanen enu\nbeauty awards\nbar nicle\nballo onist\nbag mati\nba rex\naur ic\nau ta\nasburypark press\nap ada\nande cho\nald inga\nalbion parkhrc\naf ic\n________________ _\n( _\n" ---\nðŁij º\nëĤ ł\næ¸ĭ è°·\nઠ®\nب ÛĮ\nz eli\nye ley\nyan o\nwomen slibrary\nwilli son\nwhole food\nwhitt all\nwhite shell\nw lo\nvisit nh\ntz ipi\ntomat ina\ntoledo zoo\nthu bb\nthen ow\nthen ex\nthelong dark\ntey hainpyaarke\ntar buck\nta bet\nt san\nsuc ci\nstu xnet\nspecu laas\nsock puppet\nsmi leys\nsl mpd\nshi pre\nshannon od\nshannonod komo\nsgvn sports\nse mar\nscream official\nsc cg\nsau dara\nsar athi\nry uko\nrigh ton\nrig don\nrealmike fox\nrass lin\nradion z\nr carter\nquote sabout\npurlo ined\npueblo bonito\nprojec tive\npnp benguet\npin ia\npiase cki\nphil star\npain free\npaddy considine\noo ley\nonmy way\nok ream\nofficial ntas\nof ar\nocci dente\no ssia\nnz greens\nnov is\nmy chal\nmusic magazine\nmsc cruises\nms as\nmonte squi\nmon stru\nmk malarkey\nminof healthug\nmetax a\nmetamor ph\nme sta\nmazdar acing\nmax okream\nmal gudi\nmaas ante\nm doc\nlove guernsey\nlee goldbergabc\nlar ale\nkom achi\nknit ted\nkee fe\njoanne clifton\njingo istic\njh pie\njg quintel\njam shoro\njahang ir\nindonesi agaruda\nin sofar\nho thouse\nhiphop news\nhelpin ghand\nhe ree\nham on\nh murray\ngoun damani\nglen rock\ngi gh\nfloral design\nfilm ation\nfili povic\nex pl\neun jiwon\neo connor\ndun church\ndream theater\ndirty heads\ndicky johnson\ndi si\ndavidd avis\ncup ation\ncou va\ncorn elio\ncor nexchange\nche mun\ncham bana\ncb cy\ncatalu ña\ncarolo ates\ncarlo scon\ncarbon ates\ncar ras\nc smt\nbusinessc ard\nboy ton\nbo stik\nbleep ed\nbaltimore ravens\nbad ley\nauror amax\naudit ore\natribe called\narse holes\narr anca\nar saigh\nalnwick gazette\nak ino\nair bnb\nadventure awaits\nach on\nab copen\n;____ ;\n! &\nðŁĺį âĿ¤ï¸ıðŁĺį\nðŁĺĬ ðŁIJ¶\nâĿ¤ï¸ı ðŁijı\nà¹ĢภĦà¸\nä n\nzy lo\nzel az\nzam belli\nyoshi e\nwomen slax\nwiz kids\nwhitman comics\nwas u\nwar ta\nviv ant\nvin u\nvast atin\nunder city\ntwicelight sin\ntorfa en\ntik vah\nthisishow we\nthe sc\nthe official\nthe legendof\nth q\ntatt ler\nsweeney todd\nswan scombe\nsw oc\nsuga day\nsu azo\nstudio time\nstou dam\nstop islam\nsteep ly\nst bcbeer\nsmy ly\nsky boxes\nsk yo\nshesthe man\nsh Åį\nse ak\nsd in\nschoen aerts\nscam ps\nsalute our\ns vea\nrol lei\nrock fall\nro mo\nright ness\nrh hs\nrec afe\nrang y\nracing usa\nq waq\npá draig\npro pp\nprachu ap\npoly chromatic\nplace res\npidge y\nparthi epan\nover it\noppur tunity\noo ak\none on\nomat osis\no shii\no asys\nnye timber\nnunobetten court\nnor dha\nnight lights\nnews gathering\nnar annual\nna ig\nna ee\nn clt\nmuss ina\nmud bound\nmu co\nmoz eliak\nmousc ron\nmor ges\nmonso onal\nmj d\nmigo satl\nmichel isz\nmichael aconlin\nmelen chon\nmarykill speople\nmarvel s\nmad chester\nma iga\nloong abba\nlincsc athedral\nlad bible\nkir kk\nkeeping familiesclose\nke ino\nk hil\njoedon rooney\nji om\njessi ka\njanet mock\njac at\nitsme angelie\nitsmeangelie ofc\ning change\ninfer nos\nindepend anceday\nima ik\nillustr ator\nhut cheon\nhead wrap\nhang ar\ngun buster\ngu end\ngo vikes\ngla zer\ngis elle\nfranklin ville\nfoo ks\nfocu sed\nflu ting\nff mpeg\nfabu list\nencyclo pedic\nel ak\neeeeeeee eee\nec tasis\nearn history\nea si\ndu gald\ndramati sts\ndon adoni\ndog ar\ndivyak ho\ndigi pack\nday breakers\ndar da\ndaniel biss\ncra ze\ncour town\ncoste ssey\ncooking class\nchocol ati\nchester ville\nchester see\nchast ising\ncharles stur\ncarne secca\ncan tin\nbuland shahr\nbook clubs\nblo ater\nblack label\nbig bro\nbed kar\nbe yo\nbaliunited shop\nayud ham\nastri x\nas agi\narthur s\nart less\nantan stead\nannel amott\nanis arahma\nanime today\nang ono\namik kr\nalpeng low\nalmam ater\nair bushc\nadri ve\nac athletics\n!!!! !!"\nðŁļ¨ðŁļ¨ðŁļ¨ðŁļ¨ ðŁļ¨ðŁļ¨ðŁļ¨ðŁļ¨\nðŁĺĪ ðŁıĢ\nðŁĺĩ #\nðŁĺģ ðŁijı\nðŁĶ¥ðŁĶ¥ .\nðŁĩ²ðŁĩ »\nëĪ Ī\nãĥĹ ãĥª\nâķŃ âķ®\nÅ µ\nze idler\nya hara\nwith that\nwinter reise\nweal den\nwake ford\nvisionary art\nv india\nun heeded\nun decorated\nu vo\ntowand abraxton\ntour nai\ntlal pan\ntilling hast\nthur a\ntheun toldstory\nthe diamond\ntah niah\ntab qa\nstu me\nst stephen\nsportsin kansas\nshrimp sofficial\nsf vae\nsem ler\nscotland rhshow\nsari kaya\nsanit ary\nsa via\nsa aya\ns gu\nry stal\nrock umentary\nro woon\nro stro\nro stered\nrescu eme\nrachael ray\npyrac antha\npulver ize\npu late\npromo zione\npoo jak\npin aco\nperfect match\npar rs\np tit\nonthe air\none wyoming\nol ar\nohed chat\nnyche althy\nnu thatches\nni elle\nnett uno\nnb storm\nnandamuri kalyan\nmussel burgh\nmusco vite\nmud jug\nmo ated\nmillstreet brew\nmarti ka\nmakeyour fringe\nmahar anap\nmag daily\nlouder than\nloop back\nlon ers\nle ya\nlaura bell\nlaurabell bundy\nko ger\nkingscross n\nkha os\nkeral ite\nker cher\nkelly music\nkel me\nkarne val\njoshu agates\njim and\njas ong\nitsa jeepthing\nisol ators\nint fi\nindol ent\nimagine ers\nic ole\nhu meral\nhome of\nhillary shealth\ngun di\ngr atulations\ngior nale\ngat ty\nfreer adio\nflx wine\nfluori dated\nfi da\nfather christmas\nfair lop\nec ran\ndragon slayer\ndr paul\ndo ink\nderry berry\ndecor dova\ndavid lloy\ncra han\ncla sping\nchor hai\nchint amani\nche state\nchatter ji\nchao imh\nchak ma\ncarrol lisd\ncam anach\ncaf fi\nc mk\nc jones\nbuzz ing\nbran well\nbracken bury\nbo twood\nblom field\nbla x\nbemore chill\nbed post\nbas ant\nap lc\nansp ach\nanisi mov\nal chemist\nac credit\nab da\nab ali\na strong\nðŁĻıðŁı¼ ðŁĻıðŁı¼\nðŁĴµ ðŁĴµ\næĽľ æĹ¥\nâĿ¤ï¸ı ðŁĺģ\nâĥ£ %\nö mer\nze ppo\nyi mou\nww norton\nwomeninthe arts\nwom ex\nwi ze\nwhere on\nwaltham forest\nvinyl record\nvil oria\nvicom te\nven dee\nuta at\nun ha\nun alaska\nultimat ums\nuli sses\nu schi\ntwiz tid\ntubabu stun\ntri kala\ntravel manitoba\ntown site\ntony danza\ntn f\nthom mo\nthetrade shub\nthe missing\nthe max\nten ements\nsumm icron\nstaffordshire bullterrier\nsp global\nsole bury\nsit all\nsi delight\nshr u\nselfiewith daughter\nsee tickets\nsar agar\nsany u\nrun ing\nroyal blooduk\nrichard madden\nregi stro\nred ale\nra be\nquins rugbyunion\npsycho therapists\npre eran\npoke mons\npocket watch\nplease dont\nphoto ssmh\npe texpo\npau ll\npatrio tically\npadam see\nonthe mic\non wood\non sports\nom durman\nnye pi\nnouak chott\nnati oggi\nnan twich\nmtv lebanon\nmoor thy\nmono drama\nmo state\nmo realive\nmilwauke etool\nmb loggers\nmay nard\nmaverick mack\nmathi ascor\nmat twil\nmark knopfler\nmacand cheese\nlouisi anat\nlolit afashion\nlo ey\nleit ao\nleaving neverland\nlatavi us\nl rn\nkuri yama\nkreu zer\nkoso ko\nko pec\nkar oli\njustin roiland\njump shot\njess alyn\njacket pride\nja hannam\nipu parliament\ningui stic\nik wy\nhur v\nhi ral\nhesj edal\nhel an\nhei hachi\nhe ming\nhar bored\nguantá namo\ngam is\nfr in\nflip flop\nfiat friday\nfen cers\nfamili ares\neuphe mia\nell l\nel anna\ne guchi\ndivul ges\ndisco teca\ndidyou know\ndevon shire\ndestabil ising\ndent su\nde tto\ndanger zone\nda sein\ncy matics\ncrand ell\ncomer mx\ncolossal con\nclark dale\nclan lupi\nchil dof\ncher itage\nchaudhary mos\ncharli ea\ncastle derg\ncastle comer\ncast ilian\ncan zoni\nc cea\nblack butler\nbeng haz\nbbce urovision\nbar wa\nb sales\naw ali\navoc at\naugu stu\nani x\nandre c\namil ies\nam ti\nalay kum\nais beautiful\nack enzie\nabr antes\n! ðŁĶ¥ðŁĶ¥\nðŁĩ®ðŁĩ¹ #\nðŁĩ¨ðŁĩ¦ \'\nìĹIJìĿ´íĭ° ì¦Ī\nãģ Ŀ\nâĿ¤ï¸ı :\nᶠł\nà¹Ģภļ\nà· Ļ\nó t\nyeg biz\ny tm\nworld wired\nwol ffe\nwil lesden\nwi od\nwel le\nvl cc\nushe rette\nunis sen\nun constrained\nu pert\ntwoo fus\ntu loy\ntu ffs\ntsu en\ntravel photographer\ntra inning\ntor ridge\ntokam ak\nthor gerson\nthol land\nthe vinyl\nthal mic\nth bday\ntexas roadhouse\ntaxonom ies\ntalmu dic\nsynop ses\nsuper talent\nsumbasturtt ooo\nsumbasturttooo sday\nstate ofe\nssi ers\nsoul is\nsmu k\nsilver alert\nse zer\nse hat\nscots man\nsat elite\nsan alytics\nsaddle brook\ns mets\nruss diemon\nrspb norfolk\nrspbnorfolk linc\nrou bini\nronnie fieg\nrio jaw\nreic hel\nrei ki\nrare pic\nr risd\nquo test\nqld premier\nprow lers\npre ve\nplant breeding\npic torials\nphotogra hy\npe ya\npat ro\nover simplification\nour planet\nosun decides\noo di\noe dema\nnkab inde\nner ang\nmusic ally\nmore so\nmon now\nmod bury\nmit sun\nminim i\nminic ar\nmin son\nmin dover\nmeto we\nmelt zer\nmedi bang\nm chan\nly de\nludo vica\nlovethi splace\nlove construction\nlored ana\nlesc aut\nleonard nimoy\nlee music\nlawenforce men\nlan o\nlali berte\nl do\nkush n\nkrono squartet\nkit ching\nkimberley jwalsh\nki ddle\nkan aloa\njossel yn\njo vem\njes see\nje witt\njani kowski\njanella salvador\njane eyre\nit speter\nin ie\nil kay\nid led\nhus ar\nh dh\ngoog let\ngo wers\nglac iology\ngil le\ngi x\nfood guide\nfol ke\nfnb sa\nfle isch\nfinger picking\nf cie\ndz um\ndyskine sia\ndundee fc\ndouble ornothing\ndisfru tar\ndin kel\ndesig no\ndeodor ants\ndel ille\nde veau\nda ay\ncut more\ncub scouts\ncook county\ncommon weal\nclwyd tweets\ncirce anna\nchin maya\nchilli da\nce dros\ncat mint\ncarri on\nbuse ireann\nbraun stein\nbobs redmill\nbir e\nbelvo irst\nbel ing\nban kes\nb iti\nautor oute\nan ory\nall hallow\nal maj\naguil ar\naf fy\nadri aen\nad sk\nad me\n.... :\nðŁĻĢ ðŁĻĢ\nâľ ¡ï¸ı\nzar o\nyu uko\nye u\nww c\nworld teamtennis\nwi jn\nwhit sett\nwesle ys\nwatson iot\nwalt frazier\nw bn\nvin en\nvi ggen\nvalley field\nvak il\nut la\nump ed\nul ys\ntwee ti\ntravel deeper\ntopdrawer london\ntiny house\ntill ers\nthi stv\nten ka\ntarta kovsky\ntac ek\nt sparks\nsutt les\nsurvi vin\nsucess ful\nstau ber\nspra shanth\nsonnen ch\nsn itching\nsm supermalls\nsli vers\nsla bajo\nshun ts\nseanan mcguire\nscav olini\nsc ake\nsaraj cox\nsandy ford\nsand fire\nsal sas\nsaiy uki\nrosemary shrager\nrip muhammadali\nri ya\nrhon dd\nren ta\nren old\nreen ie\nrec chia\nre education\nr ferl\nquality improvement\npur ps\npull inger\npro lapsed\npeta india\npe pero\npe ahen\npaste bin\noun taine\noto ko\nni ver\nnewport folkfest\nnever y\nmusic i\nmu sina\nmon twood\nmodular synth\nmississ inewa\nmcin doe\nmari yam\nmar os\nmar ing\nmand ola\nmacca bee\nloe we\nlo cash\nliven good\nle rena\nlavo isier\nlam bi\nkoo ser\nko leos\nkhush want\nk lun\nk cee\njamesh askell\nja afari\nithac acollege\nira sci\nindy to\nidu bbbz\nhuar az\nho plr\nhit sugaya\nhi va\nher bo\nhan lan\nha sc\ngre tag\ngrand baby\ngor ls\ngor aiders\ngeni y\ngargan tua\nfull kit\nflat lands\nfel id\nfalken spotting\nezz at\nextrac orporeal\nen larger\neat slee\ndor si\ndev log\ndemon ised\ndash board\ndar bari\ndan sa\nda ij\nd mart\nd conf\ncu bing\ncounty gov\ncollo quy\ncat boy\ncastig lia\ncalix to\ncalend ers\nca via\nburn sday\nbud gies\nbs fc\nbrainte aser\nbr ata\nbook bug\nbo ies\nblue grey\nbloomberg dotorg\nbirthr ate\nbibli ophiles\nbi ra\nbi ggles\nau rion\nat ation\nasmode us\napart ners\nao i\nanz ca\nantho cyanin\nanalge sics\nam maasante\nalone together\nagrit erra\nadel ica\n! ðŁĴĥ\nðŁįĴ @\nðŁįĭðŁįĭ ðŁįĭ\nðĿĺ ¦\në²Ī ì§\nñ e\nzlo ty\nzel f\nze ich\nye agles\nyam it\nya ke\nwwt worldwide\nwri thing\nwebber naturals\nwc f\nur za\nuof denver\nunderestim ation\nun oh\ntroopingthe colour\ntre mont\ntok ina\nthelittle idiot\nthe global\ntermin ologies\nteas ley\nta kt\nsw yn\nstrato volcano\nspokes man\nspectro gram\nsomo za\nsmo squito\nsme ad\nsm ta\nsj susp\nshim my\nschin kel\nsalvad orean\nsag ged\nru man\nridge ley\nrich thofen\nreyn es\nrepudi ation\nreg no\nre ade\npure gold\npier paolo\npart low\noyster mouth\nottawa hospital\noster tag\nosh kosh\nom ah\no city\nneuro typical\nmull aly\nmu larkey\nmogwai band\nmichigand ers\nmel ua\nme ppel\nme iz\nmars global\nmark richt\nmani er\nma sat\nluce scu\nlive ga\nlivega aresults\nlind h\nli zam\nleague one\nlancashire day\nlanc shospitals\nla fd\nkush waha\nkri os\nko hr\nkick s\nkati ek\nkar ad\nju hi\njodie whittaker\njha adu\njan sport\njackie morrisart\nj angling\nirish hockey\ninvol vements\ning peace\nimmun ologist\ni yam\nhumber side\nhu gz\nheem skerk\nhed vig\nhealing crystals\nhe yn\ngü ne\nguad ar\ngor zata\ngalent ines\ng dr\nfresh meat\nfinne more\nferr arif\nfer mi\nfeel it\nfaithe vans\nfacebook ads\nek land\necho esof\nec atepec\nduke sof\ndigital nomads\ndiane sawyer\ndhaula giri\ndenter tainer\ndavid schwimmer\ncy f\ncruz ado\ncor saire\ncoastto coast\nclon curry\ncharlie baker\nchao tix\ncel ina\ncavanagh tom\nc ttw\nbusiness day\nbur ki\nbuch la\nbronchi ectasis\nbro sius\nbor Ã¥s\nblack gold\nbig ass\nber de\nbel ittles\nbeauty chic\naz on\nash p\narti fact\nandrew bogut\nalexandri av\nain hoa\na amo\n:- )"\nìŬìŀIJ ìķĦìĿ´ëĵ¤\nãĢ ķ\nâĿ¤ï¸ı ðŁĴĸ\nyoshi kawa\nworld pressphoto\nwork with\nwonder swan\nwildwater stu\nwhata view\nwater stone\nwalker artcenter\nw pr\nvolu bilis\nver no\nveebha anand\nvag rancy\ntumble weeds\ntubabu yukustun\ntri shap\ntravel gumbo\ntor rente\ntor por\nti sca\nthel y\nthebusiness show\ntemp tation\nte gid\ntann ahill\nsweet life\nsure shra\nstrep tomy\nspr ou\nspark ly\nsonic fox\nsombre ros\nsof nature\nsob tians\nso gard\nsla vica\nsky light\nsksk sks\nskill sshow\nsk top\nsimi on\nsime k\nside one\nsfe ir\nser rate\nsenator cardin\nse wanee\nsco tian\nsch leg\nscatter brain\nsatoshil ite\nsand town\nry dell\nronnie oddo\nroad sbrewing\nrishab h\nrestaur ante\nren ounces\nredar row\nrachel boston\npter osaurs\npsycho logies\npoo bah\npicture h\nphrase book\npepp ino\np kn\nocal an\nno bin\nnewar knj\nnelson piquet\nndom bele\nn pw\nn nab\nmount juliet\nmondaw min\nmoderni stic\nmo chan\nmindbody soul\nmindbody green\nmidnight madness\nmichael irvin\nme dair\nmatt makens\nmar ny\nmag adan\nlol rt\nlistento this\nle drew\nlam poons\nki goma\nkarlo slabajo\nka et\njust inj\njazz radio\njanak puri\nis scr\nil tm\nhu mn\nhin de\nhef ti\nhan ly\nhan ayo\nha fa\ngo grow\ngibr al\nger ace\ngau t\nfrom dec\nfreen hs\nfr ann\nfloo w\nfab by\neasty orkshire\ndu pleader\ndra il\ndian eneal\ndi wak\ndavi dru\ncraz yyy\ncoulom be\nconcor di\ncl unie\ncho key\nchar len\ncha erin\ncentral pictureh\ncc mv\ncat fished\ncarloscon dit\nbuy black\nbutchart gardens\nbrin apalencia\nbir cham\nbi ff\nbhagav atam\nbeta thetapi\nbeng tson\nbell roy\nbare bone\nbancos antander\nb horsetrials\nas cents\narth quake\nar matures\nanimal sasia\nancient art\naloe blacc\nah music\nactof kindness\nacceler ometers\nac lock\naa ar\n... ðŁĺĺ\nðŁĹ£ ðŁĹ£\nå¤ ļ\nãĥŀ ãĥ³\nâĽ³ï¸ı âĽ³ï¸ı\nâĺģï¸ı âĺģï¸ıâĺģï¸ı\nà¹Ĩ à¹Ĩ\nยย ยย\nz v\nyo wen\ny endi\ny bn\nwood working\nwinder mere\nwhoo kid\nwalker stalker\nvivic afox\nvisit orlando\nvie wing\nvertic ality\nve ille\nvan horn\nup there\nuof m\nuf ford\nto logists\nthe men\nsuppor ter\nsu amico\nstele com\nstefan molyneux\nstar z\nsram road\nspun out\nspen guins\nspann ers\nsmoke out\nsmith mp\nsma kers\nsi sts\nshan el\nsh ales\nsegre to\nseen onmy\nscint ill\nsche iner\nsanlu iso\nsakura gi\ns ga\nrutherford ton\nrubber ised\npu asa\nprayfor syria\nport credit\npon ent\npoint break\npir sig\npersonal brand\nperi winkles\nper mit\nped lars\npam bondi\nopen wrt\nome body\nodi dev\nnov as\nnott z\nnorth face\nnordoffro bbins\nnon standard\nnoki a\nnishar awal\nninot chka\nnewss vc\nneg aunee\nnav ed\nn sen\nmytwitter anniversary\nmumbai metro\nmove more\nmoon rock\nminim isation\nmicro management\nmet to\nmemo ires\nmcga hee\nmaxi on\nly cian\nlovethi steam\nloud mouth\nlosf eliz\nlopes rising\nlimp sfield\nlike ability\nlan ken\nkn or\nkir ari\nkids games\nkid problems\nkeala settle\nkarish ma\njo ongi\njin bei\njfl mtl\njamie chung\niw amoto\ninsec tiv\ninjury pics\night club\nht delhi\nhon ge\nheck ert\nhan ai\nha iri\nh music\ngu ill\ngru mbled\ngra fi\ngote ana\nglo winthedark\ngil das\nfun dus\nfred vanvleet\nfre as\nfrance diplo\nfo el\nfix edin\nfas sler\nfaha dh\nfabi of\nf é\nespa illat\nen fren\nel rancho\nel nido\nel arry\nee x\ndro op\ndontbuy aticket\ndis believing\ndin nington\nderay davis\ndem ander\ndash pay\ncrazy horse\ncor moran\ncold feet\nclu bre\ncloak coin\nclay pole\nclan king\ncine rea\nchild lessness\nchat ur\ncel sus\nce dentertainer\ncar ris\ncal fire\nbun inyong\nbt group\nbrø nd\nbru hs\nbring itback\nborro wings\nbooster club\nbli t\nbho sale\nbar de\nbad ha\nbach alo\naw oo\nangelalan sbury\nana q\nalm shouse\nald well\nad dae\nacec ar\nac ats\n= )))))\nðŁĴ ¾\nðŁij¨âĢį ðŁĶ¬\nðŁIJ ¡\nðŁİĬðŁİĬ ðŁİĬ\nðŁįªðŁįª ðŁįª\nâĺĿ ðŁı»\nاÙĨ ÛĮ\nyu a\nys auce\nyaa dein\ny nasty\nxmas jumperday\nx ende\nwkc dogs\nwin tle\nwesterni zed\nwelcometo fife\nwearable art\nvol f\nv orders\nunborn livesmatter\nun inviting\nultra chat\ntyn drum\ntrump taxscam\ntroeg sbeer\ntrave sties\ntom ove\ntime suk\nthisweek abc\nther uf\nthen asem\nthe blues\nthatcher ism\ntender foot\nteacher training\nsuper cili\nstol per\nstif les\nster rett\nsta el\nspl endo\nspace walks\nso zo\nso be\nskelton sophie\nshe kar\nshaw sheen\nshar bat\nscienti sm\nschoolo flaw\nsand nes\nsa stry\nruby tandoh\nru sal\nroger bezanis\nridge view\nr ttowin\nr nu\nqu ach\nq esh\npv z\npol ster\nphysio logically\npeter kin\npe prally\npat ar\npaci fying\nou gars\nom n\nolu wa\nof thel\noci ation\noat cakes\no ja\nnw fl\nno stell\nnhsc trust\nne utdfc\nnbc sandiego\nnar ges\nnak aka\nmyri am\nmonte jo\nmis ael\nmilak unis\nmero ving\nme hi\nmatte son\nmathiascor mann\nmal content\nmah ana\nma zzi\nm xc\nm rad\nlou sa\nlob sang\nlind asu\nliat ris\nli jk\nldn ent\nlamb dal\nla har\nkres se\nkra z\nkot ze\nkathe vans\nka than\nka det\njim cameron\nj achat\niso topic\niow acubs\ninthe usa\ninspira si\nici onal\nib tiss\nhoursof spa\nhou gaard\nhomin ids\nhome makers\nherz berg\nhello ooooo\nhan am\nhamilton ians\nhal lux\nh mis\ngreeng ables\ngr itti\nglyco sy\ngl ace\ngabby logan\nfrank town\nfb nation\nfazak erley\nexti rp\nen cwx\nemiratesair line\nemili op\nell ac\ndolant wins\ndo blo\ndisbur se\ndevi ates\nden cia\ndel amar\nde aries\ncor ton\ncolo colo\ncodi fy\nchristma scards\nby word\nbryo phytes\nbro g\nboath ouses\nbare illy\nbaldri ge\nar field\nanc ook\nalway sab\nï¸ı âĻ\nìķ Ī\nåIJį åı¤\nà® ľ\nzap ier\nys london\nx bit\nwy kes\nwsc atlanta\nwork flo\nwool loongabba\nwied lin\nwake ful\nvitru vius\nvijay awards\nvel ive\nvan ss\ntur ri\ntokyo pop\nthe pretty\nthe orlando\nthat sthe\nteam c\nt zy\nt byd\nsun catcher\nstephen colletti\nstal inism\nspag nu\nso tis\nsnowmob ilers\nshop my\nsho ward\nshe kel\nsharma bjp\nser zh\nscru mv\nsat un\nsas one\ns los\ns line\ns bt\nru ski\nquarter finalists\nquand t\npun kt\npp an\npin acol\npepper idge\nopti ks\nofficialtf gm\nnottm playhouse\nnor dan\nno ter\nnewtech network\nnaf t\nn mmu\nmulti beam\nmotor ing\nmontesqui eu\nminof culture\nminofculture goi\nmime sis\nmicror nas\nmi ani\nmazz anti\nmasa an\nmal bork\nm wak\nley green\nle ther\nla ging\nkurt schlichter\nki ke\nkal ona\nju dai\njanele eves\njale el\nitv westcountry\nis ci\ninthe box\nimpu dent\nih re\niamking promise\nhy pixel\nhugh i\nhau dio\nhan kerson\ngru sin\ngrand view\ngra vid\ngodd d\ngo puram\ngas sy\ngalactic elliot\nfra ger\nfow le\nfon er\nfest spiele\nfandom btsarmy\nesc aflow\ndispropor tional\ndes barres\nden ker\ncred ito\ncr ite\nconsu ls\ncl aman\nchimpsin socks\ncheer up\nche shirec\ncharliebaker ma\nchang kat\ncaleb shomo\nbra sh\nbor ra\nblack work\nbharat bandh\nbha d\nbell let\navi vauk\natra ircraft\narvid sson\nano d\nanjun adeep\nanim ate\nangela white\nalco pop\nade en\nac coya\n" .-\nðŁĴľ ðŁĸ¤\níķ ł\nìľ¤ ìķĦ\nåĽ Ľ\nâĿ¤ ðŁIJ¾\nൠį\n़ ा\n© ×\nzan aco\nyw pd\nyu va\ny rian\nwood works\nwe stor\nwak an\nvel iko\nvanguard ngr\nvanguardngr news\nvanc leave\nun learning\nuk crafter\nuih lein\ntur ay\ntum mel\ntrelaw ney\ntour nee\ntho ckey\ntherealt boz\nthereal mattkemp\nte un\nta sik\nswag gg\nsteph end\nstar ring\nspe ace\nsouley mane\nsoo o\nsonic forces\nsinful sunday\nsimp er\nsilli er\nshop uk\nshon ibare\nshay kh\nshan kha\nsham shad\nsever ally\nsef covic\nse ow\nscar is\nscale bound\nsandi acre\nsalty ard\nru ta\nru gosa\nronald say\nrn wn\nresusc itating\nratche tness\nranc agua\nproudto bean\npropor tionately\nposh mark\nplu tus\npetro ff\npeter gallagher\npers ico\npas crell\npar amo\noun ion\norgreave justice\noar sman\nno iz\nnca avolleyball\nnca atennis\nnavy seal\nn lex\nmy scar\nmor io\nminn ich\nmil aj\nmicro tia\nmichael jackson\nment is\nmein en\nmatt bennett\nm qi\nlub wx\nlo tan\nleo burnett\nlegalize marijuana\nle scu\nkuchi ki\nkon omi\nkha sh\nkey amo\nkel y\nkare em\nkal vin\nin humanely\nin coming\niam sandraoh\nhydro electricity\nhigh wycombe\nher dsman\nhel dt\nhealthy habits\nhand printed\nham re\nhait ink\nguter man\ngg davidjohnston\nfinger hut\nfel tbicycles\neuron cap\ner and\nemu fb\ned din\ndran ks\ndi wata\ndesro chers\nddin shah\ndayton flyers\ndam ed\ncry onics\ncream tea\nchev rier\nche wy\ncastle berry\ncar leen\ncanni zzaro\ncal c\ncadi gan\nbuddy hield\nbor rero\nbn ppm\nblove is\nbeast men\nbe fi\nbash kor\naz ed\naudible uk\naten cion\nasab fb\nant sy\nandri us\nana am\nallen ge\nag onies\nag ian\nad dax\nactin ic\nach ats\nacci dente\n* âĢ¦\n) âĿ¤ï¸ı\nðŁİĦðŁİħ ðŁı»\nâĢ ¥\nÄį ek\nyoo hoo\nyar wanda\nwo hn\nwi mey\nwarren dale\nwaja hat\nvidy ape\nuoft medicine\nunct ad\nun scramble\ntri fid\ntravel ph\ntrade deadline\ntop starnews\nthe ophile\nterror tuesday\ntan imals\nsubscri bes\nsu chard\nstone cutters\nstev elu\nstar darshan\nst mark\nsouthpoint lv\nsin fulness\nshi bley\nsher lyn\nshepar d\nsham o\nsentom cotton\nseems legit\nsecre tof\nschool snc\nsche ster\nscam era\nsar ny\nsal tal\nsaint anselm\ns wn\nraf fi\npu gh\nproudto workatbmo\nprojec tre\npratt and\npm ct\npie za\nph m\npeten ajarian\npeop lemw\npentag onal\np wt\nom pt\nold spice\nol au\nnyu stern\nnorth park\nnews journal\nnew sen\nnear by\nnas lofficial\nnag ase\nn gh\nmor th\nmoder nam\nmi len\nmelissaand joey\nmeli odas\nme cham\nman zar\nman asu\nma br\nm roz\nly u\nlili enthal\nkyo suke\nku fr\nkra viz\nkk c\njäger bomb\njulian marley\njrr tolkien\njoin aap\nje pang\njam ar\niv ri\nin most\nil ys\nil ok\ni give\nhe ymo\nhak ko\nh tcu\ngreen skeeper\ngravity x\ngol dies\ngo inghome\ngh arib\ngart side\ngab ru\nfly y\nfil by\nfi dan\nfet life\nfay ad\nfant ino\neno ir\nema son\nem itchell\neli p\nel angana\near thers\ndun igan\ndor f\ndo j\nditt mer\ndex po\ncre aky\ncorri mal\ncoraz on\ncon fab\nchang an\ncha amp\ncer vi\ncaer u\nbur le\nbull ington\nbry anna\nbroom all\nblo ks\nbilly porter\nben koku\nbell ringing\nbel ou\nbe informed\nbalu arte\nbad sha\nb surveillance\nb gi\natasco sa\narmend ariz\nake ley\nak ers\nag od\nag grandi\naf rc\nact itud\nabe sigye\naa fia\n? ðŁĺľ\nðŁĺĥ âĿ¤ï¸ı\nðŁĺĤ ..\nðŁķ İ\nðŁĶ¥ ðŁĴ¥\nðŁ¤Ń ðŁ¤Ń\nìŀ¥ ìĿ´ìĶ½\nìĽ Į\nì ¦\næľ ±\nãĥ¼ãĥ IJ\nâĨ ©\nà¹Ģภģ\nworld alzheimersday\nwine review\nwillmott dixon\nwelcom ing\nwarri gal\nwaifu wednesday\nw acs\nvon ian\nvinyl collector\nvalu eless\ntvguide magazine\ntru eee\ntroy aikman\ntrap soul\nton ature\ntic toc\ntheti den\ntheroyal opera\nthere bel\nthekings fund\nthe feed\nthat swy\nthal f\nteam tuesday\nteam psg\nte bogo\ntalis manic\nswar na\nsupriyo babul\nsulay maniyah\nstubb ington\nstraw man\nstoudam ire\nssel berghe\nsp ak\nson amo\nsm ic\nshack ling\nscott k\nschool trip\nscandal ously\nryu junyeol\nrukh sana\nri sin\nreic hard\nreflexi vity\nred lines\nraim undo\nr ki\nr kg\nr ills\nps j\npre ndre\npra dera\nplat in\npir atical\npig nat\npicke ters\nphilippe gilbert\nph um\npe otone\npap olitics\npap ad\npadmash ree\np sms\nover stepping\nosu v\nooster beek\nocam l\no izo\nnc po\nnational pastaday\nnat aly\nnan kana\nnag ari\nn fum\nmyco toxin\nmr h\nmo ayush\nmitch gerads\nmis uponus\nmike j\nmendo za\nmass generalnews\nmar kes\nma kinson\nm sy\nm ll\nlu u\nlin gotto\nlight itup\nlie bes\nliciou sto\nle pper\nle compte\nlady tron\nlac aze\nlab corp\nku rien\nkle infeld\nkin nard\nk sp\njapanese chin\nj williams\nis b\nine te\nima am\nhong seok\nhell yes\nhealth food\nham med\nh bogo\nh barnes\nguer cio\ngi puz\ngal is\ng tc\nfutureof mobility\nfu miko\nfre jus\nfrance sinha\nflu mes\nfal am\nentreprenu ership\nelek tronik\nelast o\ned widge\nearly risers\ndutch nat\ndu breuil\ndont panic\ndo xy\ndigital divide\ndi ack\ndeuse x\nde it\nde cle\ndark matter\ndac apo\ncow pens\nconten to\ncoach d\nclackmannan shire\ncin zano\nchin y\nchild safety\ncc stca\ncastille jo\nbo jonegoro\nbmw champs\nbio engineered\nbig dayout\nbeer advocate\nbaycity rollers\nbashkor tostan\nband master\nban sal\nbailey sprize\nbag nell\navo ices\naugust ine\natu cker\nat avi\nas kincare\nari v\nari ana\nar ten\nar pad\nanne tta\nangi olini\nang ini\nalex ail\nalber tan\nagor aphobic\nago g\nacar r\nab ration\nðŁijIJ ðŁı¼\nðŁıħ ðŁıħ\nëĵ ł\nê³łë§Ī ìĽĮ\nzoo sk\nzam in\nz eca\nysrc party\nwux ian\nwonder lust\nwin fromwithin\nw chl\nvanhoo ser\nvan ak\nurbang ardening\ntwee zer\ntop speed\ntoi fa\nto ghe\ntic hen\nthesam icallihan\nthen bhd\nthe plac\nth ate\nte sl\ntar kowski\nswan ee\nsub plots\nstar ac\nsse m\nsouth church\nshet ler\nshare thedream\nshar my\nshane helm\nshanehelm scom\nsham sher\nsh amy\nsewing bee\nsen o\nsecurity council\nse tif\nse ap\nsco bar\nsand alphon\nrosen gren\nri ina\npro pa\nprime performer\npri d\npod cas\npar mley\npar ise\npail waan\nopen jdk\nop lus\non hot\nobi dos\noak v\nnight club\nnec primeperformer\nnational nappingday\nnadal ind\nmush taq\nmure san\nmo dan\nmiln row\nmil ing\nmeyer land\nmarang oni\nmal ope\nmaje sty\nluci ano\nlobo tom\nlean or\nlaro ja\nlab and\nkhar al\nkatie qlowes\nkar adeniz\nk beauty\njon ty\njoann alum\njiz an\njak elong\nit railer\nis sou\nindie gaming\nill ero\nile v\ni sho\nhuguen ots\nhr block\nhoch schild\nheart this\nhar bisson\ngu zheng\ngu li\ngraven ey\ngo stags\ngno sticism\nglasgo wc\ngc punknewwave\ngar field\nfor c\nfoodre volution\nfood mag\nfle sch\nfinan za\nfin ning\nfieldof dreams\nextr atropical\nestadouni dense\nest il\nero ski\ner mer\nelection pakistan\nel mes\neh c\ned ar\ne tec\ndonnell rawlings\ndon kiss\ndon avon\ndil raju\nden mead\ndar le\ndal um\ncyber goth\ncra ige\ncow rote\ncortel you\nci flacs\nchir stmas\nche in\nchallenging stardarshan\ncatholic newssvc\ncalvin ists\nc xr\nbrou weri\nbro sse\nbir gunj\nbig wig\nber lage\nbell oni\nbe ze\nbe sting\napi er\nanat oli\nallo tt\nali ko\nalcon bury\nal ver\nadobe symp\nab rin\n@ _____\nðŁĺŃ âľ¨\nðŁįĬ ðŁıĪ\néĻ Ī\næĿ ¨\nä¿ Ĭ\nکر ÙĪ\n» ðĿĹ\nzi bo\nwrp stoday\nwey bourne\nwbc baseball\nwater town\nvo lei\nviol ino\nvers ation\nvend itti\nvee redi\nvalue walk\nvalky rie\ntü v\ntwick enham\ntweetyour seat\ntra ven\ntow yn\ntoo ie\ntmr kt\ntin sider\nthereal stylesp\nthe quietus\ntalis ca\nta aa\nsuppor ts\nsun omiya\nsu el\nstru tters\nstpaul saints\nsquirrela ppreciationday\nspeak up\nsour cing\nso rell\nsmee th\nsle zak\nsingul arities\nsimul ink\nshor ne\nse iner\nse gan\nsawak ened\ns was\ns enger\nru mi\nroman ized\nrin der\nrhy d\nrayne spark\npushawards donkiss\npu yi\npro max\npres anctified\npou rover\npom bo\npi kappaphi\nphe l\nperver sely\npatriot sawakened\no canada\nnil an\nnamak kal\nnam ja\nmull ery\nmt cc\nms ss\nmol ls\nmil ner\nmi datlantic\nmend on\nmedic aleducation\nmedi acon\nmc nichol\nmb raves\nmatricul ated\nmat thu\nmarcin iak\nmagic weekend\nma assen\nlun amaya\nlu skin\nloc all\nle ury\nlawn mowers\nkum bia\nku wabara\nknap ton\nklo veradio\nkizz abesigye\nkirkby lonsdale\nking e\nkap ar\nkalev ala\nkad ay\nk me\njumu iya\njoey kramer\njhar su\nj nc\nittf world\ninvinci ble\ninsinu ated\niniti ald\nindra prastha\nide e\nic v\nhob goblins\nharrogate hour\nha ab\ngu lab\ngreen party\ngod des\ngir ouard\ngb ball\ngas pe\nfunny bone\nfore sti\nfla k\nfin back\nfan tome\nfairfax county\nfa ecal\nf mtv\neli zed\nel khound\neeve elu\nec lo\ndur ley\ndun ord\ndublin pride\nduba iland\ndrainthe deepstate\ndpc dsb\ndoun reay\ndelight ful\ndel mon\ndaf trucksuk\ncrê pes\ncruci form\ncreati va\ncountyof gp\ncot trill\ncorpor ately\ncooper union\nchi ayi\nche doke\nce of\ncatul lus\ncapodi monte\ncallum smith\nbu cheon\nbrun elle\nbren a\nbrand l\nbis sell\nbis cay\nbig dreams\nbha gira\nbearcat nation\nbe tw\nbau dry\nbath wick\nbangerz tour\natt lers\nan tum\nameli ar\nall am\nagelim it\naga pe\nag l\nach ari\nabstr acting\na hini\n( âĹı\nðŁİħðŁı» ðŁİĦ\nzo boomafoo\nzeetv jodhaakbar\nwur d\nwoody harrelson\nwol bachia\nwhite way\nwe ma\nwash dc\nwalker hayes\nw assim\nval orem\nv atika\nus vi\nturkeye lections\ntro binson\nthegreatest showman\nthe oscars\nthe core\ntelegraph news\ntarheel nation\ntar ge\ntan it\nta zz\nsyd ni\nsurve il\nsul fites\nsub soil\nstr m\nsten nett\nsonthe hill\nso sick\nsnorkel ers\nskit ouring\nshowyour stripes\nsh kar\nsexu ales\nse alift\nscifit v\nsame sex\ns mag\nroyal jordanian\nrou k\nrosen heim\nrosen ama\nrosenama junas\nron quillo\nrock solid\nrit zy\nre orient\nre negotiating\nr atta\nprote aceae\npronoun cements\npp s\nplot lines\nplen itude\non p\noliviap alermo\noakland county\nnortheaster ly\nnikhil chinapa\nnight cliff\nnic oti\nnext topmodel\nnear buy\nnas ution\nmote ts\nmill woods\nmigun amig\nmicha elia\nmi kazuki\nmez quita\nmar ls\nmar lee\nmagicmike xxl\nma gre\nlondon calling\nlo wit\nlive phish\nlies matter\nli viu\nlarry king\nland use\nkristi ana\nkib bie\nkhu lic\nkavanaugh now\nkassi us\ninked girls\nic gc\nhughi efury\nhouse sitter\nhon asan\nhir ingnow\nhelg ason\nhear ty\nhead stall\nhartford courant\nhang leton\nham lett\nhalton police\ngro es\ngriffon ramsey\ngoulet pens\ngeneral isation\nfore stier\nfi ere\nevent prof\net ats\net at\net ags\neric thomas\nembroide rers\nel sner\neet ings\neaster island\ndepu is\ndelhi ites\ndan brown\ndal riada\ncosmopolit anism\ncon cious\ncolling wood\ncl at\nchinese medicine\ncephalo pod\ncdn press\ncau stin\nbull frogs\nbruno tonioli\nbroad cloth\nbombay bicycle\nblood brothers\nbic ultural\nberen berg\nber ro\nbd smovement\nbar in\naugu ay\nash es\nash combe\naschaf fenburg\nar groupsuk\napp l\nap na\nannecy festival\naltam irano\naj w\naga inste\nabster go\nðŁķ ¡\nðŁĶ¥ ðŁĴ¯\nðŁij¦ âĢį\nåĭ Ł\nãģĹ ãģ¦\nâĽĦ âĿĦ\nà¹Ĥà¸Ľ ร\nà¹ģภĹ\nyouth homelessness\ny da\nwhid bey\nwat onga\nvisith ampshire\nvi rion\nvg com\nvel ux\nuri en\nukcrafter shour\ntur ville\ntur rican\ntsong khapa\ntourdecor se\ntimber ners\ntier no\nti rl\nthirty something\nthermo plastics\nthelo af\ntb q\ntal aash\nta kuma\nswan son\nsuperbowl xlviii\nspencer boldman\nsort sintl\nsleepyhollow fox\nsla vik\nsi dro\nshet terly\nscroun ged\nsan mate\nsafe haven\nrun du\nruff ner\nrod ina\nride ox\nrep ens\nrec chi\nre zeki\nprophe tically\nplan um\nping ry\nparrs boro\nparaparau mu\np cori\nor rinhatch\nolive tte\noli vella\nofficial blue\nof ashion\nnush rat\nnun an\nnie man\nne rea\nne grin\nnaq sh\nnant garw\nna hlhockey\nna anum\nmycause my\nmy journey\nmodern warfare\nmitt agong\nmis appropriated\nmin der\nmiddlesex uni\nmicro tubules\nmgmre sortsintl\nmer na\nmaru game\nmalm strom\nmait ake\nmacmillan kidsuk\nlemon is\nlance field\nkra g\nko sty\nko li\nkm fm\nkad aga\nkacz marek\nivel isse\niti er\ninter bay\nintelli j\nin sou\nili um\ni imc\nhrtech world\nhoo fer\nhit parade\nhill crest\nhapand leonard\nhair growth\nhail stone\nhaha aha\ngurun anak\ngrac ed\ngemini ds\ngd st\ngal v\nfor umb\nflo tte\nflash man\nfl outed\nfent on\nfe tters\nfamily goals\nfa wnl\neviden cing\nescal ada\nem j\nel r\neff lorescence\ndi ant\ndev lin\ndepend ants\ndeath ly\ndark and\nd bo\ncrimin alizes\ncrashed ice\ncor robo\ncop us\ncm chat\nci ot\ncast en\ncarlo sainz\nbritish pieweek\nbrad wall\nbor on\nbird shot\nbiomole cules\nbi bby\nbestteam in\nballe tic\nbagat sing\nbac ton\nau ghtme\nat the\nas afo\nar ness\naqual ad\napit alist\nanu media\namericanc rime\nali ah\naldub thering\nair worthiness\naegon championships\nabu il\naa aan\nðŁĻĮ ðŁĻı\nðĿĺª ðĿĺ\nå¤ ª\nâĿ¤ï¸ıðŁĴĻ âĿ¤ï¸ıðŁĴĻ\nâĺĢï¸ıâĺĢï¸ı âĺĢï¸ıâĺĢï¸ı\nâĬ Ļ\nà¹ģภģà¸\nzyg munt\ny ula\nwy lie\nwork space\nwild scotland\nweather tech\nwean ling\nviz quel\nvit olo\nvi gg\nver day\nusu l\numich hockey\nuk health\nty pennington\nton et\nthisis fusion\nther saorg\nthe wee\nthe village\ntele conferencing\ntab lature\nsv vsd\nsun burns\nsul tra\nstar my\nspring isd\nspat ter\nsmac cus\nsku ld\nsizz lin\nsin space\nshu ji\nsfor you\nscol lide\nsche ana\nroth gar\nroo ke\nrohan mehra\nradi oman\nrach els\nra ditional\nque star\npra des\npost secret\npon dy\npi lea\noto scope\nol kata\nofficial sslazio\nof books\nny jv\nnord berg\nnice attack\nnax alite\nnar ducci\nnad asurf\nn sula\nmy babies\nmsh sl\nmom of\nmoist ened\nmit r\nmin di\nmid wales\nmel ena\nmeg u\nme urer\nmayward for\nmargare tho\nman ov\nmal ouda\nmah ra\nmackin lay\nluxor lv\nloun gers\nlo pers\nlim pid\nligab an\nligaban comermx\nland wehr\nl alive\nkumar u\nkhulic hana\nkho si\nkhaz anah\nkell am\njewer ly\njenniem calpine\ninterven tionism\nini sti\nin volu\nhusky pride\nhe tt\nhe aver\nharri sfaulkner\nhandmade jewellery\nh laudi\ngü nter\nguadar rama\ngreeting card\ngoo dge\nglen ns\nge tb\ngann icus\nfun ck\nfountain sabbey\nfficial page\nfa thy\nescut cheon\neric ans\nemb erton\nei der\necor nish\ndj ze\ndj david\ndil bar\ndia internacional\ndeob andi\ndel ice\ndej oun\ndegre esof\nde mountable\ndang le\ndaffo dil\ncp gs\ncorre os\ncocc inea\nchub buck\nchic lana\ncassad aga\nbul lock\nbu erk\nbru v\nbom ar\nbh vr\nbass rush\nban kon\nax ons\nall inthe\naleu tians\nagar nier\naf und\nact for\nab ct\na septic\nðŁĶĿ #\nðŁĵ ľ\nåĴ² èī¯\nâĽı ï¸ı\nâĺİ ï¸ı:\nâĢ¢Ìħ _\nص ÙĪرة\nин а\nzel jko\nyour plate\nxylo phones\nxu an\nwire uk\nw kc\nvisit norway\nvann elli\ntone bell\nto car\nti gi\nthi el\nthe tachi\nthe doctors\nteryl rothery\ntauto u\nsunsout gunsout\nsunday live\nsun od\nsu chus\nst mun\nsou li\nsn ts\nsmom entum\nsi saket\nsfra hm\nsean sch\nscott adam\nsch ank\nregin a\nrecycle sday\nratche t\nrapo so\nram page\nprof david\nppsells babyparts\npolicy maker\npol lex\nplus blogs\npion ate\npe avine\npan ache\notta war\nos by\nor be\nnpa ie\nneapol itan\nnatural is\nnar r\nnal im\nnail sinc\nna thuram\nn lg\nmoto red\nmontan astate\nmeik le\nmarqu am\nma whinney\nlu ria\nloyol amar\nlone some\nlive aboard\nlection fraud\nkoval ainen\nki anand\nkath imerini\nkar dia\nkad av\njur ra\njugend stil\njim parsons\nji ye\nji goku\njanete van\njackierobinson day\nishin omaki\nindu sind\nindiant ellyawards\nhus n\nho din\nhim zahawi\nhel goland\nhal mahera\nhack neye\ngrind time\ngranul arity\ngon injas\ngobel ins\ngo pa\ngab led\nfu ke\nfree bets\nfra bbits\nfior ucci\nfam z\nfake facts\nexpress js\nevery corner\neuro scepticism\neu karyotes\nes w\nerik solheim\nephemer is\nellen ville\nelec ciones\neg ner\ndundru mtc\nducati uk\ndu stria\ndou ge\nden nys\ndemarcu sware\ndel luk\ndeduc tibles\ndecade of\ndebash is\nde muro\ncumbri ans\ncor abi\ncon ures\ncol ter\nchar ri\nceremon ially\nce tin\ncatar aqui\ncasc ina\ncas eros\ncarrauntoo hil\ncarr aro\ncapitul ated\nbrown coats\nbr cnews\nbong bong\nblood root\nbir bhum\nbig dog\nbi gr\nbe wafa\nbar gy\nawe som\nau zon\naspho del\narro el\nar ace\nann erley\nal annah\nah jussi\nag op\naber rations\naan and\nðŁĻıðŁı¾ .\nä¹ ħ\nâĿ¤ï¸ı âĺĢï¸ı\nzen kmm\ny the\nwood z\nwood burner\nwol fin\nwic cans\nwho p\nwetter ling\nwer ki\nwel len\nweid ler\nwartho gs\nvirtu osi\nvi aj\nveteran sday\nutre ch\nunicorn day\nun seasoned\nun mas\ntu dela\ntre acher\ntou rage\ntororosso spy\ntit res\nthi g\nthelon gest\nthe budget\ntable tennis\nsupt king\nsub structure\nsri devil\nsridevil ives\nsridevilives forever\nsportac cord\nsloven sko\nsha shan\nsequ el\nsenergy drink\nsal vac\nsal guero\nryandun gey\nrter ugby\nrou st\nretin ue\nreti rez\nrecre ationally\nq bl\nproco pio\npro digi\npri matologist\npram ukh\nphobla cht\npets alive\nperver ting\npersonality disorder\npaulo grady\npat chen\npachu lia\np drc\nover step\noneof ourown\nnow all\nnew show\nnat aly\nnasag lenn\nnanomat erial\nnan ing\nmonast icism\nmohandas pai\nmobile al\nmo yn\nmin ju\nmh clg\nmedi us\nmaracan ã\nmac m\nlur d\nloin ie\nlobby day\nlil ya\nles b\nlaer dal\nkyle brandt\nky naston\nknow thyself\nkk k\nkenner ley\nken ichiro\nkemer ovo\nkear ly\njuli er\nioc prev\ninsu rable\nindustri ally\nindian ad\nin ot\ni play\nhur ford\nhigh park\nheine mann\nhay akawa\nhann elore\ngol dglove\ngi lets\nge ph\nfun mi\nfree india\nfowl kes\nforesth ills\nfor ap\nfor africa\nfeelthe burn\nfal guni\nes man\neni ola\ne special\ndis contented\nde personalization\ndavid the\ndad aist\ncon ow\nclow nish\nclassic horror\ncj leblanc\nchri sf\ncho dron\nchee siest\nchau sson\nchan dos\nchall inor\nch ado\ncanter o\ncandre va\ncal stock\ncad avers\nbuon arro\nbrandon heath\nbra hm\nblock ades\nben ayoun\nbad ab\nba artman\nb girl\nassisted living\nare op\nanast aciam\namusement park\namath us\nalec bradley\nab dal\nðŁķ Ŀ\nðŁ¤Ļ ðŁı¾\nãĥ ĸ\nà° µ\n௠ģ\nzsas z\nz ok\nyoshim itsu\nym x\nwj bf\nwella pro\nwe aried\nwal kal\nvital signs\nvini fera\nurock radionet\ntvweek mag\nti ii\nthe viperroom\nthe gift\nthe festival\nthe angry\nte ds\ntce lectronic\ntai k\nsuper collider\nstü ssy\nstre ats\nster ritory\nstat ev\nssi one\nspar xxx\nspace invaders\nso ini\nsheep adoodle\nsexiest manalive\nsemper fidelis\nsec ant\nse sotho\nscol aire\nsal onica\nsa repta\ns monday\nry de\nribble valley\nre ssed\nre deploy\nrail pictures\nra sm\nq ag\npotat os\npost lethwaite\npl iner\npd news\nparli ment\npark boyoung\nor ito\nopp ermann\nooster hout\nofficial donegal\nnr ms\nnor walk\nnin ak\nnick swag\nnad himzahawi\nna ho\nn á\nmt pa\nmonet arily\nmo tac\nmiss vogueuk\nmi amis\nmetr onews\nmc curtain\nmassey ferguson\nmar azzi\nman liest\nmame tro\nmag si\nmac alister\nlu bez\nlo salam\nlie shout\nlegen ius\nl wow\nkri korian\nkan zaki\nkam pu\nka ther\nka ida\njoss elin\njo su\njes shar\njeff erys\njdr f\njapan gov\njackolan tern\nj gi\nitscold outside\nintellij idea\nhypnoti zes\nhur u\nhub bert\nhu zoor\nhu sen\nhondac ar\nhill i\nhar leys\nh wv\ngu se\ngrin berg\nglu on\ngiant games\ngi ously\nger hard\ng gh\nfre eness\nflor a\nfleet line\nfit forlife\nev ak\neurope echecs\nel op\ndor sa\ndeep veer\ndecem bre\ndavid burtka\ndave meltzer\nctb ase\ncru ll\ncrit care\ncoron ado\ncoachtom herman\nclark university\ncityo ff\nci fa\nchin chin\nchangeagent sa\ncatherine tresa\ncate che\ncas ula\ncas kale\ncaroline manzo\nbull riding\nbreck in\nboving don\nbot kin\nbon ner\nbo ie\nblack welder\nbi yani\nbegum pet\nbbc spoty\nbad guy\nay tas\natv show\nas ml\nart deco\napod aca\nam aa\nalu z\nake sson\nak sy\nag aya\naero tropolis\nac ire\nac d\na ang\n! -->\nðŁĺĺ ðŁĴĺ\nðŁĺį ðŁĺĪ\nðŁĶij ðŁĶij\nðŁİ¸ðŁİ¸ ðŁİ¸\nðŁįĤ ðŁįĥ\nâľ µ\nÙĥ Ø©\nع Ø´\né l\nyoure ye\nyacht smen\nx fire\nwriter life\nwilmington nc\nw ne\nvv pat\nvroom vroom\nvisit richmond\nv cc\nuntam ed\nun accustomed\ntusk ys\nto eat\nthom astur\ntheatre news\nter amo\ntaq iyya\nsupper sunny\nsue anna\nstan doff\nspi key\nsp uppet\nsolit ario\nsm itt\nsic ard\nshurtle ff\nsell wood\nscout scanada\nscott age\nscien cel\nrudolf schenker\nring sidec\nravi shed\npride seeds\npopul arizing\npin elli\npfe il\npe skin\npav oni\npatric ian\nover doing\noli sa\nof arevolution\nod ley\nnut case\nnu us\nnu fbfamily\nnou ll\nnor df\nnon committal\nnin der\nnil sfrahm\nnes see\nnc isla\nnation scup\nn ment\nmy army\nmon naie\nmin oo\nmicro aggression\nmechanic ville\nmcl ane\nmam mill\nmakeupforever us\nll nl\nlarcen ciel\nkoni shi\nko tto\nko sk\njiha di\njezz ine\njewish chron\njeh lum\njam rock\njack fish\nhw ys\nhoy les\nho el\nhealthy ireland\nhavan aclub\nhate story\nhash t\nhaiti en\ngwal tney\ngun fights\ngre han\ngo wings\ngha ith\nger vase\ngemin id\nge u\ngal im\ng ct\nfre chette\nfr yn\nfight stick\nfeltrin elli\nfast car\nen hor\nel pais\nec bc\ndu bonnet\ndragmedown musicvideo\ndrag ali\ndou bloon\ndo eee\ndi ks\ndepon ia\ndece m\ndeal z\ndavis jr\ndavid suzuki\ndat ar\ndan agould\ndamekelly holmes\nd hun\ncycl onep\ncur sus\ncra pped\ncool runnings\nconden ses\ncoco abeach\nco ie\nbur ghs\nboy ata\nbound forglory\nbor stal\nbo bin\nbin ley\nbiblio graphic\nbethe sd\nbel fer\nbeg awan\nbbvacom pass\nbarbap apa\nath let\naspher ical\nasic s\nart smith\nang ely\nam ancio\nalway son\naero tech\nadul terers\nach inery\nacclimati se\nab util\n-. -"\nðŁĺĺ ðŁĺįâĿ¤\nðŁİĢ ðŁİĢ\nâĵ Ķ\ny anti\nxx music\nwin don\nvisu ali\nvid mar\nvic is\nva ad\nurbann ax\nun sr\nukin theusa\nthisday ing\nthewilson center\nthereal b\nthe pink\ntape o\ntann ersville\ntakam ina\nta isuke\nt soi\nsylvan us\nsuper humans\nstu ckin\nsimel ane\nshu ddle\nsex scandal\nseriou seats\nsa official\ns alive\nruz icka\nroyal freenhs\nrosequ artz\nroo tin\nrock box\nrobert m\nrealm royale\nreal remyma\nrawn sley\nradhi ka\nra ee\npuppete ering\npsych ical\npro positioned\nprick ly\npreacher amc\npr z\nposhan abhiyaan\nplaybook athlete\npim enta\nperi ence\npenn sboro\npen cak\npb ks\npanch ali\nov ando\nou uuu\not ch\nop r\nonthe farm\nong kong\nol szewski\nnj con\nnas sa\nna ag\nmyhouse idea\nmtu hky\nmm ilive\nmentionsomeoneyou rethankfulfor\nmeg acon\nmann ino\nman field\nmal ins\nmal alay\nm itic\nluv vie\nlu to\nliving uk\nlet my\nled lights\nle zz\nla ves\nla er\nkroko dil\nkonicamin olta\nkir mani\nker mes\nkelly hu\nkam io\nk wei\njuego de\njim henson\njan netty\ninsider tweets\nine us\nin chon\nhuck berry\nhorseback riding\nher ault\nhe arer\nhar uki\ngood wyn\ngon zi\ngil ardi\ngaunt let\ngar lock\nfur ni\nfrom me\nfle xbox\nfiore tti\nfence post\nfac ed\ne board\ne anes\ndomestic violence\ndissoci ating\ndem u\nde briefed\ndavemeltzer won\ncopp el\ncom tesse\ncle lia\nchiropo dist\ncate ley\ncarlin i\ncan ongate\ncaed mon\nca thal\nbru d\nbrett cateley\nbran sford\nbook qw\nblack street\nblabber mouth\nbi gup\nax illary\nauto gly\nanan sie\nan wr\nan ax\namblyo pia\namar deep\naji mobi\nair show\naesthe te\nad oes\nac loud\nab culture\nðŁĺĺðŁĺĺ ðŁĺį\nðŁĮ Ĩ\næĺİ æĹ¥\nåģ ¶\nâĻª âĻªâĻª\nÙĨÙĪ از\nyr self\nyouss ouf\nylon agarcia\nyeee haaa\nxl center\nxende sktop\nwl k\nvote sforwomen\nvolk man\nvo ssen\nunion bank\nunicy clist\ntro is\ntri ppe\ntr b\nton kawa\ntin su\nthree words\nthom an\nthe wave\nthe party\nte ann\ntarahu mara\nsy lum\nswee thome\nstick in\nsteep ing\nstavro pol\nsound transit\nsophi atown\nslike these\nsk n\nsk ille\nsimply santafe\nsimon parkin\nsi pri\nsi dero\nsi benik\nser dar\nsch ronicle\nsander stead\nsabah tourism\ns thorpe\ns ates\nry sselberghe\nred way\nrec tus\nre ba\nravi pudi\nravens thorpe\nrath more\nranfur ly\nrad itya\nra pra\nra pacious\nquan zhou\nprinsen gracht\nphoto ed\nphon on\nphenomen ons\npeople smosquito\npd mf\npdmf nb\nparticip a\npar malat\npapp ano\npalaeonto logist\noli var\nol ink\no fu\nnpr freshair\nnoe mie\nniç oise\nng tindia\nnc statec\nn toko\nmun tashir\nml bn\nmarches afashion\nmarcel hirscher\nmacgy ver\nmac chia\nlung fish\nleh to\nkon tiki\nkk as\nki pro\nkerry on\nkendra para\nivan ovich\ninte gra\nhirsch man\nhin tze\nhemi plegia\nhar ned\nhappyhappy labs\nhanafu da\nhalam adri\nh ure\ngreece central\ngra gson\ngoodby enewton\ngoodbyenewton trees\ngo with\ngo scots\ngo cubs\ngb x\nfootball museum\nfly boy\nfil enames\nfearthe fin\nfast web\nf muganda\next ents\neure kalert\nescaflow ne\nerra zu\nero bbins\nentourage movie\nenni es\nea fifamobile\ndur utti\ndri se\ndimp led\ndi ard\nde coloni\nde blois\ndak shin\ncrink les\ncra ving\nchak otay\ncasano vas\ncancer uk\ncan id\nbrin sley\nbrian stann\nbravest warriors\nbobb ys\nblack guard\nbay anis\nbassen dean\nbas eload\nbar si\nbar ato\nbac onf\naw ong\naru iz\narmad afc\nap rice\nang ame\nand aman\nan ani\nalgar ve\nacar on\n??? !!!!\n? !!!!!\n:) :)\n..... !!!\n**************** ****************\nðŁij§ ðŁı»\nðŁİ ı\nðŁħ°ðŁĨ ĸ\nê·ľ íĺĦ\nê³ ¨\nâĿ¤ï¸ı ðŁĴĽðŁĴĻ\nâĿ¤ ðŁijij\nاÙĦ رÙĬاض\nyumm my\nyi fang\nyas ui\nxx s\nxer oroadshow\nwhite knights\nwatch on\nw wh\nvar key\nv ril\nut kar\nushl draft\nus x\nun enforceable\ntrekon linegame\ntoiv onen\nthe bear\nth sc\ntex ana\ntand ang\nsw is\nsun gazing\nsuha imi\nsuf fused\nsubb u\nstgeorge groves\nstephanie sheh\nstell arton\nstel ton\nspur pose\nsp fc\nsom pting\nslush hq\nshu dders\nshor rock\nsh ring\nse belum\nsclero tinia\nsav ban\nsand ham\nsan ral\nsadi ya\nrv g\nresilient cities\nrepre sen\nreha shed\nre spu\nran ee\nram rahim\npur ani\nprofli gate\npride chs\npretty boy\nphoto grams\npersian food\npen men\nori ol\nor ale\non ii\nome where\nofficial allegri\nof riday\noak bay\nnow akowski\nnick mangwana\nnep tun\nnd lea\nnb fc\nnat ale\nmuch ly\nmost beautiful\nmissal ex\nmis sl\nmass roots\nmarqu art\nman oh\nlu hh\nlondon winefair\nloe ws\nlive it\nlaunch pad\nla senza\nkin nick\nker inci\nkel k\nkar lov\nkan oa\njec t\niw lca\nis ya\ninvent ory\ninstitution alize\nine w\nincre el\nifyou can\nhouse judiciary\nhoss ack\nholroyd howe\nhil ditch\nhapp ier\nhammer son\nhail mary\ngo ward\ngm si\nglo fish\nghot ki\ngh im\nger ges\ngee kin\ngav increel\ngal ov\ng mu\nfortean times\nflyn as\nflesh god\nfeis al\nfe well\nfareshare uk\nextra dition\neu funded\nes ame\neras ure\ndy ah\ndown light\ndo ki\ndo dgin\ndiscover the\ndigital print\ndesau tels\ndeloitte us\nde ports\ncountr ys\ncoo ee\ncommu te\ncob ber\nco pai\ncli ente\nchoo sen\nchoices ong\nche ska\nchalk paint\ncele stin\ncathedr ale\ncar leasing\nca vil\nca chaca\nbé la\nbrum mel\nbox ley\nbour goin\nbot swan\nbongbong marcos\nbon te\nblack field\nb ville\naz ette\nautonomous driving\nau ob\nare ynolds\nanu grah\nandre wro\nan ter\nan se\nan m\nalap ai\nal mand\nak bars\nah scult\nah ine\naglew ings\naf feldt\nae g\nad ush\naction uk\nabscon der\n! ðŁİģ\nðŁijį )\nè İ\nห ล\nØ ¤\nzing t\nx tension\nws ferries\nwo yz\nwill ers\nwi an\nwalpur gis\nwac ket\nw mt\nvisit dartmoor\nvil na\nvi mala\nu eli\ntougher together\ntothe max\ntorin ofc\nthi ong\ntheris enation\nthen ic\ntammy baldwin\nsynec doche\nswanseab ay\nsw ingle\nstrath peffer\nsteadi ed\nste arn\nss afety\nspo well\nspace shi\nsou live\nson s\nsocial ism\nsec nav\nseapor tmrkt\nseabir d\nscra pp\nsaf fold\nro pical\nrmh c\nric eless\nri sp\nred sky\nrath aur\nram ban\nrace check\nprincess of\npressuri zation\nporsch ec\nplun ket\npavlo vic\nparacel sus\nor go\noo chee\nom oon\nobstetr icians\nnushrat bharucha\nni fe\nnes golf\nne reus\nnd preps\nnar n\nmuseumc ats\nmontpellier hsc\nmont one\nmeddle some\nmakin en\nmacro scopic\nm dd\nly oness\nlocum tenens\nlee ching\nlaurit zen\nkü n\nkaw ara\nk gaf\njurassic june\njk jk\njeff stinco\njann arden\njackier obinson\nj atim\niamjer maindefoe\ni aye\nhunie pop\nhov de\nhfx seaportmrkt\nheat seeker\nhatt in\nha ssi\nh wd\ngutt macher\ngri ha\ngi rolles\ngeor geor\ngeer twil\nga jap\ng pdf\nflyo ver\nfj all\nex positions\nemirates nbd\nem n\ndrum beats\ndropou thillary\ndrach ma\ndoor ley\ndoc tober\nden dera\ndeal maker\ncurmudge only\ncrook ham\ncounty fire\ncoun ties\ncosme tically\ncore values\ncol dly\nco we\nco group\nclay travis\nce fr\ncarbonell nestor\ncapital factory\ncamanach d\ncal ore\nbuy ingit\nbrighton hove\nbou lot\nblue box\nblessed ness\nbel liveau\nbeck ler\nbbc sportsday\nbandar ban\nban ter\naz oo\naven port\nave t\naren ga\narch uk\nar é\nant acids\nandre ev\namin ute\nalexail acad\nalber tini\nak hali\nab ish\n, _\n, \'"\n( .@\néĽ Ĩ\nâĿĵ âĿĵ\nâĢĶ \'\nÌ Ģ\nÃ¥le sund\nzu banski\nzel alem\nzar ine\nzar autz\nyp young\nyal u\ny io\nwood pigeon\nwon de\nwinne shiek\nwhe ee\nwell don\nwall now\nw pu\nview park\nval pro\ntwin kly\ntraffick ing\ntipsare vic\nthur m\nthi az\ntheat r\nthe three\nthailand news\nteam blue\nt vix\nt qs\nsureshra ina\nstu min\nstock fish\nstable mates\nsq d\nspelun king\nspar ano\nsn whs\nsmith sburg\nsleip nir\nsin aia\nsin a\nsher locks\nshe w\nsel b\nsec nielsen\nschol ly\nsch ellenberg\nsaving abel\nsau vie\nsath letic\nsajal aly\nsafaricom plc\nsa pper\nrowh ouses\nross mann\nrevan th\nretro spection\nrepre sses\nrelinqui shes\nred squirrel\nre thinking\nqui zz\nq alam\npw tc\nprotec tively\nprobation er\npres stitute\npre sto\npom pano\npolitic isation\npoint swest\npla smon\nper mai\npe mbe\npau leen\npang lima\npalmo il\np fk\nover write\nor nc\noc s\nnub lar\nnorth well\nno senergydrink\nnine tte\nnikol ina\nnickswag ypyoung\nnick naming\nnhs leadership\nnadi gar\nn world\nmykitchen rules\nmy husband\nmoreno valley\nmo ers\nmike dirnt\nmen stennis\nmclo one\nmay i\nmat za\nmagdas zubanski\nmachin eries\nluke kuechly\nlu ken\nlu er\nlock chain\nlie bermann\nlati um\nla wro\nl blogger\nky leigh\nkp tv\nke ston\nke edy\nka elyn\nk te\njonim itchell\niz ingly\ninter locks\nil ahi\nhyacin the\nhouse master\nho bar\nhindi imposition\nher omoto\nhab lar\ngu sm\ngra e\nglass making\nger old\nfuture decoded\nfur ano\nfra yne\nfox terrier\nff xiii\nfent yx\nfen cing\nexplo iters\neu ws\neng ill\ndw mtweets\ndige sters\nde wis\ndangerous wom\ndanger mouse\nd do\ncs ba\ncroy de\ncre te\nchi bu\nchat on\nch live\ncece winans\ncalu met\nbu dig\nbr ama\nberner ay\nbed clothes\nbe san\nbayanis andiego\naverage hunter\naust int\nappend ices\nanti racism\nameric andad\name sh\nal cona\nafre zza\nafloor test\nade mo\nac ohen\nðŁĻı ðŁĩ®ðŁĩ³\nðŁĺĢðŁĺĢ ðŁĺĢðŁĺĢ\nðŁįĵ ðŁįĵ\nðŁį¸ ðŁį¸ðŁį¸\níģ¬ëĤĺíģ °\në¥ ´\nẠ¡\nห ร\nyul ong\nwor boys\nwolf ers\nwin ick\nwilli ston\nvote forchange\nvisit snowdonia\nvento aureo\ntom mor\ntimore se\nthekingof queens\nthe cove\nthe club\ntamar isk\nt je\nsw sb\nsw l\nsunking brewing\nsub by\nspring is\nsplinter ing\nslo bber\nskep tic\nsir tomjones\nsid lowe\nsh wrs\nseun gh\nsaint leo\nsa wano\nri par\nrel lik\nreh mat\nreal jonghyun\nreadyfor hillary\nra elyn\nprolong ation\npre views\npiccin ini\npic ea\npenit ence\npe ditions\npak ula\nor ai\noliver io\no tide\nnh cw\nnew battle\nnational assembly\nnac ott\nn ttw\nmoreco wbell\nmichigan tech\nmayak ovsky\nmatil dam\nmass challenge\nman inder\nmali kyo\nmalikyo ba\nlymphoe dema\nlor ac\nlly r\nllibertat preso\nlig ny\nlibraries week\nlam ey\nlam be\nlab at\nla duma\nkre pt\nko dos\nkillthe trade\nkelsen rally\nkaatru veliyidai\nka im\njose canseco\njen te\njay asurya\njay anta\njani k\njaj pur\nj mac\nish ima\niren aeus\ninter cal\nin sley\nin bangkok\nillumin ed\nhusker fbnation\nhil dr\nhigh ams\nhenrik stenson\nhej duk\nhan pti\nhac ke\nh ct\ngrail lot\ngow anda\ngott alo\ngirl love\ngar çons\ngangster ism\nfulle rene\nfin t\nfel o\nest court\nentdeck t\nem ill\nele ssp\nedinbur ght\ndry ads\ndramati sed\ndol vett\ndi oxin\ndi ame\ncultu relle\ncul turi\ncu uuu\ncru sin\ncl volley\nchil koot\ncha aaa\ncell reports\ncastel vetrano\nbus news\nbursle don\nboxer bond\nbook posse\nbon u\nbon temps\nbla zin\nbates burg\nbashi rah\nbas ar\naz ha\nassi r\nar me\nap hl\nanti serum\nanthony bourdain\nantece dents\nane us\namy ra\namik kelsenrally\nallian zarena\nale v\nad ma\nabull dogs\naa sher\n,, /\n( âģ¦@\nðŁİ¶ðŁİ¶ ðŁİ¶ðŁİ¶\nðŁİ į\nðŁįĶ ðŁįŁ\nè ĸ\nåĢ ī\nâĿ ľ\nج ÙĪ\ny pu\nwx by\nwirele s\nwin diest\nweare international\nwang xian\nwain scot\nw top\nvhs india\nvan os\nup setter\nun wholesome\nu ov\nu ou\nturbo jet\ntsur ugi\ntru lia\ntor ino\nto er\nthrott le\nthe office\nthe har\nthe fix\ntestim oni\nteacher friends\ntaec cool\nstra ss\nspe ters\nsinthe sky\nsier pinski\nshichi mi\nshe is\nshangha ima\nsales enablement\nsack cloth\ns gro\ns followparty\nroutledge books\nroque brune\nroo th\nre uk\nrally x\nr xr\nq school\npro les\npin al\npendu la\npas ku\noutdoor fun\noooooooo ooooooo\noh gov\nobscen ely\nobi ano\nobas i\nnu ffin\nnon conformity\nno ten\nnar cis\nmus ick\nmun daring\nmormon probs\nmor ale\nmis sam\nmend elian\nme gui\nman ley\nlili angarcia\nleapfro gged\nlamb swool\nker newe\nkenya power\nkatak lysm\njuve derm\njoyce caroloates\njim wkyt\njean not\njackie o\nit slit\nit ac\nisof ix\nir ão\ninj akarta\nim ats\nhumphrey bogart\nhom etour\nhinter land\nherit ability\nhaway thelads\nharmon ise\nhar ik\ngy umri\ngun makers\ngre glou\ngio i\ngastri que\ng vw\nfun home\nfren do\nfort mcmurray\nfor youth\nfix able\nessenti a\ness lingen\nes news\neric vergne\ner minator\nep chihuahuas\nent le\nengine shed\neller ton\nel sayed\nebol a\ne issa\ndy mph\ndu monde\ndragon lord\ndo gan\ndil utes\ndie for\ndesertisland discs\nden een\ndeceler ating\ncountry boy\ncor ser\ncop tic\ncly ffe\ncher ri\ncasam ance\ncas ona\nbukitt inggi\nbrujer ia\nbook quotes\nboardwalk hall\nbio terrorism\nbend all\nbehe moth\nbak assi\nau clair\nast mh\narou ca\napp ending\nalpha deltapi\nales und\nale ksa\naldubxe bloveis\nalchem illa\nacross the\nach ing\n? !#\n!!! *\nðŁĺģ âľĮï¸ı\nðŁĴĽðŁĴĻðŁĴľ ðŁĴļâĿ¤\nðŁĴĶ ðŁĺĶ\nðŁıĴ ðŁ¥ħ\nðŁ¤¤ ðŁĺį\nà¸Ńภ°\nzuc chi\nyork dale\nyan a\nwomenin law\nwine mag\nwalkin stown\nvote dem\nviolet chachki\nusat sport\nunitedin orange\numb reon\nultram ar\nukbusiness lunch\nuef ayouth\ntyson foods\nttro pez\ntsh ering\ntoy ne\nton geren\ntim the\nti anti\nthe market\nthe key\ntf con\ntero th\nteam sailer\nt reader\nswi ley\nswach hta\nsur sok\nsumm ilux\nstorytell er\nssou ths\nsp res\nsonymusic india\nsmu ller\nsly james\nslo viansk\nsis rael\nshe hab\nsha j\nsenyor a\nsch aff\nscan al\nremington arms\nremb au\nrati gan\nra smu\nra gen\nr hanews\nr fe\npym nts\nprow res\npra iz\npr ss\npi ents\nphel ps\npe gan\npavlovic nbcs\npab owl\np ton\nover heads\nou standing\nos f\non scene\noffici o\nocca sion\nober heim\nob cs\nnis man\nni sta\nnbad raft\nnat ics\nnanopore conf\nmur rey\nmu tasa\nmu dgal\nmt sen\nmis represents\nmis classification\nmin oa\nmi at\nmanne h\nlun guk\nlov ly\nlet scher\nlen asia\nlad ha\nl ff\nl ario\nkon ichi\nkerri son\nkeep working\nk deleon\nk cur\njuju tsu\njoseph jett\njau har\njat inder\njann ation\ninsinu ation\ningh orse\nindiam art\nhoney pots\nhealthand fitness\nhaw era\nhare brained\nhan ge\nh tb\ngreat gatsby\ngott ardo\ngoodnightt witter\ngolf ball\ngo ias\nglow sticks\nglow stick\nge etv\ngb hour\ngar net\ng pf\nfur ze\nfuer zas\nfu gee\nfri endof\nfrauen kirche\nforec ourts\nfor tun\nfal me\nesp guitar\nepistemo logical\nenumer ate\nelast omeric\neh s\ned w\ndulwich gallery\ndublin horseshow\ndon lan\ndigiov anni\ndeer park\ndaily bot\ncs gazette\ncotonde tulear\ncol ber\nclear way\ncelebration of\ncbc sask\ncaul kins\ncartoon hangover\ncarol vorders\ncare full\ncar meli\nby ne\nbuonarro ti\nbum stead\nbre el\nbras stown\nbrad by\nbored oms\nblow fly\nbloody scotland\nblo q\nbetro thal\nbeng old\nbe ara\nbasil don\nbarbar acom\nba set\nba his\nato records\nat ok\naru sh\nar si\nantron brown\naman zo\namalgam ate\nalleno very\nali ghting\nale au\nal vy\nagu std\naerop uer\nae expo\nadul tedu\nad ate\nacl are\nab illion\nðŁĺįðŁĺŃ ðŁĺįðŁĺŃ\nðŁ¥ĩðŁ¥ĩ ðŁ¥ĩ\nîĮ ª\nå½ ©\nà¹ĥ à¸Ī\nyour vote\nyo liverpool\nyam l\nworld cafe\nwon kyu\nwomen fortrump\nwit tes\nwilton musichall\nwhid don\nwh oring\nward ine\nw bbm\nvan tho\nval verde\nval ory\nv nu\nut mb\nus sey\nunder brush\ntv mohandaspai\ntrapezo idal\ntom az\nther mali\nthe kitchn\nthe dilipkumar\nthe aaf\nth are\nteam bnn\nteam ashishians\nta kkar\nt sin\nsub heading\nst lucie\nspacec am\nsmo del\nsile sian\nshawn stockman\nshak oor\nscore board\nsara watkins\nsan siro\nsai pem\nrt pi\nrou shy\nrepudi ate\nremed ying\nreli ve\nre ik\npic poul\npc s\npan jab\np kushn\nor ding\nonther ocks\nocv updates\nobfusc ated\nob ad\noab aab\nno ac\nnester ov\nnb h\nnak amichi\nna jim\nmickey avalon\nmelissar auch\nme chi\nmcla gan\nmc girr\nmagn itudes\nma ws\nma sp\nm monogram\nlit rpg\nleg alizes\nlar a\nla ppe\nkid swb\nkey shot\nkar lan\nk lime\njuda ic\njenny lewis\njenna elfman\ninclu sively\nim ls\ni set\nhomony m\nho pley\nhir ta\nher lings\nhaynes ville\nhappy anniversary\nguar neri\ngu o\ngro the\ngoogle home\ngon i\nglobal health\nglade sville\ngl c\ngeorgel ucas\nfoot light\nfluff ball\nfcn antes\nfan army\nextrapol ated\nexacerb ation\ner sclub\nemil ym\neast sussex\nearly start\ndy dd\ndu etting\ndry ga\ndom tar\ndivul ging\ndi po\ndez ma\ndesol at\nden er\ncsed week\ncor zo\nco tulla\nclark mp\ncher ney\nchan del\ncant waitfor\nca ha\nbu ghead\nbrush wood\nbombay times\nblueridge parkway\nblu eroom\nbikel anes\nbig bear\nbharath iraja\nbeav en\nb fore\nawi ki\nauto bus\nauthor sofinstagram\nathen sga\nasi mon\nash rafi\narrabbi ata\nann curry\nambi ga\nalkal ine\nalgorith mically\nal si\nal dou\nafric acom\nabre go\nabe dian\n:) ..\nðŁĴĻðŁĴļ ðŁĴĽðŁĴľ\nðŁĴĥ @\nðŁijĮðŁijĮ ðŁijĮðŁijĮðŁijĮ\nå¯ Į\nãħ ĩ\nyy o\ny iz\nwr ona\nworld changers\nwater gate\nwal eshour\nvla ar\nveoli auk\nusace hq\nus amateur\nuru bamba\nup welling\nul ts\nuefayouth league\ntupac shakur\ntrishap aytas\ntrio works\ntravelo gues\ntrampol ene\ntra ister\ntor con\ntoni and\nton der\ntoiletekprem katha\ntoday is\nthec gf\ntham esc\ntennis australia\ntat lı\ntart lets\nswift current\nsu te\nspeed wy\nspac eneedle\nsoci été\nsnap shot\nsme w\nshat to\nshan atics\nsenator wong\nsd ny\nschar lie\nsc indi\nsamgye opsal\nsam gyimah\nry usei\nry l\nro seee\nrhe o\nre organizes\nrdan ational\npun ahou\npre fabrication\npower glide\npor tw\nplan ted\npete doherty\npa chan\nou mu\non love\nnot given\nnorth wich\nniantic labs\nnewworld order\nmr josh\nmr f\nmillion views\nmetas ploit\nmarucci sports\nmark burnett\nmarkburnett tv\nmarie hamn\nmar nell\nmar lowe\nmar ise\nmalasak it\nmal nourishment\nmad lang\nm wf\nly nah\nlot fi\nlion smusic\nli ths\nlewis capaldi\nlearning analytics\nlead o\nlas dun\nl arian\nku ss\nku dat\nkey ano\nke ely\nk ch\njueve s\njet charter\njay mohr\nja eden\nistigh far\nisles app\nios app\ninx ile\nintrepid museum\niklan terbaru\nhill billy\nhelic obacter\nhealth data\nharro wer\nhannah spearritt\ngu wop\ngrow yourown\ngratu ito\ngrape seed\ngland ore\ngin ato\ngho stre\ngeon osis\nfifty shade\nfas cic\nfar lane\nextre mely\neliti sts\ned ps\ndw l\ndungeon family\ndjima vic\ndin ghouse\ndeep spac\nde gate\ndaw nzpost\ndavidlove photog\ndar ner\ncrump sall\ncre gan\ncochlear implant\ncheru bic\nchel ation\nchase masterson\nch under\ncellu lar\ncanaryisland sen\nbsor ules\nbro seley\nblk perspectives\nbehavi orist\nbarne sy\naugh rim\naqu atica\namat ata\nam one\nallameric agame\n________ ________\n! ⾨\nðŁĻĭâĢįâĻĢï¸ı ðŁĻĭâĢįâĻĤï¸ı\nðŁĸķ ðŁı½\nðŁijİðŁijİ ðŁijİ\nðŁİĻ ï¸ı@\nðŁİĨ ðŁİĩ\nì Ł\n⾨ âľĶ\nâĻ¥ï¸ı ⾨\nâĸº #\nà¸Ļภª\nج اÙħ\nö l\nz wel\nxfactor final\nwood bury\nwild child\nwan tit\nwa urn\nviol on\nve gam\nv nl\nuro logy\nur araka\nupone aglewings\nunc wilmington\nunanim ity\nubi que\ntransgender ism\ntipping point\nthinking outloud\nthe church\ntech nip\nteam blackberry\ntavis smiley\ntam lyn\nswart berg\nstyle me\nste ds\nste acher\nsp acc\nsolor zano\nsin ghs\nside m\nsha be\nset by\nseri ally\nsean hayes\nsatur ates\nsan wool\nsal ar\nsaints row\nru stin\nru ffing\nrock face\nroad warrior\nreprezent radio\nreno omokri\nreboot liberty\npronovi as\npra kriti\npolar ities\npete sessions\nperth and\npas sp\noo iman\nonemore time\none yearof\nokone do\nojama jo\no week\nnit zan\nngi reland\nnegr oni\nn fre\nmus lera\nmu squ\nmortg aging\nmonsta xin\nmm wave\nmitch y\nming les\nmil utta\nmemphis fb\nmelissa ordway\nmay fest\nman repeller\nm mie\nm le\nly sa\nlegiti mized\nla ffs\nknowledge management\nkiernan shipka\nkhal is\nkawarthan ow\njean ericvergne\njason bourne\njack o\nja ked\nja ima\ninf am\nin sky\nhomep ages\nho vered\nho sch\nhi the\nherto genbosch\nhe gerty\nhall marking\ngyor ko\ngul ick\ngu apa\ngre gs\ngood foryou\ngen berger\ngandalf wasme\nful bourn\nfru gally\nfpv racing\nfood fact\nflo y\nflo rets\nfe dele\nel vin\neffi ong\neen age\neddi reader\neag ar\ndiv vy\ndistill ates\ndeb ello\nday sss\ndani eller\ncork chamber\ncold water\ncla ggett\nchick y\nce oil\ncapability brown\ncamero onians\ncalifornia fires\ncalcu tt\ncal dey\nbrian azzarello\nbren er\nboys brigade\nbmwmotor ra\nblen kin\nbio compatible\nbinge watching\nbin nington\nbig bos\nber ating\nbasal tic\nbabun aidu\nas ph\nanthology film\nangh el\nal cos\nai fam\nacro pora\nab berton\nðŁĺįðŁĺį ðŁĺįðŁĺĺ\nðŁĺĤ ðŁ¤Ķ\nìķĦ íĬ¸\næĭ¡ æķ£\nÙĦ ÛĮ\nا٠ĩ\nyl p\nyad u\nwhat sinthe\nwestmid shour\nweb socket\nvoo c\nvm ro\nviv adelrio\nvictori ao\nveen stra\nve dran\nv ch\nul ing\nuk business\ntur ron\ntrin ita\ntimes magazine\nthibau d\nthewrit elist\nthe face\nth st\nter za\nteam nike\nta share\nswan bourne\nsvt foe\nsteph on\nstatueof unity\nst nd\nspeci fier\nspagnu olo\nso hlhockey\nsmall faces\nsin till\nshus kies\nshoo fly\nshakti rajan\nshahi dul\nsd pd\nschul enburg\nsch tick\nsawal ha\nsal soul\nsag acity\ns vig\nroyalvisit canada\nrox by\nroeth ke\nreson ances\nre eni\nram blin\npwe tty\npri mark\npramo d\npolo club\nplu ghole\nphoto chemistry\nphillips academy\npete sohlhockey\npe dir\nost friesland\noke chukwu\nnoynoy aquino\nnow streaming\nnive les\nnikon india\nneo classicism\nnegro ponte\nne sd\nnbc nightshift\nna thu\nn tis\nn pas\nn bb\nn acon\nmy ah\nmur ari\nmubar ik\nmo jis\nmissk atie\nmis wak\nmirror sedge\nmin ow\nmen jadi\nmelb derby\nmasch io\nmar ji\nmal ine\nma quis\nly onnaise\nlier se\nlate y\nlarge format\nkour a\nkost ner\nking sdale\nkick the\nken gen\nk bbq\njw j\njusticefor benghazi\njuse yo\njur nee\njasminec ain\njacqu elin\ninthe clouds\nid lo\nhss vca\nhoney wood\nhockey isforeveryone\nhe bron\nha seo\nh ke\ngold wing\ngold mines\ngirl slax\ngi ya\ngarri ga\nforest dale\nfoot action\nflash game\nfiat chrysler\nfelipe calderon\nfacto tum\new stv\nev as\ner kin\nemiliop ucci\nelock hart\nego yan\nebel ing\ne iders\ndiscer ned\ndemor alize\ndarting tonhall\ndamaris cotta\ndairy month\ncutthroat kitchen\ncu bas\ncorrespon ded\ncin ar\nche ssies\ncanton io\nbowie baysox\nblue chip\nblair ite\nbili moria\nbe yourbest\nbb s\nban karena\nba shaw\narmc andy\nan chi\namberrudd hr\nalex bracing\nab ashi\nðŁļ´ ðŁı¼\nðŁĺĺ ðŁĺģ\nðŁĺ© ðŁĺŃ\nðŁİ¬ #\nðŁĮį .\nðŁĮ¾ ðŁĮ¾\nãħ Ĭ\nñ ana\nzz ato\nzer din\nzer be\nzan ele\nz aco\nxxx viii\nwych wood\nwha a\nweek endo\nwe cantwait\nviennois erie\nvide op\nv laminck\nuta ware\nun enviable\nul le\ntran shu\ntorye lectionfraud\ntopo logies\ntomato e\ntimy the\nthe change\nten ali\ntech cc\nsuper bock\nstra uch\nss mb\nsri vastav\nspor tawards\nsp robz\nsof ÃŃa\nso hi\nslow travel\nsic ut\nsi ring\nsea fishing\nsc ea\nsbut d\nsain ttropez\nsaaksh isra\nroust about\nroadtrip tv\nro chambeau\nrf k\nren a\nreggie bush\nrege hr\nre stuar\nrain men\nrail budget\nproble mas\npon zio\nperfume genius\nper loff\npap azian\nou tu\nossi pee\nor vis\noh hey\no zzy\nnv sd\nnorth leach\nnfl freeagency\nna os\nmyo c\nmur alists\nmu scaria\nmo ton\nmo gens\nmidnight red\nme ins\nmatt sson\nmark field\nmap info\nmang ino\nlucre zia\nlove qub\nlouisianat ravel\nlaw ther\nlat u\nlam pson\nla ppa\nkrisa quino\nkohi stan\nkit i\njohn nyo\niti sprashanth\nhul ley\nhedon ic\nhass i\nhackneye mpire\ngreens bor\ngam po\nfutureready libs\nforti fying\nfollow in\nfle ek\nflag ship\nfer id\nfeel like\nfashion week\ney b\nevel ynn\nentertain ingly\nembe ddings\ndhan u\ndepor te\nday pack\ndar rin\nd pict\nconsul ates\nconow ingo\nchi yoda\ncas spi\ncarbon ic\ncar ota\ncall ic\nc da\nbryo zoan\nbo sio\nbir dy\nbab bu\naye she\nav ui\narchang el\nar val\naqu igley\nap lic\nanti ago\nan sen\nak asi\nad owns\nad fw\nac unity\n:( "@\nį °\nðŁļĹ ðŁĴ¨\nðŁĴģ ðŁı»âĢįâĻĤï¸ı\nìĤ¬ë ¬´\nìĤ¬ë¬´ ìĹĺ\nãģĬ ãĤģ\nà´ ³\nتص ÙħÙĬ\nyasuk uni\nworl dy\nwool ens\nwentworth miller\nwemy ss\nwe stri\nwaf s\nvol tige\nvo et\nvin c\nvil de\nve aled\nurban wildlife\nup f\nuni vienna\nu kyo\ntwitter uk\ntruck fest\ntro caire\ntrail ering\ntoo vey\ntogar ashi\ntn ell\ntin h\nthe jo\nthe hunter\nthe heat\ntex turi\nterra za\nter im\nter batas\ntelfor dutd\ntech nation\nte gh\nsy ren\nsud duth\nsubmer ge\nsu fis\nstre gi\nsten zel\nstech ford\nst assen\nsplendo red\nsmar thomes\nslumber party\nsim sim\nshee sha\nshant iniketan\nsf ballet\nsemen ov\nschalk wyk\nsay es\nsaty amev\nsap skzn\ns woman\nrubeng allego\nro iz\nreher sal\nre analysis\nrainor shine\nradio aire\nqu mran\nport lethen\npor gie\nplough mans\npine iro\npat nap\npap en\npalar ong\nover up\nom achenko\nnor gaard\nni dia\nnew bridge\nnational ise\nmul lum\nmoscow mitch\nmil ko\nmeri weather\nme official\nmazz etti\nmarian rivera\nmap úa\nmand ai\nman at\nmaan karate\nma sya\nlore to\nlop ate\nlatelate toyshow\nlambda chi\nkwa hu\nkr n\nkim sey\nkhat ami\njudgen ap\njoshu as\njami elynn\njami ah\nj adel\nit matters\nison zo\ninter med\ninco terms\nin mind\ni anni\nhoo ft\nhi way\nhay on\nhands comb\nhan ske\nhalf adams\nguimar as\ngos lin\ngian tuk\nget tested\ngaw k\ng ww\ng stephanopoulos\nfoe ticide\nfil in\nexist ences\nexcell encies\nevam arc\nene spanol\nen ext\nel tiempo\ndra ugr\nditt mar\ndisco tek\nday day\ndar a\ndan icim\nd chat\ncow ering\ncomple tly\ncolor adop\nchou sing\nchima ira\nch n\ncel ite\ncas bah\ncaro emerald\ncan ta\ncalm down\nbuden holzer\nbrink manship\nboywith luv\nboh len\nblogger suk\nbedtime story\nbasketbal laus\nbak ht\nb craw\nato gether\nasho kk\nas cb\nart dubai\narchitec tes\naram m\nar pin\nant middleton\nani poke\nandro logy\nalexand rina\nalex a\najax capetown\n* \\(^\nðŁĺĢ ðŁĺģ\nðŁĺ¿ ðŁĺ¿\nìĪĺ íĺ¸\n모 모\nâĺºï¸ı ðŁĺĤ\nà¸Ńภ¡\nà° ¶\nØ§Ø ·\nyun an\nworley parsons\nworkflo whq\nwitney carson\nwin z\nwe ymouth\nvu cevic\nvou liag\nvin expo\nvic gov\nvenkat raman\nvenezi ano\nurgent care\nudyo kta\nud yog\ntwee abondthatcantbebroken\ntl aloc\ntimel ord\nticket webuk\nthorn leigh\nthor sby\nthe press\nthe kevin\ntech forum\ntau malolo\ntara weeh\ntan jung\nt strong\nsy kess\nswag gart\nsw amy\nstorybehind myscar\nstein haus\nsr ini\nsphy g\nsonamo hapatra\nson en\nsn ck\nsle v\nsilic osis\nsextu ple\nsev aks\nse infel\nsc avenge\ns veri\nroadsof mumbai\nroad ton\nrho diola\nre entering\nraymond ville\nrang arajan\nquir rel\nq sfp\npreeti karao\npolit is\nper versity\npat tee\noc ele\noak wood\no scott\nny drock\nnature medicine\nn ads\nmemory monday\nmak tab\nma thu\nlobb an\nland bou\nlago sians\nl day\nkra bbe\nkaran vir\njof frey\njoe thomas\nintercon hotels\ninter web\ninform acion\nindeli bly\nin training\nil ho\nhydro geology\nhun ch\nhell and\nhahah hahahaha\nha kai\nh sia\ngre port\ngirlsin science\ngen ga\nfo tis\nfo sbury\nflanne lette\nfinancial domination\nfestivalof lights\neu ets\nemanu elle\neas ilocks\ndriven by\ndream iest\ndr seuss\ndoy ley\ndorse techo\ndon health\ndj whookid\ndisav owed\ndic o\ndesi o\ndean karnazes\nday music\ndaw illiams\ncrowd cube\ncraig leith\ncor bell\nconstant inos\ncol ler\nco fee\nco as\ncme group\ncho ck\ncatt ell\ncat news\ncast ner\ncard room\ncarab ins\ncali bri\nbor sato\nben ighted\nbea sting\nbe yoglu\nbasti dores\nbah man\nba rest\navell aneda\natur days\naspl und\nas oe\narquite tura\nard vark\narctic frontiers\nanewh ope\nai ku\nadjac ency\nad um\nacademicswith cats\naber daron\naaron yan\nðŁĩ¬ðŁĩ§ @\néŁ ³\nãı Į\nzor aida\nyig it\nwes ther\nway de\nwater melon\nwac sports\nwa fula\nvillano vau\nvicis situ\nvar nado\nvap elove\nutel aforever\nur ro\nuniversal ism\nun constitutionally\ntu fan\ntru iden\ntrij icon\ntopal ov\ntomor ph\ntomoh on\ntn ght\ntit lan\ntit anium\nthomastur goose\ntho ct\nthis winter\nthing for\ntheruf friderz\nthe ashes\ntattle tale\ntarte ist\ntam arab\nsym pathetically\nstudent problems\nstop knifecrime\nspo ints\nsne ider\nsingh is\nsi menon\nseman as\nscri bble\nsc ros\nsas a\nsar b\nsahib zada\nsahara occidental\ns gc\ns des\nrow let\nrc jh\nrare breed\nram anan\nraising awareness\nrain sford\nrai sen\nradu lov\nproc tors\npres spass\npre season\npo ori\nplu ot\npennstatem hky\npal en\noxfords bs\noun ified\noperaholland pk\nnt w\nnor tec\nnikkis anderson\nne xx\nnav agio\nna xx\nna imi\nmuzi k\nmur aco\nmu hle\nmother nature\nmoneyinthe bank\nmn dnr\nmirror monday\nmer ville\nmcne ice\nmayor slyjames\nmarq ise\nmal var\nmain aure\nlux us\nluck yday\nlu per\nloisa andalio\nlo si\nlinux foundation\nl ct\nky aaa\nkotze bue\nkirko bangz\nkier sey\nkeh rer\nk gra\njohn key\njhpie go\njeanne de\njav adekar\njanak pur\nj ni\niti oned\ninv ited\ninternational teaday\nian ziering\ni boy\nhid aka\nheck scher\nheather dubrow\nhd palooza\nhallo way\ngu apas\ngr hs\ngotoireland us\ngood for\nfuel ing\nfl ö\nferdin and\nfan support\nevamarc ille\ner ca\nemabiggest fan\nem f\nel bridge\neco ins\ndumer vil\nduck s\ndove awards\ndouble standards\ndiscover greece\ndhe er\ndesig nin\ndec ca\ndd insi\ndab bin\ncurvil inear\ncounterfe its\ncob hc\ncoachj franklin\nck w\nchandra shekar\ncebit aus\ncabernet franc\nby sea\nbuy social\nbucc al\nbu sco\nbrody jenner\nbrec bassinger\nbou illet\nbf hardline\nber halter\nbent eng\nbe your\nbas c\nbag anac\natten bury\natt aboy\nas kea\nari ano\nann nnnn\nalimi ballard\nad mn\nacher on\n> ...\n" "@\nðŁĺĺ ðŁĺľ\nðŁĴķðŁĴķðŁĴķðŁĴķ ðŁĴķðŁĴķðŁĴķðŁĴķ\níĺķ ìĽIJ\në· Ķ\nâļª âļ«\nઠľ\nzin nias\nzale wski\nyogag irl\nwyr ley\nwoyz eck\nworth morealive\nworld sight\nwon u\nwil drose\nwei hen\nvu ko\nvendredi lecture\ntz on\ntwinpeak s\ntur non\ntotal football\ntop golf\nthur sley\nthr on\nthe pi\nthatsmy girl\nterrific tuesday\ntal uk\nsymp a\nsunny beach\nsu deley\nste idl\nstar uk\nspi ano\nsperkin sdnd\nsoule ater\nsop rou\nsolfe ge\nsmo or\nsketch noting\nsidec inema\nshubhan gi\nsh indler\nsed its\nse dat\nsd chat\nscotti e\nsap inker\nsab ba\nriver park\nri mowa\nreason ableness\nreadju sted\nran jana\nquer as\npy ong\npu ggy\npromo products\nprayforthe world\nphosphat ase\nph v\npau lone\nopen studio\nnr sv\nnose k\nnis ch\nng wa\nnew rules\nne scafe\nmy wolfsong\nmorphe tt\nmon n\nmon kee\nmini atura\nmicdro premix\nmesop orous\nmc pher\nmc coo\nmbl season\nmarin ka\nmal asada\nm do\nluni z\nlse plc\nlove youu\nlo ew\nlibret tist\nletter sto\nlair g\nlac on\nkou ga\nkid shealth\nkend riya\nkay han\nkau shiki\nkan de\njune jo\nju styn\njohn inne\njohninne scentre\njo bad\njharsu guda\njer ri\njame spear\njal na\ninfl iction\nine gypt\nincarcer ating\nim hof\ni asb\nhel pre\nhead casey\nheadcasey mike\nhallucino gen\nhal lettsville\nh ilife\ngoo din\ngo sparks\nglobal summit\nger an\nfreethe arctic\nfre aker\nfor trose\nfor summer\nfe her\nfcu trecht\nface time\next gen\ner awan\nenew man\nellef sondavid\nel il\ned ball\nduc ted\ndr marty\ndoh ring\ndhar ti\ndes ford\ndent in\ndau lat\nclimate breakdown\nci wf\nchri sperkinsdnd\nchill er\nchevening fco\ncan ids\nbro mides\nbid dies\nbham donkeys\nbed in\nbe idou\nbe honest\nbat en\nbare la\nbac ademy\nb ment\nb dl\nanastaciam usic\nan erjee\nam pex\nal fas\nal ben\nak hir\naed as\nadam aofficial\nack in\nachievement unlocked\nabutil on\nabdel rahman\naar sbl\n?? "@\n! ðŁĶ¥ðŁĶ¥ðŁĶ¥\n! ðŁijī\n! :(\nðŁĺį ðŁĺĻ\nðŁİĬ ðŁİī\në§ ¤\në¦ ´\nåĵ ģ\nze ma\nyoungen terprise\nyaqu b\nxavier daniel\nwit tic\nwin st\nwag ar\nvovin am\nvor ov\nvijay filmaker\nver ilog\nvapor ware\nuri m\nup ends\ntre sham\ntre mpe\ntotal y\ntor ie\ntoday at\nthimble weed\nthe chase\nswit chers\nswati jaihind\nswap meet\nstru ms\nstock photos\nstin ch\nspeed prayers\nsouthernmiss fb\nso ca\nsimon webbe\nshep newsteam\nser via\nsean cardo\nsam ish\nsaakshisra wat\nsa otome\nrough rider\nrond ina\nroadand track\nrigh tist\nric c\nrenew ui\nren lagann\nre treat\nrc psychic\nrae bareli\npy x\npron o\npresent ando\npoo jai\npau gh\npat roberts\novi de\nover development\nometal lic\nnfl pabowl\nnep tunes\nmt dna\nmother and\nmoore senate\nmjin nocent\nmistre s\nmike tirico\nmed itech\nmarky ramone\nmaquilla je\nlow theband\nlove tour\nlift back\nli arin\nlatt in\nlabor atorium\nky bourbon\nkr ach\nken sit\nkazakh stan\nkati ed\nkaan ur\njones jr\njac kel\nit ain\nisser lis\ninterrup tus\ninternational youthday\ninsan ity\nindo chinese\nim mbm\nig awa\nhydro graphy\nhi mitsu\nherak les\nher se\nhend all\nhe ssel\nhavil ah\nhappy jhopeday\nham ina\nh wu\nh wp\nh kt\ngy res\nguy ra\ngun sense\ngul fair\ngreglou ganis\ngrease paint\nghaz ala\ngang neung\ngambrin us\nfoodis medicine\nfon ua\nfi ii\nfelice herrig\nero icab\nero ars\ner lend\nengie group\nell p\neli sir\neinstein maga\nefra im\nearl ham\ne peeps\ndr marth\ndo towsky\ndis love\ndim witted\nde juan\ndaniel s\ndak os\nd scc\ncri an\ncontr alto\ncommun is\nclergy men\nchristmas music\nchi ded\nchest nu\nchazz palminteri\ncd na\ncastle martyr\ncab by\nbrighton pride\nbm v\nbig and\nbel mon\nbe oplay\nbat sky\nbag amoyo\naustralian shepherd\naudio boom\nath boy\nas chi\narcadia unified\nap ure\nap ate\nanc ities\namand ac\nalife dotowsky\nal san\nake elah\naf sar\nadam rank\n. ;)\n" ¡\n!! ðŁİīðŁİī\nðŁĴļðŁĴļ ðŁĴļðŁĴļðŁĴļ\nðŁİīðŁİĬ ðŁİĪ\nðŁĮ¼ ðŁĮ¼\nðŁ§Ł âĢįâĻĢï¸ı\níĭ° ìķĦëĿ¼\néī Ħ\nâĿ¤ï¸ı ðŁĴª\nᥠ±\nо ÑĤ\nyour car\nyork theatre\nye sil\nyam ma\nya hog\nwt fff\nwriters festival\nworldfood prize\nwor dle\nwe yer\nvo xx\nvendee globe\nvar ico\nvancity buzz\nunder development\ntran scultural\ntor neo\ntor mentors\ntiltro tor\nthisisse th\nthisisseth sblog\nthe bonni\nth year\ntayl an\ntahaw y\nsw fclive\nsuper soft\nsuburban ites\nstr ator\nspeaker series\nsp sm\nsou ad\nslo per\nsla visa\nskipp ered\nsketch cards\nshow pieces\nsho wi\nshin han\nsf hs\nseg no\nse chs\nschool meals\nschel de\nsau rian\nsag ami\nry p\nrump f\nrou lston\nro ffey\nriz al\nrenega des\nren alovelis\nregionalli ga\nregion ale\nrb k\nravin dersingh\nra ux\npu plovers\npro scribed\npresent an\npre heated\npr illy\npoul son\npo ids\npm dc\npik app\nphoto video\nphi bbs\npc j\npar ash\npa tha\np rum\np drm\nour community\noph ils\nny rd\nnonprofit day\nnon resident\nnin ny\nne ira\nnat oli\nnalim bachia\nmy app\nmuke sham\nmsccruise susa\nmorning rush\nmonagh angaa\nmol let\nmile posts\nmi thu\nmeaning lessness\nmcken ny\nmathi sen\nmasterchef sheep\nmar one\nmamat abanerjee\nly dden\nlon ie\nlo bat\nlin foot\nlgb thistory\nlec ats\nkilmac ud\nkerry katona\nke ens\nkarol sevilla\nkam akshi\njrod fromoz\njose cuervo\njai my\ninterior designideas\nino ise\ninder jit\nhon gi\nhill erman\nhemam alini\nhayley mcqueen\nhand maids\nhal kett\ngui z\ngross ers\ngre el\ngib let\ngay les\nfou sey\nfli k\nfemale entrepreneur\nfeels badman\nfanni bal\nf staste\nerc p\nent el\nen in\neli kes\nei ichiro\ned postcards\nec kankar\nduc s\ndor mammu\ndomin ik\ndogand puplovers\ndisp leasing\ndge l\ndel fonics\ndel at\nde ase\nd pm\ncu cks\ncronkit enews\ncongress muktbharat\ncolor smarathi\ncol avita\nclen buter\ncipri an\ncbc news\ncarleton college\ncar nal\nblack nose\nbior xiv\nbhav nalimbachia\nbest t\nbe chard\nbar ma\nbabs draws\nb fest\naz atho\navon rep\natt ac\nasph alt\nap sf\nanton etti\nannane trebko\nang om\nameth asone\nam oner\nah hh\nag proud\naffor dance\nad joint\n: ~\n//// //\n$ ]\n! :))\nðŁĴį ðŁĴİ\nðŁijįðŁı½ ðŁijįðŁı½\nzar da\nyuk ito\nwork athome\nwomen scienceday\nwit s\nwhere withal\nvic ta\nvas elines\nv any\nutaware ru\nus fda\nun competitive\nun believe\ntwoo odley\ntw ofer\ntruck driver\ntri stin\ntrans acted\nthreep wood\nthe yyam\nthe shoe\nthe il\ntari kh\ntali m\nsussex lifemag\nsus open\nsugi mori\nsu long\nstati stik\nsta this\nspring side\nsmo ss\nset su\nsch aer\nsc ana\nsat oh\nsar la\nsanta anita\nsambu cus\nsaig on\nru perts\nru ia\nroman i\nrobb ins\nreal muto\nreading festival\nread justment\nprovision als\npro kabaddi\nppl summit\npoe mas\npig tail\npdp nigeria\nparty yyy\now lets\nnews sport\nneptun o\nnaray ang\nnan tong\nnai ad\nmur rin\nmo scon\nml h\nmerq ury\nmc t\nmarcus butler\nmakha chkala\nlucky man\nloe hr\nll cc\nliveyour dream\nlin acre\nlime stone\nlifeof an\nli ffs\nlesmiz bway\nleh ri\nlearn coding\nle user\nlan l\nlake eri\nlado ga\nko chunni\nk dd\njusticele ague\njen nar\niyanla vanzant\nim pi\ni stre\ni ib\nhondac anada\nhey ns\nhar diest\nhannah bronfman\nh pr\nh fc\ngw m\nguar in\ngreatbritish menu\nghu ggi\nghost story\ngec dsb\nge ats\ngaslight anthem\ngarci aparra\nfriend sday\nfl ye\nfis chl\nfent anil\nfair vote\nery ri\nepisco po\neng cro\nelectrocardio gram\nek mainaure\ndun ces\nduc ators\ndub nyk\ndistru stful\ndeton ators\ndeceler ate\ndebbie reynolds\nde mais\nday z\nd th\ncuar ón\ncu pich\ncros well\ncourts matter\ncool kid\nchol ar\ncha que\ncatholic faith\ncap olitics\nc pride\nby land\nbran sholme\nbla zek\nbicy clec\nbe calmed\nbas combe\nbae jin\nbad on\nauri fil\naudi op\nattenu ated\nar ki\nar dara\nanti theism\names waran\nam paio\nal isms\nag api\nabo g\n!!! ??\n! âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı\nðŁĴĻ ðŁĴļðŁĴĽ\nðŁĩ´ ðŁĩ²\nìĨ Ķë\n미ë Ĥĺ\né İ\nåį ģ\nâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶ\nz abu\nye young\nye ji\ny ma\nwild boyz\nweald stonefc\nvote ariana\nven ne\nv bn\nut zon\nuise du\nufo table\nufo sighting\nuff ington\ntu le\ntt itz\ntroph ication\ntravel awesome\ntranscendent alism\ntra pper\ntik va\nti sed\nthisis england\nteenwolf season\ntech support\nsundar c\nsuare zg\nsu sy\nstron gheart\nstreet food\nstory bots\nsto c\nst gile\nsrsg vac\nsoutheast ward\nsoccer saturday\nso zone\nsmid t\nsm city\nsli mey\nsin claire\nsd reader\nscare d\n', -}; -export default obj; diff --git a/desktop/src/thirdparty/clip-bpe-ts/mod.ts b/desktop/src/thirdparty/clip-bpe-ts/mod.ts deleted file mode 100644 index 74126433be..0000000000 --- a/desktop/src/thirdparty/clip-bpe-ts/mod.ts +++ /dev/null @@ -1,470 +0,0 @@ -/* eslint-disable */ - -import * as htmlEntities from "html-entities"; -import bpeVocabData from "./bpe_simple_vocab_16e6"; -// import ftfy from "https://deno.land/x/ftfy_pyodide@v0.1.1/mod.js"; - -function ord(c: string) { - return c.charCodeAt(0); -} -function range(start: number, stop?: number, step: number = 1) { - if (stop === undefined) { - stop = start; - start = 0; - } - - if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { - return []; - } - - const result: number[] = []; - for (let i = start; step > 0 ? i < stop : i > stop; i += step) { - result.push(i); - } - - return result; -} - -function bytesToUnicode() { - const bs = [ - ...range(ord("!"), ord("~") + 1), - ...range(ord("¡"), ord("¬") + 1), - ...range(ord("®"), ord("ÿ") + 1), - ]; - const cs = bs.slice(0); - let n = 0; - for (const b of range(2 ** 8)) { - if (!bs.includes(b)) { - bs.push(b); - cs.push(2 ** 8 + n); - n += 1; - } - } - const csString = cs.map((n) => String.fromCharCode(n)); - return Object.fromEntries(bs.map((v, i) => [v, csString[i]])); -} - -function getPairs(word: string | any[]) { - const pairs: [string, string][] = []; - let prevChar = word[0]; - for (const char of word.slice(1)) { - pairs.push([prevChar, char]); - prevChar = char; - } - return pairs; -} - -function basicClean(text: string) { - // text = ftfy.fix_text(text); - text = htmlEntities.decode(htmlEntities.decode(text)); - return text.trim(); -} - -function whitespaceClean(text: string) { - return text.replace(/\s+/g, " ").trim(); -} - -export default class { - byteEncoder; - byteDecoder: { - [k: string]: number; - }; - encoder; - decoder: any; - bpeRanks: any; - cache: Record; - pat: RegExp; - constructor() { - this.byteEncoder = bytesToUnicode(); - this.byteDecoder = Object.fromEntries( - Object.entries(this.byteEncoder).map(([k, v]) => [v, Number(k)]), - ); - let merges = bpeVocabData.text.split("\n"); - merges = merges.slice(1, 49152 - 256 - 2 + 1); - const mergedMerges = merges.map((merge) => merge.split(" ")); - // There was a bug related to the ordering of Python's .values() output. I'm lazy do I've just copy-pasted the Python output: - let vocab = [ - "!", - '"', - "#", - "$", - "%", - "&", - "'", - "(", - ")", - "*", - "+", - ",", - "-", - ".", - "/", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - ":", - ";", - "<", - "=", - ">", - "?", - "@", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "[", - "\\", - "]", - "^", - "_", - "`", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "{", - "|", - "}", - "~", - "¡", - "¢", - "£", - "¤", - "¥", - "¦", - "§", - "¨", - "©", - "ª", - "«", - "¬", - "®", - "¯", - "°", - "±", - "²", - "³", - "´", - "µ", - "¶", - "·", - "¸", - "¹", - "º", - "»", - "¼", - "½", - "¾", - "¿", - "À", - "Á", - "Â", - "Ã", - "Ä", - "Å", - "Æ", - "Ç", - "È", - "É", - "Ê", - "Ë", - "Ì", - "Í", - "Î", - "Ï", - "Ð", - "Ñ", - "Ò", - "Ó", - "Ô", - "Õ", - "Ö", - "×", - "Ø", - "Ù", - "Ú", - "Û", - "Ü", - "Ý", - "Þ", - "ß", - "à", - "á", - "â", - "ã", - "ä", - "å", - "æ", - "ç", - "è", - "é", - "ê", - "ë", - "ì", - "í", - "î", - "ï", - "ð", - "ñ", - "ò", - "ó", - "ô", - "õ", - "ö", - "÷", - "ø", - "ù", - "ú", - "û", - "ü", - "ý", - "þ", - "ÿ", - "Ā", - "ā", - "Ă", - "ă", - "Ą", - "ą", - "Ć", - "ć", - "Ĉ", - "ĉ", - "Ċ", - "ċ", - "Č", - "č", - "Ď", - "ď", - "Đ", - "đ", - "Ē", - "ē", - "Ĕ", - "ĕ", - "Ė", - "ė", - "Ę", - "ę", - "Ě", - "ě", - "Ĝ", - "ĝ", - "Ğ", - "ğ", - "Ġ", - "ġ", - "Ģ", - "ģ", - "Ĥ", - "ĥ", - "Ħ", - "ħ", - "Ĩ", - "ĩ", - "Ī", - "ī", - "Ĭ", - "ĭ", - "Į", - "į", - "İ", - "ı", - "IJ", - "ij", - "Ĵ", - "ĵ", - "Ķ", - "ķ", - "ĸ", - "Ĺ", - "ĺ", - "Ļ", - "ļ", - "Ľ", - "ľ", - "Ŀ", - "ŀ", - "Ł", - "ł", - "Ń", - ]; - vocab = [...vocab, ...vocab.map((v) => v + "")]; - for (const merge of mergedMerges) { - vocab.push(merge.join("")); - } - vocab.push("<|startoftext|>", "<|endoftext|>"); - this.encoder = Object.fromEntries(vocab.map((v, i) => [v, i])); - this.decoder = Object.fromEntries( - Object.entries(this.encoder).map(([k, v]) => [v, k]), - ); - this.bpeRanks = Object.fromEntries( - mergedMerges.map((v, i) => [v.join("·😎·"), i]), - ); // ·😎· because js doesn't yet have tuples - this.cache = { - "<|startoftext|>": "<|startoftext|>", - "<|endoftext|>": "<|endoftext|>", - }; - this.pat = - /<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+/giu; - } - - bpe(token: string) { - if (this.cache[token] !== undefined) { - return this.cache[token]; - } - - let word = [...token.slice(0, -1), token.slice(-1) + ""]; - let pairs = getPairs(word); - - if (pairs.length === 0) { - return token + ""; - } - - while (1) { - let bigram: [string, string] | null = null; - let minRank = Infinity; - for (const p of pairs) { - const r = this.bpeRanks[p.join("·😎·")]; - if (r === undefined) continue; - if (r < minRank) { - minRank = r; - bigram = p; - } - } - - if (bigram === null) { - break; - } - - const [first, second] = bigram; - const newWord: string[] = []; - let i = 0; - while (i < word.length) { - const j = word.indexOf(first, i); - - if (j === -1) { - newWord.push(...word.slice(i)); - break; - } - - newWord.push(...word.slice(i, j)); - i = j; - - if ( - word[i] === first && - i < word.length - 1 && - word[i + 1] === second - ) { - newWord.push(first + second); - i += 2; - } else { - // @ts-expect-error "Array indexing can return undefined but not modifying thirdparty code" - newWord.push(word[i]); - i += 1; - } - } - word = newWord; - if (word.length === 1) { - break; - } else { - pairs = getPairs(word); - } - } - const joinedWord = word.join(" "); - this.cache[token] = joinedWord; - return joinedWord; - } - - encode(text: string) { - const bpeTokens: number[] = []; - text = whitespaceClean(basicClean(text)).toLowerCase(); - for (let token of [...text.matchAll(this.pat)].map((m) => m[0])) { - token = [...token] - .map((b) => this.byteEncoder[b.charCodeAt(0) as number]) - .join(""); - bpeTokens.push( - // @ts-expect-error "Array indexing can return undefined but not modifying thirdparty code" - ...this.bpe(token) - .split(" ") - .map((bpeToken: string) => this.encoder[bpeToken]), - ); - } - return bpeTokens; - } - - // adds start and end token, and adds padding 0's and ensures it's 77 tokens long - encodeForCLIP(text: string) { - let tokens = this.encode(text); - tokens.unshift(49406); // start token - tokens = tokens.slice(0, 76); - tokens.push(49407); // end token - while (tokens.length < 77) tokens.push(0); - return tokens; - } - - decode(tokens: any[]) { - let text = tokens - .map((token: string | number) => this.decoder[token]) - .join(""); - text = [...text] - .map((c) => this.byteDecoder[c]) - // @ts-expect-error "Array indexing can return undefined but not modifying thirdparty code" - .map((v) => String.fromCharCode(v)) - .join("") - .replace(/<\/w>/g, " "); - return text; - } -} diff --git a/desktop/src/types/clip-bpe-js.ts b/desktop/src/types/clip-bpe-js.ts new file mode 100644 index 0000000000..269ebf28fc --- /dev/null +++ b/desktop/src/types/clip-bpe-js.ts @@ -0,0 +1,11 @@ +/** + * @file Types for "clip-bpe-js" + * + * Non exhaustive, only the function we need. + */ + +declare module "clip-bpe-js" { + class Tokenizer { + encodeForCLIP(text: string): number[]; + } +} diff --git a/desktop/yarn.lock b/desktop/yarn.lock index feb368df7d..f8cce043e6 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -928,6 +928,11 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +clip-bpe-js@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/clip-bpe-js/-/clip-bpe-js-0.0.6.tgz#a11c228e793fa29841f8cd4f8576fc1ff3403511" + integrity sha512-+0n0eeacgFmg9hKhHhXanKkRDhqRwzYK7dj46VYMzePxmN8zbbDgeTQZchfvARNpbBMRi7FfWRSW3lysOUDX/Q== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" From 4acd17f06bfc71cd96aecc66408cc335ebe52b46 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 10:15:08 +0530 Subject: [PATCH 095/466] Funnel point --- web/packages/next/local-user.ts | 2 ++ web/packages/shared/storage/localStorage/index.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/web/packages/next/local-user.ts b/web/packages/next/local-user.ts index 8e9fd05f62..e7bf356c15 100644 --- a/web/packages/next/local-user.ts +++ b/web/packages/next/local-user.ts @@ -1,6 +1,8 @@ // TODO: This file belongs to the accounts package import { z } from "zod"; +// TODO: During login the only field present is email. Which makes this +// optionality indicated by these types incorrect. const LocalUser = z.object({ /** The user's ID. */ id: z.number(), diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index 5a22e9db21..ad3b580aec 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -1,4 +1,5 @@ import log from "@/next/log"; +import { removeKV, setKV } from "packages/next/kv"; export enum LS_KEYS { USER = "user", @@ -46,3 +47,16 @@ export const getData = (key: LS_KEYS) => { }; export const clearData = () => localStorage.clear(); + +// TODO: Migrate this to `local-user.ts`, with (a) more precise optionality +// indication of the constituent fields, (b) moving any fields that need to be +// accessed from web workers to KV DB. +// +// Creating a new function here to act as a funnel point. +export const setLSUser = (user: object) => { + const token = user["token"]; + token && typeof token == "string" + ? setKV("token", token) + : removeKV("token"); + setData(LS_KEYS.USER, user); +}; From 22fbf0a1bebed1681f5d6c3a49db475473abb604 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 10:16:13 +0530 Subject: [PATCH 096/466] 2 --- web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx | 4 ++-- web/packages/accounts/components/Login.tsx | 4 ++-- web/packages/accounts/components/SignUp.tsx | 4 ++-- web/packages/accounts/pages/change-email.tsx | 4 ++-- web/packages/accounts/pages/credentials.tsx | 7 ++++--- web/packages/shared/storage/localStorage/index.ts | 6 +++--- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx index f9d9a23c97..592dc30f95 100644 --- a/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx +++ b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx @@ -3,7 +3,7 @@ import { useContext } from "react"; import { disableTwoFactor } from "@ente/accounts/api/user"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setLSUser } from "@ente/shared/storage/localStorage"; import { Button, Grid } from "@mui/material"; import router from "next/router"; import { AppContext } from "pages/_app"; @@ -33,7 +33,7 @@ export default function TwoFactorModalManageSection(props: Iprops) { const twoFactorDisable = async () => { try { await disableTwoFactor(); - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), isTwoFactorEnabled: false, }); diff --git a/web/packages/accounts/components/Login.tsx b/web/packages/accounts/components/Login.tsx index d02e7bf44c..68a9270c2f 100644 --- a/web/packages/accounts/components/Login.tsx +++ b/web/packages/accounts/components/Login.tsx @@ -5,7 +5,7 @@ import LinkButton from "@ente/shared/components/LinkButton"; import SingleInputForm, { type SingleInputFormProps, } from "@ente/shared/components/SingleInputForm"; -import { LS_KEYS, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, setData, setLSUser } from "@ente/shared/storage/localStorage"; import { Input, Stack, Typography } from "@mui/material"; import { t } from "i18next"; import { useRouter } from "next/router"; @@ -27,7 +27,7 @@ export const Login: React.FC = ({ signUp, host }) => { setFieldError, ) => { try { - setData(LS_KEYS.USER, { email }); + await setLSUser({ email }); const srpAttributes = await getSRPAttributes(email); log.debug(() => ` srpAttributes: ${JSON.stringify(srpAttributes)}`); if (!srpAttributes || srpAttributes.isEmailMFAEnabled) { diff --git a/web/packages/accounts/components/SignUp.tsx b/web/packages/accounts/components/SignUp.tsx index 0c36df4df8..9c35ec3590 100644 --- a/web/packages/accounts/components/SignUp.tsx +++ b/web/packages/accounts/components/SignUp.tsx @@ -4,7 +4,7 @@ import { PasswordStrengthHint } from "@ente/accounts/components/PasswordStrength import { PAGES } from "@ente/accounts/constants/pages"; import { isWeakPassword } from "@ente/accounts/utils"; import { generateKeyAndSRPAttributes } from "@ente/accounts/utils/srp"; -import { LS_KEYS } from "@ente/shared//storage/localStorage"; +import { LS_KEYS, setLSUser } from "@ente/shared//storage/localStorage"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; @@ -82,7 +82,7 @@ export const SignUp: React.FC = ({ router, login, host }) => { } setLoading(true); try { - setData(LS_KEYS.USER, { email }); + await setLSUser({ email }); setLocalReferralSource(referral); await sendOtt(email); } catch (e) { diff --git a/web/packages/accounts/pages/change-email.tsx b/web/packages/accounts/pages/change-email.tsx index e2e77382a9..a346f31808 100644 --- a/web/packages/accounts/pages/change-email.tsx +++ b/web/packages/accounts/pages/change-email.tsx @@ -8,7 +8,7 @@ import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; import LinkButton from "@ente/shared/components/LinkButton"; import SubmitButton from "@ente/shared/components/SubmitButton"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; import { Alert, Box, TextField } from "@mui/material"; import { Formik, type FormikHelpers } from "formik"; import { t } from "i18next"; @@ -83,7 +83,7 @@ const ChangeEmailForm: React.FC = () => { try { setLoading(true); await changeEmail(email, ensure(ott)); - setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email }); + await setLSUser({ ...getData(LS_KEYS.USER), email }); setLoading(false); setSuccess(true); await wait(1000); diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index ab885729fd..ca734fd6e9 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -28,6 +28,7 @@ import { clearData, getData, setData, + setLSUser, } from "@ente/shared/storage/localStorage"; import { getToken, @@ -224,7 +225,7 @@ const Page: React.FC = ({ appContext }) => { sessionKeyAttributes, ); const user = getData(LS_KEYS.USER); - setData(LS_KEYS.USER, { + await setLSUser({ ...user, passkeySessionID, isTwoFactorEnabled: true, @@ -244,7 +245,7 @@ const Page: React.FC = ({ appContext }) => { sessionKeyAttributes, ); const user = getData(LS_KEYS.USER); - setData(LS_KEYS.USER, { + await setLSUser({ ...user, twoFactorSessionID, isTwoFactorEnabled: true, @@ -253,7 +254,7 @@ const Page: React.FC = ({ appContext }) => { throw Error(CustomError.TWO_FACTOR_ENABLED); } else { const user = getData(LS_KEYS.USER); - setData(LS_KEYS.USER, { + await setLSUser({ ...user, token, encryptedToken, diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index ad3b580aec..64f0423064 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -53,10 +53,10 @@ export const clearData = () => localStorage.clear(); // accessed from web workers to KV DB. // // Creating a new function here to act as a funnel point. -export const setLSUser = (user: object) => { +export const setLSUser = async (user: object) => { const token = user["token"]; token && typeof token == "string" - ? setKV("token", token) - : removeKV("token"); + ? await setKV("token", token) + : await removeKV("token"); setData(LS_KEYS.USER, user); }; From af53585f6c983a95f6e39f85e51935d0154e7a38 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 10:20:22 +0530 Subject: [PATCH 097/466] 3 --- web/packages/accounts/pages/passkeys/finish.tsx | 4 ++-- web/packages/accounts/pages/two-factor/recover.tsx | 9 +++++++-- web/packages/accounts/pages/verify.tsx | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/web/packages/accounts/pages/passkeys/finish.tsx b/web/packages/accounts/pages/passkeys/finish.tsx index be52cc02ae..35d7b72a24 100644 --- a/web/packages/accounts/pages/passkeys/finish.tsx +++ b/web/packages/accounts/pages/passkeys/finish.tsx @@ -4,7 +4,7 @@ import { VerticallyCentered } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { fromB64URLSafeNoPaddingString } from "@ente/shared/crypto/internal/libsodium"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; import { useRouter } from "next/router"; import React, { useEffect } from "react"; import { PAGES } from "../../constants/pages"; @@ -99,7 +99,7 @@ const saveCredentialsAndNavigateTo = async ( // user is signing into an existing account). const { keyAttributes, encryptedToken, token, id } = decodedResponse; - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), token, encryptedToken, diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index 6175b305b0..011f3fc80f 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -20,7 +20,12 @@ import { SUPPORT_EMAIL } from "@ente/shared/constants/urls"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { ApiError } from "@ente/shared/error"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { Link } from "@mui/material"; import { HttpStatusCode } from "axios"; import { t } from "i18next"; @@ -126,7 +131,7 @@ const Page: React.FC = ({ appContext, twoFactorType }) => { twoFactorType, ); const { keyAttributes, encryptedToken, token, id } = resp; - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), token, encryptedToken, diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 7b5ac424e7..d7d63cdb30 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -15,7 +15,7 @@ import SingleInputForm, { import { ApiError } from "@ente/shared/error"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; import localForage from "@ente/shared/storage/localForage"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; import { getLocalReferralSource, setIsFirstLogin, @@ -87,7 +87,7 @@ const Page: React.FC = ({ appContext }) => { } = resp.data as UserVerificationResponse; if (passkeySessionID) { const user = getData(LS_KEYS.USER); - setData(LS_KEYS.USER, { + await setLSUser({ ...user, passkeySessionID, isTwoFactorEnabled: true, @@ -103,7 +103,7 @@ const Page: React.FC = ({ appContext }) => { setPasskeyVerificationData({ passkeySessionID, url }); openPasskeyVerificationURL({ passkeySessionID, url }); } else if (twoFactorSessionID) { - setData(LS_KEYS.USER, { + await setLSUser({ email, twoFactorSessionID, isTwoFactorEnabled: true, @@ -111,7 +111,7 @@ const Page: React.FC = ({ appContext }) => { setIsFirstLogin(true); router.push(PAGES.TWO_FACTOR_VERIFY); } else { - setData(LS_KEYS.USER, { + await setLSUser({ email, token, encryptedToken, From 85aaf94c89d819b10c132c04c984477e471d3e8e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 10:22:09 +0530 Subject: [PATCH 098/466] 4 --- web/apps/photos/src/components/Sidebar/index.tsx | 4 ++-- .../photos/src/components/TwoFactor/Modal/index.tsx | 4 ++-- web/packages/accounts/pages/change-email.tsx | 2 +- web/packages/accounts/pages/two-factor/setup.tsx | 4 ++-- web/packages/accounts/pages/two-factor/verify.tsx | 4 ++-- web/packages/accounts/services/passkey.ts | 11 ++++++++--- web/packages/shared/components/LoginComponents.tsx | 2 +- web/packages/shared/crypto/helpers.ts | 9 +++++++-- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 463405be75..9db254a220 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -10,7 +10,7 @@ import RecoveryKey from "@ente/shared/components/RecoveryKey"; import ThemeSwitcher from "@ente/shared/components/ThemeSwitcher"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; import { useLocalState } from "@ente/shared/hooks/useLocalState"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { downloadAsFile } from "@ente/shared/utils"; import ArchiveOutlined from "@mui/icons-material/ArchiveOutlined"; @@ -164,7 +164,7 @@ const UserDetailsSection: React.FC = ({ setUserDetails(userDetails); setData(LS_KEYS.SUBSCRIPTION, userDetails.subscription); setData(LS_KEYS.FAMILY_DATA, userDetails.familyData); - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), email: userDetails.email, }); diff --git a/web/apps/photos/src/components/TwoFactor/Modal/index.tsx b/web/apps/photos/src/components/TwoFactor/Modal/index.tsx index d4c5ebc3c7..248167c2ea 100644 --- a/web/apps/photos/src/components/TwoFactor/Modal/index.tsx +++ b/web/apps/photos/src/components/TwoFactor/Modal/index.tsx @@ -1,4 +1,4 @@ -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setLSUser } from "@ente/shared/storage/localStorage"; import { t } from "i18next"; import { useEffect, useState } from "react"; import { getTwoFactorStatus } from "services/userService"; @@ -37,7 +37,7 @@ function TwoFactorModal(props: Props) { const main = async () => { const isTwoFactorEnabled = await getTwoFactorStatus(); setTwoFactorStatus(isTwoFactorEnabled); - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), isTwoFactorEnabled, }); diff --git a/web/packages/accounts/pages/change-email.tsx b/web/packages/accounts/pages/change-email.tsx index a346f31808..d8de35bef7 100644 --- a/web/packages/accounts/pages/change-email.tsx +++ b/web/packages/accounts/pages/change-email.tsx @@ -8,7 +8,7 @@ import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; import LinkButton from "@ente/shared/components/LinkButton"; import SubmitButton from "@ente/shared/components/SubmitButton"; -import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setLSUser } from "@ente/shared/storage/localStorage"; import { Alert, Box, TextField } from "@mui/material"; import { Formik, type FormikHelpers } from "formik"; import { t } from "i18next"; diff --git a/web/packages/accounts/pages/two-factor/setup.tsx b/web/packages/accounts/pages/two-factor/setup.tsx index b65faaee12..3bcb66f17b 100644 --- a/web/packages/accounts/pages/two-factor/setup.tsx +++ b/web/packages/accounts/pages/two-factor/setup.tsx @@ -9,7 +9,7 @@ import type { TwoFactorSecret } from "@ente/accounts/types/user"; import { VerticallyCentered } from "@ente/shared/components/Container"; import LinkButton from "@ente/shared/components/LinkButton"; import { encryptWithRecoveryKey } from "@ente/shared/crypto/helpers"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setLSUser } from "@ente/shared/storage/localStorage"; import { Box, CardContent, Typography } from "@mui/material"; import Card from "@mui/material/Card"; import { t } from "i18next"; @@ -54,7 +54,7 @@ const Page: React.FC = () => { ); await enableTwoFactor(otp, recoveryEncryptedTwoFactorSecret); await markSuccessful(); - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), isTwoFactorEnabled: true, }); diff --git a/web/packages/accounts/pages/two-factor/verify.tsx b/web/packages/accounts/pages/two-factor/verify.tsx index cd2cbf4b71..e32f5a66d5 100644 --- a/web/packages/accounts/pages/two-factor/verify.tsx +++ b/web/packages/accounts/pages/two-factor/verify.tsx @@ -11,7 +11,7 @@ import FormTitle from "@ente/shared/components/Form/FormPaper/Title"; import LinkButton from "@ente/shared/components/LinkButton"; import { ApiError } from "@ente/shared/error"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; import type { User } from "@ente/shared/user/types"; import { HttpStatusCode } from "axios"; import { t } from "i18next"; @@ -47,7 +47,7 @@ const Page: React.FC = ({ appContext }) => { try { const resp = await verifyTwoFactor(otp, sessionID); const { keyAttributes, encryptedToken, token, id } = resp; - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), token, encryptedToken, diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index ad094cef18..c8414b7646 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -13,7 +13,12 @@ import { import { CustomError } from "@ente/shared/error"; import HTTPService from "@ente/shared/network/HTTPService"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { getToken } from "@ente/shared/storage/localStorage/helpers"; /** @@ -250,14 +255,14 @@ export const checkPasskeyVerificationStatus = async ( * * @returns the slug that we should navigate to now. */ -export const saveCredentialsAndNavigateTo = ( +export const saveCredentialsAndNavigateTo = async ( response: TwoFactorAuthorizationResponse, ) => { // This method somewhat duplicates `saveCredentialsAndNavigateTo` in the // /passkeys/finish page. const { id, encryptedToken, keyAttributes } = response; - setData(LS_KEYS.USER, { + await setLSUser({ ...getData(LS_KEYS.USER), encryptedToken, id, diff --git a/web/packages/shared/components/LoginComponents.tsx b/web/packages/shared/components/LoginComponents.tsx index 3f47225cd9..cd5402654b 100644 --- a/web/packages/shared/components/LoginComponents.tsx +++ b/web/packages/shared/components/LoginComponents.tsx @@ -108,7 +108,7 @@ export const VerifyingPasskey: React.FC = ({ const response = await checkPasskeyVerificationStatus(passkeySessionID); if (!response) setVerificationStatus("pending"); - else router.push(saveCredentialsAndNavigateTo(response)); + else router.push(await saveCredentialsAndNavigateTo(response)); } catch (e) { log.error("Passkey verification status check failed", e); setDialogBoxAttributesV2( diff --git a/web/packages/shared/crypto/helpers.ts b/web/packages/shared/crypto/helpers.ts index ede0b2c53c..240e7c1d9b 100644 --- a/web/packages/shared/crypto/helpers.ts +++ b/web/packages/shared/crypto/helpers.ts @@ -1,6 +1,11 @@ import log from "@/next/log"; import { setRecoveryKey } from "@ente/accounts/api/user"; -import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { getToken } from "@ente/shared/storage/localStorage/helpers"; import { SESSION_KEYS, setKey } from "@ente/shared/storage/sessionStorage"; import { getActualKey } from "@ente/shared/user"; @@ -35,7 +40,7 @@ export async function decryptAndStoreToken( urlUnsafeB64DecryptedToken, ); decryptedToken = await cryptoWorker.toB64URLSafe(decryptedTokenBytes); - setData(LS_KEYS.USER, { + await setLSUser({ ...user, token: decryptedToken, encryptedToken: null, From 0376af8d385350932fa070aaf1ab48c0577d03c9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 10:43:46 +0530 Subject: [PATCH 099/466] Read from kv --- web/packages/accounts/services/session.ts | 2 +- web/packages/new/photos/services/embedding.ts | 2 +- web/packages/new/photos/services/feature-flags.ts | 2 +- web/packages/next/http.ts | 6 +++--- web/packages/next/local-user.ts | 12 +++++++++--- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/web/packages/accounts/services/session.ts b/web/packages/accounts/services/session.ts index d82f12ebd9..386e1290b9 100644 --- a/web/packages/accounts/services/session.ts +++ b/web/packages/accounts/services/session.ts @@ -64,7 +64,7 @@ type SessionValidity = export const checkSessionValidity = async (): Promise => { const url = await apiURL("/users/session-validity/v2"); const res = await fetch(url, { - headers: authenticatedRequestHeaders(), + headers: await authenticatedRequestHeaders(), }); if (!res.ok) { if (res.status == 401) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 82de19ec9d..a8d27f7177 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -332,7 +332,7 @@ const getEmbeddingsDiff = async ( }); const url = await apiURL("/embeddings/diff"); const res = await fetch(`${url}?${params.toString()}`, { - headers: authenticatedRequestHeaders(), + headers: await authenticatedRequestHeaders(), }); if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); return z.array(RemoteEmbedding).parse(await res.json()); diff --git a/web/packages/new/photos/services/feature-flags.ts b/web/packages/new/photos/services/feature-flags.ts index 97969d1a41..b5d75936db 100644 --- a/web/packages/new/photos/services/feature-flags.ts +++ b/web/packages/new/photos/services/feature-flags.ts @@ -67,7 +67,7 @@ const fetchAndSaveFeatureFlags = () => const fetchFeatureFlags = async () => { const url = await apiURL("/remote-store/feature-flags"); const res = await fetch(url, { - headers: authenticatedRequestHeaders(), + headers: await authenticatedRequestHeaders(), }); if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); return res; diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index fca7bbfc6b..d7a731a487 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -8,8 +8,8 @@ import { ensureAuthToken } from "./local-user"; * - The auth token * - The client package name. */ -export const authenticatedRequestHeaders = (): Record => ({ - "X-Auth-Token": ensureAuthToken(), +export const authenticatedRequestHeaders = async () => ({ + "X-Auth-Token": await ensureAuthToken(), "X-Client-Package": clientPackageName, }); @@ -17,6 +17,6 @@ export const authenticatedRequestHeaders = (): Record => ({ * Return a headers object with "X-Client-Package" header set to the client * package name of the current app. */ -export const clientPackageHeader = (): Record => ({ +export const clientPackageHeader = () => ({ "X-Client-Package": clientPackageName, }); diff --git a/web/packages/next/local-user.ts b/web/packages/next/local-user.ts index e7bf356c15..d38ed5a69c 100644 --- a/web/packages/next/local-user.ts +++ b/web/packages/next/local-user.ts @@ -1,5 +1,8 @@ // TODO: This file belongs to the accounts package + +import { ensure } from "@/utils/ensure"; import { z } from "zod"; +import { getKV } from "./kv"; // TODO: During login the only field present is email. Which makes this // optionality indicated by these types incorrect. @@ -45,10 +48,13 @@ export const ensureLocalUser = (): LocalUser => { /** * Return the user's auth token, or throw an error. * - * The user's auth token is stored in local storage after they have successfully - * logged in. This function returns that saved auth token. + * The user's auth token is stored in KV DB after they have successfully logged + * in. This function returns that saved auth token. * * If no such token is found (which should only happen if the user is not logged * in), then it throws an error. + * + * The underlying data is stored in IndexedDB, and can be accessed from web + * workers. */ -export const ensureAuthToken = (): string => ensureLocalUser().token; +export const ensureAuthToken = async () => ensure(await getKV("token")); From 61a62f5656c3f457c20ed1ba102fe86423689c9f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:04:15 +0530 Subject: [PATCH 100/466] Reduce local state for accounts --- web/apps/accounts/src/pages/_app.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 158b1a3b34..890a6ba30b 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -1,6 +1,7 @@ import { staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; +import { disableDiskLogs } from "@/next/log"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; import { PAGES } from "@ente/accounts/constants/pages"; import { accountLogout } from "@ente/accounts/services/logout"; @@ -45,6 +46,7 @@ const App: React.FC = ({ Component, pageProps }) => { const [themeColor] = useLocalState(LS_KEYS.THEME, THEME_COLOR.DARK); useEffect(() => { + disableDiskLogs(); void setupI18n().finally(() => setIsI18nReady(true)); logUnhandledErrorsAndRejections(true); return () => logUnhandledErrorsAndRejections(false); From 7b20bbd5a21d83b9c071943b9f8204a8378d71e8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:05:10 +0530 Subject: [PATCH 101/466] Reorder --- web/apps/accounts/src/pages/_app.tsx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 890a6ba30b..4a0c9eb2fd 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -26,21 +26,13 @@ import "styles/global.css"; const App: React.FC = ({ Component, pageProps }) => { const [isI18nReady, setIsI18nReady] = useState(false); - const [showNavbar, setShowNavbar] = useState(false); - const [dialogBoxAttributeV2, setDialogBoxAttributesV2] = useState< DialogBoxAttributesV2 | undefined >(); - const [dialogBoxV2View, setDialogBoxV2View] = useState(false); - useEffect(() => { - setDialogBoxV2View(true); - }, [dialogBoxAttributeV2]); - const isMobile = useMediaQuery("(max-width: 428px)"); - const router = useRouter(); const [themeColor] = useLocalState(LS_KEYS.THEME, THEME_COLOR.DARK); @@ -52,6 +44,10 @@ const App: React.FC = ({ Component, pageProps }) => { return () => logUnhandledErrorsAndRejections(false); }, []); + useEffect(() => { + setDialogBoxV2View(true); + }, [dialogBoxAttributeV2]); + const closeDialogBoxV2 = () => setDialogBoxV2View(false); const theme = getTheme(themeColor, "photos"); From 6b6edfb5bf0073392a823fab42b95491e1430f84 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:06:25 +0530 Subject: [PATCH 102/466] Reduce state --- web/apps/accounts/src/pages/_app.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 4a0c9eb2fd..c2de02b28a 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -10,8 +10,6 @@ import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { AppNavbar } from "@ente/shared/components/Navbar/app"; -import { useLocalState } from "@ente/shared/hooks/useLocalState"; -import { LS_KEYS } from "@ente/shared/storage/localStorage"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { CssBaseline, useMediaQuery } from "@mui/material"; @@ -35,8 +33,6 @@ const App: React.FC = ({ Component, pageProps }) => { const isMobile = useMediaQuery("(max-width: 428px)"); const router = useRouter(); - const [themeColor] = useLocalState(LS_KEYS.THEME, THEME_COLOR.DARK); - useEffect(() => { disableDiskLogs(); void setupI18n().finally(() => setIsI18nReady(true)); @@ -50,8 +46,6 @@ const App: React.FC = ({ Component, pageProps }) => { const closeDialogBoxV2 = () => setDialogBoxV2View(false); - const theme = getTheme(themeColor, "photos"); - const logout = useCallback(() => { void accountLogout().then(() => router.push(PAGES.ROOT)); }, [router]); @@ -71,7 +65,7 @@ const App: React.FC = ({ Component, pageProps }) => { <> - + Date: Mon, 1 Jul 2024 11:09:42 +0530 Subject: [PATCH 103/466] Assert that accounts has no local state --- web/apps/accounts/src/pages/_app.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index c2de02b28a..3bad33005b 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -10,6 +10,7 @@ import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { AppNavbar } from "@ente/shared/components/Navbar/app"; +import { clearData } from "@ente/shared/storage/localStorage"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { CssBaseline, useMediaQuery } from "@mui/material"; @@ -35,6 +36,10 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { disableDiskLogs(); + // accounts.ente.io has no local state, but some older builds might've + // leftover some scraps. Clear it out. (tag: Migration) + // Added 1 July 2024, can be removed after a while. + clearData(); void setupI18n().finally(() => setIsI18nReady(true)); logUnhandledErrorsAndRejections(true); return () => logUnhandledErrorsAndRejections(false); From 39a6b3cd6b37720d552f1570be5a880a738827fc Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:20:23 +0530 Subject: [PATCH 104/466] Make the context more specific --- web/apps/accounts/src/pages/_app.tsx | 6 +++--- .../accounts/src/{components => types}/context.ts | 14 +++++++++++--- web/packages/accounts/README.md | 15 +++++++++++++++ web/packages/{next => accounts}/types/context.ts | 6 +++--- 4 files changed, 32 insertions(+), 9 deletions(-) rename web/apps/accounts/src/{components => types}/context.ts (57%) create mode 100644 web/packages/accounts/README.md rename web/packages/{next => accounts}/types/context.ts (68%) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 3bad33005b..db75769166 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -36,9 +36,9 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { disableDiskLogs(); - // accounts.ente.io has no local state, but some older builds might've - // leftover some scraps. Clear it out. (tag: Migration) - // Added 1 July 2024, can be removed after a while. + // The accounts app has no local state, but some older builds might've + // leftover some scraps. Clear it out. Thi code added 1 July 2024, can + // be removed after a while (tag: Migration). clearData(); void setupI18n().finally(() => setIsI18nReady(true)); logUnhandledErrorsAndRejections(true); diff --git a/web/apps/accounts/src/components/context.ts b/web/apps/accounts/src/types/context.ts similarity index 57% rename from web/apps/accounts/src/components/context.ts rename to web/apps/accounts/src/types/context.ts index 3189659b03..c718471dba 100644 --- a/web/apps/accounts/src/components/context.ts +++ b/web/apps/accounts/src/types/context.ts @@ -2,10 +2,18 @@ import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { createContext, useContext } from "react"; -/** The accounts app has no extra properties on top of the base context. */ -type AppContextT = BaseAppContextT; +/** + * The type of the context for pages in the accounts app. + * + * - The accounts app has no extra properties on top of the base context. + * + * - It also doesn't need the logout function. + */ +type AppContextT = Omit; -/** The React {@link Context} available to all pages. */ +/** + * The React {@link Context} available to all pages. + */ export const AppContext = createContext(undefined); /** diff --git a/web/packages/accounts/README.md b/web/packages/accounts/README.md new file mode 100644 index 0000000000..3c4bcfddc6 --- /dev/null +++ b/web/packages/accounts/README.md @@ -0,0 +1,15 @@ +## @ente/accounts + +A package for sharing the pages involved in the signup/login flow. + +Currently this is used by the photos and auth apps. + +> [!NOTE] +> +> This is distinct from the accounts _app_, which currently acts as a broker for +> passkeys. + +### Packaging + +This (internal) package exports a React TypeScript library. We rely on the +importing project to transpile and bundle it. diff --git a/web/packages/next/types/context.ts b/web/packages/accounts/types/context.ts similarity index 68% rename from web/packages/next/types/context.ts rename to web/packages/accounts/types/context.ts index 59d3724ff2..38a49dc4ee 100644 --- a/web/packages/next/types/context.ts +++ b/web/packages/accounts/types/context.ts @@ -1,10 +1,10 @@ import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; /** - * Properties guaranteed to be present in the AppContext types for apps that are - * listed in {@link AppName}. + * Properties expected to be present in the AppContext types for pages that + * defer to the pages provided by the accounts package. */ -export interface BaseAppContextT { +export interface AccountsContextT { /** Perform the (possibly app specific) logout sequence. */ logout: () => void; /** Show or hide the app's navigation bar. */ From cd81bbe19e20ce18b18a726b3c520c20a1593671 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 11:41:23 +0530 Subject: [PATCH 105/466] Scope --- web/apps/accounts/src/types/context.ts | 9 +++++++-- web/apps/auth/src/pages/_app.tsx | 6 +++--- web/apps/photos/src/pages/_app.tsx | 7 +++---- .../accounts/pages/two-factor/recover.tsx | 4 ++-- web/packages/accounts/types/page.ts | 4 ++-- web/packages/next/app.ts | 15 --------------- .../shared/components/LoginComponents.tsx | 16 +++++----------- 7 files changed, 22 insertions(+), 39 deletions(-) diff --git a/web/apps/accounts/src/types/context.ts b/web/apps/accounts/src/types/context.ts index c718471dba..18716db085 100644 --- a/web/apps/accounts/src/types/context.ts +++ b/web/apps/accounts/src/types/context.ts @@ -1,5 +1,5 @@ -import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; +import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import { createContext, useContext } from "react"; /** @@ -9,7 +9,12 @@ import { createContext, useContext } from "react"; * * - It also doesn't need the logout function. */ -type AppContextT = Omit; +interface AppContextT { + /** Show or hide the app's navigation bar. */ + showNavBar: (show: boolean) => void; + isMobile: boolean; + setDialogBoxAttributesV2: (attrs: DialogBoxAttributesV2) => void; +} /** * The React {@link Context} available to all pages. diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index a18bb5c130..113d851dc2 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -5,9 +5,9 @@ import { logStartupBanner, logUnhandledErrorsAndRejections, } from "@/next/log-web"; -import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { accountLogout } from "@ente/accounts/services/logout"; +import type { AccountsContextT } from "@ente/accounts/types/context"; import { Overlay } from "@ente/shared/components/Container"; import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; @@ -37,9 +37,9 @@ import LoadingBar, { type LoadingBarRef } from "react-top-loading-bar"; import "../../public/css/global.css"; /** - * Properties available via the {@link AppContext} to the Auth app's React tree. + * Properties available via {@link AppContext} to the Auth app's React tree. */ -type AppContextT = BaseAppContextT & { +type AppContextT = AccountsContextT & { startLoading: () => void; finishLoading: () => void; themeColor: THEME_COLOR; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index c90c4092de..d000858522 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -6,9 +6,9 @@ import { logStartupBanner, logUnhandledErrorsAndRejections, } from "@/next/log-web"; -import type { BaseAppContextT } from "@/next/types/context"; import { AppUpdate } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; +import type { AccountsContextT } from "@ente/accounts/types/context"; import { Overlay } from "@ente/shared/components/Container"; import DialogBox from "@ente/shared/components/DialogBox"; import { @@ -73,10 +73,9 @@ const redirectMap = new Map([ ]); /** - * Properties available via the {@link AppContext} to the Photos app's React - * tree. + * Properties available via {@link AppContext} to the Photos app's React tree. */ -type AppContextT = BaseAppContextT & { +type AppContextT = AccountsContextT & { mlSearchEnabled: boolean; mapEnabled: boolean; updateMlSearchEnabled: (enabled: boolean) => Promise; diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index 011f3fc80f..030281dcb0 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -1,5 +1,4 @@ import log from "@/next/log"; -import type { BaseAppContextT } from "@/next/types/context"; import { ensure } from "@/utils/ensure"; import { recoverTwoFactor, @@ -7,6 +6,7 @@ import { type TwoFactorType, } from "@ente/accounts/api/user"; import { PAGES } from "@ente/accounts/constants/pages"; +import type { AccountsContextT } from "@ente/accounts/types/context"; import { VerticallyCentered } from "@ente/shared/components/Container"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import FormPaper from "@ente/shared/components/Form/FormPaper"; @@ -38,7 +38,7 @@ const bip39 = require("bip39"); bip39.setDefaultWordlist("english"); export interface RecoverPageProps { - appContext: BaseAppContextT; + appContext: AccountsContextT; twoFactorType: TwoFactorType; } diff --git a/web/packages/accounts/types/page.ts b/web/packages/accounts/types/page.ts index c673f8a47e..c1c5d54548 100644 --- a/web/packages/accounts/types/page.ts +++ b/web/packages/accounts/types/page.ts @@ -1,4 +1,4 @@ -import type { BaseAppContextT } from "@/next/types/context"; +import type { AccountsContextT } from "@ente/accounts/types/context"; /** * The default type for pages exposed by this package. @@ -12,5 +12,5 @@ export interface PageProps { * Within this package we do not have access to the context object declared * with the app's code, so we need to take the context as a parameter. */ - appContext: BaseAppContextT; + appContext: AccountsContextT; } diff --git a/web/packages/next/app.ts b/web/packages/next/app.ts index ae055db4a1..89cd492c09 100644 --- a/web/packages/next/app.ts +++ b/web/packages/next/app.ts @@ -1,5 +1,3 @@ -import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; - export const appNames = ["accounts", "auth", "cast", "photos"] as const; /** @@ -70,16 +68,3 @@ export const clientPackageName = (() => { photos: "io.ente.photos.web", }[appName]; })(); - -/** - * Properties guaranteed to be present in the AppContext types for apps that are - * listed in {@link AppName}. - */ -export interface BaseAppContextT { - /** Perform the (possibly app specific) logout sequence. */ - logout: () => void; - /** Show or hide the app's navigation bar. */ - showNavBar: (show: boolean) => void; - isMobile: boolean; - setDialogBoxAttributesV2: (attrs: DialogBoxAttributesV2) => void; -} diff --git a/web/packages/shared/components/LoginComponents.tsx b/web/packages/shared/components/LoginComponents.tsx index cd5402654b..c3ea97d1f7 100644 --- a/web/packages/shared/components/LoginComponents.tsx +++ b/web/packages/shared/components/LoginComponents.tsx @@ -1,6 +1,5 @@ import log from "@/next/log"; import { customAPIHost } from "@/next/origins"; -import type { BaseAppContextT } from "@/next/types/context"; import { checkPasskeyVerificationStatus, passkeySessionExpiredErrorMessage, @@ -74,23 +73,18 @@ interface VerifyingPasskeyProps { email: string | undefined; /** Called when the user wants to redirect again. */ onRetry: () => void; - /** - * The appContext. - * - * Needs to be explicitly passed since this component is used in a package - * where the pages are not wrapped in the provider. - */ - appContext: BaseAppContextT; + /** Perform the (possibly app specific) logout sequence. */ + logout: () => void; + setDialogBoxAttributesV2: (attrs: DialogBoxAttributesV2) => void; } export const VerifyingPasskey: React.FC = ({ passkeySessionID, email, onRetry, - appContext, + logout, + setDialogBoxAttributesV2, }) => { - const { logout, setDialogBoxAttributesV2 } = appContext; - type VerificationStatus = "waiting" | "checking" | "pending"; const [verificationStatus, setVerificationStatus] = useState("waiting"); From 62c9b2afc23b256b986b6d41370781f2a322ac5e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:22:22 +0530 Subject: [PATCH 106/466] Remove dependency --- web/packages/accounts/pages/credentials.tsx | 6 +++--- web/packages/accounts/pages/verify.tsx | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index ca734fd6e9..3cb1311d29 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -63,7 +63,7 @@ import type { PageProps } from "../types/page"; import type { SRPAttributes } from "../types/srp"; const Page: React.FC = ({ appContext }) => { - const { logout, setDialogBoxAttributesV2 } = appContext; + const { logout, showNavBar, setDialogBoxAttributesV2 } = appContext; const [srpAttributes, setSrpAttributes] = useState(); const [keyAttributes, setKeyAttributes] = useState(); @@ -192,7 +192,7 @@ const Page: React.FC = ({ appContext }) => { } }; main(); - appContext.showNavBar(true); + showNavBar(true); }, []); // TODO: ^ validateSession is a dependency, but add that only after we've // wrapped items from the callback (like logout) in useCallback too. @@ -353,7 +353,7 @@ const Page: React.FC = ({ appContext }) => { onRetry={() => openPasskeyVerificationURL(passkeyVerificationData) } - appContext={appContext} + {...{ logout, setDialogBoxAttributesV2 }} /> ); } diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index d7d63cdb30..5cdd5ffab7 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -15,7 +15,12 @@ import SingleInputForm, { import { ApiError } from "@ente/shared/error"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; import localForage from "@ente/shared/storage/localForage"; -import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { getLocalReferralSource, setIsFirstLogin, @@ -39,7 +44,7 @@ import type { PageProps } from "../types/page"; import type { SRPSetupAttributes } from "../types/srp"; const Page: React.FC = ({ appContext }) => { - const { logout } = appContext; + const { logout, showNavBar, setDialogBoxAttributesV2 } = appContext; const [email, setEmail] = useState(""); const [resend, setResend] = useState(0); @@ -67,7 +72,7 @@ const Page: React.FC = ({ appContext }) => { } }; main(); - appContext.showNavBar(true); + showNavBar(true); }, []); const onSubmit: SingleInputFormProps["callback"] = async ( @@ -199,7 +204,7 @@ const Page: React.FC = ({ appContext }) => { onRetry={() => openPasskeyVerificationURL(passkeyVerificationData) } - appContext={appContext} + {...{ logout, setDialogBoxAttributesV2 }} /> ); } From fbae7b6fd07e37172c80345989f8579d05ebf89e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:27:57 +0530 Subject: [PATCH 107/466] Inline --- web/packages/accounts/components/PasswordStrength.tsx | 6 ++++-- web/packages/accounts/constants/index.ts | 5 ----- web/packages/accounts/utils/index.ts | 7 ++++++- 3 files changed, 10 insertions(+), 8 deletions(-) delete mode 100644 web/packages/accounts/constants/index.ts diff --git a/web/packages/accounts/components/PasswordStrength.tsx b/web/packages/accounts/components/PasswordStrength.tsx index f30c6c85e2..d2977e0e7f 100644 --- a/web/packages/accounts/components/PasswordStrength.tsx +++ b/web/packages/accounts/components/PasswordStrength.tsx @@ -1,5 +1,7 @@ -import { PasswordStrength } from "@ente/accounts/constants"; -import { estimatePasswordStrength } from "@ente/accounts/utils"; +import { + PasswordStrength, + estimatePasswordStrength, +} from "@ente/accounts/utils"; import { FlexWrapper } from "@ente/shared/components/Container"; import { Typography } from "@mui/material"; import { t } from "i18next"; diff --git a/web/packages/accounts/constants/index.ts b/web/packages/accounts/constants/index.ts deleted file mode 100644 index 81f63d4771..0000000000 --- a/web/packages/accounts/constants/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum PasswordStrength { - WEAK = "WEAK", - MODERATE = "MODERATE", - STRONG = "STRONG", -} diff --git a/web/packages/accounts/utils/index.ts b/web/packages/accounts/utils/index.ts index 60de6611bc..7b311eea9b 100644 --- a/web/packages/accounts/utils/index.ts +++ b/web/packages/accounts/utils/index.ts @@ -1,6 +1,11 @@ -import { PasswordStrength } from "@ente/accounts/constants"; import zxcvbn from "zxcvbn"; +export enum PasswordStrength { + WEAK = "WEAK", + MODERATE = "MODERATE", + STRONG = "STRONG", +} + export const convertBufferToBase64 = (buffer: Buffer) => { return buffer.toString("base64"); }; From 4179d183bd1685dafbf5aca0364aaa37bb07166a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:31:37 +0530 Subject: [PATCH 108/466] Unenum --- .../accounts/components/PasswordStrength.tsx | 26 ++++++++++--------- web/packages/accounts/utils/index.ts | 16 +++++------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/web/packages/accounts/components/PasswordStrength.tsx b/web/packages/accounts/components/PasswordStrength.tsx index d2977e0e7f..de378a23bc 100644 --- a/web/packages/accounts/components/PasswordStrength.tsx +++ b/web/packages/accounts/components/PasswordStrength.tsx @@ -1,30 +1,30 @@ -import { - PasswordStrength, - estimatePasswordStrength, -} from "@ente/accounts/utils"; +import { estimatePasswordStrength } from "@ente/accounts/utils"; import { FlexWrapper } from "@ente/shared/components/Container"; import { Typography } from "@mui/material"; import { t } from "i18next"; -import { useMemo } from "react"; +import React, { useMemo } from "react"; -export const PasswordStrengthHint = ({ - password, -}: { +interface PasswordStrengthHintProps { password: string; -}): JSX.Element => { +} + +export const PasswordStrengthHint: React.FC = ({ + password, +}) => { const passwordStrength = useMemo( () => estimatePasswordStrength(password), [password], ); + return ( ({ color: - passwordStrength === PasswordStrength.WEAK + passwordStrength == "weak" ? theme.colors.danger.A700 - : passwordStrength === PasswordStrength.MODERATE + : passwordStrength == "moderate" ? theme.colors.warning.A500 : theme.colors.accent.A500, })} @@ -32,7 +32,9 @@ export const PasswordStrengthHint = ({ flex={1} > {password - ? t("PASSPHRASE_STRENGTH", { context: passwordStrength }) + ? t("PASSPHRASE_STRENGTH", { + context: passwordStrength.toUpperCase(), + }) : ""} diff --git a/web/packages/accounts/utils/index.ts b/web/packages/accounts/utils/index.ts index 7b311eea9b..c2b5055447 100644 --- a/web/packages/accounts/utils/index.ts +++ b/web/packages/accounts/utils/index.ts @@ -1,10 +1,6 @@ import zxcvbn from "zxcvbn"; -export enum PasswordStrength { - WEAK = "WEAK", - MODERATE = "MODERATE", - STRONG = "STRONG", -} +export type PasswordStrength = "weak" | "moderate" | "strong"; export const convertBufferToBase64 = (buffer: Buffer) => { return buffer.toString("base64"); @@ -16,19 +12,19 @@ export const convertBase64ToBuffer = (base64: string) => { export function estimatePasswordStrength(password: string): PasswordStrength { if (!password) { - return PasswordStrength.WEAK; + return "weak"; } const zxcvbnResult = zxcvbn(password); if (zxcvbnResult.score < 2) { - return PasswordStrength.WEAK; + return "weak"; } else if (zxcvbnResult.score < 3) { - return PasswordStrength.MODERATE; + return "moderate"; } else { - return PasswordStrength.STRONG; + return "strong"; } } export const isWeakPassword = (password: string) => { - return estimatePasswordStrength(password) === PasswordStrength.WEAK; + return estimatePasswordStrength(password) == "weak"; }; From 5b9c173b0ee72d543c102fb0fa3fd1f2d759913a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:37:17 +0530 Subject: [PATCH 109/466] Clean --- web/apps/accounts/src/pages/_app.tsx | 13 ++----------- web/apps/accounts/src/types/context.ts | 6 +----- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index db75769166..845ac235f4 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -3,8 +3,6 @@ import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; import { disableDiskLogs } from "@/next/log"; import { logUnhandledErrorsAndRejections } from "@/next/log-web"; -import { PAGES } from "@ente/accounts/constants/pages"; -import { accountLogout } from "@ente/accounts/services/logout"; import { Overlay } from "@ente/shared/components/Container"; import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; @@ -15,11 +13,10 @@ import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { CssBaseline, useMediaQuery } from "@mui/material"; import { ThemeProvider } from "@mui/material/styles"; -import { AppContext } from "components/context"; import { t } from "i18next"; import type { AppProps } from "next/app"; -import { useRouter } from "next/router"; -import React, { useCallback, useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; +import { AppContext } from "../types/context"; import "styles/global.css"; @@ -32,7 +29,6 @@ const App: React.FC = ({ Component, pageProps }) => { const [dialogBoxV2View, setDialogBoxV2View] = useState(false); const isMobile = useMediaQuery("(max-width: 428px)"); - const router = useRouter(); useEffect(() => { disableDiskLogs(); @@ -51,12 +47,7 @@ const App: React.FC = ({ Component, pageProps }) => { const closeDialogBoxV2 = () => setDialogBoxV2View(false); - const logout = useCallback(() => { - void accountLogout().then(() => router.push(PAGES.ROOT)); - }, [router]); - const appContext = { - logout, showNavBar: setShowNavbar, isMobile, setDialogBoxAttributesV2, diff --git a/web/apps/accounts/src/types/context.ts b/web/apps/accounts/src/types/context.ts index 18716db085..9b17cd6bdf 100644 --- a/web/apps/accounts/src/types/context.ts +++ b/web/apps/accounts/src/types/context.ts @@ -4,10 +4,6 @@ import { createContext, useContext } from "react"; /** * The type of the context for pages in the accounts app. - * - * - The accounts app has no extra properties on top of the base context. - * - * - It also doesn't need the logout function. */ interface AppContextT { /** Show or hide the app's navigation bar. */ @@ -17,7 +13,7 @@ interface AppContextT { } /** - * The React {@link Context} available to all pages. + * The React {@link Context} available to all nodes in the React tree. */ export const AppContext = createContext(undefined); From cf3728eee80e1ce757e85e318299eeda9b6bce6d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:46:48 +0530 Subject: [PATCH 110/466] Migrate --- web/apps/accounts/src/pages/_app.tsx | 2 +- web/apps/auth/src/pages/_app.tsx | 11 ++++++++--- web/apps/photos/src/pages/_app.tsx | 11 ++++++++--- .../shared/storage/localStorage/index.ts | 18 ++++++++++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 845ac235f4..7029cacd86 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -33,7 +33,7 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { disableDiskLogs(); // The accounts app has no local state, but some older builds might've - // leftover some scraps. Clear it out. Thi code added 1 July 2024, can + // leftover some scraps. Clear it out. This code added 1 July 2024, can // be removed after a while (tag: Migration). clearData(); void setupI18n().finally(() => setIsI18nReady(true)); diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index 113d851dc2..1f1ba88863 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -17,7 +17,11 @@ import { AppNavbar } from "@ente/shared/components/Navbar/app"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; import { useLocalState } from "@ente/shared/hooks/useLocalState"; import HTTPService from "@ente/shared/network/HTTPService"; -import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setKVToken, +} from "@ente/shared/storage/localStorage"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import type { User } from "@ente/shared/user/types"; @@ -75,8 +79,9 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); - const userID = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(userID); + const user = getData(LS_KEYS.USER) as User | undefined | null; + setKVToken(user); + logStartupBanner(user?.id); HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); return () => logUnhandledErrorsAndRejections(false); diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index d000858522..4c90736132 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -23,7 +23,11 @@ import { AppNavbar } from "@ente/shared/components/Navbar/app"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; import { useLocalState } from "@ente/shared/hooks/useLocalState"; import HTTPService from "@ente/shared/network/HTTPService"; -import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setKVToken, +} from "@ente/shared/storage/localStorage"; import { getLocalMapEnabled, getToken, @@ -140,8 +144,9 @@ export default function App({ Component, pageProps }: AppProps) { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); - const userID = (getData(LS_KEYS.USER) as User)?.id; - logStartupBanner(userID); + const user = getData(LS_KEYS.USER) as User | undefined | null; + setKVToken(user); + logStartupBanner(user?.id); HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); return () => logUnhandledErrorsAndRejections(false); diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index 64f0423064..f2c33a3f2c 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -54,9 +54,23 @@ export const clearData = () => localStorage.clear(); // // Creating a new function here to act as a funnel point. export const setLSUser = async (user: object) => { - const token = user["token"]; + await setKVToken(user); + setData(LS_KEYS.USER, user); +}; + +/** + * Update the "token" KV with the token (if any) for the given {@link user}. + * + * This is an internal implementation details of {@link setLSUser} and doesn't + * need to exposed conceptually. For now though, we need to call this externally + * at an early point in the app startup to also copy over the token into KV DB + * for existing users. + * + * This was added 1 July 2024, can be removed after a while (tag: Migration). + */ +export const setKVToken = async (user: unknown) => { + const token = user ? user["token"] : undefined; token && typeof token == "string" ? await setKV("token", token) : await removeKV("token"); - setData(LS_KEYS.USER, user); }; From de7b80a35257c22feed695a8cc4058a150a8345b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:47:47 +0530 Subject: [PATCH 111/466] Fix --- web/apps/accounts/src/pages/passkeys/index.tsx | 2 +- web/apps/photos/src/components/Sidebar/index.tsx | 7 ++++++- web/packages/shared/storage/localStorage/index.ts | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index ab42d4ab57..6f201ff33a 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -25,7 +25,6 @@ import { styled, useMediaQuery, } from "@mui/material"; -import { useAppContext } from "components/context"; import { t } from "i18next"; import React, { useCallback, useEffect, useState } from "react"; import { @@ -35,6 +34,7 @@ import { renamePasskey, type Passkey, } from "services/passkey"; +import { useAppContext } from "../../types/context"; const Page: React.FC = () => { const { showNavBar, setDialogBoxAttributesV2 } = useAppContext(); diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 9db254a220..d9ee7fe6ca 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -10,7 +10,12 @@ import RecoveryKey from "@ente/shared/components/RecoveryKey"; import ThemeSwitcher from "@ente/shared/components/ThemeSwitcher"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; import { useLocalState } from "@ente/shared/hooks/useLocalState"; -import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { THEME_COLOR } from "@ente/shared/themes/constants"; import { downloadAsFile } from "@ente/shared/utils"; import ArchiveOutlined from "@mui/icons-material/ArchiveOutlined"; diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index f2c33a3f2c..f783cdf206 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -1,5 +1,5 @@ import log from "@/next/log"; -import { removeKV, setKV } from "packages/next/kv"; +import { removeKV, setKV } from "@/next/kv"; export enum LS_KEYS { USER = "user", From bf1f4b26cf1ab6963451690ff5c2d30acc56bb5d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:51:43 +0530 Subject: [PATCH 112/466] Keep separate --- web/apps/auth/src/pages/_app.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 4 ++-- .../shared/storage/localStorage/index.ts | 17 +++++++++++------ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index 1f1ba88863..b6bfa1a3d2 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -20,7 +20,7 @@ import HTTPService from "@ente/shared/network/HTTPService"; import { LS_KEYS, getData, - setKVToken, + migrateKVToken, } from "@ente/shared/storage/localStorage"; import { getTheme } from "@ente/shared/themes"; import { THEME_COLOR } from "@ente/shared/themes/constants"; @@ -80,7 +80,7 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); const user = getData(LS_KEYS.USER) as User | undefined | null; - setKVToken(user); + migrateKVToken(user); logStartupBanner(user?.id); HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 4c90736132..98af7f9d67 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -26,7 +26,7 @@ import HTTPService from "@ente/shared/network/HTTPService"; import { LS_KEYS, getData, - setKVToken, + migrateKVToken, } from "@ente/shared/storage/localStorage"; import { getLocalMapEnabled, @@ -145,7 +145,7 @@ export default function App({ Component, pageProps }: AppProps) { useEffect(() => { void setupI18n().finally(() => setIsI18nReady(true)); const user = getData(LS_KEYS.USER) as User | undefined | null; - setKVToken(user); + migrateKVToken(user); logStartupBanner(user?.id); HTTPService.setHeaders({ "X-Client-Package": clientPackageName }); logUnhandledErrorsAndRejections(true); diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index f783cdf206..33a60900df 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -1,5 +1,5 @@ -import log from "@/next/log"; import { removeKV, setKV } from "@/next/kv"; +import log from "@/next/log"; export enum LS_KEYS { USER = "user", @@ -54,7 +54,10 @@ export const clearData = () => localStorage.clear(); // // Creating a new function here to act as a funnel point. export const setLSUser = async (user: object) => { - await setKVToken(user); + const token = user["token"]; + token && typeof token == "string" + ? await setKV("token", token) + : await removeKV("token"); setData(LS_KEYS.USER, user); }; @@ -68,9 +71,11 @@ export const setLSUser = async (user: object) => { * * This was added 1 July 2024, can be removed after a while (tag: Migration). */ -export const setKVToken = async (user: unknown) => { - const token = user ? user["token"] : undefined; - token && typeof token == "string" - ? await setKV("token", token) +export const migrateKVToken = async (user: unknown) => { + user && + typeof user == "object" && + "token" in user && + typeof user.token == "string" + ? await setKV("token", user.token) : await removeKV("token"); }; From 612e81d74e9fdf33f13c0d0713631774809242da Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 13:53:29 +0530 Subject: [PATCH 113/466] tsc --- web/packages/accounts/pages/passkeys/finish.tsx | 7 ++++++- web/packages/accounts/pages/two-factor/verify.tsx | 7 ++++++- web/packages/shared/storage/localStorage/index.ts | 8 +++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/web/packages/accounts/pages/passkeys/finish.tsx b/web/packages/accounts/pages/passkeys/finish.tsx index 35d7b72a24..bebd5893c5 100644 --- a/web/packages/accounts/pages/passkeys/finish.tsx +++ b/web/packages/accounts/pages/passkeys/finish.tsx @@ -4,7 +4,12 @@ import { VerticallyCentered } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { fromB64URLSafeNoPaddingString } from "@ente/shared/crypto/internal/libsodium"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; -import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import { useRouter } from "next/router"; import React, { useEffect } from "react"; import { PAGES } from "../../constants/pages"; diff --git a/web/packages/accounts/pages/two-factor/verify.tsx b/web/packages/accounts/pages/two-factor/verify.tsx index e32f5a66d5..b476926e5b 100644 --- a/web/packages/accounts/pages/two-factor/verify.tsx +++ b/web/packages/accounts/pages/two-factor/verify.tsx @@ -11,7 +11,12 @@ import FormTitle from "@ente/shared/components/Form/FormPaper/Title"; import LinkButton from "@ente/shared/components/LinkButton"; import { ApiError } from "@ente/shared/error"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; -import { LS_KEYS, getData, setData, setLSUser } from "@ente/shared/storage/localStorage"; +import { + LS_KEYS, + getData, + setData, + setLSUser, +} from "@ente/shared/storage/localStorage"; import type { User } from "@ente/shared/user/types"; import { HttpStatusCode } from "axios"; import { t } from "i18next"; diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index 33a60900df..d70dcc0edd 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -54,9 +54,11 @@ export const clearData = () => localStorage.clear(); // // Creating a new function here to act as a funnel point. export const setLSUser = async (user: object) => { - const token = user["token"]; - token && typeof token == "string" - ? await setKV("token", token) + user && + typeof user == "object" && + "token" in user && + typeof user.token == "string" + ? await setKV("token", user.token) : await removeKV("token"); setData(LS_KEYS.USER, user); }; From d40d119b82fe9c42c802ea8cf2de2ca485815917 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 1 Jul 2024 08:48:44 +0000 Subject: [PATCH 114/466] New Crowdin translations by GitHub Action --- .../next/locales/ca-ES/translation.json | 649 ++++++++++++++++++ .../next/locales/fr-FR/translation.json | 6 +- .../next/locales/pt-BR/translation.json | 4 +- .../next/locales/zh-CN/translation.json | 4 +- 4 files changed, 656 insertions(+), 7 deletions(-) create mode 100644 web/packages/next/locales/ca-ES/translation.json diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json new file mode 100644 index 0000000000..e488d33f9b --- /dev/null +++ b/web/packages/next/locales/ca-ES/translation.json @@ -0,0 +1,649 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "password": "", + "link_password_description": "", + "unlock": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "title_photos": "", + "title_auth": "", + "title_accounts": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "password_changed_elsewhere": "", + "password_changed_elsewhere_message": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "delete_account": "", + "delete_account_manually_message": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "update_subscription_title": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE_COLLECTION": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "link_password_lock": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "SHARED_USING": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "NO_DUPLICATES_FOUND": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "free_plan_description": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "storage_unit": { + "b": "", + "kb": "", + "mb": "", + "gb": "", + "tb": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "CONTINUOUS_EXPORT": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "delete_account_reason_label": "", + "delete_account_reason_placeholder": "", + "delete_reason": { + "missing_feature": "", + "behaviour": "", + "found_another_service": "", + "not_listed": "" + }, + "delete_account_feedback_label": "", + "delete_account_feedback_placeholder": "", + "delete_account_confirm_checkbox_label": "", + "delete_account_confirm": "", + "delete_account_confirm_message": "", + "feedback_required": "", + "feedback_required_found_another_service": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "editor": { + "crop": "" + }, + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_DESC": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_DESC": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "", + "passkeys": "", + "passkey_fetch_failed": "", + "manage_passkey": "", + "delete_passkey": "", + "delete_passkey_confirmation": "", + "rename_passkey": "", + "add_passkey": "", + "enter_passkey_name": "", + "passkeys_description": "", + "CREATED_AT": "", + "passkey_add_failed": "", + "passkey_login_failed": "", + "passkey_login_invalid_url": "", + "passkey_login_already_claimed_session": "", + "passkey_login_generic_error": "", + "passkey_login_credential_hint": "", + "passkeys_not_supported": "", + "try_again": "", + "check_status": "", + "passkey_login_instructions": "", + "passkey_login": "", + "passkey": "", + "passkey_verify_description": "", + "waiting_for_verification": "", + "verification_still_pending": "", + "passkey_verified": "", + "redirecting_back_to_app": "", + "redirect_close_instructions": "", + "redirect_again": "", + "autogenerated_first_album_name": "", + "autogenerated_default_album_name": "", + "developer_settings": "", + "server_endpoint": "", + "more_information": "", + "save": "" +} diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index b765972716..521197bb68 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -107,8 +107,8 @@ "SESSION_EXPIRED": "Session expiré", "PASSWORD_GENERATION_FAILED": "Votre navigateur ne permet pas de générer une clé forte correspondant aux standards de chiffrement de Ente, veuillez réessayer en utilisant l'appli mobile ou un autre navigateur", "CHANGE_PASSWORD": "Modifier le mot de passe", - "password_changed_elsewhere": "", - "password_changed_elsewhere_message": "", + "password_changed_elsewhere": "Mot de passe modifié ailleurs", + "password_changed_elsewhere_message": "Veuillez vous reconnecter sur cet appareil pour utiliser votre nouveau mot de passe pour vous authentifier.", "GO_BACK": "Retour", "RECOVERY_KEY": "Clé de récupération", "SAVE_LATER": "Plus tard", @@ -322,7 +322,7 @@ "DELETE_PERMANENTLY": "Supprimer définitivement", "RESTORE": "Restaurer", "RESTORE_TO_COLLECTION": "Restaurer vers l'album", - "EMPTY_TRASH": "Corbeille vide", + "EMPTY_TRASH": "Vider la corbeille", "EMPTY_TRASH_TITLE": "Vider la corbeille ?", "EMPTY_TRASH_MESSAGE": "Ces fichiers seront définitivement supprimés de votre compte Ente.", "LEAVE_SHARED_ALBUM": "Oui, quitter", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index a4a2ef83e9..d1a52bfba1 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -107,8 +107,8 @@ "SESSION_EXPIRED": "Sessão expirada", "PASSWORD_GENERATION_FAILED": "Seu navegador foi incapaz de gerar uma chave forte que atende aos padrões de criptografia, por favor, tente usar o aplicativo móvel ou outro navegador", "CHANGE_PASSWORD": "Alterar senha", - "password_changed_elsewhere": "", - "password_changed_elsewhere_message": "", + "password_changed_elsewhere": "Senha alterada em outro lugar", + "password_changed_elsewhere_message": "Por favor, inicie sessão novamente neste dispositivo para usar sua nova senha para autenticar.", "GO_BACK": "Voltar", "RECOVERY_KEY": "Chave de recuperação", "SAVE_LATER": "Fazer isso mais tarde", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 9246bd1ad3..ed254e1cb2 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -107,8 +107,8 @@ "SESSION_EXPIRED": "会话已过期", "PASSWORD_GENERATION_FAILED": "您的浏览器无法生成一个符合Ente加密标准的强密钥,请尝试使用移动应用程序或其他浏览器", "CHANGE_PASSWORD": "修改密码", - "password_changed_elsewhere": "", - "password_changed_elsewhere_message": "", + "password_changed_elsewhere": "密码已在别处更改", + "password_changed_elsewhere_message": "请在此设备上再次登录以使用您的新密码进行身份验证。", "GO_BACK": "返回", "RECOVERY_KEY": "恢复密钥", "SAVE_LATER": "稍后再做", From c318a152367ddcdf6650fb73a4d1ea4f19bfb710 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 14:21:03 +0530 Subject: [PATCH 115/466] Update l10n keys --- web/packages/accounts/components/PasswordStrength.tsx | 4 +--- web/packages/next/locales/ar-SA/translation.json | 6 +++--- web/packages/next/locales/bg-BG/translation.json | 6 +++--- web/packages/next/locales/ca-ES/translation.json | 6 +++--- web/packages/next/locales/de-DE/translation.json | 6 +++--- web/packages/next/locales/en-US/translation.json | 6 +++--- web/packages/next/locales/es-ES/translation.json | 6 +++--- web/packages/next/locales/fa-IR/translation.json | 6 +++--- web/packages/next/locales/fi-FI/translation.json | 6 +++--- web/packages/next/locales/fr-FR/translation.json | 6 +++--- web/packages/next/locales/gu-IN/translation.json | 6 +++--- web/packages/next/locales/hi-IN/translation.json | 6 +++--- web/packages/next/locales/id-ID/translation.json | 6 +++--- web/packages/next/locales/is-IS/translation.json | 6 +++--- web/packages/next/locales/it-IT/translation.json | 6 +++--- web/packages/next/locales/ko-KR/translation.json | 6 +++--- web/packages/next/locales/nl-NL/translation.json | 6 +++--- web/packages/next/locales/pt-BR/translation.json | 6 +++--- web/packages/next/locales/pt-PT/translation.json | 6 +++--- web/packages/next/locales/ru-RU/translation.json | 6 +++--- web/packages/next/locales/sv-SE/translation.json | 6 +++--- web/packages/next/locales/te-IN/translation.json | 6 +++--- web/packages/next/locales/th-TH/translation.json | 6 +++--- web/packages/next/locales/ti-ER/translation.json | 6 +++--- web/packages/next/locales/tr-TR/translation.json | 6 +++--- web/packages/next/locales/zh-CN/translation.json | 6 +++--- 26 files changed, 76 insertions(+), 78 deletions(-) diff --git a/web/packages/accounts/components/PasswordStrength.tsx b/web/packages/accounts/components/PasswordStrength.tsx index de378a23bc..1a80a3baf0 100644 --- a/web/packages/accounts/components/PasswordStrength.tsx +++ b/web/packages/accounts/components/PasswordStrength.tsx @@ -32,9 +32,7 @@ export const PasswordStrengthHint: React.FC = ({ flex={1} > {password - ? t("PASSPHRASE_STRENGTH", { - context: passwordStrength.toUpperCase(), - }) + ? t("passphrase_strength", { context: passwordStrength }) : ""} diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index a8f1bb8594..a4464aaebe 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 49cf433049..c22101f6c5 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Ich verstehe und möchte Ente erlauben, Gesichtsgeometrie zu verarbeiten", "LABS": "Experimente", "YOURS": "von dir", - "PASSPHRASE_STRENGTH_WEAK": "Passwortstärke: Schwach", - "PASSPHRASE_STRENGTH_MODERATE": "Passwortstärke: Moderat", - "PASSPHRASE_STRENGTH_STRONG": "Passwortstärke: Stark", + "passphrase_strength_weak": "Passwortstärke: Schwach", + "passphrase_strength_moderate": "Passwortstärke: Moderat", + "passphrase_strength_strong": "Passwortstärke: Stark", "PREFERENCES": "Einstellungen", "LANGUAGE": "Sprache", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Ungültiges Exportverzeichnis", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 323c32b20f..42460ea026 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow Ente to process face geometry", "LABS": "Labs", "YOURS": "yours", - "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", - "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", - "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "passphrase_strength_weak": "Password strength: Weak", + "passphrase_strength_moderate": "Password strength: Moderate", + "passphrase_strength_strong": "Password strength: Strong", "PREFERENCES": "Preferences", "LANGUAGE": "Language", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index ed96e477ec..58f7015011 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Comprendo y deseo permitir que ente procese la geometría de la cara", "LABS": "Labs", "YOURS": "tuyo", - "PASSPHRASE_STRENGTH_WEAK": "Fortaleza de la contraseña: débil", - "PASSPHRASE_STRENGTH_MODERATE": "Fortaleza de contraseña: Moderar", - "PASSPHRASE_STRENGTH_STRONG": "Fortaleza de contraseña: fuerte", + "passphrase_strength_weak": "Fortaleza de la contraseña: débil", + "passphrase_strength_moderate": "Fortaleza de contraseña: Moderar", + "passphrase_strength_strong": "Fortaleza de contraseña: fuerte", "PREFERENCES": "Preferencias", "LANGUAGE": "Idioma", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Archivo de exportación inválido", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 80e1b3f184..35a972bdf3 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 521197bb68..2c42b1aefd 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Je comprends, et je souhaite permettre à Ente de traiter la géométrie faciale", "LABS": "Labs", "YOURS": "Le vôtre", - "PASSPHRASE_STRENGTH_WEAK": "Sécurité du mot de passe : faible", - "PASSPHRASE_STRENGTH_MODERATE": "Sécurité du mot de passe : moyenne", - "PASSPHRASE_STRENGTH_STRONG": "Sécurité du mot de passe : forte", + "passphrase_strength_weak": "Sécurité du mot de passe : faible", + "passphrase_strength_moderate": "Sécurité du mot de passe : moyenne", + "passphrase_strength_strong": "Sécurité du mot de passe : forte", "PREFERENCES": "Préférences", "LANGUAGE": "Langue", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Dossier d'export invalide", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index e99679db91..95a29364eb 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "Keamanan sandi: Lemah", - "PASSPHRASE_STRENGTH_MODERATE": "Keamanan sandi: Sedang", - "PASSPHRASE_STRENGTH_STRONG": "Keamanan sandi: Kuat", + "passphrase_strength_weak": "Keamanan sandi: Lemah", + "passphrase_strength_moderate": "Keamanan sandi: Sedang", + "passphrase_strength_strong": "Keamanan sandi: Kuat", "PREFERENCES": "Preferensi", "LANGUAGE": "Bahasa", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 718b4795f5..8479bd2ab2 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index 868e8aa9f9..c8243dcdf9 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "Sicurezza password: Debole", - "PASSPHRASE_STRENGTH_MODERATE": "Sicurezza password: Moderata", - "PASSPHRASE_STRENGTH_STRONG": "Sicurezza password: Forte", + "passphrase_strength_weak": "Sicurezza password: Debole", + "passphrase_strength_moderate": "Sicurezza password: Moderata", + "passphrase_strength_strong": "Sicurezza password: Forte", "PREFERENCES": "", "LANGUAGE": "Lingua", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index af6489e815..2410c93c4a 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index f784b44497..78cba11274 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Ik begrijp het, en wil Ente toestaan om gezichten te analyseren", "LABS": "Lab's", "YOURS": "jouw", - "PASSPHRASE_STRENGTH_WEAK": "Wachtwoord sterkte: Zwak", - "PASSPHRASE_STRENGTH_MODERATE": "Wachtwoord sterkte: Matig", - "PASSPHRASE_STRENGTH_STRONG": "Wachtwoord sterkte: Sterk", + "passphrase_strength_weak": "Wachtwoord sterkte: Zwak", + "passphrase_strength_moderate": "Wachtwoord sterkte: Matig", + "passphrase_strength_strong": "Wachtwoord sterkte: Sterk", "PREFERENCES": "Instellingen", "LANGUAGE": "Taal", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Ongeldige export map", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index d1a52bfba1..86306c12e6 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Eu entendo, e desejo permitir que o ente processe a geometria do rosto", "LABS": "Laboratórios", "YOURS": "seu", - "PASSPHRASE_STRENGTH_WEAK": "Força da senha: fraca", - "PASSPHRASE_STRENGTH_MODERATE": "Força da senha: moderada", - "PASSPHRASE_STRENGTH_STRONG": "Força da senha: forte", + "passphrase_strength_weak": "Força da senha: fraca", + "passphrase_strength_moderate": "Força da senha: moderada", + "passphrase_strength_strong": "Força da senha: forte", "PREFERENCES": "Preferências", "LANGUAGE": "Idioma", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Diretório de exportação inválido", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index 3b43aec39d..e826542b30 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 2970cc0521..9532746ebd 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "Я понимаю и хочу позволить Ente обрабатывать геометрию грани", "LABS": "Лаборатории", "YOURS": "твой", - "PASSPHRASE_STRENGTH_WEAK": "Надежность пароля: слабая", - "PASSPHRASE_STRENGTH_MODERATE": "Надежность пароля: Умеренная", - "PASSPHRASE_STRENGTH_STRONG": "Надежность пароля: Надежный", + "passphrase_strength_weak": "Надежность пароля: слабая", + "passphrase_strength_moderate": "Надежность пароля: Умеренная", + "passphrase_strength_strong": "Надежность пароля: Надежный", "PREFERENCES": "Предпочтения", "LANGUAGE": "Язык", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Недопустимый каталог экспорта", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 0188696683..491929f297 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "Språk", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index e488d33f9b..45d7075d16 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "", "LABS": "", "YOURS": "", - "PASSPHRASE_STRENGTH_WEAK": "", - "PASSPHRASE_STRENGTH_MODERATE": "", - "PASSPHRASE_STRENGTH_STRONG": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", "PREFERENCES": "", "LANGUAGE": "", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index ed254e1cb2..02af87a639 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -486,9 +486,9 @@ "FACE_SEARCH_CONFIRMATION": "我理解,并希望允许Ente处理面部几何形状", "LABS": "实验室", "YOURS": "你的", - "PASSPHRASE_STRENGTH_WEAK": "密码强度:较弱", - "PASSPHRASE_STRENGTH_MODERATE": "密码强度:中度", - "PASSPHRASE_STRENGTH_STRONG": "密码强度:强", + "passphrase_strength_weak": "密码强度:较弱", + "passphrase_strength_moderate": "密码强度:中度", + "passphrase_strength_strong": "密码强度:强", "PREFERENCES": "首选项", "LANGUAGE": "语言", "EXPORT_DIRECTORY_DOES_NOT_EXIST": "无效的导出目录", From 49f96dbea180f716a6bca392155f537851f45051 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:43:53 +0530 Subject: [PATCH 116/466] [mob] Avoid FileUploader cache clear in case of autoLogout --- mobile/lib/core/configuration.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 92bb31e763..1398d9971a 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -216,8 +216,9 @@ class Configuration { await UploadLocksDB.instance.clearTable(); await IgnoredFilesService.instance.reset(); await TrashDB.instance.clearTable(); - FileUploader.instance.clearCachedUploadURLs(); if (!autoLogout) { + // Following services won't be initialized if it's the case of autoLogout + FileUploader.instance.clearCachedUploadURLs(); CollectionsService.instance.clearCache(); FavoritesService.instance.clearCache(); MemoriesService.instance.clearCache(); From eaecf91aa186e5a0f9eb26bc914b8328104a2c43 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 14:52:11 +0530 Subject: [PATCH 117/466] Rearrange --- web/packages/new/photos/services/embedding.ts | 140 +++++++++--------- 1 file changed, 71 insertions(+), 69 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index a8d27f7177..052e04cbcf 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -167,6 +167,76 @@ const embeddingSyncTime = (model: EmbeddingModel) => const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => localStorage.setItem("embeddingSyncTime:" + model, `${t}`); +/** + * The maximum number of items to fetch in a single GET /embeddings/diff + * + * [Note: Limit of returned items in /diff requests] + * + * The various GET /diff API methods, which tell the client what all has changed + * since a timestamp (provided by the client) take a limit parameter. + * + * These diff API calls return all items whose updated at is greater + * (non-inclusive) than the timestamp we provide. So there is no mechanism for + * pagination of items which have the same exact updated at. Conceptually, it + * may happen that there are more items than the limit we've provided. + * + * The behaviour of this limit is different for file diff and embeddings diff. + * + * - For file diff, the limit is advisory, and remote may return less, equal + * or more items than the provided limit. The scenario where it returns more + * is when more files than the limit have the same updated at. Theoretically + * it would make the diff response unbounded, however in practice file + * modifications themselves are all batched. Even if the user selects all + * the files in their library and updates them all in one go in the UI, + * their client app must use batched API calls to make those updates, and + * each of those batches would get distinct updated at. + * + * - For embeddings diff, there are no bulk updates and this limit is enforced + * as a maximum. While theoretically it is possible for an arbitrary number + * of files to have the same updated at, in practice it is not possible with + * the current set of APIs where clients PUT individual embeddings (the + * updated at is a server timestamp). And even if somehow a large number of + * files get the same updated at and thus get truncated in the response, it + * won't lead to any data loss, the client which requested that particular + * truncated diff will just regenerate them. + */ +const diffLimit = 500; + +/** + * GET embeddings for the given model that have been updated {@link sinceTime}. + * + * This fetches the next {@link diffLimit} embeddings whose {@link updatedAt} is + * greater than the given {@link sinceTime} (non-inclusive). + * + * @param model The {@link EmbeddingModel} whose diff we wish for. + * + * @param sinceTime The updatedAt of the last embedding we've synced (epoch ms). + * Pass 0 to fetch everything from the beginning. + * + * @returns an array of {@link RemoteEmbedding}. The returned array is limited + * to a maximum count of {@link diffLimit}. + * + * > See [Note: Limit of returned items in /diff requests]. + */ +const getEmbeddingsDiff = async ( + model: EmbeddingModel, + sinceTime: number, +): Promise => { + const params = new URLSearchParams({ + model, + sinceTime: `${sinceTime}`, + limit: `${diffLimit}`, + }); + const url = await apiURL("/embeddings/diff"); + const res = await fetch(`${url}?${params.toString()}`, { + headers: await authenticatedRequestHeaders(), + }); + if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + return z.array(RemoteEmbedding).parse(await res.json()); +}; + +// MARK: - Face + /** * Fetch new or updated face embeddings from remote and save them locally. * @@ -190,7 +260,7 @@ export const pullFaceEmbeddings = () => * This is a variant of {@link saveFaceIndex} that performs version checking as * described in [Note: Handling versioning of embeddings]. */ -export const saveFaceIndexIfNewer = async (index: FaceIndex) => { +const saveFaceIndexIfNewer = async (index: FaceIndex) => { const version = index.faceEmbedding.version; if (version <= faceIndexingVersion) { log.info( @@ -269,71 +339,3 @@ const FaceIndex = z }) // Retain fields we might not (currently) understand. .passthrough(); - -/** - * The maximum number of items to fetch in a single GET /embeddings/diff - * - * [Note: Limit of returned items in /diff requests] - * - * The various GET /diff API methods, which tell the client what all has changed - * since a timestamp (provided by the client) take a limit parameter. - * - * These diff API calls return all items whose updated at is greater - * (non-inclusive) than the timestamp we provide. So there is no mechanism for - * pagination of items which have the same exact updated at. Conceptually, it - * may happen that there are more items than the limit we've provided. - * - * The behaviour of this limit is different for file diff and embeddings diff. - * - * - For file diff, the limit is advisory, and remote may return less, equal - * or more items than the provided limit. The scenario where it returns more - * is when more files than the limit have the same updated at. Theoretically - * it would make the diff response unbounded, however in practice file - * modifications themselves are all batched. Even if the user selects all - * the files in their library and updates them all in one go in the UI, - * their client app must use batched API calls to make those updates, and - * each of those batches would get distinct updated at. - * - * - For embeddings diff, there are no bulk updates and this limit is enforced - * as a maximum. While theoretically it is possible for an arbitrary number - * of files to have the same updated at, in practice it is not possible with - * the current set of APIs where clients PUT individual embeddings (the - * updated at is a server timestamp). And even if somehow a large number of - * files get the same updated at and thus get truncated in the response, it - * won't lead to any data loss, the client which requested that particular - * truncated diff will just regenerate them. - */ -const diffLimit = 500; - -/** - * GET embeddings for the given model that have been updated {@link sinceTime}. - * - * This fetches the next {@link diffLimit} embeddings whose {@link updatedAt} is - * greater than the given {@link sinceTime} (non-inclusive). - * - * @param model The {@link EmbeddingModel} whose diff we wish for. - * - * @param sinceTime The updatedAt of the last embedding we've synced (epoch ms). - * Pass 0 to fetch everything from the beginning. - * - * @returns an array of {@link RemoteEmbedding}. The returned array is limited - * to a maximum count of {@link diffLimit}. - * - * > See [Note: Limit of returned items in /diff requests]. - */ -const getEmbeddingsDiff = async ( - model: EmbeddingModel, - sinceTime: number, -): Promise => { - const params = new URLSearchParams({ - model, - sinceTime: `${sinceTime}`, - limit: `${diffLimit}`, - }); - const url = await apiURL("/embeddings/diff"); - const res = await fetch(`${url}?${params.toString()}`, { - headers: await authenticatedRequestHeaders(), - }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); - return z.array(RemoteEmbedding).parse(await res.json()); -}; From bf2873821d2c6dd2ef98213222fd58700662fa4d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 14:54:42 +0530 Subject: [PATCH 118/466] Allow to be set/get from webworkers --- web/packages/new/photos/services/embedding.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 052e04cbcf..be574d4ac3 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -1,5 +1,6 @@ import { getLocalTrashedFiles } from "@/new/photos/services/files"; import { authenticatedRequestHeaders } from "@/next/http"; +import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; @@ -119,7 +120,7 @@ const pullEmbeddings = async ( // scenario where this happens. const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); - let sinceTime = embeddingSyncTime(model); + let sinceTime = await embeddingSyncTime(model); // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. // https://github.com/eslint/eslint/pull/18286 @@ -146,7 +147,7 @@ const pullEmbeddings = async ( log.warn(`Ignoring unparseable ${model} embedding`, e); } } - saveEmbeddingSyncTime(sinceTime, model); + await saveEmbeddingSyncTime(sinceTime, model); log.info(`Fetched ${count} ${model} embeddings`); } }; @@ -160,12 +161,12 @@ const pullEmbeddings = async ( * This value is persisted to local storage. To update it, use * {@link saveEmbeddingSyncTime}. */ -const embeddingSyncTime = (model: EmbeddingModel) => - parseInt(localStorage.getItem("embeddingSyncTime:" + model) ?? "0"); +const embeddingSyncTime = async (model: EmbeddingModel) => + parseInt((await getKV("embeddingSyncTime:" + model)) ?? "0"); /** Sibling of {@link embeddingSyncTime}. */ -const saveEmbeddingSyncTime = (t: number, model: EmbeddingModel) => - localStorage.setItem("embeddingSyncTime:" + model, `${t}`); +const saveEmbeddingSyncTime = async (t: number, model: EmbeddingModel) => + setKV("embeddingSyncTime:" + model, `${t}`); /** * The maximum number of items to fetch in a single GET /embeddings/diff From c929d3dc74c6724f128fcd0f5377065534fbae90 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 15:10:57 +0530 Subject: [PATCH 119/466] Simplify --- web/apps/photos/src/services/clip-service.ts | 5 ----- web/apps/photos/src/services/searchService.ts | 5 ++--- web/apps/photos/src/services/sync.ts | 6 ++---- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/web/apps/photos/src/services/clip-service.ts b/web/apps/photos/src/services/clip-service.ts index f0de7c3127..be59a2aeda 100644 --- a/web/apps/photos/src/services/clip-service.ts +++ b/web/apps/photos/src/services/clip-service.ts @@ -7,7 +7,6 @@ import ComlinkCryptoWorker from "@ente/shared/crypto"; import { CustomError } from "@ente/shared/error"; import { Events, eventBus } from "@ente/shared/events"; import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; -import isElectron from "is-electron"; import PQueue from "p-queue"; import { Embedding } from "types/embedding"; import { getPersonalFiles } from "utils/file"; @@ -82,10 +81,6 @@ class CLIPService { }); } - isPlatformSupported = () => { - return isElectron(); - }; - async logout() { if (this.embeddingExtractionInProgress) { this.embeddingExtractionInProgress.abort(); diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 5247ef61e4..4ae4991a96 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; +import { isDesktop } from "@/next/app"; import log from "@/next/log"; import * as chrono from "chrono-node"; import { t } from "i18next"; @@ -295,9 +296,7 @@ async function getLocationSuggestions(searchPhrase: string) { async function getClipSuggestion( searchPhrase: string, ): Promise { - if (!clipService.isPlatformSupported()) { - return null; - } + if (!isDesktop) return undefined; const clipResults = await searchClip(searchPhrase); if (!clipResults) return undefined; diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index 05481d9597..9a5e3b198e 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,5 +1,6 @@ import { faceWorker } from "@/new/photos/services/face"; import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; +import { isDesktop } from "@/next/app"; import { clipService } from "services/clip-service"; import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; @@ -19,12 +20,9 @@ export const sync = async () => { await syncEntities(); await syncMapEnabled(); fetchAndSaveFeatureFlagsIfNeeded(); - const electron = globalThis.electron; - if (electron) { + if (isDesktop) { await syncCLIPEmbeddings(); if (isFaceIndexingEnabled()) await (await faceWorker()).sync(); - } - if (clipService.isPlatformSupported()) { void clipService.scheduleImageEmbeddingExtraction(); } }; From 5988052521daa28537212a01057744eb0f57ae65 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 15:29:32 +0530 Subject: [PATCH 120/466] Fix --- web/packages/new/photos/services/face/worker.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/packages/new/photos/services/face/worker.ts b/web/packages/new/photos/services/face/worker.ts index 0902bed53b..7827bc5a59 100644 --- a/web/packages/new/photos/services/face/worker.ts +++ b/web/packages/new/photos/services/face/worker.ts @@ -1,3 +1,4 @@ +import { expose } from "comlink"; import { pullFaceEmbeddings } from "../embedding"; /** @@ -20,3 +21,5 @@ export class FaceWorker { this.isSyncing = false; } } + +expose(FaceWorker); From ff0f9407986c545ad5f7a8d3f28a00eff3571693 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 15:32:15 +0530 Subject: [PATCH 121/466] Shorten --- web/packages/new/photos/services/face/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/services/face/index.ts b/web/packages/new/photos/services/face/index.ts index 50560db93c..743c1dbd61 100644 --- a/web/packages/new/photos/services/face/index.ts +++ b/web/packages/new/photos/services/face/index.ts @@ -9,11 +9,8 @@ import { FaceWorker } from "./worker"; let _comlinkWorker: ComlinkWorker | undefined; /** Lazily created, cached, instance of {@link FaceWorker}. */ -export const faceWorker = async () => { - let comlinkWorker = _comlinkWorker; - if (!comlinkWorker) _comlinkWorker = comlinkWorker = createComlinkWorker(); - return await comlinkWorker.remote; -}; +export const faceWorker = async () => + (_comlinkWorker ??= createComlinkWorker()).remote; const createComlinkWorker = () => new ComlinkWorker( From b430aeb7c4557fdb33d29f3c32a2822f0f1b53af Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 15:55:08 +0530 Subject: [PATCH 122/466] Shorten --- web/packages/media/heic-convert.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/web/packages/media/heic-convert.ts b/web/packages/media/heic-convert.ts index b323f014a7..434e7ba553 100644 --- a/web/packages/media/heic-convert.ts +++ b/web/packages/media/heic-convert.ts @@ -23,11 +23,7 @@ export const heicToJPEG = async (heicBlob: Blob) => let _comlinkWorker: ComlinkWorker | undefined; /** Lazily created, cached, instance of our web worker. */ -const worker = async () => { - let comlinkWorker = _comlinkWorker; - if (!comlinkWorker) _comlinkWorker = comlinkWorker = createComlinkWorker(); - return await comlinkWorker.remote; -}; +const worker = async () => (_comlinkWorker ??= createComlinkWorker()).remote; const createComlinkWorker = () => new ComlinkWorker( From 9734797bac6cf0dbcbc3ec3733268a2380c57e6a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 16:19:12 +0530 Subject: [PATCH 123/466] Comment out for now --- web/apps/photos/src/services/sync.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index 9a5e3b198e..07468e9f47 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -5,7 +5,7 @@ import { clipService } from "services/clip-service"; import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; import { syncMapEnabled } from "services/userService"; -import { isFaceIndexingEnabled } from "./face/indexer"; +// import { isFaceIndexingEnabled } from "./face/indexer"; /** * Perform a soft "refresh" by making various API calls to fetch state from @@ -22,7 +22,7 @@ export const sync = async () => { fetchAndSaveFeatureFlagsIfNeeded(); if (isDesktop) { await syncCLIPEmbeddings(); - if (isFaceIndexingEnabled()) await (await faceWorker()).sync(); + // if (isFaceIndexingEnabled()) await (await faceWorker()).sync(); void clipService.scheduleImageEmbeddingExtraction(); } }; From df85e70a3721576ce08d3317f3b6082251797e4d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 16:23:28 +0530 Subject: [PATCH 124/466] lf --- web/apps/photos/src/services/sync.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index 07468e9f47..dc1699892e 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,4 +1,3 @@ -import { faceWorker } from "@/new/photos/services/face"; import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; import { isDesktop } from "@/next/app"; import { clipService } from "services/clip-service"; From c40a051f5f46d7f08f67e2bb81a4fe9c8bbb6279 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 1 Jul 2024 16:43:54 +0530 Subject: [PATCH 125/466] [mob][photos] Fix german translation --- mobile/lib/l10n/intl_de.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/l10n/intl_de.arb b/mobile/lib/l10n/intl_de.arb index 689ff3adc7..0d2c701c0e 100644 --- a/mobile/lib/l10n/intl_de.arb +++ b/mobile/lib/l10n/intl_de.arb @@ -1047,7 +1047,7 @@ "@storageUsageInfo": { "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" }, - "availableStorageSpace": "{freeAmount} {storageUnit} kostenlos", + "availableStorageSpace": "{freeAmount} {storageUnit} frei", "appVersion": "Version: {versionValue}", "verifyIDLabel": "Überprüfen", "fileInfoAddDescHint": "Beschreibung hinzufügen …", From 6544ed3d3de1bc7399e659f9695967fcc83615be Mon Sep 17 00:00:00 2001 From: Victor Muthiani <121645908+Vantesh@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:16:57 +0300 Subject: [PATCH 126/466] [auth] Icons for Yahoo, OKX, 1XBET, Bitget, & Crypto.com (#2291) ## Description Added Yahoo,okx,1xbet,bitget & crypto.com icons uploaded respective optimized svgs and updated the json file --- .../custom-icons/_data/custom-icons.json | 17 ++- auth/assets/custom-icons/icons/1xBet.svg | 1 + auth/assets/custom-icons/icons/bitget.svg | 18 +++ auth/assets/custom-icons/icons/crypto.com.svg | 1 + auth/assets/custom-icons/icons/okx.svg | 110 ++++++++++++++++++ auth/assets/custom-icons/icons/yahoo.svg | 1 + 6 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 auth/assets/custom-icons/icons/1xBet.svg create mode 100644 auth/assets/custom-icons/icons/bitget.svg create mode 100644 auth/assets/custom-icons/icons/crypto.com.svg create mode 100644 auth/assets/custom-icons/icons/okx.svg create mode 100644 auth/assets/custom-icons/icons/yahoo.svg diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index 82b5334970..0377338c5e 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -1,5 +1,9 @@ { "icons": [ + { "title": "1xBet", + "altNames": ["1x", "1x bet", "1x-bet" + ] + }, { "title": "3Commas" }, @@ -20,6 +24,9 @@ { "title": "Bitfinex" }, + { + "title": "bitget" + }, { "title": "BitMEX" }, @@ -92,6 +99,10 @@ { "title": "Crowdpear" }, + { + "title": "crypto.com", + "altNames": ["crypto"] + }, { "title": "DCS", "altNames": [ @@ -317,6 +328,8 @@ { "title": "Odido" }, + { "title": "okx", + "hex": "858585" }, { "title": "Parsec" }, @@ -534,6 +547,8 @@ ], "slug": "Yandex" }, + { "title": "yahoo" }, + { { "title": "YNAB", "altNames": [ @@ -543,4 +558,4 @@ "hex": "3B5EDA" } ] -} \ No newline at end of file +} diff --git a/auth/assets/custom-icons/icons/1xBet.svg b/auth/assets/custom-icons/icons/1xBet.svg new file mode 100644 index 0000000000..1ce135815c --- /dev/null +++ b/auth/assets/custom-icons/icons/1xBet.svg @@ -0,0 +1 @@ +logoo \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/bitget.svg b/auth/assets/custom-icons/icons/bitget.svg new file mode 100644 index 0000000000..19b60c978a --- /dev/null +++ b/auth/assets/custom-icons/icons/bitget.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/auth/assets/custom-icons/icons/crypto.com.svg b/auth/assets/custom-icons/icons/crypto.com.svg new file mode 100644 index 0000000000..1a0e2d9720 --- /dev/null +++ b/auth/assets/custom-icons/icons/crypto.com.svg @@ -0,0 +1 @@ + diff --git a/auth/assets/custom-icons/icons/okx.svg b/auth/assets/custom-icons/icons/okx.svg new file mode 100644 index 0000000000..3e0d53804d --- /dev/null +++ b/auth/assets/custom-icons/icons/okx.svg @@ -0,0 +1,110 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/auth/assets/custom-icons/icons/yahoo.svg b/auth/assets/custom-icons/icons/yahoo.svg new file mode 100644 index 0000000000..182be51925 --- /dev/null +++ b/auth/assets/custom-icons/icons/yahoo.svg @@ -0,0 +1 @@ + From 157f3696e43efd6a6134aab55db5fed9e5b27423 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 19:58:28 +0530 Subject: [PATCH 127/466] Move --- .../src/components/PhotoViewer/index.tsx | 2 +- .../photos/src/services/download/index.ts | 2 +- web/apps/photos/src/services/fix-exif.ts | 2 +- .../src/services/upload/uploadService.ts | 2 +- web/apps/photos/src/utils/file/index.ts | 111 +---------------- .../new/photos/utils}/detect-type.ts | 2 +- web/packages/new/photos/utils/file.ts | 113 ++++++++++++++++++ 7 files changed, 120 insertions(+), 114 deletions(-) rename web/{apps/photos/src/services => packages/new/photos/utils}/detect-type.ts (97%) diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index db3d11b5c2..d5ecb003b4 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -17,6 +17,7 @@ import { import { FILE_TYPE } from "@/media/file-type"; import { isNonWebImageFileExtension } from "@/media/formats"; import type { LoadedLivePhotoSourceURL } from "@/new/photos/types/file"; +import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import { lowercaseExtension } from "@/next/file"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; @@ -44,7 +45,6 @@ import { t } from "i18next"; import isElectron from "is-electron"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; -import { detectFileTypeInfo } from "services/detect-type"; import downloadManager from "services/download"; import { getParsedExifData } from "services/exif"; import { trashFiles } from "services/fileService"; diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index 179aa7cbc8..a0f99cac2e 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -5,6 +5,7 @@ import { type LivePhotoSourceURL, type SourceURLs, } from "@/new/photos/types/file"; +import { getRenderableImage } from "@/new/photos/utils/file"; import { blobCache, type BlobCache } from "@/next/blob-cache"; import log from "@/next/log"; import ComlinkCryptoWorker from "@ente/shared/crypto"; @@ -14,7 +15,6 @@ import { isPlaybackPossible } from "@ente/shared/media/video-playback"; import type { Remote } from "comlink"; import isElectron from "is-electron"; import * as ffmpeg from "services/ffmpeg"; -import { getRenderableImage } from "utils/file"; import { PhotosDownloadClient } from "./clients/photos"; import { PublicAlbumsDownloadClient } from "./clients/publicAlbums"; diff --git a/web/apps/photos/src/services/fix-exif.ts b/web/apps/photos/src/services/fix-exif.ts index a695f8d3a0..d212b31f11 100644 --- a/web/apps/photos/src/services/fix-exif.ts +++ b/web/apps/photos/src/services/fix-exif.ts @@ -1,9 +1,9 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; +import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import log from "@/next/log"; import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; import type { FixOption } from "components/FixCreationTime"; -import { detectFileTypeInfo } from "services/detect-type"; import { changeFileCreationTime, updateExistingFilePubMetadata, diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index c50407eb94..89a4d96f50 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -2,6 +2,7 @@ import { hasFileHash } from "@/media/file"; import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { encodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import { detectFileTypeInfoFromChunk } from "@/new/photos/services/detect-type"; import { EnteFile, MetadataFileAttributes, @@ -40,7 +41,6 @@ import { } from "utils/magicMetadata"; import { readStream } from "utils/native-stream"; import * as convert from "xml-js"; -import { detectFileTypeInfoFromChunk } from "../detect-type"; import { tryParseEpochMicrosecondsFromFileName } from "./date"; import publicUploadHttpClient from "./publicUploadHttpClient"; import type { ParsedMetadataJSON } from "./takeout"; diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts index f9bb04b94c..759117390c 100644 --- a/web/apps/photos/src/utils/file/index.ts +++ b/web/apps/photos/src/utils/file/index.ts @@ -1,6 +1,4 @@ import { FILE_TYPE } from "@/media/file-type"; -import { isNonWebImageFileExtension } from "@/media/formats"; -import { heicToJPEG } from "@/media/heic-convert"; import { decodeLivePhoto } from "@/media/live-photo"; import { EncryptedEnteFile, @@ -12,20 +10,18 @@ import { FileWithUpdatedMagicMetadata, } from "@/new/photos/types/file"; import { VISIBILITY_STATE } from "@/new/photos/types/magicMetadata"; +import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import { mergeMetadata } from "@/new/photos/utils/file"; import { lowercaseExtension } from "@/next/file"; import log from "@/next/log"; -import { CustomErrorMessage, type Electron } from "@/next/types/ipc"; -import { workerBridge } from "@/next/worker/worker-bridge"; +import { type Electron } from "@/next/types/ipc"; import { withTimeout } from "@/utils/promise"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; import type { User } from "@ente/shared/user/types"; import { downloadUsingAnchor } from "@ente/shared/utils"; import { t } from "i18next"; -import isElectron from "is-electron"; import { moveToHiddenCollection } from "services/collectionService"; -import { detectFileTypeInfo } from "services/detect-type"; import DownloadManager from "services/download"; import { updateFileCreationDateInEXIF } from "services/exif"; import { @@ -43,19 +39,6 @@ import { isArchivedFile, updateMagicMetadata } from "utils/magicMetadata"; import { safeFileName } from "utils/native-fs"; import { writeStream } from "utils/native-stream"; -const SUPPORTED_RAW_FORMATS = [ - "heic", - "rw2", - "tiff", - "arw", - "cr3", - "cr2", - "nef", - "psd", - "dng", - "tif", -]; - export enum FILE_OPS_TYPE { DOWNLOAD, FIX_TIME, @@ -66,22 +49,6 @@ export enum FILE_OPS_TYPE { DELETE_PERMANENTLY, } -class ModuleState { - /** - * This will be set to true if we get an error from the Node.js side of our - * desktop app telling us that native JPEG conversion is not available for - * the current OS/arch combination. - * - * That way, we can stop pestering it again and again (saving an IPC - * round-trip). - * - * Note the double negative when it is used. - */ - isNativeJPEGConversionNotAvailable = false; -} - -const moduleState = new ModuleState(); - /** * @returns a string to use as an identifier when logging information about the * given {@link enteFile}. The returned string contains the file name (for ease @@ -257,80 +224,6 @@ export async function decryptFile( } } -/** - * The returned blob.type is filled in, whenever possible, with the MIME type of - * the data that we're dealing with. - */ -export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { - try { - const tempFile = new File([imageBlob], fileName); - const fileTypeInfo = await detectFileTypeInfo(tempFile); - log.debug( - () => - `Need renderable image for ${JSON.stringify({ fileName, ...fileTypeInfo })}`, - ); - const { extension } = fileTypeInfo; - - if (!isNonWebImageFileExtension(extension)) { - // Either it is something that the browser already knows how to - // render, or something we don't even about yet. - const mimeType = fileTypeInfo.mimeType; - if (!mimeType) { - log.info( - "Trying to render a file without a MIME type", - fileName, - ); - return imageBlob; - } else { - return new Blob([imageBlob], { type: mimeType }); - } - } - - const available = !moduleState.isNativeJPEGConversionNotAvailable; - if (isElectron() && available && isSupportedRawFormat(extension)) { - // If we're running in our desktop app, see if our Node.js layer can - // convert this into a JPEG using native tools for us. - try { - return await nativeConvertToJPEG(imageBlob); - } catch (e) { - if (e.message.endsWith(CustomErrorMessage.NotAvailable)) { - moduleState.isNativeJPEGConversionNotAvailable = true; - } else { - log.error("Native conversion to JPEG failed", e); - } - } - } - - if (extension == "heic" || extension == "heif") { - // For HEIC/HEIF files we can use our web HEIC converter. - return await heicToJPEG(imageBlob); - } - - return undefined; - } catch (e) { - log.error(`Failed to get renderable image for ${fileName}`, e); - return undefined; - } -}; - -const nativeConvertToJPEG = async (imageBlob: Blob) => { - const startTime = Date.now(); - const imageData = new Uint8Array(await imageBlob.arrayBuffer()); - const electron = globalThis.electron; - // If we're running in a worker, we need to reroute the request back to - // the main thread since workers don't have access to the `window` (and - // thus, to the `window.electron`) object. - const jpegData = electron - ? await electron.convertToJPEG(imageData) - : await workerBridge.convertToJPEG(imageData); - log.debug(() => `Native JPEG conversion took ${Date.now() - startTime} ms`); - return new Blob([jpegData], { type: "image/jpeg" }); -}; - -export function isSupportedRawFormat(exactType: string) { - return SUPPORTED_RAW_FORMATS.includes(exactType.toLowerCase()); -} - export async function changeFilesVisibility( files: EnteFile[], visibility: VISIBILITY_STATE, diff --git a/web/apps/photos/src/services/detect-type.ts b/web/packages/new/photos/utils/detect-type.ts similarity index 97% rename from web/apps/photos/src/services/detect-type.ts rename to web/packages/new/photos/utils/detect-type.ts index e92e10bf82..e7447587d6 100644 --- a/web/apps/photos/src/services/detect-type.ts +++ b/web/packages/new/photos/utils/detect-type.ts @@ -78,7 +78,7 @@ export const detectFileTypeInfoFromChunk = async ( const known = KnownFileTypeInfos.find((f) => f.extension == extension); if (known) return known; - if (KnownNonMediaFileExtensions.includes(extension)) + if (extension && KnownNonMediaFileExtensions.includes(extension)) throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); throw e; diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index d5d2892254..9674b2f504 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -1,4 +1,40 @@ +import { isNonWebImageFileExtension } from "@/media/formats"; +import { heicToJPEG } from "@/media/heic-convert"; +import log from "@/next/log"; +import { CustomErrorMessage } from "@/next/types/ipc"; +import { workerBridge } from "@/next/worker/worker-bridge"; +import isElectron from "is-electron"; import type { EnteFile } from "../types/file"; +import { detectFileTypeInfo } from "./detect-type"; + +const SUPPORTED_RAW_FORMATS = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "nef", + "psd", + "dng", + "tif", +]; + +class ModuleState { + /** + * This will be set to true if we get an error from the Node.js side of our + * desktop app telling us that native JPEG conversion is not available for + * the current OS/arch combination. + * + * That way, we can stop pestering it again and again (saving an IPC + * round-trip). + * + * Note the double negative when it is used. + */ + isNativeJPEGConversionNotAvailable = false; +} + +const moduleState = new ModuleState(); /** * [Note: File name for local EnteFile objects] @@ -28,3 +64,80 @@ export function mergeMetadata(files: EnteFile[]): EnteFile[] { return file; }); } + +/** + * The returned blob.type is filled in, whenever possible, with the MIME type of + * the data that we're dealing with. + */ +export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { + try { + const tempFile = new File([imageBlob], fileName); + const fileTypeInfo = await detectFileTypeInfo(tempFile); + log.debug( + () => + `Need renderable image for ${JSON.stringify({ fileName, ...fileTypeInfo })}`, + ); + const { extension } = fileTypeInfo; + + if (!isNonWebImageFileExtension(extension)) { + // Either it is something that the browser already knows how to + // render, or something we don't even about yet. + const mimeType = fileTypeInfo.mimeType; + if (!mimeType) { + log.info( + "Trying to render a file without a MIME type", + fileName, + ); + return imageBlob; + } else { + return new Blob([imageBlob], { type: mimeType }); + } + } + + const available = !moduleState.isNativeJPEGConversionNotAvailable; + if (isElectron() && available && isSupportedRawFormat(extension)) { + // If we're running in our desktop app, see if our Node.js layer can + // convert this into a JPEG using native tools for us. + try { + return await nativeConvertToJPEG(imageBlob); + } catch (e) { + if ( + e instanceof Error && + e.message.endsWith(CustomErrorMessage.NotAvailable) + ) { + moduleState.isNativeJPEGConversionNotAvailable = true; + } else { + log.error("Native conversion to JPEG failed", e); + } + } + } + + if (extension == "heic" || extension == "heif") { + // For HEIC/HEIF files we can use our web HEIC converter. + return await heicToJPEG(imageBlob); + } + + return undefined; + } catch (e) { + log.error(`Failed to get renderable image for ${fileName}`, e); + return undefined; + } +}; + +const nativeConvertToJPEG = async (imageBlob: Blob) => { + const startTime = Date.now(); + const imageData = new Uint8Array(await imageBlob.arrayBuffer()); + const electron = globalThis.electron; + // If we're running in a worker, we need to reroute the request back to + // the main thread since workers don't have access to the `window` (and + // thus, to the `window.electron`) object. + const jpegData = electron + ? await electron.convertToJPEG(imageData) + : await workerBridge.convertToJPEG(imageData); + log.debug(() => `Native JPEG conversion took ${Date.now() - startTime} ms`); + return new Blob([jpegData], { type: "image/jpeg" }); +}; + +export function isSupportedRawFormat(exactType: string) { + return SUPPORTED_RAW_FORMATS.includes(exactType.toLowerCase()); +} From 5fcb1de5401f488d7ede75b3c344b68abb5e564e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:06:48 +0530 Subject: [PATCH 128/466] Rename etc --- .../src/components/PhotoViewer/index.tsx | 6 ++- web/packages/new/photos/utils/file.ts | 43 +++++++++++-------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index d5ecb003b4..aff51460dd 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -11,13 +11,13 @@ import { copyFileToClipboard, downloadSingleFile, getFileFromURL, - isSupportedRawFormat, } from "utils/file"; import { FILE_TYPE } from "@/media/file-type"; import { isNonWebImageFileExtension } from "@/media/formats"; import type { LoadedLivePhotoSourceURL } from "@/new/photos/types/file"; import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; +import { isNativeConvertibleToJPEG } from "@/new/photos/utils/file"; import { lowercaseExtension } from "@/next/file"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; @@ -352,7 +352,9 @@ function PhotoViewer(props: Iprops) { const extension = lowercaseExtension(file.metadata.title); const isSupported = !isNonWebImageFileExtension(extension) || - isSupportedRawFormat(extension); + // TODO: This condition doesn't sound correct when running in the + // web app? + isNativeConvertibleToJPEG(extension); setShowEditButton( file.metadata.fileType === FILE_TYPE.IMAGE && isSupported, ); diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 9674b2f504..33d93242e2 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -7,19 +7,6 @@ import isElectron from "is-electron"; import type { EnteFile } from "../types/file"; import { detectFileTypeInfo } from "./detect-type"; -const SUPPORTED_RAW_FORMATS = [ - "heic", - "rw2", - "tiff", - "arw", - "cr3", - "cr2", - "nef", - "psd", - "dng", - "tif", -]; - class ModuleState { /** * This will be set to true if we get an error from the Node.js side of our @@ -95,7 +82,7 @@ export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { } const available = !moduleState.isNativeJPEGConversionNotAvailable; - if (isElectron() && available && isSupportedRawFormat(extension)) { + if (isElectron() && available && isNativeConvertibleToJPEG(extension)) { // If we're running in our desktop app, see if our Node.js layer can // convert this into a JPEG using native tools for us. try { @@ -124,6 +111,30 @@ export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { } }; +/** + * File extensions which our native JPEG conversion code should be able to + * convert to a renderable image. + */ +const convertibleToJPEGExtensions = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "nef", + "psd", + "dng", + "tif", +]; + +/** + * Return true if {@link extension} is amongst the file extensions which we + * expect our native JPEG conversion to be able to process. + */ +export const isNativeConvertibleToJPEG = (extension: string) => + convertibleToJPEGExtensions.includes(extension.toLowerCase()); + const nativeConvertToJPEG = async (imageBlob: Blob) => { const startTime = Date.now(); const imageData = new Uint8Array(await imageBlob.arrayBuffer()); @@ -137,7 +148,3 @@ const nativeConvertToJPEG = async (imageBlob: Blob) => { log.debug(() => `Native JPEG conversion took ${Date.now() - startTime} ms`); return new Blob([jpegData], { type: "image/jpeg" }); }; - -export function isSupportedRawFormat(exactType: string) { - return SUPPORTED_RAW_FORMATS.includes(exactType.toLowerCase()); -} From 03150482f7b5148d0c3055351f625117b20c3612 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:07:25 +0530 Subject: [PATCH 129/466] Use our check --- web/packages/new/photos/utils/file.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 33d93242e2..92fb5dfff0 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -1,9 +1,9 @@ import { isNonWebImageFileExtension } from "@/media/formats"; import { heicToJPEG } from "@/media/heic-convert"; +import { isDesktop } from "@/next/app"; import log from "@/next/log"; import { CustomErrorMessage } from "@/next/types/ipc"; import { workerBridge } from "@/next/worker/worker-bridge"; -import isElectron from "is-electron"; import type { EnteFile } from "../types/file"; import { detectFileTypeInfo } from "./detect-type"; @@ -82,7 +82,7 @@ export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { } const available = !moduleState.isNativeJPEGConversionNotAvailable; - if (isElectron() && available && isNativeConvertibleToJPEG(extension)) { + if (isDesktop && available && isNativeConvertibleToJPEG(extension)) { // If we're running in our desktop app, see if our Node.js layer can // convert this into a JPEG using native tools for us. try { From 5c0f1837404377f78405284576b2206344ee9ad9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:08:41 +0530 Subject: [PATCH 130/466] lf --- web/apps/photos/src/services/face/f-index.ts | 2 +- web/apps/photos/src/services/upload/uploadService.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/apps/photos/src/services/face/f-index.ts index cf41623e94..539fdc7411 100644 --- a/web/apps/photos/src/services/face/f-index.ts +++ b/web/apps/photos/src/services/face/f-index.ts @@ -8,6 +8,7 @@ import type { } from "@/new/photos/services/face/types"; import { faceIndexingVersion } from "@/new/photos/services/face/types"; import type { EnteFile } from "@/new/photos/types/file"; +import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; import { Matrix } from "ml-matrix"; @@ -20,7 +21,6 @@ import { scale, translate, } from "transformation-matrix"; -import { getRenderableImage } from "utils/file"; import { saveFaceCrop } from "./crop"; import { clamp, diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index 89a4d96f50..9a5885f624 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -2,7 +2,6 @@ import { hasFileHash } from "@/media/file"; import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { encodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; -import { detectFileTypeInfoFromChunk } from "@/new/photos/services/detect-type"; import { EnteFile, MetadataFileAttributes, @@ -12,6 +11,7 @@ import { type FilePublicMagicMetadataProps, } from "@/new/photos/types/file"; import { EncryptedMagicMetadata } from "@/new/photos/types/magicMetadata"; +import { detectFileTypeInfoFromChunk } from "@/new/photos/utils/detect-type"; import { ensureElectron } from "@/next/electron"; import { basename } from "@/next/file"; import log from "@/next/log"; From cec60520d99d6e4d5ab4c5f59a0ee60ce4db573d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:16:57 +0530 Subject: [PATCH 131/466] Move --- web/{apps/photos/src => packages/new/photos}/utils/native-fs.ts | 0 .../photos/src => packages/new/photos}/utils/native-stream.ts | 0 web/{apps/photos/src => packages/new/photos}/utils/units.ts | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename web/{apps/photos/src => packages/new/photos}/utils/native-fs.ts (100%) rename web/{apps/photos/src => packages/new/photos}/utils/native-stream.ts (100%) rename web/{apps/photos/src => packages/new/photos}/utils/units.ts (100%) diff --git a/web/apps/photos/src/utils/native-fs.ts b/web/packages/new/photos/utils/native-fs.ts similarity index 100% rename from web/apps/photos/src/utils/native-fs.ts rename to web/packages/new/photos/utils/native-fs.ts diff --git a/web/apps/photos/src/utils/native-stream.ts b/web/packages/new/photos/utils/native-stream.ts similarity index 100% rename from web/apps/photos/src/utils/native-stream.ts rename to web/packages/new/photos/utils/native-stream.ts diff --git a/web/apps/photos/src/utils/units.ts b/web/packages/new/photos/utils/units.ts similarity index 100% rename from web/apps/photos/src/utils/units.ts rename to web/packages/new/photos/utils/units.ts From a282c6cb40ba49527e98dc651c6080fa52a7e2c8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:25:52 +0530 Subject: [PATCH 132/466] Move more --- .../src/components/PhotoList/dedupe.tsx | 2 +- .../photos/src/components/PhotoList/index.tsx | 2 +- .../PhotoViewer/FileInfo/RenderFileName.tsx | 2 +- .../individual/usageSection.tsx | 2 +- .../contentOverlay/storageSection.tsx | 4 ++-- .../photos/src/components/Upload/Uploader.tsx | 2 +- .../pages/gallery/PlanSelector/card.tsx | 2 +- .../gallery/PlanSelector/plans/BfAddOnRow.tsx | 2 +- .../gallery/PlanSelector/plans/index.tsx | 2 +- .../gallery/PlanSelector/plans/planRow.tsx | 2 +- web/apps/photos/src/services/export/index.ts | 20 ++++++------------- .../photos/src/services/export/migration.ts | 10 +++++----- web/apps/photos/src/services/ffmpeg.ts | 10 +++++----- .../photos/src/services/upload/takeout.ts | 2 +- .../src/services/upload/uploadService.ts | 2 +- web/apps/photos/src/utils/collection/index.ts | 2 +- web/apps/photos/src/utils/file/index.ts | 4 ++-- web/packages/new/photos/services/export.ts | 11 ++++++++++ web/packages/new/photos/utils/native-fs.ts | 6 +++--- .../new/photos/utils/native-stream.ts | 14 ++++++++----- 20 files changed, 55 insertions(+), 48 deletions(-) create mode 100644 web/packages/new/photos/services/export.ts diff --git a/web/apps/photos/src/components/PhotoList/dedupe.tsx b/web/apps/photos/src/components/PhotoList/dedupe.tsx index 56a9638e3f..1652ff176f 100644 --- a/web/apps/photos/src/components/PhotoList/dedupe.tsx +++ b/web/apps/photos/src/components/PhotoList/dedupe.tsx @@ -1,4 +1,5 @@ import { EnteFile } from "@/new/photos/types/file"; +import { formattedByteSize } from "@/new/photos/utils/units"; import { FlexWrapper } from "@ente/shared/components/Container"; import { Box, styled } from "@mui/material"; import { @@ -19,7 +20,6 @@ import { areEqual, } from "react-window"; import { Duplicate } from "services/deduplicationService"; -import { formattedByteSize } from "utils/units"; export enum ITEM_TYPE { TIME = "TIME", diff --git a/web/apps/photos/src/components/PhotoList/index.tsx b/web/apps/photos/src/components/PhotoList/index.tsx index 85c6db57cb..1f4b0bfb06 100644 --- a/web/apps/photos/src/components/PhotoList/index.tsx +++ b/web/apps/photos/src/components/PhotoList/index.tsx @@ -1,4 +1,5 @@ import { EnteFile } from "@/new/photos/types/file"; +import { formattedByteSize } from "@/new/photos/utils/units"; import { FlexWrapper } from "@ente/shared/components/Container"; import { formatDate } from "@ente/shared/time/format"; import { Box, Checkbox, Link, Typography, styled } from "@mui/material"; @@ -24,7 +25,6 @@ import { } from "react-window"; import { handleSelectCreator } from "utils/photoFrame"; import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; -import { formattedByteSize } from "utils/units"; const FOOTER_HEIGHT = 90; const ALBUM_FOOTER_HEIGHT = 75; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx index caa9be2de4..b4a932b9aa 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; +import { formattedByteSize } from "@/new/photos/utils/units"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; import { FlexWrapper } from "@ente/shared/components/Container"; @@ -8,7 +9,6 @@ import VideocamOutlined from "@mui/icons-material/VideocamOutlined"; import Box from "@mui/material/Box"; import { useEffect, useState } from "react"; import { changeFileName, updateExistingFilePubMetadata } from "utils/file"; -import { formattedByteSize } from "utils/units"; import { FileNameEditDialog } from "./FileNameEditDialog"; import InfoItem from "./InfoItem"; diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx index 8975941ad5..251a58d823 100644 --- a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx @@ -1,7 +1,7 @@ +import { formattedStorageByteSize } from "@/new/photos/utils/units"; import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import { Box, Typography } from "@mui/material"; import { t } from "i18next"; -import { formattedStorageByteSize } from "utils/units"; import { Progressbar } from "../../styledComponents"; diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx index 7f2712f738..4ad0ed2149 100644 --- a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx @@ -1,6 +1,6 @@ -import { Box, styled, Typography } from "@mui/material"; +import { bytesInGB, formattedStorageByteSize } from "@/new/photos/utils/units"; +import { Box, Typography, styled } from "@mui/material"; import { t } from "i18next"; -import { bytesInGB, formattedStorageByteSize } from "utils/units"; const MobileSmallBox = styled(Box)` display: none; diff --git a/web/apps/photos/src/components/Upload/Uploader.tsx b/web/apps/photos/src/components/Upload/Uploader.tsx index 85e660672e..170d2fcdc8 100644 --- a/web/apps/photos/src/components/Upload/Uploader.tsx +++ b/web/apps/photos/src/components/Upload/Uploader.tsx @@ -1,3 +1,4 @@ +import { exportMetadataDirectoryName } from "@/new/photos/services/export"; import { basename } from "@/next/file"; import log from "@/next/log"; import type { CollectionMapping, Electron, ZipItem } from "@/next/types/ipc"; @@ -15,7 +16,6 @@ import { GalleryContext } from "pages/gallery"; import { useContext, useEffect, useRef, useState } from "react"; import billingService from "services/billingService"; import { getLatestCollections } from "services/collectionService"; -import { exportMetadataDirectoryName } from "services/export"; import { getPublicCollectionUID, getPublicCollectionUploaderName, diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/card.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/card.tsx index 55e93979de..17f0b6e6e7 100644 --- a/web/apps/photos/src/components/pages/gallery/PlanSelector/card.tsx +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/card.tsx @@ -1,3 +1,4 @@ +import { bytesInGB } from "@/new/photos/utils/units"; import log from "@/next/log"; import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import { SUPPORT_EMAIL } from "@ente/shared/constants/urls"; @@ -27,7 +28,6 @@ import { planForSubscription, updateSubscription, } from "utils/billing"; -import { bytesInGB } from "utils/units"; import { getLocalUserDetails } from "utils/user"; import { getTotalFamilyUsage, isPartOfFamily } from "utils/user/family"; import { ManageSubscription } from "./manageSubscription"; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx index 5f7e13deb8..7b375f5d73 100644 --- a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx @@ -1,8 +1,8 @@ import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import { Box, styled, Typography } from "@mui/material"; +import { formattedStorageByteSize } from "@/new/photos/utils/units"; import { Trans } from "react-i18next"; -import { formattedStorageByteSize } from "utils/units"; const RowContainer = styled(SpaceBetweenFlex)(({ theme }) => ({ // gap: theme.spacing(1.5), diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx index 31e97c68e6..e83ca781ee 100644 --- a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx @@ -1,3 +1,4 @@ +import { formattedStorageByteSize } from "@/new/photos/utils/units"; import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import ArrowForward from "@mui/icons-material/ArrowForward"; import { Box, IconButton, Stack, Typography, styled } from "@mui/material"; @@ -12,7 +13,6 @@ import { isPopularPlan, isUserSubscribedPlan, } from "utils/billing"; -import { formattedStorageByteSize } from "utils/units"; import { PlanRow } from "./planRow"; interface Iprops { diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx index 9f1351b120..9701baf01a 100644 --- a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx @@ -1,3 +1,4 @@ +import { bytesInGB } from "@/new/photos/utils/units"; import { FlexWrapper, FluidContainer } from "@ente/shared/components/Container"; import ArrowForward from "@mui/icons-material/ArrowForward"; import Done from "@mui/icons-material/Done"; @@ -7,7 +8,6 @@ import { PLAN_PERIOD } from "constants/gallery"; import { t } from "i18next"; import { Plan, Subscription } from "types/billing"; import { hasPaidSubscription, isUserSubscribedPlan } from "utils/billing"; -import { bytesInGB } from "utils/units"; interface Iprops { plan: Plan; diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index df7d23eddf..fcf387fef3 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -1,9 +1,15 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import { + exportMetadataDirectoryName, + exportTrashDirectoryName, +} from "@/new/photos/services/export"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { mergeMetadata } from "@/new/photos/utils/file"; +import { safeDirectoryName, safeFileName } from "@/new/photos/utils/native-fs"; +import { writeStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { wait } from "@/utils/promise"; @@ -31,8 +37,6 @@ import { getNonEmptyPersonalCollections, } from "utils/collection"; import { getPersonalFiles, getUpdatedEXIFFileForDownload } from "utils/file"; -import { safeDirectoryName, safeFileName } from "utils/native-fs"; -import { writeStream } from "utils/native-stream"; import { getAllLocalCollections } from "../collectionService"; import downloadManager from "../download"; import { migrateExport } from "./migration"; @@ -46,18 +50,6 @@ const exportRecordFileName = "export_status.json"; */ const exportDirectoryName = "Ente Photos"; -/** - * Name of the directory in which we put our metadata when exporting to the file - * system. - */ -export const exportMetadataDirectoryName = "metadata"; - -/** - * Name of the directory in which we keep trash items when deleting files that - * have been exported to the local disk previously. - */ -export const exportTrashDirectoryName = "Trash"; - export enum ExportStage { INIT = 0, MIGRATION = 1, diff --git a/web/apps/photos/src/services/export/migration.ts b/web/apps/photos/src/services/export/migration.ts index 75ab0e2f11..f46fc0a48e 100644 --- a/web/apps/photos/src/services/export/migration.ts +++ b/web/apps/photos/src/services/export/migration.ts @@ -3,6 +3,11 @@ import { decodeLivePhoto } from "@/media/live-photo"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { mergeMetadata } from "@/new/photos/utils/file"; +import { + safeDirectoryName, + safeFileName, + sanitizeFilename, +} from "@/new/photos/utils/native-fs"; import { ensureElectron } from "@/next/electron"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; @@ -24,11 +29,6 @@ import { } from "types/export"; import { getNonEmptyPersonalCollections } from "utils/collection"; import { getIDBasedSortedFiles, getPersonalFiles } from "utils/file"; -import { - safeDirectoryName, - safeFileName, - sanitizeFilename, -} from "utils/native-fs"; import { exportMetadataDirectoryName, getCollectionIDFromFileUID, diff --git a/web/apps/photos/src/services/ffmpeg.ts b/web/apps/photos/src/services/ffmpeg.ts index 800df1e953..342a6fca57 100644 --- a/web/apps/photos/src/services/ffmpeg.ts +++ b/web/apps/photos/src/services/ffmpeg.ts @@ -1,3 +1,8 @@ +import { + readConvertToMP4Done, + readConvertToMP4Stream, + writeConvertToMP4Stream, +} from "@/new/photos/utils/native-stream"; import type { Electron } from "@/next/types/ipc"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; @@ -9,11 +14,6 @@ import { } from "constants/ffmpeg"; import { NULL_LOCATION } from "constants/upload"; import type { ParsedExtractedMetadata } from "types/metadata"; -import { - readConvertToMP4Done, - readConvertToMP4Stream, - writeConvertToMP4Stream, -} from "utils/native-stream"; import type { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; import { toDataOrPathOrZipEntry, diff --git a/web/apps/photos/src/services/upload/takeout.ts b/web/apps/photos/src/services/upload/takeout.ts index 24c0a9d267..2cd0f342d6 100644 --- a/web/apps/photos/src/services/upload/takeout.ts +++ b/web/apps/photos/src/services/upload/takeout.ts @@ -1,11 +1,11 @@ /** @file Dealing with the JSON metadata in Google Takeouts */ +import { readStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; import { NULL_LOCATION } from "constants/upload"; import type { Location } from "types/metadata"; -import { readStream } from "utils/native-stream"; import type { UploadItem } from "./types"; export interface ParsedMetadataJSON { diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index 9a5885f624..bfe682cb1b 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -12,6 +12,7 @@ import { } from "@/new/photos/types/file"; import { EncryptedMagicMetadata } from "@/new/photos/types/magicMetadata"; import { detectFileTypeInfoFromChunk } from "@/new/photos/utils/detect-type"; +import { readStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; import { basename } from "@/next/file"; import log from "@/next/log"; @@ -39,7 +40,6 @@ import { getNonEmptyMagicMetadataProps, updateMagicMetadata, } from "utils/magicMetadata"; -import { readStream } from "utils/native-stream"; import * as convert from "xml-js"; import { tryParseEpochMicrosecondsFromFileName } from "./date"; import publicUploadHttpClient from "./publicUploadHttpClient"; diff --git a/web/apps/photos/src/utils/collection/index.ts b/web/apps/photos/src/utils/collection/index.ts index 12fffe6bfa..d6081567f3 100644 --- a/web/apps/photos/src/utils/collection/index.ts +++ b/web/apps/photos/src/utils/collection/index.ts @@ -1,6 +1,7 @@ import { getAllLocalFiles, getLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { SUB_TYPE, VISIBILITY_STATE } from "@/new/photos/types/magicMetadata"; +import { safeDirectoryName } from "@/new/photos/utils/native-fs"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { CustomError } from "@ente/shared/error"; @@ -43,7 +44,6 @@ import { import { SetFilesDownloadProgressAttributes } from "types/gallery"; import { downloadFilesWithProgress } from "utils/file"; import { isArchivedCollection, updateMagicMetadata } from "utils/magicMetadata"; -import { safeDirectoryName } from "utils/native-fs"; export enum COLLECTION_OPS_TYPE { ADD, diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts index 759117390c..13b3c2fe61 100644 --- a/web/apps/photos/src/utils/file/index.ts +++ b/web/apps/photos/src/utils/file/index.ts @@ -12,6 +12,8 @@ import { import { VISIBILITY_STATE } from "@/new/photos/types/magicMetadata"; import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import { mergeMetadata } from "@/new/photos/utils/file"; +import { safeFileName } from "@/new/photos/utils/native-fs"; +import { writeStream } from "@/new/photos/utils/native-stream"; import { lowercaseExtension } from "@/next/file"; import log from "@/next/log"; import { type Electron } from "@/next/types/ipc"; @@ -36,8 +38,6 @@ import { SetFilesDownloadProgressAttributesCreator, } from "types/gallery"; import { isArchivedFile, updateMagicMetadata } from "utils/magicMetadata"; -import { safeFileName } from "utils/native-fs"; -import { writeStream } from "utils/native-stream"; export enum FILE_OPS_TYPE { DOWNLOAD, diff --git a/web/packages/new/photos/services/export.ts b/web/packages/new/photos/services/export.ts new file mode 100644 index 0000000000..40229741ed --- /dev/null +++ b/web/packages/new/photos/services/export.ts @@ -0,0 +1,11 @@ +/** + * Name of the directory in which we put our metadata when exporting to the file + * system. + */ +export const exportMetadataDirectoryName = "metadata"; + +/** + * Name of the directory in which we keep trash items when deleting files that + * have been exported to the local disk previously. + */ +export const exportTrashDirectoryName = "Trash"; diff --git a/web/packages/new/photos/utils/native-fs.ts b/web/packages/new/photos/utils/native-fs.ts index 27ebdd1c12..666efc4fca 100644 --- a/web/packages/new/photos/utils/native-fs.ts +++ b/web/packages/new/photos/utils/native-fs.ts @@ -5,12 +5,12 @@ * written for use by the code that runs in our desktop app. */ -import { nameAndExtension } from "@/next/file"; -import sanitize from "sanitize-filename"; import { exportMetadataDirectoryName, exportTrashDirectoryName, -} from "services/export"; +} from "@/new/photos/services/export"; +import { nameAndExtension } from "@/next/file"; +import sanitize from "sanitize-filename"; /** * Sanitize string for use as file or directory name. diff --git a/web/packages/new/photos/utils/native-stream.ts b/web/packages/new/photos/utils/native-stream.ts index e922c26219..9c38897367 100644 --- a/web/packages/new/photos/utils/native-stream.ts +++ b/web/packages/new/photos/utils/native-stream.ts @@ -52,7 +52,7 @@ export const readStream = async ( const res = await fetch(req); if (!res.ok) throw new Error( - `Failed to read stream from ${url}: HTTP ${res.status}`, + `Failed to read stream from ${url.href}: HTTP ${res.status}`, ); const size = readNumericHeader(res, "Content-Length"); @@ -63,7 +63,7 @@ export const readStream = async ( const readNumericHeader = (res: Response, key: string) => { const valueText = res.headers.get(key); - const value = +valueText; + const value = valueText === null ? NaN : +valueText; if (isNaN(value)) throw new Error( `Expected a numeric ${key} when reading a stream response, instead got ${valueText}`, @@ -111,7 +111,9 @@ export const writeStream = async ( const res = await fetch(req); if (!res.ok) - throw new Error(`Failed to write stream to ${url}: HTTP ${res.status}`); + throw new Error( + `Failed to write stream to ${url.href}: HTTP ${res.status}`, + ); }; /** @@ -161,7 +163,7 @@ export const readConvertToMP4Stream = async ( const res = await fetch(req); if (!res.ok) throw new Error( - `Failed to read stream from ${url}: HTTP ${res.status}`, + `Failed to read stream from ${url.href}: HTTP ${res.status}`, ); return res.blob(); @@ -185,5 +187,7 @@ export const readConvertToMP4Done = async ( const req = new Request(url, { method: "GET" }); const res = await fetch(req); if (!res.ok) - throw new Error(`Failed to close stream at ${url}: HTTP ${res.status}`); + throw new Error( + `Failed to close stream at ${url.href}: HTTP ${res.status}`, + ); }; From 920590758843debb6a68fec094166d1296bcf7e7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:33:28 +0530 Subject: [PATCH 133/466] Inline --- .../src/services/download/clients/photos.ts | 149 --------- .../services/download/clients/publicAlbums.ts | 145 --------- .../photos/src/services/download/index.ts | 287 +++++++++++++++++- 3 files changed, 285 insertions(+), 296 deletions(-) delete mode 100644 web/apps/photos/src/services/download/clients/photos.ts delete mode 100644 web/apps/photos/src/services/download/clients/publicAlbums.ts diff --git a/web/apps/photos/src/services/download/clients/photos.ts b/web/apps/photos/src/services/download/clients/photos.ts deleted file mode 100644 index 110c51a093..0000000000 --- a/web/apps/photos/src/services/download/clients/photos.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { EnteFile } from "@/new/photos/types/file"; -import { customAPIOrigin } from "@/next/origins"; -import { CustomError } from "@ente/shared/error"; -import HTTPService from "@ente/shared/network/HTTPService"; -import { retryAsyncFunction } from "@ente/shared/utils"; -import { DownloadClient } from "services/download"; - -export class PhotosDownloadClient implements DownloadClient { - constructor( - private token: string, - private timeout: number, - ) {} - - updateTokens(token: string) { - this.token = token; - } - - async downloadThumbnail(file: EnteFile): Promise { - const token = this.token; - if (!token) throw Error(CustomError.TOKEN_MISSING); - - const customOrigin = await customAPIOrigin(); - - // See: [Note: Passing credentials for self-hosted file fetches] - const getThumbnail = () => { - const opts = { responseType: "arraybuffer", timeout: this.timeout }; - if (customOrigin) { - const params = new URLSearchParams({ token }); - return HTTPService.get( - `${customOrigin}/files/preview/${file.id}?${params.toString()}`, - undefined, - undefined, - opts, - ); - } else { - return HTTPService.get( - `https://thumbnails.ente.io/?fileID=${file.id}`, - undefined, - { "X-Auth-Token": token }, - opts, - ); - } - }; - - const resp = await retryAsyncFunction(getThumbnail); - if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); - } - - async downloadFile( - file: EnteFile, - onDownloadProgress: (event: { loaded: number; total: number }) => void, - ): Promise { - const token = this.token; - if (!token) throw Error(CustomError.TOKEN_MISSING); - - const customOrigin = await customAPIOrigin(); - - // See: [Note: Passing credentials for self-hosted file fetches] - const getFile = () => { - const opts = { - responseType: "arraybuffer", - timeout: this.timeout, - onDownloadProgress, - }; - - if (customOrigin) { - const params = new URLSearchParams({ token }); - return HTTPService.get( - `${customOrigin}/files/download/${file.id}?${params.toString()}`, - undefined, - undefined, - opts, - ); - } else { - return HTTPService.get( - `https://files.ente.io/?fileID=${file.id}`, - undefined, - { "X-Auth-Token": token }, - opts, - ); - } - }; - - const resp = await retryAsyncFunction(getFile); - if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); - } - - async downloadFileStream(file: EnteFile): Promise { - const token = this.token; - if (!token) throw Error(CustomError.TOKEN_MISSING); - - const customOrigin = await customAPIOrigin(); - - // [Note: Passing credentials for self-hosted file fetches] - // - // Fetching files (or thumbnails) in the default self-hosted Ente - // configuration involves a redirection: - // - // 1. The browser makes a HTTP GET to a museum with credentials. Museum - // inspects the credentials, in this case the auth token, and if - // they're valid, returns a HTTP 307 redirect to the pre-signed S3 - // URL that to the file in the configured S3 bucket. - // - // 2. The browser follows the redirect to get the actual file. The URL - // is pre-signed, i.e. already has all credentials needed to prove to - // the S3 object storage that it should serve this response. - // - // For the first step normally we'd pass the auth the token via the - // "X-Auth-Token" HTTP header. In this case though, that would be - // problematic because the browser preserves the request headers when it - // follows the HTTP 307 redirect, and the "X-Auth-Token" header also - // gets sent to the redirected S3 request made in second step. - // - // To avoid this, we pass the token as a query parameter. Generally this - // is not a good idea, but in this case (a) the URL is not a user - // visible one and (b) even if it gets logged, it'll be in the - // self-hosters own service. - // - // Note that Ente's own servers don't have these concerns because we use - // a slightly different flow involving a proxy instead of directly - // connecting to the S3 storage. - // - // 1. The web browser makes a HTTP GET request to a proxy passing it the - // credentials in the "X-Auth-Token". - // - // 2. The proxy then does both the original steps: (a). Use the - // credentials to get the pre signed URL, and (b) fetch that pre - // signed URL and stream back the response. - - const getFile = () => { - if (customOrigin) { - const params = new URLSearchParams({ token }); - return fetch( - `${customOrigin}/files/download/${file.id}?${params.toString()}`, - ); - } else { - return fetch(`https://files.ente.io/?fileID=${file.id}`, { - headers: { - "X-Auth-Token": token, - }, - }); - } - }; - - return retryAsyncFunction(getFile); - } -} diff --git a/web/apps/photos/src/services/download/clients/publicAlbums.ts b/web/apps/photos/src/services/download/clients/publicAlbums.ts deleted file mode 100644 index d471591e63..0000000000 --- a/web/apps/photos/src/services/download/clients/publicAlbums.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { EnteFile } from "@/new/photos/types/file"; -import { customAPIOrigin } from "@/next/origins"; -import { CustomError } from "@ente/shared/error"; -import HTTPService from "@ente/shared/network/HTTPService"; -import { retryAsyncFunction } from "@ente/shared/utils"; -import { DownloadClient } from "services/download"; - -export class PublicAlbumsDownloadClient implements DownloadClient { - private token: string; - private passwordToken: string; - - constructor(private timeout: number) {} - - updateTokens(token: string, passwordToken: string) { - this.token = token; - this.passwordToken = passwordToken; - } - - downloadThumbnail = async (file: EnteFile) => { - const accessToken = this.token; - const accessTokenJWT = this.passwordToken; - if (!accessToken) throw Error(CustomError.TOKEN_MISSING); - const customOrigin = await customAPIOrigin(); - - // See: [Note: Passing credentials for self-hosted file fetches] - const getThumbnail = () => { - const opts = { - responseType: "arraybuffer", - }; - - if (customOrigin) { - const params = new URLSearchParams({ - accessToken, - ...(accessTokenJWT && { accessTokenJWT }), - }); - return HTTPService.get( - `${customOrigin}/public-collection/files/preview/${file.id}?${params.toString()}`, - undefined, - undefined, - opts, - ); - } else { - return HTTPService.get( - `https://public-albums.ente.io/preview/?fileID=${file.id}`, - undefined, - { - "X-Auth-Access-Token": accessToken, - ...(accessTokenJWT && { - "X-Auth-Access-Token-JWT": accessTokenJWT, - }), - }, - opts, - ); - } - }; - - const resp = await getThumbnail(); - if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); - }; - - downloadFile = async ( - file: EnteFile, - onDownloadProgress: (event: { loaded: number; total: number }) => void, - ) => { - const accessToken = this.token; - const accessTokenJWT = this.passwordToken; - if (!accessToken) throw Error(CustomError.TOKEN_MISSING); - - const customOrigin = await customAPIOrigin(); - - // See: [Note: Passing credentials for self-hosted file fetches] - const getFile = () => { - const opts = { - responseType: "arraybuffer", - timeout: this.timeout, - onDownloadProgress, - }; - - if (customOrigin) { - const params = new URLSearchParams({ - accessToken, - ...(accessTokenJWT && { accessTokenJWT }), - }); - return HTTPService.get( - `${customOrigin}/public-collection/files/download/${file.id}?${params.toString()}`, - undefined, - undefined, - opts, - ); - } else { - return HTTPService.get( - `https://public-albums.ente.io/download/?fileID=${file.id}`, - undefined, - { - "X-Auth-Access-Token": accessToken, - ...(accessTokenJWT && { - "X-Auth-Access-Token-JWT": accessTokenJWT, - }), - }, - opts, - ); - } - }; - - const resp = await retryAsyncFunction(getFile); - if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); - }; - - async downloadFileStream(file: EnteFile): Promise { - const accessToken = this.token; - const accessTokenJWT = this.passwordToken; - if (!accessToken) throw Error(CustomError.TOKEN_MISSING); - - const customOrigin = await customAPIOrigin(); - - // See: [Note: Passing credentials for self-hosted file fetches] - const getFile = () => { - if (customOrigin) { - const params = new URLSearchParams({ - accessToken, - ...(accessTokenJWT && { accessTokenJWT }), - }); - return fetch( - `${customOrigin}/public-collection/files/download/${file.id}?${params.toString()}`, - ); - } else { - return fetch( - `https://public-albums.ente.io/download/?fileID=${file.id}`, - { - headers: { - "X-Auth-Access-Token": accessToken, - ...(accessTokenJWT && { - "X-Auth-Access-Token-JWT": accessTokenJWT, - }), - }, - }, - ); - } - }; - - return retryAsyncFunction(getFile); - } -} diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index a0f99cac2e..e656c54484 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -8,15 +8,16 @@ import { import { getRenderableImage } from "@/new/photos/utils/file"; import { blobCache, type BlobCache } from "@/next/blob-cache"; import log from "@/next/log"; +import { customAPIOrigin } from "@/next/origins"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; import { CustomError } from "@ente/shared/error"; import { isPlaybackPossible } from "@ente/shared/media/video-playback"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { retryAsyncFunction } from "@ente/shared/utils"; import type { Remote } from "comlink"; import isElectron from "is-electron"; import * as ffmpeg from "services/ffmpeg"; -import { PhotosDownloadClient } from "./clients/photos"; -import { PublicAlbumsDownloadClient } from "./clients/publicAlbums"; export type OnDownloadProgress = (event: { loaded: number; @@ -536,3 +537,285 @@ async function getPlayableVideo( return null; } } + +class PhotosDownloadClient implements DownloadClient { + constructor( + private token: string, + private timeout: number, + ) {} + + updateTokens(token: string) { + this.token = token; + } + + async downloadThumbnail(file: EnteFile): Promise { + const token = this.token; + if (!token) throw Error(CustomError.TOKEN_MISSING); + + const customOrigin = await customAPIOrigin(); + + // See: [Note: Passing credentials for self-hosted file fetches] + const getThumbnail = () => { + const opts = { responseType: "arraybuffer", timeout: this.timeout }; + if (customOrigin) { + const params = new URLSearchParams({ token }); + return HTTPService.get( + `${customOrigin}/files/preview/${file.id}?${params.toString()}`, + undefined, + undefined, + opts, + ); + } else { + return HTTPService.get( + `https://thumbnails.ente.io/?fileID=${file.id}`, + undefined, + { "X-Auth-Token": token }, + opts, + ); + } + }; + + const resp = await retryAsyncFunction(getThumbnail); + if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); + return new Uint8Array(resp.data); + } + + async downloadFile( + file: EnteFile, + onDownloadProgress: (event: { loaded: number; total: number }) => void, + ): Promise { + const token = this.token; + if (!token) throw Error(CustomError.TOKEN_MISSING); + + const customOrigin = await customAPIOrigin(); + + // See: [Note: Passing credentials for self-hosted file fetches] + const getFile = () => { + const opts = { + responseType: "arraybuffer", + timeout: this.timeout, + onDownloadProgress, + }; + + if (customOrigin) { + const params = new URLSearchParams({ token }); + return HTTPService.get( + `${customOrigin}/files/download/${file.id}?${params.toString()}`, + undefined, + undefined, + opts, + ); + } else { + return HTTPService.get( + `https://files.ente.io/?fileID=${file.id}`, + undefined, + { "X-Auth-Token": token }, + opts, + ); + } + }; + + const resp = await retryAsyncFunction(getFile); + if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); + return new Uint8Array(resp.data); + } + + async downloadFileStream(file: EnteFile): Promise { + const token = this.token; + if (!token) throw Error(CustomError.TOKEN_MISSING); + + const customOrigin = await customAPIOrigin(); + + // [Note: Passing credentials for self-hosted file fetches] + // + // Fetching files (or thumbnails) in the default self-hosted Ente + // configuration involves a redirection: + // + // 1. The browser makes a HTTP GET to a museum with credentials. Museum + // inspects the credentials, in this case the auth token, and if + // they're valid, returns a HTTP 307 redirect to the pre-signed S3 + // URL that to the file in the configured S3 bucket. + // + // 2. The browser follows the redirect to get the actual file. The URL + // is pre-signed, i.e. already has all credentials needed to prove to + // the S3 object storage that it should serve this response. + // + // For the first step normally we'd pass the auth the token via the + // "X-Auth-Token" HTTP header. In this case though, that would be + // problematic because the browser preserves the request headers when it + // follows the HTTP 307 redirect, and the "X-Auth-Token" header also + // gets sent to the redirected S3 request made in second step. + // + // To avoid this, we pass the token as a query parameter. Generally this + // is not a good idea, but in this case (a) the URL is not a user + // visible one and (b) even if it gets logged, it'll be in the + // self-hosters own service. + // + // Note that Ente's own servers don't have these concerns because we use + // a slightly different flow involving a proxy instead of directly + // connecting to the S3 storage. + // + // 1. The web browser makes a HTTP GET request to a proxy passing it the + // credentials in the "X-Auth-Token". + // + // 2. The proxy then does both the original steps: (a). Use the + // credentials to get the pre signed URL, and (b) fetch that pre + // signed URL and stream back the response. + + const getFile = () => { + if (customOrigin) { + const params = new URLSearchParams({ token }); + return fetch( + `${customOrigin}/files/download/${file.id}?${params.toString()}`, + ); + } else { + return fetch(`https://files.ente.io/?fileID=${file.id}`, { + headers: { + "X-Auth-Token": token, + }, + }); + } + }; + + return retryAsyncFunction(getFile); + } +} + +class PublicAlbumsDownloadClient implements DownloadClient { + private token: string; + private passwordToken: string; + + constructor(private timeout: number) {} + + updateTokens(token: string, passwordToken: string) { + this.token = token; + this.passwordToken = passwordToken; + } + + downloadThumbnail = async (file: EnteFile) => { + const accessToken = this.token; + const accessTokenJWT = this.passwordToken; + if (!accessToken) throw Error(CustomError.TOKEN_MISSING); + const customOrigin = await customAPIOrigin(); + + // See: [Note: Passing credentials for self-hosted file fetches] + const getThumbnail = () => { + const opts = { + responseType: "arraybuffer", + }; + + if (customOrigin) { + const params = new URLSearchParams({ + accessToken, + ...(accessTokenJWT && { accessTokenJWT }), + }); + return HTTPService.get( + `${customOrigin}/public-collection/files/preview/${file.id}?${params.toString()}`, + undefined, + undefined, + opts, + ); + } else { + return HTTPService.get( + `https://public-albums.ente.io/preview/?fileID=${file.id}`, + undefined, + { + "X-Auth-Access-Token": accessToken, + ...(accessTokenJWT && { + "X-Auth-Access-Token-JWT": accessTokenJWT, + }), + }, + opts, + ); + } + }; + + const resp = await getThumbnail(); + if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); + return new Uint8Array(resp.data); + }; + + downloadFile = async ( + file: EnteFile, + onDownloadProgress: (event: { loaded: number; total: number }) => void, + ) => { + const accessToken = this.token; + const accessTokenJWT = this.passwordToken; + if (!accessToken) throw Error(CustomError.TOKEN_MISSING); + + const customOrigin = await customAPIOrigin(); + + // See: [Note: Passing credentials for self-hosted file fetches] + const getFile = () => { + const opts = { + responseType: "arraybuffer", + timeout: this.timeout, + onDownloadProgress, + }; + + if (customOrigin) { + const params = new URLSearchParams({ + accessToken, + ...(accessTokenJWT && { accessTokenJWT }), + }); + return HTTPService.get( + `${customOrigin}/public-collection/files/download/${file.id}?${params.toString()}`, + undefined, + undefined, + opts, + ); + } else { + return HTTPService.get( + `https://public-albums.ente.io/download/?fileID=${file.id}`, + undefined, + { + "X-Auth-Access-Token": accessToken, + ...(accessTokenJWT && { + "X-Auth-Access-Token-JWT": accessTokenJWT, + }), + }, + opts, + ); + } + }; + + const resp = await retryAsyncFunction(getFile); + if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); + return new Uint8Array(resp.data); + }; + + async downloadFileStream(file: EnteFile): Promise { + const accessToken = this.token; + const accessTokenJWT = this.passwordToken; + if (!accessToken) throw Error(CustomError.TOKEN_MISSING); + + const customOrigin = await customAPIOrigin(); + + // See: [Note: Passing credentials for self-hosted file fetches] + const getFile = () => { + if (customOrigin) { + const params = new URLSearchParams({ + accessToken, + ...(accessTokenJWT && { accessTokenJWT }), + }); + return fetch( + `${customOrigin}/public-collection/files/download/${file.id}?${params.toString()}`, + ); + } else { + return fetch( + `https://public-albums.ente.io/download/?fileID=${file.id}`, + { + headers: { + "X-Auth-Access-Token": accessToken, + ...(accessTokenJWT && { + "X-Auth-Access-Token-JWT": accessTokenJWT, + }), + }, + }, + ); + } + }; + + return retryAsyncFunction(getFile); + } +} From 2cce5fb17cd27504c64ac7eaacb03158d6f339e0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 1 Jul 2024 20:42:14 +0530 Subject: [PATCH 134/466] Move more --- .../src/components/Upload/UploadProgress/dialog.tsx | 2 +- .../src/components/Upload/UploadProgress/footer.tsx | 2 +- .../Upload/UploadProgress/inProgressSection.tsx | 2 +- .../src/components/Upload/UploadProgress/index.tsx | 2 +- .../components/Upload/UploadProgress/progressBar.tsx | 2 +- .../Upload/UploadProgress/resultSection.tsx | 2 +- .../src/components/Upload/UploadProgress/title.tsx | 2 +- web/apps/photos/src/components/Upload/Uploader.tsx | 2 +- web/apps/photos/src/contexts/uploadProgress.tsx | 2 +- web/apps/photos/src/services/download/index.ts | 2 +- web/apps/photos/src/services/exif.ts | 7 +++++-- web/apps/photos/src/services/export/migration.ts | 2 +- web/apps/photos/src/services/ffmpeg.ts | 4 ++-- .../photos/src/services/locationSearchService.ts | 4 ++-- web/apps/photos/src/services/upload/takeout.ts | 4 ++-- web/apps/photos/src/services/upload/uploadManager.ts | 10 +++++----- web/apps/photos/src/services/upload/uploadService.ts | 12 ++++++------ web/apps/photos/src/services/watch.ts | 2 +- web/apps/photos/src/types/entity.ts | 2 +- .../src => packages/new/photos}/constants/upload.ts | 2 +- .../src => packages/new/photos}/types/metadata.ts | 4 ++-- 21 files changed, 38 insertions(+), 35 deletions(-) rename web/{apps/photos/src => packages/new/photos}/constants/upload.ts (91%) rename web/{apps/photos/src => packages/new/photos}/types/metadata.ts (73%) diff --git a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx index 1367b57ad5..da7f488f25 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx @@ -1,8 +1,8 @@ import { Dialog, DialogContent, Link } from "@mui/material"; import { t } from "i18next"; +import { UPLOAD_RESULT, UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { dialogCloseHandler } from "@ente/shared/components/DialogBox/TitleWithCloseButton"; -import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; import UploadProgressContext from "contexts/uploadProgress"; import { useContext, useEffect, useState } from "react"; import { Trans } from "react-i18next"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx index 5a5bebd201..6359009a9a 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx @@ -1,5 +1,5 @@ +import { UPLOAD_RESULT, UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { Button, DialogActions } from "@mui/material"; -import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; import { t } from "i18next"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx index 128e280abb..fba1a51db5 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx @@ -11,8 +11,8 @@ import { } from "./section"; import { InProgressItemContainer } from "./styledComponents"; +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { CaptionedText } from "components/CaptionedText"; -import { UPLOAD_STAGES } from "constants/upload"; export const InProgressSection = () => { const { inProgressUploads, hasLivePhotos, uploadFileNames, uploadStage } = diff --git a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx index 1acffd561e..da5fde0950 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import UploadProgressContext from "contexts/uploadProgress"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx index 6173829d7e..ba28ac7e19 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx @@ -1,5 +1,5 @@ +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { Box, Divider, LinearProgress } from "@mui/material"; -import { UPLOAD_STAGES } from "constants/upload"; import UploadProgressContext from "contexts/uploadProgress"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx index 1be6ca8317..93926fcf0e 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx @@ -1,7 +1,7 @@ +import { UPLOAD_RESULT } from "@/new/photos/constants/upload"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { CaptionedText } from "components/CaptionedText"; import ItemList from "components/ItemList"; -import { UPLOAD_RESULT } from "constants/upload"; import UploadProgressContext from "contexts/uploadProgress"; import { useContext } from "react"; import { diff --git a/web/apps/photos/src/components/Upload/UploadProgress/title.tsx b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx index 1b97b9b437..a123b4c009 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/title.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx @@ -1,10 +1,10 @@ +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { IconButtonWithBG, SpaceBetweenFlex, } from "@ente/shared/components/Container"; import Close from "@mui/icons-material/Close"; import { Box, DialogTitle, Stack, Typography } from "@mui/material"; -import { UPLOAD_STAGES } from "constants/upload"; import { t } from "i18next"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/Upload/Uploader.tsx b/web/apps/photos/src/components/Upload/Uploader.tsx index 170d2fcdc8..8afe1a41d1 100644 --- a/web/apps/photos/src/components/Upload/Uploader.tsx +++ b/web/apps/photos/src/components/Upload/Uploader.tsx @@ -1,3 +1,4 @@ +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { exportMetadataDirectoryName } from "@/new/photos/services/export"; import { basename } from "@/next/file"; import log from "@/next/log"; @@ -8,7 +9,6 @@ import { CustomError } from "@ente/shared/error"; import { isPromise } from "@ente/shared/utils"; import DiscFullIcon from "@mui/icons-material/DiscFull"; import UserNameInputDialog from "components/UserNameInputDialog"; -import { UPLOAD_STAGES } from "constants/upload"; import { t } from "i18next"; import isElectron from "is-electron"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/contexts/uploadProgress.tsx b/web/apps/photos/src/contexts/uploadProgress.tsx index b25df7d65b..440ec75c6d 100644 --- a/web/apps/photos/src/contexts/uploadProgress.tsx +++ b/web/apps/photos/src/contexts/uploadProgress.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { createContext } from "react"; import type { InProgressUpload, diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index e656c54484..421a540a5c 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -24,7 +24,7 @@ export type OnDownloadProgress = (event: { total: number; }) => void; -export interface DownloadClient { +interface DownloadClient { updateTokens: (token: string, passwordToken?: string) => void; downloadThumbnail: ( file: EnteFile, diff --git a/web/apps/photos/src/services/exif.ts b/web/apps/photos/src/services/exif.ts index 073a695f75..eed1f5ee17 100644 --- a/web/apps/photos/src/services/exif.ts +++ b/web/apps/photos/src/services/exif.ts @@ -1,10 +1,13 @@ import { type FileTypeInfo } from "@/media/file-type"; +import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import type { + Location, + ParsedExtractedMetadata, +} from "@/new/photos/types/metadata"; import log from "@/next/log"; import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; -import { NULL_LOCATION } from "constants/upload"; import exifr from "exifr"; import piexif from "piexifjs"; -import type { Location, ParsedExtractedMetadata } from "types/metadata"; type ParsedEXIFData = Record & Partial<{ diff --git a/web/apps/photos/src/services/export/migration.ts b/web/apps/photos/src/services/export/migration.ts index f46fc0a48e..da506e11e1 100644 --- a/web/apps/photos/src/services/export/migration.ts +++ b/web/apps/photos/src/services/export/migration.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import { exportMetadataDirectoryName } from "@/new/photos/services/export"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { mergeMetadata } from "@/new/photos/utils/file"; @@ -30,7 +31,6 @@ import { import { getNonEmptyPersonalCollections } from "utils/collection"; import { getIDBasedSortedFiles, getPersonalFiles } from "utils/file"; import { - exportMetadataDirectoryName, getCollectionIDFromFileUID, getExportRecordFileUID, getLivePhotoExportName, diff --git a/web/apps/photos/src/services/ffmpeg.ts b/web/apps/photos/src/services/ffmpeg.ts index 342a6fca57..ded7a5baff 100644 --- a/web/apps/photos/src/services/ffmpeg.ts +++ b/web/apps/photos/src/services/ffmpeg.ts @@ -1,3 +1,5 @@ +import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import type { ParsedExtractedMetadata } from "@/new/photos/types/metadata"; import { readConvertToMP4Done, readConvertToMP4Stream, @@ -12,8 +14,6 @@ import { inputPathPlaceholder, outputPathPlaceholder, } from "constants/ffmpeg"; -import { NULL_LOCATION } from "constants/upload"; -import type { ParsedExtractedMetadata } from "types/metadata"; import type { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; import { toDataOrPathOrZipEntry, diff --git a/web/apps/photos/src/services/locationSearchService.ts b/web/apps/photos/src/services/locationSearchService.ts index 354c87a712..07c805bac0 100644 --- a/web/apps/photos/src/services/locationSearchService.ts +++ b/web/apps/photos/src/services/locationSearchService.ts @@ -1,6 +1,6 @@ +import type { Location } from "@/new/photos/types/metadata"; import log from "@/next/log"; -import { LocationTagData } from "types/entity"; -import { Location } from "types/metadata"; +import type { LocationTagData } from "types/entity"; export interface City { city: string; diff --git a/web/apps/photos/src/services/upload/takeout.ts b/web/apps/photos/src/services/upload/takeout.ts index 2cd0f342d6..f2bcdee38b 100644 --- a/web/apps/photos/src/services/upload/takeout.ts +++ b/web/apps/photos/src/services/upload/takeout.ts @@ -1,11 +1,11 @@ /** @file Dealing with the JSON metadata in Google Takeouts */ +import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import type { Location } from "@/new/photos/types/metadata"; import { readStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; -import { NULL_LOCATION } from "constants/upload"; -import type { Location } from "types/metadata"; import type { UploadItem } from "./types"; export interface ParsedMetadataJSON { diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index 869bbbad27..be4ced8a92 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -1,5 +1,10 @@ import { FILE_TYPE } from "@/media/file-type"; import { potentialFileTypeFromExtension } from "@/media/live-photo"; +import { + RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, + UPLOAD_RESULT, + UPLOAD_STAGES, +} from "@/new/photos/constants/upload"; import { getLocalFiles } from "@/new/photos/services/files"; import { EncryptedEnteFile, EnteFile } from "@/new/photos/types/file"; import { ensureElectron } from "@/next/electron"; @@ -15,11 +20,6 @@ import { CustomError } from "@ente/shared/error"; import { Events, eventBus } from "@ente/shared/events"; import { Canceler } from "axios"; import type { Remote } from "comlink"; -import { - RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, - UPLOAD_RESULT, - UPLOAD_STAGES, -} from "constants/upload"; import isElectron from "is-electron"; import { getLocalPublicFiles, diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index bfe682cb1b..81cf6645f8 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -2,6 +2,11 @@ import { hasFileHash } from "@/media/file"; import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { encodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import { + NULL_LOCATION, + RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, + UPLOAD_RESULT, +} from "@/new/photos/constants/upload"; import { EnteFile, MetadataFileAttributes, @@ -11,6 +16,7 @@ import { type FilePublicMagicMetadataProps, } from "@/new/photos/types/file"; import { EncryptedMagicMetadata } from "@/new/photos/types/magicMetadata"; +import type { ParsedExtractedMetadata } from "@/new/photos/types/metadata"; import { detectFileTypeInfoFromChunk } from "@/new/photos/utils/detect-type"; import { readStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; @@ -23,11 +29,6 @@ import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/internal/libsodium"; import { CustomError, handleUploadError } from "@ente/shared/error"; import type { Remote } from "comlink"; -import { - NULL_LOCATION, - RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, - UPLOAD_RESULT, -} from "constants/upload"; import { addToCollection } from "services/collectionService"; import { parseImageMetadata } from "services/exif"; import * as ffmpeg from "services/ffmpeg"; @@ -35,7 +36,6 @@ import { PublicUploadProps, type LivePhotoAssets, } from "services/upload/uploadManager"; -import type { ParsedExtractedMetadata } from "types/metadata"; import { getNonEmptyMagicMetadataProps, updateMagicMetadata, diff --git a/web/apps/photos/src/services/watch.ts b/web/apps/photos/src/services/watch.ts index 597bbe29cc..2e9519dbf5 100644 --- a/web/apps/photos/src/services/watch.ts +++ b/web/apps/photos/src/services/watch.ts @@ -3,6 +3,7 @@ * watch folders functionality. */ +import { UPLOAD_RESULT } from "@/new/photos/constants/upload"; import { getLocalFiles } from "@/new/photos/services/files"; import { EncryptedEnteFile } from "@/new/photos/types/file"; import { ensureElectron } from "@/next/electron"; @@ -14,7 +15,6 @@ import type { FolderWatchSyncedFile, } from "@/next/types/ipc"; import { ensureString } from "@/utils/ensure"; -import { UPLOAD_RESULT } from "constants/upload"; import debounce from "debounce"; import uploadManager, { type UploadItemWithCollection, diff --git a/web/apps/photos/src/types/entity.ts b/web/apps/photos/src/types/entity.ts index 60844ce466..0f22973d21 100644 --- a/web/apps/photos/src/types/entity.ts +++ b/web/apps/photos/src/types/entity.ts @@ -1,4 +1,4 @@ -import { Location } from "types/metadata"; +import { Location } from "@/new/photos/types/metadata"; export enum EntityType { LOCATION_TAG = "location", diff --git a/web/apps/photos/src/constants/upload.ts b/web/packages/new/photos/constants/upload.ts similarity index 91% rename from web/apps/photos/src/constants/upload.ts rename to web/packages/new/photos/constants/upload.ts index a0103cb6e6..fcee4df18c 100644 --- a/web/apps/photos/src/constants/upload.ts +++ b/web/packages/new/photos/constants/upload.ts @@ -1,4 +1,4 @@ -import { Location } from "types/metadata"; +import type { Location } from "../types/metadata"; export const RANDOM_PERCENTAGE_PROGRESS_FOR_PUT = () => 90 + 10 * Math.random(); diff --git a/web/apps/photos/src/types/metadata.ts b/web/packages/new/photos/types/metadata.ts similarity index 73% rename from web/apps/photos/src/types/metadata.ts rename to web/packages/new/photos/types/metadata.ts index 7994e62479..626493211f 100644 --- a/web/apps/photos/src/types/metadata.ts +++ b/web/packages/new/photos/types/metadata.ts @@ -1,6 +1,6 @@ export interface Location { - latitude: number; - longitude: number; + latitude: number | null; + longitude: number | null; } export interface ParsedExtractedMetadata { From a2599f34157823be9eff69413973480229501e28 Mon Sep 17 00:00:00 2001 From: Nikunj Kumar Nakum <40589688+nikunjkumarnakum@users.noreply.github.com> Date: Tue, 2 Jul 2024 00:15:33 +0530 Subject: [PATCH 135/466] updated coindcx icon and added 2 more icons added new HTX and bitmart icons --- auth/assets/custom-icons/icons/bitmart.svg | 6 ++++++ auth/assets/custom-icons/icons/coindcx.svg | 4 ++-- auth/assets/custom-icons/icons/htx.svg | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 auth/assets/custom-icons/icons/bitmart.svg create mode 100644 auth/assets/custom-icons/icons/htx.svg diff --git a/auth/assets/custom-icons/icons/bitmart.svg b/auth/assets/custom-icons/icons/bitmart.svg new file mode 100644 index 0000000000..b0bd934e07 --- /dev/null +++ b/auth/assets/custom-icons/icons/bitmart.svg @@ -0,0 +1,6 @@ + diff --git a/auth/assets/custom-icons/icons/coindcx.svg b/auth/assets/custom-icons/icons/coindcx.svg index a1c7bb7a1f..2a5413cea6 100644 --- a/auth/assets/custom-icons/icons/coindcx.svg +++ b/auth/assets/custom-icons/icons/coindcx.svg @@ -1,4 +1,4 @@ - - + + diff --git a/auth/assets/custom-icons/icons/htx.svg b/auth/assets/custom-icons/icons/htx.svg new file mode 100644 index 0000000000..16877d4516 --- /dev/null +++ b/auth/assets/custom-icons/icons/htx.svg @@ -0,0 +1,6 @@ + + + + + + From 23b0ea67ae70d538a6126c63bb20d1d294fdc924 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Tue, 2 Jul 2024 02:10:11 +0000 Subject: [PATCH 136/466] New Crowdin translations by GitHub Action --- auth/lib/l10n/arb/app_ca.arb | 1 + auth/lib/l10n/arb/app_es.arb | 40 ++++++- auth/lib/l10n/arb/app_pl.arb | 55 ++++++++- auth/lib/l10n/arb/app_pt.arb | 6 +- auth/lib/l10n/arb/app_ro.arb | 210 +++++++++++++++++++++++++++++++++++ auth/lib/l10n/arb/app_tr.arb | 4 + 6 files changed, 309 insertions(+), 7 deletions(-) create mode 100644 auth/lib/l10n/arb/app_ca.arb create mode 100644 auth/lib/l10n/arb/app_ro.arb diff --git a/auth/lib/l10n/arb/app_ca.arb b/auth/lib/l10n/arb/app_ca.arb new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/auth/lib/l10n/arb/app_ca.arb @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_es.arb b/auth/lib/l10n/arb/app_es.arb index f0c8971a0f..32d0ca879d 100644 --- a/auth/lib/l10n/arb/app_es.arb +++ b/auth/lib/l10n/arb/app_es.arb @@ -20,6 +20,8 @@ "codeIssuerHint": "Emisor", "codeSecretKeyHint": "Llave Secreta", "codeAccountHint": "Cuenta (tu@dominio.com)", + "codeTagHint": "Marcado", + "accountKeyType": "Tipo de llave", "sessionExpired": "La sesión ha expirado", "@sessionExpired": { "description": "Title of the dialog when the users current session is invalid/expired" @@ -77,12 +79,14 @@ "data": "Datos", "importCodes": "Importar códigos", "importTypePlainText": "Texto sin formato", + "importTypeEnteEncrypted": "Exportación cifrada Ente", "passwordForDecryptingExport": "Contraseña para descifrar exportación", "passwordEmptyError": "La contraseña no puede estar vacía", "importFromApp": "Importar códigos de {appName}", "importGoogleAuthGuide": "Exportar tus cuentas desde Google Authenticator a un código QR usando la opción \"Transferir Cuentas\". A continuación, usando otro dispositivo, escanee el código QR.\n\nConsejo: Puede usar la webcam de su portátil para tomar una foto del código QR.", "importSelectJsonFile": "Seleccione el archivo JSON", "importSelectAppExport": "Seleccione el archivo de exportación de {appName}", + "importEnteEncGuide": "Seleccione el archivo JSON cifrado exportado desde Ente", "importRaivoGuide": "Utilice la opción \"Exportar códigos a un archivo de Zip\" en la configuración de Raivo.\n\nExtraiga el archivo zip e importe el archivo JSON.", "importBitwardenGuide": "Use la opción \"Exportar caja fuerte\" dentro del menú Herramientas de Bitwarden e importe el fichero JSON no crifrado.", "importAegisGuide": "Utilice la opción \"Exportar la bóveda\" en ajustes de Aegis.\n\nSi tu bóveda es cifrada, necesitara entrar contraseña de bóveda para descifrar la bóveda.", @@ -119,12 +123,15 @@ "oops": "Ups", "suggestFeatures": "Sugerir funcionalidades", "faq": "Preguntas Frecuentes", + "faq_q_1": "¿Qué tan seguro es Auth?", + "faq_a_1": "Todos los códigos que copia de seguridad vía Ente se almacenan cifrados de extremo a extremo. Esto significa que solo usted puede acceder a sus códigos. Nuestras aplicaciones son de código abierto y nuestra criptografía ha sido auditada externamente.", "faq_q_2": "¿Puedo acceder a mis códigos en el escritorio?", "faq_a_2": "Puede acceder a tus códigos en la web en auth.ente.io.", "faq_q_3": "¿Cómo puedo borrar códigos?", "faq_a_3": "Puede eliminar un código deslizando a la izquierda en ese elemento.", "faq_q_4": "¿Cómo puedo apoyar este proyecto?", "faq_a_4": "Puedes apoyar el desarrollo de este proyecto suscribiéndote a nuestra app de Fotos en ente.io.", + "faq_q_5": "Cómo puedo habilitar bloqueo FaceID en Ente Auth", "faq_a_5": "Puede activar el bloqueo FaceID en Ajustes → Seguridad → Pantalla de bloqueo.", "somethingWentWrongMessage": "Algo ha ido mal, por favor, prueba otra vez", "leaveFamily": "Dejar plan familiar", @@ -151,6 +158,7 @@ } } }, + "invalidQRCode": "Código QR no válido", "noRecoveryKeyTitle": "¿Sin clave de recuperación?", "enterEmailHint": "Introduce tu dirección de correo electrónico", "invalidEmailTitle": "Dirección de correo electrónico no válida", @@ -195,6 +203,8 @@ "saveKey": "Guardar Clave", "save": "Guardar", "send": "Enviar", + "saveOrSendDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto) o enviarlo a otras aplicaciones?", + "saveOnlyDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto)?", "back": "Atrás", "createAccount": "Crear cuenta", "passwordStrength": "Fortaleza de la contraseña: {passwordStrengthValue}", @@ -253,12 +263,15 @@ "exportLogs": "Exportar registros", "enterYourRecoveryKey": "Introduzca su clave de recuperación", "tempErrorContactSupportIfPersists": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.", + "networkHostLookUpErr": "No se puede conectar a Ente. Por favor, comprueba tu configuración de red y ponte en contacto con el soporte técnico si el error persiste.", + "networkConnectionRefusedErr": "No se puede conectar a Ente. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con el soporte técnico.", "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.", "about": "Acerca de", "weAreOpenSource": "¡Somos de código abierto!", "privacy": "Privacidad", "terms": "Términos", "checkForUpdates": "Comprobar actualizaciones", + "checkStatus": "Comprobar estado", "downloadUpdate": "Descargar", "criticalUpdateAvailable": "Actualización crítica disponible", "updateAvailable": "Actualizacion disponible", @@ -342,6 +355,7 @@ "deleteCodeAuthMessage": "Autenticar para borrar código", "showQRAuthMessage": "Autenticar para mostrar código QR", "confirmAccountDeleteTitle": "Confirmar eliminación de la cuenta", + "confirmAccountDeleteMessage": "Esta cuenta está vinculada a otras aplicaciones de Ente, si utilizas alguna. Se programará la eliminación de los datos cargados en todas las aplicaciones de Ente, y tu cuenta se eliminará permanentemente.", "androidBiometricHint": "Verificar identidad", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." @@ -402,7 +416,31 @@ "doNotSignOut": "No cerrar la sesión", "hearUsWhereTitle": "¿Cómo conoció Ente? (opcional)", "hearUsExplanation": "No rastreamos las aplicaciones instaladas. ¡Nos ayudaría si nos dijera dónde nos encontró!", + "recoveryKeySaved": "¡Clave de recuperación guardada en la carpeta Descargas!", + "waitingForBrowserRequest": "Esperando la solicitud del navegador...", + "waitingForVerification": "Esperando verificación...", "passkey": "Llave de acceso", + "passKeyPendingVerification": "La verificación todavía está pendiente", + "loginSessionExpired": "La sesión ha expirado", + "loginSessionExpiredDetails": "Tu sesión ha expirado. Por favor, vuelve a iniciar sesión.", "developerSettingsWarning": "¿Estás seguro de que quieres modificar los ajustes de desarrollador?", - "developerSettings": "Ajustes de desarrollador" + "developerSettings": "Ajustes de desarrollador", + "serverEndpoint": "Punto final del servidor", + "invalidEndpoint": "Punto final no válido", + "invalidEndpointMessage": "Lo sentimos, el punto final introducido no es válido. Por favor, introduce un punto final válido y vuelve a intentarlo.", + "endpointUpdatedMessage": "Punto final actualizado con éxito", + "customEndpoint": "Conectado a {endpoint}", + "pinText": "Fijar", + "unpinText": "Desanclar", + "pinnedCodeMessage": "{code} ha sido anclado", + "unpinnedCodeMessage": "{code} ha sido desanclado", + "tags": "Etiquetas", + "createNewTag": "Crear Nueva Etiqueta", + "tag": "Etiqueta", + "create": "Crear", + "editTag": "Editar Etiqueta", + "deleteTagTitle": "¿Eliminar etiqueta?", + "deleteTagMessage": "¿Estás seguro de que quieres eliminar esta etiqueta? Esta acción es irreversible.", + "somethingWentWrongParsingCode": "No se han podido analizar los códigos {x}.", + "updateNotAvailable": "Actualización no disponible" } \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_pl.arb b/auth/lib/l10n/arb/app_pl.arb index c514c5127b..73dac7dc1d 100644 --- a/auth/lib/l10n/arb/app_pl.arb +++ b/auth/lib/l10n/arb/app_pl.arb @@ -20,6 +20,7 @@ "codeIssuerHint": "Wydawca", "codeSecretKeyHint": "Tajny klucz", "codeAccountHint": "Konto (ty@domena.com)", + "codeTagHint": "Oznacz", "accountKeyType": "Rodzaj klucza", "sessionExpired": "Sesja wygasła", "@sessionExpired": { @@ -78,16 +79,19 @@ "data": "Dane", "importCodes": "Importuj kody", "importTypePlainText": "Zwykły tekst", - "importTypeEnteEncrypted": "Zaszyfrowany eksport ente", + "importTypeEnteEncrypted": "Zaszyfrowany eksport Ente", "passwordForDecryptingExport": "Hasło do odszyfrowania eksportu", "passwordEmptyError": "Pole hasło nie może być puste", "importFromApp": "Importuj kody z {appName}", "importGoogleAuthGuide": "Wyeksportuj twoje konta z Google Authenticator do kodu QR używając opcji \"Przenieś konta\". Potem używając innego urządzenia, zeskanuj kod QR.", "importSelectJsonFile": "Wybierz plik JSON", "importSelectAppExport": "Wybierz plik eksportu {appName}", - "importEnteEncGuide": "Wybierz zaszyfrowany plik JSON wyeksportowany z ente", + "importEnteEncGuide": "Wybierz zaszyfrowany plik JSON wyeksportowany z Ente", "importRaivoGuide": "Użyj opcji \"Eksportuj OTP do archiwum ZIP\" w Ustawieniach Raivo.\n\nWyodrębnij plik zip i zaimportuj plik JSON.", + "importBitwardenGuide": "Użyj opcji \"Eksportuj sejf\" w Narzędziach Bitwarden i zaimportuj niezaszyfrowany plik JSON.", "importAegisGuide": "Użyj opcji \"Eksportuj sejf\" w ustawieniach Aegis.\n\nJeśli twój sejf jest zaszyfrowany, musisz wprowadzić hasło sejfu, aby odszyfrować sejf.", + "import2FasGuide": "Użyj opcji \"Ustawienia->Kopia Zapasowa-Eksport\" w 2FAS.\n\nJeśli twoja kopia zapasowa jest zaszyfrowana, musisz wprowadzić hasło, aby odszyfrować kopię zapasową", + "importLastpassGuide": "Użyj opcji \"Przenieś konta\" w Ustawieniach Lastpass Authenticator i naciśnij \"Eksportuj konta do pliku\". Zaimportuj pobrany plik JSON.", "exportCodes": "Eksportuj kody", "importLabel": "Importuj", "importInstruction": "Wybierz plik, który zawiera listę twoich kodów w następującym formacie", @@ -100,6 +104,7 @@ "authToChangeYourEmail": "Proszę uwierzytelnić, aby zmienić swój adres e-mail", "authToChangeYourPassword": "Proszę uwierzytelnić, aby zmienić hasło", "authToViewSecrets": "Proszę uwierzytelnić, aby wyświetlić swoje sekrety", + "authToInitiateSignIn": "Proszę uwierzytelnić się, aby zainicjować logowanie do kopii zapasowej.", "ok": "Ok", "cancel": "Anuluj", "yes": "Tak", @@ -111,7 +116,7 @@ "copied": "Skopiowano", "pleaseTryAgain": "Proszę spróbować ponownie", "existingUser": "Istniejący użytkownik", - "newUser": "Nowy do Ente", + "newUser": "Nowy/a do Ente", "delete": "Usuń", "enterYourPasswordHint": "Wprowadź swoje hasło", "forgotPassword": "Nie pamiętam hasła", @@ -119,12 +124,14 @@ "suggestFeatures": "Zaproponuj funkcje", "faq": "Najczęściej zadawane pytania (FAQ)", "faq_q_1": "Jak bezpieczny jest Auth?", + "faq_a_1": "Wszystkie kody, których tworzysz kopię zapasową za pomocą Ente są przechowywane zaszyfrowane end-to-end. Oznacza to, że tylko Ty możesz uzyskać dostęp do swoich kodów. Nasze aplikacje są otwarto-źródłowe, a nasza kryptografia została poddana zewnętrznemu audytowi.", "faq_q_2": "Czy mogę uzyskać dostęp do moich kodów na komputerze?", "faq_a_2": "Możesz uzyskać dostęp do swoich kodów na stronie auth.ente.io.", "faq_q_3": "Jak mogę usunąć kody?", "faq_a_3": "Możesz usunąć kod, przesuwając go w lewo.", "faq_q_4": "Jak mogę wesprzeć ten projekt?", "faq_a_4": "Możesz wspierać rozwój tego projektu, subskrybując do naszej aplikacji Zdjęcia na ente.io.", + "faq_q_5": "Jak mogę włączyć blokadę FaceID w Ente Auth", "faq_a_5": "Możesz włączyć blokadę FaceID w Ustawienia → Bezpieczeństwo→ Ekran blokady.", "somethingWentWrongMessage": "Coś poszło nie tak. Proszę, spróbuj ponownie", "leaveFamily": "Opuść rodzinę", @@ -138,6 +145,8 @@ "enterCodeHint": "Wprowadź sześciocyfrowy kod z twojej aplikacji uwierzytelniającej", "lostDeviceTitle": "Zagubiono urządzenie?", "twoFactorAuthTitle": "Uwierzytelnianie dwuetapowe", + "passkeyAuthTitle": "Weryfikacja kluczem dostępu", + "verifyPasskey": "Zweryfikuj klucz dostępu", "recoverAccount": "Odzyskaj konto", "enterRecoveryKeyHint": "Wprowadź swój klucz odzyskiwania", "recover": "Odzyskaj", @@ -194,6 +203,8 @@ "saveKey": "Zapisz klucz", "save": "Zapisz", "send": "Wyślij", + "saveOrSendDescription": "Czy chcesz zapisać to do pamięci masowej (domyślnie folder Pobrane) czy wysłać to do innych aplikacji?", + "saveOnlyDescription": "Czy chcesz zapisać to do pamięci masowej (domyślnie folder Pobrane)?", "back": "Wstecz", "createAccount": "Utwórz konto", "passwordStrength": "Siła hasła: {passwordStrengthValue}", @@ -252,12 +263,15 @@ "exportLogs": "Eksportuj logi", "enterYourRecoveryKey": "Wprowadź swój klucz odzyskiwania", "tempErrorContactSupportIfPersists": "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej.", + "networkHostLookUpErr": "Nie można połączyć się z Ente, sprawdź ustawienia sieci i skontaktuj się z pomocą techniczną, jeśli błąd będzie się powtarzał.", + "networkConnectionRefusedErr": "Nie można połączyć się z Ente, spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z pomocą techniczną.", "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej.", "about": "O nas", "weAreOpenSource": "Posiadamy otwarte źródło!", "privacy": "Prywatność", "terms": "Warunki", "checkForUpdates": "Sprawdź czy są dostępne nowe aktualizacje", + "checkStatus": "Sprawdź stan", "downloadUpdate": "Pobierz", "criticalUpdateAvailable": "Dostępna jest krytyczna aktualizacja", "updateAvailable": "Dostępna jest aktualizacja", @@ -333,6 +347,7 @@ "offlineModeWarning": "Wybrałeś kontynuację bez kopii zapasowych. Proszę wykonywać ręczne kopie zapasowe, aby upewnić się, że Twoje kody są bezpieczne.", "showLargeIcons": "Pokaż duże ikony", "shouldHideCode": "Ukryj kody", + "doubleTapToViewHiddenCode": "Możesz kliknąć dwukrotnie na wpis, aby wyświetlić kod", "focusOnSearchBar": "Uaktywnij wyszukiwanie przy uruchamianiu aplikacji", "confirmUpdatingkey": "Czy na pewno chcesz zaktualizować tajny klucz?", "minimizeAppOnCopy": "Minimalizuj aplikację przy kopiowaniu", @@ -340,6 +355,7 @@ "deleteCodeAuthMessage": "Uwierzytelnij, aby usunąć kod", "showQRAuthMessage": "Uwierzytelnij, aby pokazać kod QR", "confirmAccountDeleteTitle": "Potwierdź usunięcie konta", + "confirmAccountDeleteMessage": "To konto jest połączone z innymi aplikacjami Ente, jeśli ich używasz.\n\nTwoje przesłane dane, we wszystkich aplikacjach Ente, zostaną zaplanowane do usunięcia, a Twoje konto zostanie trwale usunięte.", "androidBiometricHint": "Potwierdź swoją tożsamość", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." @@ -364,10 +380,30 @@ "@androidBiometricRequiredTitle": { "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." }, + "androidDeviceCredentialsRequiredTitle": "Wymagane dane logowania urządzenia", + "@androidDeviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + }, + "androidDeviceCredentialsSetupDescription": "Wymagane dane logowania urządzenia", + "@androidDeviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + }, "goToSettings": "Przejdź do Ustawień", "@goToSettings": { "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." }, + "androidGoToSettingsDescription": "Uwierzytelnianie biometryczne nie jest skonfigurowane na tym urządzeniu. Przejdź do 'Ustawienia > Bezpieczeństwo', aby dodać uwierzytelnianie biometryczne.", + "@androidGoToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side." + }, + "iOSLockOut": "Uwierzytelnianie biometryczne jest wyłączone. Proszę zablokować i odblokować ekran, aby je włączyć.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + }, + "iOSGoToSettingsDescription": "Uwierzytelnianie biometryczne nie jest skonfigurowane na Twoim urządzeniu. Proszę włączyć Touch ID lub Face ID na swoim telefonie.", + "@iOSGoToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side." + }, "iOSOkButton": "OK", "@iOSOkButton": { "description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters." @@ -379,19 +415,32 @@ "signOutOtherDevices": "Wyloguj z pozostałych urządzeń", "doNotSignOut": "Nie wylogowuj mnie", "hearUsWhereTitle": "Jak usłyszałeś o Ente? (opcjonalnie)", + "hearUsExplanation": "Nie śledzimy instalacji aplikacji. Pomogłyby nam, gdybyś powiedział/a nam, gdzie nas znalazłeś/aś!", "recoveryKeySaved": "Klucz odzyskiwania zapisany w folderze Pobrane!", + "waitingForBrowserRequest": "Oczekiwanie na żądanie przeglądarki...", "waitingForVerification": "Oczekiwanie na weryfikację...", + "passkey": "Klucz dostępu", + "passKeyPendingVerification": "Weryfikacja jest nadal w toku", "loginSessionExpired": "Sesja wygasła", "loginSessionExpiredDetails": "Twoja sesja wygasła. Zaloguj się ponownie.", "developerSettingsWarning": "Czy na pewno chcesz zmodyfikować ustawienia programisty?", "developerSettings": "Ustawienia deweloperskie", + "serverEndpoint": "Punkt końcowy serwera", + "invalidEndpoint": "Punkt końcowy jest nieprawidłowy", + "invalidEndpointMessage": "Niestety, wprowadzony punkt końcowy jest nieprawidłowy. Wprowadź prawidłowy punkt końcowy i spróbuj ponownie.", + "endpointUpdatedMessage": "Punkt końcowy zaktualizowany pomyślnie", "customEndpoint": "Połączono z {endpoint}", "pinText": "Przypnij", "unpinText": "Odepnij", "pinnedCodeMessage": "Przypięto {code}", "unpinnedCodeMessage": "Odpięto {code}", + "tags": "Etykiety", + "createNewTag": "Utwórz Nową Etykietę", + "tag": "Etykieta", "create": "Utwórz", + "editTag": "Edytuj Etykietę", "deleteTagTitle": "Usunąć etykietę?", + "deleteTagMessage": "Czy na pewno chcesz usunąć tę etykietę? Ta akcja jest nieodwracalna.", "somethingWentWrongParsingCode": "Nie udało się przetworzyć kodów {x}.", "updateNotAvailable": "Aktualizacja jest niedostępna" } \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_pt.arb b/auth/lib/l10n/arb/app_pt.arb index fc9a8fb420..f908eb466b 100644 --- a/auth/lib/l10n/arb/app_pt.arb +++ b/auth/lib/l10n/arb/app_pt.arb @@ -146,7 +146,7 @@ "lostDeviceTitle": "Perdeu um dispositivo?", "twoFactorAuthTitle": "Autenticação de dois fatores", "passkeyAuthTitle": "Autenticação via Chave de acesso", - "verifyPasskey": "Verificar senha-mestra", + "verifyPasskey": "Verificar chave de acesso", "recoverAccount": "Recuperar conta", "enterRecoveryKeyHint": "Digite a chave de recuperação", "recover": "Recuperar", @@ -419,7 +419,7 @@ "recoveryKeySaved": "Chave de recuperação salva na pasta Downloads!", "waitingForBrowserRequest": "Aguardando solicitação do navegador...", "waitingForVerification": "Esperando por verificação...", - "passkey": "Senha-mestra", + "passkey": "Chave de acesso", "passKeyPendingVerification": "A verificação ainda está pendente", "loginSessionExpired": "Sessão expirada", "loginSessionExpiredDetails": "Sua sessão expirou. Por favor, entre novamente.", @@ -442,5 +442,5 @@ "deleteTagTitle": "Apagar etiqueta?", "deleteTagMessage": "Tem certeza de que deseja excluir esta etiqueta? Essa ação é irreversível.", "somethingWentWrongParsingCode": "Não foi possível analisar os códigos {x}.", - "updateNotAvailable": "Atualização não está disponível" + "updateNotAvailable": "Atualização indisponível" } \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_ro.arb b/auth/lib/l10n/arb/app_ro.arb new file mode 100644 index 0000000000..a5a6c31c67 --- /dev/null +++ b/auth/lib/l10n/arb/app_ro.arb @@ -0,0 +1,210 @@ +{ + "unlock": "Deblochează", + "recoveryKey": "Cheie de recuperare", + "onBoardingGetStarted": "Începe", + "setupFirstAccount": "Configurează primul cont", + "importScanQrCode": "Scanează un cod QR", + "qrCode": "Cod QR", + "importEnterSetupKey": "Introdu o cheie de configurare", + "importAccountPageTitle": "Introdu detaliile contului", + "incorrectDetails": "Detalii incorecte", + "codeIssuerHint": "Emitent", + "codeSecretKeyHint": "Cheie Secretă", + "codeTagHint": "Etichetă", + "accountKeyType": "Tipul de cheie", + "sessionExpired": "Sesiune expirată", + "@sessionExpired": { + "description": "Title of the dialog when the users current session is invalid/expired" + }, + "pleaseLoginAgain": "Te rugăm să te autentifici din nou", + "loggingOut": "Deconectare...", + "timeBasedKeyType": "Bazat pe timp (TOTP)", + "counterBasedKeyType": "Bazat pe contor (HOTP)", + "saveAction": "Salvare", + "nextTotpTitle": "următor", + "viewLogsAction": "Afișare jurnale", + "preparingLogsTitle": "Se pregătesc jurnalele...", + "emailLogsTitle": "Jurnale e-mail", + "emailLogsMessage": "Te rugăm să trimiți jurnalele la {email}", + "@emailLogsMessage": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "copyEmailAction": "Copiază e-mailul", + "reportABug": "Raportează o eroare", + "crashAndErrorReporting": "Închidere accidentală şi raportare erori", + "reportBug": "Raportare bug", + "emailUsMessage": "Te rugăm să ne trimiți un e-mail la {email}", + "@emailUsMessage": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "contactSupport": "Contactează suportul", + "rateUsOnStore": "Evaluează-ne pe {storeName}", + "blog": "Blog", + "verifyPassword": "Verifică parola", + "pleaseWait": "Te rog așteaptă...", + "recreatePassword": "Recreează parola", + "incorrectPasswordTitle": "Parolă incorectă", + "welcomeBack": "Bine ai revenit!", + "supportDevs": "Abonează-te la ente pentru a ne susține", + "supportDiscount": "Folosește codul \"AUTH\" pentru a obține o reducere de 10% în primul an", + "changeEmail": "Schimbă e-mailul", + "changePassword": "Schimbă parola", + "importCodes": "Importă coduri", + "importTypePlainText": "Text simplu", + "passwordForDecryptingExport": "Parola pentru a decripta exportul", + "passwordEmptyError": "Parola nu poate fi goală", + "importFromApp": "Importă coduri din {appName}", + "importSelectJsonFile": "Selectează fișierul JSON", + "importSelectAppExport": "Selectează fișierul de export din {appName}", + "importEnteEncGuide": "Selectează fișierul criptat JSON exportat din Bențe", + "exportCodes": "Exportă coduri", + "importLabel": "Importă", + "selectFile": "Selectează fișier", + "emailVerificationToggle": "Verificarea adresei de e-mail", + "authToChangeEmailVerificationSetting": "Te rugăm să te autentifici pentru a schimba verificarea prin e-mail", + "authToChangeYourEmail": "Te rugăm să te autentifici pentru a-ți schimba adresa de e-mail", + "ok": "Ok", + "cancel": "Anulare", + "yes": "Da", + "no": "Nu", + "email": "E-mail", + "support": "Asistență", + "general": "General", + "settings": "Setări", + "copied": "S-a copiat", + "pleaseTryAgain": "Te rugăm să încerci din nou", + "existingUser": "Utilizator existent", + "delete": "Ștergere", + "enterYourPasswordHint": "Introdu parola", + "forgotPassword": "Am uitat parola", + "oops": "Ups", + "faq": "Întrebări frecvente", + "faq_q_1": "Cât de sigur este Auth?", + "faq_q_2": "Pot accesa codurile de pe desktop?", + "faq_q_3": "Cum pot șterge codurile?", + "faq_q_4": "Cum pot susţine acest proiect?", + "faq_q_5": "Cum pot activa blocarea cu FaceID în Auth", + "faq_a_5": "Poți activa blocarea FaceID din Setări → Securitate → Ecran de blocare.", + "somethingWentWrongMessage": "Ceva n-a mers bine, te rog încearcă din nou", + "leaveFamily": "Părăsește familia", + "verifyEmail": "Verifică e-mail", + "twoFactorAuthTitle": "Autentificare cu doi factori", + "recoverAccount": "Recuperare cont", + "invalidQRCode": "Codul QR nu este valid", + "enterEmailHint": "Introdu adresa ta de e-mail", + "invalidEmailTitle": "Adresa e-mail nu este validă", + "invalidEmailMessage": "Te rugăm să introduci o adresă de e-mail validă.", + "deleteAccount": "Ștergere cont", + "yesSendFeedbackAction": "Da, trimite feedback", + "noDeleteAccountAction": "Nu, șterge contul", + "initiateAccountDeleteTitle": "Te rugăm să te autentifici pentru a iniția ștergerea contului", + "sendEmail": "Trimite e-mail", + "confirmPassword": "Confirmă parola", + "close": "Închide", + "selectLanguage": "Selectare limbă", + "lockscreen": "Ecran de blocare", + "scanAQrCode": "Scanează un cod QR", + "copiedToClipboard": "Copiat în clipboard", + "copiedNextToClipboard": "Codul următor a fost copiat în clipboard", + "error": "Eroare", + "recoveryKeyOnForgotPassword": "Dacă îți uiți parola, singura modalitate prin care poți recupera datele este cu această cheie.", + "saveKey": "Salvare cheie", + "save": "Salvare", + "send": "Trimitere", + "back": "Înapoi", + "password": "Parolă", + "setPasswordTitle": "Setează parola", + "changePasswordTitle": "Schimbă parola", + "resetPasswordTitle": "Resetează parola", + "passwordWarning": "Nu stocăm această parolă, deci dacă o uiți, nu îți putem decripta datele", + "enterPasswordToEncrypt": "Introdu o parolă pe care o putem folosi pentru a-ți cripta datele", + "passwordChangedSuccessfully": "Parola a fost modificată cu succes", + "recreatePasswordTitle": "Recreează parola", + "invalidKey": "Cheie invalidă", + "tryAgain": "Încearcă din nou", + "viewRecoveryKey": "Vezi cheia de recuperare", + "pleaseSendTheLogsTo": "Te rugăm să trimiți jurnalele la {toEmail}", + "copyEmailAddress": "Copiază adresa de e-mail", + "about": "Despre", + "weAreOpenSource": "Suntem open source!", + "privacy": "Confidențialitate", + "checkForUpdates": "Verifică actualizări", + "checkStatus": "Verifică status", + "downloadUpdate": "Descărcare", + "criticalUpdateAvailable": "Actualizare critică disponibilă", + "updateAvailable": "Actualizare disponibilă", + "update": "Actualizare", + "checking": "Se verifică...", + "youAreOnTheLatestVersion": "Utilizezi cea mai recentă versiune", + "warning": "Atenție", + "iUnderStand": "Înţeleg", + "@iUnderStand": { + "description": "Text for the button to confirm the user understands the warning" + }, + "importSuccessTitle": "Ura!", + "sorry": "Ne pare rău", + "pendingSyncs": "Atenție", + "tapToEnterCode": "Apasă pentru a introduce codul", + "resendEmail": "Retrimite e-mail", + "weHaveSendEmailTo": "Am trimis un e-mail la {email}", + "@weHaveSendEmailTo": { + "description": "Text to indicate that we have sent a mail to the user", + "placeholders": { + "email": { + "description": "The email address of the user", + "type": "String", + "example": "example@ente.io" + } + } + }, + "activeSessions": "Sesiuni active", + "somethingWentWrongPleaseTryAgain": "Ceva n-a mers bine, te rog încearcă din nou", + "thisDevice": "Acest dispozitiv", + "toResetVerifyEmail": "Pentru a reseta parola, te rugăm să confirmi mai întâi adresa de e-mail.", + "thisEmailIsAlreadyInUse": "Această adresă de e-mail este deja folosită", + "emailChangedTo": "E-mail modificat în {newEmail}", + "enterPassword": "Introdu parola", + "passwordToEncryptExport": "Parolă pentru a cripta exportul", + "androidBiometricHint": "Verifică identitatea", + "@androidBiometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricNotRecognized": "Neidentificat. Încearcă din nou.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricSuccess": "Succes", + "@androidBiometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "androidCancelButton": "Anulare", + "@androidCancelButton": { + "description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters." + }, + "androidSignInTitle": "Autentificare necesară", + "@androidSignInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "goToSettings": "Mergi la setări", + "@goToSettings": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + }, + "iOSOkButton": "Ok", + "@iOSOkButton": { + "description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters." + }, + "noInternetConnection": "Nu există conexiune la internet", + "signOutFromOtherDevices": "Deconectare de pe alte dispozitive", + "signOutOtherDevices": "Deconectează alte dispozitive", + "doNotSignOut": "Nu te deconecta", + "loginSessionExpired": "Sesiune expirată", + "updateNotAvailable": "Actualizare indisponibilă" +} \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_tr.arb b/auth/lib/l10n/arb/app_tr.arb index 2473067b74..fd2cac27f9 100644 --- a/auth/lib/l10n/arb/app_tr.arb +++ b/auth/lib/l10n/arb/app_tr.arb @@ -269,6 +269,7 @@ "privacy": "Gizlilik", "terms": "Şartlar", "checkForUpdates": "Güncellemeleri denetleyin", + "checkStatus": "Durumu kontrol et", "downloadUpdate": "İndir", "criticalUpdateAvailable": "Kritik güncelleme mevcut", "updateAvailable": "Güncelleme mevcut", @@ -417,6 +418,9 @@ "waitingForBrowserRequest": "Tarayıcı isteği bekleniyor...", "waitingForVerification": "Doğrulama bekleniyor...", "passkey": "Geçiş anahtarı", + "passKeyPendingVerification": "Doğrulama hala bekliyor", + "loginSessionExpired": "Oturum süresi doldu", + "loginSessionExpiredDetails": "Oturum süreniz doldu. Tekrar giriş yapın.", "developerSettingsWarning": "Geliştirici ayarlarını değiştirmekten emin misiniz?", "developerSettings": "Geliştirici ayarları", "serverEndpoint": "Sunucu uç noktası", From 93488e149d7a866e3b5342810da990963e6b809b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:13:30 +0530 Subject: [PATCH 137/466] move and merge --- .../Upload/UploadProgress/dialog.tsx | 5 +++- .../Upload/UploadProgress/footer.tsx | 5 +++- .../UploadProgress/inProgressSection.tsx | 2 +- .../Upload/UploadProgress/index.tsx | 2 +- .../Upload/UploadProgress/progressBar.tsx | 2 +- .../Upload/UploadProgress/resultSection.tsx | 2 +- .../Upload/UploadProgress/title.tsx | 2 +- .../photos/src/components/Upload/Uploader.tsx | 7 +++-- .../photos/src/contexts/uploadProgress.tsx | 2 +- web/apps/photos/src/services/exif.ts | 2 +- web/apps/photos/src/services/ffmpeg.ts | 12 ++++----- .../photos/src/services/upload/takeout.ts | 4 +-- .../photos/src/services/upload/thumbnail.ts | 5 +++- .../src/services/upload/uploadManager.ts | 6 ++--- .../src/services/upload/uploadService.ts | 4 +-- web/apps/photos/src/services/watch.ts | 2 +- web/packages/new/photos/constants/upload.ts | 26 ------------------- .../new/photos}/services/upload/types.ts | 26 +++++++++++++++++++ 18 files changed, 64 insertions(+), 52 deletions(-) delete mode 100644 web/packages/new/photos/constants/upload.ts rename web/{apps/photos/src => packages/new/photos}/services/upload/types.ts (81%) diff --git a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx index da7f488f25..ded9e2c17f 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx @@ -1,7 +1,10 @@ import { Dialog, DialogContent, Link } from "@mui/material"; import { t } from "i18next"; -import { UPLOAD_RESULT, UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { + UPLOAD_RESULT, + UPLOAD_STAGES, +} from "@/new/photos/services/upload/types"; import { dialogCloseHandler } from "@ente/shared/components/DialogBox/TitleWithCloseButton"; import UploadProgressContext from "contexts/uploadProgress"; import { useContext, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx index 6359009a9a..7372392032 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx @@ -1,4 +1,7 @@ -import { UPLOAD_RESULT, UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { + UPLOAD_RESULT, + UPLOAD_STAGES, +} from "@/new/photos/services/upload/types"; import { Button, DialogActions } from "@mui/material"; import { t } from "i18next"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx index fba1a51db5..327cc43723 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx @@ -11,7 +11,7 @@ import { } from "./section"; import { InProgressItemContainer } from "./styledComponents"; -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import { CaptionedText } from "components/CaptionedText"; export const InProgressSection = () => { diff --git a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx index da5fde0950..3dc9d6cea8 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import UploadProgressContext from "contexts/uploadProgress"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx index ba28ac7e19..a18d9d7aa9 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import { Box, Divider, LinearProgress } from "@mui/material"; import UploadProgressContext from "contexts/uploadProgress"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx index 93926fcf0e..6c483bf49c 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_RESULT } from "@/new/photos/constants/upload"; +import { UPLOAD_RESULT } from "@/new/photos/services/upload/types"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { CaptionedText } from "components/CaptionedText"; import ItemList from "components/ItemList"; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/title.tsx b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx index a123b4c009..332ef57483 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/title.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import { IconButtonWithBG, SpaceBetweenFlex, diff --git a/web/apps/photos/src/components/Upload/Uploader.tsx b/web/apps/photos/src/components/Upload/Uploader.tsx index 8afe1a41d1..767b32c35d 100644 --- a/web/apps/photos/src/components/Upload/Uploader.tsx +++ b/web/apps/photos/src/components/Upload/Uploader.tsx @@ -1,5 +1,9 @@ -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; import { exportMetadataDirectoryName } from "@/new/photos/services/export"; +import type { + FileAndPath, + UploadItem, +} from "@/new/photos/services/upload/types"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import { basename } from "@/next/file"; import log from "@/next/log"; import type { CollectionMapping, Electron, ZipItem } from "@/next/types/ipc"; @@ -21,7 +25,6 @@ import { getPublicCollectionUploaderName, savePublicCollectionUploaderName, } from "services/publicCollectionService"; -import type { FileAndPath, UploadItem } from "services/upload/types"; import type { InProgressUpload, SegregatedFinishedUploads, diff --git a/web/apps/photos/src/contexts/uploadProgress.tsx b/web/apps/photos/src/contexts/uploadProgress.tsx index 440ec75c6d..1c98569b03 100644 --- a/web/apps/photos/src/contexts/uploadProgress.tsx +++ b/web/apps/photos/src/contexts/uploadProgress.tsx @@ -1,4 +1,4 @@ -import { UPLOAD_STAGES } from "@/new/photos/constants/upload"; +import { UPLOAD_STAGES } from "@/new/photos/services/upload/types"; import { createContext } from "react"; import type { InProgressUpload, diff --git a/web/apps/photos/src/services/exif.ts b/web/apps/photos/src/services/exif.ts index eed1f5ee17..d483dec745 100644 --- a/web/apps/photos/src/services/exif.ts +++ b/web/apps/photos/src/services/exif.ts @@ -1,5 +1,5 @@ import { type FileTypeInfo } from "@/media/file-type"; -import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import { NULL_LOCATION } from "@/new/photos/services/upload/types"; import type { Location, ParsedExtractedMetadata, diff --git a/web/apps/photos/src/services/ffmpeg.ts b/web/apps/photos/src/services/ffmpeg.ts index ded7a5baff..0d98e96a29 100644 --- a/web/apps/photos/src/services/ffmpeg.ts +++ b/web/apps/photos/src/services/ffmpeg.ts @@ -1,4 +1,9 @@ -import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import { + NULL_LOCATION, + toDataOrPathOrZipEntry, + type DesktopUploadItem, + type UploadItem, +} from "@/new/photos/services/upload/types"; import type { ParsedExtractedMetadata } from "@/new/photos/types/metadata"; import { readConvertToMP4Done, @@ -15,11 +20,6 @@ import { outputPathPlaceholder, } from "constants/ffmpeg"; import type { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; -import { - toDataOrPathOrZipEntry, - type DesktopUploadItem, - type UploadItem, -} from "./upload/types"; /** * Generate a thumbnail for the given video using a wasm FFmpeg running in a web diff --git a/web/apps/photos/src/services/upload/takeout.ts b/web/apps/photos/src/services/upload/takeout.ts index f2bcdee38b..e0b1307ed9 100644 --- a/web/apps/photos/src/services/upload/takeout.ts +++ b/web/apps/photos/src/services/upload/takeout.ts @@ -1,12 +1,12 @@ /** @file Dealing with the JSON metadata in Google Takeouts */ -import { NULL_LOCATION } from "@/new/photos/constants/upload"; +import type { UploadItem } from "@/new/photos/services/upload/types"; +import { NULL_LOCATION } from "@/new/photos/services/upload/types"; import type { Location } from "@/new/photos/types/metadata"; import { readStream } from "@/new/photos/utils/native-stream"; import { ensureElectron } from "@/next/electron"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; -import type { UploadItem } from "./types"; export interface ParsedMetadataJSON { creationTime: number; diff --git a/web/apps/photos/src/services/upload/thumbnail.ts b/web/apps/photos/src/services/upload/thumbnail.ts index 91260131d3..f40e1fefeb 100644 --- a/web/apps/photos/src/services/upload/thumbnail.ts +++ b/web/apps/photos/src/services/upload/thumbnail.ts @@ -1,12 +1,15 @@ import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { heicToJPEG } from "@/media/heic-convert"; import { scaledImageDimensions } from "@/media/image"; +import { + toDataOrPathOrZipEntry, + type DesktopUploadItem, +} from "@/new/photos/services/upload/types"; import log from "@/next/log"; import { type Electron } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; import { withTimeout } from "@/utils/promise"; import * as ffmpeg from "services/ffmpeg"; -import { toDataOrPathOrZipEntry, type DesktopUploadItem } from "./types"; /** Maximum width or height of the generated thumbnail */ const maxThumbnailDimension = 720; diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index be4ced8a92..b66b2ebf8f 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -1,11 +1,12 @@ import { FILE_TYPE } from "@/media/file-type"; import { potentialFileTypeFromExtension } from "@/media/live-photo"; +import { getLocalFiles } from "@/new/photos/services/files"; +import type { UploadItem } from "@/new/photos/services/upload/types"; import { RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, UPLOAD_RESULT, UPLOAD_STAGES, -} from "@/new/photos/constants/upload"; -import { getLocalFiles } from "@/new/photos/services/files"; +} from "@/new/photos/services/upload/types"; import { EncryptedEnteFile, EnteFile } from "@/new/photos/types/file"; import { ensureElectron } from "@/next/electron"; import { lowercaseExtension, nameAndExtension } from "@/next/file"; @@ -35,7 +36,6 @@ import { tryParseTakeoutMetadataJSON, type ParsedMetadataJSON, } from "./takeout"; -import type { UploadItem } from "./types"; import UploadService, { uploadItemFileName, uploader } from "./uploadService"; export type FileID = number; diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index 81cf6645f8..c4057feff5 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -2,11 +2,12 @@ import { hasFileHash } from "@/media/file"; import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { encodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import type { UploadItem } from "@/new/photos/services/upload/types"; import { NULL_LOCATION, RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, UPLOAD_RESULT, -} from "@/new/photos/constants/upload"; +} from "@/new/photos/services/upload/types"; import { EnteFile, MetadataFileAttributes, @@ -50,7 +51,6 @@ import { generateThumbnailNative, generateThumbnailWeb, } from "./thumbnail"; -import type { UploadItem } from "./types"; import UploadHttpClient from "./uploadHttpClient"; import type { UploadableUploadItem } from "./uploadManager"; diff --git a/web/apps/photos/src/services/watch.ts b/web/apps/photos/src/services/watch.ts index 2e9519dbf5..8c367ee71c 100644 --- a/web/apps/photos/src/services/watch.ts +++ b/web/apps/photos/src/services/watch.ts @@ -3,8 +3,8 @@ * watch folders functionality. */ -import { UPLOAD_RESULT } from "@/new/photos/constants/upload"; import { getLocalFiles } from "@/new/photos/services/files"; +import { UPLOAD_RESULT } from "@/new/photos/services/upload/types"; import { EncryptedEnteFile } from "@/new/photos/types/file"; import { ensureElectron } from "@/next/electron"; import { basename, dirname } from "@/next/file"; diff --git a/web/packages/new/photos/constants/upload.ts b/web/packages/new/photos/constants/upload.ts deleted file mode 100644 index fcee4df18c..0000000000 --- a/web/packages/new/photos/constants/upload.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Location } from "../types/metadata"; - -export const RANDOM_PERCENTAGE_PROGRESS_FOR_PUT = () => 90 + 10 * Math.random(); - -export const NULL_LOCATION: Location = { latitude: null, longitude: null }; - -export enum UPLOAD_STAGES { - START, - READING_GOOGLE_METADATA_FILES, - EXTRACTING_METADATA, - UPLOADING, - CANCELLING, - FINISH, -} - -export enum UPLOAD_RESULT { - FAILED, - ALREADY_UPLOADED, - UNSUPPORTED, - BLOCKED, - TOO_LARGE, - LARGER_THAN_AVAILABLE_STORAGE, - UPLOADED, - UPLOADED_WITH_STATIC_THUMBNAIL, - ADDED_SYMLINK, -} diff --git a/web/apps/photos/src/services/upload/types.ts b/web/packages/new/photos/services/upload/types.ts similarity index 81% rename from web/apps/photos/src/services/upload/types.ts rename to web/packages/new/photos/services/upload/types.ts index 25e2ab408a..f11ba90961 100644 --- a/web/apps/photos/src/services/upload/types.ts +++ b/web/packages/new/photos/services/upload/types.ts @@ -1,4 +1,5 @@ import type { ZipItem } from "@/next/types/ipc"; +import type { Location } from "../../types/metadata"; /** * An item to upload is one of the following: @@ -55,3 +56,28 @@ export const toDataOrPathOrZipEntry = (desktopUploadItem: DesktopUploadItem) => typeof desktopUploadItem == "string" || Array.isArray(desktopUploadItem) ? desktopUploadItem : desktopUploadItem.path; + +export const RANDOM_PERCENTAGE_PROGRESS_FOR_PUT = () => 90 + 10 * Math.random(); + +export const NULL_LOCATION: Location = { latitude: null, longitude: null }; + +export enum UPLOAD_STAGES { + START, + READING_GOOGLE_METADATA_FILES, + EXTRACTING_METADATA, + UPLOADING, + CANCELLING, + FINISH, +} + +export enum UPLOAD_RESULT { + FAILED, + ALREADY_UPLOADED, + UNSUPPORTED, + BLOCKED, + TOO_LARGE, + LARGER_THAN_AVAILABLE_STORAGE, + UPLOADED, + UPLOADED_WITH_STATIC_THUMBNAIL, + ADDED_SYMLINK, +} From f7324d5388d7a41b3887cf7a284a657766f840b5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:20:13 +0530 Subject: [PATCH 138/466] Move --- web/apps/photos/src/services/download/index.ts | 2 +- web/apps/photos/src/services/upload/thumbnail.ts | 2 +- web/apps/photos/src/services/upload/uploadService.ts | 2 +- .../new/photos/services/ffmpeg/constants.ts} | 0 .../new/photos/services/ffmpeg/index.ts} | 10 +++++++--- .../new/photos/services/ffmpeg/worker.ts} | 4 ++-- 6 files changed, 12 insertions(+), 8 deletions(-) rename web/{apps/photos/src/constants/ffmpeg.ts => packages/new/photos/services/ffmpeg/constants.ts} (100%) rename web/{apps/photos/src/services/ffmpeg.ts => packages/new/photos/services/ffmpeg/index.ts} (96%) rename web/{apps/photos/src/worker/ffmpeg.worker.ts => packages/new/photos/services/ffmpeg/worker.ts} (96%) diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index 421a540a5c..bbf17ca21f 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import * as ffmpeg from "@/new/photos/services/ffmpeg"; import { EnteFile, type LivePhotoSourceURL, @@ -17,7 +18,6 @@ import HTTPService from "@ente/shared/network/HTTPService"; import { retryAsyncFunction } from "@ente/shared/utils"; import type { Remote } from "comlink"; import isElectron from "is-electron"; -import * as ffmpeg from "services/ffmpeg"; export type OnDownloadProgress = (event: { loaded: number; diff --git a/web/apps/photos/src/services/upload/thumbnail.ts b/web/apps/photos/src/services/upload/thumbnail.ts index f40e1fefeb..255bc68ca3 100644 --- a/web/apps/photos/src/services/upload/thumbnail.ts +++ b/web/apps/photos/src/services/upload/thumbnail.ts @@ -1,6 +1,7 @@ import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { heicToJPEG } from "@/media/heic-convert"; import { scaledImageDimensions } from "@/media/image"; +import * as ffmpeg from "@/new/photos/services/ffmpeg"; import { toDataOrPathOrZipEntry, type DesktopUploadItem, @@ -9,7 +10,6 @@ import log from "@/next/log"; import { type Electron } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; import { withTimeout } from "@/utils/promise"; -import * as ffmpeg from "services/ffmpeg"; /** Maximum width or height of the generated thumbnail */ const maxThumbnailDimension = 720; diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts index c4057feff5..846c2d6f59 100644 --- a/web/apps/photos/src/services/upload/uploadService.ts +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -2,6 +2,7 @@ import { hasFileHash } from "@/media/file"; import { FILE_TYPE, type FileTypeInfo } from "@/media/file-type"; import { encodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import * as ffmpeg from "@/new/photos/services/ffmpeg"; import type { UploadItem } from "@/new/photos/services/upload/types"; import { NULL_LOCATION, @@ -32,7 +33,6 @@ import { CustomError, handleUploadError } from "@ente/shared/error"; import type { Remote } from "comlink"; import { addToCollection } from "services/collectionService"; import { parseImageMetadata } from "services/exif"; -import * as ffmpeg from "services/ffmpeg"; import { PublicUploadProps, type LivePhotoAssets, diff --git a/web/apps/photos/src/constants/ffmpeg.ts b/web/packages/new/photos/services/ffmpeg/constants.ts similarity index 100% rename from web/apps/photos/src/constants/ffmpeg.ts rename to web/packages/new/photos/services/ffmpeg/constants.ts diff --git a/web/apps/photos/src/services/ffmpeg.ts b/web/packages/new/photos/services/ffmpeg/index.ts similarity index 96% rename from web/apps/photos/src/services/ffmpeg.ts rename to web/packages/new/photos/services/ffmpeg/index.ts index 0d98e96a29..4e8e660978 100644 --- a/web/apps/photos/src/services/ffmpeg.ts +++ b/web/packages/new/photos/services/ffmpeg/index.ts @@ -1,3 +1,7 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/array-type */ +/* @ts-nocheck */ + import { NULL_LOCATION, toDataOrPathOrZipEntry, @@ -18,8 +22,8 @@ import { ffmpegPathPlaceholder, inputPathPlaceholder, outputPathPlaceholder, -} from "constants/ffmpeg"; -import type { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; +} from "./constants"; +import type { DedicatedFFmpegWorker } from "./worker"; /** * Generate a thumbnail for the given video using a wasm FFmpeg running in a web @@ -269,7 +273,7 @@ class WorkerFactory { private createComlinkWorker = () => new ComlinkWorker( "ffmpeg-worker", - new Worker(new URL("worker/ffmpeg.worker.ts", import.meta.url)), + new Worker(new URL("worker.ts", import.meta.url)), ); async lazy() { diff --git a/web/apps/photos/src/worker/ffmpeg.worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts similarity index 96% rename from web/apps/photos/src/worker/ffmpeg.worker.ts rename to web/packages/new/photos/services/ffmpeg/worker.ts index 06ba05be9e..49db8791c8 100644 --- a/web/apps/photos/src/worker/ffmpeg.worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -5,7 +5,7 @@ import { ffmpegPathPlaceholder, inputPathPlaceholder, outputPathPlaceholder, -} from "constants/ffmpeg"; +} from "./constants"; // When we run tsc on CI, the line below errors out // @@ -22,7 +22,7 @@ import { // Note that we can't use @ts-expect-error since it doesn't error out when // actually building! // -// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error // @ts-ignore import { FFmpeg, createFFmpeg } from "ffmpeg-wasm"; From 18194dc61a62f298e1d73662a57e29ebba5e7014 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:35:29 +0530 Subject: [PATCH 139/466] Fix tsc --- web/packages/new/photos/services/ffmpeg/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ffmpeg/index.ts b/web/packages/new/photos/services/ffmpeg/index.ts index 4e8e660978..2d29c5ad9b 100644 --- a/web/packages/new/photos/services/ffmpeg/index.ts +++ b/web/packages/new/photos/services/ffmpeg/index.ts @@ -14,6 +14,7 @@ import { readConvertToMP4Stream, writeConvertToMP4Stream, } from "@/new/photos/utils/native-stream"; +import { ensureElectron } from "@/next/electron"; import type { Electron } from "@/next/types/ipc"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; @@ -116,7 +117,7 @@ export const extractVideoMetadata = async ( const outputData = uploadItem instanceof File ? await ffmpegExecWeb(command, uploadItem, "txt") - : await electron.ffmpegExec( + : await ensureElectron().ffmpegExec( command, toDataOrPathOrZipEntry(uploadItem), "txt", @@ -268,7 +269,7 @@ const convertToMP4Native = async (electron: Electron, blob: Blob) => { /** Lazily create a singleton instance of our worker */ class WorkerFactory { - private instance: Promise>; + private instance: Promise> | undefined; private createComlinkWorker = () => new ComlinkWorker( From b88d6d26a64f088a2a10c0fc1c09670e3d7b107f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:37:44 +0530 Subject: [PATCH 140/466] Fix tsc --- web/packages/new/photos/services/ffmpeg/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/services/ffmpeg/index.ts b/web/packages/new/photos/services/ffmpeg/index.ts index 2d29c5ad9b..578f74cceb 100644 --- a/web/packages/new/photos/services/ffmpeg/index.ts +++ b/web/packages/new/photos/services/ffmpeg/index.ts @@ -195,17 +195,17 @@ function parseFFmpegExtractedMetadata(encodedMetadata: Uint8Array) { return parsedMetadata; } -function parseAppleISOLocation(isoLocation: string) { +const parseAppleISOLocation = (isoLocation: string | undefined) => { let location = { ...NULL_LOCATION }; if (isoLocation) { - const [latitude, longitude] = isoLocation + const m = isoLocation .match(/(\+|-)\d+\.*\d+/g) - .map((x) => parseFloat(x)); + ?.map((x) => parseFloat(x)); - location = { latitude, longitude }; + location = { latitude: m?.at(0) ?? null, longitude: m?.at(1) ?? null }; } return location; -} +}; function parseCreationTime(creationTime: string) { let dateTime = null; From f2ea1a05c1a7fd672ac9c783b40a00478b282fb3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:38:17 +0530 Subject: [PATCH 141/466] Fix tsc --- web/packages/new/photos/services/ffmpeg/index.ts | 5 ++--- web/packages/new/photos/types/metadata.ts | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/web/packages/new/photos/services/ffmpeg/index.ts b/web/packages/new/photos/services/ffmpeg/index.ts index 578f74cceb..f22de9fe9c 100644 --- a/web/packages/new/photos/services/ffmpeg/index.ts +++ b/web/packages/new/photos/services/ffmpeg/index.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-floating-promises */ /* eslint-disable @typescript-eslint/array-type */ -/* @ts-nocheck */ import { NULL_LOCATION, @@ -207,7 +206,7 @@ const parseAppleISOLocation = (isoLocation: string | undefined) => { return location; }; -function parseCreationTime(creationTime: string) { +const parseCreationTime = (creationTime: string | undefined) => { let dateTime = null; if (creationTime) { dateTime = validateAndGetCreationUnixTimeInMicroSeconds( @@ -215,7 +214,7 @@ function parseCreationTime(creationTime: string) { ); } return dateTime; -} +}; /** * Run the given FFmpeg command using a wasm FFmpeg running in a web worker. diff --git a/web/packages/new/photos/types/metadata.ts b/web/packages/new/photos/types/metadata.ts index 626493211f..8c7ee8088e 100644 --- a/web/packages/new/photos/types/metadata.ts +++ b/web/packages/new/photos/types/metadata.ts @@ -5,7 +5,7 @@ export interface Location { export interface ParsedExtractedMetadata { location: Location; - creationTime: number; - width: number; - height: number; + creationTime: number | null; + width: number | null; + height: number | null; } From 94f179ebabb8a170bdcc76f662ef7f2f5889ee2a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:40:07 +0530 Subject: [PATCH 142/466] Fix esl --- web/packages/new/photos/services/ffmpeg/index.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/web/packages/new/photos/services/ffmpeg/index.ts b/web/packages/new/photos/services/ffmpeg/index.ts index f22de9fe9c..02913ed797 100644 --- a/web/packages/new/photos/services/ffmpeg/index.ts +++ b/web/packages/new/photos/services/ffmpeg/index.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable @typescript-eslint/array-type */ - import { NULL_LOCATION, toDataOrPathOrZipEntry, @@ -168,8 +165,8 @@ function parseFFmpegExtractedMetadata(encodedMetadata: Uint8Array) { property.split("="), ); const validKeyValuePairs = metadataKeyValueArray.filter( - (keyValueArray) => keyValueArray.length === 2, - ) as Array<[string, string]>; + (keyValueArray) => keyValueArray.length == 2, + ) as [string, string][]; const metadataMap = Object.fromEntries(validKeyValuePairs); @@ -262,7 +259,7 @@ export const convertToMP4 = async (blob: Blob): Promise => { const convertToMP4Native = async (electron: Electron, blob: Blob) => { const token = await writeConvertToMP4Stream(electron, blob); const mp4Blob = await readConvertToMP4Stream(electron, token); - readConvertToMP4Done(electron, token); + await readConvertToMP4Done(electron, token); return mp4Blob; }; From 892a90d83be8afd6e44ec72ecbdd15c95f75ced5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:47:25 +0530 Subject: [PATCH 143/466] esl --- web/packages/new/photos/services/ffmpeg/worker.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index 49db8791c8..fc05abcbd2 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -24,7 +24,8 @@ import { // // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error // @ts-ignore -import { FFmpeg, createFFmpeg } from "ffmpeg-wasm"; +import { ensure } from "@/utils/ensure"; +import { createFFmpeg, type FFmpeg } from "ffmpeg-wasm"; export class DedicatedFFmpegWorker { private ffmpeg: FFmpeg; @@ -106,7 +107,7 @@ const randomPrefix = () => { let result = ""; for (let i = 0; i < 10; i++) - result += alphabet[Math.floor(Math.random() * alphabet.length)]; + result += ensure(alphabet[Math.floor(Math.random() * alphabet.length)]); return result; }; @@ -127,4 +128,5 @@ const substitutePlaceholders = ( return segment; } }) - .filter((c) => !!c); + // TODO: The type guard should automatically get deduced with TS 5.5 + .filter((s): s is string => !!s); From 025fe3599966a880d083abce4dcab0e5082301ae Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:55:43 +0530 Subject: [PATCH 144/466] tsc transitive --- web/packages/shared/utils/queueProcessor.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/packages/shared/utils/queueProcessor.ts b/web/packages/shared/utils/queueProcessor.ts index b185281994..d490794469 100644 --- a/web/packages/shared/utils/queueProcessor.ts +++ b/web/packages/shared/utils/queueProcessor.ts @@ -1,9 +1,10 @@ +import { ensure } from "@/utils/ensure"; import { CustomError } from "@ente/shared/error"; interface RequestQueueItem { request: (canceller?: RequestCanceller) => Promise; successCallback: (response: any) => void; - failureCallback: (error: Error) => void; + failureCallback: (error: unknown) => void; isCanceled: { status: boolean }; canceller: { exec: () => void }; } @@ -50,7 +51,7 @@ export default class QueueProcessor { this.isProcessingRequest = true; while (this.requestQueue.length > 0) { - const queueItem = this.requestQueue.shift(); + const queueItem = ensure(this.requestQueue.shift()); let response = null; if (queueItem.isCanceled.status) { From 1c7f25723e68191c95c7fa659cd8fd7d9128d7c1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:58:27 +0530 Subject: [PATCH 145/466] Conv --- web/apps/photos/src/services/download/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index bbf17ca21f..bf911362ee 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -7,6 +7,7 @@ import { type SourceURLs, } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; +import { isDesktop } from "@/next/app"; import { blobCache, type BlobCache } from "@/next/blob-cache"; import log from "@/next/log"; import { customAPIOrigin } from "@/next/origins"; @@ -17,7 +18,6 @@ import { isPlaybackPossible } from "@ente/shared/media/video-playback"; import HTTPService from "@ente/shared/network/HTTPService"; import { retryAsyncFunction } from "@ente/shared/utils"; import type { Remote } from "comlink"; -import isElectron from "is-electron"; export type OnDownloadProgress = (event: { loaded: number; @@ -525,7 +525,7 @@ async function getPlayableVideo( if (isPlayable && !forceConvert) { return videoBlob; } else { - if (!forceConvert && !runOnWeb && !isElectron()) { + if (!forceConvert && !runOnWeb && !isDesktop) { return null; } log.info(`Converting video ${videoNameTitle} to mp4`); From cd27168f5fbe5d8eadb9197cce0edf8730f1a4e4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 10:58:59 +0530 Subject: [PATCH 146/466] Move --- .../index.ts => packages/new/photos/services/download.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename web/{apps/photos/src/services/download/index.ts => packages/new/photos/services/download.ts} (100%) diff --git a/web/apps/photos/src/services/download/index.ts b/web/packages/new/photos/services/download.ts similarity index 100% rename from web/apps/photos/src/services/download/index.ts rename to web/packages/new/photos/services/download.ts From 16e197455b8861e1a7bdaa67f506f3aa7849c6eb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:00:08 +0530 Subject: [PATCH 147/466] Update imports --- web/apps/photos/src/components/Collections/CollectionCard.tsx | 2 +- web/apps/photos/src/components/PhotoFrame.tsx | 2 +- .../src/components/PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- web/apps/photos/src/components/PhotoViewer/index.tsx | 2 +- web/apps/photos/src/components/pages/gallery/PreviewCard.tsx | 2 +- web/apps/photos/src/pages/_app.tsx | 2 +- web/apps/photos/src/pages/gallery/index.tsx | 2 +- web/apps/photos/src/pages/shared-albums/index.tsx | 2 +- web/apps/photos/src/services/clip-service.ts | 2 +- web/apps/photos/src/services/export/migration.ts | 2 +- web/apps/photos/src/services/face/f-index.ts | 2 +- web/apps/photos/src/services/face/face.worker.ts | 2 +- web/apps/photos/src/services/fix-exif.ts | 2 +- web/apps/photos/src/services/logout.ts | 2 +- web/apps/photos/src/utils/file/index.ts | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/web/apps/photos/src/components/Collections/CollectionCard.tsx b/web/apps/photos/src/components/Collections/CollectionCard.tsx index 5bf247020e..7d757561ba 100644 --- a/web/apps/photos/src/components/Collections/CollectionCard.tsx +++ b/web/apps/photos/src/components/Collections/CollectionCard.tsx @@ -1,10 +1,10 @@ +import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { LoadingThumbnail, StaticThumbnail, } from "components/PlaceholderThumbnails"; import { useEffect, useState } from "react"; -import downloadManager from "services/download"; export default function CollectionCard(props: { children?: any; diff --git a/web/apps/photos/src/components/PhotoFrame.tsx b/web/apps/photos/src/components/PhotoFrame.tsx index 6095a31765..a6f8606a08 100644 --- a/web/apps/photos/src/components/PhotoFrame.tsx +++ b/web/apps/photos/src/components/PhotoFrame.tsx @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import DownloadManager from "@/new/photos/services/download"; import type { LivePhotoSourceURL, SourceURLs } from "@/new/photos/types/file"; import { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; @@ -14,7 +15,6 @@ import PhotoSwipe from "photoswipe"; import { useContext, useEffect, useState } from "react"; import AutoSizer from "react-virtualized-auto-sizer"; import { Duplicate } from "services/deduplicationService"; -import DownloadManager from "services/download"; import { SelectedState, SetFilesDownloadProgressAttributesCreator, diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index 0d41aba55d..3bb010d708 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,3 +1,4 @@ +import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; @@ -35,7 +36,6 @@ import { AppContext } from "pages/_app"; import type { Dispatch, MutableRefObject, SetStateAction } from "react"; import { createContext, useContext, useEffect, useRef, useState } from "react"; import { getLocalCollections } from "services/collectionService"; -import downloadManager from "services/download"; import uploadManager from "services/upload/uploadManager"; import { getEditorCloseConfirmationMessage } from "utils/ui"; import ColoursMenu from "./ColoursMenu"; diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index aff51460dd..56ad5475ec 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -15,6 +15,7 @@ import { import { FILE_TYPE } from "@/media/file-type"; import { isNonWebImageFileExtension } from "@/media/formats"; +import downloadManager from "@/new/photos/services/download"; import type { LoadedLivePhotoSourceURL } from "@/new/photos/types/file"; import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import { isNativeConvertibleToJPEG } from "@/new/photos/utils/file"; @@ -45,7 +46,6 @@ import { t } from "i18next"; import isElectron from "is-electron"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; -import downloadManager from "services/download"; import { getParsedExifData } from "services/exif"; import { trashFiles } from "services/fileService"; import { SetFilesDownloadProgressAttributesCreator } from "types/gallery"; diff --git a/web/apps/photos/src/components/pages/gallery/PreviewCard.tsx b/web/apps/photos/src/components/pages/gallery/PreviewCard.tsx index 0b4c386c4b..6a5e8128bb 100644 --- a/web/apps/photos/src/components/pages/gallery/PreviewCard.tsx +++ b/web/apps/photos/src/components/pages/gallery/PreviewCard.tsx @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import DownloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { Overlay } from "@ente/shared/components/Container"; @@ -17,7 +18,6 @@ import i18n from "i18next"; import { DeduplicateContext } from "pages/deduplicate"; import { GalleryContext } from "pages/gallery"; import React, { useContext, useEffect, useRef, useState } from "react"; -import DownloadManager from "services/download"; import { shouldShowAvatar } from "utils/file"; import Avatar from "./Avatar"; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 98af7f9d67..a74c2b3ab1 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,3 +1,4 @@ +import DownloadManager from "@/new/photos/services/download"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; @@ -48,7 +49,6 @@ import { useRouter } from "next/router"; import "photoswipe/dist/photoswipe.css"; import { createContext, useContext, useEffect, useRef, useState } from "react"; import LoadingBar from "react-top-loading-bar"; -import DownloadManager from "services/download"; import { resumeExportsIfNeeded } from "services/export"; import { isFaceIndexingEnabled, diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx index 8bac954cbb..42f3aed2c4 100644 --- a/web/apps/photos/src/pages/gallery/index.tsx +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -1,5 +1,6 @@ import { WhatsNew } from "@/new/photos/components/WhatsNew"; import { shouldShowWhatsNew } from "@/new/photos/services/changelog"; +import downloadManager from "@/new/photos/services/download"; import { getLocalFiles, getLocalTrashedFiles, @@ -92,7 +93,6 @@ import { getHiddenItemsSummary, getSectionSummaries, } from "services/collectionService"; -import downloadManager from "services/download"; import { syncFiles } from "services/fileService"; import locationSearchService from "services/locationSearchService"; import { sync } from "services/sync"; diff --git a/web/apps/photos/src/pages/shared-albums/index.tsx b/web/apps/photos/src/pages/shared-albums/index.tsx index 4e479457b1..b4786e1798 100644 --- a/web/apps/photos/src/pages/shared-albums/index.tsx +++ b/web/apps/photos/src/pages/shared-albums/index.tsx @@ -1,3 +1,4 @@ +import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { mergeMetadata } from "@/new/photos/utils/file"; import log from "@/next/log"; @@ -45,7 +46,6 @@ import { useRouter } from "next/router"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; import { useDropzone } from "react-dropzone"; -import downloadManager from "services/download"; import { getLocalPublicCollection, getLocalPublicCollectionPassword, diff --git a/web/apps/photos/src/services/clip-service.ts b/web/apps/photos/src/services/clip-service.ts index be59a2aeda..4b9900aed5 100644 --- a/web/apps/photos/src/services/clip-service.ts +++ b/web/apps/photos/src/services/clip-service.ts @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import downloadManager from "@/new/photos/services/download"; import { getAllLocalFiles, getLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; import { ensureElectron } from "@/next/electron"; @@ -10,7 +11,6 @@ import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; import PQueue from "p-queue"; import { Embedding } from "types/embedding"; import { getPersonalFiles } from "utils/file"; -import downloadManager from "./download"; import { localCLIPEmbeddings, putEmbedding } from "./embeddingService"; /** Status of CLIP indexing on the images in the user's local library. */ diff --git a/web/apps/photos/src/services/export/migration.ts b/web/apps/photos/src/services/export/migration.ts index da506e11e1..1dfbe49d60 100644 --- a/web/apps/photos/src/services/export/migration.ts +++ b/web/apps/photos/src/services/export/migration.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import downloadManager from "@/new/photos/services/download"; import { exportMetadataDirectoryName } from "@/new/photos/services/export"; import { getAllLocalFiles } from "@/new/photos/services/files"; import { EnteFile } from "@/new/photos/types/file"; @@ -16,7 +17,6 @@ import { wait } from "@/utils/promise"; import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; import type { User } from "@ente/shared/user/types"; import { getLocalCollections } from "services/collectionService"; -import downloadManager from "services/download"; import { Collection } from "types/collection"; import { CollectionExportNames, diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/apps/photos/src/services/face/f-index.ts index 539fdc7411..48b37acb52 100644 --- a/web/apps/photos/src/services/face/f-index.ts +++ b/web/apps/photos/src/services/face/f-index.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import DownloadManager from "@/new/photos/services/download"; import type { Box, Dimensions, @@ -12,7 +13,6 @@ import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; import { Matrix } from "ml-matrix"; -import DownloadManager from "services/download"; import { getSimilarityTransformation } from "similarity-transformation"; import { Matrix as TransformationMatrix, diff --git a/web/apps/photos/src/services/face/face.worker.ts b/web/apps/photos/src/services/face/face.worker.ts index d74c235cc0..f5cc4b8b6f 100644 --- a/web/apps/photos/src/services/face/face.worker.ts +++ b/web/apps/photos/src/services/face/face.worker.ts @@ -1,6 +1,6 @@ +import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { expose } from "comlink"; -import downloadManager from "services/download"; import mlService from "services/machineLearning/machineLearningService"; export class DedicatedMLWorker { diff --git a/web/apps/photos/src/services/fix-exif.ts b/web/apps/photos/src/services/fix-exif.ts index d212b31f11..fc504ea622 100644 --- a/web/apps/photos/src/services/fix-exif.ts +++ b/web/apps/photos/src/services/fix-exif.ts @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; import log from "@/next/log"; @@ -8,7 +9,6 @@ import { changeFileCreationTime, updateExistingFilePubMetadata, } from "utils/file"; -import downloadManager from "./download"; import { getParsedExifData } from "./exif"; const EXIF_TIME_TAGS = [ diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 266247ca98..b754a6e445 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,10 +1,10 @@ +import DownloadManager from "@/new/photos/services/download"; import { terminateFaceWorker } from "@/new/photos/services/face"; import { clearFaceData } from "@/new/photos/services/face/db"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import log from "@/next/log"; import { accountLogout } from "@ente/accounts/services/logout"; import { clipService } from "services/clip-service"; -import DownloadManager from "./download"; import exportService from "./export"; import mlWorkManager from "./face/mlWorkManager"; diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts index 13b3c2fe61..6f2b3b89fb 100644 --- a/web/apps/photos/src/utils/file/index.ts +++ b/web/apps/photos/src/utils/file/index.ts @@ -1,5 +1,6 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import DownloadManager from "@/new/photos/services/download"; import { EncryptedEnteFile, EnteFile, @@ -24,7 +25,6 @@ import type { User } from "@ente/shared/user/types"; import { downloadUsingAnchor } from "@ente/shared/utils"; import { t } from "i18next"; import { moveToHiddenCollection } from "services/collectionService"; -import DownloadManager from "services/download"; import { updateFileCreationDateInEXIF } from "services/exif"; import { deleteFromTrash, From 16b79bcf4ab7d4a1a39ee931c52566a925eda212 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:11:06 +0530 Subject: [PATCH 148/466] tsc --- web/apps/photos/src/services/logout.ts | 2 +- web/packages/new/photos/services/download.ts | 50 ++++++++++++-------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index b754a6e445..fbf8249df2 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -31,7 +31,7 @@ export const photosLogout = async () => { } try { - await DownloadManager.logout(); + DownloadManager.logout(); } catch (e) { ignoreError("download", e); } diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index bf911362ee..ef41873f39 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -1,16 +1,20 @@ +// TODO: Remove this override +/* eslint-disable @typescript-eslint/no-empty-function */ + import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import * as ffmpeg from "@/new/photos/services/ffmpeg"; -import { +import type { EnteFile, - type LivePhotoSourceURL, - type SourceURLs, + LivePhotoSourceURL, + SourceURLs, } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; import { isDesktop } from "@/next/app"; import { blobCache, type BlobCache } from "@/next/blob-cache"; import log from "@/next/log"; import { customAPIOrigin } from "@/next/origins"; +import { ensure } from "@/utils/ensure"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; import { CustomError } from "@ente/shared/error"; @@ -38,8 +42,8 @@ interface DownloadClient { } class DownloadManagerImpl { - private ready: boolean = false; - private downloadClient: DownloadClient; + private ready = false; + private downloadClient: DownloadClient | undefined; /** Local cache for thumbnails. Might not be available. */ private thumbnailCache?: BlobCache; /** @@ -48,7 +52,7 @@ class DownloadManagerImpl { * Only available when we're running in the desktop app. */ private fileCache?: BlobCache; - private cryptoWorker: Remote; + private cryptoWorker: Remote | undefined; private fileObjectURLPromises = new Map>(); private fileConversionPromises = new Map>(); @@ -58,6 +62,10 @@ class DownloadManagerImpl { private progressUpdater: (value: Map) => void = () => {}; + private ensureClient() { + return ensure(this.downloadClient); + } + async init(token?: string) { if (this.ready) { log.info("DownloadManager already initialized"); @@ -87,12 +95,17 @@ class DownloadManagerImpl { throw new Error( "Attempting to use an uninitialized download manager", ); + + return { + downloadClient: ensure(this.downloadClient), + cryptoWorker: ensure(this.cryptoWorker), + }; } - async logout() { + logout() { this.ready = false; - this.cryptoWorker = null; - this.downloadClient = null; + this.cryptoWorker = undefined; + this.downloadClient = undefined; this.fileObjectURLPromises.clear(); this.fileConversionPromises.clear(); this.thumbnailObjectURLPromises.clear(); @@ -101,11 +114,8 @@ class DownloadManagerImpl { } updateToken(token: string, passwordToken?: string) { - this.downloadClient.updateTokens(token, passwordToken); - } - - updateCryptoWorker(cryptoWorker: Remote) { - this.cryptoWorker = cryptoWorker; + const { downloadClient } = this.ensureInitialized(); + downloadClient.updateTokens(token, passwordToken); } setProgressUpdater(progressUpdater: (value: Map) => void) { @@ -113,10 +123,12 @@ class DownloadManagerImpl { } private downloadThumb = async (file: EnteFile) => { - const encrypted = await this.downloadClient.downloadThumbnail(file); - const decrypted = await this.cryptoWorker.decryptThumbnail( + const { downloadClient, cryptoWorker } = this.ensureInitialized(); + + const encrypted = await downloadClient.downloadThumbnail(file); + const decrypted = await cryptoWorker.decryptThumbnail( encrypted, - await this.cryptoWorker.fromB64(file.thumbnail.decryptionHeader), + await cryptoWorker.fromB64(file.thumbnail.decryptionHeader), file.key, ); return decrypted; @@ -131,7 +143,7 @@ class DownloadManagerImpl { if (localOnly) return null; const thumb = await this.downloadThumb(file); - this.thumbnailCache?.put(key, new Blob([thumb])); + await this.thumbnailCache?.put(key, new Blob([thumb])); return thumb; } @@ -396,7 +408,7 @@ const DownloadManager = new DownloadManagerImpl(); export default DownloadManager; -const createDownloadClient = (token: string): DownloadClient => { +const createDownloadClient = (token: string | undefined): DownloadClient => { const timeout = 300000; // 5 minute if (token) { return new PhotosDownloadClient(token, timeout); From b49d1323dba277a679650b62ebd4526dba4b7035 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:14:35 +0530 Subject: [PATCH 149/466] tsc --- web/packages/new/photos/services/download.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index ef41873f39..c9cfa38802 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -56,16 +56,12 @@ class DownloadManagerImpl { private fileObjectURLPromises = new Map>(); private fileConversionPromises = new Map>(); - private thumbnailObjectURLPromises = new Map>(); + private thumbnailObjectURLPromises = new Map>(); private fileDownloadProgress = new Map(); private progressUpdater: (value: Map) => void = () => {}; - private ensureClient() { - return ensure(this.downloadClient); - } - async init(token?: string) { if (this.ready) { log.info("DownloadManager already initialized"); @@ -140,14 +136,14 @@ class DownloadManagerImpl { const key = file.id.toString(); const cached = await this.thumbnailCache?.get(key); if (cached) return new Uint8Array(await cached.arrayBuffer()); - if (localOnly) return null; + if (localOnly) return undefined; const thumb = await this.downloadThumb(file); await this.thumbnailCache?.put(key, new Blob([thumb])); return thumb; } - async getThumbnailForPreview(file: EnteFile, localOnly = false) { + async getThumbnailForPreview(file: EnteFile, localOnly = false): Promise { this.ensureInitialized(); try { if (!this.thumbnailObjectURLPromises.has(file.id)) { From a7f0dc74fdbcd99c384c442bbecd9ebd83c833f2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:26:11 +0530 Subject: [PATCH 150/466] tsc --- web/packages/new/photos/services/download.ts | 74 +++++++++++++------- web/packages/new/photos/types/file.ts | 2 +- 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index c9cfa38802..ef49ce73b4 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -56,7 +56,10 @@ class DownloadManagerImpl { private fileObjectURLPromises = new Map>(); private fileConversionPromises = new Map>(); - private thumbnailObjectURLPromises = new Map>(); + private thumbnailObjectURLPromises = new Map< + number, + Promise + >(); private fileDownloadProgress = new Map(); @@ -143,7 +146,10 @@ class DownloadManagerImpl { return thumb; } - async getThumbnailForPreview(file: EnteFile, localOnly = false): Promise { + async getThumbnailForPreview( + file: EnteFile, + localOnly = false, + ): Promise { this.ensureInitialized(); try { if (!this.thumbnailObjectURLPromises.has(file.id)) { @@ -169,15 +175,19 @@ class DownloadManagerImpl { getFileForPreview = async ( file: EnteFile, forceConvert = false, - ): Promise => { + ): Promise => { this.ensureInitialized(); try { const getFileForPreviewPromise = async () => { const fileBlob = await new Response( await this.getFile(file, true), ).blob(); - const { url: originalFileURL } = - await this.fileObjectURLPromises.get(file.id); + // TODO: Is this ensure valid? + // The existing code was already dereferencing, so it shouldn't + // affect behaviour. + const { url: originalFileURL } = ensure( + await this.fileObjectURLPromises.get(file.id), + ); const converted = await getRenderableFileURL( file, @@ -205,7 +215,7 @@ class DownloadManagerImpl { async getFile( file: EnteFile, cacheInMemory = false, - ): Promise> { + ): Promise | null> { this.ensureInitialized(); try { const getFilePromise = async (): Promise => { @@ -224,7 +234,12 @@ class DownloadManagerImpl { } this.fileObjectURLPromises.set(file.id, getFilePromise()); } - const fileURLs = await this.fileObjectURLPromises.get(file.id); + // TODO: Is this ensure valid? + // The existing code was already dereferencing, so it shouldn't + // affect behaviour. + const fileURLs = ensure( + await this.fileObjectURLPromises.get(file.id), + ); if (fileURLs.isOriginal) { const fileStream = (await fetch(fileURLs.url as string)).body; return fileStream; @@ -240,12 +255,15 @@ class DownloadManagerImpl { private async downloadFile( file: EnteFile, - ): Promise> { + ): Promise | null> { + const { downloadClient, cryptoWorker } = this.ensureInitialized(); + log.info(`download attempted for file id ${file.id}`); const onDownloadProgress = this.trackDownloadProgress( file.id, - file.info?.fileSize, + // TODO: Is info supposed to be optional though? + file.info?.fileSize ?? 0, ); const cacheKey = file.id.toString(); @@ -257,23 +275,29 @@ class DownloadManagerImpl { const cachedBlob = await this.fileCache?.get(cacheKey); let encryptedArrayBuffer = await cachedBlob?.arrayBuffer(); if (!encryptedArrayBuffer) { - const array = await this.downloadClient.downloadFile( + const array = await downloadClient.downloadFile( file, onDownloadProgress, ); encryptedArrayBuffer = array.buffer; - this.fileCache?.put(cacheKey, new Blob([encryptedArrayBuffer])); + await this.fileCache?.put( + cacheKey, + new Blob([encryptedArrayBuffer]), + ); } this.clearDownloadProgress(file.id); try { - const decrypted = await this.cryptoWorker.decryptFile( + const decrypted = await cryptoWorker.decryptFile( new Uint8Array(encryptedArrayBuffer), - await this.cryptoWorker.fromB64(file.file.decryptionHeader), + await cryptoWorker.fromB64(file.file.decryptionHeader), file.key, ); return new Response(decrypted).body; } catch (e) { - if (e.message === CustomError.PROCESSING_FAILED) { + if ( + e instanceof Error && + e.message == CustomError.PROCESSING_FAILED + ) { log.error( `Failed to process file with fileID:${file.id}, localID: ${file.metadata.localID}, version: ${file.metadata.version}, deviceFolder:${file.metadata.deviceFolder}`, e, @@ -287,7 +311,7 @@ class DownloadManagerImpl { let res: Response; if (cachedBlob) res = new Response(cachedBlob); else { - res = await this.downloadClient.downloadFileStream(file); + res = await downloadClient.downloadFileStream(file); // We don't have a files cache currently, so this was already a // no-op. But even if we had a cache, this seems sus, because // res.blob() will read the stream and I'd think then trying to do @@ -295,20 +319,20 @@ class DownloadManagerImpl { // this.fileCache?.put(cacheKey, await res.blob()); } - const reader = res.body.getReader(); + const body = res.body; + if (!body) return null; + const reader = body.getReader(); - const contentLength = +res.headers.get("Content-Length") ?? 0; + const contentLength = + parseInt(res.headers.get("Content-Length") ?? "") || 0; let downloadedBytes = 0; - const decryptionHeader = await this.cryptoWorker.fromB64( + const decryptionHeader = await cryptoWorker.fromB64( file.file.decryptionHeader, ); - const fileKey = await this.cryptoWorker.fromB64(file.key); + const fileKey = await cryptoWorker.fromB64(file.key); const { pullState, decryptionChunkSize } = - await this.cryptoWorker.initChunkDecryption( - decryptionHeader, - fileKey, - ); + await cryptoWorker.initChunkDecryption(decryptionHeader, fileKey); let leftoverBytes = new Uint8Array(); @@ -342,7 +366,7 @@ class DownloadManagerImpl { // and we might need multiple iterations to drain it all. while (data.length >= decryptionChunkSize) { const { decryptedData } = - await this.cryptoWorker.decryptFileChunk( + await cryptoWorker.decryptFileChunk( data.slice(0, decryptionChunkSize), pullState, ); @@ -356,7 +380,7 @@ class DownloadManagerImpl { // full chunk, no more bytes are going to come. if (data.length) { const { decryptedData } = - await this.cryptoWorker.decryptFileChunk( + await cryptoWorker.decryptFileChunk( data, pullState, ); diff --git a/web/packages/new/photos/types/file.ts b/web/packages/new/photos/types/file.ts index e76e527393..ce671704f8 100644 --- a/web/packages/new/photos/types/file.ts +++ b/web/packages/new/photos/types/file.ts @@ -26,7 +26,7 @@ export interface EncryptedEnteFile { file: S3FileAttributes; thumbnail: S3FileAttributes; metadata: MetadataFileAttributes; - info: FileInfo; + info: FileInfo | undefined; magicMetadata: EncryptedMagicMetadata; pubMagicMetadata: EncryptedMagicMetadata; encryptedKey: string; From 406e7bd5bddae34a5650edd6814341ad41dee59c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:33:33 +0530 Subject: [PATCH 151/466] tsc --- web/packages/new/photos/services/download.ts | 37 +++++++++++++------- web/packages/new/photos/types/file.ts | 4 +-- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index ef49ce73b4..0a26c47502 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -443,14 +443,14 @@ async function getRenderableFileURL( originalFileURL: string, forceConvert: boolean, ): Promise { - const existingOrNewObjectURL = (convertedBlob: Blob) => + const existingOrNewObjectURL = (convertedBlob: Blob | null | undefined) => convertedBlob ? convertedBlob === fileBlob ? originalFileURL : URL.createObjectURL(convertedBlob) : undefined; - let url: SourceURLs["url"]; + let url: SourceURLs["url"] | undefined; let isOriginal: boolean; let isRenderable: boolean; let type: SourceURLs["type"] = "normal"; @@ -497,14 +497,15 @@ async function getRenderableFileURL( } } - return { url, isOriginal, isRenderable, type, mimeType }; + // TODO: Can we remove this ensure and reflect it in the types? + return { url: ensure(url), isOriginal, isRenderable, type, mimeType }; } async function getRenderableLivePhotoURL( file: EnteFile, fileBlob: Blob, forceConvert: boolean, -): Promise { +): Promise { const livePhoto = await decodeLivePhoto(file.metadata.title, fileBlob); const getRenderableLivePhotoImageURL = async () => { @@ -514,11 +515,12 @@ async function getRenderableLivePhotoURL( livePhoto.imageFileName, imageBlob, ); + if (!convertedImageBlob) return undefined; return URL.createObjectURL(convertedImageBlob); } catch (e) { //ignore and return null - return null; + return undefined; } }; @@ -531,10 +533,11 @@ async function getRenderableLivePhotoURL( forceConvert, true, ); + if (!convertedVideoBlob) return undefined; return URL.createObjectURL(convertedVideoBlob); } catch (e) { //ignore and return null - return null; + return undefined; } }; @@ -609,7 +612,9 @@ class PhotosDownloadClient implements DownloadClient { const resp = await retryAsyncFunction(getThumbnail); if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); + // TODO: Remove this cast (it won't be needed when we migrate this from + // axios to fetch). + return new Uint8Array(resp.data as ArrayBuffer); } async downloadFile( @@ -649,7 +654,9 @@ class PhotosDownloadClient implements DownloadClient { const resp = await retryAsyncFunction(getFile); if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); + // TODO: Remove this cast (it won't be needed when we migrate this from + // axios to fetch). + return new Uint8Array(resp.data as ArrayBuffer); } async downloadFileStream(file: EnteFile): Promise { @@ -714,12 +721,12 @@ class PhotosDownloadClient implements DownloadClient { } class PublicAlbumsDownloadClient implements DownloadClient { - private token: string; - private passwordToken: string; + private token: string | undefined; + private passwordToken: string | undefined; constructor(private timeout: number) {} - updateTokens(token: string, passwordToken: string) { + updateTokens(token: string, passwordToken?: string) { this.token = token; this.passwordToken = passwordToken; } @@ -764,7 +771,9 @@ class PublicAlbumsDownloadClient implements DownloadClient { const resp = await getThumbnail(); if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); + // TODO: Remove this cast (it won't be needed when we migrate this from + // axios to fetch). + return new Uint8Array(resp.data as ArrayBuffer); }; downloadFile = async ( @@ -813,7 +822,9 @@ class PublicAlbumsDownloadClient implements DownloadClient { const resp = await retryAsyncFunction(getFile); if (resp.data === undefined) throw Error(CustomError.REQUEST_FAILED); - return new Uint8Array(resp.data); + // TODO: Remove this cast (it won't be needed when we migrate this from + // axios to fetch). + return new Uint8Array(resp.data as ArrayBuffer); }; async downloadFileStream(file: EnteFile): Promise { diff --git a/web/packages/new/photos/types/file.ts b/web/packages/new/photos/types/file.ts index ce671704f8..7cbbb8eb38 100644 --- a/web/packages/new/photos/types/file.ts +++ b/web/packages/new/photos/types/file.ts @@ -63,8 +63,8 @@ export interface EnteFile } export interface LivePhotoSourceURL { - image: () => Promise; - video: () => Promise; + image: () => Promise; + video: () => Promise; } export interface LoadedLivePhotoSourceURL { From a65e0ddfa4ef7429d8840b945b1af4e25a4aeeee Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:43:56 +0530 Subject: [PATCH 152/466] lf --- web/apps/cast/src/services/render.ts | 4 +++- web/apps/photos/src/services/export/index.ts | 2 +- web/packages/shared/utils/index.ts | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web/apps/cast/src/services/render.ts b/web/apps/cast/src/services/render.ts index 5e86b3b8bc..acacdc88d2 100644 --- a/web/apps/cast/src/services/render.ts +++ b/web/apps/cast/src/services/render.ts @@ -243,12 +243,14 @@ const decryptEnteFile = async ( file.metadata.title = file.pubMagicMetadata.data.editedName; } // @ts-expect-error TODO: The core types need to be updated to allow the - // possibility of missing metadata fiels. + // possibility of missing metadata fields. return file; }; const isFileEligible = (file: EnteFile) => { if (!isImageOrLivePhoto(file)) return false; + // @ts-expect-error TODO: The core types need to be updated to allow the + // possibility of missing info fields (or do they?) if (file.info.fileSize > 100 * 1024 * 1024) return false; // This check is fast but potentially incorrect because in practice we do diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts index fcf387fef3..80f866312e 100644 --- a/web/apps/photos/src/services/export/index.ts +++ b/web/apps/photos/src/services/export/index.ts @@ -1,6 +1,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import type { Metadata } from "@/media/types/file"; +import downloadManager from "@/new/photos/services/download"; import { exportMetadataDirectoryName, exportTrashDirectoryName, @@ -38,7 +39,6 @@ import { } from "utils/collection"; import { getPersonalFiles, getUpdatedEXIFFileForDownload } from "utils/file"; import { getAllLocalCollections } from "../collectionService"; -import downloadManager from "../download"; import { migrateExport } from "./migration"; /** Name of the JSON file in which we keep the state of the export. */ diff --git a/web/packages/shared/utils/index.ts b/web/packages/shared/utils/index.ts index b71808d466..101e6eb27f 100644 --- a/web/packages/shared/utils/index.ts +++ b/web/packages/shared/utils/index.ts @@ -1,3 +1,4 @@ +import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; export function downloadAsFile(filename: string, content: string) { @@ -47,7 +48,7 @@ export async function retryAsyncFunction( if (attemptNumber === waitTimeBeforeNextTry.length) { throw e; } - await wait(waitTimeBeforeNextTry[attemptNumber]); + await wait(ensure(waitTimeBeforeNextTry[attemptNumber])); } } } From 8abcd39966e17f7c3f18f0135500b0897616228b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 11:48:48 +0530 Subject: [PATCH 153/466] Fix warning --- web/packages/eslint-config/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/packages/eslint-config/package.json b/web/packages/eslint-config/package.json index 699a1ed4d3..fe1006ca94 100644 --- a/web/packages/eslint-config/package.json +++ b/web/packages/eslint-config/package.json @@ -1,6 +1,7 @@ { "name": "@ente/eslint-config", - "version": "1.0.0", + "version": "0.0.0", + "private": "true", "main": "index.js", "dependencies": {}, "devDependencies": { From 9fd94c63d900cf8e5fccc3c1519f8f3d6c6b3103 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 2 Jul 2024 11:52:47 +0530 Subject: [PATCH 154/466] [mob][photos] lockscreen UI updated --- .../loading_photos_background_fullscreen.png | Bin 0 -> 26490 bytes .../lockscreen/lockscreen_confirm_pin.dart | 2 +- .../lockscreen/lockscreen_password.dart | 12 +- .../settings/lockscreen/lockscreen_pin.dart | 12 +- mobile/lib/ui/tools/lock_screen.dart | 179 ++++++++++++++---- 5 files changed, 168 insertions(+), 37 deletions(-) create mode 100644 mobile/assets/loading_photos_background_fullscreen.png diff --git a/mobile/assets/loading_photos_background_fullscreen.png b/mobile/assets/loading_photos_background_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..3cbc4e1da86ef8a8ef9e0a343e20f734c2aa9d50 GIT binary patch literal 26490 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 literal 0 HcmV?d00001 diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart index 138fbd2808..fae5264c5f 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart @@ -21,6 +21,7 @@ class _LockScreenConfirmPinState extends State { final _pinPutDecoration = PinTheme( height: 48, width: 48, + padding: const EdgeInsets.only(top: 6.0), decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -184,7 +185,6 @@ class _LockScreenConfirmPinState extends State { return 'PIN does not match'; }, onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); await _confirmPinMatch(); }, ), diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart index f9ca2f7d05..935235af13 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart @@ -8,6 +8,7 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; import "package:photos/ui/settings/lockscreen/lockscreen_confirm_password.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/lockscreen_setting.dart"; @@ -68,7 +69,14 @@ class _LockScreenPasswordState extends State { enteredHashedPassword = base64Encode(hash); if (widget.authPass == enteredHashedPassword) { await _lockscreenSetting.setInvalidAttemptCount(0); - Navigator.of(context).pop(true); + + widget.isLockscreenAuth + ? Navigator.of(context).pop(true) + : Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (context) => const LockScreenOption(), + ), + ); return true; } else { if (widget.isLockscreenAuth) { @@ -134,7 +142,7 @@ class _LockScreenPasswordState extends State { builder: (context, isFormValid, child) { return DynamicFAB( isKeypadOpen: isKeypadOpen, - buttonText: S.of(context).ok, + buttonText: "Next", isFormValid: isFormValid, onPressedFunction: () async { _submitNotifier.value = !_submitNotifier.value; diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart index a64936ee89..c96726e246 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart @@ -7,6 +7,7 @@ import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; import "package:photos/ui/settings/lockscreen/lockscreen_confirm_pin.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/lockscreen_setting.dart"; @@ -75,7 +76,13 @@ class _LockScreenPinState extends State { if (widget.authPin == enteredHashedPin) { invalidAttemptsCount = 0; await _lockscreenSetting.setInvalidAttemptCount(0); - Navigator.of(context).pop(true); + widget.isLockscreenAuth + ? Navigator.of(context).pop(true) + : Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (context) => const LockScreenOption(), + ), + ); return true; } else { setState(() { @@ -116,6 +123,7 @@ class _LockScreenPinState extends State { final _pinPutDecoration = PinTheme( height: 48, width: 48, + padding: const EdgeInsets.only(top: 6.0), decoration: BoxDecoration( border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)), borderRadius: BorderRadius.circular(15.0), @@ -205,7 +213,7 @@ class _LockScreenPinState extends State { ), ), Text( - widget.isAuthenticating ? 'Enter PIN' : 'Set new PIN', + widget.isAuthenticating ? "Enter PIN" : "Set new PIN", style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 91e2bbfd4d..636a9d5a0e 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -5,7 +5,9 @@ import "dart:math"; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import "package:photos/l10n/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; import 'package:photos/ui/common/gradient_button.dart'; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import "package:photos/utils/lockscreen_setting.dart"; @@ -17,7 +19,8 @@ class LockScreen extends StatefulWidget { State createState() => _LockScreenState(); } -class _LockScreenState extends State with WidgetsBindingObserver { +class _LockScreenState extends State + with WidgetsBindingObserver, TickerProviderStateMixin { final _logger = Logger("LockScreen"); bool _isShowingLockScreen = false; bool _hasPlacedAppInBackground = false; @@ -27,7 +30,16 @@ class _LockScreenState extends State with WidgetsBindingObserver { int lockedTime = 0; int invalidAttemptCount = 0; int remainingTime = 0; + bool showErrorMessage = true; final _lockscreenSetting = LockscreenSetting.instance; + late final AnimationController _controller = AnimationController( + duration: const Duration(milliseconds: 500), + vsync: this, + ); + late final animation = CurvedAnimation( + parent: _controller, + curve: Curves.easeInOut, + ); @override void initState() { @@ -46,36 +58,125 @@ class _LockScreenState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { + final colorTheme = getEnteColorScheme(context); return Scaffold( - body: Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Stack( - alignment: Alignment.center, - children: [ - Opacity( - opacity: 0.2, - child: Image.asset('assets/loading_photos_background.png'), - ), - SizedBox( - width: 180, - child: GradientButton( - text: isTimerRunning - ? formatTime(remainingTime) - : context.l10n.unlock, - iconData: Icons.lock_open_outlined, - onTap: () async { - if (!isTimerRunning) { - await _showLockScreen(source: "tapUnlock"); - } - }, - ), - ), - ], + body: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: ExactAssetImage( + 'assets/loading_photos_background_fullscreen.png', ), - ], + fit: BoxFit.cover, + ), + ), + child: Center( + child: isTimerRunning + ? Column( + children: [ + const Spacer(), + SizedBox( + height: 120, + width: 120, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.white70.withOpacity(0.2), + Colors.white10.withOpacity(0.2), + Colors.white70.withOpacity(0.4), + Colors.white60.withOpacity(0.8), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), + ), + ), + ), + ), + Align( + alignment: Alignment.center, + child: SizedBox( + height: 75, + width: 75, + child: TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: calculateRemainingTime(), + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 50), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.backdropBase, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), + ), + ), + ), + Align( + alignment: Alignment.center, + child: IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ), + ], + ), + ), + const Spacer(), + AnimatedSwitcher( + duration: const Duration(seconds: 1), + transitionBuilder: + (Widget child, Animation animation) { + return FadeTransition(opacity: animation, child: child); + }, + child: showErrorMessage + ? const Text( + "Too many incorrect attempts", + key: ValueKey(1), + ) + : Text( + formatTime(remainingTime), + key: const ValueKey(2), + ), + ), + ], + ) + : Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + SizedBox( + width: 180, + child: GradientButton( + text: context.l10n.unlock, + iconData: Icons.lock_open_outlined, + onTap: () async { + await _showLockScreen(source: "tapUnlock"); + }, + ), + ), + ], + ), ), ), ); @@ -129,6 +230,7 @@ class _LockScreenState extends State with WidgetsBindingObserver { @override void dispose() { _logger.info('disposing'); + _controller.dispose(); WidgetsBinding.instance.removeObserver(this); super.dispose(); } @@ -155,17 +257,25 @@ class _LockScreenState extends State with WidgetsBindingObserver { }); } + double calculateRemainingTime() { + final int totalLockedTime = + lockedTime = pow(2, invalidAttemptCount - 5).toInt() * 30; + if (remainingTime == 0) return 1; + + return 1 - remainingTime / totalLockedTime; + } + String formatTime(int seconds) { final int hours = seconds ~/ 3600; final int minutes = (seconds % 3600) ~/ 60; final int remainingSeconds = seconds % 60; if (hours > 0) { - return "$hours hr $minutes min"; + return "${hours}h ${minutes}m"; } else if (minutes > 0) { - return "$minutes min $remainingSeconds sec"; + return "${minutes}m ${remainingSeconds}s"; } else { - return "$remainingSeconds sec"; + return "${remainingSeconds}s"; } } @@ -208,6 +318,11 @@ class _LockScreenState extends State with WidgetsBindingObserver { await _lockscreenSetting.setLastInvalidAttemptTime( DateTime.now().millisecondsSinceEpoch + lockedTime * 1000, ); + Timer(const Duration(seconds: 2), () { + setState(() { + showErrorMessage = false; + }); + }); await startLockTimer(lockedTime); } _hasAuthenticationFailed = true; From ff2d838b64c5f6bf642294e227b4effb51057701 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Tue, 2 Jul 2024 12:06:41 +0530 Subject: [PATCH 155/466] [web][photos] Correct clip preprocessing --- desktop/src/main/services/ml-clip.ts | 222 +++++++++++++++++++++------ 1 file changed, 176 insertions(+), 46 deletions(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index 6719e191c4..92c56ccc80 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -49,73 +49,203 @@ const clipImageEmbedding_ = async (jpegFilePath: string) => { return normalizeEmbedding(imageEmbedding); }; -const getRGBData = async (jpegFilePath: string): Promise => { +const getRGBData = async ( + jpegFilePath: string, +): Promise => { const jpegData = await fs.readFile(jpegFilePath); const rawImageData = jpeg.decode(jpegData, { useTArray: true, formatAsRGBA: false, - }); + }); // TODO: manav: make sure this works on all images, not just jpeg + const pixelData = rawImageData.data; - const nx = rawImageData.width; - const ny = rawImageData.height; - const inputImage = rawImageData.data; + const requiredWidth = 224; + const requiredHeight = 224; + const requiredSize = 3 * requiredWidth * requiredHeight; + const mean: number[] = [0.48145466, 0.4578275, 0.40821073]; + const std: number[] = [0.26862954, 0.26130258, 0.27577711]; - const nx2 = 224; - const ny2 = 224; - const totalSize = 3 * nx2 * ny2; + const scale = Math.max( + requiredWidth / rawImageData.width, + requiredHeight / rawImageData.height, + ); + const scaledWidth = Math.round(rawImageData.width * scale); + const scaledHeight = Math.round(rawImageData.height * scale); + const widthOffset = Math.max(0, scaledWidth - requiredWidth) / 2; + const heightOffset = Math.max(0, scaledHeight - requiredHeight) / 2; - const result = Array(totalSize).fill(0); - const scale = Math.max(nx, ny) / 224; + const processedImage = new Float32Array(requiredSize); - const nx3 = Math.round(nx / scale); - const ny3 = Math.round(ny / scale); + // Populate the Float32Array with normalized pixel values. + let pi = 0; + const cOffsetG = requiredHeight * requiredWidth; // ChannelOffsetGreen + const cOffsetB = 2 * requiredHeight * requiredWidth; // ChannelOffsetBlue + for (let h = 0 + heightOffset; h < scaledHeight - heightOffset; h++) { + for (let w = 0 + widthOffset; w < scaledWidth - widthOffset; w++) { + const { r, g, b } = pixelRGBBicubic( + w / scale, + h / scale, + pixelData, + rawImageData.width, + rawImageData.height, + ); + processedImage[pi] = (r / 255.0 - mean[0]!) / std[0]!; + processedImage[pi + cOffsetG] = (g / 255.0 - mean[1]!) / std[1]!; + processedImage[pi + cOffsetB] = (b / 255.0 - mean[2]!) / std[2]!; + pi++; + } + } + return processedImage; +}; - const mean: number[] = [0.48145466, 0.4578275, 0.40821073]; - const std: number[] = [0.26862954, 0.26130258, 0.27577711]; +// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts +const pixelRGBBicubic = ( + fx: number, + fy: number, + imageData: Uint8Array, + imageWidth: number, + imageHeight: number, +) => { + // Clamp to image boundaries. + fx = clamp(fx, 0, imageWidth - 1); + fy = clamp(fy, 0, imageHeight - 1); - for (let y = 0; y < ny3; y++) { - for (let x = 0; x < nx3; x++) { - for (let c = 0; c < 3; c++) { - // Linear interpolation - const sx = (x + 0.5) * scale - 0.5; - const sy = (y + 0.5) * scale - 0.5; + const x = Math.trunc(fx) - (fx >= 0.0 ? 0 : 1); + const px = x - 1; + const nx = x + 1; + const ax = x + 2; + const y = Math.trunc(fy) - (fy >= 0.0 ? 0 : 1); + const py = y - 1; + const ny = y + 1; + const ay = y + 2; + const dx = fx - x; + const dy = fy - y; - const x0 = Math.max(0, Math.floor(sx)); - const y0 = Math.max(0, Math.floor(sy)); + const cubic = ( + dx: number, + ipp: number, + icp: number, + inp: number, + iap: number, + ) => + icp + + 0.5 * + (dx * (-ipp + inp) + + dx * dx * (2 * ipp - 5 * icp + 4 * inp - iap) + + dx * dx * dx * (-ipp + 3 * icp - 3 * inp + iap)); - const x1 = Math.min(x0 + 1, nx - 1); - const y1 = Math.min(y0 + 1, ny - 1); + const icc = pixelRGBA(imageData, imageWidth, imageHeight, x, y); - const dx = sx - x0; - const dy = sy - y0; + const ipp = + px < 0 || py < 0 + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, px, py); + const icp = + px < 0 ? icc : pixelRGBA(imageData, imageWidth, imageHeight, x, py); + const inp = + py < 0 || nx >= imageWidth + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, nx, py); + const iap = + ax >= imageWidth || py < 0 + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, ax, py); - const j00 = 3 * (y0 * nx + x0) + c; - const j01 = 3 * (y0 * nx + x1) + c; - const j10 = 3 * (y1 * nx + x0) + c; - const j11 = 3 * (y1 * nx + x1) + c; + const ip0 = cubic(dx, ipp.r!, icp.r!, inp.r!, iap.r!); + const ip1 = cubic(dx, ipp.g!, icp.g!, inp.g!, iap.g!); + const ip2 = cubic(dx, ipp.b!, icp.b!, inp.b!, iap.b!); + // const ip3 = cubic(dx, ipp.a, icp.a, inp.a, iap.a); - const v00 = inputImage[j00] ?? 0; - const v01 = inputImage[j01] ?? 0; - const v10 = inputImage[j10] ?? 0; - const v11 = inputImage[j11] ?? 0; + const ipc = + px < 0 ? icc : pixelRGBA(imageData, imageWidth, imageHeight, px, y); + const inc = + nx >= imageWidth + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, nx, y); + const iac = + ax >= imageWidth + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, ax, y); - const v0 = v00 * (1 - dx) + v01 * dx; - const v1 = v10 * (1 - dx) + v11 * dx; + const ic0 = cubic(dx, ipc.r!, icc.r!, inc.r!, iac.r!); + const ic1 = cubic(dx, ipc.g!, icc.g!, inc.g!, iac.g!); + const ic2 = cubic(dx, ipc.b!, icc.b!, inc.b!, iac.b!); + // const ic3 = cubic(dx, ipc.a, icc.a, inc.a, iac.a); - const v = v0 * (1 - dy) + v1 * dy; + const ipn = + px < 0 || ny >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, px, ny); + const icn = + ny >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, x, ny); + const inn = + nx >= imageWidth || ny >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, nx, ny); + const ian = + ax >= imageWidth || ny >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, ax, ny); - const v2 = Math.min(Math.max(Math.round(v), 0), 255); + const in0 = cubic(dx, ipn.r!, icn.r!, inn.r!, ian.r!); + const in1 = cubic(dx, ipn.g!, icn.g!, inn.g!, ian.g!); + const in2 = cubic(dx, ipn.b!, icn.b!, inn.b!, ian.b!); + // const in3 = cubic(dx, ipn.a, icn.a, inn.a, ian.a); - // createTensorWithDataList is dumb compared to reshape and - // hence has to be given with one channel after another - const i = y * nx3 + x + (c % 3) * 224 * 224; + const ipa = + px < 0 || ay >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, px, ay); + const ica = + ay >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, x, ay); + const ina = + nx >= imageWidth || ay >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, nx, ay); + const iaa = + ax >= imageWidth || ay >= imageHeight + ? icc + : pixelRGBA(imageData, imageWidth, imageHeight, ax, ay); - result[i] = (v2 / 255 - (mean[c] ?? 0)) / (std[c] ?? 1); - } - } - } + const ia0 = cubic(dx, ipa.r!, ica.r!, ina.r!, iaa.r!); + const ia1 = cubic(dx, ipa.g!, ica.g!, ina.g!, iaa.g!); + const ia2 = cubic(dx, ipa.b!, ica.b!, ina.b!, iaa.b!); + // const ia3 = cubic(dx, ipa.a, ica.a, ina.a, iaa.a); + + const c0 = Math.trunc(clamp(cubic(dy, ip0, ic0, in0, ia0), 0, 255)); + const c1 = Math.trunc(clamp(cubic(dy, ip1, ic1, in1, ia1), 0, 255)); + const c2 = Math.trunc(clamp(cubic(dy, ip2, ic2, in2, ia2), 0, 255)); + // const c3 = cubic(dy, ip3, ic3, in3, ia3); + + return { r: c0, g: c1, b: c2 }; +}; + +// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts +const clamp = (value: number, min: number, max: number) => + Math.min(max, Math.max(min, value)); - return result; +// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts +const pixelRGBA = ( + imageData: Uint8Array, + width: number, + height: number, + x: number, + y: number, +) => { + if (x < 0 || x >= width || y < 0 || y >= height) { + return { r: 0, g: 0, b: 0, a: 0 }; + } + const index = (y * width + x) * 4; + return { + r: imageData[index], + g: imageData[index + 1], + b: imageData[index + 2], + a: imageData[index + 3], + }; }; const normalizeEmbedding = (embedding: Float32Array) => { From f8e5bd3d66d56480240e6d068c41cde2ae2c9aab Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 12:07:45 +0530 Subject: [PATCH 156/466] Workaround failures on GitHub action --- web/packages/new/photos/services/ffmpeg/worker.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index fc05abcbd2..aeaaee4bd7 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -1,3 +1,10 @@ +// TODO: These can be removed when we start using ffmpeg upstream. For an reason +// I haven't investigated much, when we run eslint on our CI, it seems to behave +// differently than locally and give a lot of warnings that possibly arise from +// it not being able to locate ffmpeg-wasm. + +/* eslint-disable */ + import log from "@/next/log"; import QueueProcessor from "@ente/shared/utils/queueProcessor"; import { expose } from "comlink"; From dd80b2174f60ec3085ba55bb2207607c560c1e98 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 12:18:32 +0530 Subject: [PATCH 157/466] Try once more --- web/packages/new/.eslintrc.js | 5 +++++ web/packages/new/photos/services/ffmpeg/worker.ts | 7 ------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/web/packages/new/.eslintrc.js b/web/packages/new/.eslintrc.js index 53a0075961..655f23ff94 100644 --- a/web/packages/new/.eslintrc.js +++ b/web/packages/new/.eslintrc.js @@ -1,3 +1,8 @@ module.exports = { extends: ["@/build-config/eslintrc-react"], + // TODO: These can be removed when we start using ffmpeg upstream. For an reason + // I haven't investigated much, when we run eslint on our CI, it seems to behave + // differently than locally and give a lot of warnings that possibly arise from + // it not being able to locate ffmpeg-wasm. + ignorePatterns: ["ffmpeg/worker.ts"], }; diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index aeaaee4bd7..fc05abcbd2 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -1,10 +1,3 @@ -// TODO: These can be removed when we start using ffmpeg upstream. For an reason -// I haven't investigated much, when we run eslint on our CI, it seems to behave -// differently than locally and give a lot of warnings that possibly arise from -// it not being able to locate ffmpeg-wasm. - -/* eslint-disable */ - import log from "@/next/log"; import QueueProcessor from "@ente/shared/utils/queueProcessor"; import { expose } from "comlink"; From 47e84744668e04b93fb11f32c34da1e2ed7103bb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 12:21:39 +0530 Subject: [PATCH 158/466] wc --- web/packages/new/.eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/.eslintrc.js b/web/packages/new/.eslintrc.js index 655f23ff94..37111028d5 100644 --- a/web/packages/new/.eslintrc.js +++ b/web/packages/new/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { // I haven't investigated much, when we run eslint on our CI, it seems to behave // differently than locally and give a lot of warnings that possibly arise from // it not being able to locate ffmpeg-wasm. - ignorePatterns: ["ffmpeg/worker.ts"], + ignorePatterns: ["**/ffmpeg/worker.ts"], }; From 93b264443ce41f6f9e28eabc0d10a7d035aab634 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 12:25:21 +0530 Subject: [PATCH 159/466] next line --- web/packages/new/photos/services/ffmpeg/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index fc05abcbd2..e293b9aed7 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -1,4 +1,5 @@ import log from "@/next/log"; +import { ensure } from "@/utils/ensure"; import QueueProcessor from "@ente/shared/utils/queueProcessor"; import { expose } from "comlink"; import { @@ -24,7 +25,6 @@ import { // // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error // @ts-ignore -import { ensure } from "@/utils/ensure"; import { createFFmpeg, type FFmpeg } from "ffmpeg-wasm"; export class DedicatedFFmpegWorker { From d86ce619c0585bf893607b141a885c52c06d8027 Mon Sep 17 00:00:00 2001 From: Nikunj Kumar Nakum <40589688+nikunjkumarnakum@users.noreply.github.com> Date: Tue, 2 Jul 2024 12:26:37 +0530 Subject: [PATCH 160/466] Update custom-icons.json added bitmart and htx --- auth/assets/custom-icons/_data/custom-icons.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index 0377338c5e..171ef0dd72 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -27,6 +27,9 @@ { "title": "bitget" }, + { + "title": "Bitmart" + }, { "title": "BitMEX" }, @@ -182,6 +185,9 @@ { "title": "Hivelocity" }, + { + "title": "HTX" + }, { "title": "IceDrive", "slug": "Icedrive" From 8fe0a31da368ce471f461d39bd651f442c418005 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 12:30:38 +0530 Subject: [PATCH 161/466] [desktop] Fix CI lint errors https://github.com/ente-io/ente/pull/2342 --- desktop/src/main/services/ml-clip.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index 92c56ccc80..e54e66a4a0 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -1,3 +1,7 @@ +// TODO: These arise from the array indexing in the pre-processing code. Isolate +// once that code settles down to its final place. +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + /** * @file Compute CLIP embeddings for images and text. * @@ -49,9 +53,7 @@ const clipImageEmbedding_ = async (jpegFilePath: string) => { return normalizeEmbedding(imageEmbedding); }; -const getRGBData = async ( - jpegFilePath: string, -): Promise => { +const getRGBData = async (jpegFilePath: string): Promise => { const jpegData = await fs.readFile(jpegFilePath); const rawImageData = jpeg.decode(jpegData, { useTArray: true, From f3bd395f11bcaca52268ba0aee21164d3ea3c07e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:04:51 +0530 Subject: [PATCH 162/466] New loc --- .../components/Search/SearchBar/searchInput/index.tsx | 2 +- web/apps/photos/src/components/ml/MLSearchSettings.tsx | 2 +- web/apps/photos/src/components/ml/PeopleList.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 6 +++--- web/apps/photos/src/services/logout.ts | 2 +- web/apps/photos/src/services/searchService.ts | 9 ++++++--- web/apps/photos/src/types/search/index.ts | 4 ++-- .../face => packages/new/photos/services/ml}/cluster.ts | 0 .../face => packages/new/photos/services/ml}/crop.ts | 0 web/packages/new/photos/services/{face => ml}/db.ts | 0 .../face => packages/new/photos/services/ml}/f-index.ts | 0 .../new/photos/services/ml}/face.worker.ts | 0 .../face => packages/new/photos/services/ml}/image.ts | 0 web/packages/new/photos/services/{face => ml}/index.ts | 0 .../face => packages/new/photos/services/ml}/indexer.ts | 0 .../new/photos/services/ml}/indexer.worker.ts | 0 .../new/photos/services/ml}/machineLearningService.ts | 4 ++-- .../new/photos/services/ml}/mlWorkManager.ts | 2 +- .../face => packages/new/photos/services/ml}/people.ts | 0 .../face => packages/new/photos/services/ml}/remote.ts | 0 web/packages/new/photos/services/{face => ml}/types.ts | 0 web/packages/new/photos/services/{face => ml}/worker.ts | 0 22 files changed, 19 insertions(+), 16 deletions(-) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/cluster.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/crop.ts (100%) rename web/packages/new/photos/services/{face => ml}/db.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/f-index.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/face.worker.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/image.ts (100%) rename web/packages/new/photos/services/{face => ml}/index.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/indexer.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/indexer.worker.ts (100%) rename web/{apps/photos/src/services/machineLearning => packages/new/photos/services/ml}/machineLearningService.ts (97%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/mlWorkManager.ts (99%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/people.ts (100%) rename web/{apps/photos/src/services/face => packages/new/photos/services/ml}/remote.ts (100%) rename web/packages/new/photos/services/{face => ml}/types.ts (100%) rename web/packages/new/photos/services/{face => ml}/worker.ts (100%) diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx index d2fc70ee30..599a27fe79 100644 --- a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx @@ -10,8 +10,8 @@ import { useCallback, useContext, useEffect, useRef, useState } from "react"; import { components } from "react-select"; import AsyncSelect from "react-select/async"; import { InputActionMeta } from "react-select/src/types"; -import type { Person } from "services/face/people"; import { City } from "services/locationSearchService"; +import type { Person } from "services/ml/people"; import { getAutoCompleteSuggestions, getDefaultOptions, diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 14ad139352..9deb9613a2 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -18,7 +18,7 @@ import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; import { Trans } from "react-i18next"; -import { canEnableFaceIndexing } from "services/face/indexer"; +import { canEnableFaceIndexing } from "services/ml/indexer"; import { getFaceSearchEnabledStatus, updateFaceSearchEnabledStatus, diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index 4e59588379..00936d5baa 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -4,8 +4,8 @@ import { Skeleton, styled } from "@mui/material"; import { Legend } from "components/PhotoViewer/styledComponents/Legend"; import { t } from "i18next"; import React, { useEffect, useState } from "react"; -import { unidentifiedFaceIDs } from "services/face/indexer"; -import type { Person } from "services/face/people"; +import { unidentifiedFaceIDs } from "services/ml/indexer"; +import type { Person } from "services/ml/people"; const FaceChipContainer = styled("div")` display: flex; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index a74c2b3ab1..38a43561ad 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -50,12 +50,12 @@ import "photoswipe/dist/photoswipe.css"; import { createContext, useContext, useEffect, useRef, useState } from "react"; import LoadingBar from "react-top-loading-bar"; import { resumeExportsIfNeeded } from "services/export"; +import { photosLogout } from "services/logout"; import { isFaceIndexingEnabled, setIsFaceIndexingEnabled, -} from "services/face/indexer"; -import mlWorkManager from "services/face/mlWorkManager"; -import { photosLogout } from "services/logout"; +} from "services/ml/indexer"; +import mlWorkManager from "services/ml/mlWorkManager"; import { getFamilyPortalRedirectURL, getRoadmapRedirectURL, diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index fbf8249df2..a58dd3e4d0 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -2,11 +2,11 @@ import DownloadManager from "@/new/photos/services/download"; import { terminateFaceWorker } from "@/new/photos/services/face"; import { clearFaceData } from "@/new/photos/services/face/db"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; +import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; import { accountLogout } from "@ente/accounts/services/logout"; import { clipService } from "services/clip-service"; import exportService from "./export"; -import mlWorkManager from "./face/mlWorkManager"; /** * Logout sequence for the photos app. diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 4ae4991a96..73cbb476ef 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,10 +1,15 @@ import { FILE_TYPE } from "@/media/file-type"; +import { + faceIndexingStatus, + isFaceIndexingEnabled, +} from "@/new/photos/services/ml/indexer"; +import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; import log from "@/next/log"; import * as chrono from "chrono-node"; import { t } from "i18next"; -import type { Person } from "services/face/people"; +import type { Person } from "services/ml/people"; import { Collection } from "types/collection"; import { EntityType, LocationTag, LocationTagData } from "types/entity"; import { @@ -21,8 +26,6 @@ import { getFormattedDate } from "utils/search"; import { clipService, computeClipMatchScore } from "./clip-service"; import { localCLIPEmbeddings } from "./embeddingService"; import { getLatestEntities } from "./entityService"; -import { faceIndexingStatus, isFaceIndexingEnabled } from "./face/indexer"; -import mlWorkManager from "./face/mlWorkManager"; import locationSearchService, { City } from "./locationSearchService"; const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]); diff --git a/web/apps/photos/src/types/search/index.ts b/web/apps/photos/src/types/search/index.ts index 0e18d787ab..369a4a957c 100644 --- a/web/apps/photos/src/types/search/index.ts +++ b/web/apps/photos/src/types/search/index.ts @@ -1,8 +1,8 @@ import { FILE_TYPE } from "@/media/file-type"; import { EnteFile } from "@/new/photos/types/file"; -import type { FaceIndexingStatus } from "services/face/indexer"; -import type { Person } from "services/face/people"; import { City } from "services/locationSearchService"; +import type { FaceIndexingStatus } from "services/ml/indexer"; +import type { Person } from "services/ml/people"; import { LocationTagData } from "types/entity"; export enum SuggestionType { diff --git a/web/apps/photos/src/services/face/cluster.ts b/web/packages/new/photos/services/ml/cluster.ts similarity index 100% rename from web/apps/photos/src/services/face/cluster.ts rename to web/packages/new/photos/services/ml/cluster.ts diff --git a/web/apps/photos/src/services/face/crop.ts b/web/packages/new/photos/services/ml/crop.ts similarity index 100% rename from web/apps/photos/src/services/face/crop.ts rename to web/packages/new/photos/services/ml/crop.ts diff --git a/web/packages/new/photos/services/face/db.ts b/web/packages/new/photos/services/ml/db.ts similarity index 100% rename from web/packages/new/photos/services/face/db.ts rename to web/packages/new/photos/services/ml/db.ts diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/packages/new/photos/services/ml/f-index.ts similarity index 100% rename from web/apps/photos/src/services/face/f-index.ts rename to web/packages/new/photos/services/ml/f-index.ts diff --git a/web/apps/photos/src/services/face/face.worker.ts b/web/packages/new/photos/services/ml/face.worker.ts similarity index 100% rename from web/apps/photos/src/services/face/face.worker.ts rename to web/packages/new/photos/services/ml/face.worker.ts diff --git a/web/apps/photos/src/services/face/image.ts b/web/packages/new/photos/services/ml/image.ts similarity index 100% rename from web/apps/photos/src/services/face/image.ts rename to web/packages/new/photos/services/ml/image.ts diff --git a/web/packages/new/photos/services/face/index.ts b/web/packages/new/photos/services/ml/index.ts similarity index 100% rename from web/packages/new/photos/services/face/index.ts rename to web/packages/new/photos/services/ml/index.ts diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/packages/new/photos/services/ml/indexer.ts similarity index 100% rename from web/apps/photos/src/services/face/indexer.ts rename to web/packages/new/photos/services/ml/indexer.ts diff --git a/web/apps/photos/src/services/face/indexer.worker.ts b/web/packages/new/photos/services/ml/indexer.worker.ts similarity index 100% rename from web/apps/photos/src/services/face/indexer.worker.ts rename to web/packages/new/photos/services/ml/indexer.worker.ts diff --git a/web/apps/photos/src/services/machineLearning/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts similarity index 97% rename from web/apps/photos/src/services/machineLearning/machineLearningService.ts rename to web/packages/new/photos/services/ml/machineLearningService.ts index be182219a8..97e3abcd69 100644 --- a/web/apps/photos/src/services/machineLearning/machineLearningService.ts +++ b/web/packages/new/photos/services/ml/machineLearningService.ts @@ -2,8 +2,8 @@ import { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; -import { syncWithLocalFilesAndGetFilesToIndex } from "services/face/indexer"; -import { FaceIndexerWorker } from "services/face/indexer.worker"; +import { syncWithLocalFilesAndGetFilesToIndex } from "services/ml/indexer"; +import { FaceIndexerWorker } from "services/ml/indexer.worker"; const batchSize = 200; diff --git a/web/apps/photos/src/services/face/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts similarity index 99% rename from web/apps/photos/src/services/face/mlWorkManager.ts rename to web/packages/new/photos/services/ml/mlWorkManager.ts index 4476437ee1..072884c359 100644 --- a/web/apps/photos/src/services/face/mlWorkManager.ts +++ b/web/packages/new/photos/services/ml/mlWorkManager.ts @@ -8,7 +8,7 @@ import { Events, eventBus } from "@ente/shared/events"; import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; import debounce from "debounce"; import PQueue from "p-queue"; -import type { DedicatedMLWorker } from "services/face/face.worker"; +import type { DedicatedMLWorker } from "services/ml/face.worker"; export type JobState = "Scheduled" | "Running" | "NotScheduled"; diff --git a/web/apps/photos/src/services/face/people.ts b/web/packages/new/photos/services/ml/people.ts similarity index 100% rename from web/apps/photos/src/services/face/people.ts rename to web/packages/new/photos/services/ml/people.ts diff --git a/web/apps/photos/src/services/face/remote.ts b/web/packages/new/photos/services/ml/remote.ts similarity index 100% rename from web/apps/photos/src/services/face/remote.ts rename to web/packages/new/photos/services/ml/remote.ts diff --git a/web/packages/new/photos/services/face/types.ts b/web/packages/new/photos/services/ml/types.ts similarity index 100% rename from web/packages/new/photos/services/face/types.ts rename to web/packages/new/photos/services/ml/types.ts diff --git a/web/packages/new/photos/services/face/worker.ts b/web/packages/new/photos/services/ml/worker.ts similarity index 100% rename from web/packages/new/photos/services/face/worker.ts rename to web/packages/new/photos/services/ml/worker.ts From 6c178a4476d9b5b2b4d020ee1f07547995f05ca9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:07:47 +0530 Subject: [PATCH 163/466] fix --- .../services/ml/machineLearningService.ts | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/web/packages/new/photos/services/ml/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts index 97e3abcd69..74287c1f7a 100644 --- a/web/packages/new/photos/services/ml/machineLearningService.ts +++ b/web/packages/new/photos/services/ml/machineLearningService.ts @@ -1,9 +1,9 @@ -import { EnteFile } from "@/new/photos/types/file"; +import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; -import { syncWithLocalFilesAndGetFilesToIndex } from "services/ml/indexer"; -import { FaceIndexerWorker } from "services/ml/indexer.worker"; +import { syncWithLocalFilesAndGetFilesToIndex } from "./indexer"; +import { FaceIndexerWorker } from "./indexer.worker"; const batchSize = 200; @@ -12,10 +12,10 @@ class MLSyncContext { public userID: number; public userAgent: string; - public localFilesMap: Map; + public localFilesMap: Map | undefined; public outOfSyncFiles: EnteFile[]; public nSyncedFiles: number; - public error?: Error; + public error?: unknown; public syncQueue: PQueue; @@ -42,8 +42,8 @@ const getConcurrency = () => Math.max(2, Math.ceil(navigator.hardwareConcurrency / 2)); class MachineLearningService { - private localSyncContext: Promise; - private syncContext: Promise; + private localSyncContext: Promise | undefined; + private syncContext: Promise | undefined; public async sync( token: string, @@ -183,18 +183,21 @@ class MachineLearningService { syncContext.nSyncedFiles += 1; } catch (e) { let error = e; - if ("status" in error) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ("status" in (error as any)) { const parsedMessage = parseUploadErrorCodes(error); error = parsedMessage; } - // TODO: throw errors not related to specific file - // sync job run should stop after these errors - // don't persist these errors against file, - // can include indexeddb/cache errors too - switch (error.message) { - case CustomError.SESSION_EXPIRED: - case CustomError.NETWORK_ERROR: - throw error; + if (error instanceof Error) { + // TODO: throw errors not related to specific file + // sync job run should stop after these errors + // don't persist these errors against file, + // can include indexeddb/cache errors too + switch (error.message) { + case CustomError.SESSION_EXPIRED: + case CustomError.NETWORK_ERROR: + throw error; + } } syncContext.nSyncedFiles += 1; From 1f00330fd4967bf1772efb934432b6848db4f366 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:13:02 +0530 Subject: [PATCH 164/466] fix or neuter or workaround --- .../photos/src/services/embeddingService.ts | 2 +- web/packages/new/photos/services/ml/crop.ts | 2 +- .../new/photos/services/ml/f-index.ts | 4 +- .../new/photos/services/ml/indexer.worker.ts | 2 +- .../new/photos/services/ml/mlWorkManager.ts | 47 ++++++++++--------- web/packages/new/photos/services/ml/people.ts | 2 +- web/packages/new/photos/services/ml/remote.ts | 19 ++++---- 7 files changed, 43 insertions(+), 35 deletions(-) diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts index b255086607..99af57eb5b 100644 --- a/web/apps/photos/src/services/embeddingService.ts +++ b/web/apps/photos/src/services/embeddingService.ts @@ -1,9 +1,9 @@ import type { EmbeddingModel } from "@/new/photos/services/embedding"; -import type { FaceIndex } from "@/new/photos/services/face/types"; import { getAllLocalFiles, getLocalTrashedFiles, } from "@/new/photos/services/files"; +import type { FaceIndex } from "@/new/photos/services/ml/types"; import { EnteFile } from "@/new/photos/types/file"; import { inWorker } from "@/next/env"; import log from "@/next/log"; diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index ae5d44f104..6e63c3893b 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,4 +1,4 @@ -import type { Box } from "@/new/photos/services/face/types"; +import type { Box } from "@/new/photos/services/ml/types"; import { blobCache } from "@/next/blob-cache"; import type { FaceAlignment } from "./f-index"; diff --git a/web/packages/new/photos/services/ml/f-index.ts b/web/packages/new/photos/services/ml/f-index.ts index 48b37acb52..4ea0b25df2 100644 --- a/web/packages/new/photos/services/ml/f-index.ts +++ b/web/packages/new/photos/services/ml/f-index.ts @@ -6,8 +6,8 @@ import type { Dimensions, Face, Point, -} from "@/new/photos/services/face/types"; -import { faceIndexingVersion } from "@/new/photos/services/face/types"; +} from "@/new/photos/services/ml/types"; +import { faceIndexingVersion } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; diff --git a/web/packages/new/photos/services/ml/indexer.worker.ts b/web/packages/new/photos/services/ml/indexer.worker.ts index 9df8a455ef..fdae17f2cc 100644 --- a/web/packages/new/photos/services/ml/indexer.worker.ts +++ b/web/packages/new/photos/services/ml/indexer.worker.ts @@ -3,7 +3,7 @@ import { markIndexingFailed, saveFaceIndex, } from "@/new/photos/services/face/db"; -import type { FaceIndex } from "@/new/photos/services/face/types"; +import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { fileLogID } from "utils/file"; diff --git a/web/packages/new/photos/services/ml/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts index 072884c359..e71a8f8398 100644 --- a/web/packages/new/photos/services/ml/mlWorkManager.ts +++ b/web/packages/new/photos/services/ml/mlWorkManager.ts @@ -1,5 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; -import { EnteFile } from "@/new/photos/types/file"; +import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; @@ -8,7 +8,7 @@ import { Events, eventBus } from "@ente/shared/events"; import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; import debounce from "debounce"; import PQueue from "p-queue"; -import type { DedicatedMLWorker } from "services/ml/face.worker"; +import type { DedicatedMLWorker } from "./face.worker"; export type JobState = "Scheduled" | "Running" | "NotScheduled"; @@ -22,8 +22,8 @@ export class MLSyncJob { private runCallback: () => Promise; private state: JobState; private stopped: boolean; - private intervalSec: number; - private nextTimeoutId: ReturnType; + private intervalSec = 5; + private nextTimeoutId: ReturnType | undefined; constructor(runCallback: () => Promise) { this.runCallback = runCallback; @@ -92,14 +92,14 @@ export class MLSyncJob { } class MLWorkManager { - private mlSyncJob: MLSyncJob; - private syncJobWorker: ComlinkWorker; + private mlSyncJob: MLSyncJob | undefined; + private syncJobWorker: ComlinkWorker | undefined; private debouncedLiveSyncIdle: () => void; private debouncedFilesUpdated: () => void; private liveSyncQueue: PQueue; - private liveSyncWorker: ComlinkWorker; + private liveSyncWorker: ComlinkWorker | undefined; private mlSearchEnabled: boolean; public isSyncing = false; @@ -114,11 +114,12 @@ class MLWorkManager { this.mlSearchEnabled = false; this.debouncedLiveSyncIdle = debounce( - () => this.onLiveSyncIdle(), + () => void this.onLiveSyncIdle(), 30 * 1000, ); this.debouncedFilesUpdated = debounce( - () => this.mlSearchEnabled && this.localFilesUpdatedHandler(), + () => + void (this.mlSearchEnabled && this.localFilesUpdatedHandler()), 30 * 1000, ); } @@ -169,7 +170,7 @@ class MLWorkManager { } async logout() { - this.setMlSearchEnabled(false); + await this.setMlSearchEnabled(false); this.stopSyncJob(); this.mlSyncJob = undefined; await this.terminateLiveSyncWorker(); @@ -198,17 +199,17 @@ class MLWorkManager { private async localFilesUpdatedHandler() { log.info("Local files updated"); - this.startSyncJob(); + await this.startSyncJob(); } // Live Sync - private async getLiveSyncWorker() { - if (!this.liveSyncWorker) { - this.liveSyncWorker = createFaceComlinkWorker("ml-sync-live"); - } + // private async getLiveSyncWorker() { + // if (!this.liveSyncWorker) { + // this.liveSyncWorker = createFaceComlinkWorker("ml-sync-live"); + // } - return await this.liveSyncWorker.remote; - } + // return await this.liveSyncWorker.remote; + // } private async terminateLiveSyncWorker() { if (!this.liveSyncWorker) { @@ -223,6 +224,7 @@ class MLWorkManager { error, ); } + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition this.liveSyncWorker?.terminate(); this.liveSyncWorker = undefined; } @@ -230,11 +232,11 @@ class MLWorkManager { private async onLiveSyncIdle() { log.info("Live sync idle"); await this.terminateLiveSyncWorker(); - this.mlSearchEnabled && this.startSyncJob(); + await (this.mlSearchEnabled && this.startSyncJob()); } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async syncLocalFile(enteFile: EnteFile, localFile: globalThis.File) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await + public async syncLocalFile(_: EnteFile, __: globalThis.File) { return; /* TODO-ML(MR): Disable live sync for now @@ -289,10 +291,11 @@ class MLWorkManager { } const token = getToken(); - const userID = getUserID(); + const userID = getUserID() as number; const userAgent = await getUserAgent(); const jobWorkerProxy = await this.getSyncJobWorker(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return return await jobWorkerProxy.sync(token, userID, userAgent); // this.terminateSyncJobWorker(); // TODO: redirect/refresh to gallery in case of session_expired, stop ml sync job @@ -301,8 +304,10 @@ class MLWorkManager { } finally { this.isSyncing = false; } + return false; } + // eslint-disable-next-line @typescript-eslint/require-await public async startSyncJob() { try { log.info("MLWorkManager.startSyncJob"); diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index 311183768c..0dac096dc4 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -1,7 +1,7 @@ export interface Person { id: number; name?: string; - files: Array; + files: number[]; displayFaceId?: string; } diff --git a/web/packages/new/photos/services/ml/remote.ts b/web/packages/new/photos/services/ml/remote.ts index daf177a0e4..869e56b4fd 100644 --- a/web/packages/new/photos/services/ml/remote.ts +++ b/web/packages/new/photos/services/ml/remote.ts @@ -1,8 +1,8 @@ -import type { FaceIndex } from "@/new/photos/services/face/types"; +import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import ComlinkCryptoWorker from "@ente/shared/crypto"; -import { putEmbedding } from "services/embeddingService"; +// import { putEmbedding } from "services/embeddingService"; export const putFaceIndex = async ( enteFile: EnteFile, @@ -16,10 +16,13 @@ export const putFaceIndex = async ( const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); const { file: encryptedEmbeddingData } = await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); - await putEmbedding({ - fileID: enteFile.id, - encryptedEmbedding: encryptedEmbeddingData.encryptedData, - decryptionHeader: encryptedEmbeddingData.decryptionHeader, - model: "file-ml-clip-face", - }); + // TODO(MR): Indexing + console.log(encryptedEmbeddingData); + throw new Error("Unimplemented"); + // await putEmbedding({ + // fileID: enteFile.id, + // encryptedEmbedding: encryptedEmbeddingData.encryptedData, + // decryptionHeader: encryptedEmbeddingData.decryptionHeader, + // model: "file-ml-clip-face", + // }); }; From 4d9b7d763295a207ed35f3209e0e4c8cc73bf3ab Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:17:36 +0530 Subject: [PATCH 165/466] fix --- web/packages/new/photos/services/ml/cluster.ts | 6 +++--- web/packages/new/photos/services/ml/crop.ts | 17 +++++++++-------- .../new/photos/services/ml/face.worker.ts | 12 +++++++++--- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/services/ml/cluster.ts b/web/packages/new/photos/services/ml/cluster.ts index 41ba76504b..c3474b22b8 100644 --- a/web/packages/new/photos/services/ml/cluster.ts +++ b/web/packages/new/photos/services/ml/cluster.ts @@ -15,9 +15,9 @@ export interface ClusterFacesResult { * pipeline. Each embedding is for a face detected in an image (a single image * may have multiple faces detected within it). */ -export const clusterFaces = async ( - faceEmbeddings: Array>, -): Promise => { +export const clusterFaces = ( + faceEmbeddings: number[][], +): ClusterFacesResult => { const hdbscan = new Hdbscan({ input: faceEmbeddings, minClusterSize: 3, diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 6e63c3893b..1e305bbe7c 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,5 +1,6 @@ import type { Box } from "@/new/photos/services/ml/types"; import { blobCache } from "@/next/blob-cache"; +import { ensure } from "@/utils/ensure"; import type { FaceAlignment } from "./f-index"; export const saveFaceCrop = async ( @@ -19,7 +20,7 @@ export const saveFaceCrop = async ( const imageBitmapToBlob = (imageBitmap: ImageBitmap) => { const canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); - canvas.getContext("2d").drawImage(imageBitmap, 0, 0); + ensure(canvas.getContext("2d")).drawImage(imageBitmap, 0, 0); return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; @@ -46,7 +47,7 @@ const extractFaceCrop = ( } const offscreen = new OffscreenCanvas(outputSize.width, outputSize.height); - const offscreenCtx = offscreen.getContext("2d"); + const offscreenCtx = ensure(offscreen.getContext("2d")); offscreenCtx.imageSmoothingQuality = "high"; offscreenCtx.translate(outputSize.width / 2, outputSize.height / 2); @@ -77,12 +78,12 @@ const extractFaceCrop = ( }; /** Round all the components of the box. */ -const roundBox = (box: Box): Box => { - const [x, y, width, height] = [box.x, box.y, box.width, box.height].map( - (val) => Math.round(val), - ); - return { x, y, width, height }; -}; +const roundBox = (box: Box): Box => ({ + x: Math.round(box.x), + y: Math.round(box.y), + width: Math.round(box.width), + height: Math.round(box.height), +}); /** Increase the size of the given {@link box} by {@link factor}. */ const enlargeBox = (box: Box, factor: number): Box => { diff --git a/web/packages/new/photos/services/ml/face.worker.ts b/web/packages/new/photos/services/ml/face.worker.ts index f5cc4b8b6f..d313ecfe09 100644 --- a/web/packages/new/photos/services/ml/face.worker.ts +++ b/web/packages/new/photos/services/ml/face.worker.ts @@ -1,7 +1,7 @@ import downloadManager from "@/new/photos/services/download"; -import { EnteFile } from "@/new/photos/types/file"; +import type { EnteFile } from "@/new/photos/types/file"; import { expose } from "comlink"; -import mlService from "services/machineLearning/machineLearningService"; +import mlService from "./machineLearningService"; export class DedicatedMLWorker { public async closeLocalSyncContext() { @@ -15,7 +15,13 @@ export class DedicatedMLWorker { enteFile: EnteFile, localFile: globalThis.File, ) { - mlService.syncLocalFile(token, userID, userAgent, enteFile, localFile); + return mlService.syncLocalFile( + token, + userID, + userAgent, + enteFile, + localFile, + ); } public async sync(token: string, userID: number, userAgent: string) { From c27f4a64dfb6cf367548f31614f6cc8691479beb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:19:56 +0530 Subject: [PATCH 166/466] assert --- desktop/src/main/services/ml-clip.ts | 3 +- web/packages/new/photos/services/ml/image.ts | 52 +++++++++++--------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index e54e66a4a0..b0d6fd9337 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -1,5 +1,6 @@ // TODO: These arise from the array indexing in the pre-processing code. Isolate -// once that code settles down to its final place. +// once that code settles down to its final place (currently duplicated across +// web and desktop). /* eslint-disable @typescript-eslint/no-non-null-assertion */ /** diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index 12f49db541..d7875fa348 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -1,3 +1,9 @@ +// TODO: These arise from the array indexing in the pre-processing code. Isolate +// once that code settles down to its final place (currently duplicated across +// web and desktop). +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + +import { ensure } from "@/utils/ensure"; import { Matrix, inverse } from "ml-matrix"; /** @@ -47,9 +53,9 @@ export function pixelRGBBilinear( // Return interpolated pixel colors. return { - r: bilinear(pixel1.r, pixel2.r, pixel3.r, pixel4.r), - g: bilinear(pixel1.g, pixel2.g, pixel3.g, pixel4.g), - b: bilinear(pixel1.b, pixel2.b, pixel3.b, pixel4.b), + r: bilinear(pixel1.r!, pixel2.r!, pixel3.r!, pixel4.r!), + g: bilinear(pixel1.g!, pixel2.g!, pixel3.g!, pixel4.g!), + b: bilinear(pixel1.b!, pixel2.b!, pixel3.b!, pixel4.b!), }; } @@ -128,9 +134,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, py); - const ip0 = cubic(dx, ipp.r, icp.r, inp.r, iap.r); - const ip1 = cubic(dx, ipp.g, icp.g, inp.g, iap.g); - const ip2 = cubic(dx, ipp.b, icp.b, inp.b, iap.b); + const ip0 = cubic(dx, ipp.r!, icp.r!, inp.r!, iap.r!); + const ip1 = cubic(dx, ipp.g!, icp.g!, inp.g!, iap.g!); + const ip2 = cubic(dx, ipp.b!, icp.b!, inp.b!, iap.b!); // const ip3 = cubic(dx, ipp.a, icp.a, inp.a, iap.a); const ipc = @@ -144,9 +150,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, y); - const ic0 = cubic(dx, ipc.r, icc.r, inc.r, iac.r); - const ic1 = cubic(dx, ipc.g, icc.g, inc.g, iac.g); - const ic2 = cubic(dx, ipc.b, icc.b, inc.b, iac.b); + const ic0 = cubic(dx, ipc.r!, icc.r!, inc.r!, iac.r!); + const ic1 = cubic(dx, ipc.g!, icc.g!, inc.g!, iac.g!); + const ic2 = cubic(dx, ipc.b!, icc.b!, inc.b!, iac.b!); // const ic3 = cubic(dx, ipc.a, icc.a, inc.a, iac.a); const ipn = @@ -166,9 +172,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ny); - const in0 = cubic(dx, ipn.r, icn.r, inn.r, ian.r); - const in1 = cubic(dx, ipn.g, icn.g, inn.g, ian.g); - const in2 = cubic(dx, ipn.b, icn.b, inn.b, ian.b); + const in0 = cubic(dx, ipn.r!, icn.r!, inn.r!, ian.r!); + const in1 = cubic(dx, ipn.g!, icn.g!, inn.g!, ian.g!); + const in2 = cubic(dx, ipn.b!, icn.b!, inn.b!, ian.b!); // const in3 = cubic(dx, ipn.a, icn.a, inn.a, ian.a); const ipa = @@ -188,9 +194,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ay); - const ia0 = cubic(dx, ipa.r, ica.r, ina.r, iaa.r); - const ia1 = cubic(dx, ipa.g, ica.g, ina.g, iaa.g); - const ia2 = cubic(dx, ipa.b, ica.b, ina.b, iaa.b); + const ia0 = cubic(dx, ipa.r!, ica.r!, ina.r!, iaa.r!); + const ia1 = cubic(dx, ipa.g!, ica.g!, ina.g!, iaa.g!); + const ia2 = cubic(dx, ipa.b!, ica.b!, ina.b!, iaa.b!); // const ia3 = cubic(dx, ipa.a, ica.a, ina.a, iaa.a); const c0 = Math.trunc(clamp(cubic(dy, ip0, ic0, in0, ia0), 0, 255)); @@ -215,7 +221,7 @@ export const warpAffineFloat32List = ( // Get the pixel data. const offscreenCanvas = new OffscreenCanvas(width, height); - const ctx = offscreenCanvas.getContext("2d"); + const ctx = ensure(offscreenCanvas.getContext("2d")); ctx.drawImage(imageBitmap, 0, 0, width, height); const imageData = ctx.getImageData(0, 0, width, height); const pixelData = imageData.data; @@ -225,13 +231,13 @@ export const warpAffineFloat32List = ( ); // 3x3 const A: Matrix = new Matrix([ - [transformationMatrix[0][0], transformationMatrix[0][1]], - [transformationMatrix[1][0], transformationMatrix[1][1]], + [transformationMatrix[0]![0]!, transformationMatrix[0]![1]!], + [transformationMatrix[1]![0]!, transformationMatrix[1]![1]!], ]); const Ainverse = inverse(A); - const b00 = transformationMatrix[0][2]; - const b10 = transformationMatrix[1][2]; + const b00 = transformationMatrix[0]![2]!; + const b10 = transformationMatrix[1]![2]!; const a00Prime = Ainverse.get(0, 0); const a01Prime = Ainverse.get(0, 1); const a10Prime = Ainverse.get(1, 0); @@ -283,9 +289,9 @@ export const grayscaleIntMatrixFromNormalized2List = ( const pixelIndex = startIndex + 3 * (y * width + x); return clamp( Math.round( - 0.299 * bipolarFloatToRGB(imageList[pixelIndex]) + - 0.587 * bipolarFloatToRGB(imageList[pixelIndex + 1]) + - 0.114 * bipolarFloatToRGB(imageList[pixelIndex + 2]), + 0.299 * bipolarFloatToRGB(imageList[pixelIndex]!) + + 0.587 * bipolarFloatToRGB(imageList[pixelIndex + 1]!) + + 0.114 * bipolarFloatToRGB(imageList[pixelIndex + 2]!), ), 0, 255, From 9c377d9ced9ae6a09bb08405af5331d695139cd8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:25:25 +0530 Subject: [PATCH 167/466] fix --- web/apps/photos/src/services/logout.ts | 4 +- web/apps/photos/src/utils/file/index.ts | 8 --- .../new/photos/services/ml/indexer.ts | 2 +- .../new/photos/services/ml/indexer.worker.ts | 8 +-- .../services/ml/machineLearningService.ts | 49 ++++++++++--------- web/packages/new/photos/utils/file.ts | 10 ++++ 6 files changed, 44 insertions(+), 37 deletions(-) diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index a58dd3e4d0..3f0736457d 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,6 +1,6 @@ import DownloadManager from "@/new/photos/services/download"; -import { terminateFaceWorker } from "@/new/photos/services/face"; -import { clearFaceData } from "@/new/photos/services/face/db"; +import { terminateFaceWorker } from "@/new/photos/services/ml"; +import { clearFaceData } from "@/new/photos/services/ml/db"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts index 6f2b3b89fb..5ae7ace527 100644 --- a/web/apps/photos/src/utils/file/index.ts +++ b/web/apps/photos/src/utils/file/index.ts @@ -49,14 +49,6 @@ export enum FILE_OPS_TYPE { DELETE_PERMANENTLY, } -/** - * @returns a string to use as an identifier when logging information about the - * given {@link enteFile}. The returned string contains the file name (for ease - * of debugging) and the file ID (for exactness). - */ -export const fileLogID = (enteFile: EnteFile) => - `file ${enteFile.metadata.title ?? "-"} (${enteFile.id})`; - export async function getUpdatedEXIFFileForDownload( fileReader: FileReader, file: EnteFile, diff --git a/web/packages/new/photos/services/ml/indexer.ts b/web/packages/new/photos/services/ml/indexer.ts index a7dfe319b9..a17e85b2df 100644 --- a/web/packages/new/photos/services/ml/indexer.ts +++ b/web/packages/new/photos/services/ml/indexer.ts @@ -3,7 +3,7 @@ import { indexableFileIDs, indexedAndIndexableCounts, updateAssumingLocalFiles, -} from "@/new/photos/services/face/db"; +} from "@/new/photos/services/ml/db"; import { isBetaUser, isInternalUser, diff --git a/web/packages/new/photos/services/ml/indexer.worker.ts b/web/packages/new/photos/services/ml/indexer.worker.ts index fdae17f2cc..c6184679fd 100644 --- a/web/packages/new/photos/services/ml/indexer.worker.ts +++ b/web/packages/new/photos/services/ml/indexer.worker.ts @@ -2,11 +2,11 @@ import { closeFaceDBConnectionsIfNeeded, markIndexingFailed, saveFaceIndex, -} from "@/new/photos/services/face/db"; +} from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; -import { fileLogID } from "utils/file"; +import { fileLogID } from "../../utils/file"; import { indexFaces } from "./f-index"; import { putFaceIndex } from "./remote"; @@ -46,7 +46,7 @@ export class FaceIndexerWorker { // failed, not if there were subsequent failures (like when trying // to put the result to remote or save it to the local face DB). log.error(`Failed to index faces in ${f}`, e); - markIndexingFailed(enteFile.id); + await markIndexingFailed(enteFile.id); throw e; } @@ -72,6 +72,6 @@ export class FaceIndexerWorker { * connections to the face DB from the web worker's context. */ closeFaceDB() { - closeFaceDBConnectionsIfNeeded(); + void closeFaceDBConnectionsIfNeeded(); } } diff --git a/web/packages/new/photos/services/ml/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts index 74287c1f7a..cadd465b50 100644 --- a/web/packages/new/photos/services/ml/machineLearningService.ts +++ b/web/packages/new/photos/services/ml/machineLearningService.ts @@ -110,23 +110,23 @@ class MachineLearningService { return this.syncContext; } - private async getLocalSyncContext( - token: string, - userID: number, - userAgent: string, - ) { - // TODO-ML(MR): This is updating the file ML version. verify. - if (!this.localSyncContext) { - log.info("Creating localSyncContext"); - // TODO-ML(MR): - this.localSyncContext = new Promise((resolve) => { - resolve(new MLSyncContext(token, userID, userAgent)); - }); - } else { - log.info("reusing existing localSyncContext"); - } - return this.localSyncContext; - } + // private async getLocalSyncContext( + // token: string, + // userID: number, + // userAgent: string, + // ) { + // // TODO-ML(MR): This is updating the file ML version. verify. + // if (!this.localSyncContext) { + // log.info("Creating localSyncContext"); + // // TODO-ML(MR): + // this.localSyncContext = new Promise((resolve) => { + // resolve(new MLSyncContext(token, userID, userAgent)); + // }); + // } else { + // log.info("reusing existing localSyncContext"); + // } + // return this.localSyncContext; + // } public async closeLocalSyncContext() { if (this.localSyncContext) { @@ -139,15 +139,20 @@ class MachineLearningService { public async syncLocalFile( // eslint-disable-next-line @typescript-eslint/no-unused-vars - token: string, + _: string, + // token: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars - userID: number, + __: number, + // userID: number, // eslint-disable-next-line @typescript-eslint/no-unused-vars - userAgent: string, + ___: string, + // userAgent: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars - enteFile: EnteFile, + ____: EnteFile, + // enteFile: EnteFile, // eslint-disable-next-line @typescript-eslint/no-unused-vars - localFile?: globalThis.File, + _____?: globalThis.File, + // localFile?: globalThis.File, ) { /* TODO-ML(MR): Currently not used const syncContext = await this.getLocalSyncContext( diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 92fb5dfff0..57c1087f70 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -23,6 +23,16 @@ class ModuleState { const moduleState = new ModuleState(); +/** + * @returns a string to use as an identifier when logging information about the + * given {@link enteFile}. The returned string contains the file name (for ease + * of debugging) and the file ID (for exactness). + */ +export const fileLogID = (enteFile: EnteFile) => + // TODO: Remove this when file/metadata types have optionality annotations. + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + `file ${enteFile.metadata.title ?? "-"} (${enteFile.id})`; + /** * [Note: File name for local EnteFile objects] * From 658a258ddc29635359b5c2ad6d48adf669248e41 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:31:04 +0530 Subject: [PATCH 168/466] Fix --- .../new/photos/services/ml/indexer.ts | 49 ++++++++----------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/web/packages/new/photos/services/ml/indexer.ts b/web/packages/new/photos/services/ml/indexer.ts index a17e85b2df..51535e6d9d 100644 --- a/web/packages/new/photos/services/ml/indexer.ts +++ b/web/packages/new/photos/services/ml/indexer.ts @@ -1,9 +1,3 @@ -import { - faceIndex, - indexableFileIDs, - indexedAndIndexableCounts, - updateAssumingLocalFiles, -} from "@/new/photos/services/ml/db"; import { isBetaUser, isInternalUser, @@ -12,11 +6,17 @@ import { getAllLocalFiles, getLocalTrashedFiles, } from "@/new/photos/services/files"; +import { + faceIndex, + indexableFileIDs, + indexedAndIndexableCounts, + updateAssumingLocalFiles, +} from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; -import { ComlinkWorker } from "@/next/worker/comlink-worker"; +// import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; -import type { Remote } from "comlink"; -import type { FaceIndexerWorker } from "./indexer.worker"; +// import type { Remote } from "comlink"; +// import type { FaceIndexerWorker } from "./indexer.worker"; /** * Face indexing orchestrator. @@ -38,12 +38,12 @@ import type { FaceIndexerWorker } from "./indexer.worker"; * Live indexing has higher priority, backfilling runs otherwise. If nothing * remains to be indexed, the indexer goes to sleep for a while. */ +// eslint-disable-next-line @typescript-eslint/no-extraneous-class class FaceIndexer { /** Live indexing queue. */ - private liveItems: { enteFile: EnteFile; file: File | undefined }[]; + // private liveItems: { enteFile: EnteFile; file: File | undefined }[]; /** Timeout for when the next time we will wake up. */ - private wakeTimeout: ReturnType | undefined; - + // private wakeTimeout: ReturnType | undefined; // /** // * Add a file to the live indexing queue. // * @@ -57,11 +57,9 @@ class FaceIndexer { // // the user turns on face indexing these files will get indexed as part // // of the backfilling anyway, the live indexing is just an optimization. // if (!mlWorkManager.isMlSearchEnabled) return; - // this.liveItems.push({ enteFile, file }); // this.wakeUpIfNeeded(); // } - // private wakeUpIfNeeded() { // // Already awake. // if (!this.wakeTimeout) return; @@ -71,26 +69,22 @@ class FaceIndexer { // // Get to work. // this.tick(); // } - /* TODO-ML(MR): This code is not currently in use */ - /** * A promise for the lazily created singleton {@link FaceIndexerWorker} remote * exposed by this module. */ - _faceIndexer: Promise>; + // _faceIndexer: Promise>; /** * Main thread interface to the face indexer. * * This function provides a promise that resolves to a lazily created singleton * remote with a {@link FaceIndexerWorker} at the other end. */ - faceIndexer = (): Promise> => - (this._faceIndexer ??= createFaceIndexerComlinkWorker().remote); - + // faceIndexer = (): Promise> => + // (this._faceIndexer ??= createFaceIndexerComlinkWorker().remote); // private async tick() { // console.log("tick"); - // const item = this.liveItems.pop(); // if (!item) { // // TODO-ML: backfill instead if needed here. @@ -116,7 +110,6 @@ class FaceIndexer { // // TODO // // this.tick(); // } - /** * Add a newly uploaded file to the face indexing queue. * @@ -137,11 +130,11 @@ class FaceIndexer { /** The singleton instance of {@link FaceIndexer}. */ export default new FaceIndexer(); -const createFaceIndexerComlinkWorker = () => - new ComlinkWorker( - "face-indexer", - new Worker(new URL("indexer.worker.ts", import.meta.url)), - ); +// const createFaceIndexerComlinkWorker = () => +// new ComlinkWorker( +// "face-indexer", +// new Worker(new URL("indexer.worker.ts", import.meta.url)), +// ); export interface FaceIndexingStatus { /** @@ -251,7 +244,7 @@ export const syncWithLocalFilesAndGetFilesToIndex = async ( const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); await updateAssumingLocalFiles( - [...localFilesByID.keys()], + Array.from(localFilesByID.keys()), localTrashFileIDs, ); From 369ff7833c8b127c8215762cf5da0dfa4de6c0e4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:32:10 +0530 Subject: [PATCH 169/466] Fix --- web/packages/new/photos/services/embedding.ts | 4 ++-- web/packages/new/photos/services/ml/types.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index be574d4ac3..93b20a3c34 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -5,9 +5,9 @@ import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; import { decryptFileMetadata } from "../../common/crypto/ente"; -import { saveFaceIndex } from "./face/db"; -import { faceIndexingVersion, type FaceIndex } from "./face/types"; import { getAllLocalFiles } from "./files"; +import { saveFaceIndex } from "./ml/db"; +import { faceIndexingVersion, type FaceIndex } from "./ml/types"; /** * The embeddings that we (the current client) knows how to handle. diff --git a/web/packages/new/photos/services/ml/types.ts b/web/packages/new/photos/services/ml/types.ts index 44c78cc838..7ad0919124 100644 --- a/web/packages/new/photos/services/ml/types.ts +++ b/web/packages/new/photos/services/ml/types.ts @@ -11,7 +11,7 @@ export const faceIndexingVersion = 1; * - Local face detections and embeddings (collectively called as the face * index) are generated by the current client when uploading a file (or when * noticing a file which doesn't yet have a face index), stored in the local - * IndexedDB ("face/db") and also uploaded (E2EE) to remote. + * IndexedDB ("ml/db") and also uploaded (E2EE) to remote. * * - Remote embeddings are fetched by subsequent clients to avoid them having to * reindex (indexing faces is a costly operation, esp for mobile clients). From 6bb126e58fd16668ff3384d6f19b4a8298be1581 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:34:43 +0530 Subject: [PATCH 170/466] Move --- web/packages/new/photos/services/embedding.ts | 3 ++- web/packages/new/photos/services/ml/f-index.ts | 6 +++++- web/packages/new/photos/services/ml/types.ts | 5 ----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 93b20a3c34..4ba6922c5d 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -7,7 +7,8 @@ import { z } from "zod"; import { decryptFileMetadata } from "../../common/crypto/ente"; import { getAllLocalFiles } from "./files"; import { saveFaceIndex } from "./ml/db"; -import { faceIndexingVersion, type FaceIndex } from "./ml/types"; +import { faceIndexingVersion } from "./ml/f-index"; +import { type FaceIndex } from "./ml/types"; /** * The embeddings that we (the current client) knows how to handle. diff --git a/web/packages/new/photos/services/ml/f-index.ts b/web/packages/new/photos/services/ml/f-index.ts index 4ea0b25df2..641bf8a29a 100644 --- a/web/packages/new/photos/services/ml/f-index.ts +++ b/web/packages/new/photos/services/ml/f-index.ts @@ -7,7 +7,6 @@ import type { Face, Point, } from "@/new/photos/services/ml/types"; -import { faceIndexingVersion } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; @@ -29,6 +28,11 @@ import { warpAffineFloat32List, } from "./image"; +/** + * The version of the face indexing pipeline implemented by the current client. + */ +export const faceIndexingVersion = 1; + /** * Index faces in the given file. * diff --git a/web/packages/new/photos/services/ml/types.ts b/web/packages/new/photos/services/ml/types.ts index 7ad0919124..1d3168d58b 100644 --- a/web/packages/new/photos/services/ml/types.ts +++ b/web/packages/new/photos/services/ml/types.ts @@ -1,8 +1,3 @@ -/** The face indexing version supported by the current client. */ -// TODO: This belongs better to f-index.ts, but that file's in a different -// package currently, move it there once these two files are together again. -export const faceIndexingVersion = 1; - /** * The faces in a file (and an embedding for each of them). * From 0e1b490371450511eb652d04af28a524af8193ee Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:47:27 +0530 Subject: [PATCH 171/466] Assert --- .../new/photos/services/ml/f-index.ts | 116 ++++++++++-------- 1 file changed, 68 insertions(+), 48 deletions(-) diff --git a/web/packages/new/photos/services/ml/f-index.ts b/web/packages/new/photos/services/ml/f-index.ts index 641bf8a29a..78aac543fe 100644 --- a/web/packages/new/photos/services/ml/f-index.ts +++ b/web/packages/new/photos/services/ml/f-index.ts @@ -1,3 +1,10 @@ +// The ML code in this file involves imperative array indexing and processing, +// and allowing non-null assertions ("!") are the easiest way to get tsc to +// accept it in the presence of noUncheckedIndexedAccess without obfuscating the +// original algorithms. +// +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import DownloadManager from "@/new/photos/services/download"; @@ -11,14 +18,15 @@ import type { EnteFile } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; +import { ensure } from "@/utils/ensure"; import { Matrix } from "ml-matrix"; import { getSimilarityTransformation } from "similarity-transformation"; import { - Matrix as TransformationMatrix, applyToPoint, compose, scale, translate, + type Matrix as TransformationMatrix, } from "transformation-matrix"; import { saveFaceCrop } from "./crop"; import { @@ -90,15 +98,20 @@ export const indexFaces = async ( * * For videos their thumbnail is used. */ -const renderableImageBlob = async (enteFile: EnteFile, file: File) => { +const renderableImageBlob = async ( + enteFile: EnteFile, + file: File | undefined, +) => { const fileType = enteFile.metadata.fileType; if (fileType == FILE_TYPE.VIDEO) { const thumbnailData = await DownloadManager.getThumbnail(enteFile); - return new Blob([thumbnailData]); + return new Blob([ensure(thumbnailData)]); } else { - return file - ? getRenderableImage(enteFile.metadata.title, file) - : fetchRenderableBlob(enteFile); + return ensure( + file + ? await getRenderableImage(enteFile.metadata.title, file) + : await fetchRenderableBlob(enteFile), + ); } }; @@ -167,8 +180,8 @@ const indexFacesInBitmap = async ( faceID, detection: normalizeToImageDimensions(detection, imageDimensions), score, - blur: blurs[i], - embedding: Array.from(embeddings[i]), + blur: blurs[i]!, + embedding: Array.from(embeddings[i]!), })); }; @@ -180,7 +193,12 @@ const indexFacesInBitmap = async ( const detectFaces = async ( imageBitmap: ImageBitmap, ): Promise => { - const rect = ({ width, height }) => ({ x: 0, y: 0, width, height }); + const rect = ({ width, height }: Dimensions) => ({ + x: 0, + y: 0, + width, + height, + }); const { yoloInput, yoloSize } = convertToYOLOInputFloat32ChannelsFirst(imageBitmap); @@ -207,7 +225,7 @@ const convertToYOLOInputFloat32ChannelsFirst = (imageBitmap: ImageBitmap) => { // Create an OffscreenCanvas and set its size. const offscreenCanvas = new OffscreenCanvas(width, height); - const ctx = offscreenCanvas.getContext("2d"); + const ctx = ensure(offscreenCanvas.getContext("2d")); ctx.drawImage(imageBitmap, 0, 0, width, height); const imageData = ctx.getImageData(0, 0, width, height); const pixelData = imageData.data; @@ -275,26 +293,26 @@ const filterExtractDetectionsFromYOLOOutput = ( const faces: YOLOFaceDetection[] = []; // Iterate over each row. for (let i = 0; i < rows.length; i += 16) { - const score = rows[i + 4]; + const score = rows[i + 4]!; if (score < 0.7) continue; - const xCenter = rows[i]; - const yCenter = rows[i + 1]; - const width = rows[i + 2]; - const height = rows[i + 3]; + const xCenter = rows[i]!; + const yCenter = rows[i + 1]!; + const width = rows[i + 2]!; + const height = rows[i + 3]!; const x = xCenter - width / 2.0; // topLeft const y = yCenter - height / 2.0; // topLeft - const leftEyeX = rows[i + 5]; - const leftEyeY = rows[i + 6]; - const rightEyeX = rows[i + 7]; - const rightEyeY = rows[i + 8]; - const noseX = rows[i + 9]; - const noseY = rows[i + 10]; - const leftMouthX = rows[i + 11]; - const leftMouthY = rows[i + 12]; - const rightMouthX = rows[i + 13]; - const rightMouthY = rows[i + 14]; + const leftEyeX = rows[i + 5]!; + const leftEyeY = rows[i + 6]!; + const rightEyeX = rows[i + 7]!; + const rightEyeY = rows[i + 8]!; + const noseX = rows[i + 9]!; + const noseY = rows[i + 10]!; + const leftMouthX = rows[i + 11]!; + const leftMouthY = rows[i + 12]!; + const rightMouthX = rows[i + 13]!; + const rightMouthY = rows[i + 14]!; const box = { x, y, width, height }; const landmarks = [ @@ -383,7 +401,7 @@ const naiveNonMaxSuppression = ( // Loop through the detections and calculate the IOU. for (let i = 0; i < detections.length - 1; i++) { for (let j = i + 1; j < detections.length; j++) { - const iou = intersectionOverUnion(detections[i], detections[j]); + const iou = intersectionOverUnion(detections[i]!, detections[j]!); if (iou >= iouThreshold) { detections.splice(j, 1); j--; @@ -526,7 +544,7 @@ const convertToMobileFaceNetInput = ( faceAlignments.length * faceSize * faceSize * 3, ); for (let i = 0; i < faceAlignments.length; i++) { - const { affineMatrix } = faceAlignments[i]; + const { affineMatrix } = faceAlignments[i]!; const faceDataOffset = i * faceSize * faceSize * 3; warpAffineFloat32List( imageBitmap, @@ -568,11 +586,11 @@ const detectBlur = ( type FaceDirection = "left" | "right" | "straight"; const faceDirection = ({ landmarks }: FaceDetection): FaceDirection => { - const leftEye = landmarks[0]; - const rightEye = landmarks[1]; - const nose = landmarks[2]; - const leftMouth = landmarks[3]; - const rightMouth = landmarks[4]; + const leftEye = landmarks[0]!; + const rightEye = landmarks[1]!; + const nose = landmarks[2]!; + const leftMouth = landmarks[3]!; + const rightMouth = landmarks[4]!; const eyeDistanceX = Math.abs(rightEye.x - leftEye.x); const eyeDistanceY = Math.abs(rightEye.y - leftEye.y); @@ -613,7 +631,7 @@ const applyLaplacian = ( ): number[][] => { const paddedImage = padImage(image, direction); const numRows = paddedImage.length - 2; - const numCols = paddedImage[0].length - 2; + const numCols = paddedImage[0]!.length - 2; // Create an output image initialized to 0. const outputImage: number[][] = Array.from({ length: numRows }, () => @@ -633,11 +651,11 @@ const applyLaplacian = ( let sum = 0; for (let ki = 0; ki < 3; ki++) { for (let kj = 0; kj < 3; kj++) { - sum += paddedImage[i + ki][j + kj] * kernel[ki][kj]; + sum += paddedImage[i + ki]![j + kj]! * kernel[ki]![kj]!; } } // Adjust the output value if necessary (e.g., clipping). - outputImage[i][j] = sum; + outputImage[i]![j] = sum; } } @@ -648,7 +666,7 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { const removeSideColumns = 56; /* must be even */ const numRows = image.length; - const numCols = image[0].length; + const numCols = image[0]!.length; const paddedNumCols = numCols + 2 - removeSideColumns; const paddedNumRows = numRows + 2; @@ -661,8 +679,8 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { // Copy original image into the center of the padded image. for (let i = 0; i < numRows; i++) { for (let j = 0; j < paddedNumCols - 2; j++) { - paddedImage[i + 1][j + 1] = - image[i][j + Math.round(removeSideColumns / 2)]; + paddedImage[i + 1]![j + 1] = + image[i]![j + Math.round(removeSideColumns / 2)]!; } } } else if (direction === "left") { @@ -670,15 +688,16 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { // image. for (let i = 0; i < numRows; i++) { for (let j = 0; j < paddedNumCols - 2; j++) { - paddedImage[i + 1][j + 1] = image[i][j + removeSideColumns]; + paddedImage[i + 1]![j + 1] = image[i]![j + removeSideColumns]!; } } - } else if (direction === "right") { + } else { + // "right" // If the face is facing right, we only take the left side of the face // image. for (let i = 0; i < numRows; i++) { for (let j = 0; j < paddedNumCols - 2; j++) { - paddedImage[i + 1][j + 1] = image[i][j]; + paddedImage[i + 1]![j + 1] = image[i]![j]!; } } } @@ -687,16 +706,17 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { // - Top and bottom rows for (let j = 1; j <= paddedNumCols - 2; j++) { // Top row - paddedImage[0][j] = paddedImage[2][j]; + paddedImage[0]![j] = paddedImage[2]![j]!; // Bottom row - paddedImage[numRows + 1][j] = paddedImage[numRows - 1][j]; + paddedImage[numRows + 1]![j] = paddedImage[numRows - 1]![j]!; } // - Left and right columns for (let i = 0; i < numRows + 2; i++) { // Left column - paddedImage[i][0] = paddedImage[i][2]; + paddedImage[i]![0] = paddedImage[i]![2]!; // Right column - paddedImage[i][paddedNumCols - 1] = paddedImage[i][paddedNumCols - 3]; + paddedImage[i]![paddedNumCols - 1] = + paddedImage[i]![paddedNumCols - 3]!; } return paddedImage; @@ -704,11 +724,11 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { const matrixVariance = (matrix: number[][]): number => { const numRows = matrix.length; - const numCols = matrix[0].length; + const numCols = matrix[0]!.length; const totalElements = numRows * numCols; // Calculate the mean. - let mean: number = 0; + let mean = 0; matrix.forEach((row) => { row.forEach((value) => { mean += value; @@ -717,7 +737,7 @@ const matrixVariance = (matrix: number[][]): number => { mean /= totalElements; // Calculate the variance. - let variance: number = 0; + let variance = 0; matrix.forEach((row) => { row.forEach((value) => { const diff: number = value - mean; From af61774d932c3d461db4d181fdbe84ad29ed8d76 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:48:50 +0530 Subject: [PATCH 172/466] Give tsc a helping hand --- web/packages/new/photos/services/ml/f-index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/f-index.ts b/web/packages/new/photos/services/ml/f-index.ts index 78aac543fe..c5ab400b9b 100644 --- a/web/packages/new/photos/services/ml/f-index.ts +++ b/web/packages/new/photos/services/ml/f-index.ts @@ -634,8 +634,9 @@ const applyLaplacian = ( const numCols = paddedImage[0]!.length - 2; // Create an output image initialized to 0. - const outputImage: number[][] = Array.from({ length: numRows }, () => - new Array(numCols).fill(0), + const outputImage = Array.from( + { length: numRows }, + () => new Array(numCols).fill(0) as number[], ); // Define the Laplacian kernel. @@ -671,11 +672,12 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { const paddedNumRows = numRows + 2; // Create a new matrix with extra padding. - const paddedImage: number[][] = Array.from({ length: paddedNumRows }, () => - new Array(paddedNumCols).fill(0), + const paddedImage = Array.from( + { length: paddedNumRows }, + () => new Array(paddedNumCols).fill(0) as number[], ); - if (direction === "straight") { + if (direction == "straight") { // Copy original image into the center of the padded image. for (let i = 0; i < numRows; i++) { for (let j = 0; j < paddedNumCols - 2; j++) { @@ -683,7 +685,7 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { image[i]![j + Math.round(removeSideColumns / 2)]!; } } - } else if (direction === "left") { + } else if (direction == "left") { // If the face is facing left, we only take the right side of the face // image. for (let i = 0; i < numRows; i++) { @@ -692,7 +694,6 @@ const padImage = (image: number[][], direction: FaceDirection): number[][] => { } } } else { - // "right" // If the face is facing right, we only take the left side of the face // image. for (let i = 0; i < numRows; i++) { From 080d5630a81cfea640dd60603fa7b0c1d1b991c8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:51:07 +0530 Subject: [PATCH 173/466] imports --- .../components/Search/SearchBar/searchInput/index.tsx | 2 +- web/apps/photos/src/components/ml/MLSearchSettings.tsx | 2 +- web/apps/photos/src/components/ml/PeopleList.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 10 +++++----- web/apps/photos/src/services/logout.ts | 2 +- web/apps/photos/src/services/searchService.ts | 2 +- web/apps/photos/src/types/search/index.ts | 4 ++-- web/packages/new/photos/services/ml/mlWorkManager.ts | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx index 599a27fe79..185121d344 100644 --- a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import CloseIcon from "@mui/icons-material/Close"; import { IconButton } from "@mui/material"; @@ -11,7 +12,6 @@ import { components } from "react-select"; import AsyncSelect from "react-select/async"; import { InputActionMeta } from "react-select/src/types"; import { City } from "services/locationSearchService"; -import type { Person } from "services/ml/people"; import { getAutoCompleteSuggestions, getDefaultOptions, diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 9deb9613a2..7d67514066 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,3 +1,4 @@ +import { canEnableFaceIndexing } from "@/new/photos/services/ml/indexer"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { @@ -18,7 +19,6 @@ import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; import { Trans } from "react-i18next"; -import { canEnableFaceIndexing } from "services/ml/indexer"; import { getFaceSearchEnabledStatus, updateFaceSearchEnabledStatus, diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index 00936d5baa..83c7067457 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -1,11 +1,11 @@ +import { unidentifiedFaceIDs } from "@/new/photos/services/ml/indexer"; +import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { blobCache } from "@/next/blob-cache"; import { Skeleton, styled } from "@mui/material"; import { Legend } from "components/PhotoViewer/styledComponents/Legend"; import { t } from "i18next"; import React, { useEffect, useState } from "react"; -import { unidentifiedFaceIDs } from "services/ml/indexer"; -import type { Person } from "services/ml/people"; const FaceChipContainer = styled("div")` display: flex; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 38a43561ad..0109da7f8f 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,4 +1,9 @@ import DownloadManager from "@/new/photos/services/download"; +import { + isFaceIndexingEnabled, + setIsFaceIndexingEnabled, +} from "@/new/photos/services/ml/indexer"; +import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; @@ -51,11 +56,6 @@ import { createContext, useContext, useEffect, useRef, useState } from "react"; import LoadingBar from "react-top-loading-bar"; import { resumeExportsIfNeeded } from "services/export"; import { photosLogout } from "services/logout"; -import { - isFaceIndexingEnabled, - setIsFaceIndexingEnabled, -} from "services/ml/indexer"; -import mlWorkManager from "services/ml/mlWorkManager"; import { getFamilyPortalRedirectURL, getRoadmapRedirectURL, diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 3f0736457d..2013553fe7 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,7 +1,7 @@ import DownloadManager from "@/new/photos/services/download"; +import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import { terminateFaceWorker } from "@/new/photos/services/ml"; import { clearFaceData } from "@/new/photos/services/ml/db"; -import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; import { accountLogout } from "@ente/accounts/services/logout"; diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 73cbb476ef..2b0482f07f 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -4,12 +4,12 @@ import { isFaceIndexingEnabled, } from "@/new/photos/services/ml/indexer"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; +import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; import log from "@/next/log"; import * as chrono from "chrono-node"; import { t } from "i18next"; -import type { Person } from "services/ml/people"; import { Collection } from "types/collection"; import { EntityType, LocationTag, LocationTagData } from "types/entity"; import { diff --git a/web/apps/photos/src/types/search/index.ts b/web/apps/photos/src/types/search/index.ts index 369a4a957c..693e087cd6 100644 --- a/web/apps/photos/src/types/search/index.ts +++ b/web/apps/photos/src/types/search/index.ts @@ -1,8 +1,8 @@ import { FILE_TYPE } from "@/media/file-type"; +import type { FaceIndexingStatus } from "@/new/photos/services/ml/indexer"; +import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { City } from "services/locationSearchService"; -import type { FaceIndexingStatus } from "services/ml/indexer"; -import type { Person } from "services/ml/people"; import { LocationTagData } from "types/entity"; export enum SuggestionType { diff --git a/web/packages/new/photos/services/ml/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts index e71a8f8398..c2f4fdf476 100644 --- a/web/packages/new/photos/services/ml/mlWorkManager.ts +++ b/web/packages/new/photos/services/ml/mlWorkManager.ts @@ -295,7 +295,7 @@ class MLWorkManager { const userAgent = await getUserAgent(); const jobWorkerProxy = await this.getSyncJobWorker(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return await jobWorkerProxy.sync(token, userID, userAgent); // this.terminateSyncJobWorker(); // TODO: redirect/refresh to gallery in case of session_expired, stop ml sync job From f7137b721ebc1896ec749865a3226c40b036f9ec Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 13:54:40 +0530 Subject: [PATCH 174/466] Move --- web/apps/photos/src/services/embeddingService.ts | 2 +- web/apps/photos/src/types/embedding.tsx | 2 +- .../new/photos/services/{ => ml}/embedding.ts | 14 ++++++++------ web/packages/new/photos/services/ml/worker.ts | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) rename web/packages/new/photos/services/{ => ml}/embedding.ts (97%) diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts index 99af57eb5b..76dd872fae 100644 --- a/web/apps/photos/src/services/embeddingService.ts +++ b/web/apps/photos/src/services/embeddingService.ts @@ -1,8 +1,8 @@ -import type { EmbeddingModel } from "@/new/photos/services/embedding"; import { getAllLocalFiles, getLocalTrashedFiles, } from "@/new/photos/services/files"; +import type { EmbeddingModel } from "@/new/photos/services/ml/embedding"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import { EnteFile } from "@/new/photos/types/file"; import { inWorker } from "@/next/env"; diff --git a/web/apps/photos/src/types/embedding.tsx b/web/apps/photos/src/types/embedding.tsx index c14b4a137d..6499a1b7d7 100644 --- a/web/apps/photos/src/types/embedding.tsx +++ b/web/apps/photos/src/types/embedding.tsx @@ -1,4 +1,4 @@ -import type { EmbeddingModel } from "@/new/photos/services/embedding"; +import type { EmbeddingModel } from "@/new/photos/services/ml/embedding"; export interface EncryptedEmbedding { fileID: number; diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts similarity index 97% rename from web/packages/new/photos/services/embedding.ts rename to web/packages/new/photos/services/ml/embedding.ts index 4ba6922c5d..3ae5d577c9 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -1,14 +1,16 @@ -import { getLocalTrashedFiles } from "@/new/photos/services/files"; +import { decryptFileMetadata } from "@/new/common/crypto/ente"; +import { + getAllLocalFiles, + getLocalTrashedFiles, +} from "@/new/photos/services/files"; import { authenticatedRequestHeaders } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; -import { decryptFileMetadata } from "../../common/crypto/ente"; -import { getAllLocalFiles } from "./files"; -import { saveFaceIndex } from "./ml/db"; -import { faceIndexingVersion } from "./ml/f-index"; -import { type FaceIndex } from "./ml/types"; +import { saveFaceIndex } from "./db"; +import { faceIndexingVersion } from "./f-index"; +import { type FaceIndex } from "./types"; /** * The embeddings that we (the current client) knows how to handle. diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 7827bc5a59..40c4cafec7 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,5 +1,5 @@ import { expose } from "comlink"; -import { pullFaceEmbeddings } from "../embedding"; +import { pullFaceEmbeddings } from "./embedding"; /** * Run operations related to face indexing and search in a Web Worker. From 1a4b3199f151aceae09a5a523ee9b9d0d4260535 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 14:14:58 +0530 Subject: [PATCH 175/466] new --- web/packages/new/common/crypto/ente.ts | 46 +++++++++++++++---- .../new/photos/services/ml/embedding.ts | 26 +++++++++++ .../new/photos/services/ml/indexer.worker.ts | 2 +- .../new/photos/services/ml/mlWorkManager.ts | 1 - web/packages/new/photos/services/ml/remote.ts | 28 ----------- 5 files changed, 64 insertions(+), 39 deletions(-) delete mode 100644 web/packages/new/photos/services/ml/remote.ts diff --git a/web/packages/new/common/crypto/ente.ts b/web/packages/new/common/crypto/ente.ts index 4995942a87..5e95e77627 100644 --- a/web/packages/new/common/crypto/ente.ts +++ b/web/packages/new/common/crypto/ente.ts @@ -2,23 +2,51 @@ * @file Higher level functions that use the ontology of Ente's types * * These are thin wrappers over the (thin-) wrappers in internal/libsodium.ts. - * The main difference is that they don't name things in terms of the crypto - * algorithms, but rather by the specific Ente specific tasks we are trying to - * do. + * The main difference is that these functions don't talk in terms of the crypto + * algorithms, but rather in terms the higher-level Ente specific goal we are + * trying to accomplish. */ import * as libsodium from "@ente/shared/crypto/internal/libsodium"; /** - * Decrypt arbitrary metadata associated with a file using the its's key. + * Encrypt arbitrary metadata associated with a file using its key. * - * @param encryptedMetadataB64 The Base64 encoded string containing the - * encrypted data. + * @param metadata The metadata (string) to encrypt. * - * @param headerB64 The Base64 encoded string containing the decryption header + * @param keyB64 Base64 encoded string containing the encryption key (this'll + * generally be the file's key). + * + * @returns Base64 encoded strings containing the encrypted data and the + * decryption header. + */ +export const encryptFileMetadata = async ( + metadata: string, + keyB64: string, +): Promise<{ encryptedMetadataB64: string; decryptionHeaderB64: string }> => { + const encoder = new TextEncoder(); + const encodedMetadata = encoder.encode(metadata); + + const { file } = await libsodium.encryptChaChaOneShot( + encodedMetadata, + keyB64, + ); + return { + encryptedMetadataB64: await libsodium.toB64(file.encryptedData), + decryptionHeaderB64: file.decryptionHeader, + }; +}; + +/** + * Decrypt arbitrary metadata associated with a file using the its key. + * + * @param encryptedMetadataB64 Base64 encoded string containing the encrypted + * data. + * + * @param headerB64 Base64 encoded string containing the decryption header * produced during encryption. * - * @param keyB64 The Base64 encoded string containing the encryption key - * (this'll generally be the file's key). + * @param keyB64 Base64 encoded string containing the encryption key (this'll + * generally be the file's key). * * @returns The decrypted utf-8 string. */ diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 3ae5d577c9..074d5d98f8 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -3,14 +3,17 @@ import { getAllLocalFiles, getLocalTrashedFiles, } from "@/new/photos/services/files"; +import type { EnteFile } from "@/new/photos/types/file"; import { authenticatedRequestHeaders } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; import { z } from "zod"; import { saveFaceIndex } from "./db"; import { faceIndexingVersion } from "./f-index"; import { type FaceIndex } from "./types"; +// import { putEmbedding } from "services/embeddingService"; /** * The embeddings that we (the current client) knows how to handle. @@ -239,6 +242,29 @@ const getEmbeddingsDiff = async ( return z.array(RemoteEmbedding).parse(await res.json()); }; +export const putFaceIndex = async ( + enteFile: EnteFile, + faceIndex: FaceIndex, +) => { + log.debug(() => ({ + t: "Uploading faceEmbedding", + d: JSON.stringify(faceIndex), + })); + + const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); + const { file: encryptedEmbeddingData } = + await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); + // TODO(MR): Indexing + console.log(encryptedEmbeddingData); + throw new Error("Unimplemented"); + // await putEmbedding({ + // fileID: enteFile.id, + // encryptedEmbedding: encryptedEmbeddingData.encryptedData, + // decryptionHeader: encryptedEmbeddingData.decryptionHeader, + // model: "file-ml-clip-face", + // }); +}; + // MARK: - Face /** diff --git a/web/packages/new/photos/services/ml/indexer.worker.ts b/web/packages/new/photos/services/ml/indexer.worker.ts index c6184679fd..b5fd600a50 100644 --- a/web/packages/new/photos/services/ml/indexer.worker.ts +++ b/web/packages/new/photos/services/ml/indexer.worker.ts @@ -7,8 +7,8 @@ import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { fileLogID } from "../../utils/file"; +import { putFaceIndex } from "./embedding"; import { indexFaces } from "./f-index"; -import { putFaceIndex } from "./remote"; /** * Index faces in a file, save the persist the results locally, and put them on diff --git a/web/packages/new/photos/services/ml/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts index c2f4fdf476..d16f5afc63 100644 --- a/web/packages/new/photos/services/ml/mlWorkManager.ts +++ b/web/packages/new/photos/services/ml/mlWorkManager.ts @@ -295,7 +295,6 @@ class MLWorkManager { const userAgent = await getUserAgent(); const jobWorkerProxy = await this.getSyncJobWorker(); - return await jobWorkerProxy.sync(token, userID, userAgent); // this.terminateSyncJobWorker(); // TODO: redirect/refresh to gallery in case of session_expired, stop ml sync job diff --git a/web/packages/new/photos/services/ml/remote.ts b/web/packages/new/photos/services/ml/remote.ts deleted file mode 100644 index 869e56b4fd..0000000000 --- a/web/packages/new/photos/services/ml/remote.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { FaceIndex } from "@/new/photos/services/ml/types"; -import type { EnteFile } from "@/new/photos/types/file"; -import log from "@/next/log"; -import ComlinkCryptoWorker from "@ente/shared/crypto"; -// import { putEmbedding } from "services/embeddingService"; - -export const putFaceIndex = async ( - enteFile: EnteFile, - faceIndex: FaceIndex, -) => { - log.debug(() => ({ - t: "Uploading faceEmbedding", - d: JSON.stringify(faceIndex), - })); - - const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); - const { file: encryptedEmbeddingData } = - await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); - // TODO(MR): Indexing - console.log(encryptedEmbeddingData); - throw new Error("Unimplemented"); - // await putEmbedding({ - // fileID: enteFile.id, - // encryptedEmbedding: encryptedEmbeddingData.encryptedData, - // decryptionHeader: encryptedEmbeddingData.decryptionHeader, - // model: "file-ml-clip-face", - // }); -}; From ec04becd0e9ae864bd7cd5e41366c5dff4f82464 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 14:44:22 +0530 Subject: [PATCH 176/466] [mob][photos] Clean up configuration.dart --- mobile/lib/core/configuration.dart | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 571a9d0f19..1bb28050aa 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -73,9 +73,6 @@ class Configuration { "has_selected_all_folders_for_backup"; static const anonymousUserIDKey = "anonymous_user_id"; static const endPointKey = "endpoint"; - static const password = "user_pass"; - static const pin = "user_pin"; - static const saltKey = "user_salt"; static final _logger = Logger("Configuration"); String? _cachedToken; @@ -86,7 +83,6 @@ class Configuration { late FlutterSecureStorage _secureStorage; late String _tempDocumentsDirPath; late String _thumbnailCacheDirectory; - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; // 6th July 22: Remove this after 3 months. Hopefully, active users // will migrate to newer version of the app, where shared media is stored // on appSupport directory which OS won't clean up automatically @@ -624,8 +620,8 @@ class Configuration { } Future shouldShowLockScreen() async { - final bool isPin = await _lockscreenSetting.isPinSet(); - final bool isPass = await _lockscreenSetting.isPasswordSet(); + final bool isPin = await LockscreenSetting.instance.isPinSet(); + final bool isPass = await LockscreenSetting.instance.isPasswordSet(); return isPin || isPass || shouldShowSystemLockScreen(); } From 8031f27feb0f81809d722db62aa62115ded086fc Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 14:53:19 +0530 Subject: [PATCH 177/466] Sanity check --- .../new/photos/services/ml/embedding.ts | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 074d5d98f8..45a1ba9998 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -1,4 +1,7 @@ -import { decryptFileMetadata } from "@/new/common/crypto/ente"; +import { + decryptFileMetadata, + encryptFileMetadata, +} from "@/new/common/crypto/ente"; import { getAllLocalFiles, getLocalTrashedFiles, @@ -8,12 +11,10 @@ import { authenticatedRequestHeaders } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; -import ComlinkCryptoWorker from "@ente/shared/crypto"; import { z } from "zod"; import { saveFaceIndex } from "./db"; import { faceIndexingVersion } from "./f-index"; import { type FaceIndex } from "./types"; -// import { putEmbedding } from "services/embeddingService"; /** * The embeddings that we (the current client) knows how to handle. @@ -251,12 +252,24 @@ export const putFaceIndex = async ( d: JSON.stringify(faceIndex), })); - const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); - const { file: encryptedEmbeddingData } = - await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); - // TODO(MR): Indexing - console.log(encryptedEmbeddingData); - throw new Error("Unimplemented"); + const { encryptedMetadataB64, decryptionHeaderB64 } = + await encryptFileMetadata(JSON.stringify(faceIndex), enteFile.key); + + // Sanity check + + const rt = await decryptFileMetadata( + encryptedMetadataB64, + decryptionHeaderB64, + enteFile.key, + ); + console.log("put", JSON.stringify(faceIndex) == rt); + + // const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); + // const { file: encryptedEmbeddingData } = + // await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); + // // TODO(MR): Indexing + // console.log(encryptedEmbeddingData); + // throw new Error("Unimplemented"); // await putEmbedding({ // fileID: enteFile.id, // encryptedEmbedding: encryptedEmbeddingData.encryptedData, From f6e4d4c7c9dd6fa25202066a3469a0279d1bcfb3 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 15:04:06 +0530 Subject: [PATCH 178/466] [mob][photos] Clean up main.dart --- mobile/lib/main.dart | 4 +--- mobile/lib/utils/lockscreen_setting.dart | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index ec49a844c5..e892de0137 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -9,7 +9,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import "package:flutter/rendering.dart"; import "package:flutter_displaymode/flutter_displaymode.dart"; -import "package:flutter_secure_storage/flutter_secure_storage.dart"; import 'package:logging/logging.dart'; import "package:media_kit/media_kit.dart"; import 'package:path_provider/path_provider.dart'; @@ -197,7 +196,6 @@ Future _init(bool isBackground, {String via = ''}) async { _isProcessRunning = true; _logger.info("Initializing... inBG =$isBackground via: $via"); final SharedPreferences preferences = await SharedPreferences.getInstance(); - const secureStorage = FlutterSecureStorage(); await _logFGHeartBeatInfo(); _logger.info("_logFGHeartBeatInfo done"); unawaited(_scheduleHeartBeat(preferences, isBackground)); @@ -212,7 +210,7 @@ Future _init(bool isBackground, {String via = ''}) async { CryptoUtil.init(); _logger.info("Lockscreen init"); - LockscreenSetting.instance.init(secureStorage, preferences); + LockscreenSetting.instance.init(preferences); _logger.info("Configuration init"); await Configuration.instance.init(); diff --git a/mobile/lib/utils/lockscreen_setting.dart b/mobile/lib/utils/lockscreen_setting.dart index 988ac3624a..45728af929 100644 --- a/mobile/lib/utils/lockscreen_setting.dart +++ b/mobile/lib/utils/lockscreen_setting.dart @@ -19,8 +19,8 @@ class LockscreenSetting { late FlutterSecureStorage _secureStorage; late SharedPreferences _preferences; - void init(FlutterSecureStorage secureStorage, SharedPreferences prefs) async { - _secureStorage = secureStorage; + void init(SharedPreferences prefs) async { + _secureStorage = const FlutterSecureStorage(); _preferences = prefs; } From e28a6b5290ae49410b903e7c39aa46acc1b2e02e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 15:12:07 +0530 Subject: [PATCH 179/466] Add custom error https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error --- .../new/photos/services/ml/embedding.ts | 96 ++++++++++++++++++- web/packages/next/http.ts | 17 ++++ 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 45a1ba9998..88416e0586 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -242,6 +242,98 @@ const getEmbeddingsDiff = async ( if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); return z.array(RemoteEmbedding).parse(await res.json()); }; +/* +export const putEmbedding = async ( + putEmbeddingReq: PutEmbeddingRequest, +): Promise => { + try { + const token = inWorker() + ? await workerBridge.getAuthToken() + : getToken(); + if (!token) { + log.info("putEmbedding failed: token not found"); + throw Error(CustomError.TOKEN_MISSING); + } + const resp = await HTTPService.put( + await apiURL("/embeddings"), + putEmbeddingReq, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data; + } catch (e) { + log.error("put embedding failed", e); + throw e; + } +}; +*/ + +/** + * Upload an embedding to remote. + * + * This function will save or update the given embedding as the latest embedding + * associated with the given {@link enteFile} for {@link model}. + * + * @param enteFile {@link EnteFile} to which this embedding relates to. + * + * @param model The {@link EmbeddingModel} which we are uploading. + * + * @param embedding String representation of the embedding. The exact contents + * of the embedding are model specific (usually this is the JSON string). + */ +export const putEmbedding = async ( + enteFile: EnteFile, + model: EmbeddingModel, + embedding: string, +) => { + log.debug(() => ({ t: `Uploading embedding`, model, embedding })); + + const { encryptedMetadataB64, decryptionHeaderB64 } = + await encryptFileMetadata(embedding, enteFile.key); + + await apiURL("/"), + putEmbeddingReq, + null, + { + "X-Auth-Token": token, + }, + + const url = apiURL("/embeddings") + const res = await fetch(url, { + method: "PUT", + headers: authenticatedRequestHeaders(), + body: JSON.stringify({ + + }) + } + if (!res.ok) throw new Error() + + ) + + // Sanity check + + const rt = await decryptFileMetadata( + encryptedMetadataB64, + decryptionHeaderB64, + enteFile.key, + ); + console.log("put", JSON.stringify(faceIndex) == rt); + + // const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); + // const { file: encryptedEmbeddingData } = + // await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); + // // TODO(MR): Indexing + // console.log(encryptedEmbeddingData); + // throw new Error("Unimplemented"); + // await putEmbedding({ + // fileID: enteFile.id, + // encryptedEmbedding: encryptedEmbeddingData.encryptedData, + // decryptionHeader: encryptedEmbeddingData.decryptionHeader, + // model: "file-ml-clip-face", + // }); +}; export const putFaceIndex = async ( enteFile: EnteFile, @@ -331,8 +423,8 @@ const saveFaceIndexIfNewer = async (index: FaceIndex) => { * not possible to go the other way (TS type => Zod schema). * * However, in some cases having when the TypeScript type under consideration is - * used pervasely in our code, having a standalone TypeScript type with attached - * docstrings, is worth the code duplication. + * used pervasively in code, having a standalone TypeScript type with attached + * docstrings is worth the code duplication. * * Note that this'll just be syntactic duplication - if the two definitions get * out of sync in the shape of the types they represent, the TypeScript compiler diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index d7a731a487..468a67b6fb 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -20,3 +20,20 @@ export const authenticatedRequestHeaders = async () => ({ export const clientPackageHeader = () => ({ "X-Client-Package": clientPackageName, }); + +/** + * A custom Error that is thrown if a fetch fails with a non-2xx HTTP status. + */ +export class HTTPError extends Error { + res: Response; + + constructor(url: string, res: Response) { + super(`Failed to fetch ${url}: HTTP ${res.status}`); + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (Error.captureStackTrace) Error.captureStackTrace(this, HTTPError); + + this.name = "HTTPError"; + this.res = res; + } +} From 03ded09cb4d1eeece87c5febf8cf7382411496a7 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 15:17:07 +0530 Subject: [PATCH 180/466] [mob][photos] Use consistent names for all lock screen related classes and file names --- mobile/lib/core/configuration.dart | 6 +++--- mobile/lib/main.dart | 4 ++-- .../services/local_authentication_service.dart | 4 ++-- .../lock_screen_confirm_password.dart} | 4 ++-- .../lock_screen_confirm_pin.dart} | 4 ++-- .../lock_screen_options.dart} | 16 ++++++++-------- .../lock_screen_password.dart} | 10 +++++----- .../lock_screen_pin.dart} | 10 +++++----- .../lib/ui/settings/security_section_widget.dart | 4 ++-- mobile/lib/ui/tools/lock_screen.dart | 4 ++-- mobile/lib/utils/auth_util.dart | 4 ++-- ...en_setting.dart => lock_screen_settings.dart} | 8 ++++---- 12 files changed, 39 insertions(+), 39 deletions(-) rename mobile/lib/ui/settings/{lockscreen/lockscreen_confirm_password.dart => lock_screen/lock_screen_confirm_password.dart} (97%) rename mobile/lib/ui/settings/{lockscreen/lockscreen_confirm_pin.dart => lock_screen/lock_screen_confirm_pin.dart} (98%) rename mobile/lib/ui/settings/{lockscreen/lock_screen_option.dart => lock_screen/lock_screen_options.dart} (94%) rename mobile/lib/ui/settings/{lockscreen/lockscreen_password.dart => lock_screen/lock_screen_password.dart} (95%) rename mobile/lib/ui/settings/{lockscreen/lockscreen_pin.dart => lock_screen/lock_screen_pin.dart} (97%) rename mobile/lib/utils/{lockscreen_setting.dart => lock_screen_settings.dart} (95%) diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index 1bb28050aa..f9ccd55868 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -34,7 +34,7 @@ import 'package:photos/services/search_service.dart'; import 'package:photos/services/sync_service.dart'; import 'package:photos/utils/crypto_util.dart'; import 'package:photos/utils/file_uploader.dart'; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; import 'package:photos/utils/validator_util.dart'; import "package:photos/utils/wakelock_util.dart"; import 'package:shared_preferences/shared_preferences.dart'; @@ -620,8 +620,8 @@ class Configuration { } Future shouldShowLockScreen() async { - final bool isPin = await LockscreenSetting.instance.isPinSet(); - final bool isPass = await LockscreenSetting.instance.isPasswordSet(); + final bool isPin = await LockScreenSettings.instance.isPinSet(); + final bool isPass = await LockScreenSettings.instance.isPasswordSet(); return isPin || isPass || shouldShowSystemLockScreen(); } diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index e892de0137..7775b00aaa 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -53,7 +53,7 @@ import 'package:photos/utils/crypto_util.dart'; import "package:photos/utils/email_util.dart"; import 'package:photos/utils/file_uploader.dart'; import 'package:photos/utils/local_settings.dart'; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; import 'package:shared_preferences/shared_preferences.dart'; final _logger = Logger("main"); @@ -210,7 +210,7 @@ Future _init(bool isBackground, {String via = ''}) async { CryptoUtil.init(); _logger.info("Lockscreen init"); - LockscreenSetting.instance.init(preferences); + LockScreenSettings.instance.init(preferences); _logger.info("Configuration init"); await Configuration.instance.init(); diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 73cc0e3701..4f2c6916bc 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -3,8 +3,8 @@ import "dart:async"; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:photos/core/configuration.dart'; -import "package:photos/ui/settings/lockscreen/lockscreen_password.dart"; -import "package:photos/ui/settings/lockscreen/lockscreen_pin.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_password.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_pin.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; import 'package:photos/utils/dialog_util.dart'; diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart similarity index 97% rename from mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart rename to mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart index 1ab2861c57..22fe75b0a4 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart @@ -5,7 +5,7 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; class LockScreenConfirmPassword extends StatefulWidget { const LockScreenConfirmPassword({ @@ -23,7 +23,7 @@ class _LockScreenConfirmPasswordState extends State { /// _confirmPasswordController is disposed by the [TextInputWidget] final _confirmPasswordController = TextEditingController(text: null); - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; final _focusNode = FocusNode(); final _isFormValid = ValueNotifier(false); final _submitNotifier = ValueNotifier(false); diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart similarity index 98% rename from mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart rename to mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart index fae5264c5f..c10a33323c 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart @@ -4,7 +4,7 @@ import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; import "package:pinput/pinput.dart"; class LockScreenConfirmPin extends StatefulWidget { @@ -17,7 +17,7 @@ class LockScreenConfirmPin extends StatefulWidget { class _LockScreenConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; final _pinPutDecoration = PinTheme( height: 48, width: 48, diff --git a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart similarity index 94% rename from mobile/lib/ui/settings/lockscreen/lock_screen_option.dart rename to mobile/lib/ui/settings/lock_screen/lock_screen_options.dart index 57e5529297..a274944996 100644 --- a/mobile/lib/ui/settings/lockscreen/lock_screen_option.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart @@ -7,21 +7,21 @@ import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/components/toggle_switch_widget.dart"; -import "package:photos/ui/settings/lockscreen/lockscreen_password.dart"; -import "package:photos/ui/settings/lockscreen/lockscreen_pin.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_password.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_pin.dart"; import "package:photos/ui/tools/app_lock.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; -class LockScreenOption extends StatefulWidget { - const LockScreenOption({super.key}); +class LockScreenOptions extends StatefulWidget { + const LockScreenOptions({super.key}); @override - State createState() => _LockScreenOptionState(); + State createState() => _LockScreenOptionsState(); } -class _LockScreenOptionState extends State { +class _LockScreenOptionsState extends State { final Configuration _configuration = Configuration.instance; - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; late bool appLock; bool isPinEnabled = false; bool isPasswordEnabled = false; diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart similarity index 95% rename from mobile/lib/ui/settings/lockscreen/lockscreen_password.dart rename to mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index 935235af13..eba1d6f338 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -8,10 +8,10 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/dynamic_fab.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/components/text_input_widget.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; -import "package:photos/ui/settings/lockscreen/lockscreen_confirm_password.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_confirm_password.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_options.dart"; import "package:photos/utils/crypto_util.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; class LockScreenPassword extends StatefulWidget { const LockScreenPassword({ @@ -38,7 +38,7 @@ class _LockScreenPasswordState extends State { final _submitNotifier = ValueNotifier(false); int invalidAttemptsCount = 0; - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; late String enteredHashedPassword; @override void initState() { @@ -74,7 +74,7 @@ class _LockScreenPasswordState extends State { ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( - builder: (context) => const LockScreenOption(), + builder: (context) => const LockScreenOptions(), ), ); return true; diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart similarity index 97% rename from mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart rename to mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index c96726e246..d1328bc8b3 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -7,10 +7,10 @@ import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; -import "package:photos/ui/settings/lockscreen/lockscreen_confirm_pin.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_confirm_pin.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_options.dart"; import "package:photos/utils/crypto_util.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; import 'package:pinput/pinput.dart'; class LockScreenPin extends StatefulWidget { @@ -33,7 +33,7 @@ class LockScreenPin extends StatefulWidget { class _LockScreenPinState extends State { final _pinController = TextEditingController(text: null); - final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; late String enteredHashedPin; bool isPinValid = false; int invalidAttemptsCount = 0; @@ -80,7 +80,7 @@ class _LockScreenPinState extends State { ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( - builder: (context) => const LockScreenOption(), + builder: (context) => const LockScreenOptions(), ), ); return true; diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index a9e89c10c7..490dacb3fc 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -21,7 +21,7 @@ import 'package:photos/ui/components/expandable_menu_item_widget.dart'; import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; import 'package:photos/ui/components/toggle_switch_widget.dart'; import 'package:photos/ui/settings/common_settings.dart'; -import "package:photos/ui/settings/lockscreen/lock_screen_option.dart"; +import "package:photos/ui/settings/lock_screen/lock_screen_options.dart"; import "package:photos/utils/auth_util.dart"; import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/dialog_util.dart"; @@ -154,7 +154,7 @@ class _SecuritySectionWidgetState extends State { await Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { - return const LockScreenOption(); + return const LockScreenOptions(); }, ), ); diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 636a9d5a0e..752996a8d9 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -10,7 +10,7 @@ import 'package:photos/ui/common/gradient_button.dart'; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; class LockScreen extends StatefulWidget { const LockScreen({Key? key}) : super(key: key); @@ -31,7 +31,7 @@ class _LockScreenState extends State int invalidAttemptCount = 0; int remainingTime = 0; bool showErrorMessage = true; - final _lockscreenSetting = LockscreenSetting.instance; + final _lockscreenSetting = LockScreenSettings.instance; late final AnimationController _controller = AnimationController( duration: const Duration(milliseconds: 500), vsync: this, diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 0fa14db811..dca030d4aa 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -5,7 +5,7 @@ import 'package:local_auth_ios/local_auth_ios.dart'; import 'package:logging/logging.dart'; import "package:photos/generated/l10n.dart"; import "package:photos/services/local_authentication_service.dart"; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/lock_screen_settings.dart"; Future requestAuthentication( BuildContext context, @@ -15,7 +15,7 @@ Future requestAuthentication( Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); - final LockscreenSetting lockscreenSetting = LockscreenSetting.instance; + final LockScreenSettings lockscreenSetting = LockScreenSettings.instance; final String? savedPin = await lockscreenSetting.getPin(); final String? savedPassword = await lockscreenSetting.getPassword(); if (savedPassword != null || savedPin != null) { diff --git a/mobile/lib/utils/lockscreen_setting.dart b/mobile/lib/utils/lock_screen_settings.dart similarity index 95% rename from mobile/lib/utils/lockscreen_setting.dart rename to mobile/lib/utils/lock_screen_settings.dart index 45728af929..85117269fd 100644 --- a/mobile/lib/utils/lockscreen_setting.dart +++ b/mobile/lib/utils/lock_screen_settings.dart @@ -6,11 +6,11 @@ import "package:flutter_sodium/flutter_sodium.dart"; import "package:photos/utils/crypto_util.dart"; import "package:shared_preferences/shared_preferences.dart"; -class LockscreenSetting { - LockscreenSetting._privateConstructor(); +class LockScreenSettings { + LockScreenSettings._privateConstructor(); - static final LockscreenSetting instance = - LockscreenSetting._privateConstructor(); + static final LockScreenSettings instance = + LockScreenSettings._privateConstructor(); static const password = "user_pass"; static const pin = "user_pin"; static const saltKey = "user_salt"; From c9a2494ac8518fe6297b095ad5772210a9086b4e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 15:15:43 +0530 Subject: [PATCH 181/466] Test --- .../new/photos/services/ml/embedding.ts | 65 ++++--------------- web/packages/next/http.ts | 2 +- 2 files changed, 13 insertions(+), 54 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 88416e0586..e0bfa1af9a 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -7,7 +7,7 @@ import { getLocalTrashedFiles, } from "@/new/photos/services/files"; import type { EnteFile } from "@/new/photos/types/file"; -import { authenticatedRequestHeaders } from "@/next/http"; +import { HTTPError, authenticatedRequestHeaders } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; @@ -293,59 +293,15 @@ export const putEmbedding = async ( const { encryptedMetadataB64, decryptionHeaderB64 } = await encryptFileMetadata(embedding, enteFile.key); - await apiURL("/"), - putEmbeddingReq, - null, - { - "X-Auth-Token": token, - }, - - const url = apiURL("/embeddings") + const url = await apiURL("/embeddings"); const res = await fetch(url, { method: "PUT", - headers: authenticatedRequestHeaders(), + headers: await authenticatedRequestHeaders(), body: JSON.stringify({ - - }) - } - if (!res.ok) throw new Error() - - ) - - // Sanity check - - const rt = await decryptFileMetadata( - encryptedMetadataB64, - decryptionHeaderB64, - enteFile.key, - ); - console.log("put", JSON.stringify(faceIndex) == rt); - - // const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); - // const { file: encryptedEmbeddingData } = - // await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); - // // TODO(MR): Indexing - // console.log(encryptedEmbeddingData); - // throw new Error("Unimplemented"); - // await putEmbedding({ - // fileID: enteFile.id, - // encryptedEmbedding: encryptedEmbeddingData.encryptedData, - // decryptionHeader: encryptedEmbeddingData.decryptionHeader, - // model: "file-ml-clip-face", - // }); -}; - -export const putFaceIndex = async ( - enteFile: EnteFile, - faceIndex: FaceIndex, -) => { - log.debug(() => ({ - t: "Uploading faceEmbedding", - d: JSON.stringify(faceIndex), - })); - - const { encryptedMetadataB64, decryptionHeaderB64 } = - await encryptFileMetadata(JSON.stringify(faceIndex), enteFile.key); + model, + }), + }); + if (!res.ok) throw new HTTPError(url, res); // Sanity check @@ -354,7 +310,7 @@ export const putFaceIndex = async ( decryptionHeaderB64, enteFile.key, ); - console.log("put", JSON.stringify(faceIndex) == rt); + console.log("put", embedding == rt); // const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); // const { file: encryptedEmbeddingData } = @@ -366,7 +322,7 @@ export const putFaceIndex = async ( // fileID: enteFile.id, // encryptedEmbedding: encryptedEmbeddingData.encryptedData, // decryptionHeader: encryptedEmbeddingData.decryptionHeader, - // model: "file-ml-clip-face", + // model:, // }); }; @@ -474,3 +430,6 @@ const FaceIndex = z }) // Retain fields we might not (currently) understand. .passthrough(); + +export const putFaceIndex = async (enteFile: EnteFile, faceIndex: FaceIndex) => + putEmbedding(enteFile, "file-ml-clip-face", JSON.stringify(faceIndex)); diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 468a67b6fb..e77c6e57f8 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -33,7 +33,7 @@ export class HTTPError extends Error { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (Error.captureStackTrace) Error.captureStackTrace(this, HTTPError); - this.name = "HTTPError"; + this.name = this.constructor.name; this.res = res; } } From 33ab6809e2aca13180deede254864b12affa4530 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 15:31:24 +0530 Subject: [PATCH 182/466] Cleanup --- .../new/photos/services/ml/embedding.ts | 56 +++---------------- 1 file changed, 7 insertions(+), 49 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index e0bfa1af9a..79bdb2b0bb 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -242,33 +242,6 @@ const getEmbeddingsDiff = async ( if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); return z.array(RemoteEmbedding).parse(await res.json()); }; -/* -export const putEmbedding = async ( - putEmbeddingReq: PutEmbeddingRequest, -): Promise => { - try { - const token = inWorker() - ? await workerBridge.getAuthToken() - : getToken(); - if (!token) { - log.info("putEmbedding failed: token not found"); - throw Error(CustomError.TOKEN_MISSING); - } - const resp = await HTTPService.put( - await apiURL("/embeddings"), - putEmbeddingReq, - null, - { - "X-Auth-Token": token, - }, - ); - return resp.data; - } catch (e) { - log.error("put embedding failed", e); - throw e; - } -}; -*/ /** * Upload an embedding to remote. @@ -298,32 +271,13 @@ export const putEmbedding = async ( method: "PUT", headers: await authenticatedRequestHeaders(), body: JSON.stringify({ + fileID: enteFile.id, + encryptedEmbedding: encryptedMetadataB64, + decryptionHeader: decryptionHeaderB64, model, }), }); if (!res.ok) throw new HTTPError(url, res); - - // Sanity check - - const rt = await decryptFileMetadata( - encryptedMetadataB64, - decryptionHeaderB64, - enteFile.key, - ); - console.log("put", embedding == rt); - - // const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); - // const { file: encryptedEmbeddingData } = - // await comlinkCryptoWorker.encryptMetadata(faceIndex, enteFile.key); - // // TODO(MR): Indexing - // console.log(encryptedEmbeddingData); - // throw new Error("Unimplemented"); - // await putEmbedding({ - // fileID: enteFile.id, - // encryptedEmbedding: encryptedEmbeddingData.encryptedData, - // decryptionHeader: encryptedEmbeddingData.decryptionHeader, - // model:, - // }); }; // MARK: - Face @@ -431,5 +385,9 @@ const FaceIndex = z // Retain fields we might not (currently) understand. .passthrough(); +/** + * Save the face index for the given {@link enteFile} on remote so that other + * clients can directly pull it instead of needing to reindex. + */ export const putFaceIndex = async (enteFile: EnteFile, faceIndex: FaceIndex) => putEmbedding(enteFile, "file-ml-clip-face", JSON.stringify(faceIndex)); From 54b0374680583043c7299ea194300456bc5bf5ef Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 15:41:24 +0530 Subject: [PATCH 183/466] Parse array --- web/packages/new/photos/services/ml/embedding.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 79bdb2b0bb..ce45eeeaa9 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -240,7 +240,9 @@ const getEmbeddingsDiff = async ( headers: await authenticatedRequestHeaders(), }); if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); - return z.array(RemoteEmbedding).parse(await res.json()); + + return z.object({ diff: z.array(RemoteEmbedding) }).parse(await res.json()) + .diff; }; /** From ff94ceb254eb330fb1a67b9f63d070a049b89335 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 15:44:02 +0530 Subject: [PATCH 184/466] Fix condition --- web/packages/new/photos/services/ml/embedding.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index ce45eeeaa9..bfb104c0f5 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -309,9 +309,9 @@ export const pullFaceEmbeddings = () => */ const saveFaceIndexIfNewer = async (index: FaceIndex) => { const version = index.faceEmbedding.version; - if (version <= faceIndexingVersion) { + if (version < faceIndexingVersion) { log.info( - `Ignoring remote face index with version ${version} not newer than what our indexer supports (${faceIndexingVersion})`, + `Ignoring remote face index with version ${version} older than what our indexer can produce (${faceIndexingVersion})`, ); return; } From 71e7e660b2c39fea37e5424cac7d41d52171c90c Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 15:46:01 +0530 Subject: [PATCH 185/466] [mob][photos] Use better keys + make members private --- mobile/lib/utils/lock_screen_settings.dart | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mobile/lib/utils/lock_screen_settings.dart b/mobile/lib/utils/lock_screen_settings.dart index 85117269fd..13772d5224 100644 --- a/mobile/lib/utils/lock_screen_settings.dart +++ b/mobile/lib/utils/lock_screen_settings.dart @@ -11,11 +11,11 @@ class LockScreenSettings { static final LockScreenSettings instance = LockScreenSettings._privateConstructor(); - static const password = "user_pass"; - static const pin = "user_pin"; - static const saltKey = "user_salt"; - static const keyInvalidAttempts = "invalid_attempts"; - static const lastInvalidAttemptTime = "last_invalid_attempt_time"; + static const password = "ls_password"; + static const pin = "ls_pin"; + static const saltKey = "ls_salt"; + static const keyInvalidAttempts = "ls_invalid_attempts"; + static const lastInvalidAttemptTime = "ls_last_invalid_attempt_time"; late FlutterSecureStorage _secureStorage; late SharedPreferences _preferences; @@ -40,14 +40,14 @@ class LockScreenSettings { await _preferences.setInt(keyInvalidAttempts, count); } - static Uint8List generateSalt() { + static Uint8List _generateSalt() { return Sodium.randombytesBuf(Sodium.cryptoPwhashSaltbytes); } Future setPin(String userPin) async { await _secureStorage.delete(key: saltKey); - final salt = generateSalt(); + final salt = _generateSalt(); final hash = cryptoPwHash({ "password": utf8.encode(userPin), "salt": salt, @@ -78,7 +78,7 @@ class LockScreenSettings { Future setPassword(String pass) async { await _secureStorage.delete(key: saltKey); - final salt = generateSalt(); + final salt = _generateSalt(); final hash = cryptoPwHash({ "password": utf8.encode(pass), "salt": salt, From 365e8e6eb8cc26198a6db7573d26a668160a9f80 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 18:19:16 +0530 Subject: [PATCH 186/466] [mob][photos] Make custom key pad for pin a separate widget and reuse it instead of writing duplicates of it --- .../lock_screen/custom_pin_keypad.dart | 196 ++++++++++++++++++ .../lock_screen/lock_screen_confirm_pin.dart | 193 +---------------- .../settings/lock_screen/lock_screen_pin.dart | 191 +---------------- 3 files changed, 200 insertions(+), 380 deletions(-) create mode 100644 mobile/lib/ui/settings/lock_screen/custom_pin_keypad.dart diff --git a/mobile/lib/ui/settings/lock_screen/custom_pin_keypad.dart b/mobile/lib/ui/settings/lock_screen/custom_pin_keypad.dart new file mode 100644 index 0000000000..d388a2f906 --- /dev/null +++ b/mobile/lib/ui/settings/lock_screen/custom_pin_keypad.dart @@ -0,0 +1,196 @@ +import "package:flutter/material.dart"; +import "package:photos/theme/ente_theme.dart"; + +class CustomPinKeypad extends StatelessWidget { + final TextEditingController controller; + const CustomPinKeypad({required this.controller, super.key}); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Container( + padding: const EdgeInsets.all(2), + color: getEnteColorScheme(context).strokeFainter, + child: Column( + children: [ + Row( + children: [ + _Button( + text: '', + number: '1', + onTap: () { + _onKeyTap('1'); + }, + ), + _Button( + text: "ABC", + number: '2', + onTap: () { + _onKeyTap('2'); + }, + ), + _Button( + text: "DEF", + number: '3', + onTap: () { + _onKeyTap('3'); + }, + ), + ], + ), + Row( + children: [ + _Button( + number: '4', + text: "GHI", + onTap: () { + _onKeyTap('4'); + }, + ), + _Button( + number: '5', + text: 'JKL', + onTap: () { + _onKeyTap('5'); + }, + ), + _Button( + number: '6', + text: 'MNO', + onTap: () { + _onKeyTap('6'); + }, + ), + ], + ), + Row( + children: [ + _Button( + number: '7', + text: 'PQRS', + onTap: () { + _onKeyTap('7'); + }, + ), + _Button( + number: '8', + text: 'TUV', + onTap: () { + _onKeyTap('8'); + }, + ), + _Button( + number: '9', + text: 'WXYZ', + onTap: () { + _onKeyTap('9'); + }, + ), + ], + ), + Row( + children: [ + const _Button( + number: '', + text: '', + muteButton: true, + onTap: null, + ), + _Button( + number: '0', + text: '', + onTap: () { + _onKeyTap('0'); + }, + ), + _Button( + number: '', + text: '', + icon: const Icon(Icons.backspace_outlined), + onTap: () { + _onBackspace(); + }, + ), + ], + ), + ], + ), + ), + ); + } + + void _onKeyTap(String number) { + controller.text += number; + return; + } + + void _onBackspace() { + if (controller.text.isNotEmpty) { + controller.text = + controller.text.substring(0, controller.text.length - 1); + } + return; + } +} + +class _Button extends StatelessWidget { + final String number; + final String text; + final VoidCallback? onTap; + final bool muteButton; + final Widget? icon; + const _Button({ + required this.number, + required this.text, + this.muteButton = false, + required this.onTap, + this.icon, + }); + + @override + Widget build(BuildContext context) { + final colorScheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); + return Expanded( + child: GestureDetector( + onTap: onTap, + child: Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(6), + color: muteButton + ? colorScheme.fillFaintPressed + : icon == null + ? colorScheme.backgroundElevated2 + : null, + ), + child: Center( + child: muteButton + ? const SizedBox.shrink() + : icon != null + ? Container( + child: icon, + ) + : Container( + padding: const EdgeInsets.all(4), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + number, + style: textTheme.h3, + ), + Text( + text, + style: textTheme.tinyBold, + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart index c10a33323c..a970416750 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart @@ -1,9 +1,8 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; -import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; -import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/settings/lock_screen/custom_pin_keypad.dart"; import "package:photos/utils/lock_screen_settings.dart"; import "package:pinput/pinput.dart"; @@ -191,197 +190,9 @@ class _LockScreenConfirmPinState extends State { isPortrait ? const Spacer() : const Padding(padding: EdgeInsets.all(12)), - customKeyPad(colorTheme, textTheme), + CustomPinKeypad(controller: _confirmPinController), ], ), ); } - - Widget customKeyPad(EnteColorScheme colorTheme, EnteTextTheme textTheme) { - return SafeArea( - child: Container( - padding: const EdgeInsets.all(2), - color: colorTheme.strokeFainter, - child: Column( - children: [ - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: '', - number: '1', - onTap: () { - _onKeyTap('1'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "ABC", - number: '2', - onTap: () { - _onKeyTap('2'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "DEF", - number: '3', - onTap: () { - _onKeyTap('3'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '4', - text: "GHI", - onTap: () { - _onKeyTap('4'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '5', - text: 'JKL', - onTap: () { - _onKeyTap('5'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '6', - text: 'MNO', - onTap: () { - _onKeyTap('6'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '7', - text: 'PQRS', - onTap: () { - _onKeyTap('7'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '8', - text: 'TUV', - onTap: () { - _onKeyTap('8'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '9', - text: 'WXYZ', - onTap: () { - _onKeyTap('9'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - muteButton: true, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '0', - text: '', - onTap: () { - _onKeyTap('0'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - icons: const Icon(Icons.backspace_outlined), - onTap: () { - _onBackspace(); - }, - ), - ], - ), - ], - ), - ), - ); - } - - Widget buttonWidget({ - colorTheme, - textTheme, - text, - number, - muteButton = false, - icons, - onTap, - }) { - return Expanded( - child: GestureDetector( - onTap: onTap, - child: Container( - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(6), - color: muteButton - ? colorTheme.fillFaintPressed - : icons == null - ? colorTheme.backgroundElevated2 - : null, - ), - child: Center( - child: muteButton - ? Container() - : icons != null - ? Container( - child: icons, - ) - : Container( - padding: const EdgeInsets.all(4), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - number, - style: textTheme.h3, - ), - Text( - text, - style: textTheme.small, - ), - ], - ), - ), - ), - ), - ), - ); - } } diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index d1328bc8b3..6b36b9b623 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -7,6 +7,7 @@ import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/settings/lock_screen/custom_pin_keypad.dart"; import "package:photos/ui/settings/lock_screen/lock_screen_confirm_pin.dart"; import "package:photos/ui/settings/lock_screen/lock_screen_options.dart"; import "package:photos/utils/crypto_util.dart"; @@ -262,197 +263,9 @@ class _LockScreenPinState extends State { isPortrait ? const Spacer() : const Padding(padding: EdgeInsets.all(12)), - customKeyPad(colorTheme, textTheme), + CustomPinKeypad(controller: _pinController), ], ), ); } - - Widget customKeyPad(EnteColorScheme colorTheme, EnteTextTheme textTheme) { - return SafeArea( - child: Container( - padding: const EdgeInsets.all(2), - color: colorTheme.strokeFainter, - child: Column( - children: [ - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: '', - number: '1', - onTap: () { - _onKeyTap('1'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "ABC", - number: '2', - onTap: () { - _onKeyTap('2'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - text: "DEF", - number: '3', - onTap: () { - _onKeyTap('3'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '4', - text: "GHI", - onTap: () { - _onKeyTap('4'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '5', - text: 'JKL', - onTap: () { - _onKeyTap('5'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '6', - text: 'MNO', - onTap: () { - _onKeyTap('6'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '7', - text: 'PQRS', - onTap: () { - _onKeyTap('7'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '8', - text: 'TUV', - onTap: () { - _onKeyTap('8'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '9', - text: 'WXYZ', - onTap: () { - _onKeyTap('9'); - }, - ), - ], - ), - Row( - children: [ - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - muteButton: true, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '0', - text: '', - onTap: () { - _onKeyTap('0'); - }, - ), - buttonWidget( - colorTheme: colorTheme, - textTheme: textTheme, - number: '', - text: '', - icons: const Icon(Icons.backspace_outlined), - onTap: () { - _onBackspace(); - }, - ), - ], - ), - ], - ), - ), - ); - } - - Widget buttonWidget({ - colorTheme, - textTheme, - text, - number, - muteButton = false, - icons, - onTap, - }) { - return Expanded( - child: GestureDetector( - onTap: onTap, - child: Container( - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(6), - color: muteButton - ? colorTheme.fillFaintPressed - : icons == null - ? colorTheme.backgroundElevated2 - : null, - ), - child: Center( - child: muteButton - ? Container() - : icons != null - ? Container( - child: icons, - ) - : Container( - padding: const EdgeInsets.all(4), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - number, - style: textTheme.h3, - ), - Text( - text, - style: textTheme.miniBold, - ), - ], - ), - ), - ), - ), - ), - ); - } } From f60ff6d8df7762d23cd8aab4d82d01c02f76d72a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 18:57:19 +0530 Subject: [PATCH 187/466] Rename and shuffle --- web/apps/photos/src/services/logout.ts | 22 +++++-- web/packages/new/photos/services/ml/index.ts | 24 +++---- web/packages/new/photos/services/ml/worker.ts | 65 +++++++++++++++++-- 3 files changed, 88 insertions(+), 23 deletions(-) diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 2013553fe7..90cd73f110 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,6 +1,6 @@ import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; -import { terminateFaceWorker } from "@/new/photos/services/ml"; +import { terminateMLWorker } from "@/new/photos/services/ml"; import { clearFaceData } from "@/new/photos/services/ml/db"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; @@ -19,11 +19,23 @@ export const photosLogout = async () => { const ignoreError = (label: string, e: unknown) => log.error(`Ignoring error during logout (${label})`, e); + // - Workers + // Terminate any workers before clearing persistent state. // See: [Note: Caching IDB instances in separate execution contexts]. + try { + terminateMLWorker(); + } catch (e) { + ignoreError("face", e); + } + + // - Remote logout and clear state + await accountLogout(); + // - Photos specific logout + try { clearFeatureFlagSessionState(); } catch (e) { @@ -42,11 +54,7 @@ export const photosLogout = async () => { ignoreError("CLIP", e); } - try { - terminateFaceWorker(); - } catch (e) { - ignoreError("face", e); - } + // - Desktop const electron = globalThis.electron; if (electron) { @@ -69,7 +77,7 @@ export const photosLogout = async () => { } try { - await electron?.logout(); + await electron.logout(); } catch (e) { ignoreError("electron", e); } diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 743c1dbd61..ffcedc7317 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -1,31 +1,31 @@ /** - * @file Main thread interface to {@link FaceWorker}. + * @file Main thread interface to {@link MLWorker}. */ import { ComlinkWorker } from "@/next/worker/comlink-worker"; -import { FaceWorker } from "./worker"; +import { MLWorker } from "./worker"; /** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ -let _comlinkWorker: ComlinkWorker | undefined; +let _comlinkWorker: ComlinkWorker | undefined; -/** Lazily created, cached, instance of {@link FaceWorker}. */ -export const faceWorker = async () => +/** Lazily created, cached, instance of {@link MLWorker}. */ +export const worker = async () => (_comlinkWorker ??= createComlinkWorker()).remote; const createComlinkWorker = () => - new ComlinkWorker( - "face", + new ComlinkWorker( + "ml", new Worker(new URL("worker.ts", import.meta.url)), ); /** - * Terminate {@link faceWorker} (if any). + * Terminate {@link worker} (if any). * - * This is useful during logout to immediately stop any background face related - * operations that are in-flight for the current user. After the user logs in - * again, a new {@link faceWorker} will be created on demand. + * This is useful during logout to immediately stop any background ML operations + * that are in-flight for the current user. After the user logs in again, a new + * {@link worker} will be created on demand for subsequent usage. */ -export const terminateFaceWorker = () => { +export const terminateMLWorker = () => { if (_comlinkWorker) { _comlinkWorker.terminate(); _comlinkWorker = undefined; diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 40c4cafec7..723ff14618 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,14 +1,20 @@ +import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; +import type { FaceIndex } from "@/new/photos/services/ml/types"; +import type { EnteFile } from "@/new/photos/types/file"; +import log from "@/next/log"; import { expose } from "comlink"; -import { pullFaceEmbeddings } from "./embedding"; +import { fileLogID } from "../../utils/file"; +import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; +import { indexFaces } from "./f-index"; /** - * Run operations related to face indexing and search in a Web Worker. + * Run operations related to machine learning (e.g. indexing) in a Web Worker. * * This is a normal class that is however exposed (via comlink) as a proxy * running inside a Web Worker. This way, we do not bother the main thread with * tasks that might degrade interactivity. */ -export class FaceWorker { +export class MLWorker { private isSyncing = false; /** @@ -22,4 +28,55 @@ export class FaceWorker { } } -expose(FaceWorker); +expose(MLWorker); + +/** + * Index faces in a file, save the persist the results locally, and put them + * on remote. + * + * @param enteFile The {@link EnteFile} to index. + * + * @param file If the file is one which is being uploaded from the current + * client, then we will also have access to the file's content. In such + * cases, pass a web {@link File} object to use that its data directly for + * face indexing. If this is not provided, then the file's contents will be + * downloaded and decrypted from remote. + * + * @param userAgent The UA of the client that is doing the indexing (us). + */ +export const index = async ( + enteFile: EnteFile, + file: File | undefined, + userAgent: string, +) => { + const f = fileLogID(enteFile); + const startTime = Date.now(); + + let faceIndex: FaceIndex; + try { + faceIndex = await indexFaces(enteFile, file, userAgent); + } catch (e) { + // Mark indexing as having failed only if the indexing itself + // failed, not if there were subsequent failures (like when trying + // to put the result to remote or save it to the local face DB). + log.error(`Failed to index faces in ${f}`, e); + await markIndexingFailed(enteFile.id); + throw e; + } + + try { + await putFaceIndex(enteFile, faceIndex); + await saveFaceIndex(faceIndex); + } catch (e) { + log.error(`Failed to put/save face index for ${f}`, e); + throw e; + } + + log.debug(() => { + const nf = faceIndex.faceEmbedding.faces.length; + const ms = Date.now() - startTime; + return `Indexed ${nf} faces in ${f} (${ms} ms)`; + }); + + return faceIndex; +}; From 3861e48737b3b3416687b9e9ab9a373691c18971 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:03:18 +0530 Subject: [PATCH 188/466] Prune --- .../new/photos/services/ml/indexer.ts | 7 -- .../new/photos/services/ml/indexer.worker.ts | 77 ------------------- .../services/ml/machineLearningService.ts | 6 +- 3 files changed, 2 insertions(+), 88 deletions(-) delete mode 100644 web/packages/new/photos/services/ml/indexer.worker.ts diff --git a/web/packages/new/photos/services/ml/indexer.ts b/web/packages/new/photos/services/ml/indexer.ts index 51535e6d9d..dd255f5684 100644 --- a/web/packages/new/photos/services/ml/indexer.ts +++ b/web/packages/new/photos/services/ml/indexer.ts @@ -16,7 +16,6 @@ import type { EnteFile } from "@/new/photos/types/file"; // import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; // import type { Remote } from "comlink"; -// import type { FaceIndexerWorker } from "./indexer.worker"; /** * Face indexing orchestrator. @@ -130,12 +129,6 @@ class FaceIndexer { /** The singleton instance of {@link FaceIndexer}. */ export default new FaceIndexer(); -// const createFaceIndexerComlinkWorker = () => -// new ComlinkWorker( -// "face-indexer", -// new Worker(new URL("indexer.worker.ts", import.meta.url)), -// ); - export interface FaceIndexingStatus { /** * Which phase we are in within the indexing pipeline when viewed across the diff --git a/web/packages/new/photos/services/ml/indexer.worker.ts b/web/packages/new/photos/services/ml/indexer.worker.ts deleted file mode 100644 index b5fd600a50..0000000000 --- a/web/packages/new/photos/services/ml/indexer.worker.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { - closeFaceDBConnectionsIfNeeded, - markIndexingFailed, - saveFaceIndex, -} from "@/new/photos/services/ml/db"; -import type { FaceIndex } from "@/new/photos/services/ml/types"; -import type { EnteFile } from "@/new/photos/types/file"; -import log from "@/next/log"; -import { fileLogID } from "../../utils/file"; -import { putFaceIndex } from "./embedding"; -import { indexFaces } from "./f-index"; - -/** - * Index faces in a file, save the persist the results locally, and put them on - * remote. - * - * This class is instantiated in a web worker so as to not get in the way of the - * main thread. It could've been a bunch of free standing functions too, it is - * just a class for convenience of compatibility with how the rest of our - * comlink workers are structured. - */ -export class FaceIndexerWorker { - /** - * Index faces in a file, save the persist the results locally, and put them - * on remote. - * - * @param enteFile The {@link EnteFile} to index. - * - * @param file If the file is one which is being uploaded from the current - * client, then we will also have access to the file's content. In such - * cases, pass a web {@link File} object to use that its data directly for - * face indexing. If this is not provided, then the file's contents will be - * downloaded and decrypted from remote. - * - * @param userAgent The UA of the client that is doing the indexing (us). - */ - async index(enteFile: EnteFile, file: File | undefined, userAgent: string) { - const f = fileLogID(enteFile); - const startTime = Date.now(); - - let faceIndex: FaceIndex; - try { - faceIndex = await indexFaces(enteFile, file, userAgent); - } catch (e) { - // Mark indexing as having failed only if the indexing itself - // failed, not if there were subsequent failures (like when trying - // to put the result to remote or save it to the local face DB). - log.error(`Failed to index faces in ${f}`, e); - await markIndexingFailed(enteFile.id); - throw e; - } - - try { - await putFaceIndex(enteFile, faceIndex); - await saveFaceIndex(faceIndex); - } catch (e) { - log.error(`Failed to put/save face index for ${f}`, e); - throw e; - } - - log.debug(() => { - const nf = faceIndex.faceEmbedding.faces.length; - const ms = Date.now() - startTime; - return `Indexed ${nf} faces in ${f} (${ms} ms)`; - }); - - return faceIndex; - } - - /** - * Calls {@link closeFaceDBConnectionsIfNeeded} to close any open - * connections to the face DB from the web worker's context. - */ - closeFaceDB() { - void closeFaceDBConnectionsIfNeeded(); - } -} diff --git a/web/packages/new/photos/services/ml/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts index cadd465b50..be2644c1f9 100644 --- a/web/packages/new/photos/services/ml/machineLearningService.ts +++ b/web/packages/new/photos/services/ml/machineLearningService.ts @@ -3,7 +3,7 @@ import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; import { syncWithLocalFilesAndGetFilesToIndex } from "./indexer"; -import { FaceIndexerWorker } from "./indexer.worker"; +import { index } from "./worker"; const batchSize = 200; @@ -214,9 +214,7 @@ class MachineLearningService { file: File | undefined, userAgent: string, ) { - const worker = new FaceIndexerWorker(); - - await worker.index(enteFile, file, userAgent); + await index(enteFile, file, userAgent); } } From 177a04830bde2c053e3bd618b05e5083d8576d6c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:10:15 +0530 Subject: [PATCH 189/466] Match face DB --- web/packages/new/photos/services/ml/db.ts | 41 ++++++----------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 4e3eb74dab..8eeda67992 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -3,7 +3,7 @@ import { deleteDB, openDB, type DBSchema } from "idb"; import type { FaceIndex } from "./types"; /** - * [Note: Face DB schema] + * Face DB schema. * * There "face" database is made of two object stores: * @@ -62,20 +62,9 @@ interface FileStatus { } /** - * A promise to the face DB. + * A lazily-created, cached promise for face DB. * - * We open the database once (lazily), and thereafter save and reuse the promise - * each time something wants to connect to it. - * - * This promise can subsequently get cleared if we need to relinquish our - * connection (e.g. if another client wants to open the face DB with a newer - * version of the schema). - * - * Note that this is module specific state, so the main thread and each worker - * thread that calls the functions in this module will have their own promises. - * To ensure that all connections get torn down correctly, we need to call - * {@link closeFaceDBConnectionsIfNeeded} from both the main thread and all the - * worker threads that use this module. + * See: [Note: Caching IDB instances in separate execution contexts]. */ let _faceDB: ReturnType | undefined; @@ -125,28 +114,20 @@ const deleteLegacyDB = () => { const faceDB = () => (_faceDB ??= openFaceDB()); /** - * Close the face DB connection (if any) opened by this module. + * Clear any data stored in the face DB. * - * To ensure proper teardown of the DB connections, this function must be called - * at least once by any execution context that has called any of the other - * functions in this module. + * This is meant to be called during logout in the main thread. */ -export const closeFaceDBConnectionsIfNeeded = async () => { +export const clearFaceDB = async () => { + deleteLegacyDB(); + try { if (_faceDB) (await _faceDB).close(); - } finally { - _faceDB = undefined; + } catch (e) { + log.warn("Ignoring error when trying to close face DB", e); } -}; + _faceDB = undefined; -/** - * Clear any data stored by the face module. - * - * Meant to be called during logout. - */ -export const clearFaceData = async () => { - deleteLegacyDB(); - await closeFaceDBConnectionsIfNeeded(); return deleteDB("face", { blocked() { log.warn( From e8445d99fb9f1307d63ed725f1dd507972b50d48 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:17:22 +0530 Subject: [PATCH 190/466] Tweak --- web/packages/new/photos/services/ml/crop.ts | 2 +- web/packages/new/photos/services/ml/embedding.ts | 2 +- web/packages/new/photos/services/ml/image.ts | 4 +--- .../photos/services/ml/{f-index.ts => index-face.ts} | 10 ++++++---- web/packages/new/photos/services/ml/worker.ts | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename web/packages/new/photos/services/ml/{f-index.ts => index-face.ts} (98%) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 1e305bbe7c..cd0cafed85 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,7 +1,7 @@ import type { Box } from "@/new/photos/services/ml/types"; import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import type { FaceAlignment } from "./f-index"; +import type { FaceAlignment } from "./index-face"; export const saveFaceCrop = async ( imageBitmap: ImageBitmap, diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index bfb104c0f5..42047dd326 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -13,7 +13,7 @@ import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; import { saveFaceIndex } from "./db"; -import { faceIndexingVersion } from "./f-index"; +import { faceIndexingVersion } from "./index-face"; import { type FaceIndex } from "./types"; /** diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index d7875fa348..114247a91b 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -1,6 +1,4 @@ -// TODO: These arise from the array indexing in the pre-processing code. Isolate -// once that code settles down to its final place (currently duplicated across -// web and desktop). +// See: [Note: Allowing non-null assertions selectively] /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { ensure } from "@/utils/ensure"; diff --git a/web/packages/new/photos/services/ml/f-index.ts b/web/packages/new/photos/services/ml/index-face.ts similarity index 98% rename from web/packages/new/photos/services/ml/f-index.ts rename to web/packages/new/photos/services/ml/index-face.ts index c5ab400b9b..aeea87e041 100644 --- a/web/packages/new/photos/services/ml/f-index.ts +++ b/web/packages/new/photos/services/ml/index-face.ts @@ -1,7 +1,9 @@ -// The ML code in this file involves imperative array indexing and processing, -// and allowing non-null assertions ("!") are the easiest way to get tsc to -// accept it in the presence of noUncheckedIndexedAccess without obfuscating the -// original algorithms. +// [Note: Allowing non-null assertions selectively] +// +// The code in this file involves a lot of imperative array processing and +// indexing, and allowing non-null assertions ("!") is the easiest way to get +// TypeScript to accept it in the presence of noUncheckedIndexedAccess without +// obfuscating the original algorithms. // /* eslint-disable @typescript-eslint/no-non-null-assertion */ diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 723ff14618..1879125a97 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -5,7 +5,7 @@ import log from "@/next/log"; import { expose } from "comlink"; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; -import { indexFaces } from "./f-index"; +import { indexFaces } from "./index-face"; /** * Run operations related to machine learning (e.g. indexing) in a Web Worker. From 9758b85e96102f87bf733271aff5371d2d905f73 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:21:21 +0530 Subject: [PATCH 191/466] Prune --- .../src/components/ml/MLSearchSettings.tsx | 2 +- .../photos/src/components/ml/PeopleList.tsx | 2 +- web/apps/photos/src/pages/_app.tsx | 2 +- web/apps/photos/src/services/searchService.ts | 2 +- web/apps/photos/src/types/search/index.ts | 2 +- web/packages/new/photos/services/ml/index.ts | 132 ++++++++++ .../new/photos/services/ml/indexer.ts | 246 ------------------ .../services/ml/machineLearningService.ts | 2 +- 8 files changed, 138 insertions(+), 252 deletions(-) delete mode 100644 web/packages/new/photos/services/ml/indexer.ts diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 7d67514066..a2523ba962 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,4 +1,4 @@ -import { canEnableFaceIndexing } from "@/new/photos/services/ml/indexer"; +import { canEnableFaceIndexing } from "@/new/photos/services/ml"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index 83c7067457..d06c3cde1d 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -1,4 +1,4 @@ -import { unidentifiedFaceIDs } from "@/new/photos/services/ml/indexer"; +import { unidentifiedFaceIDs } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { blobCache } from "@/next/blob-cache"; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 0109da7f8f..9622aad32e 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -2,7 +2,7 @@ import DownloadManager from "@/new/photos/services/download"; import { isFaceIndexingEnabled, setIsFaceIndexingEnabled, -} from "@/new/photos/services/ml/indexer"; +} from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 2b0482f07f..17eb1663ce 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -2,7 +2,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { faceIndexingStatus, isFaceIndexingEnabled, -} from "@/new/photos/services/ml/indexer"; +} from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; diff --git a/web/apps/photos/src/types/search/index.ts b/web/apps/photos/src/types/search/index.ts index 693e087cd6..575cb0a9c7 100644 --- a/web/apps/photos/src/types/search/index.ts +++ b/web/apps/photos/src/types/search/index.ts @@ -1,5 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; -import type { FaceIndexingStatus } from "@/new/photos/services/ml/indexer"; +import type { FaceIndexingStatus } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { City } from "services/locationSearchService"; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index ffcedc7317..3a8ddebea7 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -2,7 +2,23 @@ * @file Main thread interface to {@link MLWorker}. */ +import { + isBetaUser, + isInternalUser, +} from "@/new/photos/services/feature-flags"; +import { + getAllLocalFiles, + getLocalTrashedFiles, +} from "@/new/photos/services/files"; +import { + faceIndex, + indexableFileIDs, + indexedAndIndexableCounts, + updateAssumingLocalFiles, +} from "@/new/photos/services/ml/db"; +import type { EnteFile } from "@/new/photos/types/file"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { ensure } from "@/utils/ensure"; import { MLWorker } from "./worker"; /** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ @@ -31,3 +47,119 @@ export const terminateMLWorker = () => { _comlinkWorker = undefined; } }; + +export interface FaceIndexingStatus { + /** + * Which phase we are in within the indexing pipeline when viewed across the + * user's entire library: + * + * - "scheduled": There are files we know of that have not been indexed. + * + * - "indexing": The face indexer is currently running. + * + * - "clustering": All files we know of have been indexed, and we are now + * clustering the faces that were found. + * + * - "done": Face indexing and clustering is complete for the user's + * library. + */ + phase: "scheduled" | "indexing" | "clustering" | "done"; + /** The number of files that have already been indexed. */ + nSyncedFiles: number; + /** The total number of files that are eligible for indexing. */ + nTotalFiles: number; +} + +export const faceIndexingStatus = async ( + isSyncing: boolean, +): Promise => { + const { indexedCount, indexableCount } = await indexedAndIndexableCounts(); + + let phase: FaceIndexingStatus["phase"]; + if (indexableCount > 0) { + if (!isSyncing) { + phase = "scheduled"; + } else { + phase = "indexing"; + } + } else { + phase = "done"; + } + + return { + phase, + nSyncedFiles: indexedCount, + nTotalFiles: indexableCount + indexedCount, + }; +}; + +/** + * Return the IDs of all the faces in the given {@link enteFile} that are not + * associated with a person cluster. + */ +export const unidentifiedFaceIDs = async ( + enteFile: EnteFile, +): Promise => { + const index = await faceIndex(enteFile.id); + return index?.faceEmbedding.faces.map((f) => f.faceID) ?? []; +}; + +/** + * Return true if we should show an option to the user to allow them to enable + * face search in the UI. + */ +export const canEnableFaceIndexing = async () => + (await isInternalUser()) || (await isBetaUser()); + +/** + * Return true if the user has enabled face indexing in the app's settings. + * + * This setting is persisted locally (in local storage) and is not synced with + * remote. There is a separate setting, "faceSearchEnabled" that is synced with + * remote, but that tracks whether or not the user has enabled face search once + * on any client. This {@link isFaceIndexingEnabled} property, on the other + * hand, denotes whether or not indexing is enabled on the current client. + */ +export const isFaceIndexingEnabled = () => + localStorage.getItem("faceIndexingEnabled") == "1"; + +/** + * Update the (locally stored) value of {@link isFaceIndexingEnabled}. + */ +export const setIsFaceIndexingEnabled = (enabled: boolean) => + enabled + ? localStorage.setItem("faceIndexingEnabled", "1") + : localStorage.removeItem("faceIndexingEnabled"); + +/** + * Sync face DB with the local (and potentially indexable) files that we know + * about. Then return the next {@link count} files that still need to be + * indexed. + * + * For specifics of what a "sync" entails, see {@link updateAssumingLocalFiles}. + * + * @param userID Sync only files owned by a {@link userID} with the face DB. + * + * @param count Limit the resulting list of indexable files to {@link count}. + */ +export const syncWithLocalFilesAndGetFilesToIndex = async ( + userID: number, + count: number, +): Promise => { + const isIndexable = (f: EnteFile) => f.ownerID == userID; + + const localFiles = await getAllLocalFiles(); + const localFilesByID = new Map( + localFiles.filter(isIndexable).map((f) => [f.id, f]), + ); + + const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); + + await updateAssumingLocalFiles( + Array.from(localFilesByID.keys()), + localTrashFileIDs, + ); + + const fileIDsToIndex = await indexableFileIDs(count); + return fileIDsToIndex.map((id) => ensure(localFilesByID.get(id))); +}; diff --git a/web/packages/new/photos/services/ml/indexer.ts b/web/packages/new/photos/services/ml/indexer.ts deleted file mode 100644 index dd255f5684..0000000000 --- a/web/packages/new/photos/services/ml/indexer.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { - isBetaUser, - isInternalUser, -} from "@/new/photos/services/feature-flags"; -import { - getAllLocalFiles, - getLocalTrashedFiles, -} from "@/new/photos/services/files"; -import { - faceIndex, - indexableFileIDs, - indexedAndIndexableCounts, - updateAssumingLocalFiles, -} from "@/new/photos/services/ml/db"; -import type { EnteFile } from "@/new/photos/types/file"; -// import { ComlinkWorker } from "@/next/worker/comlink-worker"; -import { ensure } from "@/utils/ensure"; -// import type { Remote } from "comlink"; - -/** - * Face indexing orchestrator. - * - * This module exposes a singleton instance of this class which drives the face - * indexing process on the user's library. - * - * The indexer operates in two modes - live indexing and backfill. - * - * When live indexing, any files that are being uploaded from the current client - * are provided to the indexer, which puts them in a queue and indexes them one - * by one. This is more efficient since we already have the file's content at - * hand and do not have to download and decrypt it. - * - * When backfilling, the indexer figures out if any of the user's files - * (irrespective of where they were uploaded from) still need to be indexed, and - * if so, downloads, decrypts and indexes them. - * - * Live indexing has higher priority, backfilling runs otherwise. If nothing - * remains to be indexed, the indexer goes to sleep for a while. - */ -// eslint-disable-next-line @typescript-eslint/no-extraneous-class -class FaceIndexer { - /** Live indexing queue. */ - // private liveItems: { enteFile: EnteFile; file: File | undefined }[]; - /** Timeout for when the next time we will wake up. */ - // private wakeTimeout: ReturnType | undefined; - // /** - // * Add a file to the live indexing queue. - // * - // * @param enteFile An {@link EnteFile} that should be indexed. - // * - // * @param file The contents of {@link enteFile} as a web {@link File} - // * object, if available. - // */ - // enqueueFile(enteFile: EnteFile, file: File | undefined) { - // // If face indexing is not enabled, don't enqueue anything. Later on if - // // the user turns on face indexing these files will get indexed as part - // // of the backfilling anyway, the live indexing is just an optimization. - // if (!mlWorkManager.isMlSearchEnabled) return; - // this.liveItems.push({ enteFile, file }); - // this.wakeUpIfNeeded(); - // } - // private wakeUpIfNeeded() { - // // Already awake. - // if (!this.wakeTimeout) return; - // // Cancel the alarm, wake up now. - // clearTimeout(this.wakeTimeout); - // this.wakeTimeout = undefined; - // // Get to work. - // this.tick(); - // } - /* TODO-ML(MR): This code is not currently in use */ - /** - * A promise for the lazily created singleton {@link FaceIndexerWorker} remote - * exposed by this module. - */ - // _faceIndexer: Promise>; - /** - * Main thread interface to the face indexer. - * - * This function provides a promise that resolves to a lazily created singleton - * remote with a {@link FaceIndexerWorker} at the other end. - */ - // faceIndexer = (): Promise> => - // (this._faceIndexer ??= createFaceIndexerComlinkWorker().remote); - // private async tick() { - // console.log("tick"); - // const item = this.liveItems.pop(); - // if (!item) { - // // TODO-ML: backfill instead if needed here. - // this.wakeTimeout = setTimeout(() => { - // this.wakeTimeout = undefined; - // this.wakeUpIfNeeded(); - // }, 30 * 1000); - // return; - // } - // /* - // const fileID = item.enteFile.id; - // try { - // const faceIndex = await indexFaces(item.enteFile, item.file, userAgent); - // log.info(`faces in file ${fileID}`, faceIndex); - // } catch (e) { - // log.error(`Failed to index faces in file ${fileID}`, e); - // markIndexingFailed(item.enteFile.id); - // } - // */ - // // Let the runloop drain. - // await wait(0); - // // Run again. - // // TODO - // // this.tick(); - // } - /** - * Add a newly uploaded file to the face indexing queue. - * - * @param enteFile The {@link EnteFile} that was uploaded. - * @param file - */ - /* - indexFacesInFile = (enteFile: EnteFile, file: File) => { - if (!mlWorkManager.isMlSearchEnabled) return; - - faceIndexer().then((indexer) => { - indexer.enqueueFile(file, enteFile); - }); - }; - */ -} - -/** The singleton instance of {@link FaceIndexer}. */ -export default new FaceIndexer(); - -export interface FaceIndexingStatus { - /** - * Which phase we are in within the indexing pipeline when viewed across the - * user's entire library: - * - * - "scheduled": There are files we know of that have not been indexed. - * - * - "indexing": The face indexer is currently running. - * - * - "clustering": All files we know of have been indexed, and we are now - * clustering the faces that were found. - * - * - "done": Face indexing and clustering is complete for the user's - * library. - */ - phase: "scheduled" | "indexing" | "clustering" | "done"; - /** The number of files that have already been indexed. */ - nSyncedFiles: number; - /** The total number of files that are eligible for indexing. */ - nTotalFiles: number; -} - -export const faceIndexingStatus = async ( - isSyncing: boolean, -): Promise => { - const { indexedCount, indexableCount } = await indexedAndIndexableCounts(); - - let phase: FaceIndexingStatus["phase"]; - if (indexableCount > 0) { - if (!isSyncing) { - phase = "scheduled"; - } else { - phase = "indexing"; - } - } else { - phase = "done"; - } - - return { - phase, - nSyncedFiles: indexedCount, - nTotalFiles: indexableCount + indexedCount, - }; -}; - -/** - * Return the IDs of all the faces in the given {@link enteFile} that are not - * associated with a person cluster. - */ -export const unidentifiedFaceIDs = async ( - enteFile: EnteFile, -): Promise => { - const index = await faceIndex(enteFile.id); - return index?.faceEmbedding.faces.map((f) => f.faceID) ?? []; -}; - -/** - * Return true if we should show an option to the user to allow them to enable - * face search in the UI. - */ -export const canEnableFaceIndexing = async () => - (await isInternalUser()) || (await isBetaUser()); - -/** - * Return true if the user has enabled face indexing in the app's settings. - * - * This setting is persisted locally (in local storage) and is not synced with - * remote. There is a separate setting, "faceSearchEnabled" that is synced with - * remote, but that tracks whether or not the user has enabled face search once - * on any client. This {@link isFaceIndexingEnabled} property, on the other - * hand, denotes whether or not indexing is enabled on the current client. - */ -export const isFaceIndexingEnabled = () => - localStorage.getItem("faceIndexingEnabled") == "1"; - -/** - * Update the (locally stored) value of {@link isFaceIndexingEnabled}. - */ -export const setIsFaceIndexingEnabled = (enabled: boolean) => - enabled - ? localStorage.setItem("faceIndexingEnabled", "1") - : localStorage.removeItem("faceIndexingEnabled"); - -/** - * Sync face DB with the local (and potentially indexable) files that we know - * about. Then return the next {@link count} files that still need to be - * indexed. - * - * For specifics of what a "sync" entails, see {@link updateAssumingLocalFiles}. - * - * @param userID Sync only files owned by a {@link userID} with the face DB. - * - * @param count Limit the resulting list of indexable files to {@link count}. - */ -export const syncWithLocalFilesAndGetFilesToIndex = async ( - userID: number, - count: number, -): Promise => { - const isIndexable = (f: EnteFile) => f.ownerID == userID; - - const localFiles = await getAllLocalFiles(); - const localFilesByID = new Map( - localFiles.filter(isIndexable).map((f) => [f.id, f]), - ); - - const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); - - await updateAssumingLocalFiles( - Array.from(localFilesByID.keys()), - localTrashFileIDs, - ); - - const fileIDsToIndex = await indexableFileIDs(count); - return fileIDsToIndex.map((id) => ensure(localFilesByID.get(id))); -}; diff --git a/web/packages/new/photos/services/ml/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts index be2644c1f9..54c54dcce7 100644 --- a/web/packages/new/photos/services/ml/machineLearningService.ts +++ b/web/packages/new/photos/services/ml/machineLearningService.ts @@ -2,7 +2,7 @@ import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; -import { syncWithLocalFilesAndGetFilesToIndex } from "./indexer"; +import { syncWithLocalFilesAndGetFilesToIndex } from "."; import { index } from "./worker"; const batchSize = 200; From d77b9d06f9f17220a070b846855a40734d3536f7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:24:21 +0530 Subject: [PATCH 192/466] lf --- web/apps/photos/src/services/logout.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 90cd73f110..78720b4380 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,7 +1,7 @@ import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import { terminateMLWorker } from "@/new/photos/services/ml"; -import { clearFaceData } from "@/new/photos/services/ml/db"; +import { clearFaceDB } from "@/new/photos/services/ml/db"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; import { accountLogout } from "@ente/accounts/services/logout"; @@ -65,7 +65,7 @@ export const photosLogout = async () => { } try { - await clearFaceData(); + await clearFaceDB(); } catch (e) { ignoreError("face", e); } From 6ab5015b9db4ed473c4a0e07a70385995b3c48e8 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 19:42:25 +0530 Subject: [PATCH 193/466] [mob][photos] Refactor + use better variable names --- .../local_authentication_service.dart | 6 +- .../lock_screen/lock_screen_password.dart | 111 +++++++++--------- .../settings/lock_screen/lock_screen_pin.dart | 28 +---- mobile/lib/ui/tools/lock_screen.dart | 2 +- mobile/lib/utils/auth_util.dart | 4 +- 5 files changed, 66 insertions(+), 85 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 4f2c6916bc..a989da5124 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -39,7 +39,7 @@ class LocalAuthenticationService { BuildContext context, String? savedPin, String? savedPassword, { - bool isLockscreenAuth = false, + bool isOnOpeningApp = false, }) async { if (savedPassword != null) { final result = await Navigator.of(context).push( @@ -47,7 +47,7 @@ class LocalAuthenticationService { builder: (BuildContext context) { return LockScreenPassword( isAuthenticating: true, - isLockscreenAuth: isLockscreenAuth, + isOnOpeningApp: isOnOpeningApp, authPass: savedPassword, ); }, @@ -63,7 +63,7 @@ class LocalAuthenticationService { builder: (BuildContext context) { return LockScreenPin( isAuthenticating: true, - isLockscreenAuth: isLockscreenAuth, + isOnOpeningApp: isOnOpeningApp, authPin: savedPin, ); }, diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index eba1d6f338..0b7d9b9452 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -17,14 +17,13 @@ class LockScreenPassword extends StatefulWidget { const LockScreenPassword({ super.key, this.isAuthenticating = false, - this.isLockscreenAuth = false, + this.isOnOpeningApp = false, this.authPass, }); - /// If [isLockscreenAuth] is true then we are authenticating the user at Lock screen - /// If [isAuthenticating] is true then we are authenticating the user at Setting screen + //Is false when setting a new password final bool isAuthenticating; - final bool isLockscreenAuth; + final bool isOnOpeningApp; final String? authPass; @override State createState() => _LockScreenPasswordState(); @@ -38,8 +37,7 @@ class _LockScreenPasswordState extends State { final _submitNotifier = ValueNotifier(false); int invalidAttemptsCount = 0; - final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; - late String enteredHashedPassword; + final _lockscreenSetting = LockScreenSettings.instance; @override void initState() { super.initState(); @@ -57,57 +55,6 @@ class _LockScreenPasswordState extends State { _isFormValid.dispose(); } - Future confirmPasswordAuth(String code) async { - final Uint8List? salt = await _lockscreenSetting.getSalt(); - final hash = cryptoPwHash({ - "password": utf8.encode(code), - "salt": salt, - "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, - "memLimit": Sodium.cryptoPwhashMemlimitInteractive, - }); - - enteredHashedPassword = base64Encode(hash); - if (widget.authPass == enteredHashedPassword) { - await _lockscreenSetting.setInvalidAttemptCount(0); - - widget.isLockscreenAuth - ? Navigator.of(context).pop(true) - : Navigator.of(context).pushReplacement( - MaterialPageRoute( - builder: (context) => const LockScreenOptions(), - ), - ); - return true; - } else { - if (widget.isLockscreenAuth) { - invalidAttemptsCount++; - if (invalidAttemptsCount > 4) { - await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); - Navigator.of(context).pop(false); - } - } - - await HapticFeedback.vibrate(); - throw Exception("Incorrect password"); - } - } - - Future _confirmPassword() async { - if (widget.isAuthenticating) { - await confirmPasswordAuth(_passwordController.text); - return; - } else { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => LockScreenConfirmPassword( - password: _passwordController.text, - ), - ), - ); - _passwordController.clear(); - } - } - @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); @@ -218,4 +165,54 @@ class _LockScreenPasswordState extends State { ), ); } + + Future _confirmPasswordAuth(String inputtedPassword) async { + final Uint8List? salt = await _lockscreenSetting.getSalt(); + final hash = cryptoPwHash({ + "password": utf8.encode(inputtedPassword), + "salt": salt, + "opsLimit": Sodium.cryptoPwhashOpslimitInteractive, + "memLimit": Sodium.cryptoPwhashMemlimitInteractive, + }); + + if (widget.authPass == base64Encode(hash)) { + await _lockscreenSetting.setInvalidAttemptCount(0); + + widget.isOnOpeningApp + ? Navigator.of(context).pop(true) + : Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (context) => const LockScreenOptions(), + ), + ); + return true; + } else { + if (widget.isOnOpeningApp) { + invalidAttemptsCount++; + if (invalidAttemptsCount > 4) { + await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); + Navigator.of(context).pop(false); + } + } + + await HapticFeedback.vibrate(); + throw Exception("Incorrect password"); + } + } + + Future _confirmPassword() async { + if (widget.isAuthenticating) { + await _confirmPasswordAuth(_passwordController.text); + return; + } else { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => LockScreenConfirmPassword( + password: _passwordController.text, + ), + ), + ); + _passwordController.clear(); + } + } } diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 6b36b9b623..2cea93e7fc 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -18,14 +18,13 @@ class LockScreenPin extends StatefulWidget { const LockScreenPin({ super.key, this.isAuthenticating = false, - this.isLockscreenAuth = false, + this.isOnOpeningApp = false, this.authPin, }); - /// If [isLockscreenAuth] is true then we are authenticating the user at the Lock screen - /// If [isAuthenticating] is true then we are authenticating the user at the Setting screen + //Is false when setting a new password final bool isAuthenticating; - final bool isLockscreenAuth; + final bool isOnOpeningApp; final String? authPin; @override State createState() => _LockScreenPinState(); @@ -35,7 +34,6 @@ class _LockScreenPinState extends State { final _pinController = TextEditingController(text: null); final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance; - late String enteredHashedPin; bool isPinValid = false; int invalidAttemptsCount = 0; @@ -51,19 +49,6 @@ class _LockScreenPinState extends State { _pinController.dispose(); } - void _onKeyTap(String number) { - _pinController.text += number; - return; - } - - void _onBackspace() { - if (_pinController.text.isNotEmpty) { - _pinController.text = - _pinController.text.substring(0, _pinController.text.length - 1); - } - return; - } - Future confirmPinAuth(String code) async { final Uint8List? salt = await _lockscreenSetting.getSalt(); final hash = cryptoPwHash({ @@ -73,11 +58,10 @@ class _LockScreenPinState extends State { "memLimit": Sodium.cryptoPwhashMemlimitInteractive, }); - enteredHashedPin = base64Encode(hash); - if (widget.authPin == enteredHashedPin) { + if (widget.authPin == base64Encode(hash)) { invalidAttemptsCount = 0; await _lockscreenSetting.setInvalidAttemptCount(0); - widget.isLockscreenAuth + widget.isOnOpeningApp ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( @@ -96,7 +80,7 @@ class _LockScreenPinState extends State { isPinValid = false; }); - if (widget.isLockscreenAuth) { + if (widget.isOnOpeningApp) { invalidAttemptsCount++; if (invalidAttemptsCount > 4) { await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 752996a8d9..ba12a9f3ab 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -296,7 +296,7 @@ class _LockScreenState extends State : await requestAuthentication( context, context.l10n.authToViewYourMemories, - isLockscreenAuth: true, + isOnOpeningApp: true, ); _logger.finest("LockScreen Result $result $id"); _isShowingLockScreen = false; diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index dca030d4aa..8f7c1f0c6e 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -10,7 +10,7 @@ import "package:photos/utils/lock_screen_settings.dart"; Future requestAuthentication( BuildContext context, String reason, { - bool isLockscreenAuth = false, + bool isOnOpeningApp = false, }) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); @@ -24,7 +24,7 @@ Future requestAuthentication( context, savedPin, savedPassword, - isLockscreenAuth: isLockscreenAuth, + isOnOpeningApp: isOnOpeningApp, ); } else { return await LocalAuthentication().authenticate( From bb31f44227817e0a35cd752cad59b49618917d39 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 19:58:12 +0530 Subject: [PATCH 194/466] Prepare for merge --- web/packages/new/photos/services/ml/worker.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 1879125a97..3fe960773a 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -2,7 +2,7 @@ import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; -import { expose } from "comlink"; +// import { expose } from "comlink"; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; @@ -28,7 +28,8 @@ export class MLWorker { } } -expose(MLWorker); +// TODO-ML: Temorarily disable +// expose(MLWorker); /** * Index faces in a file, save the persist the results locally, and put them From a3b19162f41bbd9321b07e3f49b16b11c4f1e5eb Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 2 Jul 2024 20:04:18 +0530 Subject: [PATCH 195/466] [mob][photos] Clean up --- mobile/lib/ui/tools/lock_screen.dart | 4 ++-- mobile/lib/utils/auth_util.dart | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index ba12a9f3ab..cfd56488a9 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -186,7 +186,7 @@ class _LockScreenState extends State if (Platform.isAndroid) { return false; } - final shortestSide = MediaQuery.of(context).size.shortestSide; + final shortestSide = MediaQuery.sizeOf(context).shortestSide; return shortestSide > 600 ? true : false; } @@ -296,7 +296,7 @@ class _LockScreenState extends State : await requestAuthentication( context, context.l10n.authToViewYourMemories, - isOnOpeningApp: true, + isOpeningApp: true, ); _logger.finest("LockScreen Result $result $id"); _isShowingLockScreen = false; diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 8f7c1f0c6e..9c4e161fbf 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -10,21 +10,20 @@ import "package:photos/utils/lock_screen_settings.dart"; Future requestAuthentication( BuildContext context, String reason, { - bool isOnOpeningApp = false, + bool isOpeningApp = false, }) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); - final LockScreenSettings lockscreenSetting = LockScreenSettings.instance; - final String? savedPin = await lockscreenSetting.getPin(); - final String? savedPassword = await lockscreenSetting.getPassword(); + final String? savedPin = await LockScreenSettings.instance.getPin(); + final String? savedPassword = await LockScreenSettings.instance.getPassword(); if (savedPassword != null || savedPin != null) { return await LocalAuthenticationService.instance .requestEnteAuthForLockScreen( context, savedPin, savedPassword, - isOnOpeningApp: isOnOpeningApp, + isOnOpeningApp: isOpeningApp, ); } else { return await LocalAuthentication().authenticate( From 6aeaea65caa1489e6b53ba44394ce1012fefd6be Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 20:43:15 +0530 Subject: [PATCH 196/466] [web] TypeScript 5.5 --- desktop/yarn.lock | 7 ++++++- web/yarn.lock | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/desktop/yarn.lock b/desktop/yarn.lock index f8cce043e6..d986999cef 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -3350,7 +3350,12 @@ typescript-eslint@8.0.0-alpha.10: "@typescript-eslint/parser" "8.0.0-alpha.10" "@typescript-eslint/utils" "8.0.0-alpha.10" -typescript@^5, typescript@^5.3.3, typescript@^5.4.3: +typescript@^5: + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== + +typescript@^5.3.3, typescript@^5.4.3: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== diff --git a/web/yarn.lock b/web/yarn.lock index be1c37c63d..6d385947d8 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -4755,9 +4755,9 @@ typed-array-length@^1.0.6: possible-typed-array-names "^1.0.0" typescript@^5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== unbox-primitive@^1.0.2: version "1.0.2" From 4a84309e23821e2271bb71cd15b1666b284ddf99 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 20:45:58 +0530 Subject: [PATCH 197/466] Apparently --- web/packages/new/photos/services/ffmpeg/worker.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index e293b9aed7..11d2e654d0 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -129,4 +129,6 @@ const substitutePlaceholders = ( } }) // TODO: The type guard should automatically get deduced with TS 5.5 + // We still need to wait for VSCode to ship with TS 5.5 otherwise the + // red squigglies in the editor will remain. .filter((s): s is string => !!s); From 2709298df0767554fddba934b1e1e24326199717 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 21:15:02 +0530 Subject: [PATCH 198/466] Isolate --- web/apps/accounts/tsconfig.json | 3 ++- web/apps/auth/src/services/steam.ts | 10 +++++----- web/apps/auth/tsconfig.json | 9 ++------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/web/apps/accounts/tsconfig.json b/web/apps/accounts/tsconfig.json index 9af1590e83..3c203ac714 100644 --- a/web/apps/accounts/tsconfig.json +++ b/web/apps/accounts/tsconfig.json @@ -1,13 +1,14 @@ { "extends": "@/build-config/tsconfig-next.json", "compilerOptions": { - /* Set the base directory from which to resolve bare module names */ + /* Set the base directory from which to resolve bare module names. */ "baseUrl": "./src", /* MUI doesn't work with exactOptionalPropertyTypes yet. */ "exactOptionalPropertyTypes": false }, "include": [ "src", + "next-env.d.ts", "../../packages/next/global-electron.d.ts", "../../packages/shared/themes/mui-theme.d.ts" ] diff --git a/web/apps/auth/src/services/steam.ts b/web/apps/auth/src/services/steam.ts index f214640c24..3c4a8a9827 100644 --- a/web/apps/auth/src/services/steam.ts +++ b/web/apps/auth/src/services/steam.ts @@ -31,12 +31,12 @@ export class Steam { const digest = sha1HMACDigest(this.secret.buffer, uintToArray(counter)); // Same calculation as regular HOTP. - const offset = digest[digest.length - 1] & 15; + const offset = digest[digest.length - 1]! & 15; let otp = - ((digest[offset] & 127) << 24) | - ((digest[offset + 1] & 255) << 16) | - ((digest[offset + 2] & 255) << 8) | - (digest[offset + 3] & 255); + ((digest[offset]! & 127) << 24) | + ((digest[offset + 1]! & 255) << 16) | + ((digest[offset + 2]! & 255) << 8) | + (digest[offset + 3]! & 255); // However, instead of using this as the OTP, use it to index into // the steam OTP alphabet. diff --git a/web/apps/auth/tsconfig.json b/web/apps/auth/tsconfig.json index 685ff12c59..3c203ac714 100644 --- a/web/apps/auth/tsconfig.json +++ b/web/apps/auth/tsconfig.json @@ -1,14 +1,9 @@ { "extends": "@/build-config/tsconfig-next.json", "compilerOptions": { - /* Set the base directory from which to resolve bare module names */ + /* Set the base directory from which to resolve bare module names. */ "baseUrl": "./src", - - /* This is hard to enforce in certain cases where we do a lot of array - indexing, e.g. image/ML ops, and TS doesn't currently have a way to - disable this for blocks of code. */ - "noUncheckedIndexedAccess": false, - /* MUI doesn't play great with exactOptionalPropertyTypes currently. */ + /* MUI doesn't work with exactOptionalPropertyTypes yet. */ "exactOptionalPropertyTypes": false }, "include": [ From 851cd77c509d91942af7c2d8fcaf5f14f3493be6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 21:15:37 +0530 Subject: [PATCH 199/466] ditto --- web/apps/cast/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/web/apps/cast/tsconfig.json b/web/apps/cast/tsconfig.json index c79fc04561..3c203ac714 100644 --- a/web/apps/cast/tsconfig.json +++ b/web/apps/cast/tsconfig.json @@ -8,6 +8,7 @@ }, "include": [ "src", + "next-env.d.ts", "../../packages/next/global-electron.d.ts", "../../packages/shared/themes/mui-theme.d.ts" ] From 94f5822e72a630aca2eed5cda7eebc9e9cf67ca5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 21:17:41 +0530 Subject: [PATCH 200/466] Works --- web/packages/accounts/tsconfig.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/web/packages/accounts/tsconfig.json b/web/packages/accounts/tsconfig.json index d660fffb3b..ccb7b626d1 100644 --- a/web/packages/accounts/tsconfig.json +++ b/web/packages/accounts/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "@/build-config/tsconfig-next.json", "compilerOptions": { - /* TODO(MR): Enable this */ - "noUncheckedIndexedAccess": false, - /* MUI doesn't play great with exactOptionalPropertyTypes currently. */ + /* MUI doesn't work with exactOptionalPropertyTypes yet. */ "exactOptionalPropertyTypes": false }, "include": [ From dbe3e9a7d80e54deb112c875527ee4440764932e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 2 Jul 2024 21:21:25 +0530 Subject: [PATCH 201/466] New convention --- web/apps/accounts/package.json | 2 +- web/apps/auth/package.json | 2 +- web/apps/auth/src/pages/_app.tsx | 4 ++-- web/apps/auth/src/pages/change-email.tsx | 2 +- web/apps/auth/src/pages/change-password.tsx | 2 +- web/apps/auth/src/pages/credentials.tsx | 2 +- web/apps/auth/src/pages/generate.tsx | 2 +- web/apps/auth/src/pages/login.tsx | 2 +- web/apps/auth/src/pages/passkeys/finish.tsx | 2 +- web/apps/auth/src/pages/passkeys/recover.tsx | 2 +- web/apps/auth/src/pages/recover.tsx | 2 +- web/apps/auth/src/pages/signup.tsx | 2 +- web/apps/auth/src/pages/two-factor/recover.tsx | 2 +- web/apps/auth/src/pages/two-factor/setup.tsx | 2 +- web/apps/auth/src/pages/two-factor/verify.tsx | 2 +- web/apps/auth/src/pages/verify.tsx | 2 +- web/apps/cast/package.json | 2 +- web/apps/photos/package.json | 2 +- .../src/components/AuthenticateUserModal.tsx | 2 +- .../photos/src/components/Sidebar/index.tsx | 2 +- .../src/components/TwoFactor/Modal/Manage.tsx | 2 +- web/apps/photos/src/pages/_app.tsx | 2 +- web/apps/photos/src/pages/change-email.tsx | 2 +- web/apps/photos/src/pages/change-password.tsx | 2 +- web/apps/photos/src/pages/credentials.tsx | 2 +- web/apps/photos/src/pages/generate.tsx | 2 +- web/apps/photos/src/pages/index.tsx | 4 ++-- web/apps/photos/src/pages/login.tsx | 2 +- web/apps/photos/src/pages/passkeys/finish.tsx | 2 +- web/apps/photos/src/pages/passkeys/recover.tsx | 2 +- web/apps/photos/src/pages/recover.tsx | 2 +- web/apps/photos/src/pages/signup.tsx | 2 +- .../photos/src/pages/two-factor/recover.tsx | 2 +- web/apps/photos/src/pages/two-factor/setup.tsx | 2 +- web/apps/photos/src/pages/two-factor/verify.tsx | 2 +- web/apps/photos/src/pages/verify.tsx | 2 +- web/apps/photos/src/services/logout.ts | 2 +- web/apps/photos/src/services/userService.ts | 2 +- web/packages/accounts/README.md | 2 +- web/packages/accounts/api/srp.ts | 8 ++++---- web/packages/accounts/api/user.ts | 6 +++--- .../accounts/components/PasswordStrength.tsx | 2 +- .../accounts/components/SetPasswordForm.tsx | 2 +- web/packages/accounts/components/SignUp.tsx | 10 +++++----- .../components/two-factor/VerifyForm.tsx | 2 +- .../components/two-factor/setup/ManualMode.tsx | 2 +- .../components/two-factor/setup/QRMode.tsx | 2 +- .../components/two-factor/setup/index.tsx | 8 ++++---- web/packages/accounts/package.json | 5 ++--- web/packages/accounts/pages/change-email.tsx | 4 ++-- web/packages/accounts/pages/change-password.tsx | 17 +++++++---------- web/packages/accounts/pages/generate.tsx | 14 +++++++------- web/packages/accounts/pages/recover.tsx | 4 ++-- web/packages/accounts/pages/signup.tsx | 2 +- .../accounts/pages/two-factor/recover.tsx | 10 +++++----- .../accounts/pages/two-factor/setup.tsx | 12 ++++++------ .../accounts/pages/two-factor/verify.tsx | 8 ++++---- web/packages/accounts/pages/verify.tsx | 2 +- web/packages/accounts/services/srp.ts | 2 +- web/packages/accounts/types/page.ts | 2 +- web/packages/accounts/types/srp.ts | 5 +---- .../shared/components/LoginComponents.tsx | 6 +++--- .../components/VerifyMasterPasswordForm.tsx | 2 +- web/packages/shared/crypto/helpers.ts | 2 +- web/packages/shared/next/pages/404.tsx | 2 +- web/tsconfig.base.json | 3 +-- 66 files changed, 109 insertions(+), 117 deletions(-) diff --git a/web/apps/accounts/package.json b/web/apps/accounts/package.json index 4599312ddc..32c00418b5 100644 --- a/web/apps/accounts/package.json +++ b/web/apps/accounts/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "private": true, "dependencies": { + "@/accounts": "*", "@/next": "*", - "@ente/accounts": "*", "@ente/shared": "*" }, "devDependencies": { diff --git a/web/apps/auth/package.json b/web/apps/auth/package.json index d16b973abc..b9679adb95 100644 --- a/web/apps/auth/package.json +++ b/web/apps/auth/package.json @@ -3,9 +3,9 @@ "version": "0.0.0", "private": true, "dependencies": { + "@/accounts": "*", "@/build-config": "*", "@/next": "*", - "@ente/accounts": "*", "@ente/eslint-config": "*", "@ente/shared": "*", "jssha": "~3.3.1", diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index b6bfa1a3d2..8317918741 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -1,3 +1,5 @@ +import { accountLogout } from "@/accounts/services/logout"; +import type { AccountsContextT } from "@/accounts/types/context"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; @@ -6,8 +8,6 @@ import { logUnhandledErrorsAndRejections, } from "@/next/log-web"; import { ensure } from "@/utils/ensure"; -import { accountLogout } from "@ente/accounts/services/logout"; -import type { AccountsContextT } from "@ente/accounts/types/context"; import { Overlay } from "@ente/shared/components/Container"; import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; diff --git a/web/apps/auth/src/pages/change-email.tsx b/web/apps/auth/src/pages/change-email.tsx index 89a765fbf9..cef4716203 100644 --- a/web/apps/auth/src/pages/change-email.tsx +++ b/web/apps/auth/src/pages/change-email.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/change-email"; +import Page_ from "@/accounts/pages/change-email"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/change-password.tsx b/web/apps/auth/src/pages/change-password.tsx index ed82edd92c..2232edc6bc 100644 --- a/web/apps/auth/src/pages/change-password.tsx +++ b/web/apps/auth/src/pages/change-password.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/change-password"; +import Page_ from "@/accounts/pages/change-password"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/credentials.tsx b/web/apps/auth/src/pages/credentials.tsx index 070aace4a1..fa3cc8fad6 100644 --- a/web/apps/auth/src/pages/credentials.tsx +++ b/web/apps/auth/src/pages/credentials.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/credentials"; +import Page_ from "@/accounts/pages/credentials"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/generate.tsx b/web/apps/auth/src/pages/generate.tsx index c6804255af..a82d0a46f3 100644 --- a/web/apps/auth/src/pages/generate.tsx +++ b/web/apps/auth/src/pages/generate.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/generate"; +import Page_ from "@/accounts/pages/generate"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/login.tsx b/web/apps/auth/src/pages/login.tsx index 1a7de0497f..a61718a309 100644 --- a/web/apps/auth/src/pages/login.tsx +++ b/web/apps/auth/src/pages/login.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/login"; +import Page_ from "@/accounts/pages/login"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/passkeys/finish.tsx b/web/apps/auth/src/pages/passkeys/finish.tsx index 17f8e47eb4..e75df9677b 100644 --- a/web/apps/auth/src/pages/passkeys/finish.tsx +++ b/web/apps/auth/src/pages/passkeys/finish.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/passkeys/finish"; +import Page_ from "@/accounts/pages/passkeys/finish"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/passkeys/recover.tsx b/web/apps/auth/src/pages/passkeys/recover.tsx index 5bc2230c87..d7ac1c30df 100644 --- a/web/apps/auth/src/pages/passkeys/recover.tsx +++ b/web/apps/auth/src/pages/passkeys/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/recover"; +import Page_ from "@/accounts/pages/two-factor/recover"; import { useAppContext } from "../_app"; const Page = () => ( diff --git a/web/apps/auth/src/pages/recover.tsx b/web/apps/auth/src/pages/recover.tsx index d825729e5e..3fb3866a8a 100644 --- a/web/apps/auth/src/pages/recover.tsx +++ b/web/apps/auth/src/pages/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/recover"; +import Page_ from "@/accounts/pages/recover"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/signup.tsx b/web/apps/auth/src/pages/signup.tsx index 403d3e7357..37386b9b4e 100644 --- a/web/apps/auth/src/pages/signup.tsx +++ b/web/apps/auth/src/pages/signup.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/signup"; +import Page_ from "@/accounts/pages/signup"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/two-factor/recover.tsx b/web/apps/auth/src/pages/two-factor/recover.tsx index 61414077e5..1c36e691ec 100644 --- a/web/apps/auth/src/pages/two-factor/recover.tsx +++ b/web/apps/auth/src/pages/two-factor/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/recover"; +import Page_ from "@/accounts/pages/two-factor/recover"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/two-factor/setup.tsx b/web/apps/auth/src/pages/two-factor/setup.tsx index 12716e2dfb..404fbb271a 100644 --- a/web/apps/auth/src/pages/two-factor/setup.tsx +++ b/web/apps/auth/src/pages/two-factor/setup.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/setup"; +import Page_ from "@/accounts/pages/two-factor/setup"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/two-factor/verify.tsx b/web/apps/auth/src/pages/two-factor/verify.tsx index 7c682b1b99..b6fc679f8c 100644 --- a/web/apps/auth/src/pages/two-factor/verify.tsx +++ b/web/apps/auth/src/pages/two-factor/verify.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/verify"; +import Page_ from "@/accounts/pages/two-factor/verify"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/auth/src/pages/verify.tsx b/web/apps/auth/src/pages/verify.tsx index bb2dc87788..64aeb883a9 100644 --- a/web/apps/auth/src/pages/verify.tsx +++ b/web/apps/auth/src/pages/verify.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/verify"; +import Page_ from "@/accounts/pages/verify"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/cast/package.json b/web/apps/cast/package.json index 4f774662ad..583eea41ce 100644 --- a/web/apps/cast/package.json +++ b/web/apps/cast/package.json @@ -3,9 +3,9 @@ "version": "0.0.0", "private": true, "dependencies": { + "@/accounts": "*", "@/media": "*", "@/next": "*", - "@ente/accounts": "*", "@ente/eslint-config": "*", "@ente/shared": "*" }, diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json index 2945bee60f..fb656537f3 100644 --- a/web/apps/photos/package.json +++ b/web/apps/photos/package.json @@ -3,11 +3,11 @@ "version": "0.0.0", "private": true, "dependencies": { + "@/accounts": "*", "@/media": "*", "@/new": "*", "@/next": "*", "@date-io/date-fns": "^2.14.0", - "@ente/accounts": "*", "@ente/eslint-config": "*", "@ente/shared": "*", "@mui/x-date-pickers": "^5.0.0-alpha.6", diff --git a/web/apps/photos/src/components/AuthenticateUserModal.tsx b/web/apps/photos/src/components/AuthenticateUserModal.tsx index 592291b310..de25ad676b 100644 --- a/web/apps/photos/src/components/AuthenticateUserModal.tsx +++ b/web/apps/photos/src/components/AuthenticateUserModal.tsx @@ -1,5 +1,5 @@ +import { checkSessionValidity } from "@/accounts/services/session"; import log from "@/next/log"; -import { checkSessionValidity } from "@ente/accounts/services/session"; import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import VerifyMasterPasswordForm, { diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index d9ee7fe6ca..1dedaf6a79 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -1,7 +1,7 @@ +import { openAccountsManagePasskeysPage } from "@/accounts/services/passkey"; import log from "@/next/log"; import { savedLogs } from "@/next/log-web"; import { customAPIHost } from "@/next/origins"; -import { openAccountsManagePasskeysPage } from "@ente/accounts/services/passkey"; import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import { EnteLogo } from "@ente/shared/components/EnteLogo"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; diff --git a/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx index 592dc30f95..f393ddb505 100644 --- a/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx +++ b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx @@ -1,7 +1,7 @@ import { t } from "i18next"; import { useContext } from "react"; -import { disableTwoFactor } from "@ente/accounts/api/user"; +import { disableTwoFactor } from "@/accounts/api/user"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; import { LS_KEYS, getData, setLSUser } from "@ente/shared/storage/localStorage"; import { Button, Grid } from "@mui/material"; diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 9622aad32e..9c2f75c514 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,3 +1,4 @@ +import type { AccountsContextT } from "@/accounts/types/context"; import DownloadManager from "@/new/photos/services/download"; import { isFaceIndexingEnabled, @@ -14,7 +15,6 @@ import { } from "@/next/log-web"; import { AppUpdate } from "@/next/types/ipc"; import { ensure } from "@/utils/ensure"; -import type { AccountsContextT } from "@ente/accounts/types/context"; import { Overlay } from "@ente/shared/components/Container"; import DialogBox from "@ente/shared/components/DialogBox"; import { diff --git a/web/apps/photos/src/pages/change-email.tsx b/web/apps/photos/src/pages/change-email.tsx index 89a765fbf9..cef4716203 100644 --- a/web/apps/photos/src/pages/change-email.tsx +++ b/web/apps/photos/src/pages/change-email.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/change-email"; +import Page_ from "@/accounts/pages/change-email"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/change-password.tsx b/web/apps/photos/src/pages/change-password.tsx index ed82edd92c..2232edc6bc 100644 --- a/web/apps/photos/src/pages/change-password.tsx +++ b/web/apps/photos/src/pages/change-password.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/change-password"; +import Page_ from "@/accounts/pages/change-password"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/credentials.tsx b/web/apps/photos/src/pages/credentials.tsx index 070aace4a1..fa3cc8fad6 100644 --- a/web/apps/photos/src/pages/credentials.tsx +++ b/web/apps/photos/src/pages/credentials.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/credentials"; +import Page_ from "@/accounts/pages/credentials"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/generate.tsx b/web/apps/photos/src/pages/generate.tsx index c6804255af..a82d0a46f3 100644 --- a/web/apps/photos/src/pages/generate.tsx +++ b/web/apps/photos/src/pages/generate.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/generate"; +import Page_ from "@/accounts/pages/generate"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index 3cef94767e..f5e7817bc6 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -1,8 +1,8 @@ +import { Login } from "@/accounts/components/Login"; +import { SignUp } from "@/accounts/components/SignUp"; import { DevSettings } from "@/new/photos/components/DevSettings"; import log from "@/next/log"; import { albumsAppOrigin, customAPIHost } from "@/next/origins"; -import { Login } from "@ente/accounts/components/Login"; -import { SignUp } from "@ente/accounts/components/SignUp"; import { EnteLogo } from "@ente/shared/components/EnteLogo"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; diff --git a/web/apps/photos/src/pages/login.tsx b/web/apps/photos/src/pages/login.tsx index 1a7de0497f..a61718a309 100644 --- a/web/apps/photos/src/pages/login.tsx +++ b/web/apps/photos/src/pages/login.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/login"; +import Page_ from "@/accounts/pages/login"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/passkeys/finish.tsx b/web/apps/photos/src/pages/passkeys/finish.tsx index 17f8e47eb4..e75df9677b 100644 --- a/web/apps/photos/src/pages/passkeys/finish.tsx +++ b/web/apps/photos/src/pages/passkeys/finish.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/passkeys/finish"; +import Page_ from "@/accounts/pages/passkeys/finish"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/passkeys/recover.tsx b/web/apps/photos/src/pages/passkeys/recover.tsx index 5bc2230c87..d7ac1c30df 100644 --- a/web/apps/photos/src/pages/passkeys/recover.tsx +++ b/web/apps/photos/src/pages/passkeys/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/recover"; +import Page_ from "@/accounts/pages/two-factor/recover"; import { useAppContext } from "../_app"; const Page = () => ( diff --git a/web/apps/photos/src/pages/recover.tsx b/web/apps/photos/src/pages/recover.tsx index d825729e5e..3fb3866a8a 100644 --- a/web/apps/photos/src/pages/recover.tsx +++ b/web/apps/photos/src/pages/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/recover"; +import Page_ from "@/accounts/pages/recover"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/signup.tsx b/web/apps/photos/src/pages/signup.tsx index 403d3e7357..37386b9b4e 100644 --- a/web/apps/photos/src/pages/signup.tsx +++ b/web/apps/photos/src/pages/signup.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/signup"; +import Page_ from "@/accounts/pages/signup"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/two-factor/recover.tsx b/web/apps/photos/src/pages/two-factor/recover.tsx index 61414077e5..1c36e691ec 100644 --- a/web/apps/photos/src/pages/two-factor/recover.tsx +++ b/web/apps/photos/src/pages/two-factor/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/recover"; +import Page_ from "@/accounts/pages/two-factor/recover"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/two-factor/setup.tsx b/web/apps/photos/src/pages/two-factor/setup.tsx index 12716e2dfb..404fbb271a 100644 --- a/web/apps/photos/src/pages/two-factor/setup.tsx +++ b/web/apps/photos/src/pages/two-factor/setup.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/setup"; +import Page_ from "@/accounts/pages/two-factor/setup"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/two-factor/verify.tsx b/web/apps/photos/src/pages/two-factor/verify.tsx index 7c682b1b99..b6fc679f8c 100644 --- a/web/apps/photos/src/pages/two-factor/verify.tsx +++ b/web/apps/photos/src/pages/two-factor/verify.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/two-factor/verify"; +import Page_ from "@/accounts/pages/two-factor/verify"; import { useAppContext } from "../_app"; const Page = () => ; diff --git a/web/apps/photos/src/pages/verify.tsx b/web/apps/photos/src/pages/verify.tsx index bb2dc87788..64aeb883a9 100644 --- a/web/apps/photos/src/pages/verify.tsx +++ b/web/apps/photos/src/pages/verify.tsx @@ -1,4 +1,4 @@ -import Page_ from "@ente/accounts/pages/verify"; +import Page_ from "@/accounts/pages/verify"; import { useAppContext } from "./_app"; const Page = () => ; diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 78720b4380..6b0c9c9f88 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,10 +1,10 @@ +import { accountLogout } from "@/accounts/services/logout"; import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import { terminateMLWorker } from "@/new/photos/services/ml"; import { clearFaceDB } from "@/new/photos/services/ml/db"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; -import { accountLogout } from "@ente/accounts/services/logout"; import { clipService } from "services/clip-service"; import exportService from "./export"; diff --git a/web/apps/photos/src/services/userService.ts b/web/apps/photos/src/services/userService.ts index 03c6ced55e..11da7b07c8 100644 --- a/web/apps/photos/src/services/userService.ts +++ b/web/apps/photos/src/services/userService.ts @@ -1,6 +1,6 @@ +import { putAttributes } from "@/accounts/api/user"; import log from "@/next/log"; import { apiURL, customAPIOrigin, familyAppOrigin } from "@/next/origins"; -import { putAttributes } from "@ente/accounts/api/user"; import { ApiError } from "@ente/shared/error"; import HTTPService from "@ente/shared/network/HTTPService"; import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; diff --git a/web/packages/accounts/README.md b/web/packages/accounts/README.md index 3c4bcfddc6..0125d558e3 100644 --- a/web/packages/accounts/README.md +++ b/web/packages/accounts/README.md @@ -1,4 +1,4 @@ -## @ente/accounts +## @/accounts A package for sharing the pages involved in the signup/login flow. diff --git a/web/packages/accounts/api/srp.ts b/web/packages/accounts/api/srp.ts index f6c773d9cc..8c6496eae8 100644 --- a/web/packages/accounts/api/srp.ts +++ b/web/packages/accounts/api/srp.ts @@ -1,5 +1,8 @@ import log from "@/next/log"; import { apiURL } from "@/next/origins"; +import { ApiError, CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { HttpStatusCode } from "axios"; import type { CompleteSRPSetupRequest, CompleteSRPSetupResponse, @@ -11,10 +14,7 @@ import type { SetupSRPResponse, UpdateSRPAndKeysRequest, UpdateSRPAndKeysResponse, -} from "@ente/accounts/types/srp"; -import { ApiError, CustomError } from "@ente/shared/error"; -import HTTPService from "@ente/shared/network/HTTPService"; -import { HttpStatusCode } from "axios"; +} from "../types/srp"; export const getSRPAttributes = async ( email: string, diff --git a/web/packages/accounts/api/user.ts b/web/packages/accounts/api/user.ts index 7b2bb56f6f..f77e14480d 100644 --- a/web/packages/accounts/api/user.ts +++ b/web/packages/accounts/api/user.ts @@ -1,12 +1,12 @@ -import { appName } from "@/next/app"; -import { apiURL } from "@/next/origins"; import type { RecoveryKey, TwoFactorRecoveryResponse, TwoFactorSecret, TwoFactorVerificationResponse, UserVerificationResponse, -} from "@ente/accounts/types/user"; +} from "@/accounts/types/user"; +import { appName } from "@/next/app"; +import { apiURL } from "@/next/origins"; import type { B64EncryptionResult } from "@ente/shared/crypto/internal/libsodium"; import { ApiError, CustomError } from "@ente/shared/error"; import HTTPService from "@ente/shared/network/HTTPService"; diff --git a/web/packages/accounts/components/PasswordStrength.tsx b/web/packages/accounts/components/PasswordStrength.tsx index 1a80a3baf0..a5ee4c5fff 100644 --- a/web/packages/accounts/components/PasswordStrength.tsx +++ b/web/packages/accounts/components/PasswordStrength.tsx @@ -1,4 +1,4 @@ -import { estimatePasswordStrength } from "@ente/accounts/utils"; +import { estimatePasswordStrength } from "@/accounts/utils"; import { FlexWrapper } from "@ente/shared/components/Container"; import { Typography } from "@mui/material"; import { t } from "i18next"; diff --git a/web/packages/accounts/components/SetPasswordForm.tsx b/web/packages/accounts/components/SetPasswordForm.tsx index 377457514c..9de5d2c770 100644 --- a/web/packages/accounts/components/SetPasswordForm.tsx +++ b/web/packages/accounts/components/SetPasswordForm.tsx @@ -1,4 +1,4 @@ -import { isWeakPassword } from "@ente/accounts/utils"; +import { isWeakPassword } from "@/accounts/utils"; import ShowHidePassword from "@ente/shared/components/Form/ShowHidePassword"; import SubmitButton from "@ente/shared/components/SubmitButton"; import { Box, Input, TextField, Typography } from "@mui/material"; diff --git a/web/packages/accounts/components/SignUp.tsx b/web/packages/accounts/components/SignUp.tsx index 9c35ec3590..f485032579 100644 --- a/web/packages/accounts/components/SignUp.tsx +++ b/web/packages/accounts/components/SignUp.tsx @@ -1,9 +1,9 @@ +import { sendOtt } from "@/accounts/api/user"; +import { PasswordStrengthHint } from "@/accounts/components/PasswordStrength"; +import { PAGES } from "@/accounts/constants/pages"; +import { isWeakPassword } from "@/accounts/utils"; +import { generateKeyAndSRPAttributes } from "@/accounts/utils/srp"; import log from "@/next/log"; -import { sendOtt } from "@ente/accounts/api/user"; -import { PasswordStrengthHint } from "@ente/accounts/components/PasswordStrength"; -import { PAGES } from "@ente/accounts/constants/pages"; -import { isWeakPassword } from "@ente/accounts/utils"; -import { generateKeyAndSRPAttributes } from "@ente/accounts/utils/srp"; import { LS_KEYS, setLSUser } from "@ente/shared//storage/localStorage"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; diff --git a/web/packages/accounts/components/two-factor/VerifyForm.tsx b/web/packages/accounts/components/two-factor/VerifyForm.tsx index c89d9702ad..14fe89c58c 100644 --- a/web/packages/accounts/components/two-factor/VerifyForm.tsx +++ b/web/packages/accounts/components/two-factor/VerifyForm.tsx @@ -1,5 +1,5 @@ +import InvalidInputMessage from "@/accounts/components/two-factor/InvalidInputMessage"; import { wait } from "@/utils/promise"; -import InvalidInputMessage from "@ente/accounts/components/two-factor/InvalidInputMessage"; import { CenteredFlex, VerticallyCentered, diff --git a/web/packages/accounts/components/two-factor/setup/ManualMode.tsx b/web/packages/accounts/components/two-factor/setup/ManualMode.tsx index c66af2cde4..f30faae76f 100644 --- a/web/packages/accounts/components/two-factor/setup/ManualMode.tsx +++ b/web/packages/accounts/components/two-factor/setup/ManualMode.tsx @@ -1,4 +1,4 @@ -import type { TwoFactorSecret } from "@ente/accounts/types/user"; +import type { TwoFactorSecret } from "@/accounts/types/user"; import CodeBlock from "@ente/shared/components/CodeBlock"; import { Typography } from "@mui/material"; import { t } from "i18next"; diff --git a/web/packages/accounts/components/two-factor/setup/QRMode.tsx b/web/packages/accounts/components/two-factor/setup/QRMode.tsx index 586507eeb1..04cf2cb876 100644 --- a/web/packages/accounts/components/two-factor/setup/QRMode.tsx +++ b/web/packages/accounts/components/two-factor/setup/QRMode.tsx @@ -1,4 +1,4 @@ -import type { TwoFactorSecret } from "@ente/accounts/types/user"; +import type { TwoFactorSecret } from "@/accounts/types/user"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { t } from "i18next"; diff --git a/web/packages/accounts/components/two-factor/setup/index.tsx b/web/packages/accounts/components/two-factor/setup/index.tsx index d26e94cb70..e5716abc62 100644 --- a/web/packages/accounts/components/two-factor/setup/index.tsx +++ b/web/packages/accounts/components/two-factor/setup/index.tsx @@ -1,7 +1,7 @@ -import SetupManualMode from "@ente/accounts/components/two-factor/setup/ManualMode"; -import SetupQRMode from "@ente/accounts/components/two-factor/setup/QRMode"; -import { SetupMode } from "@ente/accounts/pages/two-factor/setup"; -import type { TwoFactorSecret } from "@ente/accounts/types/user"; +import SetupManualMode from "@/accounts/components/two-factor/setup/ManualMode"; +import SetupQRMode from "@/accounts/components/two-factor/setup/QRMode"; +import { SetupMode } from "@/accounts/pages/two-factor/setup"; +import type { TwoFactorSecret } from "@/accounts/types/user"; import { VerticallyCentered } from "@ente/shared/components/Container"; import { useState } from "react"; diff --git a/web/packages/accounts/package.json b/web/packages/accounts/package.json index b26c365db0..d121d5b8fd 100644 --- a/web/packages/accounts/package.json +++ b/web/packages/accounts/package.json @@ -1,11 +1,10 @@ { - "name": "@ente/accounts", + "name": "@/accounts", "version": "0.0.0", "private": true, "dependencies": { "@/next": "*", "@ente/eslint-config": "*", "@ente/shared": "*" - }, - "devDependencies": {} + } } diff --git a/web/packages/accounts/pages/change-email.tsx b/web/packages/accounts/pages/change-email.tsx index d8de35bef7..65c1417b7d 100644 --- a/web/packages/accounts/pages/change-email.tsx +++ b/web/packages/accounts/pages/change-email.tsx @@ -1,7 +1,7 @@ +import { changeEmail, sendOTTForEmailChange } from "@/accounts/api/user"; +import { PAGES } from "@/accounts/constants/pages"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; -import { changeEmail, sendOTTForEmailChange } from "@ente/accounts/api/user"; -import { PAGES } from "@ente/accounts/constants/pages"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; diff --git a/web/packages/accounts/pages/change-password.tsx b/web/packages/accounts/pages/change-password.tsx index 2a28be7fce..ba48045adb 100644 --- a/web/packages/accounts/pages/change-password.tsx +++ b/web/packages/accounts/pages/change-password.tsx @@ -1,22 +1,19 @@ -import { ensure } from "@/utils/ensure"; import { getSRPAttributes, startSRPSetup, updateSRPAndKeys, -} from "@ente/accounts/api/srp"; +} from "@/accounts/api/srp"; import SetPasswordForm, { type SetPasswordFormProps, -} from "@ente/accounts/components/SetPasswordForm"; -import { PAGES } from "@ente/accounts/constants/pages"; +} from "@/accounts/components/SetPasswordForm"; +import { PAGES } from "@/accounts/constants/pages"; import { generateSRPClient, generateSRPSetupAttributes, -} from "@ente/accounts/services/srp"; -import type { UpdatedKey } from "@ente/accounts/types/user"; -import { - convertBase64ToBuffer, - convertBufferToBase64, -} from "@ente/accounts/utils"; +} from "@/accounts/services/srp"; +import type { UpdatedKey } from "@/accounts/types/user"; +import { convertBase64ToBuffer, convertBufferToBase64 } from "@/accounts/utils"; +import { ensure } from "@/utils/ensure"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; diff --git a/web/packages/accounts/pages/generate.tsx b/web/packages/accounts/pages/generate.tsx index c5e1ef7e62..3f224bc893 100644 --- a/web/packages/accounts/pages/generate.tsx +++ b/web/packages/accounts/pages/generate.tsx @@ -1,12 +1,12 @@ -import log from "@/next/log"; -import { ensure } from "@/utils/ensure"; -import { putAttributes } from "@ente/accounts/api/user"; +import { putAttributes } from "@/accounts/api/user"; import SetPasswordForm, { type SetPasswordFormProps, -} from "@ente/accounts/components/SetPasswordForm"; -import { PAGES } from "@ente/accounts/constants/pages"; -import { configureSRP } from "@ente/accounts/services/srp"; -import { generateKeyAndSRPAttributes } from "@ente/accounts/utils/srp"; +} from "@/accounts/components/SetPasswordForm"; +import { PAGES } from "@/accounts/constants/pages"; +import { configureSRP } from "@/accounts/services/srp"; +import { generateKeyAndSRPAttributes } from "@/accounts/utils/srp"; +import log from "@/next/log"; +import { ensure } from "@/utils/ensure"; import { VerticallyCentered } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import FormPaper from "@ente/shared/components/Form/FormPaper"; diff --git a/web/packages/accounts/pages/recover.tsx b/web/packages/accounts/pages/recover.tsx index 19b8499290..1c95249d20 100644 --- a/web/packages/accounts/pages/recover.tsx +++ b/web/packages/accounts/pages/recover.tsx @@ -1,7 +1,7 @@ +import { sendOtt } from "@/accounts/api/user"; +import { PAGES } from "@/accounts/constants/pages"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; -import { sendOtt } from "@ente/accounts/api/user"; -import { PAGES } from "@ente/accounts/constants/pages"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; diff --git a/web/packages/accounts/pages/signup.tsx b/web/packages/accounts/pages/signup.tsx index 09efff25bf..fe95875b1f 100644 --- a/web/packages/accounts/pages/signup.tsx +++ b/web/packages/accounts/pages/signup.tsx @@ -1,5 +1,5 @@ +import { PAGES } from "@/accounts/constants/pages"; import { customAPIHost } from "@/next/origins"; -import { PAGES } from "@ente/accounts/constants/pages"; import { LS_KEYS, getData } from "@ente/shared//storage/localStorage"; import { VerticallyCentered } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index 030281dcb0..61bf37f745 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -1,12 +1,12 @@ -import log from "@/next/log"; -import { ensure } from "@/utils/ensure"; import { recoverTwoFactor, removeTwoFactor, type TwoFactorType, -} from "@ente/accounts/api/user"; -import { PAGES } from "@ente/accounts/constants/pages"; -import type { AccountsContextT } from "@ente/accounts/types/context"; +} from "@/accounts/api/user"; +import { PAGES } from "@/accounts/constants/pages"; +import type { AccountsContextT } from "@/accounts/types/context"; +import log from "@/next/log"; +import { ensure } from "@/utils/ensure"; import { VerticallyCentered } from "@ente/shared/components/Container"; import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; import FormPaper from "@ente/shared/components/Form/FormPaper"; diff --git a/web/packages/accounts/pages/two-factor/setup.tsx b/web/packages/accounts/pages/two-factor/setup.tsx index 3bcb66f17b..6fbe83bba8 100644 --- a/web/packages/accounts/pages/two-factor/setup.tsx +++ b/web/packages/accounts/pages/two-factor/setup.tsx @@ -1,11 +1,11 @@ -import log from "@/next/log"; -import { ensure } from "@/utils/ensure"; -import { enableTwoFactor, setupTwoFactor } from "@ente/accounts/api/user"; +import { enableTwoFactor, setupTwoFactor } from "@/accounts/api/user"; import VerifyTwoFactor, { type VerifyTwoFactorCallback, -} from "@ente/accounts/components/two-factor/VerifyForm"; -import { TwoFactorSetup } from "@ente/accounts/components/two-factor/setup"; -import type { TwoFactorSecret } from "@ente/accounts/types/user"; +} from "@/accounts/components/two-factor/VerifyForm"; +import { TwoFactorSetup } from "@/accounts/components/two-factor/setup"; +import type { TwoFactorSecret } from "@/accounts/types/user"; +import log from "@/next/log"; +import { ensure } from "@/utils/ensure"; import { VerticallyCentered } from "@ente/shared/components/Container"; import LinkButton from "@ente/shared/components/LinkButton"; import { encryptWithRecoveryKey } from "@ente/shared/crypto/helpers"; diff --git a/web/packages/accounts/pages/two-factor/verify.tsx b/web/packages/accounts/pages/two-factor/verify.tsx index b476926e5b..d8897045df 100644 --- a/web/packages/accounts/pages/two-factor/verify.tsx +++ b/web/packages/accounts/pages/two-factor/verify.tsx @@ -1,9 +1,9 @@ -import { ensure } from "@/utils/ensure"; -import { verifyTwoFactor } from "@ente/accounts/api/user"; +import { verifyTwoFactor } from "@/accounts/api/user"; import VerifyTwoFactor, { type VerifyTwoFactorCallback, -} from "@ente/accounts/components/two-factor/VerifyForm"; -import { PAGES } from "@ente/accounts/constants/pages"; +} from "@/accounts/components/two-factor/VerifyForm"; +import { PAGES } from "@/accounts/constants/pages"; +import { ensure } from "@/utils/ensure"; import { VerticallyCentered } from "@ente/shared/components/Container"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 5cdd5ffab7..9c39cad264 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -1,5 +1,5 @@ +import type { UserVerificationResponse } from "@/accounts/types/user"; import { ensure } from "@/utils/ensure"; -import type { UserVerificationResponse } from "@ente/accounts/types/user"; import { VerticallyCentered } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import FormPaper from "@ente/shared/components/Form/FormPaper"; diff --git a/web/packages/accounts/services/srp.ts b/web/packages/accounts/services/srp.ts index b7f996d6b9..f453757444 100644 --- a/web/packages/accounts/services/srp.ts +++ b/web/packages/accounts/services/srp.ts @@ -1,5 +1,5 @@ +import type { UserVerificationResponse } from "@/accounts/types/user"; import log from "@/next/log"; -import type { UserVerificationResponse } from "@ente/accounts/types/user"; import ComlinkCryptoWorker from "@ente/shared/crypto"; import { generateLoginSubKey } from "@ente/shared/crypto/helpers"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; diff --git a/web/packages/accounts/types/page.ts b/web/packages/accounts/types/page.ts index c1c5d54548..92a5096562 100644 --- a/web/packages/accounts/types/page.ts +++ b/web/packages/accounts/types/page.ts @@ -1,4 +1,4 @@ -import type { AccountsContextT } from "@ente/accounts/types/context"; +import type { AccountsContextT } from "./context"; /** * The default type for pages exposed by this package. diff --git a/web/packages/accounts/types/srp.ts b/web/packages/accounts/types/srp.ts index 136985e3f7..aa78389204 100644 --- a/web/packages/accounts/types/srp.ts +++ b/web/packages/accounts/types/srp.ts @@ -1,7 +1,4 @@ -import type { - UpdatedKey, - UserVerificationResponse, -} from "@ente/accounts/types/user"; +import type { UpdatedKey, UserVerificationResponse } from "./user"; export interface SRPAttributes { srpUserID: string; diff --git a/web/packages/shared/components/LoginComponents.tsx b/web/packages/shared/components/LoginComponents.tsx index c3ea97d1f7..478aea9db7 100644 --- a/web/packages/shared/components/LoginComponents.tsx +++ b/web/packages/shared/components/LoginComponents.tsx @@ -1,10 +1,10 @@ -import log from "@/next/log"; -import { customAPIHost } from "@/next/origins"; import { checkPasskeyVerificationStatus, passkeySessionExpiredErrorMessage, saveCredentialsAndNavigateTo, -} from "@ente/accounts/services/passkey"; +} from "@/accounts/services/passkey"; +import log from "@/next/log"; +import { customAPIHost } from "@/next/origins"; import EnteButton from "@ente/shared/components/EnteButton"; import { CircularProgress, Stack, Typography, styled } from "@mui/material"; import { t } from "i18next"; diff --git a/web/packages/shared/components/VerifyMasterPasswordForm.tsx b/web/packages/shared/components/VerifyMasterPasswordForm.tsx index b1ec1bbf44..5d9300818e 100644 --- a/web/packages/shared/components/VerifyMasterPasswordForm.tsx +++ b/web/packages/shared/components/VerifyMasterPasswordForm.tsx @@ -1,5 +1,5 @@ +import type { SRPAttributes } from "@/accounts/types/srp"; import log from "@/next/log"; -import type { SRPAttributes } from "@ente/accounts/types/srp"; import { Input, type ButtonProps } from "@mui/material"; import { t } from "i18next"; import SingleInputForm, { diff --git a/web/packages/shared/crypto/helpers.ts b/web/packages/shared/crypto/helpers.ts index 240e7c1d9b..4168abb7f6 100644 --- a/web/packages/shared/crypto/helpers.ts +++ b/web/packages/shared/crypto/helpers.ts @@ -1,5 +1,5 @@ +import { setRecoveryKey } from "@/accounts/api/user"; import log from "@/next/log"; -import { setRecoveryKey } from "@ente/accounts/api/user"; import { LS_KEYS, getData, diff --git a/web/packages/shared/next/pages/404.tsx b/web/packages/shared/next/pages/404.tsx index 8e6e06cfa3..2118350f4f 100644 --- a/web/packages/shared/next/pages/404.tsx +++ b/web/packages/shared/next/pages/404.tsx @@ -1,4 +1,4 @@ -import { PAGES } from "@ente/accounts/constants/pages"; +import { PAGES } from "@/accounts/constants/pages"; import { useRouter } from "next/router"; import { useEffect } from "react"; diff --git a/web/tsconfig.base.json b/web/tsconfig.base.json index cf4757137b..d38c99560f 100644 --- a/web/tsconfig.base.json +++ b/web/tsconfig.base.json @@ -22,8 +22,7 @@ "target": "es2021", "paths": { "@ente/eslint-config/*": ["./packages/eslint-config/*"], - "@ente/shared/*": ["./packages/shared/*"], - "@ente/accounts/*": ["./packages/accounts/*"] + "@ente/shared/*": ["./packages/shared/*"] } }, "exclude": ["**/node_modules", "**/.*/"] From 08a23d87334c5dc7f284fe89bc39cc681f645320 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 10:22:11 +0530 Subject: [PATCH 202/466] Sketch --- web/packages/new/photos/services/ml/worker.ts | 84 ++++++++++++++++++- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 3fe960773a..a854bfa6e3 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -6,6 +6,25 @@ import log from "@/next/log"; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; +import { wait } from "@/utils/promise"; + +/** + * The MLWorker state machine. + * + * ext. event state then state + * ------------- --------------- -------------- + * sync -> "pull" -> "idle" + * upload -> "liveq" -> "idle" + * idleTimeout -> "backfillq" -> "idle" + * + * where + * + * - "pull": pulling embeddings from remote + * - "liveq": indexing items that are being uploaded + * - "backfillq": indexing unindexed items otherwise + * - "idle": in between state transitions + */ +type MLWorkerState = "idle" | "pull" | "liveq" | "backfillq"; /** * Run operations related to machine learning (e.g. indexing) in a Web Worker. @@ -15,16 +34,73 @@ import { indexFaces } from "./index-face"; * tasks that might degrade interactivity. */ export class MLWorker { + private state: MLWorkerState = "idle"; private isSyncing = false; + private shouldSync = false; + private liveQ: EnteFile[] = []; + private idleTimeout: ReturnType | undefined; /** * Pull embeddings from remote, and start backfilling if needed. + * + * This function enqueues the pull and returns immediately without waiting + * for the pull to complete. */ - async sync() { - if (this.isSyncing) return; - this.isSyncing = true; + sync() { + this.shouldSync = true; + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = undefined; + this.tick(); + } else { + // this.tick will get run when the current task finishes. + } + } + + private tick() { + // Schedule a new macrotask (by using setTimeout) instead of scheduling + // a new microtask (by directly resolving the promise). This is likely + // unnecessary; I'm doing this as a partially out of superstition aiming + // to to give GC a chance to run if needed and generally ease execution + // / memory pressure. + const next = () => setTimeout(() => this.tick(), 0); + + // If we've been asked to sync, do that irrespective of anything else. + if (this.shouldSync) { + this.shouldSync = false; + this.state = "pull"; + void this.pull().then(next); + return; + } + + // Otherwise see if there is something in the live queue. + if (this.liveQ.length > 0) { + this.state = "liveq"; + void this.liveq().then(next); + return; + } + + // // Otherwise check to see if there is something to backfill. + // const { indexableCount } = await indexedAndIndexableCounts(); + // if (indexableCount > 0) { + // this.state = "backfillq"; + // void this.liveq().then(() => this.tick()); + // return; + // } + + // if (this.isSyncing) return; + // this.isSyncing = true; + // this.isSyncing = false; + // void this.next(); + } + + async pull() { await pullFaceEmbeddings(); - this.isSyncing = false; + } + + async liveq() { + console.log("liveq"); + await wait(0); } } From 5948714afffb1ca8f0575a2cb8e8467b4e86f16a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 10:41:14 +0530 Subject: [PATCH 203/466] S2 --- web/packages/new/photos/services/ml/worker.ts | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index a854bfa6e3..41067db86e 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,12 +1,16 @@ -import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; +import { + indexedAndIndexableCounts, + markIndexingFailed, + saveFaceIndex, +} from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; // import { expose } from "comlink"; +import { wait } from "@/utils/promise"; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; -import { wait } from "@/utils/promise"; /** * The MLWorker state machine. @@ -26,6 +30,9 @@ import { wait } from "@/utils/promise"; */ type MLWorkerState = "idle" | "pull" | "liveq" | "backfillq"; +const idleDurationStart = 5; /* 5 seconds */ +const idleDurationMax = 16 * 60; /* 16 minutes */ + /** * Run operations related to machine learning (e.g. indexing) in a Web Worker. * @@ -39,6 +46,7 @@ export class MLWorker { private shouldSync = false; private liveQ: EnteFile[] = []; private idleTimeout: ReturnType | undefined; + private idleDuration = idleDurationStart; /* unit: seconds */ /** * Pull embeddings from remote, and start backfilling if needed. @@ -48,27 +56,32 @@ export class MLWorker { */ sync() { this.shouldSync = true; + this.wakeUp(); + } + + private wakeUp() { if (this.idleTimeout) { clearTimeout(this.idleTimeout); this.idleTimeout = undefined; - this.tick(); + void this.tick(); } else { // this.tick will get run when the current task finishes. } } - private tick() { + private async tick() { // Schedule a new macrotask (by using setTimeout) instead of scheduling // a new microtask (by directly resolving the promise). This is likely // unnecessary; I'm doing this as a partially out of superstition aiming - // to to give GC a chance to run if needed and generally ease execution - // / memory pressure. + // to to give GC a chance to run if needed, and generally ease execution + // and memory pressure. const next = () => setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; this.state = "pull"; + this.idleDuration = idleDurationStart; void this.pull().then(next); return; } @@ -76,22 +89,26 @@ export class MLWorker { // Otherwise see if there is something in the live queue. if (this.liveQ.length > 0) { this.state = "liveq"; + this.idleDuration = idleDurationStart; void this.liveq().then(next); return; } - // // Otherwise check to see if there is something to backfill. - // const { indexableCount } = await indexedAndIndexableCounts(); - // if (indexableCount > 0) { - // this.state = "backfillq"; - // void this.liveq().then(() => this.tick()); - // return; - // } - - // if (this.isSyncing) return; - // this.isSyncing = true; - // this.isSyncing = false; - // void this.next(); + // Otherwise check to see if there is something to backfill. + const { indexableCount } = await indexedAndIndexableCounts(); + if (indexableCount > 0) { + this.state = "backfillq"; + this.idleDuration = idleDurationStart; + void this.backfillq().then(next); + return; + } + + // Nothing to do. Go to sleep for exponentially longer durations of + // time (limited to some maximum). + + this.state = "idle"; + this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); + this.idleTimeout = setTimeout(next, this.idleDuration * 1000); } async pull() { @@ -102,6 +119,11 @@ export class MLWorker { console.log("liveq"); await wait(0); } + + async backfillq() { + console.log("backfillq"); + await wait(0); + } } // TODO-ML: Temorarily disable From 9e69798d793d649206fc0f923b992aa6a8b21279 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:02:00 +0530 Subject: [PATCH 204/466] In memory flag --- web/apps/photos/src/pages/_app.tsx | 2 ++ web/apps/photos/src/services/logout.ts | 7 ++--- web/packages/new/photos/services/ml/index.ts | 31 +++++++++++++++++++ web/packages/new/photos/services/ml/worker.ts | 6 ++-- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 9c2f75c514..f01a540f85 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,6 +1,7 @@ import type { AccountsContextT } from "@/accounts/types/context"; import DownloadManager from "@/new/photos/services/download"; import { + initML, isFaceIndexingEnabled, setIsFaceIndexingEnabled, } from "@/new/photos/services/ml"; @@ -199,6 +200,7 @@ export default function App({ Component, pageProps }: AppProps) { const enabled = isFaceIndexingEnabled(); setMlSearchEnabled(enabled); mlWorkManager.setMlSearchEnabled(enabled); + initML(); } catch (e) { log.error("Error while loading mlSearchEnabled", e); } diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 6b0c9c9f88..99bed49ba9 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -1,8 +1,7 @@ import { accountLogout } from "@/accounts/services/logout"; import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; -import { terminateMLWorker } from "@/new/photos/services/ml"; -import { clearFaceDB } from "@/new/photos/services/ml/db"; +import { logoutML, terminateMLWorker } from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; import { clipService } from "services/clip-service"; @@ -65,9 +64,9 @@ export const photosLogout = async () => { } try { - await clearFaceDB(); + await logoutML(); } catch (e) { - ignoreError("face", e); + ignoreError("ML", e); } try { diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 3a8ddebea7..14ad9f73c4 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -11,6 +11,7 @@ import { getLocalTrashedFiles, } from "@/new/photos/services/files"; import { + clearFaceDB, faceIndex, indexableFileIDs, indexedAndIndexableCounts, @@ -21,6 +22,19 @@ import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; import { MLWorker } from "./worker"; +/** + * In-memory flag that tracks if ML is enabled. + * + * - On app start, this is read from local storage in the `initML` function. + * + * - If the user updates their preference, then `setMLEnabled` will get called + * with the updated preference where this value will be updated (in addition + * to updating local storage). + * + * - It is cleared in `logoutML`. + */ +let _isMLEnabled = false; + /** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ let _comlinkWorker: ComlinkWorker | undefined; @@ -48,6 +62,23 @@ export const terminateMLWorker = () => { } }; +/** + * Initialize the ML subsystem if the user has enabled it in preferences. + */ +export const initML = () => { + // TODO-ML: Rename + _isMLEnabled = isFaceIndexingEnabled(); +}; + +export const logoutML = async () => { + // `terminateMLWorker` is conceptually also part of this, but for the + // reasons mentioned in [Note: Caching IDB instances in separate execution + // contexts], it gets called first in the logout sequence, and this this + // `logoutML` gets called at a later point in time. + _isMLEnabled = false; + await clearFaceDB(); +}; + export interface FaceIndexingStatus { /** * Which phase we are in within the indexing pipeline when viewed across the diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 41067db86e..c9e98b8eb8 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -72,9 +72,9 @@ export class MLWorker { private async tick() { // Schedule a new macrotask (by using setTimeout) instead of scheduling // a new microtask (by directly resolving the promise). This is likely - // unnecessary; I'm doing this as a partially out of superstition aiming - // to to give GC a chance to run if needed, and generally ease execution - // and memory pressure. + // unnecessary; I'm doing this partially out of superstition, aiming to + // to give GC a chance to run if needed, and also generally ease + // execution and memory pressure. const next = () => setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. From 206a8a538a1187c5b77f936b617d563ad7236e04 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:12:10 +0530 Subject: [PATCH 205/466] Start using it --- web/apps/photos/src/services/sync.ts | 4 ++-- web/packages/new/photos/services/ml/index.ts | 15 +++++++++++++++ web/packages/new/photos/services/ml/worker.ts | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index dc1699892e..0af6cee42e 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,10 +1,10 @@ import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; +import { triggerMLSync } from "@/new/photos/services/ml"; import { isDesktop } from "@/next/app"; import { clipService } from "services/clip-service"; import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; import { syncMapEnabled } from "services/userService"; -// import { isFaceIndexingEnabled } from "./face/indexer"; /** * Perform a soft "refresh" by making various API calls to fetch state from @@ -21,7 +21,7 @@ export const sync = async () => { fetchAndSaveFeatureFlagsIfNeeded(); if (isDesktop) { await syncCLIPEmbeddings(); - // if (isFaceIndexingEnabled()) await (await faceWorker()).sync(); + triggerMLSync(); void clipService.scheduleImageEmbeddingExtraction(); } }; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 14ad9f73c4..ca957d19c6 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -79,6 +79,21 @@ export const logoutML = async () => { await clearFaceDB(); }; +/** + * Trigger a "sync", whatever that means for the ML subsystem. + * + * This is called during the global sync sequence. If ML is enabled, then we use + * this as a signal to pull embeddings from remote, and start backfilling if + * needed. + * + * This function does not wait for these processes to run to completion, and + * returns immediately. + */ +export const triggerMLSync = () => { + if (!_isMLEnabled) return; + void worker().then((w) => w.sync()); +}; + export interface FaceIndexingStatus { /** * Which phase we are in within the indexing pipeline when viewed across the diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index c9e98b8eb8..5123fc33cc 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -53,6 +53,10 @@ export class MLWorker { * * This function enqueues the pull and returns immediately without waiting * for the pull to complete. + * + * While it only triggers a pull, once the pull is done it also checks for + * pending items to backfill. So it implicitly also triggers a backfill + * (which is why call it a less-precise sync instead of pull). */ sync() { this.shouldSync = true; From c61263f1799d6efdd6f701aa5078fbd001875217 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:34:21 +0530 Subject: [PATCH 206/466] Support nums and bools --- web/packages/next/kv.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/web/packages/next/kv.ts b/web/packages/next/kv.ts index 847968beb0..a74bf872ca 100644 --- a/web/packages/next/kv.ts +++ b/web/packages/next/kv.ts @@ -8,13 +8,13 @@ import log from "./log"; * motivation is to allow these to also be accessed from web workers (local * storage is limited to the main thread). * - * The "kv" database consists of one object store, "kv". Each entry is a string. - * The key is also a string. + * The "kv" database consists of one object store, "kv". Keys are strings. + * Values can be strings or number or booleans. */ interface KVDBSchema extends DBSchema { kv: { key: string; - value: string; + value: string | number | boolean; }; } @@ -99,19 +99,36 @@ export const clearKVDB = async () => { }; /** - * Return the value stored corresponding to {@link key}, or `undefined` if there - * is no such entry. + * Return the string value stored corresponding to {@link key}, or `undefined` + * if there is no such entry. */ -export const getKV = async (key: string) => { +export const getKV = async (key: string) => _getKV(key, "string"); + +export const _getKV = async ( + key: string, + type: string, +): Promise => { const db = await kvDB(); - return await db.get("kv", key); + const v = await db.get("kv", key); + if (v === undefined) return v; + if (typeof v != type) + throw new Error( + `Expected the value corresponding to key ${key} to be a ${type}, but instead got ${v}`, + ); + return v as T; }; +/** Numeric variant of {@link getKV}. */ +export const getKVN = async (key: string) => _getKV(key, "number"); + +/** Boolean variant of {@link getKV} */ +export const getKVB = async (key: string) => _getKV(key, "boolean"); + /** * Save the given {@link value} corresponding to {@link key}, overwriting any * existing value. */ -export const setKV = async (key: string, value: string) => { +export const setKV = async (key: string, value: string | number | boolean) => { const db = await kvDB(); await db.put("kv", value, key); }; From 910013572daf5476c2c6ae3ec888f0f0ddd5f86a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:44:31 +0530 Subject: [PATCH 207/466] Make the user's ID accessible to web workers --- .../shared/storage/localStorage/index.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index d70dcc0edd..f0607347e7 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -54,12 +54,7 @@ export const clearData = () => localStorage.clear(); // // Creating a new function here to act as a funnel point. export const setLSUser = async (user: object) => { - user && - typeof user == "object" && - "token" in user && - typeof user.token == "string" - ? await setKV("token", user.token) - : await removeKV("token"); + await migrateKVToken(user); setData(LS_KEYS.USER, user); }; @@ -71,9 +66,17 @@ export const setLSUser = async (user: object) => { * at an early point in the app startup to also copy over the token into KV DB * for existing users. * - * This was added 1 July 2024, can be removed after a while (tag: Migration). + * This was added 1 July 2024, can be removed after a while and this code + * inlined into `setLSUser` (tag: Migration). */ export const migrateKVToken = async (user: unknown) => { + user && + typeof user == "object" && + "id" in user && + typeof user.id == "number" + ? await setKV("uid", user.id) + : await removeKV("uid"); + user && typeof user == "object" && "token" in user && From 532a9f64ffb8c617d071ce400f26387e96e1da2f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:45:49 +0530 Subject: [PATCH 208/466] Read --- web/packages/new/photos/services/ml/worker.ts | 24 +++++++++++++++++-- .../shared/storage/localStorage/index.ts | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 5123fc33cc..bcc448a4ea 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -11,6 +11,7 @@ import { wait } from "@/utils/promise"; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; +import { getKV } from "@/next/kv"; /** * The MLWorker state machine. @@ -125,14 +126,33 @@ export class MLWorker { } async backfillq() { - console.log("backfillq"); - await wait(0); + await backfill(); } } // TODO-ML: Temorarily disable // expose(MLWorker); +/** + * Find out files which need to be indexed. Then index the next batch of them. + */ +const backfill = async () => { + const userID = await getKV("userID"); + + // const files = await syncWithLocalFilesAndGetFilesToIndex( + // userID, + // batchSize, + // ); + + // if (syncContext.outOfSyncFiles.length > 0) { + // await this.syncFiles(syncContext); + // } + + // const error = syncContext.error; + // const nOutOfSyncFiles = syncContext.outOfSyncFiles.length; + // return !error && nOutOfSyncFiles > 0; + +} /** * Index faces in a file, save the persist the results locally, and put them * on remote. diff --git a/web/packages/shared/storage/localStorage/index.ts b/web/packages/shared/storage/localStorage/index.ts index f0607347e7..d4b0351da2 100644 --- a/web/packages/shared/storage/localStorage/index.ts +++ b/web/packages/shared/storage/localStorage/index.ts @@ -74,8 +74,8 @@ export const migrateKVToken = async (user: unknown) => { typeof user == "object" && "id" in user && typeof user.id == "number" - ? await setKV("uid", user.id) - : await removeKV("uid"); + ? await setKV("userID", user.id) + : await removeKV("userID"); user && typeof user == "object" && From fc46552b0fb3fe2f58d6830a55ec72d2435fcbcd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 11:50:34 +0530 Subject: [PATCH 209/466] Batch --- web/packages/new/photos/services/ml/worker.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index bcc448a4ea..a3d51b09ca 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -7,11 +7,13 @@ import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; // import { expose } from "comlink"; +import { getKVN } from "@/next/kv"; +import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; +import { syncWithLocalFilesAndGetFilesToIndex } from "."; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; -import { getKV } from "@/next/kv"; /** * The MLWorker state machine. @@ -137,12 +139,10 @@ export class MLWorker { * Find out files which need to be indexed. Then index the next batch of them. */ const backfill = async () => { - const userID = await getKV("userID"); + const userID = ensure(await getKVN("userID")); - // const files = await syncWithLocalFilesAndGetFilesToIndex( - // userID, - // batchSize, - // ); + const files = await syncWithLocalFilesAndGetFilesToIndex(userID, 200); + if (files.length == 0) return; // if (syncContext.outOfSyncFiles.length > 0) { // await this.syncFiles(syncContext); @@ -151,8 +151,8 @@ const backfill = async () => { // const error = syncContext.error; // const nOutOfSyncFiles = syncContext.outOfSyncFiles.length; // return !error && nOutOfSyncFiles > 0; +}; -} /** * Index faces in a file, save the persist the results locally, and put them * on remote. From ea47936231c14e6752ec408e499181acb6070b32 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 12:23:44 +0530 Subject: [PATCH 210/466] ua and more --- web/packages/new/photos/services/ml/index.ts | 14 ++++- web/packages/new/photos/services/ml/worker.ts | 61 +++++++++++++------ 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index ca957d19c6..6797a52b77 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -18,6 +18,8 @@ import { updateAssumingLocalFiles, } from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; +import { clientPackageName } from "@/next/app"; +import { ensureElectron } from "@/next/electron"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; import { MLWorker } from "./worker"; @@ -42,11 +44,17 @@ let _comlinkWorker: ComlinkWorker | undefined; export const worker = async () => (_comlinkWorker ??= createComlinkWorker()).remote; -const createComlinkWorker = () => - new ComlinkWorker( +const createComlinkWorker = () => { + const cw = new ComlinkWorker( "ml", new Worker(new URL("worker.ts", import.meta.url)), ); + void cw.remote.then((w) => getUserAgent().then((ua) => w.init(ua))); + return cw; +}; + +const getUserAgent = async () => + `${clientPackageName}/${await ensureElectron().appVersion()}`; /** * Terminate {@link worker} (if any). @@ -73,7 +81,7 @@ export const initML = () => { export const logoutML = async () => { // `terminateMLWorker` is conceptually also part of this, but for the // reasons mentioned in [Note: Caching IDB instances in separate execution - // contexts], it gets called first in the logout sequence, and this this + // contexts], it gets called first in the logout sequence, and then this // `logoutML` gets called at a later point in time. _isMLEnabled = false; await clearFaceDB(); diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index a3d51b09ca..b37230113d 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -33,8 +33,8 @@ import { indexFaces } from "./index-face"; */ type MLWorkerState = "idle" | "pull" | "liveq" | "backfillq"; -const idleDurationStart = 5; /* 5 seconds */ -const idleDurationMax = 16 * 60; /* 16 minutes */ +const durationStart = 5; /* 5 seconds */ +const durationMax = 16 * 60; /* 16 minutes */ /** * Run operations related to machine learning (e.g. indexing) in a Web Worker. @@ -45,11 +45,25 @@ const idleDurationMax = 16 * 60; /* 16 minutes */ */ export class MLWorker { private state: MLWorkerState = "idle"; - private isSyncing = false; + private userAgent: string | undefined; private shouldSync = false; private liveQ: EnteFile[] = []; private idleTimeout: ReturnType | undefined; - private idleDuration = idleDurationStart; /* unit: seconds */ + private idleDuration = durationStart; /* unit: seconds */ + private backfillPauseDuration = durationStart; /* unit: seconds */ + + /** + * Initialize a new {@link MLWorker}. + * + * This is conceptually the constructor, however it is easier to have this + * as a separate function to avoid confounding the comlink types too much. + * + * @param userAgent The user agent string to use as the client field in the + * embeddings generated during indexing by this client. + */ + init(userAgent: string) { + this.userAgent = userAgent; + } /** * Pull embeddings from remote, and start backfilling if needed. @@ -88,7 +102,7 @@ export class MLWorker { if (this.shouldSync) { this.shouldSync = false; this.state = "pull"; - this.idleDuration = idleDurationStart; + this.idleDuration = durationStart; void this.pull().then(next); return; } @@ -96,7 +110,7 @@ export class MLWorker { // Otherwise see if there is something in the live queue. if (this.liveQ.length > 0) { this.state = "liveq"; - this.idleDuration = idleDurationStart; + this.idleDuration = durationStart; void this.liveq().then(next); return; } @@ -105,7 +119,7 @@ export class MLWorker { const { indexableCount } = await indexedAndIndexableCounts(); if (indexableCount > 0) { this.state = "backfillq"; - this.idleDuration = idleDurationStart; + this.idleDuration = durationStart; void this.backfillq().then(next); return; } @@ -114,7 +128,7 @@ export class MLWorker { // time (limited to some maximum). this.state = "idle"; - this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); + this.idleDuration = Math.min(this.idleDuration * 2, durationMax); this.idleTimeout = setTimeout(next, this.idleDuration * 1000); } @@ -128,7 +142,18 @@ export class MLWorker { } async backfillq() { - await backfill(); + const allSuccess = await backfill(ensure(this.userAgent)); + if (allSuccess) { + // Everything is running smoothly. Reset the backfill pause. + this.backfillPauseDuration = durationStart; + } else { + // If we encountered failures in the batch, pause for increasing + // durations of time. Failures are not really expected, so something + // unexpected might be going on, or remote might be having issues. + const d = Math.min(this.backfillPauseDuration * 2, durationMax); + this.backfillPauseDuration = d; + await wait(d); + } } } @@ -138,19 +163,21 @@ export class MLWorker { /** * Find out files which need to be indexed. Then index the next batch of them. */ -const backfill = async () => { +const backfill = async (userAgent: string) => { const userID = ensure(await getKVN("userID")); const files = await syncWithLocalFilesAndGetFilesToIndex(userID, 200); - if (files.length == 0) return; - // if (syncContext.outOfSyncFiles.length > 0) { - // await this.syncFiles(syncContext); - // } + let allSuccess = true; + for (const file of files) { + try { + await index(file, undefined, userAgent); + } catch { + allSuccess = false; + } + } - // const error = syncContext.error; - // const nOutOfSyncFiles = syncContext.outOfSyncFiles.length; - // return !error && nOutOfSyncFiles > 0; + return allSuccess; }; /** From da06653c6a0d9561f3f28d037be770e2fe3f6932 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 12:41:38 +0530 Subject: [PATCH 211/466] Implicit state machine --- web/packages/new/photos/services/ml/worker.ts | 86 +++++++++---------- 1 file changed, 39 insertions(+), 47 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index b37230113d..2ad3ed3ad2 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -15,8 +15,17 @@ import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; +const idleDurationStart = 5; /* 5 seconds */ +const idleDurationMax = 16 * 60; /* 16 minutes */ + /** - * The MLWorker state machine. + * Run operations related to machine learning (e.g. indexing) in a Web Worker. + * + * This is a normal class that is however exposed (via comlink) as a proxy + * running inside a Web Worker. This way, we do not bother the main thread with + * tasks that might degrade interactivity. + * + * Conceptually, the MLWorker state machine is as follows: * * ext. event state then state * ------------- --------------- -------------- @@ -24,33 +33,19 @@ import { indexFaces } from "./index-face"; * upload -> "liveq" -> "idle" * idleTimeout -> "backfillq" -> "idle" * - * where + * where: * * - "pull": pulling embeddings from remote * - "liveq": indexing items that are being uploaded * - "backfillq": indexing unindexed items otherwise * - "idle": in between state transitions */ -type MLWorkerState = "idle" | "pull" | "liveq" | "backfillq"; - -const durationStart = 5; /* 5 seconds */ -const durationMax = 16 * 60; /* 16 minutes */ - -/** - * Run operations related to machine learning (e.g. indexing) in a Web Worker. - * - * This is a normal class that is however exposed (via comlink) as a proxy - * running inside a Web Worker. This way, we do not bother the main thread with - * tasks that might degrade interactivity. - */ export class MLWorker { - private state: MLWorkerState = "idle"; private userAgent: string | undefined; private shouldSync = false; private liveQ: EnteFile[] = []; private idleTimeout: ReturnType | undefined; - private idleDuration = durationStart; /* unit: seconds */ - private backfillPauseDuration = durationStart; /* unit: seconds */ + private idleDuration = idleDurationStart; /* unit: seconds */ /** * Initialize a new {@link MLWorker}. @@ -80,6 +75,7 @@ export class MLWorker { this.wakeUp(); } + /** Invoked in response to external events. */ private wakeUp() { if (this.idleTimeout) { clearTimeout(this.idleTimeout); @@ -96,21 +92,21 @@ export class MLWorker { // unnecessary; I'm doing this partially out of superstition, aiming to // to give GC a chance to run if needed, and also generally ease // execution and memory pressure. - const next = () => setTimeout(() => this.tick(), 0); + const next = () => void setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; - this.state = "pull"; - this.idleDuration = durationStart; - void this.pull().then(next); + // Reset the idle duration too. + this.idleDuration = idleDurationStart; + await this.pull(); + next(); return; } // Otherwise see if there is something in the live queue. if (this.liveQ.length > 0) { - this.state = "liveq"; - this.idleDuration = durationStart; + this.idleDuration = idleDurationStart; void this.liveq().then(next); return; } @@ -118,17 +114,28 @@ export class MLWorker { // Otherwise check to see if there is something to backfill. const { indexableCount } = await indexedAndIndexableCounts(); if (indexableCount > 0) { - this.state = "backfillq"; - this.idleDuration = durationStart; - void this.backfillq().then(next); - return; + const allSuccess = await backfill(ensure(this.userAgent)); + if (allSuccess) { + // Everything is running smoothly. Reset the idle duration. + this.idleDuration = idleDurationStart; + // And tick again. + next(); + return; + } } - // Nothing to do. Go to sleep for exponentially longer durations of - // time (limited to some maximum). - - this.state = "idle"; - this.idleDuration = Math.min(this.idleDuration * 2, durationMax); + // We come here in two scenarios: + // + // 1. Nothing to do. + // + // 2. We encountered failures during backfill. Failures are not really + // expected, so something unexpected might be going on, or remote + // might be having issues. + // + // In both cases, we pause for exponentially longer durations of time + // (limited to some maximum). + + this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); this.idleTimeout = setTimeout(next, this.idleDuration * 1000); } @@ -140,21 +147,6 @@ export class MLWorker { console.log("liveq"); await wait(0); } - - async backfillq() { - const allSuccess = await backfill(ensure(this.userAgent)); - if (allSuccess) { - // Everything is running smoothly. Reset the backfill pause. - this.backfillPauseDuration = durationStart; - } else { - // If we encountered failures in the batch, pause for increasing - // durations of time. Failures are not really expected, so something - // unexpected might be going on, or remote might be having issues. - const d = Math.min(this.backfillPauseDuration * 2, durationMax); - this.backfillPauseDuration = d; - await wait(d); - } - } } // TODO-ML: Temorarily disable From 4ad8d0c0fd9144e05d184c97c9187a637b18fcc9 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 3 Jul 2024 13:08:43 +0530 Subject: [PATCH 212/466] [mob][photos] UI update --- .../loading_photos_background_fullscreen.png | Bin 0 -> 61191 bytes .../loading_photos_background_fullscreen.png | Bin 0 -> 99831 bytes .../lockscreen_confirm_password.dart | 53 ++-- .../lockscreen/lockscreen_confirm_pin.dart | 103 +++++--- .../lockscreen/lockscreen_password.dart | 53 ++-- .../settings/lockscreen/lockscreen_pin.dart | 84 +++--- mobile/lib/ui/tools/lock_screen.dart | 244 ++++++++++-------- 7 files changed, 319 insertions(+), 218 deletions(-) create mode 100644 mobile/assets/2.0x/loading_photos_background_fullscreen.png create mode 100644 mobile/assets/3.0x/loading_photos_background_fullscreen.png diff --git a/mobile/assets/2.0x/loading_photos_background_fullscreen.png b/mobile/assets/2.0x/loading_photos_background_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..23f53f2b6be725c16cdd670375107c1d8923704d GIT binary patch literal 61191 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°PUj&$-Um2Xpc!scuBP%v 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 MFIXX}&bvqd4{J_2=l}o! literal 0 HcmV?d00001 diff --git a/mobile/assets/3.0x/loading_photos_background_fullscreen.png b/mobile/assets/3.0x/loading_photos_background_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..05538156668188ddbb5a262a23fbcfd0a92e37d9 GIT binary patch literal 99831 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%0DKp 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 literal 0 HcmV?d00001 diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart index 1ab2861c57..dbf07f5cf6 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_password.dart @@ -108,28 +108,49 @@ class _LockScreenConfirmPasswordState extends State { height: 120, width: 120, child: Stack( + alignment: Alignment.center, children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: 1, - strokeWidth: 1.5, + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), ), ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, ), ), + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ], ), ), diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart index fae5264c5f..412cfcce84 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_confirm_pin.dart @@ -16,7 +16,7 @@ class LockScreenConfirmPin extends StatefulWidget { class _LockScreenConfirmPinState extends State { final _confirmPinController = TextEditingController(text: null); - + bool isConfirmPinValid = false; final LockscreenSetting _lockscreenSetting = LockscreenSetting.instance; final _pinPutDecoration = PinTheme( height: 48, @@ -55,8 +55,15 @@ class _LockScreenConfirmPinState extends State { Navigator.of(context).pop(true); return; } + setState(() { + isConfirmPinValid = true; + }); await HapticFeedback.vibrate(); + await Future.delayed(const Duration(milliseconds: 75)); _confirmPinController.clear(); + setState(() { + isConfirmPinValid = false; + }); } @override @@ -97,43 +104,64 @@ class _LockScreenConfirmPinState extends State { height: 120, width: 120, child: Stack( + alignment: Alignment.center, children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: ValueListenableBuilder( - valueListenable: _confirmPinController, - builder: (context, value, child) { - return TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: _confirmPinController.text.length / 4, - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 250), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, - ), - ); - }, + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), ), ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _confirmPinController, + builder: (context, value, child) { + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _confirmPinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), + ); + }, ), ), + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ], ), ), @@ -144,7 +172,7 @@ class _LockScreenConfirmPinState extends State { const Padding(padding: EdgeInsets.all(12)), Pinput( length: 4, - pinputAutovalidateMode: PinputAutovalidateMode.onSubmit, + useNativeKeyboard: false, controller: _confirmPinController, defaultPinTheme: _pinPutDecoration, submittedPinTheme: _pinPutDecoration.copyWith( @@ -169,7 +197,7 @@ class _LockScreenConfirmPinState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), border: Border.all( - color: colorTheme.fillBase, + color: colorTheme.warning400, ), ), textStyle: @@ -178,12 +206,7 @@ class _LockScreenConfirmPinState extends State { errorText: '', obscureText: true, obscuringCharacter: '*', - validator: (value) { - if (value == widget.pin) { - return null; - } - return 'PIN does not match'; - }, + forceErrorState: isConfirmPinValid, onCompleted: (value) async { await _confirmPinMatch(); }, diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart index 935235af13..b3a60d32f5 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_password.dart @@ -161,28 +161,49 @@ class _LockScreenPasswordState extends State { height: 120, width: 120, child: Stack( + alignment: Alignment.center, children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: 1, - strokeWidth: 1.5, + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), ), ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + SizedBox( + height: 75, + width: 75, + child: CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: 1, + strokeWidth: 1.5, ), ), + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ], ), ), diff --git a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart index c96726e246..ee5dc24cd8 100644 --- a/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart +++ b/mobile/lib/ui/settings/lockscreen/lockscreen_pin.dart @@ -172,43 +172,64 @@ class _LockScreenPinState extends State { height: 120, width: 120, child: Stack( + alignment: Alignment.center, children: [ - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: ValueListenableBuilder( - valueListenable: _pinController, - builder: (context, value, child) { - return TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: _pinController.text.length / 4, - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 250), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, - ), - ); - }, + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), ), ), ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, + SizedBox( + height: 75, + width: 75, + child: ValueListenableBuilder( + valueListenable: _pinController, + builder: (context, value, child) { + return TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: _pinController.text.length / 4, + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 250), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillStrong, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), + ); + }, ), ), + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ], ), ), @@ -255,7 +276,6 @@ class _LockScreenPinState extends State { obscuringCharacter: '*', errorText: '', onCompleted: (value) async { - await Future.delayed(const Duration(milliseconds: 250)); await _confirmPin(_pinController.text); }, ), diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 636a9d5a0e..046abc3fa7 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -3,13 +3,17 @@ import "dart:io"; import "dart:math"; import 'package:flutter/material.dart'; +import "package:flutter_animate/flutter_animate.dart"; import 'package:logging/logging.dart'; +import "package:photos/core/configuration.dart"; +import "package:photos/ente_theme_data.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; import "package:photos/theme/ente_theme.dart"; -import 'package:photos/ui/common/gradient_button.dart'; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; +import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/lockscreen_setting.dart"; class LockScreen extends StatefulWidget { @@ -30,16 +34,7 @@ class _LockScreenState extends State int lockedTime = 0; int invalidAttemptCount = 0; int remainingTime = 0; - bool showErrorMessage = true; final _lockscreenSetting = LockscreenSetting.instance; - late final AnimationController _controller = AnimationController( - duration: const Duration(milliseconds: 500), - vsync: this, - ); - late final animation = CurvedAnimation( - parent: _controller, - curve: Curves.easeInOut, - ); @override void initState() { @@ -59,6 +54,7 @@ class _LockScreenState extends State @override Widget build(BuildContext context) { final colorTheme = getEnteColorScheme(context); + final textTheme = getEnteTextTheme(context); return Scaffold( body: Container( decoration: const BoxDecoration( @@ -70,113 +66,100 @@ class _LockScreenState extends State ), ), child: Center( - child: isTimerRunning - ? Column( + child: Column( + children: [ + const Spacer(), + SizedBox( + height: 120, + width: 120, + child: Stack( + alignment: Alignment.center, children: [ - const Spacer(), - SizedBox( - height: 120, - width: 120, - child: Stack( - children: [ - Align( - alignment: Alignment.center, - child: Container( - width: 82, - height: 82, - decoration: BoxDecoration( - shape: BoxShape.circle, - gradient: LinearGradient( - colors: [ - Colors.white70.withOpacity(0.2), - Colors.white10.withOpacity(0.2), - Colors.white70.withOpacity(0.4), - Colors.white60.withOpacity(0.8), - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ), - ), - child: Padding( - padding: const EdgeInsets.all(1.0), - child: Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - color: colorTheme.backgroundBase, - ), - ), - ), - ), - ), - Align( - alignment: Alignment.center, - child: SizedBox( - height: 75, - width: 75, - child: TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: calculateRemainingTime(), - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 50), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.backdropBase, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, - ), - ), - ), - ), - Align( - alignment: Alignment.center, - child: IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, - ), + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, ), - ], + ), ), ), - const Spacer(), - AnimatedSwitcher( - duration: const Duration(seconds: 1), - transitionBuilder: - (Widget child, Animation animation) { - return FadeTransition(opacity: animation, child: child); - }, - child: showErrorMessage - ? const Text( - "Too many incorrect attempts", - key: ValueKey(1), - ) - : Text( - formatTime(remainingTime), - key: const ValueKey(2), - ), - ), - ], - ) - : Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ SizedBox( - width: 180, - child: GradientButton( - text: context.l10n.unlock, - iconData: Icons.lock_open_outlined, - onTap: () async { - await _showLockScreen(source: "tapUnlock"); - }, + height: 75, + width: 75, + child: TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: calculateRemainingTime(), + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 50), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillFaintPressed, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), ), ), + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), ], ), + ), + const Spacer(), + isTimerRunning + ? Stack( + alignment: Alignment.center, + children: [ + Text( + "Too many incorrect attempts", + style: textTheme.body, + ) + .animate(delay: const Duration(milliseconds: 2000)) + .fadeOut(duration: 400.ms), + Text( + formatTime(remainingTime), + style: textTheme.body, + ) + .animate(delay: const Duration(milliseconds: 2250)) + .fadeIn(duration: 400.ms), + ], + ) + : GestureDetector( + onTap: () => _showLockScreen(source: "tap"), + child: Text( + "Tap to unlock", + style: textTheme.body, + ), + ), + const Padding( + padding: EdgeInsets.only(bottom: 20), + ), + ], + ), ), ), ); @@ -190,6 +173,39 @@ class _LockScreenState extends State return shortestSide > 600 ? true : false; } + Future _autoLogoutOnMaxInvalidAttempts() async { + final AlertDialog alert = AlertDialog( + title: const Text("Too many incorrect attempts"), + content: Text(S.of(context).pleaseLoginAgain), + actions: [ + TextButton( + child: Text( + S.of(context).ok, + style: TextStyle( + color: Theme.of(context).colorScheme.greenAlternative, + ), + ), + onPressed: () async { + Navigator.of(context, rootNavigator: true).pop('dialog'); + Navigator.of(context).popUntil((route) => route.isFirst); + final dialog = + createProgressDialog(context, S.of(context).loggingOut); + await dialog.show(); + await Configuration.instance.logout(); + await dialog.hide(); + }, + ), + ], + ); + + await showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } + @override Future didChangeAppLifecycleState(AppLifecycleState state) async { _logger.info(state.toString()); @@ -230,7 +246,6 @@ class _LockScreenState extends State @override void dispose() { _logger.info('disposing'); - _controller.dispose(); WidgetsBinding.instance.removeObserver(this); super.dispose(); } @@ -314,15 +329,16 @@ class _LockScreenState extends State invalidAttemptCount != _lockscreenSetting.getInvalidAttemptCount()) { invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount(); + + if (invalidAttemptCount > 9) { + await _autoLogoutOnMaxInvalidAttempts(); + return; + } + lockedTime = pow(2, invalidAttemptCount - 5).toInt() * 30; await _lockscreenSetting.setLastInvalidAttemptTime( DateTime.now().millisecondsSinceEpoch + lockedTime * 1000, ); - Timer(const Duration(seconds: 2), () { - setState(() { - showErrorMessage = false; - }); - }); await startLockTimer(lockedTime); } _hasAuthenticationFailed = true; From b3e7bab0cbf0623685578e07c82fd512f4ee4314 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 3 Jul 2024 13:17:25 +0530 Subject: [PATCH 213/466] [mob][photos] UI update --- mobile/lib/ui/tools/lock_screen.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 44e4835eda..6683243ab2 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -13,7 +13,8 @@ import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/utils/auth_util.dart'; -import "package:photos/utils/lockscreen_setting.dart"; +import "package:photos/utils/dialog_util.dart"; +import "package:photos/utils/lock_screen_settings.dart"; class LockScreen extends StatefulWidget { const LockScreen({Key? key}) : super(key: key); @@ -34,7 +35,7 @@ class _LockScreenState extends State int invalidAttemptCount = 0; int remainingTime = 0; bool showErrorMessage = true; - final _lockscreenSetting = LockscreenSetting.instance; + final _lockscreenSetting = LockScreenSettings.instance; late final AnimationController _controller = AnimationController( duration: const Duration(milliseconds: 500), vsync: this, From 70e198ee7f584c520f69decd13d3b151d6187552 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 13:17:30 +0530 Subject: [PATCH 214/466] Intertwine --- web/packages/new/photos/services/ml/worker.ts | 109 +++++++++++------- 1 file changed, 65 insertions(+), 44 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 2ad3ed3ad2..be99ca6055 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,8 +1,4 @@ -import { - indexedAndIndexableCounts, - markIndexingFailed, - saveFaceIndex, -} from "@/new/photos/services/ml/db"; +import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; @@ -86,67 +82,74 @@ export class MLWorker { } } + /** + * Called when a file is uploaded from the current client. + * + * This is a great opportunity to index since we already have the in-memory + * representation of the file's contents with us and won't need to download + * the file from remote. + */ + didUpload(file: EnteFile) { + // Add the recently uploaded file to the live indexing queue. + // + // Limit the queue to some maximum so that we don't keep growing + // indefinitely (and cause memory pressure) if the speed of uploads is + // exceeding the speed of indexing. + // + // In general, we can be sloppy with the items in the live queue (as + // long as we're not systematically ignoring it). This is because the + // live queue is just an optimization: if a file doesn't get indexed via + // the live queue, it'll later get indexed anyway when we backfill. + if (this.liveQ.length < 50) { + this.liveQ.push(file); + this.wakeUp(); + } else { + log.debug(() => "Ignoring liveQ item since liveQ is full"); + } + } + private async tick() { - // Schedule a new macrotask (by using setTimeout) instead of scheduling - // a new microtask (by directly resolving the promise). This is likely - // unnecessary; I'm doing this partially out of superstition, aiming to - // to give GC a chance to run if needed, and also generally ease - // execution and memory pressure. const next = () => void setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; - // Reset the idle duration too. + // Reset the idle duration as we start pulling. this.idleDuration = idleDurationStart; - await this.pull(); - next(); + // Call tick again once the pull is done. + void this.pull().then(next); + // Return without waiting for the pull. return; } - // Otherwise see if there is something in the live queue. - if (this.liveQ.length > 0) { + const liveQ = this.liveQ; + this.liveQ = []; + const allSuccess = await indexNextBatch(ensure(this.userAgent), liveQ); + if (allSuccess) { + // Everything is running smoothly. Reset the idle duration. this.idleDuration = idleDurationStart; - void this.liveq().then(next); + // And tick again. + next(); return; } - // Otherwise check to see if there is something to backfill. - const { indexableCount } = await indexedAndIndexableCounts(); - if (indexableCount > 0) { - const allSuccess = await backfill(ensure(this.userAgent)); - if (allSuccess) { - // Everything is running smoothly. Reset the idle duration. - this.idleDuration = idleDurationStart; - // And tick again. - next(); - return; - } - } - - // We come here in two scenarios: + // We come here in three scenarios - either there is nothing left to do, + // or we cannot currently do it (e.g. user is offline), or we + // encountered failures during indexing. // - // 1. Nothing to do. + // Failures are not really expected, so something unexpected might be + // going on, or remote might be having issues. // - // 2. We encountered failures during backfill. Failures are not really - // expected, so something unexpected might be going on, or remote - // might be having issues. - // - // In both cases, we pause for exponentially longer durations of time + // So in all cases, we pause for exponentially longer durations of time // (limited to some maximum). this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); this.idleTimeout = setTimeout(next, this.idleDuration * 1000); } - async pull() { + private async pull() { await pullFaceEmbeddings(); } - - async liveq() { - console.log("liveq"); - await wait(0); - } } // TODO-ML: Temorarily disable @@ -154,16 +157,34 @@ export class MLWorker { /** * Find out files which need to be indexed. Then index the next batch of them. + * + * Returns `false` to indicate that either an error occurred, or there are no + * more files to process, or that we cannot currently process files. + * + * Which means that when it returns true, all is well and there are more + * things pending to process, so we should chug along at full speed. */ -const backfill = async (userAgent: string) => { +const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { + if (!self.navigator.onLine) { + log.info("Skipping ML indexing since we are not online"); + return false; + } + const userID = ensure(await getKVN("userID")); - const files = await syncWithLocalFilesAndGetFilesToIndex(userID, 200); + const files = + liveQ.length > 0 + ? liveQ + : await syncWithLocalFilesAndGetFilesToIndex(userID, 200); + if (files.length == 0) return false; let allSuccess = true; for (const file of files) { try { await index(file, undefined, userAgent); + // Let the event loop run so that other events (like didUpload) can + // be acknowledged and noted down. + await wait(0); } catch { allSuccess = false; } From 2ab2a13dc04c57bef8ba976d89e4e61465b22671 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 13:33:17 +0530 Subject: [PATCH 215/466] Download manager --- web/packages/new/photos/services/ml/index.ts | 12 ++++++++---- web/packages/new/photos/services/ml/worker.ts | 7 ++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 6797a52b77..a2045b8447 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -41,15 +41,18 @@ let _isMLEnabled = false; let _comlinkWorker: ComlinkWorker | undefined; /** Lazily created, cached, instance of {@link MLWorker}. */ -export const worker = async () => - (_comlinkWorker ??= createComlinkWorker()).remote; +export const worker = async () => { + if (!_comlinkWorker) _comlinkWorker = await createComlinkWorker(); + return _comlinkWorker.remote; +}; -const createComlinkWorker = () => { +const createComlinkWorker = async () => { const cw = new ComlinkWorker( "ml", new Worker(new URL("worker.ts", import.meta.url)), ); - void cw.remote.then((w) => getUserAgent().then((ua) => w.init(ua))); + const ua = await getUserAgent(); + await cw.remote.then((w) => w.init(ua)); return cw; }; @@ -196,6 +199,7 @@ export const setIsFaceIndexingEnabled = (enabled: boolean) => * * @param count Limit the resulting list of indexable files to {@link count}. */ +// TODO-ML: Move to worker export const syncWithLocalFilesAndGetFilesToIndex = async ( userID: number, count: number, diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index be99ca6055..5434407c98 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -3,7 +3,9 @@ import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; // import { expose } from "comlink"; +import downloadManager from "@/new/photos/services/download"; import { getKVN } from "@/next/kv"; +import { ensureAuthToken } from "@/next/local-user"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; import { syncWithLocalFilesAndGetFilesToIndex } from "."; @@ -52,8 +54,11 @@ export class MLWorker { * @param userAgent The user agent string to use as the client field in the * embeddings generated during indexing by this client. */ - init(userAgent: string) { + async init(userAgent: string) { this.userAgent = userAgent; + // Initialize the downloadManager running in the web worker with the + // user's token. It'll be used to download files to index if needed. + await downloadManager.init(await ensureAuthToken()); } /** From 1987f2354a51d19c8e6c3de7c91400713ae136a3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 13:34:50 +0530 Subject: [PATCH 216/466] Test run --- web/packages/new/photos/services/ml/mlWorkManager.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts index d16f5afc63..3487af4da3 100644 --- a/web/packages/new/photos/services/ml/mlWorkManager.ts +++ b/web/packages/new/photos/services/ml/mlWorkManager.ts @@ -4,6 +4,7 @@ import { clientPackageName } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { wait } from "@/utils/promise"; import { Events, eventBus } from "@ente/shared/events"; import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; import debounce from "debounce"; @@ -147,7 +148,9 @@ class MLWorkManager { this, ); - await this.startSyncJob(); + // TODO-ML: + // await this.startSyncJob(); + await wait(0); } else if (this.mlSearchEnabled && !enabled) { log.info("Disabling MLWorkManager"); this.mlSearchEnabled = false; From 1b6d3623140e5f242576a0ef5a1d24dcb415b41b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 13:47:41 +0530 Subject: [PATCH 217/466] Handle first run --- web/packages/new/photos/services/ml/worker.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 5434407c98..b8ec7558dd 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -42,6 +42,7 @@ export class MLWorker { private userAgent: string | undefined; private shouldSync = false; private liveQ: EnteFile[] = []; + private haveStarted = false; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ @@ -78,12 +79,18 @@ export class MLWorker { /** Invoked in response to external events. */ private wakeUp() { - if (this.idleTimeout) { + if (!this.haveStarted) { + // First time something happened. + this.haveStarted = true; + void this.tick(); + } else if (this.idleTimeout) { + // Currently paused. Get back to work. clearTimeout(this.idleTimeout); this.idleTimeout = undefined; void this.tick(); } else { - // this.tick will get run when the current task finishes. + // In the middle of a task. Do nothing, `this.tick` will + // automatically be invoked when the current task finishes. } } @@ -114,6 +121,13 @@ export class MLWorker { } private async tick() { + log.debug(() => ({ + t: "ml-tick", + shouldSync: this.shouldSync, + liveQ: this.liveQ, + idleDuration: this.idleDuration, + })); + const next = () => void setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. From 0fa0bf124aa39eccd8bafba49347eb9338992049 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 14:07:42 +0530 Subject: [PATCH 218/466] Only reset the idle duration on non-empty pulls --- .../new/photos/services/ml/embedding.ts | 7 ++++ web/packages/new/photos/services/ml/worker.ts | 32 +++++++++---------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 42047dd326..fdbc2ae24c 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -94,6 +94,8 @@ type RemoteEmbedding = z.infer; * * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. + * + * @returns true if at least one embedding was pulled, false otherwise. */ const pullEmbeddings = async ( model: EmbeddingModel, @@ -127,6 +129,7 @@ const pullEmbeddings = async ( // scenario where this happens. const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); + let didPull = false; let sinceTime = await embeddingSyncTime(model); // TODO: eslint has fixed this spurious warning, but we're not on the latest // version yet, so add a disable. @@ -149,6 +152,7 @@ const pullEmbeddings = async ( file.key, ), ); + didPull = true; count++; } catch (e) { log.warn(`Ignoring unparseable ${model} embedding`, e); @@ -157,6 +161,7 @@ const pullEmbeddings = async ( await saveEmbeddingSyncTime(sinceTime, model); log.info(`Fetched ${count} ${model} embeddings`); } + return didPull; }; /** @@ -291,6 +296,8 @@ export const putEmbedding = async ( * * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. + * + * @returns true if at least one embedding was pulled, false otherwise. */ export const pullFaceEmbeddings = () => pullEmbeddings("file-ml-clip-face", (jsonString: string) => diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index b8ec7558dd..1267672547 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,13 +1,13 @@ +import downloadManager from "@/new/photos/services/download"; import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; -import log from "@/next/log"; -// import { expose } from "comlink"; -import downloadManager from "@/new/photos/services/download"; import { getKVN } from "@/next/kv"; import { ensureAuthToken } from "@/next/local-user"; +import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; +import { expose } from "comlink"; import { syncWithLocalFilesAndGetFilesToIndex } from "."; import { fileLogID } from "../../utils/file"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; @@ -128,15 +128,15 @@ export class MLWorker { idleDuration: this.idleDuration, })); - const next = () => void setTimeout(() => this.tick(), 0); - // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; - // Reset the idle duration as we start pulling. - this.idleDuration = idleDurationStart; - // Call tick again once the pull is done. - void this.pull().then(next); + void pull().then((didPull) => { + // Reset the idle duration if we did pull something. + if (didPull) this.idleDuration = idleDurationStart; + // Either ways, tick again. + void setTimeout(() => this.tick(), 0); + }); // Return without waiting for the pull. return; } @@ -148,7 +148,7 @@ export class MLWorker { // Everything is running smoothly. Reset the idle duration. this.idleDuration = idleDurationStart; // And tick again. - next(); + void setTimeout(() => this.tick(), 0); return; } @@ -165,14 +165,14 @@ export class MLWorker { this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); this.idleTimeout = setTimeout(next, this.idleDuration * 1000); } - - private async pull() { - await pullFaceEmbeddings(); - } } -// TODO-ML: Temorarily disable -// expose(MLWorker); +expose(MLWorker); + +/** + * Pull embeddings from remote. + */ +const pull = pullFaceEmbeddings; /** * Find out files which need to be indexed. Then index the next batch of them. From 8acb2a1b987aa5e65791219ca445c141b52535ea Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 14:09:32 +0530 Subject: [PATCH 219/466] Clarify --- web/packages/new/photos/services/ml/worker.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 1267672547..7c461ece21 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -128,6 +128,8 @@ export class MLWorker { idleDuration: this.idleDuration, })); + const scheduleTick = () => void setTimeout(() => this.tick(), 0); + // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; @@ -135,7 +137,7 @@ export class MLWorker { // Reset the idle duration if we did pull something. if (didPull) this.idleDuration = idleDurationStart; // Either ways, tick again. - void setTimeout(() => this.tick(), 0); + scheduleTick(); }); // Return without waiting for the pull. return; @@ -148,7 +150,7 @@ export class MLWorker { // Everything is running smoothly. Reset the idle duration. this.idleDuration = idleDurationStart; // And tick again. - void setTimeout(() => this.tick(), 0); + scheduleTick(); return; } @@ -163,7 +165,7 @@ export class MLWorker { // (limited to some maximum). this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); - this.idleTimeout = setTimeout(next, this.idleDuration * 1000); + this.idleTimeout = setTimeout(scheduleTick, this.idleDuration * 1000); } } From 5f771e923c111017b106f4f16970f4c33c4e2799 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 14:31:46 +0530 Subject: [PATCH 220/466] New flow --- web/apps/photos/src/pages/_app.tsx | 8 ++--- web/packages/new/photos/services/ml/index.ts | 33 ++++++++++++++++++- web/packages/new/photos/services/ml/worker.ts | 1 + 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index f01a540f85..0e971a84aa 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,10 +1,6 @@ import type { AccountsContextT } from "@/accounts/types/context"; import DownloadManager from "@/new/photos/services/download"; -import { - initML, - isFaceIndexingEnabled, - setIsFaceIndexingEnabled, -} from "@/new/photos/services/ml"; +import { disableML, enableML, initML, isFaceIndexingEnabled } from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; @@ -298,7 +294,7 @@ export default function App({ Component, pageProps }: AppProps) { const showNavBar = (show: boolean) => setShowNavBar(show); const updateMlSearchEnabled = async (enabled: boolean) => { try { - setIsFaceIndexingEnabled(enabled); + enabled ? enableML() : disableML(); setMlSearchEnabled(enabled); mlWorkManager.setMlSearchEnabled(enabled); } catch (e) { diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index a2045b8447..f567efefc6 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -183,11 +183,42 @@ export const isFaceIndexingEnabled = () => /** * Update the (locally stored) value of {@link isFaceIndexingEnabled}. */ -export const setIsFaceIndexingEnabled = (enabled: boolean) => +const setIsFaceIndexingEnabled = (enabled: boolean) => enabled ? localStorage.setItem("faceIndexingEnabled", "1") : localStorage.removeItem("faceIndexingEnabled"); +/** + * Return true if the user has enabled machine learning in their preferences. + * + * TODO-ML: The UI for this needs rework. We might retain the older remote (and + * local) storage key, but otherwise this setting now reflects the state of ML + * overall and not just face search. + */ +export const isMLEnabled = () => _isMLEnabled; + +/** + * Enable ML. + * + * Persist the user's preference and trigger a sync. + */ +export const enableML = () => { + setIsFaceIndexingEnabled(true); + _isMLEnabled = true; + triggerMLSync(); +}; + +/** + * Disable ML + * + * Stop any in-progress ML tasks and persist the user's preference. + */ +export const disableML = () => { + terminateMLWorker(); + setIsFaceIndexingEnabled(false); + _isMLEnabled = false; +}; + /** * Sync face DB with the local (and potentially indexable) files that we know * about. Then return the next {@link count} files that still need to be diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 7c461ece21..a5686fdb73 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -101,6 +101,7 @@ export class MLWorker { * representation of the file's contents with us and won't need to download * the file from remote. */ + // TODO-ML: Call me didUpload(file: EnteFile) { // Add the recently uploaded file to the live indexing queue. // From c8f3df3969e34389bf26d2165714e007e8548a1f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 14:34:15 +0530 Subject: [PATCH 221/466] Reorder --- web/packages/new/photos/services/ml/index.ts | 116 +++++++++---------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index f567efefc6..aeb3abe806 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -90,6 +90,64 @@ export const logoutML = async () => { await clearFaceDB(); }; +/** + * Return true if we should show an option to the user to allow them to enable + * face search in the UI. + */ +export const canEnableFaceIndexing = async () => + (await isInternalUser()) || (await isBetaUser()); + +/** + * Return true if the user has enabled machine learning in their preferences. + * + * TODO-ML: The UI for this needs rework. We might retain the older remote (and + * local) storage key, but otherwise this setting now reflects the state of ML + * overall and not just face search. + */ +export const isMLEnabled = () => _isMLEnabled; + +/** + * Enable ML. + * + * Persist the user's preference and trigger a sync. + */ +export const enableML = () => { + setIsFaceIndexingEnabled(true); + _isMLEnabled = true; + triggerMLSync(); +}; + +/** + * Disable ML + * + * Stop any in-progress ML tasks and persist the user's preference. + */ +export const disableML = () => { + terminateMLWorker(); + setIsFaceIndexingEnabled(false); + _isMLEnabled = false; +}; + +/** + * Return true if the user has enabled face indexing in the app's settings. + * + * This setting is persisted locally (in local storage) and is not synced with + * remote. There is a separate setting, "faceSearchEnabled" that is synced with + * remote, but that tracks whether or not the user has enabled face search once + * on any client. This {@link isFaceIndexingEnabled} property, on the other + * hand, denotes whether or not indexing is enabled on the current client. + */ +export const isFaceIndexingEnabled = () => + localStorage.getItem("faceIndexingEnabled") == "1"; + +/** + * Update the (locally stored) value of {@link isFaceIndexingEnabled}. + */ +const setIsFaceIndexingEnabled = (enabled: boolean) => + enabled + ? localStorage.setItem("faceIndexingEnabled", "1") + : localStorage.removeItem("faceIndexingEnabled"); + /** * Trigger a "sync", whatever that means for the ML subsystem. * @@ -161,64 +219,6 @@ export const unidentifiedFaceIDs = async ( return index?.faceEmbedding.faces.map((f) => f.faceID) ?? []; }; -/** - * Return true if we should show an option to the user to allow them to enable - * face search in the UI. - */ -export const canEnableFaceIndexing = async () => - (await isInternalUser()) || (await isBetaUser()); - -/** - * Return true if the user has enabled face indexing in the app's settings. - * - * This setting is persisted locally (in local storage) and is not synced with - * remote. There is a separate setting, "faceSearchEnabled" that is synced with - * remote, but that tracks whether or not the user has enabled face search once - * on any client. This {@link isFaceIndexingEnabled} property, on the other - * hand, denotes whether or not indexing is enabled on the current client. - */ -export const isFaceIndexingEnabled = () => - localStorage.getItem("faceIndexingEnabled") == "1"; - -/** - * Update the (locally stored) value of {@link isFaceIndexingEnabled}. - */ -const setIsFaceIndexingEnabled = (enabled: boolean) => - enabled - ? localStorage.setItem("faceIndexingEnabled", "1") - : localStorage.removeItem("faceIndexingEnabled"); - -/** - * Return true if the user has enabled machine learning in their preferences. - * - * TODO-ML: The UI for this needs rework. We might retain the older remote (and - * local) storage key, but otherwise this setting now reflects the state of ML - * overall and not just face search. - */ -export const isMLEnabled = () => _isMLEnabled; - -/** - * Enable ML. - * - * Persist the user's preference and trigger a sync. - */ -export const enableML = () => { - setIsFaceIndexingEnabled(true); - _isMLEnabled = true; - triggerMLSync(); -}; - -/** - * Disable ML - * - * Stop any in-progress ML tasks and persist the user's preference. - */ -export const disableML = () => { - terminateMLWorker(); - setIsFaceIndexingEnabled(false); - _isMLEnabled = false; -}; - /** * Sync face DB with the local (and potentially indexable) files that we know * about. Then return the next {@link count} files that still need to be From d539eb9b1b62485dd02e7313e24be0c13806a627 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 14:44:31 +0530 Subject: [PATCH 222/466] hook to upload events --- .../src/services/upload/uploadManager.ts | 2 ++ web/packages/new/photos/services/ml/index.ts | 19 +++++++++++++++++++ web/packages/new/photos/services/ml/worker.ts | 4 ++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index b66b2ebf8f..e126e935cf 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -1,6 +1,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { potentialFileTypeFromExtension } from "@/media/live-photo"; import { getLocalFiles } from "@/new/photos/services/files"; +import { onUpload as onUploadML } from "@/new/photos/services/ml"; import type { UploadItem } from "@/new/photos/services/upload/types"; import { RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, @@ -634,6 +635,7 @@ class UploadManager { enteFile: decryptedFile, localFile: file, }); + onUploadML(decryptedFile, file); } catch (e) { log.warn("Ignoring error in fileUploaded handlers", e); } diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index aeb3abe806..357bb02cd9 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -2,6 +2,7 @@ * @file Main thread interface to {@link MLWorker}. */ +import { FILE_TYPE } from "@/media/file-type"; import { isBetaUser, isInternalUser, @@ -20,6 +21,7 @@ import { import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName } from "@/next/app"; import { ensureElectron } from "@/next/electron"; +import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { ensure } from "@/utils/ensure"; import { MLWorker } from "./worker"; @@ -163,6 +165,23 @@ export const triggerMLSync = () => { void worker().then((w) => w.sync()); }; +/** + * Called by the uploader when it uploads a new file from this client. + * + * @param enteFile The {@link EnteFile} that got uploaded. + * + * @param file When available, the web {@link File} object representing the + * contents of the file that got uploaded. + */ +export const onUpload = (enteFile: EnteFile, file: File | undefined) => { + if (!_isMLEnabled) return; + if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; + log.debug(() => ({ t: "ml-liveq", enteFile, file })); + // TODO-ML: 1. Use this file! + // TODO-ML: 2. Handle cases when File is something else (e.g. on desktop). + void worker().then((w) => w.onUpload(enteFile)); +}; + export interface FaceIndexingStatus { /** * Which phase we are in within the indexing pipeline when viewed across the diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index a5686fdb73..6f01533f00 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -102,7 +102,7 @@ export class MLWorker { * the file from remote. */ // TODO-ML: Call me - didUpload(file: EnteFile) { + onUpload(file: EnteFile) { // Add the recently uploaded file to the live indexing queue. // // Limit the queue to some maximum so that we don't keep growing @@ -204,7 +204,7 @@ const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { for (const file of files) { try { await index(file, undefined, userAgent); - // Let the event loop run so that other events (like didUpload) can + // Let the event loop run so that other events (like onUpload) can // be acknowledged and noted down. await wait(0); } catch { From c789684c31869c01c43e72926ec32c2621c6b65b Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 3 Jul 2024 14:53:35 +0530 Subject: [PATCH 223/466] [mob][photos] Tap anywhere on Lock screen to unlock --- .../lock_screen_confirm_password.dart | 2 +- .../lock_screen/lock_screen_confirm_pin.dart | 2 +- .../lock_screen/lock_screen_password.dart | 2 +- .../settings/lock_screen/lock_screen_pin.dart | 2 +- mobile/lib/ui/tools/lock_screen.dart | 193 +++++++++--------- 5 files changed, 105 insertions(+), 96 deletions(-) diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart index e83446ba87..40995d6069 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart @@ -140,7 +140,7 @@ class _LockScreenConfirmPasswordState extends State { height: 75, width: 75, child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, + backgroundColor: colorTheme.fillFaintPressed, value: 1, strokeWidth: 1.5, ), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart index 4681273996..a915a893f6 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart @@ -134,7 +134,7 @@ class _LockScreenConfirmPinState extends State { duration: const Duration(milliseconds: 250), builder: (context, value, _) => CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, + backgroundColor: colorTheme.fillFaintPressed, value: value, color: colorTheme.primary400, strokeWidth: 1.5, diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index 21fdf2fc71..eeac5f1f4d 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -140,7 +140,7 @@ class _LockScreenPasswordState extends State { height: 75, width: 75, child: CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, + backgroundColor: colorTheme.fillFaintPressed, value: 1, strokeWidth: 1.5, ), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 899d3f1e6a..72fc29461b 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -200,7 +200,7 @@ class _LockScreenPinState extends State { duration: const Duration(milliseconds: 250), builder: (context, value, _) => CircularProgressIndicator( - backgroundColor: colorTheme.fillStrong, + backgroundColor: colorTheme.fillFaintPressed, value: value, color: colorTheme.primary400, strokeWidth: 1.5, diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 6683243ab2..f6f1574152 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -65,109 +65,118 @@ class _LockScreenState extends State final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( - body: Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: ExactAssetImage( - 'assets/loading_photos_background_fullscreen.png', + body: GestureDetector( + onTap: () { + isTimerRunning ? null : _showLockScreen(source: "tap"); + }, + child: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: ExactAssetImage( + 'assets/loading_photos_background_fullscreen.png', + ), + fit: BoxFit.cover, ), - fit: BoxFit.cover, ), - ), - child: Center( - child: Column( - children: [ - const Spacer(), - SizedBox( - height: 120, - width: 120, - child: Stack( - alignment: Alignment.center, - children: [ - Container( - width: 82, - height: 82, - decoration: BoxDecoration( - shape: BoxShape.circle, - gradient: LinearGradient( - colors: [ - Colors.grey.shade500.withOpacity(0.2), - Colors.grey.shade50.withOpacity(0.1), - Colors.grey.shade400.withOpacity(0.2), - Colors.grey.shade300.withOpacity(0.4), - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, + child: Center( + child: Column( + children: [ + const Spacer(), + SizedBox( + height: 120, + width: 120, + child: Stack( + alignment: Alignment.center, + children: [ + Container( + width: 82, + height: 82, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.grey.shade500.withOpacity(0.2), + Colors.grey.shade50.withOpacity(0.1), + Colors.grey.shade400.withOpacity(0.2), + Colors.grey.shade300.withOpacity(0.4), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), ), - ), - child: Padding( - padding: const EdgeInsets.all(1.0), - child: Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - color: colorTheme.backgroundBase, + child: Padding( + padding: const EdgeInsets.all(1.0), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorTheme.backgroundBase, + ), ), ), ), - ), - SizedBox( - height: 75, - width: 75, - child: TweenAnimationBuilder( - tween: Tween( - begin: 0, - end: calculateRemainingTime(), - ), - curve: Curves.ease, - duration: const Duration(milliseconds: 50), - builder: (context, value, _) => - CircularProgressIndicator( - backgroundColor: colorTheme.fillFaintPressed, - value: value, - color: colorTheme.primary400, - strokeWidth: 1.5, + SizedBox( + height: 75, + width: 75, + child: TweenAnimationBuilder( + tween: Tween( + begin: 0, + end: calculateRemainingTime(), + ), + curve: Curves.ease, + duration: const Duration(milliseconds: 50), + builder: (context, value, _) => + CircularProgressIndicator( + backgroundColor: colorTheme.fillFaintPressed, + value: value, + color: colorTheme.primary400, + strokeWidth: 1.5, + ), ), ), - ), - IconButtonWidget( - size: 30, - icon: Icons.lock, - iconButtonType: IconButtonType.primary, - iconColor: colorTheme.tabIcon, - ), - ], + IconButtonWidget( + size: 30, + icon: Icons.lock, + iconButtonType: IconButtonType.primary, + iconColor: colorTheme.tabIcon, + ), + ], + ), ), - ), - const Spacer(), - isTimerRunning - ? Stack( - alignment: Alignment.center, - children: [ - Text( - "Too many incorrect attempts", + const Spacer(), + isTimerRunning + ? Stack( + alignment: Alignment.center, + children: [ + Text( + "Too many incorrect attempts", + style: textTheme.body, + ) + .animate( + delay: const Duration(milliseconds: 2000), + ) + .fadeOut(duration: 400.ms), + Text( + formatTime(remainingTime), + style: textTheme.body, + ) + .animate( + delay: const Duration(milliseconds: 2250), + ) + .fadeIn(duration: 400.ms), + ], + ) + : GestureDetector( + onTap: () => _showLockScreen(source: "tap"), + child: Text( + "Tap to unlock", style: textTheme.body, - ) - .animate(delay: const Duration(milliseconds: 2000)) - .fadeOut(duration: 400.ms), - Text( - formatTime(remainingTime), - style: textTheme.body, - ) - .animate(delay: const Duration(milliseconds: 2250)) - .fadeIn(duration: 400.ms), - ], - ) - : GestureDetector( - onTap: () => _showLockScreen(source: "tap"), - child: Text( - "Tap to unlock", - style: textTheme.body, + ), ), - ), - const Padding( - padding: EdgeInsets.only(bottom: 20), - ), - ], + const Padding( + padding: EdgeInsets.only(bottom: 20), + ), + ], + ), ), ), ), From b43e6e598174af2be9bcd93a571b27d96df7231c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 15:07:16 +0530 Subject: [PATCH 224/466] Lint fix --- web/apps/photos/src/pages/_app.tsx | 7 ++++++- web/packages/new/photos/services/ml/index.ts | 2 +- web/packages/new/photos/services/ml/worker.ts | 1 - web/packages/next/kv.ts | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 0e971a84aa..07ea335ec3 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -1,6 +1,11 @@ import type { AccountsContextT } from "@/accounts/types/context"; import DownloadManager from "@/new/photos/services/download"; -import { disableML, enableML, initML, isFaceIndexingEnabled } from "@/new/photos/services/ml"; +import { + disableML, + enableML, + initML, + isFaceIndexingEnabled, +} from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 357bb02cd9..8d746b3e01 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -120,7 +120,7 @@ export const enableML = () => { }; /** - * Disable ML + * Disable ML. * * Stop any in-progress ML tasks and persist the user's preference. */ diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 6f01533f00..0915c20138 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -101,7 +101,6 @@ export class MLWorker { * representation of the file's contents with us and won't need to download * the file from remote. */ - // TODO-ML: Call me onUpload(file: EnteFile) { // Add the recently uploaded file to the live indexing queue. // diff --git a/web/packages/next/kv.ts b/web/packages/next/kv.ts index a74bf872ca..ba00b96d7b 100644 --- a/web/packages/next/kv.ts +++ b/web/packages/next/kv.ts @@ -104,13 +104,13 @@ export const clearKVDB = async () => { */ export const getKV = async (key: string) => _getKV(key, "string"); -export const _getKV = async ( +export const _getKV = async ( key: string, type: string, ): Promise => { const db = await kvDB(); const v = await db.get("kv", key); - if (v === undefined) return v; + if (v === undefined) return undefined; if (typeof v != type) throw new Error( `Expected the value corresponding to key ${key} to be a ${type}, but instead got ${v}`, From f570773f23f3248b43d154f0ac546ef1b6349b9b Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 15:49:13 +0530 Subject: [PATCH 225/466] [mob][photos] Use better names --- mobile/lib/ui/tools/lock_screen.dart | 51 +++++++++++++++------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index f6f1574152..1fa93256dc 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -31,9 +31,9 @@ class _LockScreenState extends State bool _hasAuthenticationFailed = false; int? lastAuthenticatingTime; bool isTimerRunning = false; - int lockedTime = 0; + int lockedTimeInSeconds = 0; int invalidAttemptCount = 0; - int remainingTime = 0; + int remainingTimeInSeconds = 0; bool showErrorMessage = true; final _lockscreenSetting = LockScreenSettings.instance; late final AnimationController _controller = AnimationController( @@ -120,7 +120,7 @@ class _LockScreenState extends State child: TweenAnimationBuilder( tween: Tween( begin: 0, - end: calculateRemainingTime(), + end: _getFractionOfTimeElapsed(), ), curve: Curves.ease, duration: const Duration(milliseconds: 50), @@ -156,7 +156,7 @@ class _LockScreenState extends State ) .fadeOut(duration: 400.ms), Text( - formatTime(remainingTime), + _formatTime(remainingTimeInSeconds), style: textTheme.body, ) .animate( @@ -268,20 +268,20 @@ class _LockScreenState extends State super.dispose(); } - Future startLockTimer(int time) async { + Future startLockTimer(int timeInSeconds) async { if (isTimerRunning) { return; } setState(() { isTimerRunning = true; - remainingTime = time; + remainingTimeInSeconds = timeInSeconds; }); - while (remainingTime > 0) { + while (remainingTimeInSeconds > 0) { await Future.delayed(const Duration(seconds: 1)); setState(() { - remainingTime--; + remainingTimeInSeconds--; }); } @@ -290,15 +290,15 @@ class _LockScreenState extends State }); } - double calculateRemainingTime() { + double _getFractionOfTimeElapsed() { final int totalLockedTime = - lockedTime = pow(2, invalidAttemptCount - 5).toInt() * 30; - if (remainingTime == 0) return 1; + lockedTimeInSeconds = pow(2, invalidAttemptCount - 5).toInt() * 30; + if (remainingTimeInSeconds == 0) return 1; - return 1 - remainingTime / totalLockedTime; + return 1 - remainingTimeInSeconds / totalLockedTime; } - String formatTime(int seconds) { + String _formatTime(int seconds) { final int hours = seconds ~/ 3600; final int minutes = (seconds % 3600) ~/ 60; final int remainingSeconds = seconds % 60; @@ -313,15 +313,17 @@ class _LockScreenState extends State } Future _showLockScreen({String source = ''}) async { - final int id = DateTime.now().millisecondsSinceEpoch; - _logger.info("Showing lock screen $source $id"); + final int currentTimestamp = DateTime.now().millisecondsSinceEpoch; + _logger.info("Showing lock screen $source $currentTimestamp"); try { - if (id < _lockscreenSetting.getlastInvalidAttemptTime() && + if (currentTimestamp < _lockscreenSetting.getlastInvalidAttemptTime() && !_isShowingLockScreen) { - final int time = - (_lockscreenSetting.getlastInvalidAttemptTime() - id) ~/ 1000; + final int remainingTime = + (_lockscreenSetting.getlastInvalidAttemptTime() - + currentTimestamp) ~/ + 1000; - await startLockTimer(time); + await startLockTimer(remainingTime); } _isShowingLockScreen = true; final result = isTimerRunning @@ -331,14 +333,14 @@ class _LockScreenState extends State context.l10n.authToViewYourMemories, isOpeningApp: true, ); - _logger.finest("LockScreen Result $result $id"); + _logger.finest("LockScreen Result $result"); _isShowingLockScreen = false; if (result) { lastAuthenticatingTime = DateTime.now().millisecondsSinceEpoch; AppLock.of(context)!.didUnlock(); await _lockscreenSetting.setInvalidAttemptCount(0); setState(() { - lockedTime = 15; + lockedTimeInSeconds = 15; isTimerRunning = false; }); } else { @@ -353,11 +355,12 @@ class _LockScreenState extends State return; } - lockedTime = pow(2, invalidAttemptCount - 5).toInt() * 30; + lockedTimeInSeconds = pow(2, invalidAttemptCount - 5).toInt() * 30; await _lockscreenSetting.setLastInvalidAttemptTime( - DateTime.now().millisecondsSinceEpoch + lockedTime * 1000, + DateTime.now().millisecondsSinceEpoch + + lockedTimeInSeconds * 1000, ); - await startLockTimer(lockedTime); + await startLockTimer(lockedTimeInSeconds); } _hasAuthenticationFailed = true; _logger.info("Authentication failed"); From 6e6da8152dc1a992c8c99f4df2cd2f1776568d29 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 3 Jul 2024 16:20:24 +0530 Subject: [PATCH 226/466] [mob][photos] UI update --- .../lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart | 3 +-- mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart index a915a893f6..9ff17501a9 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart @@ -159,6 +159,7 @@ class _LockScreenConfirmPinState extends State { const Padding(padding: EdgeInsets.all(12)), Pinput( length: 4, + showCursor: false, useNativeKeyboard: false, controller: _confirmPinController, defaultPinTheme: _pinPutDecoration, @@ -187,8 +188,6 @@ class _LockScreenConfirmPinState extends State { color: colorTheme.warning400, ), ), - textStyle: - textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), errorText: '', obscureText: true, diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 72fc29461b..0f20cdbe54 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -225,6 +225,7 @@ class _LockScreenPinState extends State { const Padding(padding: EdgeInsets.all(12)), Pinput( length: 4, + showCursor: false, useNativeKeyboard: false, controller: _pinController, defaultPinTheme: _pinPutDecoration, @@ -253,8 +254,6 @@ class _LockScreenPinState extends State { color: colorTheme.warning400, ), ), - textStyle: - textTheme.h3Bold.copyWith(color: colorTheme.warning400), ), forceErrorState: isPinValid, obscureText: true, From 5dbe46092a54478989ab4681502fcc6307abf0e5 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 17:35:41 +0530 Subject: [PATCH 227/466] [mob][photos] lock screen UI tweaks --- mobile/lib/ui/tools/lock_screen.dart | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 1fa93256dc..cd3e99a02d 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -122,8 +122,7 @@ class _LockScreenState extends State begin: 0, end: _getFractionOfTimeElapsed(), ), - curve: Curves.ease, - duration: const Duration(milliseconds: 50), + duration: const Duration(seconds: 1), builder: (context, value, _) => CircularProgressIndicator( backgroundColor: colorTheme.fillFaintPressed, @@ -149,31 +148,37 @@ class _LockScreenState extends State children: [ Text( "Too many incorrect attempts", - style: textTheme.body, + style: textTheme.small, ) .animate( delay: const Duration(milliseconds: 2000), ) - .fadeOut(duration: 400.ms), + .fadeOut( + duration: 400.ms, + curve: Curves.easeInOutCirc, + ), Text( _formatTime(remainingTimeInSeconds), - style: textTheme.body, + style: textTheme.small, ) .animate( delay: const Duration(milliseconds: 2250), ) - .fadeIn(duration: 400.ms), + .fadeIn( + duration: 400.ms, + curve: Curves.easeInOutCirc, + ), ], ) : GestureDetector( onTap: () => _showLockScreen(source: "tap"), child: Text( "Tap to unlock", - style: textTheme.body, + style: textTheme.small, ), ), const Padding( - padding: EdgeInsets.only(bottom: 20), + padding: EdgeInsets.only(bottom: 24), ), ], ), From 39a3a48fd309594e7d6aa7edeba9e10656ed4159 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 3 Jul 2024 17:50:30 +0530 Subject: [PATCH 228/466] [mob][photos] show error dialog on no device lock enabled --- .../lock_screen/lock_screen_options.dart | 29 +++++++++-------- .../ui/settings/security_section_widget.dart | 31 ++++++++++++------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart index a274944996..fc21c252d6 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart @@ -125,14 +125,27 @@ class _LockScreenOptionsState extends State { title: 'App lock', ), alignCaptionedTextToLeft: true, - isTopBorderRadiusRemoved: false, - isBottomBorderRadiusRemoved: false, + singleBorderRadius: 8, menuItemColor: colorTheme.fillFaint, trailingWidget: ToggleSwitchWidget( value: () => appLock, onChanged: () => _onToggleSwitch(), ), ), + !appLock + ? Padding( + padding: const EdgeInsets.only( + top: 14, + left: 14, + right: 12, + ), + child: Text( + 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', + style: textTheme.miniFaint, + textAlign: TextAlign.left, + ), + ) + : const SizedBox(), const Padding( padding: EdgeInsets.only(top: 24), ), @@ -195,17 +208,7 @@ class _LockScreenOptionsState extends State { ), ], ) - : Padding( - padding: const EdgeInsets.only( - left: 14, - right: 12, - ), - child: Text( - 'Choose between your device\'s default lock screen and a custom lock screen with a PIN or password.', - style: textTheme.miniFaint, - textAlign: TextAlign.left, - ), - ), + : Container(), ], ), ), diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 490dacb3fc..61d302b6a5 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -2,6 +2,7 @@ import 'dart:async'; import "dart:typed_data"; import 'package:flutter/material.dart'; +import "package:local_auth/local_auth.dart"; import "package:logging/logging.dart"; import 'package:photos/core/configuration.dart'; import 'package:photos/core/event_bus.dart'; @@ -146,17 +147,25 @@ class _SecuritySectionWidgetState extends State { trailingIcon: Icons.chevron_right_outlined, trailingIconIsMuted: true, onTap: () async { - final bool result = await requestAuthentication( - context, - S.of(context).authToChangeLockscreenSetting, - ); - if (result) { - await Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) { - return const LockScreenOptions(); - }, - ), + if (await LocalAuthentication().isDeviceSupported()) { + final bool result = await requestAuthentication( + context, + S.of(context).authToChangeLockscreenSetting, + ); + if (result) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const LockScreenOptions(); + }, + ), + ); + } + } else { + await showErrorDialog( + context, + "", + "To enable app lock, please setup device passcode or screen lock in your system settings.", ); } }, From c66a74d1c70566cfdd60a64147c1673731e7ada4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 18:09:15 +0530 Subject: [PATCH 229/466] Cleanup --- .../new/photos/services/ml/face.worker.ts | 33 -- web/packages/new/photos/services/ml/index.ts | 43 +-- .../services/ml/machineLearningService.ts | 221 ----------- .../new/photos/services/ml/mlWorkManager.ts | 359 ------------------ web/packages/new/photos/services/ml/worker.ts | 44 ++- .../shared/storage/localStorage/helpers.ts | 2 - 6 files changed, 42 insertions(+), 660 deletions(-) delete mode 100644 web/packages/new/photos/services/ml/face.worker.ts delete mode 100644 web/packages/new/photos/services/ml/machineLearningService.ts delete mode 100644 web/packages/new/photos/services/ml/mlWorkManager.ts diff --git a/web/packages/new/photos/services/ml/face.worker.ts b/web/packages/new/photos/services/ml/face.worker.ts deleted file mode 100644 index d313ecfe09..0000000000 --- a/web/packages/new/photos/services/ml/face.worker.ts +++ /dev/null @@ -1,33 +0,0 @@ -import downloadManager from "@/new/photos/services/download"; -import type { EnteFile } from "@/new/photos/types/file"; -import { expose } from "comlink"; -import mlService from "./machineLearningService"; - -export class DedicatedMLWorker { - public async closeLocalSyncContext() { - return mlService.closeLocalSyncContext(); - } - - public async syncLocalFile( - token: string, - userID: number, - userAgent: string, - enteFile: EnteFile, - localFile: globalThis.File, - ) { - return mlService.syncLocalFile( - token, - userID, - userAgent, - enteFile, - localFile, - ); - } - - public async sync(token: string, userID: number, userAgent: string) { - await downloadManager.init(token); - return mlService.sync(token, userID, userAgent); - } -} - -expose(DedicatedMLWorker, self); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 8d746b3e01..af862b1633 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -1,5 +1,5 @@ /** - * @file Main thread interface to {@link MLWorker}. + * @file Main thread interface to the ML subsystem. */ import { FILE_TYPE } from "@/media/file-type"; @@ -7,23 +7,16 @@ import { isBetaUser, isInternalUser, } from "@/new/photos/services/feature-flags"; -import { - getAllLocalFiles, - getLocalTrashedFiles, -} from "@/new/photos/services/files"; import { clearFaceDB, faceIndex, - indexableFileIDs, indexedAndIndexableCounts, - updateAssumingLocalFiles, } from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; -import { ensure } from "@/utils/ensure"; import { MLWorker } from "./worker"; /** @@ -237,37 +230,3 @@ export const unidentifiedFaceIDs = async ( const index = await faceIndex(enteFile.id); return index?.faceEmbedding.faces.map((f) => f.faceID) ?? []; }; - -/** - * Sync face DB with the local (and potentially indexable) files that we know - * about. Then return the next {@link count} files that still need to be - * indexed. - * - * For specifics of what a "sync" entails, see {@link updateAssumingLocalFiles}. - * - * @param userID Sync only files owned by a {@link userID} with the face DB. - * - * @param count Limit the resulting list of indexable files to {@link count}. - */ -// TODO-ML: Move to worker -export const syncWithLocalFilesAndGetFilesToIndex = async ( - userID: number, - count: number, -): Promise => { - const isIndexable = (f: EnteFile) => f.ownerID == userID; - - const localFiles = await getAllLocalFiles(); - const localFilesByID = new Map( - localFiles.filter(isIndexable).map((f) => [f.id, f]), - ); - - const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); - - await updateAssumingLocalFiles( - Array.from(localFilesByID.keys()), - localTrashFileIDs, - ); - - const fileIDsToIndex = await indexableFileIDs(count); - return fileIDsToIndex.map((id) => ensure(localFilesByID.get(id))); -}; diff --git a/web/packages/new/photos/services/ml/machineLearningService.ts b/web/packages/new/photos/services/ml/machineLearningService.ts deleted file mode 100644 index 54c54dcce7..0000000000 --- a/web/packages/new/photos/services/ml/machineLearningService.ts +++ /dev/null @@ -1,221 +0,0 @@ -import type { EnteFile } from "@/new/photos/types/file"; -import log from "@/next/log"; -import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; -import PQueue from "p-queue"; -import { syncWithLocalFilesAndGetFilesToIndex } from "."; -import { index } from "./worker"; - -const batchSize = 200; - -class MLSyncContext { - public token: string; - public userID: number; - public userAgent: string; - - public localFilesMap: Map | undefined; - public outOfSyncFiles: EnteFile[]; - public nSyncedFiles: number; - public error?: unknown; - - public syncQueue: PQueue; - - constructor(token: string, userID: number, userAgent: string) { - this.token = token; - this.userID = userID; - this.userAgent = userAgent; - - this.outOfSyncFiles = []; - this.nSyncedFiles = 0; - - const concurrency = getConcurrency(); - this.syncQueue = new PQueue({ concurrency }); - } - - public async dispose() { - this.localFilesMap = undefined; - await this.syncQueue.onIdle(); - this.syncQueue.removeAllListeners(); - } -} - -const getConcurrency = () => - Math.max(2, Math.ceil(navigator.hardwareConcurrency / 2)); - -class MachineLearningService { - private localSyncContext: Promise | undefined; - private syncContext: Promise | undefined; - - public async sync( - token: string, - userID: number, - userAgent: string, - ): Promise { - if (!token) { - throw Error("Token needed by ml service to sync file"); - } - - const syncContext = await this.getSyncContext(token, userID, userAgent); - - syncContext.outOfSyncFiles = await syncWithLocalFilesAndGetFilesToIndex( - userID, - batchSize, - ); - - if (syncContext.outOfSyncFiles.length > 0) { - await this.syncFiles(syncContext); - } - - const error = syncContext.error; - const nOutOfSyncFiles = syncContext.outOfSyncFiles.length; - return !error && nOutOfSyncFiles > 0; - } - - private async syncFiles(syncContext: MLSyncContext) { - try { - const functions = syncContext.outOfSyncFiles.map( - (outOfSyncfile) => async () => { - await this.syncFileWithErrorHandler( - syncContext, - outOfSyncfile, - ); - // TODO: just store file and faces count in syncContext - }, - ); - syncContext.syncQueue.on("error", () => { - syncContext.syncQueue.clear(); - }); - await syncContext.syncQueue.addAll(functions); - } catch (error) { - console.error("Error in sync job: ", error); - syncContext.error = error; - } - await syncContext.syncQueue.onIdle(); - } - - private async getSyncContext( - token: string, - userID: number, - userAgent: string, - ) { - if (!this.syncContext) { - log.info("Creating syncContext"); - - // TODO-ML(MR): Keep as promise for now. - this.syncContext = new Promise((resolve) => { - resolve(new MLSyncContext(token, userID, userAgent)); - }); - } else { - log.info("reusing existing syncContext"); - } - return this.syncContext; - } - - // private async getLocalSyncContext( - // token: string, - // userID: number, - // userAgent: string, - // ) { - // // TODO-ML(MR): This is updating the file ML version. verify. - // if (!this.localSyncContext) { - // log.info("Creating localSyncContext"); - // // TODO-ML(MR): - // this.localSyncContext = new Promise((resolve) => { - // resolve(new MLSyncContext(token, userID, userAgent)); - // }); - // } else { - // log.info("reusing existing localSyncContext"); - // } - // return this.localSyncContext; - // } - - public async closeLocalSyncContext() { - if (this.localSyncContext) { - log.info("Closing localSyncContext"); - const syncContext = await this.localSyncContext; - await syncContext.dispose(); - this.localSyncContext = undefined; - } - } - - public async syncLocalFile( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _: string, - // token: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - __: number, - // userID: number, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ___: string, - // userAgent: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ____: EnteFile, - // enteFile: EnteFile, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _____?: globalThis.File, - // localFile?: globalThis.File, - ) { - /* TODO-ML(MR): Currently not used - const syncContext = await this.getLocalSyncContext( - token, - userID, - userAgent, - ); - - try { - await this.syncFileWithErrorHandler( - syncContext, - enteFile, - localFile, - ); - - if (syncContext.nSyncedFiles >= batchSize) { - await this.closeLocalSyncContext(); - } - // await syncContext.dispose(); - } catch (e) { - console.error("Error while syncing local file: ", enteFile.id, e); - } - */ - } - - private async syncFileWithErrorHandler( - syncContext: MLSyncContext, - enteFile: EnteFile, - localFile?: globalThis.File, - ) { - try { - await this.syncFile(enteFile, localFile, syncContext.userAgent); - syncContext.nSyncedFiles += 1; - } catch (e) { - let error = e; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if ("status" in (error as any)) { - const parsedMessage = parseUploadErrorCodes(error); - error = parsedMessage; - } - if (error instanceof Error) { - // TODO: throw errors not related to specific file - // sync job run should stop after these errors - // don't persist these errors against file, - // can include indexeddb/cache errors too - switch (error.message) { - case CustomError.SESSION_EXPIRED: - case CustomError.NETWORK_ERROR: - throw error; - } - } - - syncContext.nSyncedFiles += 1; - } - } - - private async syncFile( - enteFile: EnteFile, - file: File | undefined, - userAgent: string, - ) { - await index(enteFile, file, userAgent); - } -} - -export default new MachineLearningService(); diff --git a/web/packages/new/photos/services/ml/mlWorkManager.ts b/web/packages/new/photos/services/ml/mlWorkManager.ts deleted file mode 100644 index 3487af4da3..0000000000 --- a/web/packages/new/photos/services/ml/mlWorkManager.ts +++ /dev/null @@ -1,359 +0,0 @@ -import { FILE_TYPE } from "@/media/file-type"; -import type { EnteFile } from "@/new/photos/types/file"; -import { clientPackageName } from "@/next/app"; -import { ensureElectron } from "@/next/electron"; -import log from "@/next/log"; -import { ComlinkWorker } from "@/next/worker/comlink-worker"; -import { wait } from "@/utils/promise"; -import { Events, eventBus } from "@ente/shared/events"; -import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; -import debounce from "debounce"; -import PQueue from "p-queue"; -import type { DedicatedMLWorker } from "./face.worker"; - -export type JobState = "Scheduled" | "Running" | "NotScheduled"; - -const createFaceWebWorker = () => - new Worker(new URL("face.worker.ts", import.meta.url)); - -const createFaceComlinkWorker = (name: string) => - new ComlinkWorker(name, createFaceWebWorker()); - -export class MLSyncJob { - private runCallback: () => Promise; - private state: JobState; - private stopped: boolean; - private intervalSec = 5; - private nextTimeoutId: ReturnType | undefined; - - constructor(runCallback: () => Promise) { - this.runCallback = runCallback; - this.state = "NotScheduled"; - this.stopped = true; - this.resetInterval(); - } - - public resetInterval() { - this.intervalSec = 5; - } - - public start() { - this.stopped = false; - this.resetInterval(); - if (this.state !== "Running") { - this.scheduleNext(); - } else { - log.info("Job already running, not scheduling"); - } - } - - private scheduleNext() { - if (this.state === "Scheduled" || this.nextTimeoutId) { - this.clearScheduled(); - } - - this.nextTimeoutId = setTimeout( - () => this.run(), - this.intervalSec * 1000, - ); - this.state = "Scheduled"; - log.info("Scheduled next job after: ", this.intervalSec); - } - - async run() { - this.nextTimeoutId = undefined; - this.state = "Running"; - - try { - if (await this.runCallback()) { - this.resetInterval(); - } else { - this.intervalSec = Math.min(960, this.intervalSec * 2); - } - } catch (e) { - console.error("Error while running Job: ", e); - } finally { - this.state = "NotScheduled"; - !this.stopped && this.scheduleNext(); - } - } - - // currently client is responsible to terminate running job - public stop() { - this.stopped = true; - this.clearScheduled(); - } - - private clearScheduled() { - clearTimeout(this.nextTimeoutId); - this.nextTimeoutId = undefined; - this.state = "NotScheduled"; - log.info("Cleared next job"); - } -} - -class MLWorkManager { - private mlSyncJob: MLSyncJob | undefined; - private syncJobWorker: ComlinkWorker | undefined; - - private debouncedLiveSyncIdle: () => void; - private debouncedFilesUpdated: () => void; - - private liveSyncQueue: PQueue; - private liveSyncWorker: ComlinkWorker | undefined; - private mlSearchEnabled: boolean; - - public isSyncing = false; - - constructor() { - this.liveSyncQueue = new PQueue({ - concurrency: 1, - // TODO: temp, remove - timeout: 300 * 1000, - throwOnTimeout: true, - }); - this.mlSearchEnabled = false; - - this.debouncedLiveSyncIdle = debounce( - () => void this.onLiveSyncIdle(), - 30 * 1000, - ); - this.debouncedFilesUpdated = debounce( - () => - void (this.mlSearchEnabled && this.localFilesUpdatedHandler()), - 30 * 1000, - ); - } - - public isMlSearchEnabled() { - return this.mlSearchEnabled; - } - - public async setMlSearchEnabled(enabled: boolean) { - if (!this.mlSearchEnabled && enabled) { - log.info("Enabling MLWorkManager"); - this.mlSearchEnabled = true; - - logQueueStats(this.liveSyncQueue, "livesync"); - this.liveSyncQueue.on("idle", this.debouncedLiveSyncIdle, this); - - eventBus.on( - Events.FILE_UPLOADED, - this.fileUploadedHandler.bind(this), - this, - ); - eventBus.on( - Events.LOCAL_FILES_UPDATED, - this.debouncedFilesUpdated, - this, - ); - - // TODO-ML: - // await this.startSyncJob(); - await wait(0); - } else if (this.mlSearchEnabled && !enabled) { - log.info("Disabling MLWorkManager"); - this.mlSearchEnabled = false; - - this.liveSyncQueue.removeAllListeners(); - - eventBus.removeListener( - Events.FILE_UPLOADED, - this.fileUploadedHandler.bind(this), - this, - ); - eventBus.removeListener( - Events.LOCAL_FILES_UPDATED, - this.debouncedFilesUpdated, - this, - ); - - this.stopSyncJob(); - } - } - - async logout() { - await this.setMlSearchEnabled(false); - this.stopSyncJob(); - this.mlSyncJob = undefined; - await this.terminateLiveSyncWorker(); - } - - private async fileUploadedHandler(arg: { - enteFile: EnteFile; - localFile: globalThis.File; - }) { - if (!this.mlSearchEnabled) { - return; - } - log.info("fileUploadedHandler: ", arg.enteFile.id); - if (arg.enteFile.metadata.fileType !== FILE_TYPE.IMAGE) { - log.info("Skipping non image file for local file processing"); - return; - } - try { - await this.syncLocalFile(arg.enteFile, arg.localFile); - } catch (error) { - console.error("Error in syncLocalFile: ", arg.enteFile.id, error); - this.liveSyncQueue.clear(); - // logError(e, 'Failed in ML fileUploaded Handler'); - } - } - - private async localFilesUpdatedHandler() { - log.info("Local files updated"); - await this.startSyncJob(); - } - - // Live Sync - // private async getLiveSyncWorker() { - // if (!this.liveSyncWorker) { - // this.liveSyncWorker = createFaceComlinkWorker("ml-sync-live"); - // } - - // return await this.liveSyncWorker.remote; - // } - - private async terminateLiveSyncWorker() { - if (!this.liveSyncWorker) { - return; - } - try { - const liveSyncWorker = await this.liveSyncWorker.remote; - await liveSyncWorker.closeLocalSyncContext(); - } catch (error) { - console.error( - "Error while closing local sync context, terminating worker", - error, - ); - } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - this.liveSyncWorker?.terminate(); - this.liveSyncWorker = undefined; - } - - private async onLiveSyncIdle() { - log.info("Live sync idle"); - await this.terminateLiveSyncWorker(); - await (this.mlSearchEnabled && this.startSyncJob()); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await - public async syncLocalFile(_: EnteFile, __: globalThis.File) { - return; - /* - TODO-ML(MR): Disable live sync for now - await this.liveSyncQueue.add(async () => { - this.stopSyncJob(); - const token = getToken(); - const userID = getUserID(); - const userAgent = await getUserAgent(); - const mlWorker = await this.getLiveSyncWorker(); - return mlWorker.syncLocalFile( - token, - userID, - userAgent, - enteFile, - localFile, - ); - }); - */ - } - - // Sync Job - private async getSyncJobWorker() { - if (!this.syncJobWorker) { - this.syncJobWorker = createFaceComlinkWorker("ml-sync-job"); - } - - return await this.syncJobWorker.remote; - } - - private terminateSyncJobWorker() { - this.syncJobWorker?.terminate(); - this.syncJobWorker = undefined; - } - - /** - * Returns `false` to indicate that either an error occurred, or there are - * not more files to process, or that we cannot currently process files. - * - * Which means that when it returns true, all is well and there are more - * things pending to process, so we should chug along at full speed. - */ - private async runMLSyncJob(): Promise { - this.isSyncing = true; - try { - // TODO: skipping is not required if we are caching chunks through service worker - // currently worker chunk itself is not loaded when network is not there - if (!navigator.onLine) { - log.info( - "Skipping ml-sync job run as not connected to internet.", - ); - return false; - } - - const token = getToken(); - const userID = getUserID() as number; - const userAgent = await getUserAgent(); - const jobWorkerProxy = await this.getSyncJobWorker(); - - return await jobWorkerProxy.sync(token, userID, userAgent); - // this.terminateSyncJobWorker(); - // TODO: redirect/refresh to gallery in case of session_expired, stop ml sync job - } catch (e) { - log.error("Failed to run MLSync Job", e); - } finally { - this.isSyncing = false; - } - return false; - } - - // eslint-disable-next-line @typescript-eslint/require-await - public async startSyncJob() { - try { - log.info("MLWorkManager.startSyncJob"); - if (!this.mlSearchEnabled) { - log.info("ML Search disabled, not starting ml sync job"); - return; - } - if (!getToken()) { - log.info("User not logged in, not starting ml sync job"); - return; - } - if (!this.mlSyncJob) { - this.mlSyncJob = new MLSyncJob(() => this.runMLSyncJob()); - } - this.mlSyncJob.start(); - } catch (e) { - log.error("Failed to start MLSync Job", e); - } - } - - public stopSyncJob() { - try { - log.info("MLWorkManager.stopSyncJob"); - this.mlSyncJob?.stop(); - this.terminateSyncJobWorker(); - } catch (e) { - log.error("Failed to stop MLSync Job", e); - } - } -} - -export default new MLWorkManager(); - -export function logQueueStats(queue: PQueue, name: string) { - queue.on("active", () => - log.info( - `queuestats: ${name}: Active, Size: ${queue.size} Pending: ${queue.pending}`, - ), - ); - queue.on("idle", () => log.info(`queuestats: ${name}: Idle`)); - queue.on("error", (error) => - console.error(`queuestats: ${name}: Error, `, error), - ); -} - -const getUserAgent = async () => - `${clientPackageName}/${await ensureElectron().appVersion()}`; diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 0915c20138..c8c5752fa4 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,5 +1,10 @@ import downloadManager from "@/new/photos/services/download"; -import { markIndexingFailed, saveFaceIndex } from "@/new/photos/services/ml/db"; +import { + indexableFileIDs, + markIndexingFailed, + saveFaceIndex, + updateAssumingLocalFiles, +} from "@/new/photos/services/ml/db"; import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; import { getKVN } from "@/next/kv"; @@ -8,8 +13,8 @@ import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; import { expose } from "comlink"; -import { syncWithLocalFilesAndGetFilesToIndex } from "."; import { fileLogID } from "../../utils/file"; +import { getAllLocalFiles, getLocalTrashedFiles } from "../files"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { indexFaces } from "./index-face"; @@ -116,7 +121,7 @@ export class MLWorker { this.liveQ.push(file); this.wakeUp(); } else { - log.debug(() => "Ignoring liveQ item since liveQ is full"); + log.debug(() => "Ignoring live item since liveQ is full"); } } @@ -214,6 +219,39 @@ const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { return allSuccess; }; +/** + * Sync face DB with the local (and potentially indexable) files that we know + * about. Then return the next {@link count} files that still need to be + * indexed. + * + * For specifics of what a "sync" entails, see {@link updateAssumingLocalFiles}. + * + * @param userID Sync only files owned by a {@link userID} with the face DB. + * + * @param count Limit the resulting list of indexable files to {@link count}. + */ +const syncWithLocalFilesAndGetFilesToIndex = async ( + userID: number, + count: number, +): Promise => { + const isIndexable = (f: EnteFile) => f.ownerID == userID; + + const localFiles = await getAllLocalFiles(); + const localFilesByID = new Map( + localFiles.filter(isIndexable).map((f) => [f.id, f]), + ); + + const localTrashFileIDs = (await getLocalTrashedFiles()).map((f) => f.id); + + await updateAssumingLocalFiles( + Array.from(localFilesByID.keys()), + localTrashFileIDs, + ); + + const fileIDsToIndex = await indexableFileIDs(count); + return fileIDsToIndex.map((id) => ensure(localFilesByID.get(id))); +}; + /** * Index faces in a file, save the persist the results locally, and put them * on remote. diff --git a/web/packages/shared/storage/localStorage/helpers.ts b/web/packages/shared/storage/localStorage/helpers.ts index 390ea93d92..7f46b680dd 100644 --- a/web/packages/shared/storage/localStorage/helpers.ts +++ b/web/packages/shared/storage/localStorage/helpers.ts @@ -5,8 +5,6 @@ export const getToken = (): string => { return token; }; -export const getUserID = () => getData(LS_KEYS.USER)?.id; - export const isFirstLogin = () => getData(LS_KEYS.IS_FIRST_LOGIN)?.status ?? false; From c0a6918c0934135e4240b7be42041a329ff0b6fd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 18:11:28 +0530 Subject: [PATCH 230/466] Trim --- web/apps/photos/src/pages/_app.tsx | 24 ++++--------------- web/apps/photos/src/services/logout.ts | 7 ------ web/apps/photos/src/services/searchService.ts | 7 ++---- web/packages/new/photos/services/ml/index.ts | 10 ++++---- 4 files changed, 12 insertions(+), 36 deletions(-) diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx index 07ea335ec3..be914720b3 100644 --- a/web/apps/photos/src/pages/_app.tsx +++ b/web/apps/photos/src/pages/_app.tsx @@ -4,9 +4,8 @@ import { disableML, enableML, initML, - isFaceIndexingEnabled, + isMLEnabled, } from "@/new/photos/services/ml"; -import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import { clientPackageName, staticAppTitle } from "@/next/app"; import { CustomHead } from "@/next/components/Head"; import { setupI18n } from "@/next/i18n"; @@ -183,6 +182,9 @@ export default function App({ Component, pageProps }: AppProps) { } }; + initML(); + setMlSearchEnabled(isMLEnabled()); + electron.onOpenURL(handleOpenURL); electron.onAppUpdateAvailable(showUpdateDialog); @@ -192,23 +194,6 @@ export default function App({ Component, pageProps }: AppProps) { }; }, []); - useEffect(() => { - if (!isElectron()) { - return; - } - const loadMlSearchState = async () => { - try { - const enabled = isFaceIndexingEnabled(); - setMlSearchEnabled(enabled); - mlWorkManager.setMlSearchEnabled(enabled); - initML(); - } catch (e) { - log.error("Error while loading mlSearchEnabled", e); - } - }; - loadMlSearchState(); - }, []); - useEffect(() => { setMapEnabled(getLocalMapEnabled()); }, []); @@ -301,7 +286,6 @@ export default function App({ Component, pageProps }: AppProps) { try { enabled ? enableML() : disableML(); setMlSearchEnabled(enabled); - mlWorkManager.setMlSearchEnabled(enabled); } catch (e) { log.error("Error while updating mlSearchEnabled", e); } diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index 99bed49ba9..afe8268708 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -2,7 +2,6 @@ import { accountLogout } from "@/accounts/services/logout"; import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import { logoutML, terminateMLWorker } from "@/new/photos/services/ml"; -import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import log from "@/next/log"; import { clipService } from "services/clip-service"; import exportService from "./export"; @@ -57,12 +56,6 @@ export const photosLogout = async () => { const electron = globalThis.electron; if (electron) { - try { - await mlWorkManager.logout(); - } catch (e) { - ignoreError("ML", e); - } - try { await logoutML(); } catch (e) { diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 17eb1663ce..9bf34ee57a 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,8 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; -import { - faceIndexingStatus, - isFaceIndexingEnabled, -} from "@/new/photos/services/ml"; +import { faceIndexingStatus, isMLEnabled } from "@/new/photos/services/ml"; import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; @@ -36,7 +33,7 @@ export const getDefaultOptions = async () => { return [ // TODO-ML(MR): Skip this for now if indexing is disabled (eventually // the indexing status should not be tied to results). - ...(isFaceIndexingEnabled() ? [await getIndexStatusSuggestion()] : []), + ...(isMLEnabled() ? [await getIndexStatusSuggestion()] : []), ...(await convertSuggestionsToOptions(await getAllPeopleSuggestion())), ].filter((t) => !!t); }; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index af862b1633..8db6aa0134 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -13,7 +13,7 @@ import { indexedAndIndexableCounts, } from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; -import { clientPackageName } from "@/next/app"; +import { clientPackageName, isDesktop } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; @@ -36,7 +36,7 @@ let _isMLEnabled = false; let _comlinkWorker: ComlinkWorker | undefined; /** Lazily created, cached, instance of {@link MLWorker}. */ -export const worker = async () => { +const worker = async () => { if (!_comlinkWorker) _comlinkWorker = await createComlinkWorker(); return _comlinkWorker.remote; }; @@ -72,7 +72,9 @@ export const terminateMLWorker = () => { * Initialize the ML subsystem if the user has enabled it in preferences. */ export const initML = () => { - // TODO-ML: Rename + // ML currently only works when we're running in our desktop app. + if (!isDesktop) return; + // TODO-ML: Rename the isFace* flag since it now drives ML as a whole. _isMLEnabled = isFaceIndexingEnabled(); }; @@ -132,7 +134,7 @@ export const disableML = () => { * on any client. This {@link isFaceIndexingEnabled} property, on the other * hand, denotes whether or not indexing is enabled on the current client. */ -export const isFaceIndexingEnabled = () => +const isFaceIndexingEnabled = () => localStorage.getItem("faceIndexingEnabled") == "1"; /** From c71850be07d8d5d2352c7830b9bf425a29c5d5fc Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 19:21:16 +0530 Subject: [PATCH 231/466] [mob][photos] Change lock screen background asset --- mobile/assets/2.0x/lock_screen_background.png | Bin 0 -> 61315 bytes mobile/assets/3.0x/lock_screen_background.png | Bin 0 -> 101298 bytes .../loading_photos_background_fullscreen.png | Bin 26490 -> 0 bytes mobile/assets/lock_screen_background.png | Bin 0 -> 26068 bytes mobile/lib/ui/tools/lock_screen.dart | 12 +++++++++--- 5 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 mobile/assets/2.0x/lock_screen_background.png create mode 100644 mobile/assets/3.0x/lock_screen_background.png delete mode 100644 mobile/assets/loading_photos_background_fullscreen.png create mode 100644 mobile/assets/lock_screen_background.png diff --git a/mobile/assets/2.0x/lock_screen_background.png b/mobile/assets/2.0x/lock_screen_background.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcb3085604e190cb2be43e2f0ec0266524b629 GIT binary patch literal 61315 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 literal 0 HcmV?d00001 diff --git a/mobile/assets/3.0x/lock_screen_background.png b/mobile/assets/3.0x/lock_screen_background.png new file mode 100644 index 0000000000000000000000000000000000000000..72ad6b263983ab554407d3929f7a0aabf94b90fb GIT binary patch literal 101298 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 Rz&ar4;yLqwi_W-4{~yKchz$S$ literal 0 HcmV?d00001 diff --git a/mobile/assets/loading_photos_background_fullscreen.png b/mobile/assets/loading_photos_background_fullscreen.png deleted file mode 100644 index 3cbc4e1da86ef8a8ef9e0a343e20f734c2aa9d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26490 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 diff --git a/mobile/assets/lock_screen_background.png b/mobile/assets/lock_screen_background.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b2a9f8d66e9657a1513faf583c2297ca022963 GIT binary patch literal 26068 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

8YzE}cxL){s# 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 parent: _controller, curve: Curves.easeInOut, ); + late Brightness _platformBrightness; @override void initState() { @@ -58,6 +60,9 @@ class _LockScreenState extends State } _showLockScreen(source: "postFrameInit"); }); + + _platformBrightness = + SchedulerBinding.instance.platformDispatcher.platformBrightness; } @override @@ -70,10 +75,11 @@ class _LockScreenState extends State isTimerRunning ? null : _showLockScreen(source: "tap"); }, child: Container( - decoration: const BoxDecoration( + decoration: BoxDecoration( image: DecorationImage( - image: ExactAssetImage( - 'assets/loading_photos_background_fullscreen.png', + opacity: _platformBrightness == Brightness.light ? 0.08 : 0.12, + image: const ExactAssetImage( + 'assets/lock_screen_background.png', ), fit: BoxFit.cover, ), From 1042332f5b6fa102735efc5c38de7da518bf9200 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 19:34:57 +0530 Subject: [PATCH 232/466] [mob][photos] Add title to error dialog when there is no system lock --- mobile/lib/ui/settings/security_section_widget.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 61d302b6a5..6e14ce8f4c 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -164,7 +164,7 @@ class _SecuritySectionWidgetState extends State { } else { await showErrorDialog( context, - "", + "No system lock", "To enable app lock, please setup device passcode or screen lock in your system settings.", ); } From 3b4897b86a6fed83731a2ac022bacb0ac85384d0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 19:37:20 +0530 Subject: [PATCH 233/466] Omit middleman --- .../components/PhotoViewer/FileInfo/index.tsx | 3 ++- .../SearchBar/searchInput/MenuWithPeople.tsx | 8 +++---- .../Search/SearchBar/searchInput/index.tsx | 5 ++--- .../src/components/ml/MLSearchSettings.tsx | 17 ++++++++------ web/apps/photos/src/pages/_app.tsx | 22 +------------------ web/packages/new/photos/services/ml/index.ts | 4 +++- 6 files changed, 21 insertions(+), 38 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 6fab590737..5db9e8d40a 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -1,3 +1,4 @@ +import { isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; @@ -328,7 +329,7 @@ export function FileInfo({ )} - {appContext.mlSearchEnabled && ( + {isMLEnabled() && ( <> {/* */} diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx index fd073af643..6242090dfe 100644 --- a/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx @@ -1,9 +1,8 @@ +import { isMLEnabled } from "@/new/photos/services/ml"; import { Row } from "@ente/shared/components/Container"; import { Box, styled } from "@mui/material"; import { PeopleList } from "components/ml/PeopleList"; import { t } from "i18next"; -import { AppContext } from "pages/_app"; -import { useContext } from "react"; import { components } from "react-select"; import { Suggestion, SuggestionType } from "types/search"; @@ -23,7 +22,6 @@ const Caption = styled("span")` `; const MenuWithPeople = (props) => { - const appContext = useContext(AppContext); // log.info("props.selectProps.options: ", selectRef); const peopleSuggestions = props.selectProps.options.filter( (o) => o.type === SuggestionType.PERSON, @@ -38,13 +36,13 @@ const MenuWithPeople = (props) => { return (

- {((appContext.mlSearchEnabled && indexStatus) || + {((isMLEnabled() && indexStatus) || (people && people.length > 0)) && ( {t("PEOPLE")} )} - {appContext.mlSearchEnabled && indexStatus && ( + {isMLEnabled() && indexStatus && ( {indexStatusSuggestion.label} diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx index 185121d344..0f21564877 100644 --- a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx @@ -1,4 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; +import { isMLEnabled } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import CloseIcon from "@mui/icons-material/Close"; @@ -200,9 +201,7 @@ export default function SearchInput(props: Iprops) { onInputChange={handleInputChange} escapeClearsValue styles={SelectStyles} - defaultOptions={ - appContext.mlSearchEnabled ? defaultOptions : null - } + defaultOptions={isMLEnabled() ? defaultOptions : null} noOptionsMessage={() => null} /> diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index a2523ba962..118684dccc 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,4 +1,9 @@ -import { canEnableFaceIndexing } from "@/new/photos/services/ml"; +import { + canEnableFaceIndexing, + disableML, + enableML, + isMLEnabled, +} from "@/new/photos/services/ml"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { @@ -26,8 +31,6 @@ import { export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const { - updateMlSearchEnabled, - mlSearchEnabled, setDialogMessage, somethingWentWrong, startLoading, @@ -49,7 +52,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { if (!hasEnabledFaceSearch) { openEnableFaceSearch(); } else { - updateMlSearchEnabled(true); + enableML(); } } catch (e) { log.error("Enable ML search failed", e); @@ -62,7 +65,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { startLoading(); // Update the consent flag. await updateFaceSearchEnabledStatus(true); - updateMlSearchEnabled(true); + enableML(); closeEnableFaceSearch(); finishLoading(); } catch (e) { @@ -73,7 +76,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const disableMlSearch = async () => { try { - await updateMlSearchEnabled(false); + disableML(); onClose(); } catch (e) { log.error("Disable ML search failed", e); @@ -133,7 +136,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { sx: { "&&&": { backgroundColor: "transparent" } }, }} > - {mlSearchEnabled ? ( + {isMLEnabled() ? ( Promise; updateMapEnabled: (enabled: boolean) => Promise; startLoading: () => void; finishLoading: () => void; @@ -116,7 +109,6 @@ export default function App({ Component, pageProps }: AppProps) { ); const [showNavbar, setShowNavBar] = useState(false); const [redirectName, setRedirectName] = useState(null); - const [mlSearchEnabled, setMlSearchEnabled] = useState(false); const [mapEnabled, setMapEnabled] = useState(false); const isLoadingBarRunning = useRef(false); const loadingBar = useRef(null); @@ -183,7 +175,6 @@ export default function App({ Component, pageProps }: AppProps) { }; initML(); - setMlSearchEnabled(isMLEnabled()); electron.onOpenURL(handleOpenURL); electron.onAppUpdateAvailable(showUpdateDialog); @@ -282,14 +273,6 @@ export default function App({ Component, pageProps }: AppProps) { }, [notificationAttributes]); const showNavBar = (show: boolean) => setShowNavBar(show); - const updateMlSearchEnabled = async (enabled: boolean) => { - try { - enabled ? enableML() : disableML(); - setMlSearchEnabled(enabled); - } catch (e) { - log.error("Error while updating mlSearchEnabled", e); - } - }; const updateMapEnabled = async (enabled: boolean) => { try { @@ -323,14 +306,11 @@ export default function App({ Component, pageProps }: AppProps) { }); const logout = () => { - setMlSearchEnabled(false); void photosLogout().then(() => router.push(PAGES.ROOT)); }; const appContext = { showNavBar, - mlSearchEnabled, - updateMlSearchEnabled, startLoading, finishLoading, closeMessageDialog, diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 8db6aa0134..685a056ecc 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -101,7 +101,9 @@ export const canEnableFaceIndexing = async () => * local) storage key, but otherwise this setting now reflects the state of ML * overall and not just face search. */ -export const isMLEnabled = () => _isMLEnabled; +export const isMLEnabled = () => + // Impl note: Keep it fast, the UI directly calls this multiple times. + _isMLEnabled; /** * Enable ML. From 98d1a1c2195a3b46c98062d4d1776371362ac071 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 19:43:15 +0530 Subject: [PATCH 234/466] [mob][photos] Remove old assets --- .../loading_photos_background_fullscreen.png | Bin 61191 -> 0 bytes .../loading_photos_background_fullscreen.png | Bin 99831 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mobile/assets/2.0x/loading_photos_background_fullscreen.png delete mode 100644 mobile/assets/3.0x/loading_photos_background_fullscreen.png diff --git a/mobile/assets/2.0x/loading_photos_background_fullscreen.png b/mobile/assets/2.0x/loading_photos_background_fullscreen.png deleted file mode 100644 index 23f53f2b6be725c16cdd670375107c1d8923704d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61191 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°PUj&$-Um2Xpc!scuBP%v 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 MFIXX}&bvqd4{J_2=l}o! diff --git a/mobile/assets/3.0x/loading_photos_background_fullscreen.png b/mobile/assets/3.0x/loading_photos_background_fullscreen.png deleted file mode 100644 index 05538156668188ddbb5a262a23fbcfd0a92e37d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99831 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%0DKp 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 From 4665cac03d0a76c68d80fb5be42f47ed0b53e1cc Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 20:11:40 +0530 Subject: [PATCH 235/466] [mob][photos] Extract strings --- mobile/lib/generated/intl/messages_cs.dart | 20 +++ mobile/lib/generated/intl/messages_de.dart | 21 ++- mobile/lib/generated/intl/messages_en.dart | 19 +++ mobile/lib/generated/intl/messages_es.dart | 19 +++ mobile/lib/generated/intl/messages_fr.dart | 19 +++ mobile/lib/generated/intl/messages_it.dart | 19 +++ mobile/lib/generated/intl/messages_ko.dart | 20 +++ mobile/lib/generated/intl/messages_nl.dart | 19 +++ mobile/lib/generated/intl/messages_no.dart | 20 +++ mobile/lib/generated/intl/messages_pl.dart | 20 +++ mobile/lib/generated/intl/messages_pt.dart | 19 +++ mobile/lib/generated/intl/messages_ru.dart | 19 +++ mobile/lib/generated/intl/messages_zh.dart | 19 +++ mobile/lib/generated/l10n.dart | 130 ++++++++++++++++++ mobile/lib/l10n/intl_cs.arb | 16 ++- mobile/lib/l10n/intl_de.arb | 15 +- mobile/lib/l10n/intl_en.arb | 20 ++- mobile/lib/l10n/intl_es.arb | 15 +- mobile/lib/l10n/intl_fr.arb | 15 +- mobile/lib/l10n/intl_it.arb | 15 +- mobile/lib/l10n/intl_ko.arb | 16 ++- mobile/lib/l10n/intl_nl.arb | 15 +- mobile/lib/l10n/intl_no.arb | 16 ++- mobile/lib/l10n/intl_pl.arb | 16 ++- mobile/lib/l10n/intl_pt.arb | 15 +- mobile/lib/l10n/intl_ru.arb | 15 +- mobile/lib/l10n/intl_zh.arb | 15 +- .../lock_screen_confirm_password.dart | 2 +- .../lock_screen/lock_screen_confirm_pin.dart | 3 +- .../lock_screen/lock_screen_options.dart | 16 +-- .../lock_screen/lock_screen_password.dart | 6 +- .../settings/lock_screen/lock_screen_pin.dart | 5 +- .../ui/settings/security_section_widget.dart | 8 +- mobile/lib/ui/tools/lock_screen.dart | 6 +- 34 files changed, 595 insertions(+), 38 deletions(-) diff --git a/mobile/lib/generated/intl/messages_cs.dart b/mobile/lib/generated/intl/messages_cs.dart index 3de2f825b3..7baff8c0a9 100644 --- a/mobile/lib/generated/intl/messages_cs.dart +++ b/mobile/lib/generated/intl/messages_cs.dart @@ -32,6 +32,7 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Add to hidden album"), "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( "Change location of selected items?"), "clusteringProgress": @@ -42,12 +43,14 @@ class MessageLookup extends MessageLookupByLibrary { "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted."), "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), "editsToLocationWillOnlyBeSeenWithinEnte": MessageLookupByLibrary.simpleMessage( "Edits to location will only be seen within Ente"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "faceRecognition": MessageLookupByLibrary.simpleMessage("Face recognition"), "fileTypes": MessageLookupByLibrary.simpleMessage("File types"), @@ -64,6 +67,14 @@ class MessageLookup extends MessageLookupByLibrary { "Modify your query, or try searching for"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "search": MessageLookupByLibrary.simpleMessage("Search"), @@ -71,6 +82,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Select a location"), "selectALocationFirst": MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map") }; } diff --git a/mobile/lib/generated/intl/messages_de.dart b/mobile/lib/generated/intl/messages_de.dart index a68a9df651..7cc6c8c726 100644 --- a/mobile/lib/generated/intl/messages_de.dart +++ b/mobile/lib/generated/intl/messages_de.dart @@ -42,7 +42,7 @@ class MessageLookup extends MessageLookupByLibrary { static String m7(versionValue) => "Version: ${versionValue}"; static String m8(freeAmount, storageUnit) => - "${freeAmount} ${storageUnit} kostenlos"; + "${freeAmount} ${storageUnit} frei"; static String m9(paymentProvider) => "Bitte kündigen Sie Ihr aktuelles Abo über ${paymentProvider} zuerst"; @@ -309,6 +309,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage( "Authentifizierung erforderlich"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Anwenden"), @@ -612,6 +613,7 @@ class MessageLookup extends MessageLookupByLibrary { "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Code eingeben"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Dateien, die zu diesem Album hinzugefügt werden, werden automatisch zu Ente hochgeladen."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Verhindern, dass der Bildschirm gesperrt wird, während die App im Vordergrund ist und eine Sicherung läuft. Das ist normalerweise nicht notwendig, kann aber dabei helfen, große Uploads wie einen Erstimport schneller abzuschließen."), "deviceNotFound": @@ -706,6 +708,7 @@ class MessageLookup extends MessageLookupByLibrary { "Gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Namen der Person eingeben"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Gib den Weiterempfehlungs-Code ein"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -1012,6 +1015,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Neues Album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Neu bei Ente"), "newest": MessageLookupByLibrary.simpleMessage("Zuletzt"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("Nein"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Noch keine Alben von dir geteilt"), @@ -1041,6 +1045,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse gefunden"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Noch nichts mit Dir geteilt"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1113,6 +1119,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Mittelpunkt auswählen"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Album anheften"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage( "Album auf dem Fernseher wiedergeben"), "playStoreFreeTrialValidTill": m39, @@ -1195,6 +1202,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Passwort wiederherstellen"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Begeistere Freunde für uns und verdopple deinen Speicher"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1356,6 +1366,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Festlegen als"), "setCover": MessageLookupByLibrary.simpleMessage("Titelbild festlegen"), "setLabel": MessageLookupByLibrary.simpleMessage("Festlegen"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Passwort festlegen"), "setRadius": MessageLookupByLibrary.simpleMessage("Radius festlegen"), @@ -1485,6 +1498,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("zum Kopieren antippen"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage( "Antippen, um den Code einzugeben"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Etwas ist schiefgelaufen. Bitte versuche es später noch einmal. Sollte der Fehler weiter bestehen, kontaktiere unser Supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beenden"), @@ -1529,12 +1543,17 @@ class MessageLookup extends MessageLookupByLibrary { "Dadurch wirst du von folgendem Gerät abgemeldet:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Dadurch wirst du von diesem Gerät abgemeldet!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("Foto oder Video verstecken"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Um dein Passwort zurückzusetzen, verifiziere bitte zuerst deine E-Mail Adresse."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Heutiges Protokoll"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("Gesamt"), "totalSize": MessageLookupByLibrary.simpleMessage("Gesamtgröße"), "trash": MessageLookupByLibrary.simpleMessage("Papierkorb"), diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index 2123a2adf5..8131326606 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -300,6 +300,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Authentication required"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Apply"), @@ -596,6 +597,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Enter the code"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Files added to this device album will automatically get uploaded to Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Disable the device screen lock when Ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster."), "deviceNotFound": @@ -685,6 +687,7 @@ class MessageLookup extends MessageLookupByLibrary { "Enter a password we can use to encrypt your data"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("Enter referral code"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -973,6 +976,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("New album"), "newToEnte": MessageLookupByLibrary.simpleMessage("New to Ente"), "newest": MessageLookupByLibrary.simpleMessage("Newest"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("No"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage("No albums shared by you yet"), @@ -1001,6 +1005,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("No results"), "noResultsFound": MessageLookupByLibrary.simpleMessage("No results found"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "notPersonLabel": m70, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Nothing shared with you yet"), @@ -1069,6 +1075,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Pick center point"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Pin album"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Play album on TV"), "playStoreFreeTrialValidTill": m39, "playstoreSubscription": @@ -1147,6 +1154,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Recreate password"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Refer friends and 2x your plan"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1302,6 +1312,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Set as"), "setCover": MessageLookupByLibrary.simpleMessage("Set cover"), "setLabel": MessageLookupByLibrary.simpleMessage("Set"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Set password"), "setRadius": MessageLookupByLibrary.simpleMessage("Set radius"), @@ -1423,6 +1436,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("tap to copy"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Tap to enter code"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."), "terminate": MessageLookupByLibrary.simpleMessage("Terminate"), @@ -1466,11 +1480,16 @@ class MessageLookup extends MessageLookupByLibrary { "This will log you out of the following device:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "This will log you out of this device!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("To hide a photo or video"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "To reset your password, please verify your email first."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Today\'s logs"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Total size"), "trash": MessageLookupByLibrary.simpleMessage("Trash"), diff --git a/mobile/lib/generated/intl/messages_es.dart b/mobile/lib/generated/intl/messages_es.dart index c5500a5d2c..fc2186f45c 100644 --- a/mobile/lib/generated/intl/messages_es.dart +++ b/mobile/lib/generated/intl/messages_es.dart @@ -310,6 +310,7 @@ class MessageLookup extends MessageLookupByLibrary { "Android, iOS, Web, Computadora"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Autentificación requerida"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("ID de Apple"), "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), @@ -616,6 +617,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Introduce el código"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Los archivos añadidos a este álbum de dispositivo se subirán automáticamente a Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Deshabilita el bloqueo de pantalla del dispositivo cuando Ente está en primer plano y haya una copia de seguridad en curso. Normalmente esto no es necesario, pero puede ayudar a que las grandes cargas y las importaciones iniciales de grandes bibliotecas se completen más rápido."), "deviceNotFound": @@ -713,6 +715,7 @@ class MessageLookup extends MessageLookupByLibrary { "Introduce una contraseña que podamos usar para cifrar tus datos"), "enterPersonName": MessageLookupByLibrary.simpleMessage( "Ingresar el nombre de una persona"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Ingresar código de referencia"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -1021,6 +1024,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nuevo álbum"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nuevo en Ente"), "newest": MessageLookupByLibrary.simpleMessage("Más reciente"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("No"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Aún no has compartido ningún álbum"), @@ -1050,6 +1054,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Sin resultados"), "noResultsFound": MessageLookupByLibrary.simpleMessage( "No se han encontrado resultados"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Aún no hay nada compartido contigo"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1122,6 +1128,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Elegir punto central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fijar álbum"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Reproducir álbum en TV"), "playStoreFreeTrialValidTill": m39, @@ -1204,6 +1211,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Recrear contraseña"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Refiere a amigos y 2x su plan"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1369,6 +1379,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Establecer como"), "setCover": MessageLookupByLibrary.simpleMessage("Definir portada"), "setLabel": MessageLookupByLibrary.simpleMessage("Establecer"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Establecer contraseña"), "setRadius": MessageLookupByLibrary.simpleMessage("Establecer radio"), @@ -1499,6 +1512,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("toca para copiar"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage( "Toca para introducir el código"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte."), "terminate": MessageLookupByLibrary.simpleMessage("Terminar"), @@ -1543,11 +1557,16 @@ class MessageLookup extends MessageLookupByLibrary { "Esto cerrará la sesión del siguiente dispositivo:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "¡Esto cerrará la sesión de este dispositivo!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Para ocultar una foto o video"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Para restablecer tu contraseña, por favor verifica tu correo electrónico primero."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Registros de hoy"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Tamaño total"), "trash": MessageLookupByLibrary.simpleMessage("Papelera"), diff --git a/mobile/lib/generated/intl/messages_fr.dart b/mobile/lib/generated/intl/messages_fr.dart index 7cae363308..fc95fa5408 100644 --- a/mobile/lib/generated/intl/messages_fr.dart +++ b/mobile/lib/generated/intl/messages_fr.dart @@ -298,6 +298,7 @@ class MessageLookup extends MessageLookupByLibrary { "Android, iOS, Web, Ordinateur"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Authentification requise"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Appliquer"), @@ -580,6 +581,7 @@ class MessageLookup extends MessageLookupByLibrary { "details": MessageLookupByLibrary.simpleMessage("Détails"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Les fichiers ajoutés à cet album seront automatiquement téléchargés sur ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Désactiver le verrouillage de l\'écran de l\'appareil lorsque ente est au premier plan et il y a une sauvegarde en cours. Ce n\'est normalement pas nécessaire, mais peut aider les gros téléchargements et les premières importations de grandes bibliothèques plus rapidement."), "didYouKnow": MessageLookupByLibrary.simpleMessage("Le savais-tu ?"), @@ -668,6 +670,7 @@ class MessageLookup extends MessageLookupByLibrary { "Entrez un mot de passe que nous pouvons utiliser pour chiffrer vos données"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Entrez le code de parrainage"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -944,6 +947,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nouvel album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nouveau sur ente"), "newest": MessageLookupByLibrary.simpleMessage("Le plus récent"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("Non"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Aucun album que vous avez partagé"), @@ -969,6 +973,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Aucun résultat"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Aucun résultat trouvé"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Rien n\'a encore été partagé avec vous"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1028,6 +1034,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage( "Sélectionner le point central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Épingler l\'album"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playStoreFreeTrialValidTill": m39, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abonnement au PlayStore"), @@ -1103,6 +1110,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Recréer le mot de passe"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Parrainez des amis et 2x votre abonnement"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1263,6 +1273,9 @@ class MessageLookup extends MessageLookupByLibrary { "setCover": MessageLookupByLibrary.simpleMessage("Définir la couverture"), "setLabel": MessageLookupByLibrary.simpleMessage("Définir"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Définir le mot de passe"), "setRadius": MessageLookupByLibrary.simpleMessage("Définir le rayon"), @@ -1382,6 +1395,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("taper pour copier"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Appuyez pour entrer le code"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Il semble qu\'une erreur s\'est produite. Veuillez réessayer après un certain temps. Si l\'erreur persiste, veuillez contacter notre équipe d\'assistance."), "terminate": MessageLookupByLibrary.simpleMessage("Se déconnecter"), @@ -1426,11 +1440,16 @@ class MessageLookup extends MessageLookupByLibrary { "Cela vous déconnectera de l\'appareil suivant :"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Cela vous déconnectera de cet appareil !"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Cacher une photo ou une vidéo"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Pour réinitialiser votre mot de passe, veuillez d\'abord vérifier votre e-mail."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Journaux du jour"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Taille totale"), "trash": MessageLookupByLibrary.simpleMessage("Corbeille"), diff --git a/mobile/lib/generated/intl/messages_it.dart b/mobile/lib/generated/intl/messages_it.dart index 2ca1cb0531..8793aeac73 100644 --- a/mobile/lib/generated/intl/messages_it.dart +++ b/mobile/lib/generated/intl/messages_it.dart @@ -291,6 +291,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Autenticazione necessaria"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Applica"), @@ -560,6 +561,7 @@ class MessageLookup extends MessageLookupByLibrary { "details": MessageLookupByLibrary.simpleMessage("Dettagli"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "I file aggiunti in questa cartella del dispositivo verranno automaticamente caricati su ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Disabilita il blocco schermo del dispositivo quando ente è in primo piano e c\'è un backup in corso. Questo normalmente non è necessario, ma può aiutare durante grossi caricamenti e le importazioni iniziali di grandi librerie si completano più velocemente."), "didYouKnow": MessageLookupByLibrary.simpleMessage("Lo sapevi che?"), @@ -647,6 +649,7 @@ class MessageLookup extends MessageLookupByLibrary { "Inserisci una password per criptare i tuoi dati"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Inserisci il codice di invito"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -911,6 +914,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nuovo album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nuovo utente"), "newest": MessageLookupByLibrary.simpleMessage("Più recenti"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("No"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Ancora nessun album condiviso da te"), @@ -936,6 +940,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Nessun risultato"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nessun risultato trovato"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Ancora nulla di condiviso con te"), "nothingToSeeHere": @@ -992,6 +998,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage( "Selezionare il punto centrale"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fissa l\'album"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playStoreFreeTrialValidTill": m39, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abbonamento su PlayStore"), @@ -1066,6 +1073,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Reimposta password"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Invita un amico e raddoppia il tuo spazio"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1191,6 +1201,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Imposta come"), "setCover": MessageLookupByLibrary.simpleMessage("Imposta copertina"), "setLabel": MessageLookupByLibrary.simpleMessage("Imposta"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Imposta password"), "setRadius": MessageLookupByLibrary.simpleMessage("Imposta raggio"), @@ -1310,6 +1323,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("tocca per copiare"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage( "Tocca per inserire il codice"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Sembra che qualcosa sia andato storto. Riprova tra un po\'. Se l\'errore persiste, contatta il nostro team di supporto."), "terminate": MessageLookupByLibrary.simpleMessage("Terminata"), @@ -1355,11 +1369,16 @@ class MessageLookup extends MessageLookupByLibrary { "Verrai disconnesso dai seguenti dispositivi:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Verrai disconnesso dal tuo dispositivo!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Per nascondere una foto o un video"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Per reimpostare la tua password, verifica prima la tua email."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Log di oggi"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("totale"), "totalSize": MessageLookupByLibrary.simpleMessage("Dimensioni totali"), "trash": MessageLookupByLibrary.simpleMessage("Cestino"), diff --git a/mobile/lib/generated/intl/messages_ko.dart b/mobile/lib/generated/intl/messages_ko.dart index a174b77072..0a7128fa90 100644 --- a/mobile/lib/generated/intl/messages_ko.dart +++ b/mobile/lib/generated/intl/messages_ko.dart @@ -32,6 +32,7 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Add to hidden album"), "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( "Change location of selected items?"), "clusteringProgress": @@ -42,12 +43,14 @@ class MessageLookup extends MessageLookupByLibrary { "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted."), "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), "editsToLocationWillOnlyBeSeenWithinEnte": MessageLookupByLibrary.simpleMessage( "Edits to location will only be seen within Ente"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "faceRecognition": MessageLookupByLibrary.simpleMessage("Face recognition"), "fileTypes": MessageLookupByLibrary.simpleMessage("File types"), @@ -64,6 +67,14 @@ class MessageLookup extends MessageLookupByLibrary { "Modify your query, or try searching for"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "search": MessageLookupByLibrary.simpleMessage("Search"), @@ -71,6 +82,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Select a location"), "selectALocationFirst": MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map") }; } diff --git a/mobile/lib/generated/intl/messages_nl.dart b/mobile/lib/generated/intl/messages_nl.dart index eedbb366f0..6b16b1bcc5 100644 --- a/mobile/lib/generated/intl/messages_nl.dart +++ b/mobile/lib/generated/intl/messages_nl.dart @@ -307,6 +307,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Verificatie vereist"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Toepassen"), @@ -607,6 +608,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Voer de code in"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Bestanden toegevoegd aan dit album van dit apparaat zullen automatisch geüpload worden naar Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Schakel de schermvergrendeling van het apparaat uit wanneer Ente op de voorgrond is en er een back-up aan de gang is. Dit is normaal gesproken niet nodig, maar kan grote uploads en initiële imports van grote mappen sneller laten verlopen."), "deviceNotFound": @@ -700,6 +702,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Voer wachtwoord in"), "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( "Voer een wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("Voer verwijzingscode in"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -992,6 +995,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nieuw album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nieuw bij Ente"), "newest": MessageLookupByLibrary.simpleMessage("Nieuwste"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("Nee"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Nog geen albums gedeeld door jou"), @@ -1022,6 +1026,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Geen resultaten"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Geen resultaten gevonden"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Nog niets met je gedeeld"), "nothingToSeeHere": @@ -1091,6 +1097,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Kies middelpunt"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Album bovenaan vastzetten"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Album afspelen op TV"), "playStoreFreeTrialValidTill": m39, @@ -1170,6 +1177,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage( "Wachtwoord opnieuw instellen"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Verwijs vrienden en 2x uw abonnement"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1324,6 +1334,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Instellen als"), "setCover": MessageLookupByLibrary.simpleMessage("Omslag instellen"), "setLabel": MessageLookupByLibrary.simpleMessage("Instellen"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Wachtwoord instellen"), "setRadius": MessageLookupByLibrary.simpleMessage("Radius instellen"), @@ -1447,6 +1460,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("tik om te kopiëren"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Tik om code in te voeren"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beëindigen"), @@ -1491,12 +1505,17 @@ class MessageLookup extends MessageLookupByLibrary { "Dit zal je uitloggen van het volgende apparaat:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Dit zal je uitloggen van dit apparaat!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Om een foto of video te verbergen"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Verifieer eerst je e-mailadres om je wachtwoord opnieuw in te stellen."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Logboeken van vandaag"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("totaal"), "totalSize": MessageLookupByLibrary.simpleMessage("Totale grootte"), "trash": MessageLookupByLibrary.simpleMessage("Prullenbak"), diff --git a/mobile/lib/generated/intl/messages_no.dart b/mobile/lib/generated/intl/messages_no.dart index d3f7ffa1f3..0c1fcfbbbe 100644 --- a/mobile/lib/generated/intl/messages_no.dart +++ b/mobile/lib/generated/intl/messages_no.dart @@ -34,6 +34,7 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Add to hidden album"), "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "askDeleteReason": MessageLookupByLibrary.simpleMessage( "Hva er hovedårsaken til at du sletter kontoen din?"), "cancel": MessageLookupByLibrary.simpleMessage("Avbryt"), @@ -54,6 +55,7 @@ class MessageLookup extends MessageLookupByLibrary { "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted."), "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), "editsToLocationWillOnlyBeSeenWithinEnte": MessageLookupByLibrary.simpleMessage( @@ -61,6 +63,7 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-post"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( "Vennligst skriv inn en gyldig e-postadresse."), "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( @@ -86,6 +89,14 @@ class MessageLookup extends MessageLookupByLibrary { "Modify your query, or try searching for"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "search": MessageLookupByLibrary.simpleMessage("Search"), @@ -93,6 +104,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Select a location"), "selectALocationFirst": MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "verify": MessageLookupByLibrary.simpleMessage("Bekreft"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map") }; diff --git a/mobile/lib/generated/intl/messages_pl.dart b/mobile/lib/generated/intl/messages_pl.dart index 32689eca5e..093efa6bc1 100644 --- a/mobile/lib/generated/intl/messages_pl.dart +++ b/mobile/lib/generated/intl/messages_pl.dart @@ -38,6 +38,7 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Add to hidden album"), "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "askDeleteReason": MessageLookupByLibrary.simpleMessage( "Jaka jest przyczyna usunięcia konta?"), "cancel": MessageLookupByLibrary.simpleMessage("Anuluj"), @@ -91,6 +92,7 @@ class MessageLookup extends MessageLookupByLibrary { "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( "Twoje żądanie zostanie przetworzone w ciągu 72 godzin."), "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "doThisLater": MessageLookupByLibrary.simpleMessage("Spróbuj później"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), "editsToLocationWillOnlyBeSeenWithinEnte": @@ -105,6 +107,7 @@ class MessageLookup extends MessageLookupByLibrary { "Wprowadź hasło, którego możemy użyć do zaszyfrowania Twoich danych"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( "Podaj poprawny adres e-mail."), "enterYourEmailAddress": @@ -147,18 +150,23 @@ class MessageLookup extends MessageLookupByLibrary { "Modify your query, or try searching for"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "noRecoveryKey": MessageLookupByLibrary.simpleMessage("Brak klucza odzyskiwania?"), "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( "Ze względu na charakter naszego protokołu szyfrowania end-to-end, dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "ok": MessageLookupByLibrary.simpleMessage("Ok"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "password": MessageLookupByLibrary.simpleMessage("Hasło"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Hasło zostało pomyślnie zmienione"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), "passwordStrength": m37, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Nie przechowujemy tego hasła, więc jeśli go zapomnisz, nie będziemy w stanie odszyfrować Twoich danych"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"), "pleaseWait": MessageLookupByLibrary.simpleMessage("Proszę czekać..."), @@ -175,6 +183,9 @@ class MessageLookup extends MessageLookupByLibrary { "Jeśli zapomnisz hasła, jedynym sposobem odzyskania danych jest ten klucz."), "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Odzyskano pomyślnie!"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "resendEmail": @@ -189,6 +200,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Select a location first"), "selectReason": MessageLookupByLibrary.simpleMessage("Wybierz powód"), "sendEmail": MessageLookupByLibrary.simpleMessage("Wyślij e-mail"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Ustaw hasło"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Akceptuję warunki korzystania z usługi i politykę prywatności"), @@ -197,6 +211,7 @@ class MessageLookup extends MessageLookupByLibrary { "Coś poszło nie tak, spróbuj ponownie"), "sorry": MessageLookupByLibrary.simpleMessage("Przepraszamy"), "strongStrength": MessageLookupByLibrary.simpleMessage("Silne"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "terminate": MessageLookupByLibrary.simpleMessage("Zakończ"), "terminateSession": MessageLookupByLibrary.simpleMessage("Zakończyć sesję?"), @@ -208,6 +223,11 @@ class MessageLookup extends MessageLookupByLibrary { "To wyloguje Cię z tego urządzenia:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "To wyloguje Cię z tego urządzenia!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "tryAgain": MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"), "twofactorAuthenticationPageTitle": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_pt.dart b/mobile/lib/generated/intl/messages_pt.dart index 967755efac..02d3d41889 100644 --- a/mobile/lib/generated/intl/messages_pt.dart +++ b/mobile/lib/generated/intl/messages_pt.dart @@ -306,6 +306,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Autenticação necessária"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("ID da Apple"), "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), @@ -606,6 +607,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Insira o código"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Arquivos adicionados a este álbum do dispositivo serão automaticamente enviados para o Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Desative o bloqueio de tela do dispositivo quando o Ente estiver em primeiro plano e houver um backup em andamento. Isso normalmente não é necessário, mas pode ajudar nos envios grandes e importações iniciais de grandes bibliotecas a serem concluídos mais rapidamente."), "deviceNotFound": @@ -699,6 +701,7 @@ class MessageLookup extends MessageLookupByLibrary { "Insira a senha para criptografar seus dados"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Inserir nome da pessoa"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Insira o código de referência"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -1003,6 +1006,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Novo álbum"), "newToEnte": MessageLookupByLibrary.simpleMessage("Novo no Ente"), "newest": MessageLookupByLibrary.simpleMessage("Mais recente"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("Não"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Nenhum álbum compartilhado por você ainda"), @@ -1032,6 +1036,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Nenhum resultado"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nenhum resultado encontrado"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Nada compartilhado com você ainda"), "nothingToSeeHere": @@ -1103,6 +1109,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Escolha o ponto central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fixar álbum"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Reproduzir álbum na TV"), "playStoreFreeTrialValidTill": m39, @@ -1185,6 +1192,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Redefinir senha"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Indique amigos e 2x seu plano"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1348,6 +1358,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Definir como"), "setCover": MessageLookupByLibrary.simpleMessage("Definir capa"), "setLabel": MessageLookupByLibrary.simpleMessage("Aplicar"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Definir senha"), "setRadius": MessageLookupByLibrary.simpleMessage("Definir raio"), @@ -1478,6 +1491,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Toque para inserir código"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Parece que algo deu errado. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contato com nossa equipe de suporte."), "terminate": MessageLookupByLibrary.simpleMessage("Encerrar"), @@ -1521,11 +1535,16 @@ class MessageLookup extends MessageLookupByLibrary { "Isso fará com que você saia do seguinte dispositivo:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Isso fará com que você saia deste dispositivo!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Para ocultar uma foto ou vídeo"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Para redefinir a sua senha, por favor verifique o seu email primeiro."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Logs de hoje"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Tamanho total"), "trash": MessageLookupByLibrary.simpleMessage("Lixeira"), diff --git a/mobile/lib/generated/intl/messages_ru.dart b/mobile/lib/generated/intl/messages_ru.dart index 5f39e1e9fd..3514bfef6c 100644 --- a/mobile/lib/generated/intl/messages_ru.dart +++ b/mobile/lib/generated/intl/messages_ru.dart @@ -304,6 +304,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, ПК"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Требуется аутентификация"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Применить"), @@ -609,6 +610,7 @@ class MessageLookup extends MessageLookupByLibrary { "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Введите код"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Файлы, добавленные в этот альбом на устройстве, будут автоматически загружены в Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Отключить блокировку экрана, когда Ente находится на переднем плане и выполняется резервное копирование. Обычно это не нужно, но это может ускорить загрузку и первоначальный импорт больших библиотек."), "deviceNotFound": @@ -700,6 +702,7 @@ class MessageLookup extends MessageLookupByLibrary { "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( "Введите пароль, который мы можем использовать для шифрования ваших данных"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Введите имя"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("Введите реферальный код"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -1005,6 +1008,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Новый альбом"), "newToEnte": MessageLookupByLibrary.simpleMessage("Впервые в Ente"), "newest": MessageLookupByLibrary.simpleMessage("Самые новые"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("Нет"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage("У вас пока нет альбомов"), @@ -1035,6 +1039,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Ничего не найденo"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Ничего не найдено"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Пока никто не поделился с вами"), "nothingToSeeHere": @@ -1107,6 +1113,7 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Указать центральную точку"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Закрепить альбом"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Воспроизвести альбом на ТВ"), "playStoreFreeTrialValidTill": m39, @@ -1189,6 +1196,9 @@ class MessageLookup extends MessageLookupByLibrary { "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("Сбросить пароль"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Пригласите друзей и удвойте свой план"), "referralStep1": MessageLookupByLibrary.simpleMessage( @@ -1351,6 +1361,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("Установить как"), "setCover": MessageLookupByLibrary.simpleMessage("Установить обложку"), "setLabel": MessageLookupByLibrary.simpleMessage("Установить"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Установить пароль"), "setRadius": MessageLookupByLibrary.simpleMessage("Установить радиус"), @@ -1480,6 +1493,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("нажмите, чтобы скопировать"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Нажмите, чтобы ввести код"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки."), "terminate": MessageLookupByLibrary.simpleMessage("Завершить"), @@ -1524,11 +1538,16 @@ class MessageLookup extends MessageLookupByLibrary { "Вы выйдете из списка следующих устройств:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Совершив это действие, Вы выйдете из своей учетной записи!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("Скрыть фото или видео"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Чтобы сбросить пароль, сначала подтвердите свой адрес электронной почты."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Сегодняшние логи"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("всего"), "totalSize": MessageLookupByLibrary.simpleMessage("Общий размер"), "trash": MessageLookupByLibrary.simpleMessage("Корзина"), diff --git a/mobile/lib/generated/intl/messages_zh.dart b/mobile/lib/generated/intl/messages_zh.dart index 242f35b651..83636426b0 100644 --- a/mobile/lib/generated/intl/messages_zh.dart +++ b/mobile/lib/generated/intl/messages_zh.dart @@ -268,6 +268,7 @@ class MessageLookup extends MessageLookupByLibrary { "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage("安卓, iOS, 网页端, 桌面端"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("需要身份验证"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("应用"), @@ -506,6 +507,7 @@ class MessageLookup extends MessageLookupByLibrary { "deviceCodeHint": MessageLookupByLibrary.simpleMessage("输入代码"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage("添加到此设备相册的文件将自动上传到 Ente。"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "当 Ente 置于前台且正在进行备份时将禁用设备屏幕锁定。这通常是不需要的,但可能有助于更快地完成大型上传和大型库的初始导入。"), "deviceNotFound": MessageLookupByLibrary.simpleMessage("未发现设备"), @@ -580,6 +582,7 @@ class MessageLookup extends MessageLookupByLibrary { "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage("输入我们可以用来加密您的数据的密码"), "enterPersonName": MessageLookupByLibrary.simpleMessage("输入人物名称"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("输入推荐代码"), "enterThe6digitCodeFromnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage("从你的身份验证器应用中\n输入6位数字代码"), @@ -825,6 +828,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("新建相册"), "newToEnte": MessageLookupByLibrary.simpleMessage("初来 Ente"), "newest": MessageLookupByLibrary.simpleMessage("最新"), + "next": MessageLookupByLibrary.simpleMessage("Next"), "no": MessageLookupByLibrary.simpleMessage("否"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage("您尚未共享任何相册"), @@ -847,6 +851,8 @@ class MessageLookup extends MessageLookupByLibrary { "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密"), "noResults": MessageLookupByLibrary.simpleMessage("无结果"), "noResultsFound": MessageLookupByLibrary.simpleMessage("未找到任何结果"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("尚未与您共享任何内容"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage("这里空空如也! 👀"), @@ -904,6 +910,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("您添加的照片将从相册中移除"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage("选择中心点"), "pinAlbum": MessageLookupByLibrary.simpleMessage("置顶相册"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("在电视上播放相册"), "playStoreFreeTrialValidTill": m39, "playstoreSubscription": @@ -965,6 +972,9 @@ class MessageLookup extends MessageLookupByLibrary { "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码(如果您希望,可以再次使用相同的密码)。"), "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("重新创建密码"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage("把我们推荐给你的朋友然后获得延长一倍的订阅计划"), "referralStep1": MessageLookupByLibrary.simpleMessage("1. 将此代码提供给您的朋友"), @@ -1086,6 +1096,9 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("设置为"), "setCover": MessageLookupByLibrary.simpleMessage("设置封面"), "setLabel": MessageLookupByLibrary.simpleMessage("设置"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("设置密码"), "setRadius": MessageLookupByLibrary.simpleMessage("设定半径"), "setupComplete": MessageLookupByLibrary.simpleMessage("设置完成"), @@ -1188,6 +1201,7 @@ class MessageLookup extends MessageLookupByLibrary { "systemTheme": MessageLookupByLibrary.simpleMessage("适应系统"), "tapToCopy": MessageLookupByLibrary.simpleMessage("点击以复制"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("点击以输入代码"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), @@ -1226,10 +1240,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("这将使您在以下设备中退出登录:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage("这将使您在此设备上退出登录!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("隐藏照片或视频"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage("要重置您的密码,请先验证您的电子邮件。"), "todaysLogs": MessageLookupByLibrary.simpleMessage("当天日志"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), "total": MessageLookupByLibrary.simpleMessage("总计"), "totalSize": MessageLookupByLibrary.simpleMessage("总大小"), "trash": MessageLookupByLibrary.simpleMessage("回收站"), diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index ee55ac66f1..017e4378fd 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -8974,6 +8974,136 @@ class S { args: [name], ); } + + /// `Re-enter password` + String get reenterPassword { + return Intl.message( + 'Re-enter password', + name: 'reenterPassword', + desc: '', + args: [], + ); + } + + /// `Re-enter PIN` + String get reenterPin { + return Intl.message( + 'Re-enter PIN', + name: 'reenterPin', + desc: '', + args: [], + ); + } + + /// `Device lock` + String get deviceLock { + return Intl.message( + 'Device lock', + name: 'deviceLock', + desc: '', + args: [], + ); + } + + /// `PIN lock` + String get pinLock { + return Intl.message( + 'PIN lock', + name: 'pinLock', + desc: '', + args: [], + ); + } + + /// `Next` + String get next { + return Intl.message( + 'Next', + name: 'next', + desc: '', + args: [], + ); + } + + /// `Set new password` + String get setNewPassword { + return Intl.message( + 'Set new password', + name: 'setNewPassword', + desc: '', + args: [], + ); + } + + /// `Enter PIN` + String get enterPin { + return Intl.message( + 'Enter PIN', + name: 'enterPin', + desc: '', + args: [], + ); + } + + /// `Set new PIN` + String get setNewPin { + return Intl.message( + 'Set new PIN', + name: 'setNewPin', + desc: '', + args: [], + ); + } + + /// `App lock` + String get appLock { + return Intl.message( + 'App lock', + name: 'appLock', + desc: '', + args: [], + ); + } + + /// `No system lock found` + String get noSystemLockFound { + return Intl.message( + 'No system lock found', + name: 'noSystemLockFound', + desc: '', + args: [], + ); + } + + /// `To enable app lock, please setup device passcode or screen lock in your system settings.` + String get toEnableAppLockPleaseSetupDevicePasscodeOrScreen { + return Intl.message( + 'To enable app lock, please setup device passcode or screen lock in your system settings.', + name: 'toEnableAppLockPleaseSetupDevicePasscodeOrScreen', + desc: '', + args: [], + ); + } + + /// `Tap to unlock` + String get tapToUnlock { + return Intl.message( + 'Tap to unlock', + name: 'tapToUnlock', + desc: '', + args: [], + ); + } + + /// `Too many incorrect attempts` + String get tooManyIncorrectAttempts { + return Intl.message( + 'Too many incorrect attempts', + name: 'tooManyIncorrectAttempts', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/mobile/lib/l10n/intl_cs.arb b/mobile/lib/l10n/intl_cs.arb index 024197d9ec..bb7ab3d553 100644 --- a/mobile/lib/l10n/intl_cs.arb +++ b/mobile/lib/l10n/intl_cs.arb @@ -25,5 +25,19 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_de.arb b/mobile/lib/l10n/intl_de.arb index 0d2c701c0e..5d3bbb8912 100644 --- a/mobile/lib/l10n/intl_de.arb +++ b/mobile/lib/l10n/intl_de.arb @@ -1251,5 +1251,18 @@ "left": "Links", "right": "Rechts", "whatsNew": "Neue Funktionen", - "reviewSuggestions": "Vorschläge überprüfen" + "reviewSuggestions": "Vorschläge überprüfen", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index 8617d0fb83..fdbada3b8e 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1200,7 +1200,7 @@ "passkey": "Passkey", "passkeyAuthTitle": "Passkey verification", "passKeyPendingVerification": "Verification is still pending", - "loginSessionExpired" : "Session expired", + "loginSessionExpired": "Session expired", "loginSessionExpiredDetails": "Your session has expired. Please login again.", "verifyPasskey": "Verify passkey", "playOnTv": "Play album on TV", @@ -1262,6 +1262,18 @@ "type": "String" } } - } -} - + }, + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_es.arb b/mobile/lib/l10n/intl_es.arb index c57d7fce28..1860f35996 100644 --- a/mobile/lib/l10n/intl_es.arb +++ b/mobile/lib/l10n/intl_es.arb @@ -1251,5 +1251,18 @@ "left": "Izquierda", "right": "Derecha", "whatsNew": "Qué hay de nuevo", - "reviewSuggestions": "Revisar sugerencias" + "reviewSuggestions": "Revisar sugerencias", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_fr.arb b/mobile/lib/l10n/intl_fr.arb index 44206d6347..9c606c1da7 100644 --- a/mobile/lib/l10n/intl_fr.arb +++ b/mobile/lib/l10n/intl_fr.arb @@ -1168,5 +1168,18 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_it.arb b/mobile/lib/l10n/intl_it.arb index ddcaa3aac0..76df9bdd41 100644 --- a/mobile/lib/l10n/intl_it.arb +++ b/mobile/lib/l10n/intl_it.arb @@ -1130,5 +1130,18 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_ko.arb b/mobile/lib/l10n/intl_ko.arb index 024197d9ec..bb7ab3d553 100644 --- a/mobile/lib/l10n/intl_ko.arb +++ b/mobile/lib/l10n/intl_ko.arb @@ -25,5 +25,19 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_nl.arb b/mobile/lib/l10n/intl_nl.arb index 968345316d..80824dbe21 100644 --- a/mobile/lib/l10n/intl_nl.arb +++ b/mobile/lib/l10n/intl_nl.arb @@ -1231,5 +1231,18 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_no.arb b/mobile/lib/l10n/intl_no.arb index 40085833b9..b30793121a 100644 --- a/mobile/lib/l10n/intl_no.arb +++ b/mobile/lib/l10n/intl_no.arb @@ -39,5 +39,19 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pl.arb b/mobile/lib/l10n/intl_pl.arb index b3eb778793..e0feaa9148 100644 --- a/mobile/lib/l10n/intl_pl.arb +++ b/mobile/lib/l10n/intl_pl.arb @@ -126,5 +126,19 @@ "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", "foundFaces": "Found faces", "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pt.arb b/mobile/lib/l10n/intl_pt.arb index c402867a0b..73406db361 100644 --- a/mobile/lib/l10n/intl_pt.arb +++ b/mobile/lib/l10n/intl_pt.arb @@ -1251,5 +1251,18 @@ "left": "Esquerda", "right": "Direita", "whatsNew": "O que há de novo", - "reviewSuggestions": "Revisar sugestões" + "reviewSuggestions": "Revisar sugestões", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_ru.arb b/mobile/lib/l10n/intl_ru.arb index f992659db3..b3a5eafd9a 100644 --- a/mobile/lib/l10n/intl_ru.arb +++ b/mobile/lib/l10n/intl_ru.arb @@ -1250,5 +1250,18 @@ "rotate": "Повернуть", "left": "Влево", "right": "Вправо", - "whatsNew": "Что нового" + "whatsNew": "Что нового", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_zh.arb b/mobile/lib/l10n/intl_zh.arb index 2d8e51446e..524e74121b 100644 --- a/mobile/lib/l10n/intl_zh.arb +++ b/mobile/lib/l10n/intl_zh.arb @@ -1251,5 +1251,18 @@ "left": "向左", "right": "向右", "whatsNew": "更新日志", - "reviewSuggestions": "查看建议" + "reviewSuggestions": "查看建议", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" } \ No newline at end of file diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart index 40995d6069..7e53ff5822 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart @@ -155,7 +155,7 @@ class _LockScreenConfirmPasswordState extends State { ), ), Text( - 'Re-enter Password', + S.of(context).reenterPassword, style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart index 9ff17501a9..ae3e04129c 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_pin.dart @@ -1,5 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter/services.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/settings/lock_screen/custom_pin_keypad.dart"; @@ -153,7 +154,7 @@ class _LockScreenConfirmPinState extends State { ), ), Text( - 'Re-enter PIN', + S.of(context).reenterPin, style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart index fc21c252d6..be57aae3e5 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_options.dart @@ -1,5 +1,6 @@ import "package:flutter/material.dart"; import "package:photos/core/configuration.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/captioned_text_widget.dart"; import "package:photos/ui/components/divider_widget.dart"; @@ -155,9 +156,8 @@ class _LockScreenOptionsState extends State { ? Column( children: [ MenuItemWidget( - captionedTextWidget: - const CaptionedTextWidget( - title: 'Device Lock', + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).deviceLock, ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: false, @@ -175,9 +175,8 @@ class _LockScreenOptionsState extends State { bgColor: colorTheme.fillFaint, ), MenuItemWidget( - captionedTextWidget: - const CaptionedTextWidget( - title: 'PIN lock', + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).pinLock, ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, @@ -193,9 +192,8 @@ class _LockScreenOptionsState extends State { bgColor: colorTheme.fillFaint, ), MenuItemWidget( - captionedTextWidget: - const CaptionedTextWidget( - title: 'Password lock', + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).passwordLock, ), alignCaptionedTextToLeft: true, isTopBorderRadiusRemoved: true, diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index eeac5f1f4d..24d0f7575a 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -89,7 +89,7 @@ class _LockScreenPasswordState extends State { builder: (context, isFormValid, child) { return DynamicFAB( isKeypadOpen: isKeypadOpen, - buttonText: "Next", + buttonText: S.of(context).next, isFormValid: isFormValid, onPressedFunction: () async { _submitNotifier.value = !_submitNotifier.value; @@ -155,7 +155,9 @@ class _LockScreenPasswordState extends State { ), ), Text( - widget.isAuthenticating ? 'Enter Password' : 'Set new Password', + widget.isAuthenticating + ? S.of(context).enterPassword + : S.of(context).setNewPassword, textAlign: TextAlign.center, style: textTheme.bodyBold, ), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 0f20cdbe54..622078706f 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -3,6 +3,7 @@ import "dart:convert"; import "package:flutter/material.dart"; import "package:flutter/services.dart"; import "package:flutter_sodium/flutter_sodium.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/text_style.dart"; @@ -219,7 +220,9 @@ class _LockScreenPinState extends State { ), ), Text( - widget.isAuthenticating ? "Enter PIN" : "Set new PIN", + widget.isAuthenticating + ? S.of(context).enterPin + : S.of(context).setNewPin, style: textTheme.bodyBold, ), const Padding(padding: EdgeInsets.all(12)), diff --git a/mobile/lib/ui/settings/security_section_widget.dart b/mobile/lib/ui/settings/security_section_widget.dart index 6e14ce8f4c..afb4f21abb 100644 --- a/mobile/lib/ui/settings/security_section_widget.dart +++ b/mobile/lib/ui/settings/security_section_widget.dart @@ -141,8 +141,8 @@ class _SecuritySectionWidgetState extends State { } children.addAll([ MenuItemWidget( - captionedTextWidget: const CaptionedTextWidget( - title: 'App lock', + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).appLock, ), trailingIcon: Icons.chevron_right_outlined, trailingIconIsMuted: true, @@ -164,8 +164,8 @@ class _SecuritySectionWidgetState extends State { } else { await showErrorDialog( context, - "No system lock", - "To enable app lock, please setup device passcode or screen lock in your system settings.", + S.of(context).noSystemLockFound, + S.of(context).toEnableAppLockPleaseSetupDevicePasscodeOrScreen, ); } }, diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 768c450992..e4e4a041bc 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -153,7 +153,7 @@ class _LockScreenState extends State alignment: Alignment.center, children: [ Text( - "Too many incorrect attempts", + S.of(context).tooManyIncorrectAttempts, style: textTheme.small, ) .animate( @@ -179,7 +179,7 @@ class _LockScreenState extends State : GestureDetector( onTap: () => _showLockScreen(source: "tap"), child: Text( - "Tap to unlock", + S.of(context).tapToUnlock, style: textTheme.small, ), ), @@ -204,7 +204,7 @@ class _LockScreenState extends State Future _autoLogoutOnMaxInvalidAttempts() async { final AlertDialog alert = AlertDialog( - title: const Text("Too many incorrect attempts"), + title: Text(S.of(context).tooManyIncorrectAttempts), content: Text(S.of(context).pleaseLoginAgain), actions: [ TextButton( From cb94d95d9430af144b4482d4428a40477b6f343f Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 3 Jul 2024 20:13:46 +0530 Subject: [PATCH 236/466] [mob][photos] Bump up to v0.9.4 --- mobile/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index e42b4ebdf8..a81bb6f630 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,7 +12,7 @@ description: ente photos application # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.9.3+903 +version: 0.9.4+904 publish_to: none environment: From 809b02cb263d60a9c9637802cc6760acecefaf7d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 3 Jul 2024 20:33:39 +0530 Subject: [PATCH 237/466] Last trace --- web/apps/photos/src/services/searchService.ts | 4 +--- web/packages/new/photos/services/ml/index.ts | 19 ++++++++------- web/packages/new/photos/services/ml/worker.ts | 24 ++++++++++++------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 9bf34ee57a..98e5c5e842 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,6 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; import { faceIndexingStatus, isMLEnabled } from "@/new/photos/services/ml"; -import mlWorkManager from "@/new/photos/services/ml/mlWorkManager"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; @@ -178,8 +177,7 @@ export async function getAllPeopleSuggestion(): Promise> { export async function getIndexStatusSuggestion(): Promise { try { - const isSyncing = mlWorkManager.isSyncing; - const indexStatus = await faceIndexingStatus(isSyncing); + const indexStatus = await faceIndexingStatus(); let label: string; switch (indexStatus.phase) { diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 685a056ecc..63a6aa20e7 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -201,18 +201,21 @@ export interface FaceIndexingStatus { nTotalFiles: number; } -export const faceIndexingStatus = async ( - isSyncing: boolean, -): Promise => { +/** + * Return the current state of the face indexing pipeline. + * + * Precondition: ML must be enabled. + */ +export const faceIndexingStatus = async (): Promise => { + if (!isMLEnabled()) + throw new Error("Cannot get indexing status when ML is not enabled"); + const { indexedCount, indexableCount } = await indexedAndIndexableCounts(); + const isIndexing = await (await worker()).isIndexing(); let phase: FaceIndexingStatus["phase"]; if (indexableCount > 0) { - if (!isSyncing) { - phase = "scheduled"; - } else { - phase = "indexing"; - } + phase = !isIndexing ? "scheduled" : "indexing"; } else { phase = "done"; } diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index c8c5752fa4..1ad874d74c 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -47,7 +47,7 @@ export class MLWorker { private userAgent: string | undefined; private shouldSync = false; private liveQ: EnteFile[] = []; - private haveStarted = false; + private state: "idle" | "pull" | "indexing" = "idle"; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ @@ -84,13 +84,9 @@ export class MLWorker { /** Invoked in response to external events. */ private wakeUp() { - if (!this.haveStarted) { - // First time something happened. - this.haveStarted = true; - void this.tick(); - } else if (this.idleTimeout) { + if (this.state == "idle") { // Currently paused. Get back to work. - clearTimeout(this.idleTimeout); + if (this.idleTimeout) clearTimeout(this.idleTimeout); this.idleTimeout = undefined; void this.tick(); } else { @@ -125,9 +121,17 @@ export class MLWorker { } } + /** + * Return true if we're currently indexing. + */ + isIndexing() { + return this.state == "indexing"; + } + private async tick() { log.debug(() => ({ t: "ml-tick", + state: this.state, shouldSync: this.shouldSync, liveQ: this.liveQ, idleDuration: this.idleDuration, @@ -138,6 +142,7 @@ export class MLWorker { // If we've been asked to sync, do that irrespective of anything else. if (this.shouldSync) { this.shouldSync = false; + this.state = "pull"; void pull().then((didPull) => { // Reset the idle duration if we did pull something. if (didPull) this.idleDuration = idleDurationStart; @@ -150,6 +155,7 @@ export class MLWorker { const liveQ = this.liveQ; this.liveQ = []; + this.state = "indexing"; const allSuccess = await indexNextBatch(ensure(this.userAgent), liveQ); if (allSuccess) { // Everything is running smoothly. Reset the idle duration. @@ -169,6 +175,7 @@ export class MLWorker { // So in all cases, we pause for exponentially longer durations of time // (limited to some maximum). + this.state = "idle"; this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); this.idleTimeout = setTimeout(scheduleTick, this.idleDuration * 1000); } @@ -208,8 +215,7 @@ const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { for (const file of files) { try { await index(file, undefined, userAgent); - // Let the event loop run so that other events (like onUpload) can - // be acknowledged and noted down. + // Possibly unnecessary, but let us drain the microtask queue. await wait(0); } catch { allSuccess = false; From 0d0d501518d559505da7ab0ab541d5c360cab8f1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 09:28:48 +0530 Subject: [PATCH 238/466] Swap --- web/packages/new/photos/services/ml/db.ts | 2 +- web/packages/new/photos/services/ml/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 8eeda67992..91cee18f6f 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -271,7 +271,7 @@ export const updateAssumingLocalFiles = async ( * These counts are mutually exclusive. The total number of files that fall * within the purview of the indexer is thus indexable + indexed. */ -export const indexedAndIndexableCounts = async () => { +export const indexableAndIndexedCounts = async () => { const db = await faceDB(); const tx = db.transaction("file-status", "readwrite"); const indexableCount = await tx.store diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 63a6aa20e7..e0e92212d9 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -10,7 +10,7 @@ import { import { clearFaceDB, faceIndex, - indexedAndIndexableCounts, + indexableAndIndexedCounts, } from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName, isDesktop } from "@/next/app"; @@ -210,7 +210,7 @@ export const faceIndexingStatus = async (): Promise => { if (!isMLEnabled()) throw new Error("Cannot get indexing status when ML is not enabled"); - const { indexedCount, indexableCount } = await indexedAndIndexableCounts(); + const { indexedCount, indexableCount } = await indexableAndIndexedCounts(); const isIndexing = await (await worker()).isIndexing(); let phase: FaceIndexingStatus["phase"]; From 52cd2d30a13168f58cf734c81b0b0b4b7c3bc81a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 09:44:43 +0530 Subject: [PATCH 239/466] Agenda --- web/packages/new/photos/services/ml/crop.ts | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index cd0cafed85..e306d9399d 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -3,6 +3,29 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; import type { FaceAlignment } from "./index-face"; +/** + * Return the rectangle ("crop") of the original image that contains the face + * that was detected by the face detection algorithm during indexing. + * + * @param imageBitmap + * @param faceID + * @param alignment + * @returns + */ + +/** + * Return the face crops corresponding to each of the given face detections. + * + * @param imageBitmap The original image. + * + * @param faceBoxes Box (rectangles) marking the bounds of each of the faces + * that were detected in the given image. + */ +export const extractFaceCrops = async ( + imageBitmap: ImageBitmap, + faceBoxes: Box[], +) => {}; + export const saveFaceCrop = async ( imageBitmap: ImageBitmap, faceID: string, From b04538ada2e67ae4e590bd75c6791ae5b10620af Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 09:57:31 +0530 Subject: [PATCH 240/466] Rename and merge --- .../photos/src/services/embeddingService.ts | 2 +- web/packages/new/photos/services/ml/crop.ts | 3 +- web/packages/new/photos/services/ml/db.ts | 2 +- .../new/photos/services/ml/embedding.ts | 3 +- .../services/ml/{index-face.ts => face.ts} | 167 +++++++++++++++++- web/packages/new/photos/services/ml/index.ts | 6 +- web/packages/new/photos/services/ml/types.ts | 159 ----------------- web/packages/new/photos/services/ml/worker.ts | 19 +- 8 files changed, 175 insertions(+), 186 deletions(-) rename web/packages/new/photos/services/ml/{index-face.ts => face.ts} (81%) delete mode 100644 web/packages/new/photos/services/ml/types.ts diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts index 76dd872fae..ca1e0dd8a9 100644 --- a/web/apps/photos/src/services/embeddingService.ts +++ b/web/apps/photos/src/services/embeddingService.ts @@ -3,7 +3,7 @@ import { getLocalTrashedFiles, } from "@/new/photos/services/files"; import type { EmbeddingModel } from "@/new/photos/services/ml/embedding"; -import type { FaceIndex } from "@/new/photos/services/ml/types"; +import type { FaceIndex } from "@/new/photos/services/ml/face"; import { EnteFile } from "@/new/photos/types/file"; import { inWorker } from "@/next/env"; import log from "@/next/log"; diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index e306d9399d..17a6b3dcad 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,7 +1,6 @@ -import type { Box } from "@/new/photos/services/ml/types"; import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import type { FaceAlignment } from "./index-face"; +import type { Box, FaceAlignment } from "./face"; /** * Return the rectangle ("crop") of the original image that contains the face diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 91cee18f6f..b8bcad5ed9 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -1,6 +1,6 @@ import log from "@/next/log"; import { deleteDB, openDB, type DBSchema } from "idb"; -import type { FaceIndex } from "./types"; +import type { FaceIndex } from "./face"; /** * Face DB schema. diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index fdbc2ae24c..16d1cf06fb 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -13,8 +13,7 @@ import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; import { saveFaceIndex } from "./db"; -import { faceIndexingVersion } from "./index-face"; -import { type FaceIndex } from "./types"; +import { type FaceIndex, faceIndexingVersion } from "./face"; /** * The embeddings that we (the current client) knows how to handle. diff --git a/web/packages/new/photos/services/ml/index-face.ts b/web/packages/new/photos/services/ml/face.ts similarity index 81% rename from web/packages/new/photos/services/ml/index-face.ts rename to web/packages/new/photos/services/ml/face.ts index aeea87e041..0c91dfe84b 100644 --- a/web/packages/new/photos/services/ml/index-face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -10,12 +10,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import DownloadManager from "@/new/photos/services/download"; -import type { - Box, - Dimensions, - Face, - Point, -} from "@/new/photos/services/ml/types"; + import type { EnteFile } from "@/new/photos/types/file"; import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; @@ -43,6 +38,166 @@ import { */ export const faceIndexingVersion = 1; +/** + * The faces in a file (and an embedding for each of them). + * + * This interface describes the format of both local and remote face data. + * + * - Local face detections and embeddings (collectively called as the face + * index) are generated by the current client when uploading a file (or when + * noticing a file which doesn't yet have a face index), stored in the local + * IndexedDB ("ml/db") and also uploaded (E2EE) to remote. + * + * - Remote embeddings are fetched by subsequent clients to avoid them having to + * reindex (indexing faces is a costly operation, esp for mobile clients). + * + * In both these scenarios (whether generated locally or fetched from remote), + * we end up with an face index described by this {@link FaceIndex} interface. + * + * It has a top level envelope with information about the file (in particular + * the primary key {@link fileID}), an inner envelope {@link faceEmbedding} with + * metadata about the indexing, and an array of {@link faces} each containing + * the result of a face detection and an embedding for that detected face. + * + * The word embedding is used to refer two things: The last one (faceEmbedding > + * faces > embedding) is the "actual" embedding, but sometimes we colloquially + * refer to the inner envelope (the "faceEmbedding") also an embedding since a + * file can have other types of embedding (envelopes), e.g. a "clipEmbedding". + */ +export interface FaceIndex { + /** + * The ID of the {@link EnteFile} whose index this is. + * + * This is used as the primary key when storing the index locally (An + * {@link EnteFile} is guaranteed to have its fileID be unique in the + * namespace of the user. Even if someone shares a file with the user the + * user will get a file entry with a fileID unique to them). + */ + fileID: number; + /** + * The width (in px) of the image (file). + */ + width: number; + /** + * The height (in px) of the image (file). + */ + height: number; + /** + * The "face embedding" for the file. + * + * This is an envelope that contains a list of indexed faces and metadata + * about the indexing. + */ + faceEmbedding: { + /** + * An integral version number of the indexing algorithm / pipeline. + * + * Clients agree out of band what a particular version means. The + * guarantee is that an embedding with a particular version will be the + * same (to negligible floating point epsilons) irrespective of the + * client that indexed the file. + */ + version: number; + /** The UA for the client which generated this embedding. */ + client: string; + /** The list of faces (and their embeddings) detected in the file. */ + faces: Face[]; + }; +} + +/** + * A face detected in a file, and an embedding for this detected face. + * + * During face indexing, we first detect all the faces in a particular file. + * Then for each such detected region, we compute an embedding of that part of + * the file. Together, this detection region and the emedding travel together in + * this {@link Face} interface. + */ +export interface Face { + /** + * A unique identifier for the face. + * + * This ID is guaranteed to be unique for all the faces detected in all the + * files for the user. In particular, each file can have multiple faces but + * they all will get their own unique {@link faceID}. + */ + faceID: string; + /** + * The face detection. Describes the region within the image that was + * detected to be a face, and a set of landmarks (e.g. "eyes") of the + * detection. + * + * All coordinates are relative to and normalized by the image's dimension, + * i.e. they have been normalized to lie between 0 and 1, with 0 being the + * left (or top) and 1 being the width (or height) of the image. + */ + detection: { + /** + * The region within the image that contains the face. + * + * All coordinates and sizes are between 0 and 1, normalized by the + * dimensions of the image. + * */ + box: Box; + /** + * Face "landmarks", e.g. eyes. + * + * The exact landmarks and their order depends on the face detection + * algorithm being used. + * + * The coordinatesare between 0 and 1, normalized by the dimensions of + * the image. + */ + landmarks: Point[]; + }; + /** + * An correctness probability (0 to 1) that the face detection algorithm + * gave to the detection. Higher values are better. + */ + score: number; + /** + * The computed blur for the detected face. + * + * The exact semantics and range for these (floating point) values depend on + * the face indexing algorithm / pipeline version being used. + * */ + blur: number; + /** + * An embedding for the face. + * + * This is an opaque numeric (signed floating point) vector whose semantics + * and length depend on the version of the face indexing algorithm / + * pipeline that we are using. However, within a set of embeddings with the + * same version, the property is that two such embedding vectors will be + * "cosine similar" to each other if they are both faces of the same person. + */ + embedding: number[]; +} + +/** The x and y coordinates of a point. */ +export interface Point { + x: number; + y: number; +} + +/** The dimensions of something, say an image. */ +export interface Dimensions { + width: number; + height: number; +} + +/** A rectangle given by its top left coordinates and dimensions. */ +export interface Box { + /** The x coordinate of the the top left (xMin). */ + x: number; + /** The y coodinate of the top left (yMin). */ + y: number; + /** The width of the box. */ + width: number; + /** The height of the box. */ + height: number; +} + /** * Index faces in the given file. * diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index e0e92212d9..e3c2b616b4 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -7,16 +7,12 @@ import { isBetaUser, isInternalUser, } from "@/new/photos/services/feature-flags"; -import { - clearFaceDB, - faceIndex, - indexableAndIndexedCounts, -} from "@/new/photos/services/ml/db"; import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName, isDesktop } from "@/next/app"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { clearFaceDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; /** diff --git a/web/packages/new/photos/services/ml/types.ts b/web/packages/new/photos/services/ml/types.ts deleted file mode 100644 index 1d3168d58b..0000000000 --- a/web/packages/new/photos/services/ml/types.ts +++ /dev/null @@ -1,159 +0,0 @@ -/** - * The faces in a file (and an embedding for each of them). - * - * This interface describes the format of both local and remote face data. - * - * - Local face detections and embeddings (collectively called as the face - * index) are generated by the current client when uploading a file (or when - * noticing a file which doesn't yet have a face index), stored in the local - * IndexedDB ("ml/db") and also uploaded (E2EE) to remote. - * - * - Remote embeddings are fetched by subsequent clients to avoid them having to - * reindex (indexing faces is a costly operation, esp for mobile clients). - * - * In both these scenarios (whether generated locally or fetched from remote), - * we end up with an face index described by this {@link FaceIndex} interface. - * - * It has a top level envelope with information about the file (in particular - * the primary key {@link fileID}), an inner envelope {@link faceEmbedding} with - * metadata about the indexing, and an array of {@link faces} each containing - * the result of a face detection and an embedding for that detected face. - * - * The word embedding is used to refer two things: The last one (faceEmbedding > - * faces > embedding) is the "actual" embedding, but sometimes we colloquially - * refer to the inner envelope (the "faceEmbedding") also an embedding since a - * file can have other types of embedding (envelopes), e.g. a "clipEmbedding". - */ -export interface FaceIndex { - /** - * The ID of the {@link EnteFile} whose index this is. - * - * This is used as the primary key when storing the index locally (An - * {@link EnteFile} is guaranteed to have its fileID be unique in the - * namespace of the user. Even if someone shares a file with the user the - * user will get a file entry with a fileID unique to them). - */ - fileID: number; - /** - * The width (in px) of the image (file). - */ - width: number; - /** - * The height (in px) of the image (file). - */ - height: number; - /** - * The "face embedding" for the file. - * - * This is an envelope that contains a list of indexed faces and metadata - * about the indexing. - */ - faceEmbedding: { - /** - * An integral version number of the indexing algorithm / pipeline. - * - * Clients agree out of band what a particular version means. The - * guarantee is that an embedding with a particular version will be the - * same (to negligible floating point epsilons) irrespective of the - * client that indexed the file. - */ - version: number; - /** The UA for the client which generated this embedding. */ - client: string; - /** The list of faces (and their embeddings) detected in the file. */ - faces: Face[]; - }; -} - -/** - * A face detected in a file, and an embedding for this detected face. - * - * During face indexing, we first detect all the faces in a particular file. - * Then for each such detected region, we compute an embedding of that part of - * the file. Together, this detection region and the emedding travel together in - * this {@link Face} interface. - */ -export interface Face { - /** - * A unique identifier for the face. - * - * This ID is guaranteed to be unique for all the faces detected in all the - * files for the user. In particular, each file can have multiple faces but - * they all will get their own unique {@link faceID}. - */ - faceID: string; - /** - * The face detection. Describes the region within the image that was - * detected to be a face, and a set of landmarks (e.g. "eyes") of the - * detection. - * - * All coordinates are relative to and normalized by the image's dimension, - * i.e. they have been normalized to lie between 0 and 1, with 0 being the - * left (or top) and 1 being the width (or height) of the image. - */ - detection: { - /** - * The region within the image that contains the face. - * - * All coordinates and sizes are between 0 and 1, normalized by the - * dimensions of the image. - * */ - box: Box; - /** - * Face "landmarks", e.g. eyes. - * - * The exact landmarks and their order depends on the face detection - * algorithm being used. - * - * The coordinatesare between 0 and 1, normalized by the dimensions of - * the image. - */ - landmarks: Point[]; - }; - /** - * An correctness probability (0 to 1) that the face detection algorithm - * gave to the detection. Higher values are better. - */ - score: number; - /** - * The computed blur for the detected face. - * - * The exact semantics and range for these (floating point) values depend on - * the face indexing algorithm / pipeline version being used. - * */ - blur: number; - /** - * An embedding for the face. - * - * This is an opaque numeric (signed floating point) vector whose semantics - * and length depend on the version of the face indexing algorithm / - * pipeline that we are using. However, within a set of embeddings with the - * same version, the property is that two such embedding vectors will be - * "cosine similar" to each other if they are both faces of the same person. - */ - embedding: number[]; -} - -/** The x and y coordinates of a point. */ -export interface Point { - x: number; - y: number; -} - -/** The dimensions of something, say an image. */ -export interface Dimensions { - width: number; - height: number; -} - -/** A rectangle given by its top left coordinates and dimensions. */ -export interface Box { - /** The x coordinate of the the top left (xMin). */ - x: number; - /** The y coodinate of the top left (yMin). */ - y: number; - /** The width of the box. */ - width: number; - /** The height of the box. */ - height: number; -} diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 1ad874d74c..535b659a5a 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,22 +1,21 @@ -import downloadManager from "@/new/photos/services/download"; -import { - indexableFileIDs, - markIndexingFailed, - saveFaceIndex, - updateAssumingLocalFiles, -} from "@/new/photos/services/ml/db"; -import type { FaceIndex } from "@/new/photos/services/ml/types"; import type { EnteFile } from "@/new/photos/types/file"; +import { fileLogID } from "@/new/photos/utils/file"; import { getKVN } from "@/next/kv"; import { ensureAuthToken } from "@/next/local-user"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { wait } from "@/utils/promise"; import { expose } from "comlink"; -import { fileLogID } from "../../utils/file"; +import downloadManager from "../download"; import { getAllLocalFiles, getLocalTrashedFiles } from "../files"; +import { + indexableFileIDs, + markIndexingFailed, + saveFaceIndex, + updateAssumingLocalFiles, +} from "./db"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; -import { indexFaces } from "./index-face"; +import { type FaceIndex, indexFaces } from "./face"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ From ed2c63cf03621393b3535042e3f23ac244c35059 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 10:28:48 +0530 Subject: [PATCH 241/466] Port the mobile algo Function: generateFaceThumbnailsUsingCanvas File: mobile/lib/utils/image_ml_util.dart --- web/packages/new/photos/services/ml/crop.ts | 63 +++++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 17a6b3dcad..a1ed7d42b5 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,6 +1,7 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; import type { Box, FaceAlignment } from "./face"; +import { clamp } from "./image"; /** * Return the rectangle ("crop") of the original image that contains the face @@ -17,13 +18,67 @@ import type { Box, FaceAlignment } from "./face"; * * @param imageBitmap The original image. * - * @param faceBoxes Box (rectangles) marking the bounds of each of the faces - * that were detected in the given image. + * @param faceBoxes Boxes (rectangles relative to the image size) marking the + * bounds of each of the faces that were detected in the given image. */ -export const extractFaceCrops = async ( +export const extractFaceCrops = ( imageBitmap: ImageBitmap, faceBoxes: Box[], -) => {}; +) => { + const { width: imageWidth, height: imageHeight } = imageBitmap; + return faceBoxes.map((faceBox) => { + // The faceBox is relative to the image size, and we need to convert + // them to absolute values first. + const faceX = faceBox.x * imageWidth; + const faceY = faceBox.y * imageHeight; + const faceWidth = faceBox.width * imageWidth; + const faceHeight = faceBox.height * imageHeight; + + // Calculate the crop values by adding some padding around the face and + // making sure it's centered. + const regularPadding = 0.4; + const minimumPadding = 0.1; + const xCrop = faceX - faceWidth * regularPadding; + const xOvershoot = Math.abs(Math.min(0, xCrop)) / faceWidth; + const widthCrop = + faceWidth * (1 + 2 * regularPadding) - + 2 * + Math.min(xOvershoot, regularPadding - minimumPadding) * + faceWidth; + + const yCrop = faceY - faceHeight * regularPadding; + const yOvershoot = Math.abs(Math.min(0, yCrop)) / faceHeight; + const heightCrop = + faceHeight * (1 + 2 * regularPadding) - + 2 * + Math.min(yOvershoot, regularPadding - minimumPadding) * + faceHeight; + + // Prevent the crop from going out of image bounds. + const x = clamp(xCrop, 0, imageWidth); + const y = clamp(yCrop, 0, imageHeight); + const width = clamp(widthCrop, 0, imageWidth - x); + const height = clamp(heightCrop, 0, imageHeight - y); + + const offscreenCanvas = new OffscreenCanvas(width, height); + const offscreenCtx = ensure(offscreenCanvas.getContext("2d")); + offscreenCtx.imageSmoothingQuality = "high"; + + offscreenCtx.drawImage( + imageBitmap, + x, + y, + width, + height, + 0, + 0, + width, + height, + ); + + return offscreenCanvas.transferToImageBitmap(); + }); +}; export const saveFaceCrop = async ( imageBitmap: ImageBitmap, From e15dbc202378b33e11cd2e19256425fb08e4e794 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 10:57:45 +0530 Subject: [PATCH 242/466] Outline --- web/packages/new/photos/services/ml/crop.ts | 23 ++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index a1ed7d42b5..03b4cc4073 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,17 +1,26 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import type { Box, FaceAlignment } from "./face"; +import type { Box, FaceAlignment, FaceIndex } from "./face"; import { clamp } from "./image"; /** - * Return the rectangle ("crop") of the original image that contains the face - * that was detected by the face detection algorithm during indexing. + * Extract and locally save the face crops (the rectangle of the original image + * that contain the detected face) for each of the faces detected in an image. * - * @param imageBitmap - * @param faceID - * @param alignment - * @returns + * @param imageBitmap The original image. + * + * @param faceIndex The {@link FaceIndex} containing information about the faces + * detected in the given image. + * + * The face crops are saved in a local cache and can subsequently be retrieved + * from the {@link BlobCache} named "face-crops". */ +export const saveFaceCrops = ( + imageBitmap: ImageBitmap, + faceIndex: FaceIndex, +) => { + +} /** * Return the face crops corresponding to each of the given face detections. From 6af39d52e374a984287f96ed8d18089ae5480414 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 11:07:11 +0530 Subject: [PATCH 243/466] Impl --- web/packages/new/photos/services/ml/crop.ts | 112 +++++++++----------- 1 file changed, 52 insertions(+), 60 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 03b4cc4073..d4ec5e0f2e 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -15,78 +15,70 @@ import { clamp } from "./image"; * The face crops are saved in a local cache and can subsequently be retrieved * from the {@link BlobCache} named "face-crops". */ -export const saveFaceCrops = ( +export const saveFaceCrops = async ( imageBitmap: ImageBitmap, faceIndex: FaceIndex, ) => { + const cache = await blobCache("face-crops"); -} + return Promise.all( + faceIndex.faceEmbedding.faces.map(({ faceID, detection }) => + extractFaceCrop2(imageBitmap, detection.box).then((b) => + cache.put(faceID, b), + ), + ), + ); +}; /** * Return the face crops corresponding to each of the given face detections. * * @param imageBitmap The original image. * - * @param faceBoxes Boxes (rectangles relative to the image size) marking the - * bounds of each of the faces that were detected in the given image. + * @param faceBox A box (a rectangle relative to the image size) marking the + * bounds of face in the given image. + * + * @returns a JPEG blob. */ -export const extractFaceCrops = ( - imageBitmap: ImageBitmap, - faceBoxes: Box[], -) => { +export const extractFaceCrop2 = (imageBitmap: ImageBitmap, faceBox: Box) => { const { width: imageWidth, height: imageHeight } = imageBitmap; - return faceBoxes.map((faceBox) => { - // The faceBox is relative to the image size, and we need to convert - // them to absolute values first. - const faceX = faceBox.x * imageWidth; - const faceY = faceBox.y * imageHeight; - const faceWidth = faceBox.width * imageWidth; - const faceHeight = faceBox.height * imageHeight; - - // Calculate the crop values by adding some padding around the face and - // making sure it's centered. - const regularPadding = 0.4; - const minimumPadding = 0.1; - const xCrop = faceX - faceWidth * regularPadding; - const xOvershoot = Math.abs(Math.min(0, xCrop)) / faceWidth; - const widthCrop = - faceWidth * (1 + 2 * regularPadding) - - 2 * - Math.min(xOvershoot, regularPadding - minimumPadding) * - faceWidth; - - const yCrop = faceY - faceHeight * regularPadding; - const yOvershoot = Math.abs(Math.min(0, yCrop)) / faceHeight; - const heightCrop = - faceHeight * (1 + 2 * regularPadding) - - 2 * - Math.min(yOvershoot, regularPadding - minimumPadding) * - faceHeight; - - // Prevent the crop from going out of image bounds. - const x = clamp(xCrop, 0, imageWidth); - const y = clamp(yCrop, 0, imageHeight); - const width = clamp(widthCrop, 0, imageWidth - x); - const height = clamp(heightCrop, 0, imageHeight - y); - - const offscreenCanvas = new OffscreenCanvas(width, height); - const offscreenCtx = ensure(offscreenCanvas.getContext("2d")); - offscreenCtx.imageSmoothingQuality = "high"; - - offscreenCtx.drawImage( - imageBitmap, - x, - y, - width, - height, - 0, - 0, - width, - height, - ); - - return offscreenCanvas.transferToImageBitmap(); - }); + + // The faceBox is relative to the image size, and we need to convert + // them to absolute values first. + const faceX = faceBox.x * imageWidth; + const faceY = faceBox.y * imageHeight; + const faceWidth = faceBox.width * imageWidth; + const faceHeight = faceBox.height * imageHeight; + + // Calculate the crop values by adding some padding around the face and + // making sure it's centered. + const regularPadding = 0.4; + const minimumPadding = 0.1; + const xCrop = faceX - faceWidth * regularPadding; + const xOvershoot = Math.abs(Math.min(0, xCrop)) / faceWidth; + const widthCrop = + faceWidth * (1 + 2 * regularPadding) - + 2 * Math.min(xOvershoot, regularPadding - minimumPadding) * faceWidth; + + const yCrop = faceY - faceHeight * regularPadding; + const yOvershoot = Math.abs(Math.min(0, yCrop)) / faceHeight; + const heightCrop = + faceHeight * (1 + 2 * regularPadding) - + 2 * Math.min(yOvershoot, regularPadding - minimumPadding) * faceHeight; + + // Prevent the crop from going out of image bounds. + const x = clamp(xCrop, 0, imageWidth); + const y = clamp(yCrop, 0, imageHeight); + const width = clamp(widthCrop, 0, imageWidth - x); + const height = clamp(heightCrop, 0, imageHeight - y); + + const canvas = new OffscreenCanvas(width, height); + const ctx = ensure(canvas.getContext("2d")); + ctx.imageSmoothingQuality = "high"; + + ctx.drawImage(imageBitmap, x, y, width, height, 0, 0, width, height); + + return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; export const saveFaceCrop = async ( From 2a587039b06bf0da1284dab4dc662114e7a6482a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 11:10:22 +0530 Subject: [PATCH 244/466] gen2 --- web/packages/new/photos/services/ml/face.ts | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 0c91dfe84b..92d178c46b 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -25,7 +25,7 @@ import { translate, type Matrix as TransformationMatrix, } from "transformation-matrix"; -import { saveFaceCrop } from "./crop"; +import { saveFaceCrops } from "./crop"; import { clamp, grayscaleIntMatrixFromNormalized2List, @@ -234,7 +234,7 @@ export const indexFaces = async ( const fileID = enteFile.id; try { - return { + const faceIndex = { fileID, width, height, @@ -244,6 +244,16 @@ export const indexFaces = async ( faces: await indexFacesInBitmap(fileID, imageBitmap), }, }; + // This step, saving face crops, is not part of the indexing pipeline; + // we just do it here since we have already have the ImageBitmap at + // hand. Ignore errors that happen during this since it does not impact + // the generated face index. + try { + await saveFaceCrops(imageBitmap, faceIndex); + } catch (e) { + log.error(`Failed to save face crops for file ${fileID}`, e); + } + return faceIndex; } finally { imageBitmap.close(); } @@ -308,18 +318,9 @@ const indexFacesInBitmap = async ( const alignments: FaceAlignment[] = []; - for (const { faceID, detection } of partialResult) { + for (const { detection } of partialResult) { const alignment = computeFaceAlignment(detection); alignments.push(alignment); - - // This step is not part of the indexing pipeline, we just do it here - // since we have already computed the face alignment. Ignore errors that - // happen during this since it does not impact the generated face index. - try { - await saveFaceCrop(imageBitmap, faceID, alignment); - } catch (e) { - log.error(`Failed to save face crop for faceID ${faceID}`, e); - } } const alignedFacesData = convertToMobileFaceNetInput( From 3065b392f3d50e147e0e8b371678e0d5ea01da0a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 11:33:33 +0530 Subject: [PATCH 245/466] cmp --- web/packages/new/photos/services/ml/crop.ts | 69 ++++++++++++++------- web/packages/new/photos/services/ml/face.ts | 32 +++++++++- 2 files changed, 76 insertions(+), 25 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index d4ec5e0f2e..863ceb0750 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,6 +1,12 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import type { Box, FaceAlignment, FaceIndex } from "./face"; +import { + computeFaceAlignment, + restoreToImageDimensions, + type Box, + type FaceAlignment, + type FaceIndex, +} from "./face"; import { clamp } from "./image"; /** @@ -23,9 +29,13 @@ export const saveFaceCrops = async ( return Promise.all( faceIndex.faceEmbedding.faces.map(({ faceID, detection }) => - extractFaceCrop2(imageBitmap, detection.box).then((b) => - cache.put(faceID, b), - ), + // extractFaceCrop2(imageBitmap, detection.box).then((b) => + extractFaceCrop( + imageBitmap, + computeFaceAlignment( + restoreToImageDimensions(detection, imageBitmap), + ), + ).then((b) => cache.put(faceID, b)), ), ); }; @@ -81,31 +91,46 @@ export const extractFaceCrop2 = (imageBitmap: ImageBitmap, faceBox: Box) => { return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; -export const saveFaceCrop = async ( - imageBitmap: ImageBitmap, - faceID: string, - alignment: FaceAlignment, -) => { - const faceCrop = extractFaceCrop(imageBitmap, alignment); - const blob = await imageBitmapToBlob(faceCrop); - faceCrop.close(); +// export const saveFaceCrop = async ( +// imageBitmap: ImageBitmap, +// faceID: string, +// alignment: FaceAlignment, +// ) => { +// const faceCrop = extractFaceCrop(imageBitmap, alignment); +// const blob = await imageBitmapToBlob(faceCrop); +// faceCrop.close(); - const cache = await blobCache("face-crops"); - await cache.put(faceID, blob); +// const cache = await blobCache("face-crops"); +// await cache.put(faceID, blob); - return blob; -}; +// return blob; +// }; -const imageBitmapToBlob = (imageBitmap: ImageBitmap) => { - const canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); - ensure(canvas.getContext("2d")).drawImage(imageBitmap, 0, 0); - return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); +// const imageBitmapToBlob = (imageBitmap: ImageBitmap) => { +// const canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); +// ensure(canvas.getContext("2d")).drawImage(imageBitmap, 0, 0); +// return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); +// }; + +const unnormalizeBox = (imageBitmap: ImageBitmap, alignment: FaceAlignment) => { + const { width: imageWidth, height: imageHeight } = imageBitmap; + + const obb = alignment.boundingBox; + // The faceBox is relative to the image size, and we need to convert + // them to absolute values first. + const faceX = obb.x * imageWidth; + const faceY = obb.y * imageHeight; + const faceWidth = obb.width * imageWidth; + const faceHeight = obb.height * imageHeight; + + const bb = { x: faceX, y: faceY, width: faceWidth, height: faceHeight }; + return bb; }; const extractFaceCrop = ( imageBitmap: ImageBitmap, alignment: FaceAlignment, -): ImageBitmap => { +) => { // TODO-ML: This algorithm is different from what is used by the mobile app. // Also, it needs to be something that can work fully using the embedding we // receive from remote - the `alignment.boundingBox` will not be available @@ -152,7 +177,7 @@ const extractFaceCrop = ( enlargedOutputBox.height, ); - return offscreen.transferToImageBitmap(); + return offscreen.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; /** Round all the components of the box. */ diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 92d178c46b..aaef3b922b 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -336,7 +336,7 @@ const indexFacesInBitmap = async ( return partialResult.map(({ faceID, detection, score }, i) => ({ faceID, - detection: normalizeToImageDimensions(detection, imageDimensions), + detection: normalizeByImageDimensions(detection, imageDimensions), score, blur: blurs[i]!, embedding: Array.from(embeddings[i]!), @@ -629,7 +629,10 @@ export interface FaceAlignment { * * @param faceDetection A geometry indicating a face detected in an image. */ -const computeFaceAlignment = (faceDetection: FaceDetection): FaceAlignment => +// TODO-ML: Unexport? +export const computeFaceAlignment = ( + faceDetection: FaceDetection, +): FaceAlignment => computeFaceAlignmentUsingSimilarityTransform( faceDetection, normalizeLandmarks(idealMobileFaceNetLandmarks, mobileFaceNetFaceSize), @@ -936,7 +939,7 @@ const computeEmbeddings = async ( /** * Convert the coordinates to between 0-1, normalized by the image's dimensions. */ -const normalizeToImageDimensions = ( +const normalizeByImageDimensions = ( faceDetection: FaceDetection, { width, height }: Dimensions, ): FaceDetection => { @@ -953,3 +956,26 @@ const normalizeToImageDimensions = ( })); return { box, landmarks }; }; + +/** + * Scale normalized coordinates from 0-1 back to the image's dimensions. + * + * Inverse of {@link normalizeByImageDimensions}. + */ +export const restoreToImageDimensions = ( + faceDetection: FaceDetection, + { width, height }: Dimensions, +): FaceDetection => { + const oldBox: Box = faceDetection.box; + const box = { + x: oldBox.x * width, + y: oldBox.y * height, + width: oldBox.width * width, + height: oldBox.height * height, + }; + const landmarks = faceDetection.landmarks.map((l) => ({ + x: l.x * width, + y: l.y * height, + })); + return { box, landmarks }; +}; From 401ae85f408bd22ba78f2c391de81ac956510a56 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 12:08:54 +0530 Subject: [PATCH 246/466] take 3 --- web/packages/new/photos/services/ml/crop.ts | 109 +++++++++++++++++--- 1 file changed, 96 insertions(+), 13 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 863ceb0750..d08ed77f13 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,12 +1,6 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import { - computeFaceAlignment, - restoreToImageDimensions, - type Box, - type FaceAlignment, - type FaceIndex, -} from "./face"; +import { type Box, type FaceAlignment, type FaceIndex } from "./face"; import { clamp } from "./image"; /** @@ -27,17 +21,106 @@ export const saveFaceCrops = async ( ) => { const cache = await blobCache("face-crops"); + const faces = faceIndex.faceEmbedding.faces; + const blobs = await generateFaceThumbnailsUsingCanvas( + imageBitmap, + faces.map(({ detection }) => detection.box), + ); + for (let i = 0; i < faces.length; i++) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + await cache.put(faces[i]!.faceID, blobs[i]!); + } + /* return Promise.all( faceIndex.faceEmbedding.faces.map(({ faceID, detection }) => // extractFaceCrop2(imageBitmap, detection.box).then((b) => - extractFaceCrop( - imageBitmap, - computeFaceAlignment( - restoreToImageDimensions(detection, imageBitmap), - ), - ).then((b) => cache.put(faceID, b)), + // extractFaceCrop( + // imageBitmap, + // computeFaceAlignment( + // restoreToImageDimensions(detection, imageBitmap), + // ), + // ).then((b) => cache.put(faceID, b)), + ), ); + */ +}; + +const generateFaceThumbnailsUsingCanvas = async ( + imageBitmap: ImageBitmap, + faceBoxes: Box[], +) => { + const img = imageBitmap; + + const futureFaceThumbnails: Promise[] = []; + for (const faceBox of faceBoxes) { + // Note that the faceBox values are relative to the image size, so we need to convert them to absolute values first + const xMinAbs = faceBox.x * img.width; + const yMinAbs = faceBox.y * img.height; + const widthAbs = faceBox.width * img.width; + const heightAbs = faceBox.height * img.height; + + // Calculate the crop values by adding some padding around the face and making sure it's centered + const regularPadding = 0.4; + const minimumPadding = 0.1; + const xCrop = xMinAbs - widthAbs * regularPadding; + const xOvershoot = Math.abs(Math.min(0, xCrop)) / widthAbs; + const widthCrop = + widthAbs * (1 + 2 * regularPadding) - + 2 * + Math.min(xOvershoot, regularPadding - minimumPadding) * + widthAbs; + const yCrop = yMinAbs - heightAbs * regularPadding; + const yOvershoot = Math.abs(Math.min(0, yCrop)) / heightAbs; + const heightCrop = + heightAbs * (1 + 2 * regularPadding) - + 2 * + Math.min(yOvershoot, regularPadding - minimumPadding) * + heightAbs; + + // Prevent the face from going out of image bounds + const xCropSafe = clamp(xCrop, 0, img.width); + const yCropSafe = clamp(yCrop, 0, img.height); + const widthCropSafe = clamp(widthCrop, 0, img.width - xCropSafe); + const heightCropSafe = clamp(heightCrop, 0, img.height - yCropSafe); + + futureFaceThumbnails.push( + _cropAndEncodeCanvas( + img, + xCropSafe, + yCropSafe, + widthCropSafe, + heightCropSafe, + ), + ); + } + return Promise.all(futureFaceThumbnails); +}; + +const _cropAndEncodeCanvas = async ( + imageBitmap: ImageBitmap, + x: number, + y: number, + width: number, + height: number, +) => { + const offscreen = new OffscreenCanvas(width, height); + const offscreenCtx = ensure(offscreen.getContext("2d")); + offscreenCtx.imageSmoothingQuality = "high"; + + offscreenCtx.drawImage( + imageBitmap, + x, + y, + width, + height, + 0, + 0, + width, + height, + ); + + return offscreen.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; /** From 594d0e7ea0367ee7ea3f63f300c514824890cf9c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 12:17:54 +0530 Subject: [PATCH 247/466] The missing bit (as compared to mobile) --- web/apps/photos/src/components/ml/PeopleList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index d06c3cde1d..d0481ef3f7 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -138,7 +138,7 @@ const FaceCropImageView: React.FC = ({ faceID }) => { }, [faceID]); return objectURL ? ( - + ) : ( ); From ce045fb6800ea3d0d1da21c9040430849aa4fb52 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 12:41:02 +0530 Subject: [PATCH 248/466] Cleanup --- web/packages/new/photos/services/ml/crop.ts | 218 +------------------- web/packages/new/photos/services/ml/face.ts | 32 +-- 2 files changed, 10 insertions(+), 240 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index d08ed77f13..12a83904e8 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,6 +1,6 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; -import { type Box, type FaceAlignment, type FaceIndex } from "./face"; +import { type Box, type FaceIndex } from "./face"; import { clamp } from "./image"; /** @@ -21,106 +21,13 @@ export const saveFaceCrops = async ( ) => { const cache = await blobCache("face-crops"); - const faces = faceIndex.faceEmbedding.faces; - const blobs = await generateFaceThumbnailsUsingCanvas( - imageBitmap, - faces.map(({ detection }) => detection.box), - ); - for (let i = 0; i < faces.length; i++) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - await cache.put(faces[i]!.faceID, blobs[i]!); - } - /* return Promise.all( faceIndex.faceEmbedding.faces.map(({ faceID, detection }) => - // extractFaceCrop2(imageBitmap, detection.box).then((b) => - // extractFaceCrop( - // imageBitmap, - // computeFaceAlignment( - // restoreToImageDimensions(detection, imageBitmap), - // ), - // ).then((b) => cache.put(faceID, b)), - - ), - ); - */ -}; - -const generateFaceThumbnailsUsingCanvas = async ( - imageBitmap: ImageBitmap, - faceBoxes: Box[], -) => { - const img = imageBitmap; - - const futureFaceThumbnails: Promise[] = []; - for (const faceBox of faceBoxes) { - // Note that the faceBox values are relative to the image size, so we need to convert them to absolute values first - const xMinAbs = faceBox.x * img.width; - const yMinAbs = faceBox.y * img.height; - const widthAbs = faceBox.width * img.width; - const heightAbs = faceBox.height * img.height; - - // Calculate the crop values by adding some padding around the face and making sure it's centered - const regularPadding = 0.4; - const minimumPadding = 0.1; - const xCrop = xMinAbs - widthAbs * regularPadding; - const xOvershoot = Math.abs(Math.min(0, xCrop)) / widthAbs; - const widthCrop = - widthAbs * (1 + 2 * regularPadding) - - 2 * - Math.min(xOvershoot, regularPadding - minimumPadding) * - widthAbs; - const yCrop = yMinAbs - heightAbs * regularPadding; - const yOvershoot = Math.abs(Math.min(0, yCrop)) / heightAbs; - const heightCrop = - heightAbs * (1 + 2 * regularPadding) - - 2 * - Math.min(yOvershoot, regularPadding - minimumPadding) * - heightAbs; - - // Prevent the face from going out of image bounds - const xCropSafe = clamp(xCrop, 0, img.width); - const yCropSafe = clamp(yCrop, 0, img.height); - const widthCropSafe = clamp(widthCrop, 0, img.width - xCropSafe); - const heightCropSafe = clamp(heightCrop, 0, img.height - yCropSafe); - - futureFaceThumbnails.push( - _cropAndEncodeCanvas( - img, - xCropSafe, - yCropSafe, - widthCropSafe, - heightCropSafe, + extractFaceCrop(imageBitmap, detection.box).then((b) => + cache.put(faceID, b), ), - ); - } - return Promise.all(futureFaceThumbnails); -}; - -const _cropAndEncodeCanvas = async ( - imageBitmap: ImageBitmap, - x: number, - y: number, - width: number, - height: number, -) => { - const offscreen = new OffscreenCanvas(width, height); - const offscreenCtx = ensure(offscreen.getContext("2d")); - offscreenCtx.imageSmoothingQuality = "high"; - - offscreenCtx.drawImage( - imageBitmap, - x, - y, - width, - height, - 0, - 0, - width, - height, + ), ); - - return offscreen.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; /** @@ -133,11 +40,11 @@ const _cropAndEncodeCanvas = async ( * * @returns a JPEG blob. */ -export const extractFaceCrop2 = (imageBitmap: ImageBitmap, faceBox: Box) => { +export const extractFaceCrop = (imageBitmap: ImageBitmap, faceBox: Box) => { const { width: imageWidth, height: imageHeight } = imageBitmap; - // The faceBox is relative to the image size, and we need to convert - // them to absolute values first. + // The faceBox coordinates are normalized 0-1 relative to the image size, + // and we need to convert them back to absolute values first. const faceX = faceBox.x * imageWidth; const faceY = faceBox.y * imageHeight; const faceWidth = faceBox.width * imageWidth; @@ -173,114 +80,3 @@ export const extractFaceCrop2 = (imageBitmap: ImageBitmap, faceBox: Box) => { return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); }; - -// export const saveFaceCrop = async ( -// imageBitmap: ImageBitmap, -// faceID: string, -// alignment: FaceAlignment, -// ) => { -// const faceCrop = extractFaceCrop(imageBitmap, alignment); -// const blob = await imageBitmapToBlob(faceCrop); -// faceCrop.close(); - -// const cache = await blobCache("face-crops"); -// await cache.put(faceID, blob); - -// return blob; -// }; - -// const imageBitmapToBlob = (imageBitmap: ImageBitmap) => { -// const canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); -// ensure(canvas.getContext("2d")).drawImage(imageBitmap, 0, 0); -// return canvas.convertToBlob({ type: "image/jpeg", quality: 0.8 }); -// }; - -const unnormalizeBox = (imageBitmap: ImageBitmap, alignment: FaceAlignment) => { - const { width: imageWidth, height: imageHeight } = imageBitmap; - - const obb = alignment.boundingBox; - // The faceBox is relative to the image size, and we need to convert - // them to absolute values first. - const faceX = obb.x * imageWidth; - const faceY = obb.y * imageHeight; - const faceWidth = obb.width * imageWidth; - const faceHeight = obb.height * imageHeight; - - const bb = { x: faceX, y: faceY, width: faceWidth, height: faceHeight }; - return bb; -}; - -const extractFaceCrop = ( - imageBitmap: ImageBitmap, - alignment: FaceAlignment, -) => { - // TODO-ML: This algorithm is different from what is used by the mobile app. - // Also, it needs to be something that can work fully using the embedding we - // receive from remote - the `alignment.boundingBox` will not be available - // to us in such cases. - const paddedBox = roundBox(enlargeBox(alignment.boundingBox, 1.5)); - const outputSize = { width: paddedBox.width, height: paddedBox.height }; - - const maxDimension = 256; - const scale = Math.min( - maxDimension / paddedBox.width, - maxDimension / paddedBox.height, - ); - - if (scale < 1) { - outputSize.width = Math.round(scale * paddedBox.width); - outputSize.height = Math.round(scale * paddedBox.height); - } - - const offscreen = new OffscreenCanvas(outputSize.width, outputSize.height); - const offscreenCtx = ensure(offscreen.getContext("2d")); - offscreenCtx.imageSmoothingQuality = "high"; - - offscreenCtx.translate(outputSize.width / 2, outputSize.height / 2); - - const outputBox = { - x: -outputSize.width / 2, - y: -outputSize.height / 2, - width: outputSize.width, - height: outputSize.height, - }; - - const enlargedBox = enlargeBox(paddedBox, 1.5); - const enlargedOutputBox = enlargeBox(outputBox, 1.5); - - offscreenCtx.drawImage( - imageBitmap, - enlargedBox.x, - enlargedBox.y, - enlargedBox.width, - enlargedBox.height, - enlargedOutputBox.x, - enlargedOutputBox.y, - enlargedOutputBox.width, - enlargedOutputBox.height, - ); - - return offscreen.convertToBlob({ type: "image/jpeg", quality: 0.8 }); -}; - -/** Round all the components of the box. */ -const roundBox = (box: Box): Box => ({ - x: Math.round(box.x), - y: Math.round(box.y), - width: Math.round(box.width), - height: Math.round(box.height), -}); - -/** Increase the size of the given {@link box} by {@link factor}. */ -const enlargeBox = (box: Box, factor: number): Box => { - const center = { x: box.x + box.width / 2, y: box.y + box.height / 2 }; - const newWidth = factor * box.width; - const newHeight = factor * box.height; - - return { - x: center.x - newWidth / 2, - y: center.y - newHeight / 2, - width: newWidth, - height: newHeight, - }; -}; diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index aaef3b922b..a55ecb3187 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -423,7 +423,7 @@ const convertToYOLOInputFloat32ChannelsFirst = (imageBitmap: ImageBitmap) => { return { yoloInput, yoloSize }; }; -export interface YOLOFaceDetection { +interface YOLOFaceDetection { box: Box; landmarks: Point[]; score: number; @@ -607,7 +607,7 @@ const makeFaceID = (fileID: number, box: Box, image: Dimensions) => { return [`${fileID}`, xMin, yMin, xMax, yMax].join("_"); }; -export interface FaceAlignment { +interface FaceAlignment { /** * An affine transformation matrix (rotation, translation, scaling) to align * the face extracted from the image. @@ -629,10 +629,7 @@ export interface FaceAlignment { * * @param faceDetection A geometry indicating a face detected in an image. */ -// TODO-ML: Unexport? -export const computeFaceAlignment = ( - faceDetection: FaceDetection, -): FaceAlignment => +const computeFaceAlignment = (faceDetection: FaceDetection): FaceAlignment => computeFaceAlignmentUsingSimilarityTransform( faceDetection, normalizeLandmarks(idealMobileFaceNetLandmarks, mobileFaceNetFaceSize), @@ -956,26 +953,3 @@ const normalizeByImageDimensions = ( })); return { box, landmarks }; }; - -/** - * Scale normalized coordinates from 0-1 back to the image's dimensions. - * - * Inverse of {@link normalizeByImageDimensions}. - */ -export const restoreToImageDimensions = ( - faceDetection: FaceDetection, - { width, height }: Dimensions, -): FaceDetection => { - const oldBox: Box = faceDetection.box; - const box = { - x: oldBox.x * width, - y: oldBox.y * height, - width: oldBox.width * width, - height: oldBox.height * height, - }; - const landmarks = faceDetection.landmarks.map((l) => ({ - x: l.x * width, - y: l.y * height, - })); - return { box, landmarks }; -}; From eb7611a6d17d2e96f3fb8c7494f680a4f4a7a8ce Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 12:53:26 +0530 Subject: [PATCH 249/466] Fix warnings on opening drawer --- .../components/PhotoViewer/FileInfo/ExifData.tsx | 3 ++- .../components/PhotoViewer/FileInfo/InfoItem.tsx | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx index 3e1a3f49bd..c6c0582f8e 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx @@ -3,6 +3,7 @@ import { formatDateTimeFull } from "@ente/shared/time/format"; import { Box, Stack, styled, Typography } from "@mui/material"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; +import React from "react"; import { FileInfoSidebar } from "."; const ExifItem = styled(Box)` @@ -84,7 +85,7 @@ export function ExifData(props: { ) : ( - <> + ), )} diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx index 3cc9f5d35c..061b1dcac2 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx @@ -42,9 +42,19 @@ export default function InfoItem({ {title} - - {caption} - + {!caption || typeof caption == "string" ? ( + + {caption} + + ) : ( + + {caption} + + )} )} From 1ab844da36f8f2df1f548c4667a058818519804c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 13:13:44 +0530 Subject: [PATCH 250/466] regen lower --- web/packages/new/photos/services/ml/blob.ts | 47 +++++++++++++++++++++ web/packages/new/photos/services/ml/crop.ts | 33 +++++++++++++++ web/packages/new/photos/services/ml/face.ts | 47 +-------------------- 3 files changed, 81 insertions(+), 46 deletions(-) create mode 100644 web/packages/new/photos/services/ml/blob.ts diff --git a/web/packages/new/photos/services/ml/blob.ts b/web/packages/new/photos/services/ml/blob.ts new file mode 100644 index 0000000000..fd922824e0 --- /dev/null +++ b/web/packages/new/photos/services/ml/blob.ts @@ -0,0 +1,47 @@ +import { FILE_TYPE } from "@/media/file-type"; +import { decodeLivePhoto } from "@/media/live-photo"; +import { ensure } from "@/utils/ensure"; +import type { EnteFile } from "../../types/file"; +import { getRenderableImage } from "../../utils/file"; +import DownloadManager from "../download"; + +/** + * Return a "renderable" image blob, using {@link file} if present otherwise + * downloading the source image corresponding to {@link enteFile} from remote. + * + * For videos their thumbnail is used. + */ +export const renderableImageBlob = async ( + enteFile: EnteFile, + file?: File | undefined, +) => { + const fileType = enteFile.metadata.fileType; + if (fileType == FILE_TYPE.VIDEO) { + const thumbnailData = await DownloadManager.getThumbnail(enteFile); + return new Blob([ensure(thumbnailData)]); + } else { + return ensure( + file + ? await getRenderableImage(enteFile.metadata.title, file) + : await fetchRenderableBlob(enteFile), + ); + } +}; + +const fetchRenderableBlob = async (enteFile: EnteFile) => { + const fileStream = await DownloadManager.getFile(enteFile); + const fileBlob = await new Response(fileStream).blob(); + const fileType = enteFile.metadata.fileType; + if (fileType == FILE_TYPE.IMAGE) { + return getRenderableImage(enteFile.metadata.title, fileBlob); + } else if (fileType == FILE_TYPE.LIVE_PHOTO) { + const { imageFileName, imageData } = await decodeLivePhoto( + enteFile.metadata.title, + fileBlob, + ); + return getRenderableImage(imageFileName, new Blob([imageData])); + } else { + // A layer above us should've already filtered these out. + throw new Error(`Cannot index unsupported file type ${fileType}`); + } +}; diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 12a83904e8..1f13b0e062 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,8 +1,41 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; +import type { EnteFile } from "../../types/file"; +import { renderableImageBlob } from "./blob"; import { type Box, type FaceIndex } from "./face"; import { clamp } from "./image"; +/** + * Regenerate and locally save face crops for faces in the given file. + * + * Face crops (the rectangular regions of the original image where a particular + * face was detected) are not stored on remote and are generated on demand. On + * the client where the indexing occurred, they get generated during the face + * indexing pipeline itself. But we need to regenerate them locally if the user + * views that item on any other client. + * + * @param enteFile The {@link EnteFile} whose face crops we want to generate. + * + * @param faceIndex The {@link FaceIndex} containing information about the faces + * detected in the given image. + * + * The generated face crops are saved in a local cache and can subsequently be + * retrieved from the {@link BlobCache} named "face-crops". + */ +export const regenerateFaceCrops = async ( + enteFile: EnteFile, + faceIndex: FaceIndex, +) => { + const imageBitmap = + await renderableImageBlob(enteFile).then(createImageBitmap); + + try { + await saveFaceCrops(imageBitmap, faceIndex); + } finally { + imageBitmap.close(); + } +}; + /** * Extract and locally save the face crops (the rectangle of the original image * that contain the detected face) for each of the faces detected in an image. diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index a55ecb3187..5b0650ab32 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -7,12 +7,7 @@ // /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { FILE_TYPE } from "@/media/file-type"; -import { decodeLivePhoto } from "@/media/live-photo"; -import DownloadManager from "@/new/photos/services/download"; - import type { EnteFile } from "@/new/photos/types/file"; -import { getRenderableImage } from "@/new/photos/utils/file"; import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; import { ensure } from "@/utils/ensure"; @@ -25,6 +20,7 @@ import { translate, type Matrix as TransformationMatrix, } from "transformation-matrix"; +import { renderableImageBlob } from "./blob"; import { saveFaceCrops } from "./crop"; import { clamp, @@ -259,47 +255,6 @@ export const indexFaces = async ( } }; -/** - * Return a "renderable" image blob, using {@link file} if present otherwise - * downloading the source image corresponding to {@link enteFile} from remote. - * - * For videos their thumbnail is used. - */ -const renderableImageBlob = async ( - enteFile: EnteFile, - file: File | undefined, -) => { - const fileType = enteFile.metadata.fileType; - if (fileType == FILE_TYPE.VIDEO) { - const thumbnailData = await DownloadManager.getThumbnail(enteFile); - return new Blob([ensure(thumbnailData)]); - } else { - return ensure( - file - ? await getRenderableImage(enteFile.metadata.title, file) - : await fetchRenderableBlob(enteFile), - ); - } -}; - -const fetchRenderableBlob = async (enteFile: EnteFile) => { - const fileStream = await DownloadManager.getFile(enteFile); - const fileBlob = await new Response(fileStream).blob(); - const fileType = enteFile.metadata.fileType; - if (fileType == FILE_TYPE.IMAGE) { - return getRenderableImage(enteFile.metadata.title, fileBlob); - } else if (fileType == FILE_TYPE.LIVE_PHOTO) { - const { imageFileName, imageData } = await decodeLivePhoto( - enteFile.metadata.title, - fileBlob, - ); - return getRenderableImage(imageFileName, new Blob([imageData])); - } else { - // A layer above us should've already filtered these out. - throw new Error(`Cannot index unsupported file type ${fileType}`); - } -}; - const indexFacesInBitmap = async ( fileID: number, imageBitmap: ImageBitmap, From b950fde3f22d9008122b874107e01cfc415ef5a1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 13:31:59 +0530 Subject: [PATCH 251/466] Regen upper --- web/packages/new/photos/services/ml/index.ts | 21 ++++++++++++ web/packages/next/blob-cache.ts | 34 +++++++++----------- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index e3c2b616b4..fb784755f4 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -9,9 +9,11 @@ import { } from "@/new/photos/services/feature-flags"; import type { EnteFile } from "@/new/photos/types/file"; import { clientPackageName, isDesktop } from "@/next/app"; +import { blobCache } from "@/next/blob-cache"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { regenerateFaceCrops } from "./crop"; import { clearFaceDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; @@ -233,3 +235,22 @@ export const unidentifiedFaceIDs = async ( const index = await faceIndex(enteFile.id); return index?.faceEmbedding.faces.map((f) => f.faceID) ?? []; }; + +/** + * Check to see if any of the faces in the given file do not have a face crop + * present locally. If so, then regenerate the face crops for all the faces in + * the file (updating the "face-crops" {@link BlobCache}). + */ +export const regenerateFaceCropsIfNeeded = async (enteFile: EnteFile) => { + const index = await faceIndex(enteFile.id); + if (!index) return; + + const faceIDs = index.faceEmbedding.faces.map((f) => f.faceID); + const cache = await blobCache("face-crops"); + for (const id of faceIDs) { + if (!(await cache.has(id))) { + await regenerateFaceCrops(enteFile, index); + break; + } + } +}; diff --git a/web/packages/next/blob-cache.ts b/web/packages/next/blob-cache.ts index 0db9464521..750f3effd8 100644 --- a/web/packages/next/blob-cache.ts +++ b/web/packages/next/blob-cache.ts @@ -56,6 +56,10 @@ export interface BlobCache { * Get the data corresponding to {@link key} (if found) from the cache. */ get: (key: string) => Promise; + /** + * Check if there is an item corresponding to {@link key} in the cache. + */ + has: (key: string) => Promise; /** * Add the given {@link key}-value ({@link blob}) pair to the cache. */ @@ -153,6 +157,7 @@ const openWebCache = async (name: BlobCacheNamespace) => { const res = await cache.match(key); return await res?.blob(); }, + has: async (key: string) => cache.match(key).then((v) => !!v), put: (key: string, blob: Blob) => cache.put(key, new Response(blob)), delete: (key: string) => cache.delete(key), }; @@ -184,6 +189,16 @@ const openOPFSCacheWeb = async (name: BlobCacheNamespace) => { throw e; } }, + has: async (key: string) => { + try { + await cache.getFileHandle(key); + return true; + } catch (e) { + if (e instanceof DOMException && e.name == "NotFoundError") + return false; + throw e; + } + }, put: async (key: string, blob: Blob) => { const fileHandle = await cache.getFileHandle(key, { create: true, @@ -205,25 +220,6 @@ const openOPFSCacheWeb = async (name: BlobCacheNamespace) => { }; }; -/** - * Return a cached blob for {@link key} in {@link cacheName}. If the blob is not - * found in the cache, recreate/fetch it using {@link get}, cache it, and then - * return it. - */ -export const cachedOrNew = async ( - cacheName: BlobCacheNamespace, - key: string, - get: () => Promise, -): Promise => { - const cache = await openBlobCache(cacheName); - const cachedBlob = await cache.get(key); - if (cachedBlob) return cachedBlob; - - const blob = await get(); - await cache.put(key, blob); - return blob; -}; - /** * Delete all cached data, including cached caches. * From ce0442a5dd7bbd682cb2abcc6529a2c69fa7587e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 13:42:56 +0530 Subject: [PATCH 252/466] Regen if needed --- .../components/PhotoViewer/FileInfo/index.tsx | 2 +- .../photos/src/components/ml/PeopleList.tsx | 40 ++++++++++++++----- web/packages/new/photos/services/ml/index.ts | 8 +++- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 5db9e8d40a..158277ff23 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -332,7 +332,7 @@ export function FileInfo({ {isMLEnabled() && ( <> {/* */} - + )} diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index d0481ef3f7..cf7d6f54d2 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -1,4 +1,7 @@ -import { unidentifiedFaceIDs } from "@/new/photos/services/ml"; +import { + regenerateFaceCropsIfNeeded, + unidentifiedFaceIDs, +} from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { blobCache } from "@/next/blob-cache"; @@ -72,21 +75,37 @@ export function PhotoPeopleList() { return <>; } -export function UnidentifiedFaces({ file }: { file: EnteFile }) { +interface UnidentifiedFacesProps { + enteFile: EnteFile; +} +/** + * Show the list of faces in the given file that are not linked to a specific + * person ("face cluster"). + */ +export const UnidentifiedFaces: React.FC = ({ + enteFile, +}) => { const [faceIDs, setFaceIDs] = useState([]); + const [, setDidRegen] = useState(false); useEffect(() => { let didCancel = false; (async () => { - const faceIDs = await unidentifiedFaceIDs(file); + const faceIDs = await unidentifiedFaceIDs(enteFile); !didCancel && setFaceIDs(faceIDs); + // Don't block for the regeneration to happen. If anything got + // regenerated, the result will be true, which'll cause our state to + // change and us to be redrawn (and fetch the regenerated crops). + void regenerateFaceCropsIfNeeded(enteFile).then((r) => + setDidRegen(r), + ); })(); return () => { didCancel = true; }; - }, [file]); + }, [enteFile]); if (faceIDs.length == 0) return <>; @@ -104,12 +123,18 @@ export function UnidentifiedFaces({ file }: { file: EnteFile }) { ); -} +}; interface FaceCropImageViewProps { faceID: string; } +/** + * An image view showing the face crop for the given {@link faceID}. + * + * The image is read from the "face-crops" {@link BlobCache}. While the image is + * being fetched, or if it doesn't exist, a placeholder is shown. + */ const FaceCropImageView: React.FC = ({ faceID }) => { const [objectURL, setObjectURL] = useState(); @@ -119,11 +144,6 @@ const FaceCropImageView: React.FC = ({ faceID }) => { blobCache("face-crops") .then((cache) => cache.get(faceID)) .then((data) => { - /* - TODO(MR): regen if needed and get this to work on web too. - cachedOrNew("face-crops", cacheKey, async () => { - return regenerateFaceCrop(faceId); - })*/ if (data) { const blob = new Blob([data]); if (!didCancel) setObjectURL(URL.createObjectURL(blob)); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index fb784755f4..97b6e09a72 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -240,17 +240,21 @@ export const unidentifiedFaceIDs = async ( * Check to see if any of the faces in the given file do not have a face crop * present locally. If so, then regenerate the face crops for all the faces in * the file (updating the "face-crops" {@link BlobCache}). + * + * @returns true if one or more face crops were regenerated; false otherwise. */ export const regenerateFaceCropsIfNeeded = async (enteFile: EnteFile) => { const index = await faceIndex(enteFile.id); - if (!index) return; + if (!index) return false; const faceIDs = index.faceEmbedding.faces.map((f) => f.faceID); const cache = await blobCache("face-crops"); for (const id of faceIDs) { if (!(await cache.has(id))) { await regenerateFaceCrops(enteFile, index); - break; + return true; } } + + return false; }; From 7bd10ed78b861803a5fe4d6e30c5727945ebf473 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 13:54:14 +0530 Subject: [PATCH 253/466] Trigger --- web/apps/photos/src/components/ml/PeopleList.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index cf7d6f54d2..6cd94aa9eb 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -86,7 +86,7 @@ export const UnidentifiedFaces: React.FC = ({ enteFile, }) => { const [faceIDs, setFaceIDs] = useState([]); - const [, setDidRegen] = useState(false); + const [didRegen, setDidRegen] = useState(false); useEffect(() => { let didCancel = false; @@ -95,8 +95,9 @@ export const UnidentifiedFaces: React.FC = ({ const faceIDs = await unidentifiedFaceIDs(enteFile); !didCancel && setFaceIDs(faceIDs); // Don't block for the regeneration to happen. If anything got - // regenerated, the result will be true, which'll cause our state to - // change and us to be redrawn (and fetch the regenerated crops). + // regenerated, the result will be true, in response to which we'll + // change the key of the face list and cause it to be rerendered + // (fetching the regenerated crops). void regenerateFaceCropsIfNeeded(enteFile).then((r) => setDidRegen(r), ); @@ -114,7 +115,7 @@ export const UnidentifiedFaces: React.FC = ({
{t("UNIDENTIFIED_FACES")}
- + {faceIDs.map((faceID) => ( From 6d630e0c2a32d618eaf7a2347aa6502c602466ad Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 14:01:31 +0530 Subject: [PATCH 254/466] Misc --- .../photos/src/components/ml/PeopleList.tsx | 68 +++++++++---------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx index 6cd94aa9eb..2a3da9f3b0 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/apps/photos/src/components/ml/PeopleList.tsx @@ -5,42 +5,14 @@ import { import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { blobCache } from "@/next/blob-cache"; -import { Skeleton, styled } from "@mui/material"; -import { Legend } from "components/PhotoViewer/styledComponents/Legend"; +import { Skeleton, Typography, styled } from "@mui/material"; import { t } from "i18next"; import React, { useEffect, useState } from "react"; -const FaceChipContainer = styled("div")` - display: flex; - flex-wrap: wrap; - justify-content: center; - align-items: center; - margin-top: 5px; - margin-bottom: 5px; - overflow: auto; -`; - -const FaceChip = styled("div")<{ clickable?: boolean }>` - width: 112px; - height: 112px; - margin: 5px; - border-radius: 50%; - overflow: hidden; - position: relative; - cursor: ${({ clickable }) => (clickable ? "pointer" : "normal")}; - & > img { - width: 100%; - height: 100%; - } -`; - -interface PeopleListPropsBase { - onSelect?: (person: Person, index: number) => void; -} - -export interface PeopleListProps extends PeopleListPropsBase { +export interface PeopleListProps { people: Array; maxRows?: number; + onSelect?: (person: Person, index: number) => void; } export const PeopleList = React.memo((props: PeopleListProps) => { @@ -67,8 +39,33 @@ export const PeopleList = React.memo((props: PeopleListProps) => { ); }); -export interface PhotoPeopleListProps extends PeopleListPropsBase { +const FaceChipContainer = styled("div")` + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + margin-top: 5px; + margin-bottom: 5px; + overflow: auto; +`; + +const FaceChip = styled("div")<{ clickable?: boolean }>` + width: 112px; + height: 112px; + margin: 5px; + border-radius: 50%; + overflow: hidden; + position: relative; + cursor: ${({ clickable }) => (clickable ? "pointer" : "normal")}; + & > img { + width: 100%; + height: 100%; + } +`; + +export interface PhotoPeopleListProps { file: EnteFile; + onSelect?: (person: Person, index: number) => void; } export function PhotoPeopleList() { @@ -78,6 +75,7 @@ export function PhotoPeopleList() { interface UnidentifiedFacesProps { enteFile: EnteFile; } + /** * Show the list of faces in the given file that are not linked to a specific * person ("face cluster"). @@ -112,9 +110,9 @@ export const UnidentifiedFaces: React.FC = ({ return ( <> -
- {t("UNIDENTIFIED_FACES")} -
+ + {t("UNIDENTIFIED_FACES")} + {faceIDs.map((faceID) => ( From 41fe7ad794a2324631c7ca0f3b94afb02d63919b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 15:04:36 +0530 Subject: [PATCH 255/466] Doc and rearrange --- web/packages/new/photos/services/download.ts | 6 ++-- .../photos/services/ml/{blob.ts => bitmap.ts} | 22 +++++++------ web/packages/new/photos/services/ml/crop.ts | 5 ++- web/packages/new/photos/services/ml/face.ts | 6 ++-- web/packages/new/photos/utils/file.ts | 32 +++++++++++++++++-- 5 files changed, 50 insertions(+), 21 deletions(-) rename web/packages/new/photos/services/ml/{blob.ts => bitmap.ts} (65%) diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index 0a26c47502..b35d9a87da 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -9,7 +9,7 @@ import type { LivePhotoSourceURL, SourceURLs, } from "@/new/photos/types/file"; -import { getRenderableImage } from "@/new/photos/utils/file"; +import { renderableImageBlob } from "@/new/photos/utils/file"; import { isDesktop } from "@/next/app"; import { blobCache, type BlobCache } from "@/next/blob-cache"; import log from "@/next/log"; @@ -458,7 +458,7 @@ async function getRenderableFileURL( switch (file.metadata.fileType) { case FILE_TYPE.IMAGE: { - const convertedBlob = await getRenderableImage( + const convertedBlob = await renderableImageBlob( file.metadata.title, fileBlob, ); @@ -511,7 +511,7 @@ async function getRenderableLivePhotoURL( const getRenderableLivePhotoImageURL = async () => { try { const imageBlob = new Blob([livePhoto.imageData]); - const convertedImageBlob = await getRenderableImage( + const convertedImageBlob = await renderableImageBlob( livePhoto.imageFileName, imageBlob, ); diff --git a/web/packages/new/photos/services/ml/blob.ts b/web/packages/new/photos/services/ml/bitmap.ts similarity index 65% rename from web/packages/new/photos/services/ml/blob.ts rename to web/packages/new/photos/services/ml/bitmap.ts index fd922824e0..51af826454 100644 --- a/web/packages/new/photos/services/ml/blob.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -2,30 +2,34 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; import { ensure } from "@/utils/ensure"; import type { EnteFile } from "../../types/file"; -import { getRenderableImage } from "../../utils/file"; +import { renderableImageBlob } from "../../utils/file"; import DownloadManager from "../download"; /** - * Return a "renderable" image blob, using {@link file} if present otherwise + * Return a {@link ImageBitmap}, using {@link file} if present otherwise * downloading the source image corresponding to {@link enteFile} from remote. * - * For videos their thumbnail is used. + * - For images the original is used. + * - For live photos the original image component is used. + * - For videos their thumbnail is used. */ -export const renderableImageBlob = async ( +export const renderableImageBitmap = async ( enteFile: EnteFile, file?: File | undefined, ) => { const fileType = enteFile.metadata.fileType; + let blob: Blob; if (fileType == FILE_TYPE.VIDEO) { const thumbnailData = await DownloadManager.getThumbnail(enteFile); - return new Blob([ensure(thumbnailData)]); + blob = new Blob([ensure(thumbnailData)]); } else { - return ensure( + blob = ensure( file - ? await getRenderableImage(enteFile.metadata.title, file) + ? await renderableImageBlob(enteFile.metadata.title, file) : await fetchRenderableBlob(enteFile), ); } + return createImageBitmap(blob); }; const fetchRenderableBlob = async (enteFile: EnteFile) => { @@ -33,13 +37,13 @@ const fetchRenderableBlob = async (enteFile: EnteFile) => { const fileBlob = await new Response(fileStream).blob(); const fileType = enteFile.metadata.fileType; if (fileType == FILE_TYPE.IMAGE) { - return getRenderableImage(enteFile.metadata.title, fileBlob); + return renderableImageBlob(enteFile.metadata.title, fileBlob); } else if (fileType == FILE_TYPE.LIVE_PHOTO) { const { imageFileName, imageData } = await decodeLivePhoto( enteFile.metadata.title, fileBlob, ); - return getRenderableImage(imageFileName, new Blob([imageData])); + return renderableImageBlob(imageFileName, new Blob([imageData])); } else { // A layer above us should've already filtered these out. throw new Error(`Cannot index unsupported file type ${fileType}`); diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 1f13b0e062..1d012b46fb 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -1,7 +1,7 @@ import { blobCache } from "@/next/blob-cache"; import { ensure } from "@/utils/ensure"; import type { EnteFile } from "../../types/file"; -import { renderableImageBlob } from "./blob"; +import { renderableImageBitmap } from "./bitmap"; import { type Box, type FaceIndex } from "./face"; import { clamp } from "./image"; @@ -26,8 +26,7 @@ export const regenerateFaceCrops = async ( enteFile: EnteFile, faceIndex: FaceIndex, ) => { - const imageBitmap = - await renderableImageBlob(enteFile).then(createImageBitmap); + const imageBitmap = await renderableImageBitmap(enteFile); try { await saveFaceCrops(imageBitmap, faceIndex); diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 5b0650ab32..ffaad3bb16 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -20,7 +20,7 @@ import { translate, type Matrix as TransformationMatrix, } from "transformation-matrix"; -import { renderableImageBlob } from "./blob"; +import { renderableImageBitmap } from "./bitmap"; import { saveFaceCrops } from "./crop"; import { clamp, @@ -223,9 +223,7 @@ export const indexFaces = async ( file: File | undefined, userAgent: string, ) => { - const imageBitmap = await renderableImageBlob(enteFile, file).then( - createImageBitmap, - ); + const imageBitmap = await renderableImageBitmap(enteFile, file); const { width, height } = imageBitmap; const fileID = enteFile.id; diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 57c1087f70..7c4eaad36f 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -63,10 +63,38 @@ export function mergeMetadata(files: EnteFile[]): EnteFile[] { } /** - * The returned blob.type is filled in, whenever possible, with the MIME type of + * Return a new {@link Blob} containing data in a format that the browser + * (likely) knows how to render (in an img tag, or on the canvas). + * + * The type of the returned blob is set, whenever possible, to the MIME type of * the data that we're dealing with. + * + * @param fileName The name of the file whose data is {@link imageBlob}. + * + * @param imageBlob A {@link Blob} containing the contents of an image file. + * + * The logic used by this function is: + * + * 1. Try to detect the MIME type of the file from its contents and/or name. + * + * 2. If this detected type is one of the types that we know that the browser + * doesn't know how to render, continue. Otherwise return the imageBlob that + * was passed in (after setting its MIME type). + * + * 3. If we're running in our desktop app and this MIME type is something our + * desktop app can natively convert to a JPEG (using ffmpeg), do that and + * return the resultant JPEG blob. + * + * 4. If this is an HEIC file, use our (WASM) HEIC converter and return the + * resultant JPEG blob. + * + * 5. Otherwise (or if any error occurs in the aforementioned steps), return + * `undefined`. */ -export const getRenderableImage = async (fileName: string, imageBlob: Blob) => { +export const renderableImageBlob = async ( + fileName: string, + imageBlob: Blob, +) => { try { const tempFile = new File([imageBlob], fileName); const fileTypeInfo = await detectFileTypeInfo(tempFile); From 00de818e658356f955e7e4548060d3dad0133deb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 15:12:28 +0530 Subject: [PATCH 256/466] Index new --- .../photos/src/services/upload/uploadManager.ts | 5 +++-- web/packages/new/photos/services/ml/index.ts | 13 +++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index e126e935cf..a5039ad432 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -1,7 +1,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { potentialFileTypeFromExtension } from "@/media/live-photo"; import { getLocalFiles } from "@/new/photos/services/files"; -import { onUpload as onUploadML } from "@/new/photos/services/ml"; +import { indexNewlyUploadedFile } from "@/new/photos/services/ml"; import type { UploadItem } from "@/new/photos/services/upload/types"; import { RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, @@ -635,7 +635,8 @@ class UploadManager { enteFile: decryptedFile, localFile: file, }); - onUploadML(decryptedFile, file); + if (UPLOAD_RESULT.UPLOADED == uploadResult) + indexNewlyUploadedFile(decryptedFile, file); } catch (e) { log.warn("Ignoring error in fileUploaded handlers", e); } diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 97b6e09a72..e37ba6d8d7 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -161,14 +161,23 @@ export const triggerMLSync = () => { }; /** - * Called by the uploader when it uploads a new file from this client. + * Run indexing on a file which was uploaded from this client. + * + * This function is called by the uploader when it uploads a new file from this + * client, giving us the opportunity to index it live. This is only an + * optimization - if we don't index it now it'll anyways get indexed later as + * part of the batch jobs, but that might require downloading the file's + * contents again. * * @param enteFile The {@link EnteFile} that got uploaded. * * @param file When available, the web {@link File} object representing the * contents of the file that got uploaded. */ -export const onUpload = (enteFile: EnteFile, file: File | undefined) => { +export const indexNewlyUploadedFile = ( + enteFile: EnteFile, + file: File | undefined, +) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; log.debug(() => ({ t: "ml-liveq", enteFile, file })); From 864e4c6dd164b9d7f395f3921e1266f396a3a36e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 15:16:19 +0530 Subject: [PATCH 257/466] Rename --- web/apps/photos/src/services/upload/uploadManager.ts | 4 ++-- web/packages/new/photos/services/ml/index.ts | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index a5039ad432..bcd18dcd23 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -1,7 +1,7 @@ import { FILE_TYPE } from "@/media/file-type"; import { potentialFileTypeFromExtension } from "@/media/live-photo"; import { getLocalFiles } from "@/new/photos/services/files"; -import { indexNewlyUploadedFile } from "@/new/photos/services/ml"; +import { indexNewUpload } from "@/new/photos/services/ml"; import type { UploadItem } from "@/new/photos/services/upload/types"; import { RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, @@ -636,7 +636,7 @@ class UploadManager { localFile: file, }); if (UPLOAD_RESULT.UPLOADED == uploadResult) - indexNewlyUploadedFile(decryptedFile, file); + indexNewUpload(decryptedFile, file); } catch (e) { log.warn("Ignoring error in fileUploaded handlers", e); } diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index e37ba6d8d7..010695886a 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -174,10 +174,7 @@ export const triggerMLSync = () => { * @param file When available, the web {@link File} object representing the * contents of the file that got uploaded. */ -export const indexNewlyUploadedFile = ( - enteFile: EnteFile, - file: File | undefined, -) => { +export const indexNewUpload = (enteFile: EnteFile, file: File | undefined) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; log.debug(() => ({ t: "ml-liveq", enteFile, file })); From 73b78916de4e7178bf709959dfab53f43746ec6f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 15:16:59 +0530 Subject: [PATCH 258/466] Ref --- web/packages/next/http.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index e77c6e57f8..8ad2674298 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -30,6 +30,8 @@ export class HTTPError extends Error { constructor(url: string, res: Response) { super(`Failed to fetch ${url}: HTTP ${res.status}`); + // Cargo culted from + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (Error.captureStackTrace) Error.captureStackTrace(this, HTTPError); From 0ce729a312814cb5bd91d6dc0d60d9c0a11041fc Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 15:19:11 +0530 Subject: [PATCH 259/466] Expand --- web/apps/photos/src/services/upload/uploadManager.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index bcd18dcd23..42401acf9a 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -635,7 +635,11 @@ class UploadManager { enteFile: decryptedFile, localFile: file, }); - if (UPLOAD_RESULT.UPLOADED == uploadResult) + if ( + uploadResult == UPLOAD_RESULT.UPLOADED || + uploadResult == + UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL + ) indexNewUpload(decryptedFile, file); } catch (e) { log.warn("Ignoring error in fileUploaded handlers", e); From 95ef21ae4f875cc485d7fe96e742aa495acab421 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 17:38:15 +0530 Subject: [PATCH 260/466] Forward the upload item --- .../src/services/upload/uploadManager.ts | 20 ++++++++++--------- web/packages/new/photos/services/ml/index.ts | 11 +++++----- web/packages/new/photos/services/ml/worker.ts | 11 +++++----- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index 42401acf9a..8fe362cafd 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -614,11 +614,11 @@ class UploadManager { UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL, ].includes(uploadResult) ) { + const uploadItem = + uploadableItem.uploadItem ?? + uploadableItem.livePhotoAssets.image; try { let file: File | undefined; - const uploadItem = - uploadableItem.uploadItem ?? - uploadableItem.livePhotoAssets.image; if (uploadItem) { if (uploadItem instanceof File) { file = uploadItem; @@ -635,15 +635,17 @@ class UploadManager { enteFile: decryptedFile, localFile: file, }); - if ( - uploadResult == UPLOAD_RESULT.UPLOADED || - uploadResult == - UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL - ) - indexNewUpload(decryptedFile, file); } catch (e) { log.warn("Ignoring error in fileUploaded handlers", e); } + if ( + uploadItem && + (uploadResult == UPLOAD_RESULT.UPLOADED || + uploadResult == + UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL) + ) { + indexNewUpload(decryptedFile, uploadItem); + } this.updateExistingFiles(decryptedFile); } await this.watchFolderCallback( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 010695886a..92e1606631 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -13,6 +13,7 @@ import { blobCache } from "@/next/blob-cache"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; import { clearFaceDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; @@ -171,16 +172,14 @@ export const triggerMLSync = () => { * * @param enteFile The {@link EnteFile} that got uploaded. * - * @param file When available, the web {@link File} object representing the + * @param uploadItem The item that was uploaded. This can be used to get at the * contents of the file that got uploaded. */ -export const indexNewUpload = (enteFile: EnteFile, file: File | undefined) => { +export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; - log.debug(() => ({ t: "ml-liveq", enteFile, file })); - // TODO-ML: 1. Use this file! - // TODO-ML: 2. Handle cases when File is something else (e.g. on desktop). - void worker().then((w) => w.onUpload(enteFile)); + log.debug(() => ({ t: "ml-liveq", enteFile, uploadItem })); + void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; export interface FaceIndexingStatus { diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 535b659a5a..4a67c18083 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -8,6 +8,7 @@ import { wait } from "@/utils/promise"; import { expose } from "comlink"; import downloadManager from "../download"; import { getAllLocalFiles, getLocalTrashedFiles } from "../files"; +import type { UploadItem } from "../upload/types"; import { indexableFileIDs, markIndexingFailed, @@ -45,7 +46,7 @@ const idleDurationMax = 16 * 60; /* 16 minutes */ export class MLWorker { private userAgent: string | undefined; private shouldSync = false; - private liveQ: EnteFile[] = []; + private liveQ: { enteFile: EnteFile; uploadItem: UploadItem }[] = []; private state: "idle" | "pull" | "indexing" = "idle"; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ @@ -101,7 +102,7 @@ export class MLWorker { * representation of the file's contents with us and won't need to download * the file from remote. */ - onUpload(file: EnteFile) { + onUpload(enteFile: EnteFile, uploadItem: UploadItem) { // Add the recently uploaded file to the live indexing queue. // // Limit the queue to some maximum so that we don't keep growing @@ -113,10 +114,10 @@ export class MLWorker { // live queue is just an optimization: if a file doesn't get indexed via // the live queue, it'll later get indexed anyway when we backfill. if (this.liveQ.length < 50) { - this.liveQ.push(file); + this.liveQ.push({ enteFile, uploadItem }); this.wakeUp(); } else { - log.debug(() => "Ignoring live item since liveQ is full"); + log.debug(() => "Ignoring upload item since liveQ is full"); } } @@ -152,7 +153,7 @@ export class MLWorker { return; } - const liveQ = this.liveQ; + const liveQ = this.liveQ.map((i) => i.enteFile); this.liveQ = []; this.state = "indexing"; const allSuccess = await indexNextBatch(ensure(this.userAgent), liveQ); From c3bbceae49ea232c06563eb633539a34be94ef82 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 18:45:13 +0530 Subject: [PATCH 261/466] delegate --- web/packages/new/photos/services/ml/face.ts | 16 ++++++---- web/packages/new/photos/services/ml/index.ts | 21 +++++++----- .../new/photos/services/ml/worker-delegate.ts | 14 ++++++++ web/packages/new/photos/services/ml/worker.ts | 32 +++++++++++++------ web/packages/next/worker/comlink-worker.ts | 26 +++++++++++---- 5 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 web/packages/new/photos/services/ml/worker-delegate.ts diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index ffaad3bb16..394421ed0f 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -9,7 +9,6 @@ import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; -import { workerBridge } from "@/next/worker/worker-bridge"; import { ensure } from "@/utils/ensure"; import { Matrix } from "ml-matrix"; import { getSimilarityTransformation } from "similarity-transformation"; @@ -28,6 +27,7 @@ import { pixelRGBBilinear, warpAffineFloat32List, } from "./image"; +import type { MLWorkerDelegate } from "./worker-delegate"; /** * The version of the face indexing pipeline implemented by the current client. @@ -221,6 +221,7 @@ export interface Box { export const indexFaces = async ( enteFile: EnteFile, file: File | undefined, + delegate: MLWorkerDelegate, userAgent: string, ) => { const imageBitmap = await renderableImageBitmap(enteFile, file); @@ -235,7 +236,7 @@ export const indexFaces = async ( faceEmbedding: { version: faceIndexingVersion, client: userAgent, - faces: await indexFacesInBitmap(fileID, imageBitmap), + faces: await indexFacesInBitmap(fileID, imageBitmap, delegate), }, }; // This step, saving face crops, is not part of the indexing pipeline; @@ -256,11 +257,12 @@ export const indexFaces = async ( const indexFacesInBitmap = async ( fileID: number, imageBitmap: ImageBitmap, + delegate: MLWorkerDelegate, ): Promise => { const { width, height } = imageBitmap; const imageDimensions = { width, height }; - const yoloFaceDetections = await detectFaces(imageBitmap); + const yoloFaceDetections = await detectFaces(imageBitmap, delegate); const partialResult = yoloFaceDetections.map( ({ box, landmarks, score }) => { const faceID = makeFaceID(fileID, box, imageDimensions); @@ -281,7 +283,7 @@ const indexFacesInBitmap = async ( alignments, ); - const embeddings = await computeEmbeddings(alignedFacesData); + const embeddings = await computeEmbeddings(alignedFacesData, delegate); const blurs = detectBlur( alignedFacesData, partialResult.map((f) => f.detection), @@ -303,6 +305,7 @@ const indexFacesInBitmap = async ( */ const detectFaces = async ( imageBitmap: ImageBitmap, + delegate: MLWorkerDelegate, ): Promise => { const rect = ({ width, height }: Dimensions) => ({ x: 0, @@ -313,7 +316,7 @@ const detectFaces = async ( const { yoloInput, yoloSize } = convertToYOLOInputFloat32ChannelsFirst(imageBitmap); - const yoloOutput = await workerBridge.detectFaces(yoloInput); + const yoloOutput = await delegate.detectFaces(yoloInput); const faces = filterExtractDetectionsFromYOLOOutput(yoloOutput); const faceDetections = transformYOLOFaceDetections( faces, @@ -871,8 +874,9 @@ const mobileFaceNetEmbeddingSize = 192; */ const computeEmbeddings = async ( faceData: Float32Array, + delegate: MLWorkerDelegate, ): Promise => { - const outputData = await workerBridge.computeFaceEmbeddings(faceData); + const outputData = await delegate.computeFaceEmbeddings(faceData); const embeddingSize = mobileFaceNetEmbeddingSize; const embeddings = new Array( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 92e1606631..c61014751f 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -8,11 +8,12 @@ import { isInternalUser, } from "@/new/photos/services/feature-flags"; import type { EnteFile } from "@/new/photos/types/file"; -import { clientPackageName, isDesktop } from "@/next/app"; +import { isDesktop } from "@/next/app"; import { blobCache } from "@/next/blob-cache"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { proxy } from "comlink"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; import { clearFaceDB, faceIndex, indexableAndIndexedCounts } from "./db"; @@ -41,18 +42,21 @@ const worker = async () => { }; const createComlinkWorker = async () => { + const electron = ensureElectron(); + const delegate = { + appVersion: electron.appVersion, + detectFaces: electron.detectFaces, + computeFaceEmbeddings: electron.computeFaceEmbeddings, + }; + const cw = new ComlinkWorker( "ml", new Worker(new URL("worker.ts", import.meta.url)), ); - const ua = await getUserAgent(); - await cw.remote.then((w) => w.init(ua)); + await cw.remote.then((w) => w.init(proxy(delegate))); return cw; }; -const getUserAgent = async () => - `${clientPackageName}/${await ensureElectron().appVersion()}`; - /** * Terminate {@link worker} (if any). * @@ -173,12 +177,13 @@ export const triggerMLSync = () => { * @param enteFile The {@link EnteFile} that got uploaded. * * @param uploadItem The item that was uploaded. This can be used to get at the - * contents of the file that got uploaded. + * contents of the file that got uploaded. In case of live photos, this is the + * image part of the live photo that was uploaded. */ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; - log.debug(() => ({ t: "ml-liveq", enteFile, uploadItem })); + log.debug(() => ({ t: "ml/liveq", enteFile, uploadItem })); void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; diff --git a/web/packages/new/photos/services/ml/worker-delegate.ts b/web/packages/new/photos/services/ml/worker-delegate.ts new file mode 100644 index 0000000000..934f07f8b6 --- /dev/null +++ b/web/packages/new/photos/services/ml/worker-delegate.ts @@ -0,0 +1,14 @@ +/** + * Callback functions made available to the ML worker. + * + * These primarily allow the worker code to access the functions exposed by our + * desktop app. Normally code accesses this via `globalThis.electron`, but that + * doesn't exist in the execution context of web workers. + * + * As such, this is currently a subset of {@link Electron}. + */ +export interface MLWorkerDelegate { + appVersion: () => Promise; + detectFaces: (input: Float32Array) => Promise; + computeFaceEmbeddings: (input: Float32Array) => Promise; +} diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 4a67c18083..162e20ae06 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,5 +1,6 @@ import type { EnteFile } from "@/new/photos/types/file"; import { fileLogID } from "@/new/photos/utils/file"; +import { clientPackageName } from "@/next/app"; import { getKVN } from "@/next/kv"; import { ensureAuthToken } from "@/next/local-user"; import log from "@/next/log"; @@ -17,6 +18,7 @@ import { } from "./db"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { type FaceIndex, indexFaces } from "./face"; +import type { MLWorkerDelegate } from "./worker-delegate"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ @@ -44,6 +46,7 @@ const idleDurationMax = 16 * 60; /* 16 minutes */ * - "idle": in between state transitions */ export class MLWorker { + private delegate: MLWorkerDelegate | undefined; private userAgent: string | undefined; private shouldSync = false; private liveQ: { enteFile: EnteFile; uploadItem: UploadItem }[] = []; @@ -57,11 +60,13 @@ export class MLWorker { * This is conceptually the constructor, however it is easier to have this * as a separate function to avoid confounding the comlink types too much. * - * @param userAgent The user agent string to use as the client field in the - * embeddings generated during indexing by this client. + * @param delegate The {@link MLWorkerDelegate} that allows the worker to + * call back into the main thread. */ - async init(userAgent: string) { - this.userAgent = userAgent; + async init(delegate: MLWorkerDelegate) { + this.delegate = delegate; + // Set the user agent that'll be set in the generated embeddings. + this.userAgent = `${clientPackageName}/${await delegate.appVersion()}`; // Initialize the downloadManager running in the web worker with the // user's token. It'll be used to download files to index if needed. await downloadManager.init(await ensureAuthToken()); @@ -130,7 +135,7 @@ export class MLWorker { private async tick() { log.debug(() => ({ - t: "ml-tick", + t: "ml/tick", state: this.state, shouldSync: this.shouldSync, liveQ: this.liveQ, @@ -156,7 +161,11 @@ export class MLWorker { const liveQ = this.liveQ.map((i) => i.enteFile); this.liveQ = []; this.state = "indexing"; - const allSuccess = await indexNextBatch(ensure(this.userAgent), liveQ); + const allSuccess = await indexNextBatch( + liveQ, + ensure(this.delegate), + ensure(this.userAgent), + ); if (allSuccess) { // Everything is running smoothly. Reset the idle duration. this.idleDuration = idleDurationStart; @@ -197,7 +206,11 @@ const pull = pullFaceEmbeddings; * Which means that when it returns true, all is well and there are more * things pending to process, so we should chug along at full speed. */ -const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { +const indexNextBatch = async ( + liveQ: EnteFile[], + delegate: MLWorkerDelegate, + userAgent: string, +) => { if (!self.navigator.onLine) { log.info("Skipping ML indexing since we are not online"); return false; @@ -214,7 +227,7 @@ const indexNextBatch = async (userAgent: string, liveQ: EnteFile[]) => { let allSuccess = true; for (const file of files) { try { - await index(file, undefined, userAgent); + await index(file, undefined, delegate, userAgent); // Possibly unnecessary, but let us drain the microtask queue. await wait(0); } catch { @@ -275,6 +288,7 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( export const index = async ( enteFile: EnteFile, file: File | undefined, + delegate: MLWorkerDelegate, userAgent: string, ) => { const f = fileLogID(enteFile); @@ -282,7 +296,7 @@ export const index = async ( let faceIndex: FaceIndex; try { - faceIndex = await indexFaces(enteFile, file, userAgent); + faceIndex = await indexFaces(enteFile, file, delegate, userAgent); } catch (e) { // Mark indexing as having failed only if the indexing itself // failed, not if there were subsequent failures (like when trying diff --git a/web/packages/next/worker/comlink-worker.ts b/web/packages/next/worker/comlink-worker.ts index 1a6645d334..75a5a07020 100644 --- a/web/packages/next/worker/comlink-worker.ts +++ b/web/packages/next/worker/comlink-worker.ts @@ -3,6 +3,21 @@ import log, { logToDisk } from "@/next/log"; import { expose, wrap, type Remote } from "comlink"; import { ensureLocalUser } from "../local-user"; +/** + * A minimal wrapper for a web {@link Worker}, proxying a class of type T. + * + * `comlink` is a library that simplies working with web workers by + * transparently proxying objects across the boundary instead of us needing to + * work directly with the raw postMessage interface. + * + * This class is a thin wrapper over a common usage pattern of comlink. It takes + * a web worker ({@link Worker}) that is expected to have {@link expose}-ed a + * class of type T. It then makes available the main thread handle to this class + * as the {@link remote} property. + * + * It also exposes an object of type {@link WorkerBridge} _to_ the code running + * inside the web worker. + */ export class ComlinkWorker InstanceType> { public remote: Promise>>; private worker: Worker; @@ -17,7 +32,7 @@ export class ComlinkWorker InstanceType> { `Got error event from worker: ${JSON.stringify({ event, name })}`, ); }; - log.debug(() => `Initiated web worker ${name}`); + log.debug(() => `Created ${name} web worker`); const comlink = wrap(worker); this.remote = new comlink() as Promise>>; expose(workerBridge, worker); @@ -25,7 +40,7 @@ export class ComlinkWorker InstanceType> { public terminate() { this.worker.terminate(); - log.debug(() => `Terminated web worker ${this.name}`); + log.debug(() => `Terminated ${this.name} web worker`); } } @@ -40,15 +55,12 @@ export class ComlinkWorker InstanceType> { * is a motley bunch, we just inject them all. */ const workerBridge = { - // Needed: generally (presumably) + // Needed by all workers (likely, not necessarily). logToDisk, - // Needed by ML worker + // Needed by MLWorker. getAuthToken: () => ensureLocalUser().token, convertToJPEG: (imageData: Uint8Array) => ensureElectron().convertToJPEG(imageData), - detectFaces: (input: Float32Array) => ensureElectron().detectFaces(input), - computeFaceEmbeddings: (input: Float32Array) => - ensureElectron().computeFaceEmbeddings(input), }; export type WorkerBridge = typeof workerBridge; From 5698ee12a330882bc87ba6e8b68675e594845801 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 19:05:19 +0530 Subject: [PATCH 262/466] Doc --- web/packages/next/worker/comlink-worker.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/packages/next/worker/comlink-worker.ts b/web/packages/next/worker/comlink-worker.ts index 75a5a07020..c9b8879695 100644 --- a/web/packages/next/worker/comlink-worker.ts +++ b/web/packages/next/worker/comlink-worker.ts @@ -17,10 +17,20 @@ import { ensureLocalUser } from "../local-user"; * * It also exposes an object of type {@link WorkerBridge} _to_ the code running * inside the web worker. + * + * It all gets a bit confusing sometimes, so here is a legend of the parties + * involved: + * + * - ComlinkWorker (wraps the web worker) + * - Web `Worker` (exposes class T) + * - ComlinkWorker.remote (the exposed class T running inside the web worker) */ export class ComlinkWorker InstanceType> { + /** The class (T) exposed by the web worker */ public remote: Promise>>; + /** The web worker */ private worker: Worker; + /** An arbitrary name associated with this ComlinkWorker for debugging. */ private name: string; constructor(name: string, worker: Worker) { @@ -45,14 +55,14 @@ export class ComlinkWorker InstanceType> { } /** - * A set of utility functions that we expose to all workers that we create. + * A set of utility functions that we expose to all web workers that we create. * * Inside the worker's code, this can be accessed by using the sibling * `workerBridge` object after importing it from `worker-bridge.ts`. * * Not all workers need access to all these functions, and this can indeed be * done in a more fine-grained, per-worker, manner if needed. For now, since it - * is a motley bunch, we just inject them all. + * is a motley bunch, we just inject them all to all workers. */ const workerBridge = { // Needed by all workers (likely, not necessarily). From 38e23ca1b596de9ddec3689cf174a38e003a0cd7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 19:13:21 +0530 Subject: [PATCH 263/466] Rename --- web/packages/new/photos/services/ml/face.ts | 20 +++++++-------- web/packages/new/photos/services/ml/index.ts | 4 +-- .../new/photos/services/ml/worker-delegate.ts | 14 ----------- .../new/photos/services/ml/worker-electron.ts | 13 ++++++++++ web/packages/new/photos/services/ml/worker.ts | 25 ++++++++++--------- 5 files changed, 38 insertions(+), 38 deletions(-) delete mode 100644 web/packages/new/photos/services/ml/worker-delegate.ts create mode 100644 web/packages/new/photos/services/ml/worker-electron.ts diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 394421ed0f..38ed3b0b60 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -27,7 +27,7 @@ import { pixelRGBBilinear, warpAffineFloat32List, } from "./image"; -import type { MLWorkerDelegate } from "./worker-delegate"; +import type { MLWorkerElectron } from "./worker-electron"; /** * The version of the face indexing pipeline implemented by the current client. @@ -221,7 +221,7 @@ export interface Box { export const indexFaces = async ( enteFile: EnteFile, file: File | undefined, - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, userAgent: string, ) => { const imageBitmap = await renderableImageBitmap(enteFile, file); @@ -236,7 +236,7 @@ export const indexFaces = async ( faceEmbedding: { version: faceIndexingVersion, client: userAgent, - faces: await indexFacesInBitmap(fileID, imageBitmap, delegate), + faces: await indexFacesInBitmap(fileID, imageBitmap, electron), }, }; // This step, saving face crops, is not part of the indexing pipeline; @@ -257,12 +257,12 @@ export const indexFaces = async ( const indexFacesInBitmap = async ( fileID: number, imageBitmap: ImageBitmap, - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, ): Promise => { const { width, height } = imageBitmap; const imageDimensions = { width, height }; - const yoloFaceDetections = await detectFaces(imageBitmap, delegate); + const yoloFaceDetections = await detectFaces(imageBitmap, electron); const partialResult = yoloFaceDetections.map( ({ box, landmarks, score }) => { const faceID = makeFaceID(fileID, box, imageDimensions); @@ -283,7 +283,7 @@ const indexFacesInBitmap = async ( alignments, ); - const embeddings = await computeEmbeddings(alignedFacesData, delegate); + const embeddings = await computeEmbeddings(alignedFacesData, electron); const blurs = detectBlur( alignedFacesData, partialResult.map((f) => f.detection), @@ -305,7 +305,7 @@ const indexFacesInBitmap = async ( */ const detectFaces = async ( imageBitmap: ImageBitmap, - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, ): Promise => { const rect = ({ width, height }: Dimensions) => ({ x: 0, @@ -316,7 +316,7 @@ const detectFaces = async ( const { yoloInput, yoloSize } = convertToYOLOInputFloat32ChannelsFirst(imageBitmap); - const yoloOutput = await delegate.detectFaces(yoloInput); + const yoloOutput = await electron.detectFaces(yoloInput); const faces = filterExtractDetectionsFromYOLOOutput(yoloOutput); const faceDetections = transformYOLOFaceDetections( faces, @@ -874,9 +874,9 @@ const mobileFaceNetEmbeddingSize = 192; */ const computeEmbeddings = async ( faceData: Float32Array, - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, ): Promise => { - const outputData = await delegate.computeFaceEmbeddings(faceData); + const outputData = await electron.computeFaceEmbeddings(faceData); const embeddingSize = mobileFaceNetEmbeddingSize; const embeddings = new Array( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index c61014751f..b67d913baa 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -43,7 +43,7 @@ const worker = async () => { const createComlinkWorker = async () => { const electron = ensureElectron(); - const delegate = { + const mlWorkerElectron = { appVersion: electron.appVersion, detectFaces: electron.detectFaces, computeFaceEmbeddings: electron.computeFaceEmbeddings, @@ -53,7 +53,7 @@ const createComlinkWorker = async () => { "ml", new Worker(new URL("worker.ts", import.meta.url)), ); - await cw.remote.then((w) => w.init(proxy(delegate))); + await cw.remote.then((w) => w.init(proxy(mlWorkerElectron))); return cw; }; diff --git a/web/packages/new/photos/services/ml/worker-delegate.ts b/web/packages/new/photos/services/ml/worker-delegate.ts deleted file mode 100644 index 934f07f8b6..0000000000 --- a/web/packages/new/photos/services/ml/worker-delegate.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Callback functions made available to the ML worker. - * - * These primarily allow the worker code to access the functions exposed by our - * desktop app. Normally code accesses this via `globalThis.electron`, but that - * doesn't exist in the execution context of web workers. - * - * As such, this is currently a subset of {@link Electron}. - */ -export interface MLWorkerDelegate { - appVersion: () => Promise; - detectFaces: (input: Float32Array) => Promise; - computeFaceEmbeddings: (input: Float32Array) => Promise; -} diff --git a/web/packages/new/photos/services/ml/worker-electron.ts b/web/packages/new/photos/services/ml/worker-electron.ts new file mode 100644 index 0000000000..250db9cf5d --- /dev/null +++ b/web/packages/new/photos/services/ml/worker-electron.ts @@ -0,0 +1,13 @@ +/** + * A subset of {@link Electron} provided to the {@link MLWorker}. + * + * `globalThis.electron` does not exist in the execution context of web workers. + * So instead, we manually provide a proxy object of type + * {@link MLWorkerElectron} that exposes a subset of the functions from + * {@link Electron} that are needed by the code running in the ML web worker. + */ +export interface MLWorkerElectron { + appVersion: () => Promise; + detectFaces: (input: Float32Array) => Promise; + computeFaceEmbeddings: (input: Float32Array) => Promise; +} diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 162e20ae06..baadaad921 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -18,7 +18,7 @@ import { } from "./db"; import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; import { type FaceIndex, indexFaces } from "./face"; -import type { MLWorkerDelegate } from "./worker-delegate"; +import type { MLWorkerElectron } from "./worker-electron"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ @@ -46,7 +46,7 @@ const idleDurationMax = 16 * 60; /* 16 minutes */ * - "idle": in between state transitions */ export class MLWorker { - private delegate: MLWorkerDelegate | undefined; + private electron: MLWorkerElectron | undefined; private userAgent: string | undefined; private shouldSync = false; private liveQ: { enteFile: EnteFile; uploadItem: UploadItem }[] = []; @@ -60,13 +60,14 @@ export class MLWorker { * This is conceptually the constructor, however it is easier to have this * as a separate function to avoid confounding the comlink types too much. * - * @param delegate The {@link MLWorkerDelegate} that allows the worker to - * call back into the main thread. + * @param electron The {@link MLWorkerElectron} that allows the worker to + * use the functionality provided by our Node.js layer when running in the + * context of our desktop app */ - async init(delegate: MLWorkerDelegate) { - this.delegate = delegate; + async init(electron: MLWorkerElectron) { + this.electron = electron; // Set the user agent that'll be set in the generated embeddings. - this.userAgent = `${clientPackageName}/${await delegate.appVersion()}`; + this.userAgent = `${clientPackageName}/${await electron.appVersion()}`; // Initialize the downloadManager running in the web worker with the // user's token. It'll be used to download files to index if needed. await downloadManager.init(await ensureAuthToken()); @@ -163,7 +164,7 @@ export class MLWorker { this.state = "indexing"; const allSuccess = await indexNextBatch( liveQ, - ensure(this.delegate), + ensure(this.electron), ensure(this.userAgent), ); if (allSuccess) { @@ -208,7 +209,7 @@ const pull = pullFaceEmbeddings; */ const indexNextBatch = async ( liveQ: EnteFile[], - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, userAgent: string, ) => { if (!self.navigator.onLine) { @@ -227,7 +228,7 @@ const indexNextBatch = async ( let allSuccess = true; for (const file of files) { try { - await index(file, undefined, delegate, userAgent); + await index(file, undefined, electron, userAgent); // Possibly unnecessary, but let us drain the microtask queue. await wait(0); } catch { @@ -288,7 +289,7 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( export const index = async ( enteFile: EnteFile, file: File | undefined, - delegate: MLWorkerDelegate, + electron: MLWorkerElectron, userAgent: string, ) => { const f = fileLogID(enteFile); @@ -296,7 +297,7 @@ export const index = async ( let faceIndex: FaceIndex; try { - faceIndex = await indexFaces(enteFile, file, delegate, userAgent); + faceIndex = await indexFaces(enteFile, file, electron, userAgent); } catch (e) { // Mark indexing as having failed only if the indexing itself // failed, not if there were subsequent failures (like when trying From 90c01a19a578dce70c0eaf862d792d93c7e83dc8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 19:25:32 +0530 Subject: [PATCH 264/466] Tweak --- web/apps/photos/src/components/WatchFolder.tsx | 2 +- web/packages/new/photos/services/ml/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/components/WatchFolder.tsx b/web/apps/photos/src/components/WatchFolder.tsx index b5bd80e2c8..2bcf49b058 100644 --- a/web/apps/photos/src/components/WatchFolder.tsx +++ b/web/apps/photos/src/components/WatchFolder.tsx @@ -149,7 +149,7 @@ export const WatchFolder: React.FC = ({ open, onClose }) => { }; const Title_ = styled("div")` - padding: 32px 16px 16px 24px; + padding: 16px 12px 16px 16px; `; interface WatchList { diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index b67d913baa..04531f577a 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -50,7 +50,7 @@ const createComlinkWorker = async () => { }; const cw = new ComlinkWorker( - "ml", + "ML", new Worker(new URL("worker.ts", import.meta.url)), ); await cw.remote.then((w) => w.init(proxy(mlWorkerElectron))); From 26f6ab04641030593ab90460d62b2ab19ac1b131 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 19:59:55 +0530 Subject: [PATCH 265/466] Use uploadItem --- web/packages/new/photos/services/ml/bitmap.ts | 78 ++++++++++++++++--- web/packages/new/photos/services/ml/face.ts | 23 ++++-- web/packages/new/photos/services/ml/worker.ts | 36 ++++++--- .../new/photos/utils/native-stream.ts | 6 +- web/packages/next/file.ts | 6 +- 5 files changed, 116 insertions(+), 33 deletions(-) diff --git a/web/packages/new/photos/services/ml/bitmap.ts b/web/packages/new/photos/services/ml/bitmap.ts index 51af826454..3bcbb339ca 100644 --- a/web/packages/new/photos/services/ml/bitmap.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -1,35 +1,91 @@ import { FILE_TYPE } from "@/media/file-type"; import { decodeLivePhoto } from "@/media/live-photo"; +import { basename } from "@/next/file"; import { ensure } from "@/utils/ensure"; import type { EnteFile } from "../../types/file"; import { renderableImageBlob } from "../../utils/file"; +import { readStream } from "../../utils/native-stream"; import DownloadManager from "../download"; +import type { UploadItem } from "../upload/types"; +import type { MLWorkerElectron } from "./worker-electron"; /** - * Return a {@link ImageBitmap}, using {@link file} if present otherwise - * downloading the source image corresponding to {@link enteFile} from remote. + * Return a {@link ImageBitmap} that downloads the source image corresponding to + * {@link enteFile} from remote. * * - For images the original is used. * - For live photos the original image component is used. - * - For videos their thumbnail is used. + * - For videos the thumbnail is used. */ -export const renderableImageBitmap = async ( +export const renderableImageBitmap = async (enteFile: EnteFile) => { + const fileType = enteFile.metadata.fileType; + let blob: Blob | undefined; + if (fileType == FILE_TYPE.VIDEO) { + const thumbnailData = await DownloadManager.getThumbnail(enteFile); + blob = new Blob([ensure(thumbnailData)]); + } else { + blob = await fetchRenderableBlob(enteFile); + } + return createImageBitmap(ensure(blob)); +}; + +/** + * Variant of {@link renderableImageBitmap} that uses the given + * {@link uploadItem} to construct the image bitmap instead of downloading the + * original from remote. + * + * For videos the thumbnail is still downloaded from remote. + */ +export const renderableUploadItemImageBitmap = async ( enteFile: EnteFile, - file?: File | undefined, + uploadItem: UploadItem, + electron: MLWorkerElectron, ) => { const fileType = enteFile.metadata.fileType; - let blob: Blob; + let blob: Blob | undefined; if (fileType == FILE_TYPE.VIDEO) { const thumbnailData = await DownloadManager.getThumbnail(enteFile); blob = new Blob([ensure(thumbnailData)]); } else { - blob = ensure( - file - ? await renderableImageBlob(enteFile.metadata.title, file) - : await fetchRenderableBlob(enteFile), + const file = await readNonVideoUploadItem(uploadItem, electron); + blob = await renderableImageBlob(enteFile.metadata.title, file); + } + return createImageBitmap(ensure(blob)); +}; + +/** + * Read the given {@link uploadItem} into an in-memory representation. + * + * See: [Note: Reading a UploadItem] + * + * @param uploadItem An {@link UploadItem} which we are trying to index. The + * code calling us guarantees that this function will not be called for videos. + * + * @returns a web {@link File} that can be used to access the upload item's + * contents. + */ +const readNonVideoUploadItem = async ( + uploadItem: UploadItem, + electron: MLWorkerElectron, +): Promise => { + if (typeof uploadItem == "string" || Array.isArray(uploadItem)) { + const { response, lastModifiedMs } = await readStream( + electron, + uploadItem, ); + const path = typeof uploadItem == "string" ? uploadItem : uploadItem[1]; + // This function will not be called for videos, and for images + // it is reasonable to read the entire stream into memory here. + return new File([await response.arrayBuffer()], basename(path), { + lastModified: lastModifiedMs, + }); + } else { + if (uploadItem instanceof File) { + return uploadItem; + } else { + return uploadItem.file; + } } - return createImageBitmap(blob); }; const fetchRenderableBlob = async (enteFile: EnteFile) => { diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 38ed3b0b60..74eac0059c 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -19,7 +19,11 @@ import { translate, type Matrix as TransformationMatrix, } from "transformation-matrix"; -import { renderableImageBitmap } from "./bitmap"; +import type { UploadItem } from "../upload/types"; +import { + renderableImageBitmap, + renderableUploadItemImageBitmap, +} from "./bitmap"; import { saveFaceCrops } from "./crop"; import { clamp, @@ -212,19 +216,24 @@ export interface Box { * * @param enteFile The {@link EnteFile} to index. * - * @param file The contents of {@link enteFile} as a web {@link File}, if - * available. These are used when they are provided, otherwise the file is - * downloaded and decrypted from remote. + * @param uploadItem If we're called during the upload process, then this will + * be set to the {@link UploadItem} that was uploaded. This way, we can directly + * use the on-disk file instead of needing to download the original from remote. + * + * @param electron The {@link MLWorkerElectron} instance that allows us to call + * our Node.js layer for various functionality. * * @param userAgent The UA of the client that is doing the indexing (us). */ export const indexFaces = async ( enteFile: EnteFile, - file: File | undefined, + uploadItem: UploadItem | undefined, electron: MLWorkerElectron, userAgent: string, -) => { - const imageBitmap = await renderableImageBitmap(enteFile, file); +): Promise => { + const imageBitmap = uploadItem + ? await renderableUploadItemImageBitmap(enteFile, uploadItem, electron) + : await renderableImageBitmap(enteFile); const { width, height } = imageBitmap; const fileID = enteFile.id; diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index baadaad921..c1f9f68b2d 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -23,6 +23,12 @@ import type { MLWorkerElectron } from "./worker-electron"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ +/** An entry in the liveQ maintained by the worker */ +interface LiveQItem { + enteFile: EnteFile; + uploadItem: UploadItem; +} + /** * Run operations related to machine learning (e.g. indexing) in a Web Worker. * @@ -49,7 +55,7 @@ export class MLWorker { private electron: MLWorkerElectron | undefined; private userAgent: string | undefined; private shouldSync = false; - private liveQ: { enteFile: EnteFile; uploadItem: UploadItem }[] = []; + private liveQ: LiveQItem[] = []; private state: "idle" | "pull" | "indexing" = "idle"; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ @@ -159,7 +165,7 @@ export class MLWorker { return; } - const liveQ = this.liveQ.map((i) => i.enteFile); + const liveQ = this.liveQ; this.liveQ = []; this.state = "indexing"; const allSuccess = await indexNextBatch( @@ -208,7 +214,7 @@ const pull = pullFaceEmbeddings; * things pending to process, so we should chug along at full speed. */ const indexNextBatch = async ( - liveQ: EnteFile[], + liveQ: LiveQItem[], electron: MLWorkerElectron, userAgent: string, ) => { @@ -219,16 +225,23 @@ const indexNextBatch = async ( const userID = ensure(await getKVN("userID")); - const files = + // Use the liveQ if present, otherwise get the next batch to backfill. + const items = liveQ.length > 0 ? liveQ - : await syncWithLocalFilesAndGetFilesToIndex(userID, 200); - if (files.length == 0) return false; + : await syncWithLocalFilesAndGetFilesToIndex(userID, 200).then( + (fs) => + fs.map((f) => ({ enteFile: f, uploadItem: undefined })), + ); + + // Nothing to do. + if (items.length == 0) return false; + // Index, keeping track if any of the items failed. let allSuccess = true; - for (const file of files) { + for (const { enteFile, uploadItem } of items) { try { - await index(file, undefined, electron, userAgent); + await index(enteFile, uploadItem, electron, userAgent); // Possibly unnecessary, but let us drain the microtask queue. await wait(0); } catch { @@ -236,6 +249,7 @@ const indexNextBatch = async ( } } + // Return true if nothing failed. return allSuccess; }; @@ -278,7 +292,7 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( * * @param enteFile The {@link EnteFile} to index. * - * @param file If the file is one which is being uploaded from the current + * @param uploadItem If the file is one which is being uploaded from the current * client, then we will also have access to the file's content. In such * cases, pass a web {@link File} object to use that its data directly for * face indexing. If this is not provided, then the file's contents will be @@ -288,7 +302,7 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( */ export const index = async ( enteFile: EnteFile, - file: File | undefined, + uploadItem: UploadItem | undefined, electron: MLWorkerElectron, userAgent: string, ) => { @@ -297,7 +311,7 @@ export const index = async ( let faceIndex: FaceIndex; try { - faceIndex = await indexFaces(enteFile, file, electron, userAgent); + faceIndex = await indexFaces(enteFile, uploadItem, electron, userAgent); } catch (e) { // Mark indexing as having failed only if the indexing itself // failed, not if there were subsequent failures (like when trying diff --git a/web/packages/new/photos/utils/native-stream.ts b/web/packages/new/photos/utils/native-stream.ts index 9c38897367..70b052b4c1 100644 --- a/web/packages/new/photos/utils/native-stream.ts +++ b/web/packages/new/photos/utils/native-stream.ts @@ -7,6 +7,7 @@ */ import type { Electron, ZipItem } from "@/next/types/ipc"; +import type { MLWorkerElectron } from "../services/ml/worker-electron"; /** * Stream the given file or zip entry from the user's local file system. @@ -16,7 +17,8 @@ import type { Electron, ZipItem } from "@/next/types/ipc"; * See: [Note: IPC streams]. * * To avoid accidentally invoking it in a non-desktop app context, it requires - * the {@link Electron} object as a parameter (even though it doesn't use it). + * the {@link Electron} (or a functionally similar) object as a parameter (even + * though it doesn't use it). * * @param pathOrZipItem Either the path on the file on the user's local file * system whose contents we want to stream. Or a tuple containing the path to a @@ -34,7 +36,7 @@ import type { Electron, ZipItem } from "@/next/types/ipc"; * reading, expressed as epoch milliseconds. */ export const readStream = async ( - _: Electron, + _: Electron | MLWorkerElectron, pathOrZipItem: string | ZipItem, ): Promise<{ response: Response; size: number; lastModifiedMs: number }> => { let url: URL; diff --git a/web/packages/next/file.ts b/web/packages/next/file.ts index bd2c043930..f56dbc1ccd 100644 --- a/web/packages/next/file.ts +++ b/web/packages/next/file.ts @@ -59,8 +59,10 @@ export const fileNameFromComponents = (components: FileNameComponents) => */ export const basename = (path: string) => { const pathComponents = path.split("/"); - for (let i = pathComponents.length - 1; i >= 0; i--) - if (pathComponents[i] !== "") return pathComponents[i]; + for (let i = pathComponents.length - 1; i >= 0; i--) { + const component = pathComponents[i]; + if (component && component.length > 0) return component; + } return path; }; From dca76f304c099f4413407aa99c29fb84914e4c3f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 20:19:30 +0530 Subject: [PATCH 266/466] Increase liveq limit --- web/packages/new/photos/services/ml/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index c1f9f68b2d..212517bd67 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -125,7 +125,7 @@ export class MLWorker { // long as we're not systematically ignoring it). This is because the // live queue is just an optimization: if a file doesn't get indexed via // the live queue, it'll later get indexed anyway when we backfill. - if (this.liveQ.length < 50) { + if (this.liveQ.length < 200) { this.liveQ.push({ enteFile, uploadItem }); this.wakeUp(); } else { From 52448cd2a21db7bfacc639030f28ba2eb77cc6e5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 20:26:31 +0530 Subject: [PATCH 267/466] Shorten --- web/packages/new/photos/services/ml/face.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 74eac0059c..cf233f85c7 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -280,12 +280,9 @@ const indexFacesInBitmap = async ( }, ); - const alignments: FaceAlignment[] = []; - - for (const { detection } of partialResult) { - const alignment = computeFaceAlignment(detection); - alignments.push(alignment); - } + const alignments = partialResult.map(({ detection }) => + computeFaceAlignment(detection), + ); const alignedFacesData = convertToMobileFaceNetInput( imageBitmap, From 5c4c6f2677b37f328da3da73b2680470c680dfe3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 21:28:46 +0530 Subject: [PATCH 268/466] Allow restoring specific backups --- infra/copycat-db/src/restore.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/infra/copycat-db/src/restore.sh b/infra/copycat-db/src/restore.sh index 8df19c62b2..6fa1a21a2f 100755 --- a/infra/copycat-db/src/restore.sh +++ b/infra/copycat-db/src/restore.sh @@ -3,9 +3,16 @@ set -o errexit set -o xtrace -# Find the name of the latest backup -# The backup file name contains the epoch, so we can just sort. -BACKUP_FILE=$(rclone lsf --include 'db-*.custom' --files-only $RCLONE_DESTINATION | sort | tail -1) +if test -z "$1"; then + # Find the name of the latest backup. + # + # The backup file name contains the epoch, so we can just sort. + BACKUP_FILE=$(rclone lsf --include 'db-*.custom' --files-only $RCLONE_DESTINATION | sort | tail -1) +else + # If a CLI argument is provided, use that as the name of the backup file to + # restore. + BACKUP_FILE="$1" +fi # Download it rclone copy --log-level INFO "${RCLONE_DESTINATION}${BACKUP_FILE}" . From adcdba3f8f3c5d459d6bf801a927f0d6f49a8221 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 4 Jul 2024 22:06:57 +0530 Subject: [PATCH 269/466] Update SCW cli version No specific changes, just bringing it up to speed. No breaking changes I noticed in the CHANGELOG https://github.com/scaleway/scaleway-cli/releases --- infra/copycat-db/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/copycat-db/Dockerfile b/infra/copycat-db/Dockerfile index 4328ef17fb..373c6bcce0 100644 --- a/infra/copycat-db/Dockerfile +++ b/infra/copycat-db/Dockerfile @@ -17,7 +17,7 @@ RUN \ # Install SCW CLI # Latest release: https://github.com/scaleway/scaleway-cli/releases/latest RUN \ - export VERSION="2.26.0" && \ + export VERSION="2.32.1" && \ curl -o /usr/local/bin/scw -L "https://github.com/scaleway/scaleway-cli/releases/download/v${VERSION}/scaleway-cli_${VERSION}_linux_amd64" && \ chmod +x /usr/local/bin/scw From 4f98e72a58ca3a2bf2c5d4ce7b2912af24a0aa76 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 09:38:03 +0530 Subject: [PATCH 270/466] [desktop] Only attempt indexing after a successful pull --- web/packages/new/photos/services/ml/worker.ts | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 212517bd67..db4ff3195a 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -23,10 +23,9 @@ import type { MLWorkerElectron } from "./worker-electron"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ -/** An entry in the liveQ maintained by the worker */ -interface LiveQItem { +interface IndexableItem { enteFile: EnteFile; - uploadItem: UploadItem; + uploadItem: UploadItem | undefined; } /** @@ -54,9 +53,10 @@ interface LiveQItem { export class MLWorker { private electron: MLWorkerElectron | undefined; private userAgent: string | undefined; - private shouldSync = false; - private liveQ: LiveQItem[] = []; private state: "idle" | "pull" | "indexing" = "idle"; + private shouldPull = false; + private havePulledAtLeastOnce = false; + private liveQ: IndexableItem[] = []; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ @@ -90,7 +90,7 @@ export class MLWorker { * (which is why call it a less-precise sync instead of pull). */ sync() { - this.shouldSync = true; + this.shouldPull = true; this.wakeUp(); } @@ -144,7 +144,7 @@ export class MLWorker { log.debug(() => ({ t: "ml/tick", state: this.state, - shouldSync: this.shouldSync, + shouldSync: this.shouldPull, liveQ: this.liveQ, idleDuration: this.idleDuration, })); @@ -152,10 +152,13 @@ export class MLWorker { const scheduleTick = () => void setTimeout(() => this.tick(), 0); // If we've been asked to sync, do that irrespective of anything else. - if (this.shouldSync) { - this.shouldSync = false; + if (this.shouldPull) { + this.shouldPull = false; this.state = "pull"; void pull().then((didPull) => { + // Mark that we completed once attempt at pulling successfully + // (irrespective of whether or not that got us some data). + this.havePulledAtLeastOnce = true; // Reset the idle duration if we did pull something. if (didPull) this.idleDuration = idleDurationStart; // Either ways, tick again. @@ -168,8 +171,21 @@ export class MLWorker { const liveQ = this.liveQ; this.liveQ = []; this.state = "indexing"; + + // Use the liveQ if present, otherwise get the next batch to backfill, + // but only if we've pulled once from remote successfully (otherwise we + // might end up reindexing files that were already indexed on remote but + // which we didn't know about since pull failed, say, for transient + // network issues). + const items = + liveQ.length > 0 + ? liveQ + : this.havePulledAtLeastOnce + ? await this.backfillQ() + : []; + const allSuccess = await indexNextBatch( - liveQ, + items, ensure(this.electron), ensure(this.userAgent), ); @@ -195,6 +211,14 @@ export class MLWorker { this.idleDuration = Math.min(this.idleDuration * 2, idleDurationMax); this.idleTimeout = setTimeout(scheduleTick, this.idleDuration * 1000); } + + /** Return the next batch of items to backfill (if any). */ + async backfillQ() { + const userID = ensure(await getKVN("userID")); + return syncWithLocalFilesAndGetFilesToIndex(userID, 200).then((fs) => + fs.map((f) => ({ enteFile: f, uploadItem: undefined })), + ); + } } expose(MLWorker); @@ -214,26 +238,18 @@ const pull = pullFaceEmbeddings; * things pending to process, so we should chug along at full speed. */ const indexNextBatch = async ( - liveQ: LiveQItem[], + items: IndexableItem[], electron: MLWorkerElectron, userAgent: string, ) => { + // Don't try to index if we wouldn't be able to upload them anyway. The + // liveQ has already been drained, but that's fine, it'll be rare that we + // are able to upload just a bit ago but don't have network now. if (!self.navigator.onLine) { log.info("Skipping ML indexing since we are not online"); return false; } - const userID = ensure(await getKVN("userID")); - - // Use the liveQ if present, otherwise get the next batch to backfill. - const items = - liveQ.length > 0 - ? liveQ - : await syncWithLocalFilesAndGetFilesToIndex(userID, 200).then( - (fs) => - fs.map((f) => ({ enteFile: f, uploadItem: undefined })), - ); - // Nothing to do. if (items.length == 0) return false; From cd39e5e9cd9dd3b4c0e9ceb2e528d2f7bb2e872e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 10:48:04 +0530 Subject: [PATCH 271/466] Update Electron 30.0.9 => 30.1.2 https://github.com/electron/electron/releases/tag/v30.1.2 --- desktop/yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/desktop/yarn.lock b/desktop/yarn.lock index d986999cef..1810605a10 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -341,9 +341,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.9.0": - version "20.13.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.13.0.tgz#011a76bc1e71ae9a026dddcfd7039084f752c4b6" - integrity sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ== + version "20.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== dependencies: undici-types "~5.26.4" @@ -1325,9 +1325,9 @@ electron-updater@^6.2: tiny-typed-emitter "^2.1.0" electron@^30: - version "30.0.9" - resolved "https://registry.yarnpkg.com/electron/-/electron-30.0.9.tgz#b11400e4642a4b635e79244ba365f1d401ee60b5" - integrity sha512-ArxgdGHVu3o5uaP+Tqj8cJDvU03R6vrGrOqiMs7JXLnvQHMqXJIIxmFKQAIdJW8VoT3ac3hD21tA7cPO10RLow== + version "30.1.2" + resolved "https://registry.yarnpkg.com/electron/-/electron-30.1.2.tgz#9c8b9b0d0e3f07783d8c5dbd9519b3ffd11f1551" + integrity sha512-A5CFGwbA+HSXnzwjc8fP2GIezBcAb0uN/VbNGLOW8DHOYn07rvJ/1bAJECHUUzt5zbfohveG3hpMQiYpbktuDw== dependencies: "@electron/get" "^2.0.0" "@types/node" "^20.9.0" From 5f7577309a8ad9be9f8de22aefc4bee189d20dd4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 10:51:53 +0530 Subject: [PATCH 272/466] Revert to the now un-deprecated API that we were using earlier https://github.com/electron/electron/pull/42411 --- desktop/src/main/services/auto-launcher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/src/main/services/auto-launcher.ts b/desktop/src/main/services/auto-launcher.ts index 0942a49359..351f20a38a 100644 --- a/desktop/src/main/services/auto-launcher.ts +++ b/desktop/src/main/services/auto-launcher.ts @@ -42,7 +42,7 @@ class AutoLauncher { if (this.autoLaunch) { return app.commandLine.hasSwitch("hidden"); } else { - return app.getLoginItemSettings().openAtLogin; + return app.getLoginItemSettings().wasOpenedAtLogin; } } } From ef788b16b901eb878c17f777f5d1ce072b36488e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 10:57:48 +0530 Subject: [PATCH 273/466] Upgrade lru-cache --- desktop/yarn.lock | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 1810605a10..7102beaaef 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2271,7 +2271,12 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^10.2, lru-cache@^10.2.0: +lru-cache@^10.2: + version "10.3.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" + integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== + +lru-cache@^10.2.0: version "10.2.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== From 92e89d3589d1b5cb3d583c81147fd2f7f74d7efa Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 5 Jul 2024 11:36:43 +0530 Subject: [PATCH 274/466] [mob][photos] Timer animation fixed --- mobile/lib/ui/tools/lock_screen.dart | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index e4e4a041bc..913a20fb86 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -35,16 +35,7 @@ class _LockScreenState extends State int lockedTimeInSeconds = 0; int invalidAttemptCount = 0; int remainingTimeInSeconds = 0; - bool showErrorMessage = true; final _lockscreenSetting = LockScreenSettings.instance; - late final AnimationController _controller = AnimationController( - duration: const Duration(milliseconds: 500), - vsync: this, - ); - late final animation = CurvedAnimation( - parent: _controller, - curve: Curves.easeInOut, - ); late Brightness _platformBrightness; @override @@ -126,9 +117,13 @@ class _LockScreenState extends State child: TweenAnimationBuilder( tween: Tween( begin: 0, - end: _getFractionOfTimeElapsed(), + end: isTimerRunning + ? _getFractionOfTimeElapsed() + : 1, ), - duration: const Duration(seconds: 1), + duration: isTimerRunning + ? const Duration(seconds: 1) + : const Duration(seconds: 1), builder: (context, value, _) => CircularProgressIndicator( backgroundColor: colorTheme.fillFaintPressed, From 27525907af750ed8d9e1604e2f40467814e5f63d Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 5 Jul 2024 11:46:38 +0530 Subject: [PATCH 275/466] [mob][photos] Lock screen Clean Up --- mobile/lib/ui/tools/lock_screen.dart | 47 +++++++++------------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 913a20fb86..719ebb0cbb 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -7,7 +7,6 @@ import "package:flutter/scheduler.dart"; import "package:flutter_animate/flutter_animate.dart"; import 'package:logging/logging.dart'; import "package:photos/core/configuration.dart"; -import "package:photos/ente_theme_data.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; import "package:photos/theme/ente_theme.dart"; @@ -123,7 +122,7 @@ class _LockScreenState extends State ), duration: isTimerRunning ? const Duration(seconds: 1) - : const Duration(seconds: 1), + : const Duration(seconds: 0), builder: (context, value, _) => CircularProgressIndicator( backgroundColor: colorTheme.fillFaintPressed, @@ -198,36 +197,20 @@ class _LockScreenState extends State } Future _autoLogoutOnMaxInvalidAttempts() async { - final AlertDialog alert = AlertDialog( - title: Text(S.of(context).tooManyIncorrectAttempts), - content: Text(S.of(context).pleaseLoginAgain), - actions: [ - TextButton( - child: Text( - S.of(context).ok, - style: TextStyle( - color: Theme.of(context).colorScheme.greenAlternative, - ), - ), - onPressed: () async { - Navigator.of(context, rootNavigator: true).pop('dialog'); - Navigator.of(context).popUntil((route) => route.isFirst); - final dialog = - createProgressDialog(context, S.of(context).loggingOut); - await dialog.show(); - await Configuration.instance.logout(); - await dialog.hide(); - }, - ), - ], - ); - - await showDialog( - context: context, - builder: (BuildContext context) { - return alert; - }, + _logger.info("Auto logout on max invalid attempts"); + await _lockscreenSetting.setInvalidAttemptCount(0); + await showErrorDialog( + context, + "Too many incorrect attempts", + "Please login again", + isDismissable: false, ); + Navigator.of(context, rootNavigator: true).pop('dialog'); + Navigator.of(context).popUntil((route) => route.isFirst); + final dialog = createProgressDialog(context, S.of(context).loggingOut); + await dialog.show(); + await Configuration.instance.logout(); + await dialog.hide(); } @override @@ -356,7 +339,7 @@ class _LockScreenState extends State _lockscreenSetting.getInvalidAttemptCount()) { invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount(); - if (invalidAttemptCount > 9) { + if (invalidAttemptCount > 5) { await _autoLogoutOnMaxInvalidAttempts(); return; } From 969154baffe4d9058e2a6b84080f247718948e11 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 11:53:52 +0530 Subject: [PATCH 276/466] [desktop] Embed faces in batches to prevent memory pressure crash --- web/packages/new/photos/services/ml/face.ts | 39 +++++++++++++++------ 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index cf233f85c7..9f178f7b52 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -280,20 +280,39 @@ const indexFacesInBitmap = async ( }, ); - const alignments = partialResult.map(({ detection }) => + const allAlignments = partialResult.map(({ detection }) => computeFaceAlignment(detection), ); - const alignedFacesData = convertToMobileFaceNetInput( - imageBitmap, - alignments, - ); + let embeddings: Float32Array[] = []; + let blurs: number[] = []; + + // Process the faces in batches of 50 to: + // + // 1. Avoid memory pressure (as on ONNX 1.80.0, we can reproduce a crash if + // we try to compute MFNet embeddings for a file with ~280 faces). + // + // 2. Reduce the time the main (Node.js) process is unresponsive (whenever + // the main thread of the Node.js process is CPU bound, the renderer also + // becomes unresponsive since events are routed via the main process). + // + const batchSize = 50; + for (let i = 0; i < yoloFaceDetections.length; i += batchSize) { + const alignments = allAlignments.slice(i, i + batchSize); + const detections = partialResult + .slice(i, i + batchSize) + .map((f) => f.detection); + + const alignedFacesData = convertToMobileFaceNetInput( + imageBitmap, + alignments, + ); - const embeddings = await computeEmbeddings(alignedFacesData, electron); - const blurs = detectBlur( - alignedFacesData, - partialResult.map((f) => f.detection), - ); + embeddings = embeddings.concat( + await computeEmbeddings(alignedFacesData, electron), + ); + blurs = blurs.concat(detectBlur(alignedFacesData, detections)); + } return partialResult.map(({ faceID, detection, score }, i) => ({ faceID, From 05e7863bdc5c0a30fe8babfc5c2906b70a11b060 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Fri, 5 Jul 2024 13:32:17 +0530 Subject: [PATCH 277/466] [mob][photos] Lock count fixed --- .../lib/ui/settings/lock_screen/lock_screen_password.dart | 2 +- mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart | 2 +- mobile/lib/ui/tools/lock_screen.dart | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index 24d0f7575a..c8d36c40b6 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -212,8 +212,8 @@ class _LockScreenPasswordState extends State { } else { if (widget.isOnOpeningApp) { invalidAttemptsCount++; + await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); if (invalidAttemptsCount > 4) { - await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); Navigator.of(context).pop(false); } } diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 622078706f..4695fedb20 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -83,8 +83,8 @@ class _LockScreenPinState extends State { if (widget.isOnOpeningApp) { invalidAttemptsCount++; + await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); if (invalidAttemptsCount > 4) { - await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); Navigator.of(context).pop(false); } } diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 719ebb0cbb..576d393f95 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -120,9 +120,7 @@ class _LockScreenState extends State ? _getFractionOfTimeElapsed() : 1, ), - duration: isTimerRunning - ? const Duration(seconds: 1) - : const Duration(seconds: 0), + duration: const Duration(seconds: 1), builder: (context, value, _) => CircularProgressIndicator( backgroundColor: colorTheme.fillFaintPressed, @@ -339,7 +337,7 @@ class _LockScreenState extends State _lockscreenSetting.getInvalidAttemptCount()) { invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount(); - if (invalidAttemptCount > 5) { + if (invalidAttemptCount > 9) { await _autoLogoutOnMaxInvalidAttempts(); return; } From 0b3ca8db69e51a6a00cf6c05aadd58b0340d9163 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 13:07:45 +0530 Subject: [PATCH 278/466] [server] Increase HTTP request body size to prevent 413 Too Large errors Allow HTTP request body up to 4 MB. The default is 1 MB, which is too small for face embeddings for photos with more than a couple of hundred faces. Roughly, each face embedding is 4KB, but encrypting and base-64-ing the embedding also has a 30% addition (just from one sample I saw), so this should allow photos with ~700 faces to go through. Ref: - https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size --- server/scripts/deploy/museum.nginx.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/scripts/deploy/museum.nginx.conf b/server/scripts/deploy/museum.nginx.conf index ad3ee59f1a..6a49c0ef2f 100644 --- a/server/scripts/deploy/museum.nginx.conf +++ b/server/scripts/deploy/museum.nginx.conf @@ -18,6 +18,9 @@ server { server_name api.ente.io; + # Allow HTTP request body up to 4 MB (default is 1 MB). + client_max_body_size 4m; + location / { proxy_pass http://museum; proxy_http_version 1.1; From 9c11a7f4b7f7edc137f5a1edd079ed0e3c2497da Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 17:44:23 +0530 Subject: [PATCH 279/466] [meta] Prettier 3.3 No breaking changes that affect us. https://prettier.io/blog/2024/06/01/3.3.0 --- desktop/yarn.lock | 6 +++--- docs/yarn.lock | 6 +++--- infra/workers/cast-albums/src/index.ts | 2 +- infra/workers/files/src/index.ts | 2 +- infra/workers/package.json | 3 ++- infra/workers/public-albums/src/index.ts | 2 +- infra/workers/thumbnails/src/index.ts | 2 +- infra/workers/uploader/src/index.ts | 2 +- web/yarn.lock | 6 +++--- 9 files changed, 16 insertions(+), 15 deletions(-) diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 7102beaaef..cf13b48326 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2779,9 +2779,9 @@ prettier-plugin-packagejson@^2: synckit "0.9.0" prettier@^3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.0.tgz#d173ea0524a691d4c0b1181752f2b46724328cdf" - integrity sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g== + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== progress@^2.0.3: version "2.0.3" diff --git a/docs/yarn.lock b/docs/yarn.lock index 048a52a61b..e3ca491637 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -659,9 +659,9 @@ preact@^10.0.0: integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw== prettier@^3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== rfdc@^1.3.1: version "1.3.1" diff --git a/infra/workers/cast-albums/src/index.ts b/infra/workers/cast-albums/src/index.ts index d6b960cad3..5111d446cd 100644 --- a/infra/workers/cast-albums/src/index.ts +++ b/infra/workers/cast-albums/src/index.ts @@ -61,7 +61,7 @@ const handleGET = async (request: Request) => { const params = new URLSearchParams({ castToken }); let response = await fetch( - `https://api.ente.io/cast/files${pathname}${fileID}?${params.toString()}` + `https://api.ente.io/cast/files${pathname}${fileID}?${params.toString()}`, ); if (!response.ok) console.log("Upstream error", response.status); diff --git a/infra/workers/files/src/index.ts b/infra/workers/files/src/index.ts index 2bd9e2feff..2592d39ce6 100644 --- a/infra/workers/files/src/index.ts +++ b/infra/workers/files/src/index.ts @@ -91,7 +91,7 @@ const handleGET = async (request: Request) => { headers: { "User-Agent": request.headers.get("User-Agent") ?? "", }, - } + }, ); if (!response.ok) console.log("Upstream error", response.status); diff --git a/infra/workers/package.json b/infra/workers/package.json index f754c98504..e4e980d2f2 100644 --- a/infra/workers/package.json +++ b/infra/workers/package.json @@ -4,7 +4,8 @@ "devDependencies": { "@cloudflare/workers-types": "^4.20240614.0", "typescript": "^5", - "wrangler": "^3" + "wrangler": "^3", + "prettier": "^3" }, "workspaces": [ "*" diff --git a/infra/workers/public-albums/src/index.ts b/infra/workers/public-albums/src/index.ts index 7964da4b0a..0b679c965f 100644 --- a/infra/workers/public-albums/src/index.ts +++ b/infra/workers/public-albums/src/index.ts @@ -90,7 +90,7 @@ const handleGET = async (request: Request) => { if (accessTokenJWT) params.set("accessTokenJWT", accessTokenJWT); let response = await fetch( - `https://api.ente.io/public-collection/files${pathname}${fileID}?${params.toString()}` + `https://api.ente.io/public-collection/files${pathname}${fileID}?${params.toString()}`, ); if (!response.ok) console.log("Upstream error", response.status); diff --git a/infra/workers/thumbnails/src/index.ts b/infra/workers/thumbnails/src/index.ts index 515f6255b1..9b1876f38c 100644 --- a/infra/workers/thumbnails/src/index.ts +++ b/infra/workers/thumbnails/src/index.ts @@ -79,7 +79,7 @@ const handleGET = async (request: Request) => { if (token) params.set("token", token); let response = await fetch( - `https://api.ente.io/files/preview/${fileID}?${params.toString()}` + `https://api.ente.io/files/preview/${fileID}?${params.toString()}`, ); if (!response.ok) console.log("Upstream error", response.status); diff --git a/infra/workers/uploader/src/index.ts b/infra/workers/uploader/src/index.ts index 9214958fdb..65a2161641 100644 --- a/infra/workers/uploader/src/index.ts +++ b/infra/workers/uploader/src/index.ts @@ -116,7 +116,7 @@ const handlePOSTOrPUT = async (request: Request) => { response.headers.set("Access-Control-Allow-Origin", "*"); response.headers.set( "Access-Control-Expose-Headers", - "X-Request-Id, CF-Ray" + "X-Request-Id, CF-Ray", ); return response; }; diff --git a/web/yarn.lock b/web/yarn.lock index 6d385947d8..d855d76fcd 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -3864,9 +3864,9 @@ prettier-plugin-packagejson@^2.5: synckit "0.9.0" prettier@^3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== process-nextick-args@~2.0.0: version "2.0.1" From e9938c2ac49c3a3b3742a00c74f04efe4b5a483f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 18:02:36 +0530 Subject: [PATCH 280/466] [workers] Restrict CORS ACAH headers to the whitelist --- infra/workers/files/src/index.ts | 16 +--------------- infra/workers/public-albums/src/index.ts | 23 ++--------------------- infra/workers/thumbnails/src/index.ts | 16 +--------------- infra/workers/uploader/src/index.ts | 19 +++---------------- 4 files changed, 7 insertions(+), 67 deletions(-) diff --git a/infra/workers/files/src/index.ts b/infra/workers/files/src/index.ts index 2592d39ce6..e855dca243 100644 --- a/infra/workers/files/src/index.ts +++ b/infra/workers/files/src/index.ts @@ -17,16 +17,12 @@ export default { const handleOPTIONS = (request: Request) => { const origin = request.headers.get("Origin"); if (!isAllowedOrigin(origin)) console.warn("Unknown origin", origin); - const headers = request.headers.get("Access-Control-Request-Headers"); - if (!areAllowedHeaders(headers)) - console.warn("Unknown header in list", headers); return new Response("", { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, OPTIONS", + "Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package", "Access-Control-Max-Age": "86400", - // "Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package", - "Access-Control-Allow-Headers": "*", }, }); }; @@ -48,16 +44,6 @@ const isAllowedOrigin = (origin: string | null) => { } }; -const areAllowedHeaders = (headers: string | null) => { - const allowed = ["x-auth-token", "x-client-package"]; - - if (!headers) return true; - for (const header of headers.split(",")) { - if (!allowed.includes(header.trim().toLowerCase())) return false; - } - return true; -}; - const handleGET = async (request: Request) => { const url = new URL(request.url); diff --git a/infra/workers/public-albums/src/index.ts b/infra/workers/public-albums/src/index.ts index 0b679c965f..505a474635 100644 --- a/infra/workers/public-albums/src/index.ts +++ b/infra/workers/public-albums/src/index.ts @@ -17,17 +17,13 @@ export default { const handleOPTIONS = (request: Request) => { const origin = request.headers.get("Origin"); if (!isAllowedOrigin(origin)) console.warn("Unknown origin", origin); - const headers = request.headers.get("Access-Control-Request-Headers"); - if (!areAllowedHeaders(headers)) - console.warn("Unknown header in list", headers); return new Response("", { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, OPTIONS", + "Access-Control-Allow-Headers": + "X-Auth-Access-Token, X-Auth-Access-Token-JWT, X-Client-Package", "Access-Control-Max-Age": "86400", - // "Access-Control-Allow-Headers": "X-Auth-Access-Token, X-Auth-Access-Token-JWT", - // "Access-Control-Allow-Headers": "X-Auth-Access-Token, X-Auth-Access-Token-JWT, x-client-package", - "Access-Control-Allow-Headers": "*", }, }); }; @@ -45,21 +41,6 @@ const isAllowedOrigin = (origin: string | null) => { } }; -const areAllowedHeaders = (headers: string | null) => { - // TODO(MR): Stop sending "x-client-package" - const allowed = [ - "x-auth-access-token", - "x-auth-access-token-jwt", - "x-client-package", - ]; - - if (!headers) return true; - for (const header of headers.split(",")) { - if (!allowed.includes(header.trim().toLowerCase())) return false; - } - return true; -}; - const handleGET = async (request: Request) => { const url = new URL(request.url); diff --git a/infra/workers/thumbnails/src/index.ts b/infra/workers/thumbnails/src/index.ts index 9b1876f38c..9fc23fa52b 100644 --- a/infra/workers/thumbnails/src/index.ts +++ b/infra/workers/thumbnails/src/index.ts @@ -17,16 +17,12 @@ export default { const handleOPTIONS = (request: Request) => { const origin = request.headers.get("Origin"); if (!isAllowedOrigin(origin)) console.warn("Unknown origin", origin); - const headers = request.headers.get("Access-Control-Request-Headers"); - if (!areAllowedHeaders(headers)) - console.warn("Unknown header in list", headers); return new Response("", { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, OPTIONS", + "Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package", "Access-Control-Max-Age": "86400", - // "Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package", - "Access-Control-Allow-Headers": "*", }, }); }; @@ -48,16 +44,6 @@ const isAllowedOrigin = (origin: string | null) => { } }; -const areAllowedHeaders = (headers: string | null) => { - const allowed = ["x-auth-token", "x-client-package"]; - - if (!headers) return true; - for (const header of headers.split(",")) { - if (!allowed.includes(header.trim().toLowerCase())) return false; - } - return true; -}; - const handleGET = async (request: Request) => { const url = new URL(request.url); diff --git a/infra/workers/uploader/src/index.ts b/infra/workers/uploader/src/index.ts index 65a2161641..fb811924be 100644 --- a/infra/workers/uploader/src/index.ts +++ b/infra/workers/uploader/src/index.ts @@ -23,17 +23,14 @@ export default { const handleOPTIONS = (request: Request) => { const origin = request.headers.get("Origin"); if (!isAllowedOrigin(origin)) console.warn("Unknown origin", origin); - const headers = request.headers.get("Access-Control-Request-Headers"); - if (!areAllowedHeaders(headers)) - console.warn("Unknown header in list", headers); return new Response("", { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "POST, PUT, OPTIONS", - "Access-Control-Max-Age": "86400", - // "Access-Control-Allow-Headers": "Content-Type", "UPLOAD-URL, X-Client-Package", - "Access-Control-Allow-Headers": "*", + "Access-Control-Allow-Headers": + "Content-Type, UPLOAD-URL, X-Client-Package", "Access-Control-Expose-Headers": "X-Request-Id, CF-Ray", + "Access-Control-Max-Age": "86400", }, }); }; @@ -55,16 +52,6 @@ const isAllowedOrigin = (origin: string | null) => { } }; -const areAllowedHeaders = (headers: string | null) => { - const allowed = ["content-type", "upload-url", "x-client-package"]; - - if (!headers) return true; - for (const header of headers.split(",")) { - if (!allowed.includes(header.trim().toLowerCase())) return false; - } - return true; -}; - const handlePOSTOrPUT = async (request: Request) => { const url = new URL(request.url); From 547d03049a395a52a0182bd9934a9dd3cfd3b0cd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 19:33:14 +0530 Subject: [PATCH 281/466] [web] Start using TypeScript 5.5 goodies We updated to 5.5 in https://github.com/ente-io/ente/pull/2351, but I was waiting for the VS Code release with 5.5 to also go out (so that we don't see the editor squigglies). --- web/apps/auth/src/services/remote.ts | 2 +- web/packages/new/photos/services/ffmpeg/worker.ts | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/web/apps/auth/src/services/remote.ts b/web/apps/auth/src/services/remote.ts index 93429be259..c1cf045615 100644 --- a/web/apps/auth/src/services/remote.ts +++ b/web/apps/auth/src/services/remote.ts @@ -42,7 +42,7 @@ export const getAuthCodes = async (): Promise => { }), ); // Remove undefined values - const filteredAuthCodes = authCodes.filter((f): f is Code => !!f); + const filteredAuthCodes = authCodes.filter((f) => !!f); filteredAuthCodes.sort((a, b) => { if (a.issuer && b.issuer) { return a.issuer.localeCompare(b.issuer); diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index 11d2e654d0..ef321c494d 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -128,7 +128,4 @@ const substitutePlaceholders = ( return segment; } }) - // TODO: The type guard should automatically get deduced with TS 5.5 - // We still need to wait for VSCode to ship with TS 5.5 otherwise the - // red squigglies in the editor will remain. - .filter((s): s is string => !!s); + .filter((s) => !!s); From d07a46f5140372da8194fc42ea57ba185e4fd59f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 19:36:35 +0530 Subject: [PATCH 282/466] Tense --- web/packages/new/photos/services/ml/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index db4ff3195a..c7773b6ead 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -244,7 +244,7 @@ const indexNextBatch = async ( ) => { // Don't try to index if we wouldn't be able to upload them anyway. The // liveQ has already been drained, but that's fine, it'll be rare that we - // are able to upload just a bit ago but don't have network now. + // were able to upload just a bit ago but don't have network now. if (!self.navigator.onLine) { log.info("Skipping ML indexing since we are not online"); return false; From 31b6572e178a70a1ee0d6a678d695a52ec852b94 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 19:37:27 +0530 Subject: [PATCH 283/466] New convention --- web/apps/payments/src/App.tsx | 2 +- .../payments/src/services/{billing-service.ts => billing.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename web/apps/payments/src/services/{billing-service.ts => billing.ts} (100%) diff --git a/web/apps/payments/src/App.tsx b/web/apps/payments/src/App.tsx index 57ebf79216..e987223b17 100644 --- a/web/apps/payments/src/App.tsx +++ b/web/apps/payments/src/App.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useRef, useState } from "react"; import { Container } from "./components/Container"; -import { parseAndHandleRequest } from "./services/billing-service"; +import { parseAndHandleRequest } from "./services/billing"; import S from "./utils/strings"; export const App: React.FC = () => { diff --git a/web/apps/payments/src/services/billing-service.ts b/web/apps/payments/src/services/billing.ts similarity index 100% rename from web/apps/payments/src/services/billing-service.ts rename to web/apps/payments/src/services/billing.ts From 7cef60f8b9654418e6a16f6cda023f2e14c786b9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 19:39:20 +0530 Subject: [PATCH 284/466] Inline --- web/apps/payments/src/App.tsx | 5 ++++- web/apps/payments/src/components/Container.tsx | 5 ----- 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 web/apps/payments/src/components/Container.tsx diff --git a/web/apps/payments/src/App.tsx b/web/apps/payments/src/App.tsx index e987223b17..59f7b7d654 100644 --- a/web/apps/payments/src/App.tsx +++ b/web/apps/payments/src/App.tsx @@ -1,5 +1,4 @@ import React, { useEffect, useRef, useState } from "react"; -import { Container } from "./components/Container"; import { parseAndHandleRequest } from "./services/billing"; import S from "./utils/strings"; @@ -18,4 +17,8 @@ export const App: React.FC = () => { return {failed ? S.error_generic : }; }; +const Container: React.FC = ({ children }) => ( +
{children}
+); + const Spinner: React.FC = () =>
; diff --git a/web/apps/payments/src/components/Container.tsx b/web/apps/payments/src/components/Container.tsx deleted file mode 100644 index bf8c57b5dc..0000000000 --- a/web/apps/payments/src/components/Container.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -export const Container: React.FC = ({ children }) => ( -
{children}
-); From 99af0ff294a13f49426d61cb55f50ebf4effc2eb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 19:46:29 +0530 Subject: [PATCH 285/466] Update to vite 5.3.3 (payments) https://github.com/vitejs/vite/blob/v5.3.3/packages/vite/CHANGELOG.md Also update sibling @vitejs/plugin-react --- web/apps/payments/package.json | 4 +- web/yarn.lock | 872 +++++++++++++++++---------------- 2 files changed, 446 insertions(+), 430 deletions(-) diff --git a/web/apps/payments/package.json b/web/apps/payments/package.json index 4c8cc122f6..ead1e9cca9 100644 --- a/web/apps/payments/package.json +++ b/web/apps/payments/package.json @@ -17,7 +17,7 @@ "@/build-config": "*", "@types/react": "^18", "@types/react-dom": "^18", - "@vitejs/plugin-react": "^4.2", - "vite": "^5.2" + "@vitejs/plugin-react": "^4.3", + "vite": "^5.3" } } diff --git a/web/yarn.lock b/web/yarn.lock index d855d76fcd..f1afa00222 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -23,80 +23,82 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: - "@babel/highlight" "^7.24.2" + "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.23.5": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" + integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== -"@babel/core@^7.23.5": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== +"@babel/core@^7.24.5": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" + integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helpers" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" + integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.7" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" + integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" + "@babel/compat-data" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" "@babel/helper-module-imports@^7.16.7": version "7.22.15" @@ -105,66 +107,67 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.22.15": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: - "@babel/types" "^7.24.0" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== +"@babel/helper-module-transforms@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" + integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" -"@babel/helper-plugin-utils@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" + integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== +"@babel/helper-string-parser@^7.23.4", "@babel/helper-string-parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" + integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== +"@babel/helper-validator-option@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" + integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== +"@babel/helpers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" + integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" "@babel/highlight@^7.23.4": version "7.23.4" @@ -175,34 +178,34 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-validator-identifier" "^7.24.7" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" + integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== -"@babel/plugin-transform-react-jsx-self@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" - integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== +"@babel/plugin-transform-react-jsx-self@^7.24.5": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx-source@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" - integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== +"@babel/plugin-transform-react-jsx-source@^7.24.1": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.23.9" @@ -218,38 +221,38 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/traverse@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" + integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" + integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" "@babel/types@^7.22.15": @@ -406,120 +409,120 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -862,80 +865,85 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@rollup/rollup-android-arm-eabi@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz#57936f50d0335e2e7bfac496d209606fa516add4" - integrity sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w== - -"@rollup/rollup-android-arm64@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz#81bba83b37382a2d0e30ceced06c8d3d85138054" - integrity sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q== - -"@rollup/rollup-darwin-arm64@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz#a371bd723a5c4c4a33376da72abfc3938066842b" - integrity sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA== - -"@rollup/rollup-darwin-x64@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz#8baf2fda277c9729125017c65651296282412886" - integrity sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz#822830a8f7388d5b81d04c69415408d3bab1079b" - integrity sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA== - -"@rollup/rollup-linux-arm64-gnu@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz#e20fbe1bd4414c7119f9e0bba8ad17a6666c8365" - integrity sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A== - -"@rollup/rollup-linux-arm64-musl@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz#13f475596a62e1924f13fe1c8cf2c40e09a99b47" - integrity sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA== - -"@rollup/rollup-linux-powerpc64le-gnu@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz#6a431c441420d1c510a205e08c6673355a0a2ea9" - integrity sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA== - -"@rollup/rollup-linux-riscv64-gnu@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz#53d9448962c3f9ed7a1672269655476ea2d67567" - integrity sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw== - -"@rollup/rollup-linux-s390x-gnu@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz#95f0c133b324da3e7e5c7d12855e0eb71d21a946" - integrity sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA== - -"@rollup/rollup-linux-x64-gnu@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz#820ada75c68ead1acc486e41238ca0d8f8531478" - integrity sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg== - -"@rollup/rollup-linux-x64-musl@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz#ca74f22e125efbe94c1148d989ef93329b464443" - integrity sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg== - -"@rollup/rollup-win32-arm64-msvc@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz#269023332297051d037a9593dcba92c10fef726b" - integrity sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ== - -"@rollup/rollup-win32-ia32-msvc@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz#d7701438daf964011fd7ca33e3f13f3ff5129e7b" - integrity sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw== - -"@rollup/rollup-win32-x64-msvc@4.14.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz#0bb7ac3cd1c3292db1f39afdabfd03ccea3a3d34" - integrity sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag== +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== "@rushstack/eslint-patch@^1.3.3": version "1.7.2" @@ -986,9 +994,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -1296,16 +1304,16 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@vitejs/plugin-react@^4.2": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" - integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== +"@vitejs/plugin-react@^4.3": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz#d0be6594051ded8957df555ff07a991fb618b48e" + integrity sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg== dependencies: - "@babel/core" "^7.23.5" - "@babel/plugin-transform-react-jsx-self" "^7.23.3" - "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@babel/core" "^7.24.5" + "@babel/plugin-transform-react-jsx-self" "^7.24.5" + "@babel/plugin-transform-react-jsx-source" "^7.24.1" "@types/babel__core" "^7.20.5" - react-refresh "^0.14.0" + react-refresh "^0.14.2" acorn-jsx@^5.3.2: version "5.3.2" @@ -1592,14 +1600,14 @@ braces@^3.0.2: fill-range "^7.0.1" browserslist@^4.22.2: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + version "4.23.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" + caniuse-lite "^1.0.30001629" + electron-to-chromium "^1.4.796" node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + update-browserslist-db "^1.0.16" bs58@^5.0.0: version "5.0.0" @@ -1636,10 +1644,10 @@ caniuse-lite@^1.0.30001579: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== -caniuse-lite@^1.0.30001587: - version "1.0.30001605" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz#ca12d7330dd8bcb784557eb9aa64f0037870d9d6" - integrity sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ== +caniuse-lite@^1.0.30001629: + version "1.0.30001640" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz#32c467d4bf1f1a0faa63fc793c2ba81169e7652f" + integrity sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA== chalk@^2.4.2: version "2.4.2" @@ -1851,7 +1859,14 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.3.1: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1950,10 +1965,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.668: - version "1.4.726" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.726.tgz#9ca95f19e9a0d63675e838b24681182203e40a30" - integrity sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ== +electron-to-chromium@^1.4.796: + version "1.4.816" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz#3624649d1e7fde5cdbadf59d31a524245d8ee85f" + integrity sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw== emoji-regex@^8.0.0: version "8.0.0" @@ -2176,36 +2191,36 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" - -escalade@^3.1.1: + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -3802,10 +3817,10 @@ peek-readable@^4.1.0: "photoswipe@file:./apps/photos/thirdparty/photoswipe": version "4.1.6" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.3.1: version "2.3.1" @@ -3836,13 +3851,13 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== +postcss@^8.4.39: + version "8.4.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" + integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== dependencies: nanoid "^3.3.7" - picocolors "^1.0.0" + picocolors "^1.0.1" source-map-js "^1.2.0" prelude-ls@^1.2.1: @@ -3965,10 +3980,10 @@ react-otp-input@^2.3.1: resolved "https://registry.yarnpkg.com/react-otp-input/-/react-otp-input-2.4.0.tgz#0f0a3de1d8c8d564e2e4fbe5d6b7b56e29e3a6e6" integrity sha512-AIgl7u4sS9BTNCxX1xlaS5fPWay/Zml8Ho5LszXZKXrH1C/TiFsTQGmtl13UecQYO3mSF3HUzG2rrDf0sjEFmg== -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== react-select@^4.3.1: version "4.3.1" @@ -4131,27 +4146,28 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.13.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.0.tgz#c3e2cd479f1b2358b65c1f810fa05b51603d7be8" - integrity sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ== + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.14.0" - "@rollup/rollup-android-arm64" "4.14.0" - "@rollup/rollup-darwin-arm64" "4.14.0" - "@rollup/rollup-darwin-x64" "4.14.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.14.0" - "@rollup/rollup-linux-arm64-gnu" "4.14.0" - "@rollup/rollup-linux-arm64-musl" "4.14.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.14.0" - "@rollup/rollup-linux-riscv64-gnu" "4.14.0" - "@rollup/rollup-linux-s390x-gnu" "4.14.0" - "@rollup/rollup-linux-x64-gnu" "4.14.0" - "@rollup/rollup-linux-x64-musl" "4.14.0" - "@rollup/rollup-win32-arm64-msvc" "4.14.0" - "@rollup/rollup-win32-ia32-msvc" "4.14.0" - "@rollup/rollup-win32-x64-msvc" "4.14.0" + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4774,13 +4790,13 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.0.16: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -4804,13 +4820,13 @@ uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -vite@^5.2: - version "5.2.8" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.8.tgz#a99e09939f1a502992381395ce93efa40a2844aa" - integrity sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA== +vite@^5.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2" + integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A== dependencies: - esbuild "^0.20.1" - postcss "^8.4.38" + esbuild "^0.21.3" + postcss "^8.4.39" rollup "^4.13.0" optionalDependencies: fsevents "~2.3.3" From fcb86da03cfdf39b781a976644ca07e5a710fe54 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 20:30:47 +0530 Subject: [PATCH 286/466] Update some dependencies (minor versions); pin otpauth Pin otpauth since upstream changed from jsSHA some other library, and we'd need to do the same for our steam codes implementation to avoid increasing the bundle size. https://github.com/hectorm/otpauth/pull/505 --- For the rest of the updates, Scanned the CHANGELOGs (linked): @emotion/react, @emotion/styled - https://github.com/emotion-js/emotion/releases @mui/icons-material, @mui/material https://github.com/mui/material-ui/releases get-user-locale https://github.com/wojtekmaj/get-user-locale/releases i18next, i18next-resources-to-backend, react-i18next https://github.com/i18next/i18next/releases ml-matrix https://github.com/mljs/matrix/releases next Doesn't have a changelog. Rely on hope. See: https://github.com/vercel/next.js/discussions/65212 react, react-dom, @types/react, @types/react-dom https://github.com/facebook/react/blob/main/CHANGELOG.md react-virtualized-auto-sizer https://github.com/bvaughn/react-virtualized-auto-sizer/releases @types/chromecast-caf-receiver, @types/leaflet Minor updates, type only --- web/apps/auth/package.json | 2 +- web/apps/cast/package.json | 2 +- web/apps/photos/package.json | 6 +- web/packages/next/package.json | 10 +- web/yarn.lock | 622 +++++++++++++++++---------------- 5 files changed, 337 insertions(+), 305 deletions(-) diff --git a/web/apps/auth/package.json b/web/apps/auth/package.json index b9679adb95..1da1cfae3d 100644 --- a/web/apps/auth/package.json +++ b/web/apps/auth/package.json @@ -9,6 +9,6 @@ "@ente/eslint-config": "*", "@ente/shared": "*", "jssha": "~3.3.1", - "otpauth": "^9" + "otpauth": "9.2.4" } } diff --git a/web/apps/cast/package.json b/web/apps/cast/package.json index 583eea41ce..c2444cead7 100644 --- a/web/apps/cast/package.json +++ b/web/apps/cast/package.json @@ -10,6 +10,6 @@ "@ente/shared": "*" }, "devDependencies": { - "@types/chromecast-caf-receiver": "^6.0.14" + "@types/chromecast-caf-receiver": "^6.0" } } diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json index fb656537f3..e28732e737 100644 --- a/web/apps/photos/package.json +++ b/web/apps/photos/package.json @@ -36,7 +36,7 @@ "react-otp-input": "^2.3.1", "react-select": "^4.3.1", "react-top-loading-bar": "^2.0.1", - "react-virtualized-auto-sizer": "^1.0.2", + "react-virtualized-auto-sizer": "^1.0", "react-window": "^1.8.6", "sanitize-filename": "^1.6.3", "similarity-transformation": "^0.0.1", @@ -49,10 +49,10 @@ "@ente/eslint-config": "*", "@next/bundle-analyzer": "^14.1", "@types/bs58": "^4.0.1", - "@types/leaflet": "^1.9.3", + "@types/leaflet": "^1.9", "@types/photoswipe": "^4.1.1", "@types/react-select": "^4.0.15", - "@types/react-virtualized-auto-sizer": "^1.0.1", + "@types/react-virtualized-auto-sizer": "^1.0", "@types/react-window": "^1.8.2", "@types/react-window-infinite-loader": "^1.0.3", "@types/uuid": "^9.0.2", diff --git a/web/packages/next/package.json b/web/packages/next/package.json index 00392569bb..0dfc31b743 100644 --- a/web/packages/next/package.json +++ b/web/packages/next/package.json @@ -5,14 +5,14 @@ "dependencies": { "@emotion/react": "^11.11", "@emotion/styled": "^11.11", - "@mui/icons-material": "^5.15", - "@mui/material": "^5.15", + "@mui/icons-material": "^5.16", + "@mui/material": "^5.16", "comlink": "^4.4", "get-user-locale": "^2.3", - "i18next": "^23.10", - "i18next-resources-to-backend": "^1.2.0", + "i18next": "^23.11", + "i18next-resources-to-backend": "^1.2", "is-electron": "^2.2", - "next": "^14.1", + "next": "^14.2", "react": "^18", "react-dom": "^18", "react-i18next": "^14" diff --git a/web/yarn.lock b/web/yarn.lock index f1afa00222..52e1beb7e5 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -15,15 +15,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.24.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== @@ -100,14 +92,7 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-module-imports@^7.16.7": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.24.7": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== @@ -146,12 +131,12 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-string-parser@^7.23.4", "@babel/helper-string-parser@^7.24.7": +"@babel/helper-string-parser@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== -"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.7": +"@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== @@ -169,15 +154,6 @@ "@babel/template" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - "@babel/highlight@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" @@ -207,13 +183,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.18.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.21.0": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" @@ -255,15 +238,6 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - "@date-io/core@^2.15.0", "@date-io/core@^2.17.0": version "2.17.0" resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" @@ -335,10 +309,10 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== -"@emotion/is-prop-valid@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== +"@emotion/is-prop-valid@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== dependencies: "@emotion/memoize" "^0.8.1" @@ -347,7 +321,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.1.1", "@emotion/react@^11.11": +"@emotion/react@^11.1.1": version "11.11.3" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== @@ -361,7 +335,21 @@ "@emotion/weak-memoize" "^0.3.1" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.0", "@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": +"@emotion/react@^11.11": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" + integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/cache" "^11.11.0" + "@emotion/serialize" "^1.1.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.0.0": version "1.1.3" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== @@ -372,20 +360,31 @@ "@emotion/utils" "^1.2.1" csstype "^3.0.2" +"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" + integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + "@emotion/sheet@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== "@emotion/styled@^11.11": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346" - integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng== + version "11.11.5" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" + integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.1" - "@emotion/serialize" "^1.1.2" + "@emotion/is-prop-valid" "^1.2.2" + "@emotion/serialize" "^1.1.4" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" @@ -556,32 +555,32 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@floating-ui/core@^1.0.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== +"@floating-ui/core@^1.6.0": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.4.tgz#0140cf5091c8dee602bff9da5ab330840ff91df6" + integrity sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA== dependencies: - "@floating-ui/utils" "^0.2.1" + "@floating-ui/utils" "^0.2.4" -"@floating-ui/dom@^1.6.1": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" - integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== +"@floating-ui/dom@^1.0.0": + version "1.6.7" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.7.tgz#85d22f731fcc5b209db504478fb1df5116a83015" + integrity sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng== dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.4" "@floating-ui/react-dom@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" - integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" + integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== dependencies: - "@floating-ui/dom" "^1.6.1" + "@floating-ui/dom" "^1.0.0" -"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== +"@floating-ui/utils@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.4.tgz#1d459cee5031893a08a0e064c406ad2130cced7c" + integrity sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA== "@humanwhocodes/config-array@^0.11.14": version "0.11.14" @@ -646,42 +645,42 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mui/base@5.0.0-beta.36": - version "5.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.36.tgz#29ca2de9d387f6d3943b6f18a84415c43e5f206c" - integrity sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ== +"@mui/base@5.0.0-beta.40": + version "5.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" + integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== dependencies: "@babel/runtime" "^7.23.9" "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.9" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" "@popperjs/core" "^2.11.8" clsx "^2.1.0" prop-types "^15.8.1" -"@mui/core-downloads-tracker@^5.15.10": - version "5.15.11" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz#dcaf6156880e81e4547237fb781700485453e964" - integrity sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw== +"@mui/core-downloads-tracker@^5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.0.tgz#50153c698e321793c83a0283d8d7a9dc5d43858a" + integrity sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw== -"@mui/icons-material@^5.15": - version "5.15.10" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.15.10.tgz#24f65945f8f02499e4da0213d6a12ac714305679" - integrity sha512-9cF8oUHZKo9oQ7EQ3pxPELaZuZVmphskU4OI6NiJNDVN7zcuvrEsuWjYo1Zh4fLiC39Nrvm30h/B51rcUjvSGA== +"@mui/icons-material@^5.16": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.0.tgz#5269fda922fe5e6db3577ec497e8b987195606ef" + integrity sha512-6ISoOhkp9w5gD0PEW9JklrcbyARDkFWNTBdwXZ1Oy5IGlyu9B0zG0hnUIe4H17IaF1Vgj6C8VI+v4tkSdK0veg== dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.15": - version "5.15.10" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.10.tgz#6533ba53edbd0790dbc5bb7e9e173f6069ffd7e6" - integrity sha512-YJJGHjwDOucecjDEV5l9ISTCo+l9YeWrho623UajzoHRYxuKUmwrGVYOW4PKwGvCx9SU9oklZnbbi2Clc5XZHw== +"@mui/material@^5.16": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.0.tgz#2ef4f52ae773574fc0a681f25705f376f5cd13f7" + integrity sha512-DbR1NckTLpjt9Zut9EGQ70th86HfN0BYQgyYro6aXQrNfjzSwe3BJS1AyBQ5mJ7TdL6YVRqohfukxj9JlqZZUg== dependencies: "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.36" - "@mui/core-downloads-tracker" "^5.15.10" - "@mui/system" "^5.15.9" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.9" + "@mui/base" "5.0.0-beta.40" + "@mui/core-downloads-tracker" "^5.16.0" + "@mui/system" "^5.16.0" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.16.0" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" csstype "^3.1.3" @@ -689,45 +688,45 @@ react-is "^18.2.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.15.9": - version "5.15.11" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.11.tgz#4b9289b56b1ae0beb84e47bc9952f927b6e175ae" - integrity sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA== +"@mui/private-theming@^5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.0.tgz#c1abfd3e0d9c95459048240ef4209dc7f25dc949" + integrity sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.15.11" + "@mui/utils" "^5.16.0" prop-types "^15.8.1" -"@mui/styled-engine@^5.15.9": - version "5.15.11" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.11.tgz#040181f31910e0f66d43a5c44fe89da06b34212b" - integrity sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w== +"@mui/styled-engine@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.14.tgz#168b154c4327fa4ccc1933a498331d53f61c0de2" + integrity sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw== dependencies: "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.15.9": - version "5.15.9" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.9.tgz#8a34ac0ab133af2550cc7ab980a35174142fd265" - integrity sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg== +"@mui/system@^5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.0.tgz#e5b4cfbdfbc0ee9859f6b168e8b07d750303b7a0" + integrity sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.15.9" - "@mui/styled-engine" "^5.15.9" - "@mui/types" "^7.2.13" - "@mui/utils" "^5.15.9" + "@mui/private-theming" "^5.16.0" + "@mui/styled-engine" "^5.15.14" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.16.0" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.13": - version "7.2.13" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" - integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== +"@mui/types@^7.2.14": + version "7.2.14" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.14.tgz#8a02ac129b70f3d82f2f9b76ded2c8d48e3fc8c9" + integrity sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ== -"@mui/utils@^5.10.3", "@mui/utils@^5.15.11", "@mui/utils@^5.15.9": +"@mui/utils@^5.10.3": version "5.15.11" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.11.tgz#a71804d6d6025783478fd1aca9afbf83d9b789c7" integrity sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw== @@ -737,6 +736,16 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/utils@^5.15.14", "@mui/utils@^5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.0.tgz#3963127d9a619c251e5be1aef9adab0e89d3e7df" + integrity sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA== + dependencies: + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" + prop-types "^15.8.1" + react-is "^18.2.0" + "@mui/x-date-pickers@^5.0.0-alpha.6": version "5.0.20" resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz#7b4e5b5a214a8095937ba7d82bb82acd6f270d72" @@ -756,16 +765,16 @@ rifm "^0.12.1" "@next/bundle-analyzer@^14.1": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-14.1.0.tgz#da146eb713283c2a28d32c98dbd0d63ae7d42d30" - integrity sha512-RJWjnlMp/1WSW0ahAdawV22WgJiC6BVaFS5Xfhw6gP7NJEX3cAJjh4JqSHKGr8GnLNRaFCVTQdDPoX84E421BA== + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-14.2.4.tgz#11bf77810154f45fa1d6d6e3c7649c570047127c" + integrity sha512-ydSDikSgGhYmBlnvzS4tgdGyn40SCFI9uWDldbkRSwXS60tg4WBJR4qJoTSERTmdAFb1PeUYCyFdfC80i2WL1w== dependencies: webpack-bundle-analyzer "4.10.1" -"@next/env@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.0.tgz#43d92ebb53bc0ae43dcc64fb4d418f8f17d7a341" - integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw== +"@next/env@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7" + integrity sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg== "@next/eslint-plugin-next@14.1.0": version "14.1.0" @@ -774,50 +783,50 @@ dependencies: glob "10.3.10" -"@next/swc-darwin-arm64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39" - integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ== - -"@next/swc-darwin-x64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9" - integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g== - -"@next/swc-linux-arm64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c" - integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ== - -"@next/swc-linux-arm64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0" - integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g== - -"@next/swc-linux-x64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz#18967f100ec19938354332dcb0268393cbacf581" - integrity sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ== - -"@next/swc-linux-x64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz#77077cd4ba8dda8f349dc7ceb6230e68ee3293cf" - integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg== - -"@next/swc-win32-arm64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a" - integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ== - -"@next/swc-win32-ia32-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0" - integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw== - -"@next/swc-win32-x64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2" - integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg== +"@next/swc-darwin-arm64@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz#da9f04c34a3d5f0b8401ed745768420e4a604036" + integrity sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg== + +"@next/swc-darwin-x64@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz#46dedb29ec5503bf171a72a3ecb8aac6e738e9d6" + integrity sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg== + +"@next/swc-linux-arm64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz#c9697ab9eb422bd1d7ffd0eb0779cc2aefa9d4a1" + integrity sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ== + +"@next/swc-linux-arm64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz#cbbceb2008571c743b5a310a488d2e166d200a75" + integrity sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A== + +"@next/swc-linux-x64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz#d79184223f857bacffb92f643cb2943a43632568" + integrity sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q== + +"@next/swc-linux-x64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz#6b6c3e5ac02ca5e63394d280ec8ee607491902df" + integrity sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ== + +"@next/swc-win32-arm64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz#dbad3906e870dba84c5883d9d4c4838472e0697f" + integrity sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A== + +"@next/swc-win32-ia32-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz#6074529b91ba49132922ce89a2e16d25d2ec235d" + integrity sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag== + +"@next/swc-win32-x64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz#e65a1c6539a671f97bb86d5183d6e3a1733c29c7" + integrity sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg== "@noble/hashes@^1.2.0": version "1.3.3" @@ -856,9 +865,9 @@ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== "@polka/url@^1.0.0-next.24": - version "1.0.0-next.24" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" - integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== + version "1.0.0-next.25" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" + integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== "@popperjs/core@^2.11.8": version "2.11.8" @@ -955,11 +964,17 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.54.2.tgz#0665848e22cbda936cfd05256facdfbba121438d" integrity sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg== -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" + integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== dependencies: + "@swc/counter" "^0.1.3" tslib "^2.4.0" "@tokenizer/token@^0.3.0": @@ -1008,10 +1023,10 @@ "@types/node" "*" base-x "^3.0.6" -"@types/chromecast-caf-receiver@^6.0.14": - version "6.0.14" - resolved "https://registry.yarnpkg.com/@types/chromecast-caf-receiver/-/chromecast-caf-receiver-6.0.14.tgz#e1e781c62c84ee85899fd20d658e258f8f45f5be" - integrity sha512-qvN4uE4MlYCEtniTtjxG4D+KeEXfs/Sgqex9sSZdPVh5rffdifINYzKH3z3QRl+0mk41vD6vYZ8s8ZfW/8iFoQ== +"@types/chromecast-caf-receiver@^6.0": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@types/chromecast-caf-receiver/-/chromecast-caf-receiver-6.0.16.tgz#eebbe903273ffe3dfec364cf5fceda41a6bf2f91" + integrity sha512-J7EsTdshcZUBJkfHQm3JW0ZbIx7DVq5NwFzKdjEEyyd2wIHOwqIM4tba1tuUvL8gjGiB7hyE0c0JCgwvpa3I/Q== "@types/estree@1.0.5": version "1.0.5" @@ -1046,10 +1061,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/leaflet@^1.9.3": - version "1.9.8" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.8.tgz#32162a8eaf305c63267e99470b9603b5883e63e8" - integrity sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg== +"@types/leaflet@^1.9": + version "1.9.12" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.12.tgz#a6626a0b3fba36fd34723d6e95b22e8024781ad6" + integrity sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg== dependencies: "@types/geojson" "*" @@ -1058,18 +1073,6 @@ resolved "https://registry.yarnpkg.com/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz#89c3ad2156d5143e64bce86cfeb0045a983aeccc" integrity sha512-LisgKLlYQk19baQwjkBZZXdJL0KbeTpdEnrAfz5hQACbklCY0gVFnsKUyjfNWF1UQsCSjw93Sj5jSbiO8RPfdw== -"@types/lodash.memoize@^4.1.7": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/lodash.memoize/-/lodash.memoize-4.1.9.tgz#9f8912d39b6e450c0d342a2b74c99d331bf2016b" - integrity sha512-glY1nQuoqX4Ft8Uk+KfJudOD7DQbbEDF6k9XpGncaohW3RW4eSWBlx6AA0fZCrh40tZcQNH4jS/Oc59J6Eq+aw== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== - "@types/node@*": version "20.11.20" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" @@ -1088,17 +1091,24 @@ integrity sha512-6kN4KYjNF4sg79fSwZ46s4Pron4+YJxoW0DQOcHveUZc/3cWd8Q4B9OLlDmEYw9iI6fODU8kyyq8ZBy+8F/+zQ== "@types/prop-types@*", "@types/prop-types@^15.7.11": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@*", "@types/react-dom@^18": +"@types/react-dom@*": version "18.2.19" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== dependencies: "@types/react" "*" +"@types/react-dom@^18": + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== + dependencies: + "@types/react" "*" + "@types/react-select@^4.0.15": version "4.0.18" resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-4.0.18.tgz#f907f406411afa862217a9d86c54a301367a35c1" @@ -1116,7 +1126,7 @@ dependencies: "@types/react" "*" -"@types/react-virtualized-auto-sizer@^1.0.1": +"@types/react-virtualized-auto-sizer@^1.0": version "1.0.4" resolved "https://registry.yarnpkg.com/@types/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.4.tgz#42044ef75ac2d2667893a5943e54a9f037f985a3" integrity sha512-nhYwlFiYa8M3S+O2T9QO/e1FQUYMr/wJENUdf/O0dhRi1RS/93rjrYQFYdbUqtdFySuhrtnEDX29P6eKOttY+A== @@ -1139,19 +1149,13 @@ "@types/react" "*" "@types/react@*", "@types/react@^18": - version "18.2.58" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.58.tgz#22082d12898d11806f4a1aefb5583116a047493d" - integrity sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - "@types/semver@^7.5.8": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -1321,11 +1325,18 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" + +acorn@^8.0.4, acorn@^8.11.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== -acorn@^8.0.4, acorn@^8.9.0: +acorn@^8.9.0: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -1639,12 +1650,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001579: - version "1.0.30001589" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" - integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== - -caniuse-lite@^1.0.30001629: +caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001629: version "1.0.30001640" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz#32c467d4bf1f1a0faa63fc793c2ba81169e7652f" integrity sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA== @@ -1693,9 +1699,9 @@ clsx@^1.2.1: integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== clsx@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== color-convert@^1.9.0: version "1.9.3" @@ -2713,12 +2719,11 @@ get-tsconfig@^4.5.0: resolve-pkg-maps "^1.0.0" get-user-locale@^2.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-user-locale/-/get-user-locale-2.3.1.tgz#fc7319429c8a70fac01b3b2a0b08b0c71c1d3fe2" - integrity sha512-VEvcsqKYx7zhZYC1CjecrDC5ziPSpl1gSm0qFFJhHSGDrSC+x4+p1KojWC/83QX//j476gFhkVXP/kNUc9q+bQ== + version "2.3.2" + resolved "https://registry.yarnpkg.com/get-user-locale/-/get-user-locale-2.3.2.tgz#d37ae6e670c2b57d23a96fb4d91e04b2059d52cf" + integrity sha512-O2GWvQkhnbDoWFUJfaBlDIKUEdND8ATpBXD6KXcbhxlfktyD/d8w6mkzM/IlQEqGZAMz/PW6j6Hv53BiigKLUQ== dependencies: - "@types/lodash.memoize" "^4.1.7" - lodash.memoize "^4.1.1" + mem "^8.0.0" git-hooks-list@^3.0.0: version "3.1.0" @@ -2867,20 +2872,20 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - -hasown@^2.0.2: +hasown@^2.0.0, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + hdbscan@0.0.1-alpha.5: version "0.0.1-alpha.5" resolved "https://registry.yarnpkg.com/hdbscan/-/hdbscan-0.0.1-alpha.5.tgz#8b0cd45243fa60d2fe83e31f1e8bc939ff374c0d" @@ -2923,17 +2928,17 @@ html-parse-stringify@^3.0.1: dependencies: void-elements "3.1.0" -i18next-resources-to-backend@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/i18next-resources-to-backend/-/i18next-resources-to-backend-1.2.0.tgz#4e0ea0c093bf1acb3eb47972a3002b84a1fec3b2" - integrity sha512-8f1l03s+QxDmCfpSXCh9V+AFcxAwIp0UaroWuyOx+hmmv8484GcELHs+lnu54FrNij8cDBEXvEwhzZoXsKcVpg== +i18next-resources-to-backend@^1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/i18next-resources-to-backend/-/i18next-resources-to-backend-1.2.1.tgz#fded121e63e3139ce839c9901b9449dbbea7351d" + integrity sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw== dependencies: "@babel/runtime" "^7.23.2" -i18next@^23.10: - version "23.10.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.10.0.tgz#fb328794ae692e6fdde0564259e421f4203c4a2c" - integrity sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ== +i18next@^23.11: + version "23.11.5" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.5.tgz#d71eb717a7e65498d87d0594f2664237f9e361ef" + integrity sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA== dependencies: "@babel/runtime" "^7.23.2" @@ -3037,13 +3042,20 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: +is-core-module@^2.11.0, is-core-module@^2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" +is-core-module@^2.13.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" + integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== + dependencies: + hasown "^2.0.2" + is-data-view@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" @@ -3413,11 +3425,6 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.memoize@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -3454,6 +3461,21 @@ lru-cache@^6.0.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +mem@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" + integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.1.0" + "memoize-one@>=3.1.1 <6", memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -3489,6 +3511,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mimic-fn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + minimatch@9.0.3, minimatch@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -3544,9 +3571,9 @@ ml-array-rescale@^1.3.7: ml-array-min "^1.2.3" ml-matrix@^6.11: - version "6.11.0" - resolved "https://registry.yarnpkg.com/ml-matrix/-/ml-matrix-6.11.0.tgz#3cf2260ef04cbb8e0e0425e71d200f5cbcf82772" - integrity sha512-7jr9NmFRkaUxbKslfRu3aZOjJd2LkSitCGv+QH9PF0eJoEG7jIpjXra1Vw8/kgao8+kHCSsJONG6vfWmXQ+/Eg== + version "6.11.1" + resolved "https://registry.yarnpkg.com/ml-matrix/-/ml-matrix-6.11.1.tgz#fff3e1e7c3ad93dc996fec5d53d9dbc8e0e43473" + integrity sha512-Fvp1xF1O07tt6Ux9NcnEQTei5UlqbRpvvaFZGs7l3Ij+nOaEDcmbSVtxwNa8V4IfdyFI1NLNUteroMJ1S6vcEg== dependencies: is-any-array "^2.0.1" ml-array-rescale "^1.3.7" @@ -3576,28 +3603,28 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@^14.1: - version "14.1.0" - resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" - integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== +next@^14.2: + version "14.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.4.tgz#ef66c39c71e2d8ad0a3caa0383c8933f4663e4d1" + integrity sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ== dependencies: - "@next/env" "14.1.0" - "@swc/helpers" "0.5.2" + "@next/env" "14.2.4" + "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" graceful-fs "^4.2.11" postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.1.0" - "@next/swc-darwin-x64" "14.1.0" - "@next/swc-linux-arm64-gnu" "14.1.0" - "@next/swc-linux-arm64-musl" "14.1.0" - "@next/swc-linux-x64-gnu" "14.1.0" - "@next/swc-linux-x64-musl" "14.1.0" - "@next/swc-win32-arm64-msvc" "14.1.0" - "@next/swc-win32-ia32-msvc" "14.1.0" - "@next/swc-win32-x64-msvc" "14.1.0" + "@next/swc-darwin-arm64" "14.2.4" + "@next/swc-darwin-x64" "14.2.4" + "@next/swc-linux-arm64-gnu" "14.2.4" + "@next/swc-linux-arm64-musl" "14.2.4" + "@next/swc-linux-x64-gnu" "14.2.4" + "@next/swc-linux-x64-musl" "14.2.4" + "@next/swc-win32-arm64-msvc" "14.2.4" + "@next/swc-win32-ia32-msvc" "14.2.4" + "@next/swc-win32-x64-msvc" "14.2.4" node-fetch@^2.6.1: version "2.7.0" @@ -3715,7 +3742,7 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -otpauth@^9: +otpauth@9.2.4: version "9.2.4" resolved "https://registry.yarnpkg.com/otpauth/-/otpauth-9.2.4.tgz#3b7941a689f63c31db43ab2494d3c2d90bc1f150" integrity sha512-t0Nioq2Up2ZaT5AbpXZLTjrsNtLc/g/rVSaEThmKLErAuT9mrnAKJryiPOKc3rCH+3ycWBgKpRHYn+DHqfaPiQ== @@ -3727,6 +3754,11 @@ p-debounce@^4.0.0: resolved "https://registry.yarnpkg.com/p-debounce/-/p-debounce-4.0.0.tgz#348e3f44489baa9435cc7d807f17b3bb2fb16b24" integrity sha512-4Ispi9I9qYGO4lueiLDhe4q4iK5ERK8reLsuzH6BPaXn53EGaua8H66PXIFGrW897hwjXp+pVLrm/DLxN0RF0A== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -3929,12 +3961,12 @@ queue-microtask@^1.2.2: integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== react-dom@^18: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-dropzone@^14.2: version "14.2.3" @@ -3951,9 +3983,9 @@ react-fast-compare@^2.0.1: integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== react-i18next@^14: - version "14.0.5" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.0.5.tgz#5df7b88a3ac8afbef8089ed0d0c27e12b9a1acac" - integrity sha512-5+bQSeEtgJrMBABBL5lO7jPdSNAbeAZ+MlFWDw//7FnVacuVu3l9EeWFzBQvZsKy+cihkbThWOAThEdH8YjGEw== + version "14.1.2" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.2.tgz#cd57a755f25a32a5fcc3dbe546cf3cc62b4f3ebd" + integrity sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg== dependencies: "@babel/runtime" "^7.23.9" html-parse-stringify "^3.0.1" @@ -3971,9 +4003,9 @@ react-is@^16.13.1, react-is@^16.7.0: integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-otp-input@^2.3.1: version "2.4.0" @@ -4013,10 +4045,10 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react-virtualized-auto-sizer@^1.0.2: - version "1.0.23" - resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.23.tgz#ddb18f775a00f672577f1ec01306a94ca26161b8" - integrity sha512-5id3UTx+fG7b7SIOKL9/7aR1vP8+MtIT84cJCf09F6pYalB/nvHlx5EQvsSk27SwHUKjgPamG/nS8ynI0uSfKA== +react-virtualized-auto-sizer@^1.0: + version "1.0.24" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz#3ebdc92f4b05ad65693b3cc8e7d8dd54924c0227" + integrity sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg== react-window@^1.8.6: version "1.8.10" @@ -4027,9 +4059,9 @@ react-window@^1.8.6: memoize-one ">=3.1.1 <6" react@^18: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -4235,10 +4267,10 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -4366,12 +4398,7 @@ sort-package-json@2.10.0: semver "^7.6.0" sort-object-keys "^1.1.3" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-js@^1.2.0: +source-map-js@^1.0.2, source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== @@ -4692,11 +4719,16 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.4.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4969,9 +5001,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xml-js@^1.6.11: version "1.6.11" From aebe12bd9eec07d34671612e5166cbca5836283a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 5 Jul 2024 20:35:19 +0530 Subject: [PATCH 287/466] Fix --- web/apps/auth/src/services/remote.ts | 3 +-- web/packages/new/photos/services/ffmpeg/worker.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/web/apps/auth/src/services/remote.ts b/web/apps/auth/src/services/remote.ts index c1cf045615..28f3589b8e 100644 --- a/web/apps/auth/src/services/remote.ts +++ b/web/apps/auth/src/services/remote.ts @@ -41,8 +41,7 @@ export const getAuthCodes = async (): Promise => { } }), ); - // Remove undefined values - const filteredAuthCodes = authCodes.filter((f) => !!f); + const filteredAuthCodes = authCodes.filter((f) => f !== undefined); filteredAuthCodes.sort((a, b) => { if (a.issuer && b.issuer) { return a.issuer.localeCompare(b.issuer); diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index ef321c494d..e5c01c7e91 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -128,4 +128,4 @@ const substitutePlaceholders = ( return segment; } }) - .filter((s) => !!s); + .filter((s) => s !== undefined); From 75baee00c228b56b9007419e3f09bdfb853310bf Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 08:35:34 +0530 Subject: [PATCH 288/466] [mob][photos] Fix unexpected animation in lockscreen --- mobile/lib/ui/tools/lock_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 576d393f95..233bdb5087 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -115,7 +115,7 @@ class _LockScreenState extends State width: 75, child: TweenAnimationBuilder( tween: Tween( - begin: 0, + begin: isTimerRunning ? 0 : 1, end: isTimerRunning ? _getFractionOfTimeElapsed() : 1, From d72a561a9b2faec66e9290fb0bbad947e315f2fb Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 08:57:14 +0530 Subject: [PATCH 289/466] [mob][photos] Minor UI fix on lock screen password entry page --- .../ui/settings/lock_screen/lock_screen_confirm_password.dart | 2 +- mobile/lib/ui/settings/lock_screen/lock_screen_password.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart index 7e53ff5822..13f0442f7a 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_confirm_password.dart @@ -140,7 +140,7 @@ class _LockScreenConfirmPasswordState extends State { height: 75, width: 75, child: CircularProgressIndicator( - backgroundColor: colorTheme.fillFaintPressed, + color: colorTheme.fillFaintPressed, value: 1, strokeWidth: 1.5, ), diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index c8d36c40b6..bdce585a40 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -140,7 +140,7 @@ class _LockScreenPasswordState extends State { height: 75, width: 75, child: CircularProgressIndicator( - backgroundColor: colorTheme.fillFaintPressed, + color: colorTheme.fillFaintPressed, value: 1, strokeWidth: 1.5, ), From 99616b46a1bba51cf8b4b6b09e6d536c4da75611 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 09:26:45 +0530 Subject: [PATCH 290/466] [desktop] Upgrade eslint (within the 9x series) --- desktop/package.json | 4 +-- desktop/yarn.lock | 75 +++++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 7f8b7d666e..bbe85a2259 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -41,7 +41,7 @@ "onnxruntime-node": "^1.18" }, "devDependencies": { - "@eslint/js": "^9.4.0", + "@eslint/js": "^9", "@tsconfig/node20": "^20.1.4", "@types/auto-launch": "^5.0", "@types/eslint__js": "^8.42.3", @@ -50,7 +50,7 @@ "cross-env": "^7.0.3", "electron": "^30", "electron-builder": "25.0.0-alpha.8", - "eslint": "^9.4.0", + "eslint": "^9", "prettier": "^3", "prettier-plugin-organize-imports": "^3", "prettier-plugin-packagejson": "^2", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index cf13b48326..ec6dc2ae3c 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -117,19 +117,24 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/config-array@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.15.1.tgz#1fa78b422d98f4e7979f2211a1fde137e26c7d61" - integrity sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ== +"@eslint-community/regexpp@^4.6.1": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + +"@eslint/config-array@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.0.tgz#ff305e1ee618a00e6e5d0485454c8d92d94a860d" + integrity sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA== dependencies: - "@eslint/object-schema" "^2.1.3" + "@eslint/object-schema" "^2.1.4" debug "^4.3.1" - minimatch "^3.0.5" + minimatch "^3.1.2" "@eslint/eslintrc@^3.1.0": version "3.1.0" @@ -146,15 +151,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.4.0", "@eslint/js@^9.4.0": - version "9.4.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.4.0.tgz#96a2edd37ec0551ce5f9540705be23951c008a0c" - integrity sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg== +"@eslint/js@9.6.0", "@eslint/js@^9": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.6.0.tgz#5b0cb058cc13d9c92d4e561d3538807fa5127c95" + integrity sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A== -"@eslint/object-schema@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.3.tgz#e65ae80ee2927b4fd8c5c26b15ecacc2b2a6cc2a" - integrity sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw== +"@eslint/object-schema@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" + integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== "@gar/promisify@^1.1.3": version "1.1.3" @@ -485,10 +490,10 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.11.3: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.12.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -1102,14 +1107,14 @@ debounce-fn@^4.0.0: dependencies: mimic-fn "^3.0.0" -debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: +debug@4, debug@^4.3.3: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== @@ -1407,16 +1412,16 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.4.0.tgz#79150c3610ae606eb131f1d648d5f43b3d45f3cd" - integrity sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA== +eslint@^9: + version "9.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.6.0.tgz#9f54373afa15e1ba356656a8d96233182027fb49" + integrity sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/config-array" "^0.15.1" + "@eslint/config-array" "^0.17.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.4.0" + "@eslint/js" "9.6.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -1427,8 +1432,8 @@ eslint@^9.4.0: escape-string-regexp "^4.0.0" eslint-scope "^8.0.1" eslint-visitor-keys "^4.0.0" - espree "^10.0.1" - esquery "^1.4.2" + espree "^10.1.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^8.0.0" @@ -1447,16 +1452,16 @@ eslint@^9.4.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f" - integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww== +espree@^10.0.1, espree@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56" + integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== dependencies: - acorn "^8.11.3" + acorn "^8.12.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^4.0.0" -esquery@^1.4.2: +esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== From 27dab947828fb02117d83e35695751ecae0e93b3 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 09:37:49 +0530 Subject: [PATCH 291/466] [mob][photos] Immediately logout if too many attempts on lockscreen --- mobile/lib/ui/tools/lock_screen.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 233bdb5087..18c407bb32 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -196,14 +196,6 @@ class _LockScreenState extends State Future _autoLogoutOnMaxInvalidAttempts() async { _logger.info("Auto logout on max invalid attempts"); - await _lockscreenSetting.setInvalidAttemptCount(0); - await showErrorDialog( - context, - "Too many incorrect attempts", - "Please login again", - isDismissable: false, - ); - Navigator.of(context, rootNavigator: true).pop('dialog'); Navigator.of(context).popUntil((route) => route.isFirst); final dialog = createProgressDialog(context, S.of(context).loggingOut); await dialog.show(); From ac06f6789109b01d96d73254bdb74e975fcbc78f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 09:37:57 +0530 Subject: [PATCH 292/466] Update the typescript-eslint v8 alpha --- desktop/package.json | 2 +- desktop/yarn.lock | 126 ++++++++++++++++++++----------------------- 2 files changed, 59 insertions(+), 69 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index bbe85a2259..9085affe7d 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -56,7 +56,7 @@ "prettier-plugin-packagejson": "^2", "shx": "^0.3", "typescript": "^5", - "typescript-eslint": "8.0.0-alpha.10" + "typescript-eslint": "^8.0.0-alpha.39" }, "packageManager": "yarn@1.22.22", "productName": "ente" diff --git a/desktop/yarn.lock b/desktop/yarn.lock index ec6dc2ae3c..7d9ef55d47 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -328,7 +328,7 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/json-schema@*", "@types/json-schema@^7.0.15": +"@types/json-schema@*": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -372,11 +372,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/verror@^1.10.3": version "1.10.10" resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" @@ -389,64 +384,62 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.10.tgz#a102e40da7b72a2981cb2da43064d9b3c865ca58" - integrity sha512-jsNKqn41nIS8jz5Li5xsueGEBBmRYLaflUKlclEkj8cWrO1tMK1/7xITeiVz7ZlNFZF2nop2NlXrbLtRpLEzhg== +"@typescript-eslint/eslint-plugin@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.39.tgz#1cfd6fe38752ed56d37170d307c48a34c15f65de" + integrity sha512-ILv1vDA8M9ah1vzYpnOs4UOLRdB63Ki/rsxedVikjMLq68hFfpsDR25bdMZ4RyUkzLJwOhcg3Jujm/C1nupXKA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.0.0-alpha.10" - "@typescript-eslint/type-utils" "8.0.0-alpha.10" - "@typescript-eslint/utils" "8.0.0-alpha.10" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.10" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.0.0-alpha.39" + "@typescript-eslint/type-utils" "8.0.0-alpha.39" + "@typescript-eslint/utils" "8.0.0-alpha.39" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.10.tgz#fbefd39da010d65407b985f2b5c6e0a79bc8a6f4" - integrity sha512-4EerPviLfBKgExHARehJgWrCtX2a7+PXBc0LBPlH93ypSgj0LU1ejMgjrB0gcfd6bJ7LN/UGNAAy3B7/Y785sA== +"@typescript-eslint/parser@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.39.tgz#33fbd1e3767b4477def582ce597b6cd09bb5ef11" + integrity sha512-5k+pwV91plJojHgZkWlq4/TQdOrnEaeSvt48V0m8iEwdMJqX/63BXYxy8BUOSghWcjp05s73vy9HJjovAKmHkQ== dependencies: - "@typescript-eslint/scope-manager" "8.0.0-alpha.10" - "@typescript-eslint/types" "8.0.0-alpha.10" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.10" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.10" + "@typescript-eslint/scope-manager" "8.0.0-alpha.39" + "@typescript-eslint/types" "8.0.0-alpha.39" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.10.tgz#25506ce51ab64e99f2bc0b7d3f0f82656e14a794" - integrity sha512-SUU0yhqehjuWilWRJWfhcxf6eMKVrZ3bpV2w6NF6GmBHR3FJo6oWZYLVXP04s6//INxpC2ynvKSglo4LRzWVTw== +"@typescript-eslint/scope-manager@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.39.tgz#1778198dcf95175b76631f7ffd84917bf925a1a9" + integrity sha512-HCBlKQROY+JIgWolucdFMj1W3VUnnIQTdxAhxJTAj3ix2nASmvKIFgrdo5KQMrXxQj6tC4l3zva10L+s0dUIIw== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.10" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.10" + "@typescript-eslint/types" "8.0.0-alpha.39" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" -"@typescript-eslint/type-utils@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.10.tgz#d27f0fdd81450380887b3a07297440ba3588a70e" - integrity sha512-6aTcbnDZWKgKr3gquECJSFyvXWLSKtUHrk2ZXDP4DEzmzTDjrkY7tIQpqv4SczPQJ+3/aky3ArPhtnQYJbAMzg== +"@typescript-eslint/type-utils@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.39.tgz#48bcc5dc978173e02c44d7137d16edb97042c02d" + integrity sha512-alO13fRU6yVeJbwl9ESI3AYhq5dQdz3Dpd0I5B4uezs2lvgYp44dZsj5hWyPz/kL7JFEsjbn+4b/CZA0OQJzjA== dependencies: - "@typescript-eslint/typescript-estree" "8.0.0-alpha.10" - "@typescript-eslint/utils" "8.0.0-alpha.10" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" + "@typescript-eslint/utils" "8.0.0-alpha.39" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.10.tgz#89be400c6a1751fe86f5917ed8087ec100e002da" - integrity sha512-prbN+b/I4yH6H43WmyenMz8K5e34Hs73BQuWXR4wwij3Cg2xNGLPcpjr2cKWKlH4dZQPTz6R6oBeC+LfaoKi8g== +"@typescript-eslint/types@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.39.tgz#e0f7618c17f03fc23803269807c77ce1bac276f2" + integrity sha512-yINN7j0/+S1VGSp0IgH52oQvUx49vkOug6xbrDA/9o+U55yCAQKSvYWvzYjNa+SZE3hXI0zwvYtMVsIAAMmKIQ== -"@typescript-eslint/typescript-estree@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.10.tgz#e850056d2a5029688269a60206dec3bbd7beb953" - integrity sha512-8wBUIhu6IRa440hv5/0ZEnb5JLp/UsfzIXYKRwICUOMTVj2ss1n+w3m1CtT5ghVWy5Z05qkscsbhlKFmZguU8w== +"@typescript-eslint/typescript-estree@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.39.tgz#460b2303e3c919cb3baf4ff5a13b6fb148da70b3" + integrity sha512-S8gREuP8r8PCxGegeojeXntx0P50ul9YH7c7JYpbLIIsEPNr5f7UHlm+I1NUbL04CBin4kvZ60TG4eWr/KKN9A== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.10" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.10" + "@typescript-eslint/types" "8.0.0-alpha.39" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -454,25 +447,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.10.tgz#b77f743227353bfa493e95409c0e079044c9258e" - integrity sha512-WZyNf49CuvaW/whz/B8XjYwXE/wm/EQAXq+Vqgp6BrJb8SC3bMCwGuUxReNDN1o+dNdOC96ofVSvqa8NUQ65Jg== +"@typescript-eslint/utils@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.39.tgz#fb27dc504d7fe47fd7e1162b5012e4ce883b40b9" + integrity sha512-Nr2PrlfNhrNQTlFHlD7XJdTGw/Vt8qY44irk6bfjn9LxGdSG5e4c1R2UN6kvGMhhx20DBPbM7q3Z3r+huzmL1w== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "8.0.0-alpha.10" - "@typescript-eslint/types" "8.0.0-alpha.10" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.10" - semver "^7.6.0" + "@typescript-eslint/scope-manager" "8.0.0-alpha.39" + "@typescript-eslint/types" "8.0.0-alpha.39" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" -"@typescript-eslint/visitor-keys@8.0.0-alpha.10": - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.10.tgz#d0a9250c69cc2f73c7f423c36183d222a329e260" - integrity sha512-UohTNnT7S29uQgXsGZY489nWmoBBSJucNdRvog62R1QX9pQQb2pKVV1kHepUxoY2vd+M4tb9SQwZQ3gPNgqQ6w== +"@typescript-eslint/visitor-keys@8.0.0-alpha.39": + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.39.tgz#8bf3938fddad4a00eb354880880237abfb55bda5" + integrity sha512-DVJ0UdhucZy+/1GlIy7FX2+CFhCeNAi4VwaEAe7u2UDenQr9/kGqvzx00UlpWibmEVDw4KsPOI7Aqa1+2Vqfmw== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.10" + "@typescript-eslint/types" "8.0.0-alpha.39" eslint-visitor-keys "^3.4.3" "@xmldom/xmldom@^0.8.8": @@ -3351,14 +3341,14 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@8.0.0-alpha.10: - version "8.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.10.tgz#2172d41ab30c8447927c3823c5a549b9c09be89f" - integrity sha512-iMbN7boDtUmcSDor/J022+H4G018W3r3RSUUr7yoghMTmFuKVIkI89xJHDg82DBGYkA0xOoDNPBr7XfRFbEXKQ== +typescript-eslint@^8.0.0-alpha.39: + version "8.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.39.tgz#6b5eac89a47b2f6fed449cf45502d2c5e4909745" + integrity sha512-bsuR1BVJfHr7sBh7Cca962VPIcP+5UWaIa/+6PpnFZ+qtASjGTxKWIF5dG2o73BX9NsyqQfvRWujb3M9CIoRXA== dependencies: - "@typescript-eslint/eslint-plugin" "8.0.0-alpha.10" - "@typescript-eslint/parser" "8.0.0-alpha.10" - "@typescript-eslint/utils" "8.0.0-alpha.10" + "@typescript-eslint/eslint-plugin" "8.0.0-alpha.39" + "@typescript-eslint/parser" "8.0.0-alpha.39" + "@typescript-eslint/utils" "8.0.0-alpha.39" typescript@^5: version "5.5.3" From 4427352f51be9023796519c53cdae7b1bc61c733 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 09:44:38 +0530 Subject: [PATCH 293/466] Handle update --- desktop/eslint.config.mjs | 7 +++++++ desktop/src/main.ts | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/desktop/eslint.config.mjs b/desktop/eslint.config.mjs index 46e94d010d..889b60c3e5 100644 --- a/desktop/eslint.config.mjs +++ b/desktop/eslint.config.mjs @@ -38,6 +38,13 @@ export default ts.config( ignoreArrowShorthand: true, }, ], + // Allow free standing ternary expressions. + "@typescript-eslint/no-unused-expressions": [ + "error", + { + allowTernary: true, + }, + ], }, }, ); diff --git a/desktop/src/main.ts b/desktop/src/main.ts index bc5839370a..be5721ed0e 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -295,9 +295,8 @@ const createMainWindow = () => { // On macOS, also hide the dock icon on macOS. if (process.platform == "darwin") app.dock.hide(); } else { - // Show our window otherwise. - // - // If we did not give it an explicit size, maximize it + // Show our window otherwise, maximizing it if we're not asked to set it + // to a specific size. bounds ? window.show() : window.maximize(); } From 4019afdd901138f23038b43a5352bdfc41ebc0b2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 10:23:33 +0530 Subject: [PATCH 294/466] [desktop] Consider HTTP 4xx errors when PUT-ing embeddings as perm failures Ref: - https://github.com/ente-io/ente/pull/2369 - https://github.com/ente-io/ente/pull/2368 --- web/packages/new/photos/services/ml/worker.ts | 35 +++++++++++++++++-- web/packages/next/http.ts | 10 ++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index c7773b6ead..2377e17aa5 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -1,6 +1,7 @@ import type { EnteFile } from "@/new/photos/types/file"; import { fileLogID } from "@/new/photos/utils/file"; import { clientPackageName } from "@/next/app"; +import { isHTTP4xxError } from "@/next/http"; import { getKVN } from "@/next/kv"; import { ensureAuthToken } from "@/next/local-user"; import log from "@/next/log"; @@ -329,19 +330,47 @@ export const index = async ( try { faceIndex = await indexFaces(enteFile, uploadItem, electron, userAgent); } catch (e) { - // Mark indexing as having failed only if the indexing itself - // failed, not if there were subsequent failures (like when trying - // to put the result to remote or save it to the local face DB). log.error(`Failed to index faces in ${f}`, e); await markIndexingFailed(enteFile.id); throw e; } + // [Note: Transient and permanent indexing failures] + // + // Generally speaking, we mark indexing for a file as having failed only if + // the indexing itself failed, not if there were subsequent failures (like + // when trying to put the result to remote or save it to the local face DB). + // + // When we mark it as failed, then a flag is persisted corresponding to this + // file in the ML DB so that it won't get reindexed in future runs. This are + // thus considered as permanent failures. + // + // > We might retry in future versions if we identify reasons for indexing + // > to fail (it shouldn't) and rectify them. + // + // On the other hand, saving the face index to remote might fail for + // transient issues (network issues, or remote having hiccups). We don't + // mark a file as failed permanently in such cases, so that it gets retried + // at some point. These are considered as transient failures. + // + // However, this opens the possibility of some non-transient failure getting + // classified as a transient failure and causing the client to try and index + // the same file again and again, when in fact there is a issue specific to + // that file which is preventing the index from being saved. What exactly? + // We don't know, but the possibility exists. + // + // To reduce the chances of this happening, we treat HTTP 4xx responses as + // permanent failures too - there are no known cases where a client retrying + // a 4xx response would work, and there are known (but rare) cases where a + // client might get a 4xx (e.g. if the file has over ~700 faces, then remote + // will return a 413 Request Entity Too Large). + try { await putFaceIndex(enteFile, faceIndex); await saveFaceIndex(faceIndex); } catch (e) { log.error(`Failed to put/save face index for ${f}`, e); + if (isHTTP4xxError(e)) await markIndexingFailed(enteFile.id); throw e; } diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 8ad2674298..4cfb5cfdff 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -39,3 +39,13 @@ export class HTTPError extends Error { this.res = res; } } + +/** + * Return true if this is a HTTP "client" error. + * + * This is a convenience matcher to check if {@link e} is an instance of + * {@link HTTPError} with a 4xx status code. Such errors are client errors, and + * (generally) retrying them will not help. + */ +export const isHTTP4xxError = (e: unknown) => + e instanceof HTTPError && e.res.status >= 400 && e.res.status <= 499; From b03b9fd314d23a7bac63a7ec5704f95dc61c90a5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 11:02:10 +0530 Subject: [PATCH 295/466] Let the liveQ be processed --- web/packages/new/photos/services/ml/worker.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 2377e17aa5..0cfcd9759a 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -154,18 +154,26 @@ export class MLWorker { // If we've been asked to sync, do that irrespective of anything else. if (this.shouldPull) { + // Allow this flag to be reset while we're busy pulling (triggering + // another pull when we tick next). this.shouldPull = false; this.state = "pull"; - void pull().then((didPull) => { + try { + const didPull = await pull(); // Mark that we completed once attempt at pulling successfully // (irrespective of whether or not that got us some data). this.havePulledAtLeastOnce = true; // Reset the idle duration if we did pull something. if (didPull) this.idleDuration = idleDurationStart; - // Either ways, tick again. - scheduleTick(); - }); - // Return without waiting for the pull. + } catch (e) { + log.error("Failed to pull face embeddings", e); + } + // Tick again, even if we got an error. + // + // While the backfillQ won't be processed until at least a pull has + // happened once (`havePulledAtLeastOnce`), the liveQ can still be + // processed since these are new files without remote embeddings. + scheduleTick(); return; } From cdba99a7c250fd7c70ed3d0c0d6b57a092ff1f1b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 13:23:55 +0530 Subject: [PATCH 296/466] Use elsewhere --- web/packages/new/photos/services/ml/embedding.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 16d1cf06fb..c04a2e0e8e 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -243,7 +243,7 @@ const getEmbeddingsDiff = async ( const res = await fetch(`${url}?${params.toString()}`, { headers: await authenticatedRequestHeaders(), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + if (!res.ok) throw new HTTPError(url, res); return z.object({ diff: z.array(RemoteEmbedding) }).parse(await res.json()) .diff; From a99a179ef9df56b4c18e999f0cd04e79ab51fe7b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 13:40:00 +0530 Subject: [PATCH 297/466] Nicer error logs on desktop --- web/packages/next/log.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web/packages/next/log.ts b/web/packages/next/log.ts index e69d22b07e..1e86f7f17f 100644 --- a/web/packages/next/log.ts +++ b/web/packages/next/log.ts @@ -47,7 +47,16 @@ const messageWithError = (message: string, e?: unknown) => { if (e instanceof Error) { // In practice, we expect ourselves to be called with Error objects, so // this is the happy path so to say. - es = [`${e.name}: ${e.message}`, e.stack].filter((x) => x).join("\n"); + es = `${e.name}: ${e.message}`; + const st = e.stack; + if (st) { + // On V8 (as of 2024), the stack trace begins by repeating the error's + // name and message, trim that off. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack + es = st.startsWith(es) + ? es.concat(st.slice(es.length)) /* retain the '\n' */ + : [es, st].join("\n"); + } } else { // For the rest rare cases, use the default string serialization of e. es = String(e); From 53a8de9ac4320fd5d199fac60c1a177f713ff8f3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:00:50 +0530 Subject: [PATCH 298/466] Shorten --- web/packages/new/photos/services/ml/embedding.ts | 10 ++++------ web/packages/next/http.ts | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index c04a2e0e8e..f4c290893c 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -7,7 +7,7 @@ import { getLocalTrashedFiles, } from "@/new/photos/services/files"; import type { EnteFile } from "@/new/photos/types/file"; -import { HTTPError, authenticatedRequestHeaders } from "@/next/http"; +import { authenticatedRequestHeaders, ensure2xx } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; @@ -243,8 +243,7 @@ const getEmbeddingsDiff = async ( const res = await fetch(`${url}?${params.toString()}`, { headers: await authenticatedRequestHeaders(), }); - if (!res.ok) throw new HTTPError(url, res); - + ensure2xx(res); return z.object({ diff: z.array(RemoteEmbedding) }).parse(await res.json()) .diff; }; @@ -272,8 +271,7 @@ export const putEmbedding = async ( const { encryptedMetadataB64, decryptionHeaderB64 } = await encryptFileMetadata(embedding, enteFile.key); - const url = await apiURL("/embeddings"); - const res = await fetch(url, { + const res = await fetch(await apiURL("/embeddings"), { method: "PUT", headers: await authenticatedRequestHeaders(), body: JSON.stringify({ @@ -283,7 +281,7 @@ export const putEmbedding = async ( model, }), }); - if (!res.ok) throw new HTTPError(url, res); + ensure2xx(res); }; // MARK: - Face diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 4cfb5cfdff..65917e8d90 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -27,8 +27,10 @@ export const clientPackageHeader = () => ({ export class HTTPError extends Error { res: Response; - constructor(url: string, res: Response) { - super(`Failed to fetch ${url}: HTTP ${res.status}`); + constructor(res: Response) { + // Nb: res.url is URL obtained after any redirects, and thus is not + // necessarily the same as the request's URL. + super(`Fetch failed: ${res.url}: HTTP ${res.status} ${res.statusText}`); // Cargo culted from // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types @@ -40,6 +42,14 @@ export class HTTPError extends Error { } } +/** + * A convenience method that throws an {@link HTTPError} if the given + * {@link Response} does not have a HTTP 2xx status. + */ +export const ensure2xx = (res: Response) => { + if (!res.ok) throw new HTTPError(res); +}; + /** * Return true if this is a HTTP "client" error. * From 8fc897ad16dbf9b87828ac4e35fd0cb9c55a68d8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:02:32 +0530 Subject: [PATCH 299/466] Ok --- web/packages/new/photos/services/ml/embedding.ts | 6 +++--- web/packages/next/http.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index f4c290893c..ce82780ee2 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -7,7 +7,7 @@ import { getLocalTrashedFiles, } from "@/new/photos/services/files"; import type { EnteFile } from "@/new/photos/types/file"; -import { authenticatedRequestHeaders, ensure2xx } from "@/next/http"; +import { authenticatedRequestHeaders, ensureOk } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; @@ -243,7 +243,7 @@ const getEmbeddingsDiff = async ( const res = await fetch(`${url}?${params.toString()}`, { headers: await authenticatedRequestHeaders(), }); - ensure2xx(res); + ensureOk(res); return z.object({ diff: z.array(RemoteEmbedding) }).parse(await res.json()) .diff; }; @@ -281,7 +281,7 @@ export const putEmbedding = async ( model, }), }); - ensure2xx(res); + ensureOk(res); }; // MARK: - Face diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 65917e8d90..0eacdaad77 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -46,7 +46,7 @@ export class HTTPError extends Error { * A convenience method that throws an {@link HTTPError} if the given * {@link Response} does not have a HTTP 2xx status. */ -export const ensure2xx = (res: Response) => { +export const ensureOk = (res: Response) => { if (!res.ok) throw new HTTPError(res); }; From 26d8ecda08aa3808a3648bb33d47264730a05fdd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:07:49 +0530 Subject: [PATCH 300/466] tokens --- web/packages/next/http.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/packages/next/http.ts b/web/packages/next/http.ts index 0eacdaad77..dde5906aef 100644 --- a/web/packages/next/http.ts +++ b/web/packages/next/http.ts @@ -28,9 +28,16 @@ export class HTTPError extends Error { res: Response; constructor(res: Response) { + // Trim off any query parameters from the URL before logging, it may + // have tokens. + // // Nb: res.url is URL obtained after any redirects, and thus is not // necessarily the same as the request's URL. - super(`Fetch failed: ${res.url}: HTTP ${res.status} ${res.statusText}`); + const url = new URL(res.url); + url.search = ""; + super( + `Fetch failed: ${url.href}: HTTP ${res.status} ${res.statusText}`, + ); // Cargo culted from // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types From 933212ba5931ecd5f14071107906da85b61692c7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:11:13 +0530 Subject: [PATCH 301/466] Use elsewhere --- web/apps/accounts/src/services/passkey.ts | 25 ++++++++----------- web/packages/accounts/services/passkey.ts | 4 +-- web/packages/accounts/services/session.ts | 9 +++---- .../new/photos/components/DevSettings.tsx | 6 ++--- .../new/photos/services/feature-flags.ts | 7 +++--- 5 files changed, 23 insertions(+), 28 deletions(-) diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index ce25d05ed3..469881e5c6 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -1,6 +1,6 @@ import { clientPackageName } from "@/next/app"; import { isDevBuild } from "@/next/env"; -import { clientPackageHeader } from "@/next/http"; +import { clientPackageHeader, ensureOk, HTTPError } from "@/next/http"; import { apiURL } from "@/next/origins"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; import { ensure } from "@/utils/ensure"; @@ -57,11 +57,10 @@ const GetPasskeysResponse = z.object({ * has no passkeys. */ export const getPasskeys = async (token: string) => { - const url = await apiURL("/passkeys"); - const res = await fetch(url, { + const res = await fetch(await apiURL("/passkeys"), { headers: accountsAuthenticatedRequestHeaders(token), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); const { passkeys } = GetPasskeysResponse.parse(await res.json()); return passkeys ?? []; }; @@ -86,7 +85,7 @@ export const renamePasskey = async ( method: "PATCH", headers: accountsAuthenticatedRequestHeaders(token), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); }; /** @@ -97,12 +96,11 @@ export const renamePasskey = async ( * @param id The `id` of the existing passkey to delete. */ export const deletePasskey = async (token: string, id: string) => { - const url = await apiURL(`/passkeys/${id}`); - const res = await fetch(url, { + const res = await fetch(await apiURL(`/passkeys/${id}`), { method: "DELETE", headers: accountsAuthenticatedRequestHeaders(token), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); }; /** @@ -148,12 +146,11 @@ interface BeginPasskeyRegistrationResponse { } const beginPasskeyRegistration = async (token: string) => { - const url = await apiURL("/passkeys/registration/begin"); - const res = await fetch(url, { + const res = await fetch(await apiURL("/passkeys/registration/begin"), { method: "POST", headers: accountsAuthenticatedRequestHeaders(token), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); // [Note: Converting binary data in WebAuthn API payloads] // @@ -310,7 +307,7 @@ const finishPasskeyRegistration = async ({ }, }), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); }; /** @@ -422,7 +419,7 @@ export const beginPasskeyAuthentication = async ( if (!res.ok) { if (res.status == 409) throw new Error(passkeySessionAlreadyClaimedErrorMessage); - throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + throw new HTTPError(res); } // See: [Note: Converting binary data in WebAuthn API payloads] @@ -527,7 +524,7 @@ export const finishPasskeyAuthentication = async ({ }, }), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); return TwoFactorAuthorizationResponse.parse(await res.json()); }; diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index c8414b7646..a8cab36648 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -1,5 +1,5 @@ import { clientPackageName, isDesktop } from "@/next/app"; -import { clientPackageHeader } from "@/next/http"; +import { clientPackageHeader, HTTPError } from "@/next/http"; import log from "@/next/log"; import { accountsAppOrigin, apiURL } from "@/next/origins"; import { TwoFactorAuthorizationResponse } from "@/next/types/credentials"; @@ -240,7 +240,7 @@ export const checkPasskeyVerificationStatus = async ( if (res.status == 404 || res.status == 410) throw new Error(passkeySessionExpiredErrorMessage); if (res.status == 400) return undefined; /* verification pending */ - throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + throw new HTTPError(res); } return TwoFactorAuthorizationResponse.parse(await res.json()); }; diff --git a/web/packages/accounts/services/session.ts b/web/packages/accounts/services/session.ts index 386e1290b9..019940e807 100644 --- a/web/packages/accounts/services/session.ts +++ b/web/packages/accounts/services/session.ts @@ -1,8 +1,8 @@ -import { authenticatedRequestHeaders } from "@/next/http"; +import { authenticatedRequestHeaders, HTTPError } from "@/next/http"; import { ensureLocalUser } from "@/next/local-user"; import { apiURL } from "@/next/origins"; import { ensure } from "@/utils/ensure"; -import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; import type { KeyAttributes } from "@ente/shared/user/types"; import { getSRPAttributes } from "../api/srp"; import type { SRPAttributes } from "../types/srp"; @@ -62,14 +62,13 @@ type SessionValidity = * subsequently. */ export const checkSessionValidity = async (): Promise => { - const url = await apiURL("/users/session-validity/v2"); - const res = await fetch(url, { + const res = await fetch(await apiURL("/users/session-validity/v2"), { headers: await authenticatedRequestHeaders(), }); if (!res.ok) { if (res.status == 401) return { status: "invalid" }; /* session is no longer valid */ - else throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + else throw new HTTPError(res); } // See if the response contains keyAttributes (they might not for older diff --git a/web/packages/new/photos/components/DevSettings.tsx b/web/packages/new/photos/components/DevSettings.tsx index 62408f4d81..84c71b09c5 100644 --- a/web/packages/new/photos/components/DevSettings.tsx +++ b/web/packages/new/photos/components/DevSettings.tsx @@ -1,3 +1,4 @@ +import { ensureOk } from "@/next/http"; import { getKV, removeKV, setKV } from "@/next/kv"; import log from "@/next/log"; import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined"; @@ -220,9 +221,8 @@ const updateAPIOrigin = async (origin: string) => { return; } - const url = `${origin}/ping`; - const res = await fetch(url); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + const res = await fetch(`${origin}/ping`); + ensureOk(res); try { PingResponse.parse(await res.json()); } catch (e) { diff --git a/web/packages/new/photos/services/feature-flags.ts b/web/packages/new/photos/services/feature-flags.ts index b5d75936db..f13e29333a 100644 --- a/web/packages/new/photos/services/feature-flags.ts +++ b/web/packages/new/photos/services/feature-flags.ts @@ -1,5 +1,5 @@ import { isDevBuild } from "@/next/env"; -import { authenticatedRequestHeaders } from "@/next/http"; +import { authenticatedRequestHeaders, ensureOk } from "@/next/http"; import { localUser } from "@/next/local-user"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; @@ -65,11 +65,10 @@ const fetchAndSaveFeatureFlags = () => .then(saveFlagJSONString); const fetchFeatureFlags = async () => { - const url = await apiURL("/remote-store/feature-flags"); - const res = await fetch(url, { + const res = await fetch(await apiURL("/remote-store/feature-flags"), { headers: await authenticatedRequestHeaders(), }); - if (!res.ok) throw new Error(`Failed to fetch ${url}: HTTP ${res.status}`); + ensureOk(res); return res; }; From 1a06fce8f2100daebffe6b374b3399b3f98b78ac Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:21:37 +0530 Subject: [PATCH 302/466] lf --- web/packages/accounts/services/passkey.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/accounts/services/passkey.ts b/web/packages/accounts/services/passkey.ts index a8cab36648..d7f3622dfb 100644 --- a/web/packages/accounts/services/passkey.ts +++ b/web/packages/accounts/services/passkey.ts @@ -14,8 +14,8 @@ import { CustomError } from "@ente/shared/error"; import HTTPService from "@ente/shared/network/HTTPService"; import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; import { - LS_KEYS, getData, + LS_KEYS, setData, setLSUser, } from "@ente/shared/storage/localStorage"; From e468ecc98c5c2e51ef5e390562db7d045e876525 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 14:39:46 +0530 Subject: [PATCH 303/466] [web] Fix duplication emotion instances Something's wrong with yarn's resolution algorithm, but let's leave that be until we migrate off classic. 11.11.4 doesn't have anything we need, so use 11.11.3 that seems to not result in dupes. The warning was gallery.js:16547 You are loading @emotion/react when it is already loaded. Running multiple instances may cause problems. This can happen if multiple versions are used, or if multiple builds of the same version are used. Ref: - https://github.com/ente-io/ente/pull/2372 --- web/packages/next/package.json | 4 ++-- web/yarn.lock | 18 ++---------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/web/packages/next/package.json b/web/packages/next/package.json index 0dfc31b743..0f0d8e5343 100644 --- a/web/packages/next/package.json +++ b/web/packages/next/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "private": true, "dependencies": { - "@emotion/react": "^11.11", - "@emotion/styled": "^11.11", + "@emotion/react": "11.11.3", + "@emotion/styled": "^11.11.5", "@mui/icons-material": "^5.16", "@mui/material": "^5.16", "comlink": "^4.4", diff --git a/web/yarn.lock b/web/yarn.lock index 52e1beb7e5..69100b9284 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -321,7 +321,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.1.1": +"@emotion/react@11.11.3", "@emotion/react@^11.1.1": version "11.11.3" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== @@ -335,20 +335,6 @@ "@emotion/weak-memoize" "^0.3.1" hoist-non-react-statics "^3.3.1" -"@emotion/react@^11.11": - version "11.11.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - "@emotion/serialize@^1.0.0": version "1.1.3" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" @@ -376,7 +362,7 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== -"@emotion/styled@^11.11": +"@emotion/styled@^11.11.5": version "11.11.5" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== From e807712cdc2ede5e2bd7f4917cf1e2ad82840a21 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Sat, 6 Jul 2024 14:44:45 +0530 Subject: [PATCH 304/466] [mob][photos] Added button to logout from Lockscreen --- mobile/lib/ui/tools/lock_screen.dart | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mobile/lib/ui/tools/lock_screen.dart b/mobile/lib/ui/tools/lock_screen.dart index 18c407bb32..15f9d0250b 100644 --- a/mobile/lib/ui/tools/lock_screen.dart +++ b/mobile/lib/ui/tools/lock_screen.dart @@ -9,6 +9,7 @@ import 'package:logging/logging.dart'; import "package:photos/core/configuration.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; +import "package:photos/services/user_service.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; import 'package:photos/ui/tools/app_lock.dart'; @@ -60,6 +61,16 @@ class _LockScreenState extends State final colorTheme = getEnteColorScheme(context); final textTheme = getEnteTextTheme(context); return Scaffold( + appBar: AppBar( + elevation: 0, + leading: IconButton( + icon: const Icon(Icons.logout_outlined), + color: Theme.of(context).iconTheme.color, + onPressed: () { + _onLogoutTapped(context); + }, + ), + ), body: GestureDetector( onTap: () { isTimerRunning ? null : _showLockScreen(source: "tap"); @@ -194,6 +205,18 @@ class _LockScreenState extends State return shortestSide > 600 ? true : false; } + void _onLogoutTapped(BuildContext context) { + showChoiceActionSheet( + context, + title: S.of(context).areYouSureYouWantToLogout, + firstButtonLabel: S.of(context).yesLogout, + isCritical: true, + firstButtonOnTap: () async { + await UserService.instance.logout(context); + }, + ); + } + Future _autoLogoutOnMaxInvalidAttempts() async { _logger.info("Auto logout on max invalid attempts"); Navigator.of(context).popUntil((route) => route.isFirst); From e2f2921d78dba82c1d2986e980b53c8fe7319c46 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 15:05:30 +0530 Subject: [PATCH 305/466] bump up to v 0.9.5 --- mobile/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index a81bb6f630..8cae749d59 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,7 +12,7 @@ description: ente photos application # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.9.4+904 +version: 0.9.5+905 publish_to: none environment: From 5b762255427abe94087094c11caaaba1e290349a Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 15:16:20 +0530 Subject: [PATCH 306/466] [mob][photos] Remove feature flag on select all feature --- .../actions/file_selection_overlay_bar.dart | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart b/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart index 86d162e316..9ba5adf3fb 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_overlay_bar.dart @@ -3,7 +3,6 @@ import "package:photos/face/model/person.dart"; import 'package:photos/models/collection/collection.dart'; import 'package:photos/models/gallery_type.dart'; import 'package:photos/models/selected_files.dart'; -import "package:photos/service_locator.dart"; import "package:photos/theme/effects.dart"; import "package:photos/theme/ente_theme.dart"; import 'package:photos/ui/components/bottom_action_bar/bottom_action_bar_widget.dart'; @@ -86,15 +85,13 @@ class _FileSelectionOverlayBarState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: [ - flagService.internalUser - ? Padding( - padding: const EdgeInsets.only(right: 4), - child: SelectAllButton( - backgroundColor: widget.backgroundColor, - ), - ) - : const SizedBox.shrink(), - if (flagService.internalUser) const SizedBox(height: 8), + Padding( + padding: const EdgeInsets.only(right: 4), + child: SelectAllButton( + backgroundColor: widget.backgroundColor, + ), + ), + const SizedBox(height: 8), Container( decoration: BoxDecoration( boxShadow: shadowFloatFaintLight, From a279c442b85628c612bc05640322ba0af854016b Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 15:48:33 +0530 Subject: [PATCH 307/466] [mob][photos] Update change log and change log version --- mobile/lib/services/update_service.dart | 2 +- .../notification/update/change_log_page.dart | 21 ++++++------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/mobile/lib/services/update_service.dart b/mobile/lib/services/update_service.dart index 3568c873de..54e685347f 100644 --- a/mobile/lib/services/update_service.dart +++ b/mobile/lib/services/update_service.dart @@ -16,7 +16,7 @@ class UpdateService { static final UpdateService instance = UpdateService._privateConstructor(); static const kUpdateAvailableShownTimeKey = "update_available_shown_time_key"; static const changeLogVersionKey = "update_change_log_key"; - static const currentChangeLogVersion = 20; + static const currentChangeLogVersion = 21; LatestVersionInfo? _latestVersion; final _logger = Logger("UpdateService"); diff --git a/mobile/lib/ui/notification/update/change_log_page.dart b/mobile/lib/ui/notification/update/change_log_page.dart index d301cacb03..2f9254af69 100644 --- a/mobile/lib/ui/notification/update/change_log_page.dart +++ b/mobile/lib/ui/notification/update/change_log_page.dart @@ -18,11 +18,6 @@ class ChangeLogPage extends StatefulWidget { } class _ChangeLogPageState extends State { - @override - void initState() { - super.initState(); - } - @override Widget build(BuildContext context) { final enteColorScheme = getEnteColorScheme(context); @@ -119,20 +114,16 @@ class _ChangeLogPageState extends State { final List items = []; items.addAll([ ChangeLogEntry( - "Send links ✨", - 'Introducing a beautiful way to share photos in original quality, end-to-end encrypted. Select your photos and click on "Send link" to see the magic!', - ), - ChangeLogEntry( - "Video editor", - "Crop, clip and flip your videos, with Ente's in-built video editor. The editor works fully offline and will help with all your basic editing tasks.", + "Custom App Lock ✨", + 'Now choose from PIN, password or the default system lock to lock the app. You can set this up in Settings > Security > App lock.', ), ChangeLogEntry( - "Passkeys", - "Now secure your Ente account with passkeys or hardware keys. You can add your keys within Settings > Security > Passkeys.", + "Select All ✨", + "Selecting all files from gallery made easy with just one click! Select any item from gallery to see the option.", ), ChangeLogEntry( - "View large files", - "Find those items that take up the most amount of storage, and easily declutter your library. Open Settings > Backup > Free up space to learn more.", + "Bug Fixes", + "Many a bugs were squashed in this release. If you run into any bugs, please write to team@ente.io, or let us know on Discord! 🙏", ), ]); From c86be54ac18024f8763d5a461cdcb9f4d5b53bf6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 16:04:32 +0530 Subject: [PATCH 308/466] [desktop] Handle jp2 and simplify --- web/apps/cast/src/services/render.ts | 6 +- .../src/components/PhotoViewer/index.tsx | 19 ++-- web/packages/media/formats.ts | 29 ++++--- web/packages/new/photos/utils/file.ts | 86 ++++++++----------- 4 files changed, 66 insertions(+), 74 deletions(-) diff --git a/web/apps/cast/src/services/render.ts b/web/apps/cast/src/services/render.ts index acacdc88d2..7c9ea8e2c3 100644 --- a/web/apps/cast/src/services/render.ts +++ b/web/apps/cast/src/services/render.ts @@ -6,7 +6,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { FILE_TYPE } from "@/media/file-type"; -import { isHEICExtension, isNonWebImageFileExtension } from "@/media/formats"; +import { isHEICExtension, needsJPEGConversion } from "@/media/formats"; import { heicToJPEG } from "@/media/heic-convert"; import { decodeLivePhoto } from "@/media/live-photo"; import type { @@ -258,8 +258,8 @@ const isFileEligible = (file: EnteFile) => { // extension. To detect the actual type, we need to sniff the MIME type, but // that requires downloading and decrypting the file first. const [, extension] = nameAndExtension(file.metadata.title); - if (extension && isNonWebImageFileExtension(extension)) { - // Of the known non-web types, we support HEIC. + if (extension && needsJPEGConversion(extension)) { + // On the web, we only support HEIC conversion. return isHEICExtension(extension); } diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index 56ad5475ec..9d29c4a3b0 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -14,11 +14,11 @@ import { } from "utils/file"; import { FILE_TYPE } from "@/media/file-type"; -import { isNonWebImageFileExtension } from "@/media/formats"; +import { isHEICExtension, needsJPEGConversion } from "@/media/formats"; import downloadManager from "@/new/photos/services/download"; import type { LoadedLivePhotoSourceURL } from "@/new/photos/types/file"; import { detectFileTypeInfo } from "@/new/photos/utils/detect-type"; -import { isNativeConvertibleToJPEG } from "@/new/photos/utils/file"; +import { isDesktop } from "@/next/app"; import { lowercaseExtension } from "@/next/file"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; @@ -350,11 +350,16 @@ function PhotoViewer(props: Iprops) { function updateShowEditButton(file: EnteFile) { const extension = lowercaseExtension(file.metadata.title); - const isSupported = - !isNonWebImageFileExtension(extension) || - // TODO: This condition doesn't sound correct when running in the - // web app? - isNativeConvertibleToJPEG(extension); + // Assume it is supported. + let isSupported = true; + if (needsJPEGConversion(extension)) { + // See if the file is on the whitelist of extensions that we know + // will not be directly renderable. + if (!isDesktop) { + // On the web, we only support HEIC conversion. + isSupported = isHEICExtension(extension); + } + } setShowEditButton( file.metadata.fileType === FILE_TYPE.IMAGE && isSupported, ); diff --git a/web/packages/media/formats.ts b/web/packages/media/formats.ts index 1316b654f4..c2a98ca635 100644 --- a/web/packages/media/formats.ts +++ b/web/packages/media/formats.ts @@ -1,29 +1,30 @@ /** - * Image file extensions that we know the browser is unlikely to have native - * support for. + * List used by {@link needsJPEGConversion}. */ -const nonWebImageFileExtensions = [ - "heic", - "rw2", - "tiff", +const needsJPEGConversionExtensions = [ "arw", - "cr3", "cr2", - "raf", + "cr3", + "dng", + "heic", + "jp2", "nef", "psd", - "dng", + "rw2", "tif", + "tiff", ]; /** * Return `true` if {@link extension} is from amongst a known set of image file - * extensions that we know that the browser is unlikely to have native support - * for. If we want to display such files in the browser, we'll need to convert - * them to some other format first. + * extensions that (a) we know that the browser is unlikely to support, and (b) + * which we should be able to convert to JPEG when running in our desktop app. + * + * These two are independent constraints, but we only return true if we satisfy + * both of them instead of having two disjoint lists. */ -export const isNonWebImageFileExtension = (extension: string) => - nonWebImageFileExtensions.includes(extension.toLowerCase()); +export const needsJPEGConversion = (extension: string) => + needsJPEGConversionExtensions.includes(extension.toLowerCase()); /** * Return `true` if {@link extension} in for an HEIC-like file. diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 7c4eaad36f..282737ef5b 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -1,4 +1,4 @@ -import { isNonWebImageFileExtension } from "@/media/formats"; +import { needsJPEGConversion } from "@/media/formats"; import { heicToJPEG } from "@/media/heic-convert"; import { isDesktop } from "@/next/app"; import log from "@/next/log"; @@ -104,9 +104,37 @@ export const renderableImageBlob = async ( ); const { extension } = fileTypeInfo; - if (!isNonWebImageFileExtension(extension)) { + if (needsJPEGConversion(extension)) { + const available = !moduleState.isNativeJPEGConversionNotAvailable; + if (isDesktop && available) { + // If we're running in our desktop app, see if our Node.js layer + // can convert this into a JPEG using native tools. + try { + return await nativeConvertToJPEG(imageBlob); + } catch (e) { + if ( + e instanceof Error && + e.message.endsWith(CustomErrorMessage.NotAvailable) + ) { + moduleState.isNativeJPEGConversionNotAvailable = true; + } else { + log.error("Native conversion to JPEG failed", e); + } + } + } + + if (extension == "heic" || extension == "heif") { + // If the previous step failed, or if native JPEG conversion is + // not available on this platform, for HEIC/HEIF files we can + // fallback to our web HEIC converter. + return await heicToJPEG(imageBlob); + } + + return undefined; + } else { // Either it is something that the browser already knows how to - // render, or something we don't even about yet. + // render, or a file extension that we haven't specifically + // whitelisted for conversion. const mimeType = fileTypeInfo.mimeType; if (!mimeType) { log.info( @@ -118,31 +146,6 @@ export const renderableImageBlob = async ( return new Blob([imageBlob], { type: mimeType }); } } - - const available = !moduleState.isNativeJPEGConversionNotAvailable; - if (isDesktop && available && isNativeConvertibleToJPEG(extension)) { - // If we're running in our desktop app, see if our Node.js layer can - // convert this into a JPEG using native tools for us. - try { - return await nativeConvertToJPEG(imageBlob); - } catch (e) { - if ( - e instanceof Error && - e.message.endsWith(CustomErrorMessage.NotAvailable) - ) { - moduleState.isNativeJPEGConversionNotAvailable = true; - } else { - log.error("Native conversion to JPEG failed", e); - } - } - } - - if (extension == "heic" || extension == "heif") { - // For HEIC/HEIF files we can use our web HEIC converter. - return await heicToJPEG(imageBlob); - } - - return undefined; } catch (e) { log.error(`Failed to get renderable image for ${fileName}`, e); return undefined; @@ -150,29 +153,12 @@ export const renderableImageBlob = async ( }; /** - * File extensions which our native JPEG conversion code should be able to - * convert to a renderable image. - */ -const convertibleToJPEGExtensions = [ - "heic", - "rw2", - "tiff", - "arw", - "cr3", - "cr2", - "nef", - "psd", - "dng", - "tif", -]; - -/** - * Return true if {@link extension} is amongst the file extensions which we - * expect our native JPEG conversion to be able to process. + * Convert {@link imageBlob} to a JPEG blob. + * + * The presumption is that method used by our desktop app for converting to JPEG + * should be able to handle files with all extensions for which + * {@link needsJPEGConversion} returns true. */ -export const isNativeConvertibleToJPEG = (extension: string) => - convertibleToJPEGExtensions.includes(extension.toLowerCase()); - const nativeConvertToJPEG = async (imageBlob: Blob) => { const startTime = Date.now(); const imageData = new Uint8Array(await imageBlob.arrayBuffer()); From d0f585fc97b68f703d43f7e3cb1a7f26e816d750 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 6 Jul 2024 16:57:46 +0530 Subject: [PATCH 309/466] Special case jp2 rendering --- web/packages/media/formats.ts | 9 +++++++ web/packages/new/photos/utils/file.ts | 34 +++++++++++++++------------ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/web/packages/media/formats.ts b/web/packages/media/formats.ts index c2a98ca635..bc1bde9729 100644 --- a/web/packages/media/formats.ts +++ b/web/packages/media/formats.ts @@ -26,6 +26,15 @@ const needsJPEGConversionExtensions = [ export const needsJPEGConversion = (extension: string) => needsJPEGConversionExtensions.includes(extension.toLowerCase()); +/** + * Return true if {@link extension} _might_ be supported by the user's browser. + * + * For example, JPEG 2000 (jp2) is supported by Safari, but not by Chrome or + * Firefox, and this function will return true for `jp2`. + */ +export const hasPartialBrowserSupport = (extension: string) => + ["jp2"].includes(extension.toLowerCase()); + /** * Return `true` if {@link extension} in for an HEIC-like file. */ diff --git a/web/packages/new/photos/utils/file.ts b/web/packages/new/photos/utils/file.ts index 282737ef5b..8e878f9e8c 100644 --- a/web/packages/new/photos/utils/file.ts +++ b/web/packages/new/photos/utils/file.ts @@ -1,4 +1,4 @@ -import { needsJPEGConversion } from "@/media/formats"; +import { hasPartialBrowserSupport, needsJPEGConversion } from "@/media/formats"; import { heicToJPEG } from "@/media/heic-convert"; import { isDesktop } from "@/next/app"; import log from "@/next/log"; @@ -130,21 +130,25 @@ export const renderableImageBlob = async ( return await heicToJPEG(imageBlob); } - return undefined; + // Continue if it might be possibly supported in some browsers, + // otherwise bail out. + if (!hasPartialBrowserSupport(extension)) return undefined; + } + + // Either it is something that the browser already knows how to render + // (e.g. JPEG/PNG), or is a file extension that might be supported in + // some browsers (e.g. JPEG 2000), or a file extension that we haven't + // specifically whitelisted for conversion (any arbitrary extension not + // part of `needsJPEGConversion`). + // + // Give it to the browser, attaching the mime type if possible. + + const mimeType = fileTypeInfo.mimeType; + if (!mimeType) { + log.info("Trying to render a file without a MIME type", fileName); + return imageBlob; } else { - // Either it is something that the browser already knows how to - // render, or a file extension that we haven't specifically - // whitelisted for conversion. - const mimeType = fileTypeInfo.mimeType; - if (!mimeType) { - log.info( - "Trying to render a file without a MIME type", - fileName, - ); - return imageBlob; - } else { - return new Blob([imageBlob], { type: mimeType }); - } + return new Blob([imageBlob], { type: mimeType }); } } catch (e) { log.error(`Failed to get renderable image for ${fileName}`, e); From 67ca028dbf789f8599355567ad5e0fc0b83add6f Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 6 Jul 2024 17:24:59 +0530 Subject: [PATCH 310/466] bump up to v0.9.6 --- mobile/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 8cae749d59..a0479b453d 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,7 +12,7 @@ description: ente photos application # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.9.5+905 +version: 0.9.6+906 publish_to: none environment: From bbacbb08b6b4adaac2277f9f0e4775c8d565b1f7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 14:20:43 +0530 Subject: [PATCH 311/466] doc --- web/packages/utils/ensure.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web/packages/utils/ensure.ts b/web/packages/utils/ensure.ts index 41639ea2b5..d37ccf359c 100644 --- a/web/packages/utils/ensure.ts +++ b/web/packages/utils/ensure.ts @@ -1,5 +1,10 @@ /** * Throw an exception if the given value is `null` or `undefined`. + * + * This is different from TypeScript's built in null assertion operator `!` in + * that `ensure` involves a runtime check, and will throw if the given value is + * null-ish. On the other hand the TypeScript null assertion is only an + * indication to the type system and does not involve any runtime checks. */ export const ensure = (v: T | null | undefined): T => { if (v === null) throw new Error("Required value was null"); From 6511179766eb5afea6927bcf0167beb39ce997b9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 14:34:05 +0530 Subject: [PATCH 312/466] Introduce bounds checking --- desktop/src/main/services/ml-clip.ts | 32 ++++++++--------- web/packages/new/photos/services/ml/image.ts | 38 ++++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index b0d6fd9337..4d6f27a896 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -154,9 +154,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, py); - const ip0 = cubic(dx, ipp.r!, icp.r!, inp.r!, iap.r!); - const ip1 = cubic(dx, ipp.g!, icp.g!, inp.g!, iap.g!); - const ip2 = cubic(dx, ipp.b!, icp.b!, inp.b!, iap.b!); + const ip0 = cubic(dx, ipp.r, icp.r, inp.r, iap.r); + const ip1 = cubic(dx, ipp.g, icp.g, inp.g, iap.g); + const ip2 = cubic(dx, ipp.b, icp.b, inp.b, iap.b); // const ip3 = cubic(dx, ipp.a, icp.a, inp.a, iap.a); const ipc = @@ -170,9 +170,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, y); - const ic0 = cubic(dx, ipc.r!, icc.r!, inc.r!, iac.r!); - const ic1 = cubic(dx, ipc.g!, icc.g!, inc.g!, iac.g!); - const ic2 = cubic(dx, ipc.b!, icc.b!, inc.b!, iac.b!); + const ic0 = cubic(dx, ipc.r, icc.r, inc.r, iac.r); + const ic1 = cubic(dx, ipc.g, icc.g, inc.g, iac.g); + const ic2 = cubic(dx, ipc.b, icc.b, inc.b, iac.b); // const ic3 = cubic(dx, ipc.a, icc.a, inc.a, iac.a); const ipn = @@ -192,9 +192,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ny); - const in0 = cubic(dx, ipn.r!, icn.r!, inn.r!, ian.r!); - const in1 = cubic(dx, ipn.g!, icn.g!, inn.g!, ian.g!); - const in2 = cubic(dx, ipn.b!, icn.b!, inn.b!, ian.b!); + const in0 = cubic(dx, ipn.r, icn.r, inn.r, ian.r); + const in1 = cubic(dx, ipn.g, icn.g, inn.g, ian.g); + const in2 = cubic(dx, ipn.b, icn.b, inn.b, ian.b); // const in3 = cubic(dx, ipn.a, icn.a, inn.a, ian.a); const ipa = @@ -214,9 +214,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ay); - const ia0 = cubic(dx, ipa.r!, ica.r!, ina.r!, iaa.r!); - const ia1 = cubic(dx, ipa.g!, ica.g!, ina.g!, iaa.g!); - const ia2 = cubic(dx, ipa.b!, ica.b!, ina.b!, iaa.b!); + const ia0 = cubic(dx, ipa.r, ica.r, ina.r, iaa.r); + const ia1 = cubic(dx, ipa.g, ica.g, ina.g, iaa.g); + const ia2 = cubic(dx, ipa.b, ica.b, ina.b, iaa.b); // const ia3 = cubic(dx, ipa.a, ica.a, ina.a, iaa.a); const c0 = Math.trunc(clamp(cubic(dy, ip0, ic0, in0, ia0), 0, 255)); @@ -244,10 +244,10 @@ const pixelRGBA = ( } const index = (y * width + x) * 4; return { - r: imageData[index], - g: imageData[index + 1], - b: imageData[index + 2], - a: imageData[index + 3], + r: ensure(imageData[index]), + g: ensure(imageData[index + 1]), + b: ensure(imageData[index + 2]), + a: ensure(imageData[index + 3]), }; }; diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index 114247a91b..da0a41bf04 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -51,9 +51,9 @@ export function pixelRGBBilinear( // Return interpolated pixel colors. return { - r: bilinear(pixel1.r!, pixel2.r!, pixel3.r!, pixel4.r!), - g: bilinear(pixel1.g!, pixel2.g!, pixel3.g!, pixel4.g!), - b: bilinear(pixel1.b!, pixel2.b!, pixel3.b!, pixel4.b!), + r: bilinear(pixel1.r, pixel2.r, pixel3.r, pixel4.r), + g: bilinear(pixel1.g, pixel2.g, pixel3.g, pixel4.g), + b: bilinear(pixel1.b, pixel2.b, pixel3.b, pixel4.b), }; } @@ -69,10 +69,10 @@ const pixelRGBA = ( } const index = (y * width + x) * 4; return { - r: imageData[index], - g: imageData[index + 1], - b: imageData[index + 2], - a: imageData[index + 3], + r: ensure(imageData[index]), + g: ensure(imageData[index + 1]), + b: ensure(imageData[index + 2]), + a: ensure(imageData[index + 3]), }; }; @@ -132,9 +132,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, py); - const ip0 = cubic(dx, ipp.r!, icp.r!, inp.r!, iap.r!); - const ip1 = cubic(dx, ipp.g!, icp.g!, inp.g!, iap.g!); - const ip2 = cubic(dx, ipp.b!, icp.b!, inp.b!, iap.b!); + const ip0 = cubic(dx, ipp.r, icp.r, inp.r, iap.r); + const ip1 = cubic(dx, ipp.g, icp.g, inp.g, iap.g); + const ip2 = cubic(dx, ipp.b, icp.b, inp.b, iap.b); // const ip3 = cubic(dx, ipp.a, icp.a, inp.a, iap.a); const ipc = @@ -148,9 +148,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, y); - const ic0 = cubic(dx, ipc.r!, icc.r!, inc.r!, iac.r!); - const ic1 = cubic(dx, ipc.g!, icc.g!, inc.g!, iac.g!); - const ic2 = cubic(dx, ipc.b!, icc.b!, inc.b!, iac.b!); + const ic0 = cubic(dx, ipc.r, icc.r, inc.r, iac.r); + const ic1 = cubic(dx, ipc.g, icc.g, inc.g, iac.g); + const ic2 = cubic(dx, ipc.b, icc.b, inc.b, iac.b); // const ic3 = cubic(dx, ipc.a, icc.a, inc.a, iac.a); const ipn = @@ -170,9 +170,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ny); - const in0 = cubic(dx, ipn.r!, icn.r!, inn.r!, ian.r!); - const in1 = cubic(dx, ipn.g!, icn.g!, inn.g!, ian.g!); - const in2 = cubic(dx, ipn.b!, icn.b!, inn.b!, ian.b!); + const in0 = cubic(dx, ipn.r, icn.r, inn.r, ian.r); + const in1 = cubic(dx, ipn.g, icn.g, inn.g, ian.g); + const in2 = cubic(dx, ipn.b, icn.b, inn.b, ian.b); // const in3 = cubic(dx, ipn.a, icn.a, inn.a, ian.a); const ipa = @@ -192,9 +192,9 @@ const pixelRGBBicubic = ( ? icc : pixelRGBA(imageData, imageWidth, imageHeight, ax, ay); - const ia0 = cubic(dx, ipa.r!, ica.r!, ina.r!, iaa.r!); - const ia1 = cubic(dx, ipa.g!, ica.g!, ina.g!, iaa.g!); - const ia2 = cubic(dx, ipa.b!, ica.b!, ina.b!, iaa.b!); + const ia0 = cubic(dx, ipa.r, ica.r, ina.r, iaa.r); + const ia1 = cubic(dx, ipa.g, ica.g, ina.g, iaa.g); + const ia2 = cubic(dx, ipa.b, ica.b, ina.b, iaa.b); // const ia3 = cubic(dx, ipa.a, ica.a, ina.a, iaa.a); const c0 = Math.trunc(clamp(cubic(dy, ip0, ic0, in0, ia0), 0, 255)); From 8b5ad13595aea1e866ed73e782e326374f910642 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 14:40:41 +0530 Subject: [PATCH 313/466] Fix format mismatch --- desktop/src/main/services/ml-clip.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index 4d6f27a896..98b8a01bfe 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -58,7 +58,7 @@ const getRGBData = async (jpegFilePath: string): Promise => { const jpegData = await fs.readFile(jpegFilePath); const rawImageData = jpeg.decode(jpegData, { useTArray: true, - formatAsRGBA: false, + formatAsRGBA: true, }); // TODO: manav: make sure this works on all images, not just jpeg const pixelData = rawImageData.data; From f1c76adb38b3bb011589b7ac83a86c95ba3b1e32 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 15:19:41 +0530 Subject: [PATCH 314/466] Towards CLIP --- web/packages/new/photos/services/ml/worker.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 0cfcd9759a..ccbac4d3b9 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -166,7 +166,7 @@ export class MLWorker { // Reset the idle duration if we did pull something. if (didPull) this.idleDuration = idleDurationStart; } catch (e) { - log.error("Failed to pull face embeddings", e); + log.error("Failed to pull embeddings", e); } // Tick again, even if we got an error. // @@ -234,8 +234,12 @@ expose(MLWorker); /** * Pull embeddings from remote. + * + * Return true atleast one embedding was pulled. */ -const pull = pullFaceEmbeddings; +const pull = async () => { + return pullFaceEmbeddings(); +}; /** * Find out files which need to be indexed. Then index the next batch of them. @@ -312,15 +316,14 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( }; /** - * Index faces in a file, save the persist the results locally, and put them - * on remote. + * Index file, save the persist the results locally, and put them on remote. * * @param enteFile The {@link EnteFile} to index. * * @param uploadItem If the file is one which is being uploaded from the current - * client, then we will also have access to the file's content. In such - * cases, pass a web {@link File} object to use that its data directly for - * face indexing. If this is not provided, then the file's contents will be + * client, then we will also have access to the file's content. In such cases, + * passing a web {@link File} object will directly use that its data when + * indexing. Otherwise (when this is not provided), the file's contents will be * downloaded and decrypted from remote. * * @param userAgent The UA of the client that is doing the indexing (us). From c82ef796f22c2c8ce232386589c7d4b5cc61a397 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 15:37:20 +0530 Subject: [PATCH 315/466] Extract --- web/packages/new/photos/services/ml/bitmap.ts | 28 ++++++++++ web/packages/new/photos/services/ml/face.ts | 55 ++++++++----------- web/packages/new/photos/services/ml/worker.ts | 8 ++- 3 files changed, 58 insertions(+), 33 deletions(-) diff --git a/web/packages/new/photos/services/ml/bitmap.ts b/web/packages/new/photos/services/ml/bitmap.ts index 3bcbb339ca..96741b2157 100644 --- a/web/packages/new/photos/services/ml/bitmap.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -9,6 +9,34 @@ import DownloadManager from "../download"; import type { UploadItem } from "../upload/types"; import type { MLWorkerElectron } from "./worker-electron"; +export interface ImageBitmapAndData { + bitmap: ImageBitmap; +} + +/** + * Return an {@link ImageBitmap} and its {@link ImageData}. + * + * @param enteFile The {@link EnteFile} to index. + * + * @param uploadItem If we're called during the upload process, then this will + * be set to the {@link UploadItem} that was uploaded. This way, we can directly + * use the on-disk file instead of needing to download the original from remote. + * + * @param electron The {@link MLWorkerElectron} instance that allows us to call + * our Node.js layer for various functionality. + */ +export const imageBitmapAndData = async ( + enteFile: EnteFile, + uploadItem: UploadItem | undefined, + electron: MLWorkerElectron, +): Promise => { + const imageBitmap = uploadItem + ? await renderableUploadItemImageBitmap(enteFile, uploadItem, electron) + : await renderableImageBitmap(enteFile); + + return { bitmap: imageBitmap }; +}; + /** * Return a {@link ImageBitmap} that downloads the source image corresponding to * {@link enteFile} from remote. diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 9f178f7b52..c90e7fd858 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -19,11 +19,7 @@ import { translate, type Matrix as TransformationMatrix, } from "transformation-matrix"; -import type { UploadItem } from "../upload/types"; -import { - renderableImageBitmap, - renderableUploadItemImageBitmap, -} from "./bitmap"; +import type { ImageBitmapAndData } from "./bitmap"; import { saveFaceCrops } from "./crop"; import { clamp, @@ -227,40 +223,37 @@ export interface Box { */ export const indexFaces = async ( enteFile: EnteFile, - uploadItem: UploadItem | undefined, + image: ImageBitmapAndData, electron: MLWorkerElectron, userAgent: string, ): Promise => { - const imageBitmap = uploadItem - ? await renderableUploadItemImageBitmap(enteFile, uploadItem, electron) - : await renderableImageBitmap(enteFile); + const imageBitmap = image.bitmap; + const { width, height } = imageBitmap; const fileID = enteFile.id; + const faceIndex = { + fileID, + width, + height, + faceEmbedding: { + version: faceIndexingVersion, + client: userAgent, + faces: await indexFacesInBitmap(fileID, imageBitmap, electron), + }, + }; + + // This step, saving face crops, is not part of the indexing pipeline; + // we just do it here since we have already have the ImageBitmap at + // hand. Ignore errors that happen during this since it does not impact + // the generated face index. try { - const faceIndex = { - fileID, - width, - height, - faceEmbedding: { - version: faceIndexingVersion, - client: userAgent, - faces: await indexFacesInBitmap(fileID, imageBitmap, electron), - }, - }; - // This step, saving face crops, is not part of the indexing pipeline; - // we just do it here since we have already have the ImageBitmap at - // hand. Ignore errors that happen during this since it does not impact - // the generated face index. - try { - await saveFaceCrops(imageBitmap, faceIndex); - } catch (e) { - log.error(`Failed to save face crops for file ${fileID}`, e); - } - return faceIndex; - } finally { - imageBitmap.close(); + await saveFaceCrops(imageBitmap, faceIndex); + } catch (e) { + log.error(`Failed to save face crops for file ${fileID}`, e); } + + return faceIndex; }; const indexFacesInBitmap = async ( diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index ccbac4d3b9..d854989c5f 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -11,6 +11,7 @@ import { expose } from "comlink"; import downloadManager from "../download"; import { getAllLocalFiles, getLocalTrashedFiles } from "../files"; import type { UploadItem } from "../upload/types"; +import { imageBitmapAndData } from "./bitmap"; import { indexableFileIDs, markIndexingFailed, @@ -328,7 +329,7 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( * * @param userAgent The UA of the client that is doing the indexing (us). */ -export const index = async ( +const index = async ( enteFile: EnteFile, uploadItem: UploadItem | undefined, electron: MLWorkerElectron, @@ -337,13 +338,16 @@ export const index = async ( const f = fileLogID(enteFile); const startTime = Date.now(); + const image = await imageBitmapAndData(enteFile, uploadItem, electron); let faceIndex: FaceIndex; try { - faceIndex = await indexFaces(enteFile, uploadItem, electron, userAgent); + faceIndex = await indexFaces(enteFile, image, electron, userAgent); } catch (e) { log.error(`Failed to index faces in ${f}`, e); await markIndexingFailed(enteFile.id); throw e; + } finally { + image.bitmap.close(); } // [Note: Transient and permanent indexing failures] From 1fb95f7d7d8dff05e6d7ba21cbc2636f6b1832bd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 15:48:45 +0530 Subject: [PATCH 316/466] Reuse --- web/packages/new/photos/services/ml/bitmap.ts | 19 ++++++++- web/packages/new/photos/services/ml/face.ts | 40 ++++++++----------- web/packages/new/photos/services/ml/image.ts | 13 ++---- 3 files changed, 38 insertions(+), 34 deletions(-) diff --git a/web/packages/new/photos/services/ml/bitmap.ts b/web/packages/new/photos/services/ml/bitmap.ts index 96741b2157..3772385425 100644 --- a/web/packages/new/photos/services/ml/bitmap.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -11,6 +11,7 @@ import type { MLWorkerElectron } from "./worker-electron"; export interface ImageBitmapAndData { bitmap: ImageBitmap; + data: ImageData; } /** @@ -34,7 +35,23 @@ export const imageBitmapAndData = async ( ? await renderableUploadItemImageBitmap(enteFile, uploadItem, electron) : await renderableImageBitmap(enteFile); - return { bitmap: imageBitmap }; + // Use an OffscreenCanvas to get the bitmap's data. + + const { width, height } = imageBitmap; + + const offscreenCanvas = new OffscreenCanvas(width, height); + const ctx = ensure(offscreenCanvas.getContext("2d")); + ctx.drawImage(imageBitmap, 0, 0, width, height); + const imageData = ctx.getImageData(0, 0, width, height); + + // TODO-ML: This check isn't needed, keeping it around during scaffolding. + if ( + imageBitmap.width != imageData.width || + imageBitmap.height != imageData.height + ) + throw new Error("Dimension mismatch"); + + return { bitmap: imageBitmap, data: imageData }; }; /** diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index c90e7fd858..149e922b09 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -9,7 +9,6 @@ import type { EnteFile } from "@/new/photos/types/file"; import log from "@/next/log"; -import { ensure } from "@/utils/ensure"; import { Matrix } from "ml-matrix"; import { getSimilarityTransformation } from "similarity-transformation"; import { @@ -227,7 +226,7 @@ export const indexFaces = async ( electron: MLWorkerElectron, userAgent: string, ): Promise => { - const imageBitmap = image.bitmap; + const { bitmap: imageBitmap, data: imageData } = image; const { width, height } = imageBitmap; const fileID = enteFile.id; @@ -239,7 +238,7 @@ export const indexFaces = async ( faceEmbedding: { version: faceIndexingVersion, client: userAgent, - faces: await indexFacesInBitmap(fileID, imageBitmap, electron), + faces: await indexFaces_(fileID, imageData, electron), }, }; @@ -256,15 +255,15 @@ export const indexFaces = async ( return faceIndex; }; -const indexFacesInBitmap = async ( +const indexFaces_ = async ( fileID: number, - imageBitmap: ImageBitmap, + imageData: ImageData, electron: MLWorkerElectron, ): Promise => { - const { width, height } = imageBitmap; + const { width, height } = imageData; const imageDimensions = { width, height }; - const yoloFaceDetections = await detectFaces(imageBitmap, electron); + const yoloFaceDetections = await detectFaces(imageData, electron); const partialResult = yoloFaceDetections.map( ({ box, landmarks, score }) => { const faceID = makeFaceID(fileID, box, imageDimensions); @@ -297,7 +296,7 @@ const indexFacesInBitmap = async ( .map((f) => f.detection); const alignedFacesData = convertToMobileFaceNetInput( - imageBitmap, + imageData, alignments, ); @@ -317,12 +316,12 @@ const indexFacesInBitmap = async ( }; /** - * Detect faces in the given {@link imageBitmap}. + * Detect faces in the given image. * * The model used is YOLOv5Face, running in an ONNX runtime. */ const detectFaces = async ( - imageBitmap: ImageBitmap, + imageData: ImageData, electron: MLWorkerElectron, ): Promise => { const rect = ({ width, height }: Dimensions) => ({ @@ -333,34 +332,27 @@ const detectFaces = async ( }); const { yoloInput, yoloSize } = - convertToYOLOInputFloat32ChannelsFirst(imageBitmap); + convertToYOLOInputFloat32ChannelsFirst(imageData); const yoloOutput = await electron.detectFaces(yoloInput); const faces = filterExtractDetectionsFromYOLOOutput(yoloOutput); const faceDetections = transformYOLOFaceDetections( faces, rect(yoloSize), - rect(imageBitmap), + rect(imageData), ); return naiveNonMaxSuppression(faceDetections, 0.4); }; /** - * Convert {@link imageBitmap} into the format that the YOLO face detection + * Convert {@link imageData} into the format that the YOLOv5 face detection * model expects. */ -const convertToYOLOInputFloat32ChannelsFirst = (imageBitmap: ImageBitmap) => { +const convertToYOLOInputFloat32ChannelsFirst = (imageData: ImageData) => { const requiredWidth = 640; const requiredHeight = 640; - const { width, height } = imageBitmap; - - // Create an OffscreenCanvas and set its size. - const offscreenCanvas = new OffscreenCanvas(width, height); - const ctx = ensure(offscreenCanvas.getContext("2d")); - ctx.drawImage(imageBitmap, 0, 0, width, height); - const imageData = ctx.getImageData(0, 0, width, height); - const pixelData = imageData.data; + const { width, height, data: pixelData } = imageData; // Maintain aspect ratio. const scale = Math.min(requiredWidth / width, requiredHeight / height); @@ -668,7 +660,7 @@ const computeFaceAlignmentUsingSimilarityTransform = ( }; const convertToMobileFaceNetInput = ( - imageBitmap: ImageBitmap, + imageData: ImageData, faceAlignments: FaceAlignment[], ): Float32Array => { const faceSize = mobileFaceNetFaceSize; @@ -679,7 +671,7 @@ const convertToMobileFaceNetInput = ( const { affineMatrix } = faceAlignments[i]!; const faceDataOffset = i * faceSize * faceSize * 3; warpAffineFloat32List( - imageBitmap, + imageData, affineMatrix, faceSize, faceData, diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index da0a41bf04..b3b078041f 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -207,22 +207,17 @@ const pixelRGBBicubic = ( /** * Transform {@link inputData} starting at {@link inputStartIndex}. + * + * @param imageData The {@link ImageData} from which these alignments originate. */ export const warpAffineFloat32List = ( - imageBitmap: ImageBitmap, + imageData: ImageData, faceAlignmentAffineMatrix: number[][], faceSize: number, inputData: Float32Array, inputStartIndex: number, ): void => { - const { width, height } = imageBitmap; - - // Get the pixel data. - const offscreenCanvas = new OffscreenCanvas(width, height); - const ctx = ensure(offscreenCanvas.getContext("2d")); - ctx.drawImage(imageBitmap, 0, 0, width, height); - const imageData = ctx.getImageData(0, 0, width, height); - const pixelData = imageData.data; + const { width, height, data: pixelData } = imageData; const transformationMatrix = faceAlignmentAffineMatrix.map((row) => row.map((val) => (val != 1.0 ? val * faceSize : 1.0)), From a3de155a104ac6cbef75e5392f1fe279ca1694d1 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Tue, 9 Jul 2024 01:46:46 +0000 Subject: [PATCH 317/466] New Crowdin translations by GitHub Action --- web/packages/next/locales/nl-NL/translation.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 78cba11274..45f9691b91 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -107,8 +107,8 @@ "SESSION_EXPIRED": "Sessie verlopen", "PASSWORD_GENERATION_FAILED": "Uw browser kon geen sterke sleutel genereren die voldoet aan onze versleutelingsstandaarden. Probeer de mobiele app of een andere browser te gebruiken", "CHANGE_PASSWORD": "Wachtwoord wijzigen", - "password_changed_elsewhere": "", - "password_changed_elsewhere_message": "", + "password_changed_elsewhere": "Wachtwoord elders gewijzigd", + "password_changed_elsewhere_message": "Log opnieuw in op dit apparaat om uw nieuwe wachtwoord te gebruiken om te verifiëren.", "GO_BACK": "Ga terug", "RECOVERY_KEY": "Herstelsleutel", "SAVE_LATER": "Doe dit later", @@ -642,8 +642,8 @@ "redirect_again": "Opnieuw doorverwijzen", "autogenerated_first_album_name": "Mijn eerste album", "autogenerated_default_album_name": "Nieuw album", - "developer_settings": "", - "server_endpoint": "", - "more_information": "", - "save": "" + "developer_settings": "Ontwikkelaarsinstellingen", + "server_endpoint": "Server eindpunt", + "more_information": "Meer informatie", + "save": "Opslaan" } From da5270daa7c3afe7e878b6e25ec75578b1bfa859 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Tue, 9 Jul 2024 02:00:58 +0000 Subject: [PATCH 318/466] New Crowdin translations by GitHub Action --- .../metadata/android/pl/full_description.txt | 36 +++++++++ .../metadata/android/pl/short_description.txt | 2 +- mobile/fastlane/metadata/android/pl/title.txt | 2 +- .../fastlane/metadata/ios/pl/description.txt | 8 +- .../playstore/pl/full_description.txt | 30 ++++++++ mobile/lib/l10n/intl_de.arb | 37 +++++---- mobile/lib/l10n/intl_nl.arb | 77 +++++++++++++------ mobile/lib/l10n/intl_pt.arb | 53 ++++++++----- mobile/lib/l10n/intl_zh.arb | 37 +++++---- 9 files changed, 206 insertions(+), 76 deletions(-) create mode 100644 mobile/fastlane/metadata/android/pl/full_description.txt create mode 100644 mobile/fastlane/metadata/playstore/pl/full_description.txt diff --git a/mobile/fastlane/metadata/android/pl/full_description.txt b/mobile/fastlane/metadata/android/pl/full_description.txt new file mode 100644 index 0000000000..f0cf1b3426 --- /dev/null +++ b/mobile/fastlane/metadata/android/pl/full_description.txt @@ -0,0 +1,36 @@ +Ente to prosta aplikacja do tworzenia kopii zapasowej Twoich zdjęć i filmów. + +Jeśli szukałeś/aś przyjaznej dla prywatności alternatywy do Google Photos to dotarłeś/aś do właściwego miejsca. Dzięki Ente są one przechowywane w pełni zaszyfrowane (e2ee). Oznacza to, że tylko Ty możesz je oglądać. + +Mamy otwarto-źródłowe aplikacje na wszystkich platformach, a Twoje zdjęcia będą płynnie synchronizowane między Twoimi urządzeniami w sposób szyfrowany end-to-end (e2ee). + +Ente sprawia, że udostępnianie twoich albumów swoim bliskim również jest proste, nawet jeśli nie są w Ente. Możesz udostępniać publicznie widoczne linki, gdzie mogą oglądać twój album i współpracować, dodając do niego zdjęcia, nawet bez konta lub aplikacji. + +Twoje zaszyfrowane dane są przechowywane w wielu lokalizacjach, między innymi w schronie przeciwatomowym w Paryżu. Poważnie podchodzimy do kwestii zachowania pamięci i ułatwiamy zadbanie o to, by wspomnienia przetrwały dłużej niż ty sam. + +Jesteśmy tutaj, aby zrobić najbezpieczniejszą aplikację na zdjęcia, dołącz do naszej podróży! + +FUNKCJE +- Oryginalne kopie zapasowe wysokiej jakości, ponieważ każdy piksel jest ważny +- Plany rodzinne, umożliwiające współdzielenie pamięci z rodziną +- Wspólne albumy, dzięki czemu możesz zbierać zdjęcia po podróży +- Udostępnione foldery, jeśli chcesz, aby Twój partner cieszył się kliknięciami "Aparatu" +- Linki do albumów, które mogą być chronione hasłem +- Możliwość zwolnienia miejsca poprzez usunięcie plików, które zostały bezpiecznie zarchiwizowane +- Wsparcie ludzkie, ponieważ jesteś tego warty/a +- Opisy, dzięki którym możesz podpisać swoje wspomnienia i łatwo je znaleźć +- Edytor obrazów, aby dodać ostatnie poprawki +- Dodaj do ulubionych, ukryj i przeżyj swoje wspomnienia, ponieważ są cenne +- Import jednym kliknięciem z Google, Apple, dysku twardego i więcej +- Ciemny motyw, ponieważ Twoje zdjęcia wyglądają w nim dobrze +- 2FA, 3FA, uwierzytelnianie biometryczne +- i o WIELE więcej! + +UPRAWNIENIA +Ente prosi o określone uprawnienia, aby służyć jako dostawca usług przechowywania zdjęć, które można przejrzeć tutaj: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md + +CENNIK +Nie oferujemy wiecznie darmowych planów, ponieważ ważne jest dla nas, abyśmy pozostali zrównoważeni i wytrzymali próbę czasu. Zamiast tego oferujemy przystępne cenowo plany, którymi można swobodnie dzielić się z rodziną. Więcej informacji możesz znaleźć na stronie ente.io. + +WSPARCIE +Jesteśmy dumni z tego, że oferujemy ludzkie wsparcie. Jeśli jesteś naszym płatnym klientem, możesz skontaktować się z nami pod adresem team@ente.io i oczekiwać odpowiedzi od naszego zespołu w ciągu 24 godzin. diff --git a/mobile/fastlane/metadata/android/pl/short_description.txt b/mobile/fastlane/metadata/android/pl/short_description.txt index 94bf61a49a..ac0952d1a2 100644 --- a/mobile/fastlane/metadata/android/pl/short_description.txt +++ b/mobile/fastlane/metadata/android/pl/short_description.txt @@ -1 +1 @@ -ente to w pełni szyfrowana aplikacja do przechowywania zdjęć \ No newline at end of file +Ente to w pełni szyfrowana aplikacja do przechowywania zdjęć \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/pl/title.txt b/mobile/fastlane/metadata/android/pl/title.txt index ad4bb83f39..9dbb674590 100644 --- a/mobile/fastlane/metadata/android/pl/title.txt +++ b/mobile/fastlane/metadata/android/pl/title.txt @@ -1 +1 @@ -ente - szyfrowane przechowywanie zdjęć \ No newline at end of file +Ente - szyfrowane przechowywanie zdjęć \ No newline at end of file diff --git a/mobile/fastlane/metadata/ios/pl/description.txt b/mobile/fastlane/metadata/ios/pl/description.txt index d6f977d060..be266c9043 100644 --- a/mobile/fastlane/metadata/ios/pl/description.txt +++ b/mobile/fastlane/metadata/ios/pl/description.txt @@ -1,8 +1,8 @@ Ente to prosta aplikacja do automatycznego tworzenia kopii zapasowych oraz porządkowania zdjęć i filmów. -Jeśli szukasz przyjaznej dla prywatności alternatywy, aby zachować swoje wspomnienia, jesteś we właściwym miejscu. Dzięki Ente są one przechowywane w pełni zaszyfrowane (e2ee). Oznacza to, że tylko Ty możesz je oglądać. +Jeśli szukałeś/aś przyjaznej dla prywatności alternatywy, aby zachować swoje wspomnienia, to dotarłeś/aś do właściwego miejsca. Dzięki Ente są one przechowywane w pełni zaszyfrowane (e2ee). Oznacza to, że tylko Ty możesz je oglądać. -Mamy aplikacje na wszystkich platformach, a Twoje zdjęcia będą płynnie synchronizowane między Twoimi urządzeniami w sposób szyfrowany (e2ee). +Mamy aplikacje na wszystkich platformach, a Twoje zdjęcia będą płynnie synchronizowane między Twoimi urządzeniami w sposób szyfrowany end-to-end (e2ee). Ente ułatwia również udostępnianie albumów najbliższym. Możesz udostępniać je bezpośrednio innym użytkownikom Ente, w pełni zaszyfrowane; lub za pomocą publicznie dostępnych linków. @@ -23,11 +23,11 @@ FUNKCJE - 2FA, 3FA, uwierzytelnianie biometryczne - i o WIELE więcej! -WARUNKI +CENNIK Nie oferujemy planów darmowych na zawsze, ponieważ ważne jest dla nas, abyśmy pozostali zrównoważeni i wytrzymali próbę czasu. Zamiast tego oferujemy przystępne cenowo plany, którymi można swobodnie dzielić się z rodziną. Więcej informacji możesz znaleźć na stronie ente.io. WSPARCIE Jesteśmy dumni z tego, że oferujemy ludzkie wsparcie. Jeśli jesteś naszym płatnym klientem, możesz skontaktować się z nami pod adresem team@ente.io i oczekiwać odpowiedzi od naszego zespołu w ciągu 24 godzin. -CENA +WARUNKI https://ente.io/terms diff --git a/mobile/fastlane/metadata/playstore/pl/full_description.txt b/mobile/fastlane/metadata/playstore/pl/full_description.txt new file mode 100644 index 0000000000..7a44ee9f86 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pl/full_description.txt @@ -0,0 +1,30 @@ +Ente to prosta aplikacja do automatycznego tworzenia kopii zapasowych oraz porządkowania zdjęć i filmów. + +Jeśli szukałeś/aś przyjaznej dla prywatności alternatywy, aby zachować swoje wspomnienia, to dotarłeś/aś do właściwego miejsca. Dzięki Ente są one przechowywane w pełni zaszyfrowane (e2ee). Oznacza to, że tylko Ty możesz je oglądać. + +Mamy otwarto-źródłowe aplikacje na wszystkich platformach, a Twoje zdjęcia będą płynnie synchronizowane między Twoimi urządzeniami w sposób szyfrowany end-to-end (e2ee). + +Ente ułatwia również udostępnianie albumów najbliższym. Możesz udostępniać je bezpośrednio innym użytkownikom Ente, w pełni zaszyfrowane; lub za pomocą publicznie dostępnych linków. + +Twoje zaszyfrowane dane są przechowywane w wielu lokalizacjach, między innymi w schronie przeciwatomowym w Paryżu. Poważnie podchodzimy do kwestii zachowania pamięci i ułatwiamy zadbanie o to, by wspomnienia przetrwały dłużej niż ty sam. + +Jesteśmy tutaj, aby zrobić najbezpieczniejszą aplikację na zdjęcia, dołącz do naszej podróży! + +✨ FUNKCJE +- Kopie zapasowe oryginalnej jakości, ponieważ każdy piksel jest ważny +- Plany rodzinne, dzięki czemu możesz udostępnić pamięć swojej rodzinie +- Udostępnione foldery, jeśli chcesz, aby Twój partner cieszył się kliknięciami "Aparatu" +- Linki do albumów, które mogą być chronione hasłem i automatycznie wygasać +- Możliwość zwolnienia miejsca poprzez usunięcie plików, które zostały bezpiecznie zarchiwizowane +- Edytor obrazów, aby dodać ostatnie poprawki +- Dodaj do ulubionych, ukryj i przeżyj swoje wspomnienia, ponieważ są cenne +- Import jednym kliknięciem z Google, Apple, dysku twardego i więcej +- Ciemny motyw, ponieważ Twoje zdjęcia wyglądają w nim dobrze +- 2FA, 3FA, uwierzytelnianie biometryczne +- i o WIELE więcej! + +💲 CENNIK +Nie oferujemy wiecznie darmowych planów, ponieważ ważne jest dla nas, abyśmy pozostali zrównoważeni i wytrzymali próbę czasu. Zamiast tego oferujemy przystępne cenowo plany, którymi można swobodnie dzielić się z rodziną. Więcej informacji możesz znaleźć na stronie ente.io. + +🙋 WSPARCIE +Jesteśmy dumni z tego, że oferujemy ludzkie wsparcie. Jeśli jesteś naszym płatnym klientem, możesz skontaktować się z nami pod adresem team@ente.io i oczekiwać odpowiedzi od naszego zespołu w ciągu 24 godzin. \ No newline at end of file diff --git a/mobile/lib/l10n/intl_de.arb b/mobile/lib/l10n/intl_de.arb index 5d3bbb8912..412f1a189b 100644 --- a/mobile/lib/l10n/intl_de.arb +++ b/mobile/lib/l10n/intl_de.arb @@ -1252,17 +1252,28 @@ "right": "Rechts", "whatsNew": "Neue Funktionen", "reviewSuggestions": "Vorschläge überprüfen", - "reenterPassword": "Re-enter password", - "reenterPin": "Re-enter PIN", - "deviceLock": "Device lock", - "pinLock": "PIN lock", - "next": "Next", - "setNewPassword": "Set new password", - "enterPin": "Enter PIN", - "setNewPin": "Set new PIN", - "appLock": "App lock", - "noSystemLockFound": "No system lock found", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", - "tapToUnlock": "Tap to unlock", - "tooManyIncorrectAttempts": "Too many incorrect attempts" + "useAsCover": "Als Titelbild festlegen", + "notPersonLabel": "Nicht {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "Passwort erneut eingeben", + "reenterPin": "PIN erneut eingeben", + "deviceLock": "Gerätsperre", + "pinLock": "PIN-Sperre", + "next": "Weiter", + "setNewPassword": "Neues Passwort festlegen", + "enterPin": "PIN eingeben", + "setNewPin": "Neue PIN festlegen", + "appLock": "App-Sperre", + "noSystemLockFound": "Keine Systemsperre gefunden", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Um die App-Sperre zu aktivieren, konfigurieren Sie bitte den Gerätepasscode oder die Bildschirmsperre in Ihren Systemeinstellungen.", + "tapToUnlock": "Zum Entsperren antippen", + "tooManyIncorrectAttempts": "Zu viele fehlerhafte Versuche" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_nl.arb b/mobile/lib/l10n/intl_nl.arb index 80824dbe21..18968f21b9 100644 --- a/mobile/lib/l10n/intl_nl.arb +++ b/mobile/lib/l10n/intl_nl.arb @@ -409,7 +409,7 @@ "manageDeviceStorage": "Apparaatopslag beheren", "machineLearning": "Machine Learning", "magicSearch": "Magische zoekfunctie", - "magicSearchDescription": "Houd er rekening mee dat dit zal resulteren in een hoger internet- en batterijverbruik totdat alle items zijn geïndexeerd.", + "mlIndexingDescription": "Houd er rekening mee dat dit zal resulteren in een hoger internet- en batterijverbruik totdat alle items zijn geïndexeerd.", "loadingModel": "Modellen downloaden...", "waitingForWifi": "Wachten op WiFi...", "status": "Status", @@ -451,6 +451,7 @@ "privacy": "Privacy", "terms": "Voorwaarden", "checkForUpdates": "Controleer op updates", + "checkStatus": "Status controleren", "checking": "Controleren...", "youAreOnTheLatestVersion": "Je hebt de laatste versie", "account": "Account", @@ -478,9 +479,13 @@ "backedUpFolders": "Back-up mappen", "backup": "Back-up", "freeUpDeviceSpace": "Apparaatruimte vrijmaken", + "freeUpDeviceSpaceDesc": "Bespaar ruimte op je apparaat door bestanden die al geback-upt zijn te wissen.", "allClear": "✨ Alles in orde", "noDeviceThatCanBeDeleted": "Je hebt geen bestanden op dit apparaat die verwijderd kunnen worden", "removeDuplicates": "Duplicaten verwijderen", + "removeDuplicatesDesc": "Controleer en verwijder bestanden die exacte kopieën zijn.", + "viewLargeFiles": "Grote bestanden", + "viewLargeFilesDesc": "Bekijk bestanden die de meeste opslagruimte verbruiken", "noDuplicates": "✨ Geen duplicaten", "youveNoDuplicateFilesThatCanBeCleared": "Je hebt geen dubbele bestanden die kunnen worden gewist", "success": "Succes", @@ -667,7 +672,7 @@ "mobileWebDesktop": "Mobiel, Web, Desktop", "newToEnte": "Nieuw bij Ente", "pleaseLoginAgain": "Log opnieuw in", - "devAccountChanged": "Het ontwikkelaarsaccount dat we gebruiken om te publiceren in de App Store is veranderd. Daarom moet je opnieuw inloggen.\n\nOnze excuses voor het ongemak, helaas was dit onvermijdelijk.", + "autoLogoutMessage": "Door een technische storing bent u uitgelogd. Onze excuses voor het ongemak.", "yourSubscriptionHasExpired": "Uw abonnement is verlopen", "storageLimitExceeded": "Opslaglimiet overschreden", "upgrade": "Upgraden", @@ -987,7 +992,7 @@ "fileTypesAndNames": "Bestandstypen en namen", "location": "Locatie", "moments": "Momenten", - "searchFaceEmptySection": "Vind alle foto's van een persoon", + "searchFaceEmptySection": "Mensen worden hier getoond als het indexeren klaar is", "searchDatesEmptySection": "Zoeken op een datum, maand of jaar", "searchLocationEmptySection": "Foto's groeperen die in een bepaalde straal van een foto worden genomen", "searchPeopleEmptySection": "Nodig mensen uit, en je ziet alle foto's die door hen worden gedeeld hier", @@ -1171,6 +1176,7 @@ } }, "faces": "Gezichten", + "people": "Personen", "contents": "Inhoud", "addNew": "Nieuwe toevoegen", "@addNew": { @@ -1193,17 +1199,20 @@ "waitingForVerification": "Wachten op verificatie...", "passkey": "Passkey", "passkeyAuthTitle": "Passkey verificatie", + "passKeyPendingVerification": "Verificatie is nog in behandeling", + "loginSessionExpired": "Sessie verlopen", + "loginSessionExpiredDetails": "Jouw sessie is verlopen. Log opnieuw in.", "verifyPasskey": "Bevestig passkey", "playOnTv": "Album afspelen op TV", "pair": "Koppelen", - "autoPair": "Automatisch koppelen", - "pairWithPin": "Koppelen met PIN", "deviceNotFound": "Apparaat niet gevonden", "castInstruction": "Bezoek cast.ente.io op het apparaat dat u wilt koppelen.\n\nVoer de code hieronder in om het album op uw TV af te spelen.", "deviceCodeHint": "Voer de code in", "joinDiscord": "Join de Discord", "locations": "Locaties", "descriptions": "Beschrijvingen", + "addAName": "Een naam toevoegen", + "findPeopleByName": "Mensen snel op naam zoeken", "addViewers": "{count, plural, one {Voeg kijker toe} other {Voeg kijkers toe}}", "addCollaborators": "{count, plural, zero {Voeg samenwerker toe} one {Voeg samenwerker toe} other {Voeg samenwerkers toe}}", "longPressAnEmailToVerifyEndToEndEncryption": "Druk lang op een e-mail om de versleuteling te verifiëren.", @@ -1216,6 +1225,8 @@ "customEndpoint": "Verbonden met {endpoint}", "createCollaborativeLink": "Maak een gezamenlijke link", "search": "Zoeken", + "enterPersonName": "Naam van persoon invoeren", + "removePersonLabel": "Verwijder persoonslabel", "autoPairDesc": "Automatisch koppelen werkt alleen met apparaten die Chromecast ondersteunen.", "manualPairDesc": "Koppelen met de PIN werkt met elk scherm waarop je jouw album wilt zien.", "connectToDevice": "Verbinding maken met apparaat", @@ -1227,22 +1238,42 @@ "castIPMismatchTitle": "Album casten mislukt", "castIPMismatchBody": "Zorg ervoor dat je op hetzelfde netwerk zit als de tv.", "pairingComplete": "Koppeling voltooid", - "faceRecognition": "Face recognition", - "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", - "foundFaces": "Found faces", - "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", - "reenterPassword": "Re-enter password", - "reenterPin": "Re-enter PIN", - "deviceLock": "Device lock", - "pinLock": "PIN lock", - "next": "Next", - "setNewPassword": "Set new password", - "enterPin": "Enter PIN", - "setNewPin": "Set new PIN", - "appLock": "App lock", - "noSystemLockFound": "No system lock found", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", - "tapToUnlock": "Tap to unlock", - "tooManyIncorrectAttempts": "Too many incorrect attempts" + "savingEdits": "Bewerken opslaan...", + "autoPair": "Automatisch koppelen", + "pairWithPin": "Koppelen met PIN", + "faceRecognition": "Gezichtsherkenning", + "foundFaces": "Gezichten gevonden", + "clusteringProgress": "Voortgang clusteren", + "indexingIsPaused": "Indexeren is gepauzeerd. Het zal automatisch hervatten wanneer het apparaat klaar is.", + "trim": "Knippen", + "crop": "Bijsnijden", + "rotate": "Roteren", + "left": "Links", + "right": "Rechts", + "whatsNew": "Nieuw", + "reviewSuggestions": "Suggesties beoordelen", + "useAsCover": "Als cover gebruiken", + "notPersonLabel": "Niet {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "Wachtwoord opnieuw invoeren", + "reenterPin": "PIN opnieuw invoeren", + "deviceLock": "Apparaat vergrendeld", + "pinLock": "PIN vergrendeling", + "next": "Volgende", + "setNewPassword": "Nieuw wachtwoord instellen", + "enterPin": "PIN invoeren", + "setNewPin": "Nieuwe PIN instellen", + "appLock": "App-vergrendeling", + "noSystemLockFound": "Geen systeemvergrendeling gevonden", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Om vergrendelscherm in te schakelen, moet u een toegangscode of schermvergrendeling instellen in uw systeeminstellingen.", + "tapToUnlock": "Tik om te ontgrendelen", + "tooManyIncorrectAttempts": "Te veel onjuiste pogingen" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pt.arb b/mobile/lib/l10n/intl_pt.arb index 73406db361..2a9cf37675 100644 --- a/mobile/lib/l10n/intl_pt.arb +++ b/mobile/lib/l10n/intl_pt.arb @@ -48,8 +48,8 @@ "sorry": "Desculpe", "noRecoveryKeyNoDecryption": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", "verifyEmail": "Verificar e-mail", - "toResetVerifyEmail": "Para redefinir a sua senha, por favor verifique o seu email primeiro.", - "checkInboxAndSpamFolder": "Verifique sua caixa de entrada (e ‘spam’) para concluir a verificação", + "toResetVerifyEmail": "Para redefinir a sua senha, por favor verifique o seu e-mail primeiro.", + "checkInboxAndSpamFolder": "Verifique sua caixa de entrada (e spam) para concluir a verificação", "tapToEnterCode": "Toque para inserir código", "resendEmail": "Reenviar e-mail", "weHaveSendEmailTo": "Enviamos um e-mail à {email}", @@ -153,7 +153,7 @@ "confirmYourRecoveryKey": "Confirme sua chave de recuperação", "addViewer": "Adicionar visualizador", "addCollaborator": "Adicionar colaborador", - "addANewEmail": "Adicionar um novo email", + "addANewEmail": "Adicionar um novo e-mail", "orPickAnExistingOne": "Ou escolha um existente", "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado.", "enterEmail": "Insira o e-mail", @@ -284,7 +284,7 @@ "shareTextReferralCode": "Código de referência do ente: {referralCode} \n\nAplique em Configurações → Geral → Indicações para obter {referralStorageInGB} GB gratuitamente após a sua inscrição em um plano pago\n\nhttps://ente.io", "claimFreeStorage": "Reivindicar armazenamento gratuito", "inviteYourFriends": "Convide seus amigos", - "failedToFetchReferralDetails": "Não foi possível buscar informações do produto. Por favor, tente novamente mais tarde.", + "failedToFetchReferralDetails": "Não foi possível buscar os detalhes de referência. Por favor, tente novamente mais tarde.", "referralStep1": "Envie esse código aos seus amigos", "referralStep2": "2. Eles se inscreveram para um plano pago", "referralStep3": "3. Ambos ganham {storageInGB} GB* grátis", @@ -476,7 +476,7 @@ "cannotDeleteSharedFiles": "Não é possível excluir arquivos compartilhados", "theDownloadCouldNotBeCompleted": "Não foi possível concluir o download", "retry": "Tentar novamente", - "backedUpFolders": "Backup de pastas concluído", + "backedUpFolders": "Pastas com backup", "backup": "Backup", "freeUpDeviceSpace": "Liberar espaço no dispositivo", "freeUpDeviceSpaceDesc": "Economize espaço no seu dispositivo limpando arquivos que já foram salvos em backup.", @@ -947,7 +947,7 @@ "thisActionCannotBeUndone": "Esta ação não pode ser desfeita", "emptyTrash": "Esvaziar a lixeira?", "permDeleteWarning": "Todos os itens na lixeira serão excluídos permanentemente\n\nEsta ação não pode ser desfeita", - "empty": "Vazio", + "empty": "Esvaziar", "couldNotFreeUpSpace": "Não foi possível liberar espaço", "permanentlyDeleteFromDevice": "Excluir permanentemente do dispositivo?", "someOfTheFilesYouAreTryingToDeleteAre": "Alguns dos arquivos que você está tentando excluir só estão disponíveis no seu dispositivo e não podem ser recuperados se forem excluídos", @@ -1214,11 +1214,11 @@ "addAName": "Adicione um nome", "findPeopleByName": "Encontre pessoas rapidamente por nome", "addViewers": "{count, plural, zero {Adicionar visualizador} one {Adicionar visualizador} other {Adicionar Visualizadores}}", - "addCollaborators": "{count, plural, zero {Adicionar colaborador} one {Adicionar coloborador} other {Adicionar colaboradores}}", + "addCollaborators": "{count, plural, zero {Adicionar colaborador} one {Adicionar colaborador} other {Adicionar colaboradores}}", "longPressAnEmailToVerifyEndToEndEncryption": "Pressione e segure um e-mail para verificar a criptografia de ponta a ponta.", "developerSettingsWarning": "Tem certeza de que deseja modificar as configurações de Desenvolvedor?", "developerSettings": "Configurações de desenvolvedor", - "serverEndpoint": "Servidor endpoint", + "serverEndpoint": "Endpoint do servidor", "invalidEndpoint": "Endpoint inválido", "invalidEndpointMessage": "Desculpe, o endpoint que você inseriu é inválido. Por favor, insira um endpoint válido e tente novamente.", "endpointUpdatedMessage": "Endpoint atualizado com sucesso", @@ -1252,17 +1252,28 @@ "right": "Direita", "whatsNew": "O que há de novo", "reviewSuggestions": "Revisar sugestões", - "reenterPassword": "Re-enter password", - "reenterPin": "Re-enter PIN", - "deviceLock": "Device lock", - "pinLock": "PIN lock", - "next": "Next", - "setNewPassword": "Set new password", - "enterPin": "Enter PIN", - "setNewPin": "Set new PIN", - "appLock": "App lock", - "noSystemLockFound": "No system lock found", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", - "tapToUnlock": "Tap to unlock", - "tooManyIncorrectAttempts": "Too many incorrect attempts" + "useAsCover": "Usar como capa", + "notPersonLabel": "Não é {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "Reinserir senha", + "reenterPin": "Reinserir PIN", + "deviceLock": "Bloqueio de dispositivo", + "pinLock": "Bloqueio PIN", + "next": "Próximo", + "setNewPassword": "Defina nova senha", + "enterPin": "Insira o PIN", + "setNewPin": "Definir novo PIN", + "appLock": "Bloqueio de app", + "noSystemLockFound": "Nenhum bloqueio de sistema encontrado", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio de app, por favor ative um método de autenticação nas configurações do sistema do seu dispositivo.", + "tapToUnlock": "Toque para desbloquear", + "tooManyIncorrectAttempts": "Muitas tentativas incorretas" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_zh.arb b/mobile/lib/l10n/intl_zh.arb index 524e74121b..5e5d555eb6 100644 --- a/mobile/lib/l10n/intl_zh.arb +++ b/mobile/lib/l10n/intl_zh.arb @@ -1252,17 +1252,28 @@ "right": "向右", "whatsNew": "更新日志", "reviewSuggestions": "查看建议", - "reenterPassword": "Re-enter password", - "reenterPin": "Re-enter PIN", - "deviceLock": "Device lock", - "pinLock": "PIN lock", - "next": "Next", - "setNewPassword": "Set new password", - "enterPin": "Enter PIN", - "setNewPin": "Set new PIN", - "appLock": "App lock", - "noSystemLockFound": "No system lock found", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", - "tapToUnlock": "Tap to unlock", - "tooManyIncorrectAttempts": "Too many incorrect attempts" + "useAsCover": "用作封面", + "notPersonLabel": "不是 {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "再次输入密码", + "reenterPin": "再次输入 PIN 码", + "deviceLock": "设备锁", + "pinLock": "PIN 锁定", + "next": "下一步", + "setNewPassword": "设置新密码", + "enterPin": "输入 PIN 码", + "setNewPin": "设置新 PIN 码", + "appLock": "应用锁", + "noSystemLockFound": "未找到系统锁", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "要启用应用锁,请在系统设置中设置设备密码或屏幕锁定。", + "tapToUnlock": "点击解锁", + "tooManyIncorrectAttempts": "错误尝试次数过多" } \ No newline at end of file From 95dc3d1e6c4d103b7e147b5ac97e58c52f8b327c Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Tue, 9 Jul 2024 02:11:09 +0000 Subject: [PATCH 319/466] New Crowdin translations by GitHub Action --- auth/lib/l10n/arb/app_de.arb | 6 +++--- auth/lib/l10n/arb/app_nl.arb | 2 ++ auth/lib/l10n/arb/app_ro.arb | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/auth/lib/l10n/arb/app_de.arb b/auth/lib/l10n/arb/app_de.arb index 50567c5e3f..61f8b7eecf 100644 --- a/auth/lib/l10n/arb/app_de.arb +++ b/auth/lib/l10n/arb/app_de.arb @@ -9,7 +9,7 @@ "onBoardingBody": "Sichern Sie Ihre 2FA-Codes", "onBoardingGetStarted": "Los geht's", "setupFirstAccount": "Ihr erstes Konto einrichten", - "importScanQrCode": "Scannen eines QR-Codes", + "importScanQrCode": "QR-Code scannen", "qrCode": "QR-Code", "importEnterSetupKey": "Einen Setup-Schlüssel eingeben", "importAccountPageTitle": "Kontodaten eingeben", @@ -31,7 +31,7 @@ "timeBasedKeyType": "Zeitbasiert (TOTP)", "counterBasedKeyType": "Zählerbasiert (HOTP)", "saveAction": "Speichern", - "nextTotpTitle": "Weiter", + "nextTotpTitle": "Nächster Code", "deleteCodeTitle": "Code löschen?", "deleteCodeMessage": "Sind Sie sicher, dass Sie diesen Code löschen wollen? Diese Aktion ist unumkehrbar.", "viewLogsAction": "Protokolle anzeigen", @@ -139,7 +139,7 @@ "inFamilyPlanMessage": "Sie haben einen Familien-Plan!", "swipeHint": "Wischen Sie nach links, um Codes zu bearbeiten oder zu entfernen", "scan": "Scannen", - "scanACode": "Scannen eines Codes", + "scanACode": "Scan einen Code", "verify": "Überprüfen Sie", "verifyEmail": "E-Mail-Adresse verifizieren", "enterCodeHint": "Geben Sie den 6-stelligen Code \naus Ihrer Authentifikator-App ein.", diff --git a/auth/lib/l10n/arb/app_nl.arb b/auth/lib/l10n/arb/app_nl.arb index 8a59aa8f01..6b40e677b9 100644 --- a/auth/lib/l10n/arb/app_nl.arb +++ b/auth/lib/l10n/arb/app_nl.arb @@ -263,6 +263,8 @@ "exportLogs": "Logs exporteren", "enterYourRecoveryKey": "Voer je herstelsleutel in", "tempErrorContactSupportIfPersists": "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam.", + "networkHostLookUpErr": "Kan geen verbinding maken met Ente, controleer uw netwerkinstellingen en neem contact op met ondersteuning als de fout zich blijft voordoen.", + "networkConnectionRefusedErr": "Kan geen verbinding maken met Ente, probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met support.", "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam.", "about": "Over", "weAreOpenSource": "We zijn open source!", diff --git a/auth/lib/l10n/arb/app_ro.arb b/auth/lib/l10n/arb/app_ro.arb index a5a6c31c67..cc8cdd1545 100644 --- a/auth/lib/l10n/arb/app_ro.arb +++ b/auth/lib/l10n/arb/app_ro.arb @@ -1,15 +1,20 @@ { + "account": "Cont", "unlock": "Deblochează", "recoveryKey": "Cheie de recuperare", + "onBoardingBody": "Salvează în siguranță codurile 2FA", "onBoardingGetStarted": "Începe", "setupFirstAccount": "Configurează primul cont", "importScanQrCode": "Scanează un cod QR", "qrCode": "Cod QR", "importEnterSetupKey": "Introdu o cheie de configurare", "importAccountPageTitle": "Introdu detaliile contului", + "secretCanNotBeEmpty": "Secretul nu poate fi gol", "incorrectDetails": "Detalii incorecte", + "pleaseVerifyDetails": "Te rog verifică detaliile și încearcă din nou", "codeIssuerHint": "Emitent", "codeSecretKeyHint": "Cheie Secretă", + "codeAccountHint": "Cont (tu@domeniu.com)", "codeTagHint": "Etichetă", "accountKeyType": "Tipul de cheie", "sessionExpired": "Sesiune expirată", @@ -22,6 +27,8 @@ "counterBasedKeyType": "Bazat pe contor (HOTP)", "saveAction": "Salvare", "nextTotpTitle": "următor", + "deleteCodeTitle": "Șterge codul?", + "deleteCodeMessage": "Ești sigur că vrei să ștergi acest cod? Acțiunea este ireversibilă.", "viewLogsAction": "Afișare jurnale", "preparingLogsTitle": "Se pregătesc jurnalele...", "emailLogsTitle": "Jurnale e-mail", @@ -34,6 +41,7 @@ } }, "copyEmailAction": "Copiază e-mailul", + "exportLogsAction": "Exportează log-urile", "reportABug": "Raportează o eroare", "crashAndErrorReporting": "Închidere accidentală şi raportare erori", "reportBug": "Raportare bug", @@ -57,6 +65,7 @@ "supportDiscount": "Folosește codul \"AUTH\" pentru a obține o reducere de 10% în primul an", "changeEmail": "Schimbă e-mailul", "changePassword": "Schimbă parola", + "data": "Date", "importCodes": "Importă coduri", "importTypePlainText": "Text simplu", "passwordForDecryptingExport": "Parola pentru a decripta exportul", @@ -82,15 +91,18 @@ "copied": "S-a copiat", "pleaseTryAgain": "Te rugăm să încerci din nou", "existingUser": "Utilizator existent", + "newUser": "Nou în Ente", "delete": "Ștergere", "enterYourPasswordHint": "Introdu parola", "forgotPassword": "Am uitat parola", "oops": "Ups", + "suggestFeatures": "Sugerează funcționalități", "faq": "Întrebări frecvente", "faq_q_1": "Cât de sigur este Auth?", "faq_q_2": "Pot accesa codurile de pe desktop?", "faq_q_3": "Cum pot șterge codurile?", "faq_q_4": "Cum pot susţine acest proiect?", + "faq_a_4": "Poți susține dezvoltarea acestui proiect prin cumpărarea unui abonament la aplicația noastră de fotografii @ ente.io.", "faq_q_5": "Cum pot activa blocarea cu FaceID în Auth", "faq_a_5": "Poți activa blocarea FaceID din Setări → Securitate → Ecran de blocare.", "somethingWentWrongMessage": "Ceva n-a mers bine, te rog încearcă din nou", @@ -98,6 +110,7 @@ "verifyEmail": "Verifică e-mail", "twoFactorAuthTitle": "Autentificare cu doi factori", "recoverAccount": "Recuperare cont", + "recover": "Recuperează", "invalidQRCode": "Codul QR nu este valid", "enterEmailHint": "Introdu adresa ta de e-mail", "invalidEmailTitle": "Adresa e-mail nu este validă", @@ -110,6 +123,9 @@ "confirmPassword": "Confirmă parola", "close": "Închide", "selectLanguage": "Selectare limbă", + "language": "Limbă", + "social": "Social", + "security": "Securitate", "lockscreen": "Ecran de blocare", "scanAQrCode": "Scanează un cod QR", "copiedToClipboard": "Copiat în clipboard", @@ -121,6 +137,7 @@ "send": "Trimitere", "back": "Înapoi", "password": "Parolă", + "termsOfServicesTitle": "Termeni", "setPasswordTitle": "Setează parola", "changePasswordTitle": "Schimbă parola", "resetPasswordTitle": "Resetează parola", @@ -136,6 +153,7 @@ "about": "Despre", "weAreOpenSource": "Suntem open source!", "privacy": "Confidențialitate", + "terms": "Termeni", "checkForUpdates": "Verifică actualizări", "checkStatus": "Verifică status", "downloadUpdate": "Descărcare", @@ -173,6 +191,10 @@ "emailChangedTo": "E-mail modificat în {newEmail}", "enterPassword": "Introdu parola", "passwordToEncryptExport": "Parolă pentru a cripta exportul", + "useOffline": "Utilizează fără backup-uri", + "offlineModeWarning": "Ai ales să continui fără backup-uri. Te rog salvează-ți backup-urile manual ca să fii sigur că ai codurile în siguranță.", + "showLargeIcons": "Afișează iconițele mari", + "shouldHideCode": "Ascunde codurile", "androidBiometricHint": "Verifică identitatea", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." From 374b803ecc7e75f36dece647a798dbddb3625c02 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 09:58:02 +0530 Subject: [PATCH 320/466] Migrate --- .../photos/src/components/Upload/UploadTypeSelector.tsx | 8 ++++---- web/packages/next/locales/ar-SA/translation.json | 6 +++--- web/packages/next/locales/bg-BG/translation.json | 6 +++--- web/packages/next/locales/ca-ES/translation.json | 6 +++--- web/packages/next/locales/de-DE/translation.json | 6 +++--- web/packages/next/locales/en-US/translation.json | 6 +++--- web/packages/next/locales/es-ES/translation.json | 6 +++--- web/packages/next/locales/fa-IR/translation.json | 6 +++--- web/packages/next/locales/fi-FI/translation.json | 6 +++--- web/packages/next/locales/fr-FR/translation.json | 6 +++--- web/packages/next/locales/gu-IN/translation.json | 6 +++--- web/packages/next/locales/hi-IN/translation.json | 6 +++--- web/packages/next/locales/id-ID/translation.json | 6 +++--- web/packages/next/locales/is-IS/translation.json | 6 +++--- web/packages/next/locales/it-IT/translation.json | 6 +++--- web/packages/next/locales/ko-KR/translation.json | 6 +++--- web/packages/next/locales/nl-NL/translation.json | 6 +++--- web/packages/next/locales/pt-BR/translation.json | 6 +++--- web/packages/next/locales/pt-PT/translation.json | 6 +++--- web/packages/next/locales/ru-RU/translation.json | 6 +++--- web/packages/next/locales/sv-SE/translation.json | 6 +++--- web/packages/next/locales/te-IN/translation.json | 6 +++--- web/packages/next/locales/th-TH/translation.json | 6 +++--- web/packages/next/locales/ti-ER/translation.json | 6 +++--- web/packages/next/locales/tr-TR/translation.json | 6 +++--- web/packages/next/locales/zh-CN/translation.json | 6 +++--- 26 files changed, 79 insertions(+), 79 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx index 5e524fe8b3..e0676f11c7 100644 --- a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx +++ b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx @@ -173,21 +173,21 @@ const DefaultOptions: React.FC = ({ onClick={() => onSelect("files")} startIcon={} endIcon={} - label={t("UPLOAD_FILES")} + label={t("file")} /> )} onSelect("folders")} startIcon={} endIcon={} - label={t("UPLOAD_DIRS")} + label={t("folder")} /> {intent !== "collect" && ( onSelect("zips")} startIcon={} endIcon={} - label={t("UPLOAD_GOOGLE_TAKEOUT")} + label={t("google_takeout")} /> )} @@ -206,7 +206,7 @@ const TakeoutOptions: React.FC> = ({ return ( <> - {t("UPLOAD_GOOGLE_TAKEOUT")} + {t("google_takeout")} diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index a4464aaebe..a2dce5cfe4 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index c22101f6c5..8618448e0c 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Passwort Sperre", "LOCK": "Sperren", "DOWNLOAD_UPLOAD_LOGS": "Debug-Logs", - "UPLOAD_FILES": "Datei", - "UPLOAD_DIRS": "Ordner", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "Datei", + "folder": "Ordner", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "Duplikate bereinigen", "NO_DUPLICATES_FOUND": "Du hast keine Duplikate, die gelöscht werden können", "FILES": "dateien", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 42460ea026..c0170b339c 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Password lock", "LOCK": "Lock", "DOWNLOAD_UPLOAD_LOGS": "Debug logs", - "UPLOAD_FILES": "File", - "UPLOAD_DIRS": "Folder", - "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "file": "File", + "folder": "Folder", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Deduplicate files", "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", "FILES": "files", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index 58f7015011..193dc19b48 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Contraseña bloqueada", "LOCK": "Bloquear", "DOWNLOAD_UPLOAD_LOGS": "Logs de depuración", - "UPLOAD_FILES": "Archivo", - "UPLOAD_DIRS": "Carpeta", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "Archivo", + "folder": "Carpeta", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "Deduplicar archivos", "NO_DUPLICATES_FOUND": "No tienes archivos duplicados que puedan ser borrados", "FILES": "archivos", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 35a972bdf3..4ce5b1e670 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 2c42b1aefd..86e75f8f8a 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Mot de passe verrou", "LOCK": "Verrouiller", "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", - "UPLOAD_FILES": "Fichier", - "UPLOAD_DIRS": "Dossier", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "Fichier", + "folder": "Dossier", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "Déduplication de fichiers", "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", "FILES": "fichiers", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 95a29364eb..fe50d9dfc0 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Kunci dengan sandi", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "Log debug", - "UPLOAD_FILES": "File", - "UPLOAD_DIRS": "Folder", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "File", + "folder": "Folder", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 8479bd2ab2..786eb0c306 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index c8243dcdf9..d892ee6e1d 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "Cartella", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "Cartella", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 2410c93c4a..3399ec9a82 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 45f9691b91..e1600bd97b 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Cijfercode vergrendeling", "LOCK": "Vergrendeling", "DOWNLOAD_UPLOAD_LOGS": "Logboeken voor foutmeldingen", - "UPLOAD_FILES": "Bestand", - "UPLOAD_DIRS": "Map", - "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "file": "Bestand", + "folder": "Map", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Dubbele bestanden verwijderen", "NO_DUPLICATES_FOUND": "Je hebt geen dubbele bestanden die kunnen worden gewist", "FILES": "bestanden", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index 86306c12e6..2a4cef78d2 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Bloqueio de senha", "LOCK": "Bloquear", "DOWNLOAD_UPLOAD_LOGS": "Logs de depuração", - "UPLOAD_FILES": "Arquivo", - "UPLOAD_DIRS": "Pasta", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "Arquivo", + "folder": "Pasta", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "Arquivos duplicados", "NO_DUPLICATES_FOUND": "Você não tem arquivos duplicados que possam ser limpos", "FILES": "arquivos", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index e826542b30..c75c877fbd 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 9532746ebd..8b70372166 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "Блокировка паролем", "LOCK": "Замок", "DOWNLOAD_UPLOAD_LOGS": "Журналы отладки", - "UPLOAD_FILES": "Файл", - "UPLOAD_DIRS": "Папка", - "UPLOAD_GOOGLE_TAKEOUT": "Еда на вынос из Google", + "file": "Файл", + "folder": "Папка", + "google_takeout": "Еда на вынос из Google", "DEDUPLICATE_FILES": "Дедуплицировать файлы", "NO_DUPLICATES_FOUND": "У вас нет дубликатов файлов, которые можно было бы удалить", "FILES": "файлы", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 491929f297..f1a1c3b310 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "Fil", - "UPLOAD_DIRS": "Mapp", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "Fil", + "folder": "Mapp", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "filer", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index 45d7075d16..c1bda54e6c 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "", - "UPLOAD_FILES": "", - "UPLOAD_DIRS": "", - "UPLOAD_GOOGLE_TAKEOUT": "", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 02af87a639..d2d10eb774 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -399,9 +399,9 @@ "PASSWORD_LOCK": "密码锁", "LOCK": "锁定", "DOWNLOAD_UPLOAD_LOGS": "调试日志", - "UPLOAD_FILES": "文件", - "UPLOAD_DIRS": "文件夹", - "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "file": "文件", + "folder": "文件夹", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "删除重复文件", "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", "FILES": "文件", From c7defa31f5fe1804131bbcad0f4cebd0249ac3f4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:03:48 +0530 Subject: [PATCH 321/466] Match the casing of the en version --- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/fr-FR/translation.json | 2 +- web/packages/next/locales/id-ID/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/zh-CN/translation.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 8618448e0c..8ea56d6932 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Debug-Logs", "file": "Datei", "folder": "Ordner", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Duplikate bereinigen", "NO_DUPLICATES_FOUND": "Du hast keine Duplikate, die gelöscht werden können", "FILES": "dateien", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index 193dc19b48..915ae96f4d 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Logs de depuración", "file": "Archivo", "folder": "Carpeta", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Deduplicar archivos", "NO_DUPLICATES_FOUND": "No tienes archivos duplicados que puedan ser borrados", "FILES": "archivos", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 86e75f8f8a..43c363949e 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", "file": "Fichier", "folder": "Dossier", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Déduplication de fichiers", "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", "FILES": "fichiers", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index fe50d9dfc0..40e0449319 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Log debug", "file": "File", "folder": "Folder", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index 2a4cef78d2..00e7400f7a 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Logs de depuração", "file": "Arquivo", "folder": "Pasta", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "Arquivos duplicados", "NO_DUPLICATES_FOUND": "Você não tem arquivos duplicados que possam ser limpos", "FILES": "arquivos", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index d2d10eb774..1884235aef 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -401,7 +401,7 @@ "DOWNLOAD_UPLOAD_LOGS": "调试日志", "file": "文件", "folder": "文件夹", - "google_takeout": "Google Takeout", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "删除重复文件", "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", "FILES": "文件", From b5a382193355568eb79e99f296ba1f2ac7d26822 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:06:02 +0530 Subject: [PATCH 322/466] More --- web/apps/photos/src/components/Upload/UploadTypeSelector.tsx | 2 +- web/packages/next/locales/ar-SA/translation.json | 2 +- web/packages/next/locales/bg-BG/translation.json | 2 +- web/packages/next/locales/ca-ES/translation.json | 2 +- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/en-US/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/fa-IR/translation.json | 2 +- web/packages/next/locales/fi-FI/translation.json | 2 +- web/packages/next/locales/fr-FR/translation.json | 2 +- web/packages/next/locales/gu-IN/translation.json | 2 +- web/packages/next/locales/hi-IN/translation.json | 2 +- web/packages/next/locales/id-ID/translation.json | 2 +- web/packages/next/locales/is-IS/translation.json | 2 +- web/packages/next/locales/it-IT/translation.json | 2 +- web/packages/next/locales/ko-KR/translation.json | 2 +- web/packages/next/locales/nl-NL/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/pt-PT/translation.json | 2 +- web/packages/next/locales/ru-RU/translation.json | 2 +- web/packages/next/locales/sv-SE/translation.json | 2 +- web/packages/next/locales/te-IN/translation.json | 2 +- web/packages/next/locales/th-TH/translation.json | 2 +- web/packages/next/locales/ti-ER/translation.json | 2 +- web/packages/next/locales/tr-TR/translation.json | 2 +- web/packages/next/locales/zh-CN/translation.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx index e0676f11c7..6520946ecc 100644 --- a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx +++ b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx @@ -160,7 +160,7 @@ const DefaultOptions: React.FC = ({ <> {intent == "collect" - ? t("SELECT_PHOTOS") + ? t("select_photos") : intent == "import" ? t("IMPORT") : t("UPLOAD")} diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index a2dce5cfe4..b32c926959 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 8ea56d6932..dd88ed2d5b 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Mehr Fotos hinzufügen", "add_photos_one": "Eine Datei hinzufügen", "add_photos_other": "{{count, number}} Dateien hinzufügen", - "SELECT_PHOTOS": "Foto auswählen", + "select_photos": "Foto auswählen", "FILE_UPLOAD": "Datei hochladen", "UPLOAD_STAGE_MESSAGE": { "0": "Hochladen wird vorbereitet", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index c0170b339c..2872f6588f 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Add more photos", "add_photos_one": "Add 1 item", "add_photos_other": "Add {{count, number}} items", - "SELECT_PHOTOS": "Select photos", + "select_photos": "Select photos", "FILE_UPLOAD": "File Upload", "UPLOAD_STAGE_MESSAGE": { "0": "Preparing to upload", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index 915ae96f4d..ccba7b96b7 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Añadir más fotos", "add_photos_one": "Añadir 1 foto", "add_photos_other": "Añadir {{count}} fotos", - "SELECT_PHOTOS": "Seleccionar fotos", + "select_photos": "Seleccionar fotos", "FILE_UPLOAD": "Subir archivo", "UPLOAD_STAGE_MESSAGE": { "0": "Preparando la subida", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 4ce5b1e670..2c23c52c91 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 43c363949e..3d0699690c 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Ajouter plus de photos", "add_photos_one": "Ajouter une photo", "add_photos_other": "Ajouter {{count}} photos", - "SELECT_PHOTOS": "Sélectionner des photos", + "select_photos": "Sélectionner des photos", "FILE_UPLOAD": "Fichier chargé", "UPLOAD_STAGE_MESSAGE": { "0": "Préparation du chargement", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 40e0449319..c1279c627a 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Tambahkan lebih banyak foto", "add_photos_one": "Tambahkan item", "add_photos_other": "Tambahkan {{count, number}} item", - "SELECT_PHOTOS": "Pilih foto", + "select_photos": "Pilih foto", "FILE_UPLOAD": "Unggah File", "UPLOAD_STAGE_MESSAGE": { "0": "Bersiap untuk mengunggah", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 786eb0c306..f39d375ada 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index d892ee6e1d..1f2a8e61db 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Aggiungi altre foto", "add_photos_one": "Aggiungi elemento", "add_photos_other": "Aggiungi {{count, number}} elementi", - "SELECT_PHOTOS": "Seleziona foto", + "select_photos": "Seleziona foto", "FILE_UPLOAD": "Carica file", "UPLOAD_STAGE_MESSAGE": { "0": "Preparazione all'upload", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 3399ec9a82..e64be8dfb9 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "사진 더 추가하기", "add_photos_one": "아이템 하나 추가", "add_photos_other": "아이템 {{count, number}} 개 추가하기", - "SELECT_PHOTOS": "사진 선택하기", + "select_photos": "사진 선택하기", "FILE_UPLOAD": "파일 업로드", "UPLOAD_STAGE_MESSAGE": { "0": "업로드 준비중", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index e1600bd97b..56fdb896db 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Meer foto's toevoegen", "add_photos_one": "1 foto toevoegen", "add_photos_other": "{{count, number}} foto's toevoegen", - "SELECT_PHOTOS": "Selecteer foto's", + "select_photos": "Selecteer foto's", "FILE_UPLOAD": "Bestand uploaden", "UPLOAD_STAGE_MESSAGE": { "0": "Upload wordt voorbereid", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index 00e7400f7a..dd39728c41 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Adicionar mais fotos", "add_photos_one": "Adicionar item", "add_photos_other": "Adicionar {{count, number}} itens", - "SELECT_PHOTOS": "Selecionar fotos", + "select_photos": "Selecionar fotos", "FILE_UPLOAD": "Envio de Arquivo", "UPLOAD_STAGE_MESSAGE": { "0": "Preparando para enviar", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index c75c877fbd..dbee46ea59 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Adicionar mais fotos", "add_photos_one": "Adicionar item", "add_photos_other": "Adicionar {{count, number}} itens", - "SELECT_PHOTOS": "Selecionar fotos", + "select_photos": "Selecionar fotos", "FILE_UPLOAD": "Enviar Ficheiro", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 8b70372166..3e6d5774c9 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Добавить больше фото", "add_photos_one": "Добавить 1 элемент", "add_photos_other": "Добавить {{count, number}} элементов", - "SELECT_PHOTOS": "Выбрать фотографии", + "select_photos": "Выбрать фотографии", "FILE_UPLOAD": "Загрузка файла", "UPLOAD_STAGE_MESSAGE": { "0": "Подготовка к загрузке", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index f1a1c3b310..048c9d3c35 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "Lägg till fler bilder", "add_photos_one": "Lägg till ett (1) objekt", "add_photos_other": "Lägg till {{count, number}} objekt", - "SELECT_PHOTOS": "Välj bilder", + "select_photos": "Välj bilder", "FILE_UPLOAD": "Ladda upp", "UPLOAD_STAGE_MESSAGE": { "0": "Förbereder att ladda upp", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index c1bda54e6c..ca4984fe22 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "", "add_photos_one": "", "add_photos_other": "", - "SELECT_PHOTOS": "", + "select_photos": "", "FILE_UPLOAD": "", "UPLOAD_STAGE_MESSAGE": { "0": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 1884235aef..af714b52f4 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -54,7 +54,7 @@ "ADD_MORE_PHOTOS": "添加更多的照片", "add_photos_one": "添加1个项目", "add_photos_other": "添加 {{count, number}} 个项目", - "SELECT_PHOTOS": "选择照片", + "select_photos": "选择照片", "FILE_UPLOAD": "上传文件", "UPLOAD_STAGE_MESSAGE": { "0": "正在准备上传", From e4f86794be39219c77a1018adaa5c0c076f74d90 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:09:04 +0530 Subject: [PATCH 323/466] More --- web/apps/photos/src/components/Upload/UploadButton.tsx | 2 +- .../photos/src/components/Upload/UploadTypeSelector.tsx | 6 +++--- web/packages/next/locales/ar-SA/translation.json | 6 +++--- web/packages/next/locales/bg-BG/translation.json | 6 +++--- web/packages/next/locales/ca-ES/translation.json | 6 +++--- web/packages/next/locales/de-DE/translation.json | 6 +++--- web/packages/next/locales/en-US/translation.json | 6 +++--- web/packages/next/locales/es-ES/translation.json | 6 +++--- web/packages/next/locales/fa-IR/translation.json | 6 +++--- web/packages/next/locales/fi-FI/translation.json | 6 +++--- web/packages/next/locales/fr-FR/translation.json | 6 +++--- web/packages/next/locales/gu-IN/translation.json | 6 +++--- web/packages/next/locales/hi-IN/translation.json | 6 +++--- web/packages/next/locales/id-ID/translation.json | 6 +++--- web/packages/next/locales/is-IS/translation.json | 6 +++--- web/packages/next/locales/it-IT/translation.json | 6 +++--- web/packages/next/locales/ko-KR/translation.json | 6 +++--- web/packages/next/locales/nl-NL/translation.json | 6 +++--- web/packages/next/locales/pt-BR/translation.json | 6 +++--- web/packages/next/locales/pt-PT/translation.json | 6 +++--- web/packages/next/locales/ru-RU/translation.json | 6 +++--- web/packages/next/locales/sv-SE/translation.json | 6 +++--- web/packages/next/locales/te-IN/translation.json | 6 +++--- web/packages/next/locales/th-TH/translation.json | 6 +++--- web/packages/next/locales/ti-ER/translation.json | 6 +++--- web/packages/next/locales/tr-TR/translation.json | 6 +++--- web/packages/next/locales/zh-CN/translation.json | 6 +++--- 27 files changed, 79 insertions(+), 79 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadButton.tsx b/web/apps/photos/src/components/Upload/UploadButton.tsx index 171a2253ab..72d0319bc5 100644 --- a/web/apps/photos/src/components/Upload/UploadButton.tsx +++ b/web/apps/photos/src/components/Upload/UploadButton.tsx @@ -56,7 +56,7 @@ function UploadButton({ color={color ?? "secondary"} startIcon={icon ?? } > - {text ?? t("UPLOAD")} + {text ?? t("upload")} = ({ {intent == "collect" ? t("select_photos") : intent == "import" - ? t("IMPORT") - : t("UPLOAD")} + ? t("import") + : t("upload")} @@ -192,7 +192,7 @@ const DefaultOptions: React.FC = ({ )} - {t("DRAG_AND_DROP_HINT")} + {t("drag_and_drop_hint")} diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index b32c926959..7a455c27c8 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index dd88ed2d5b..b3e6d84d33 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Schließen", "NO": "Nein", "NOTHING_HERE": "Hier gibt es noch nichts zu sehen 👀", - "UPLOAD": "Hochladen", - "IMPORT": "Importieren", + "upload": "Hochladen", + "import": "Importieren", "ADD_PHOTOS": "Fotos hinzufügen", "ADD_MORE_PHOTOS": "Mehr Fotos hinzufügen", "add_photos_one": "Eine Datei hinzufügen", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} für 1 Jahr", "CURRENT_USAGE": "Aktuelle Nutzung ist {{usage}}", "WEAK_DEVICE": "Dein Browser ist nicht leistungsstark genug, um deine Bilder zu verschlüsseln. Versuche, dich an einem Computer bei Ente anzumelden, oder lade dir die Ente-App für dein Gerät (Handy oder Desktop) herunter.", - "DRAG_AND_DROP_HINT": "Oder ziehe Dateien per Drag-and-Drop in das Ente-Fenster", + "drag_and_drop_hint": "Oder ziehe Dateien per Drag-and-Drop in das Ente-Fenster", "AUTHENTICATE": "Authentifizieren", "UPLOADED_TO_SINGLE_COLLECTION": "In einzelnes Album hochgeladen", "UPLOADED_TO_SEPARATE_COLLECTIONS": "In separate Alben hochgeladen", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 2872f6588f..13afc04fcd 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Close", "NO": "No", "NOTHING_HERE": "Nothing to see here yet 👀", - "UPLOAD": "Upload", - "IMPORT": "Import", + "upload": "Upload", + "import": "Import", "ADD_PHOTOS": "Add photos", "ADD_MORE_PHOTOS": "Add more photos", "add_photos_one": "Add 1 item", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} for 1 year", "CURRENT_USAGE": "Current usage is {{usage}}", "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to Ente on your computer, or download the Ente mobile/desktop app.", - "DRAG_AND_DROP_HINT": "Or drag and drop into the Ente window", + "drag_and_drop_hint": "Or drag and drop into the Ente window", "AUTHENTICATE": "Authenticate", "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index ccba7b96b7..e72bd754b6 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Cerrar", "NO": "No", "NOTHING_HERE": "Nada para ver aquí aún 👀", - "UPLOAD": "Cargar", - "IMPORT": "Importar", + "upload": "Cargar", + "import": "Importar", "ADD_PHOTOS": "Añadir fotos", "ADD_MORE_PHOTOS": "Añadir más fotos", "add_photos_one": "Añadir 1 foto", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} por 1 año", "CURRENT_USAGE": "El uso actual es {{usage}}", "WEAK_DEVICE": "El navegador web que está utilizando no es lo suficientemente poderoso para cifrar sus fotos. Por favor, intente iniciar sesión en ente en su computadora, o descargue la aplicación ente para móvil/escritorio.", - "DRAG_AND_DROP_HINT": "O arrastre y suelte en la ventana ente", + "drag_and_drop_hint": "O arrastre y suelte en la ventana ente", "AUTHENTICATE": "Autenticado", "UPLOADED_TO_SINGLE_COLLECTION": "Subir a una sola colección", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Subir a colecciones separadas", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 2c23c52c91..bf05b394fc 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 3d0699690c..95f7ac085f 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Fermer", "NO": "Non", "NOTHING_HERE": "Il n'y a encore rien à voir ici 👀", - "UPLOAD": "Charger", - "IMPORT": "Importer", + "upload": "Charger", + "import": "Importer", "ADD_PHOTOS": "Ajouter des photos", "ADD_MORE_PHOTOS": "Ajouter plus de photos", "add_photos_one": "Ajouter une photo", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} pour 1 an", "CURRENT_USAGE": "L'utilisation actuelle est de {{usage}}", "WEAK_DEVICE": "Le navigateur que vous utilisez n'est pas assez puissant pour chiffrer vos photos. Veuillez essayer de vous connecter à Ente sur votre ordinateur, ou télécharger l'appli Ente mobile/ordinateur.", - "DRAG_AND_DROP_HINT": "Sinon glissez déposez dans la fenêtre Ente", + "drag_and_drop_hint": "Sinon glissez déposez dans la fenêtre Ente", "AUTHENTICATE": "Authentification", "UPLOADED_TO_SINGLE_COLLECTION": "Chargé dans une seule collection", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Chargé dans des collections séparées", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index c1279c627a..e473b0e8f8 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Tutup", "NO": "Tidak", "NOTHING_HERE": "Belum ada apa-apa di sini 👀", - "UPLOAD": "Unggah", - "IMPORT": "Impor", + "upload": "Unggah", + "import": "Impor", "ADD_PHOTOS": "Tambahkan foto", "ADD_MORE_PHOTOS": "Tambahkan lebih banyak foto", "add_photos_one": "Tambahkan item", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "Pemakaian saat ini sebesar {{usage}}", "WEAK_DEVICE": "Browser yang saat ini kamu gunakan tidak cukup kuat untuk mengenkripsi fotomu. Silakan coba gunakan Ente di komputer lain, atau unduh app seluler/desktop Ente.", - "DRAG_AND_DROP_HINT": "Atau seret ke jendela Ente", + "drag_and_drop_hint": "Atau seret ke jendela Ente", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index f39d375ada..6e575a9e61 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Loka", "NO": "Nei", "NOTHING_HERE": "Ekkert að sjá hér ennþá 👀", - "UPLOAD": "Hlaða upp", - "IMPORT": "", + "upload": "Hlaða upp", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index 1f2a8e61db..a9ac20f1b0 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Chiudi", "NO": "No", "NOTHING_HERE": "Nulla da vedere qui! 👀", - "UPLOAD": "Carica", - "IMPORT": "Importa", + "upload": "Carica", + "import": "Importa", "ADD_PHOTOS": "Aggiungi foto", "ADD_MORE_PHOTOS": "Aggiungi altre foto", "add_photos_one": "Aggiungi elemento", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} per 1 anno", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "Autenticati", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index e64be8dfb9..34bca6a2bb 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -48,8 +48,8 @@ "CLOSE": "닫기", "NO": "아니오", "NOTHING_HERE": "아직 볼 수 있는 것이 없어요 👀", - "UPLOAD": "업로드", - "IMPORT": "가져오기", + "upload": "업로드", + "import": "가져오기", "ADD_PHOTOS": "사진 추가", "ADD_MORE_PHOTOS": "사진 더 추가하기", "add_photos_one": "아이템 하나 추가", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 56fdb896db..fe198535bb 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Sluiten", "NO": "Nee", "NOTHING_HERE": "Nog niets te zien hier 👀", - "UPLOAD": "Uploaden", - "IMPORT": "Importeren", + "upload": "Uploaden", + "import": "Importeren", "ADD_PHOTOS": "Foto's toevoegen", "ADD_MORE_PHOTOS": "Meer foto's toevoegen", "add_photos_one": "1 foto toevoegen", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} voor 1 jaar", "CURRENT_USAGE": "Huidig gebruik is {{usage}}", "WEAK_DEVICE": "De webbrowser die u gebruikt is niet krachtig genoeg om uw foto's te versleutelen. Probeer in te loggen op uw computer, of download de Ente mobiel/desktop app.", - "DRAG_AND_DROP_HINT": "Of sleep en plaats in het Ente venster", + "drag_and_drop_hint": "Of sleep en plaats in het Ente venster", "AUTHENTICATE": "Verifiëren", "UPLOADED_TO_SINGLE_COLLECTION": "Geüpload naar enkele collectie", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Geüpload naar verschillende collecties", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index dd39728c41..e80d7dc997 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Fechar", "NO": "Não", "NOTHING_HERE": "Nada para ver aqui ainda 👀", - "UPLOAD": "Enviar", - "IMPORT": "Importar", + "upload": "Enviar", + "import": "Importar", "ADD_PHOTOS": "Adicionar fotos", "ADD_MORE_PHOTOS": "Adicionar mais fotos", "add_photos_one": "Adicionar item", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} por 1 ano", "CURRENT_USAGE": "O uso atual é {{usage}}", "WEAK_DEVICE": "O navegador da web que você está usando não é poderoso o suficiente para criptografar suas fotos. Por favor, tente entrar para o ente no computador ou baixe o aplicativo móvel.", - "DRAG_AND_DROP_HINT": "Ou arraste e solte na janela ente", + "drag_and_drop_hint": "Ou arraste e solte na janela ente", "AUTHENTICATE": "Autenticar", "UPLOADED_TO_SINGLE_COLLECTION": "Enviado para coleção única", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Enviada para separar coleções", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index dbee46ea59..61dcf00937 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Fechar", "NO": "Não", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "Importar", + "upload": "", + "import": "Importar", "ADD_PHOTOS": "Adicionar fotos", "ADD_MORE_PHOTOS": "Adicionar mais fotos", "add_photos_one": "Adicionar item", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 3e6d5774c9..99f1a2485f 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Закрыть", "NO": "Нет", "NOTHING_HERE": "Здесь нечего смотреть! 👀", - "UPLOAD": "Загрузить", - "IMPORT": "Импорт", + "upload": "Загрузить", + "import": "Импорт", "ADD_PHOTOS": "Добавить фотографии", "ADD_MORE_PHOTOS": "Добавить больше фото", "add_photos_one": "Добавить 1 элемент", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} на 1 год", "CURRENT_USAGE": "Текущее использование составляет {{usage}}", "WEAK_DEVICE": "Используемый вами веб-браузер недостаточно мощный, чтобы зашифровать ваши фотографии. Пожалуйста, попробуйте войти в Ente на своем компьютере или загрузить мобильное/настольное приложение Ente.", - "DRAG_AND_DROP_HINT": "Или перетащите в основное окно", + "drag_and_drop_hint": "Или перетащите в основное окно", "AUTHENTICATE": "Проверка подлинности", "UPLOADED_TO_SINGLE_COLLECTION": "Загружено в единую коллекцию", "UPLOADED_TO_SEPARATE_COLLECTIONS": "Загружено в отдельные коллекции", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 048c9d3c35..aa1ae577bf 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -48,8 +48,8 @@ "CLOSE": "Stäng", "NO": "Nej", "NOTHING_HERE": "Inget att se här ännu 👀", - "UPLOAD": "Ladda upp", - "IMPORT": "Importera", + "upload": "Ladda upp", + "import": "Importera", "ADD_PHOTOS": "Lägg till bilder", "ADD_MORE_PHOTOS": "Lägg till fler bilder", "add_photos_one": "Lägg till ett (1) objekt", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index ca4984fe22..0096bb7ae5 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -48,8 +48,8 @@ "CLOSE": "", "NO": "", "NOTHING_HERE": "", - "UPLOAD": "", - "IMPORT": "", + "upload": "", + "import": "", "ADD_PHOTOS": "", "ADD_MORE_PHOTOS": "", "add_photos_one": "", @@ -454,7 +454,7 @@ "free_plan_description": "", "CURRENT_USAGE": "", "WEAK_DEVICE": "", - "DRAG_AND_DROP_HINT": "", + "drag_and_drop_hint": "", "AUTHENTICATE": "", "UPLOADED_TO_SINGLE_COLLECTION": "", "UPLOADED_TO_SEPARATE_COLLECTIONS": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index af714b52f4..db2029e7e9 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -48,8 +48,8 @@ "CLOSE": "关闭", "NO": "否", "NOTHING_HERE": "这里空空如也 👀", - "UPLOAD": "上传", - "IMPORT": "导入", + "upload": "上传", + "import": "导入", "ADD_PHOTOS": "添加照片", "ADD_MORE_PHOTOS": "添加更多的照片", "add_photos_one": "添加1个项目", @@ -454,7 +454,7 @@ "free_plan_description": "{{storage}} 1年", "CURRENT_USAGE": "当前使用量是 {{usage}}", "WEAK_DEVICE": "您使用的网络浏览器功能不够强大,无法加密您的照片。 请尝试在电脑上登录Ente,或下载Ente移动/桌面应用程序。", - "DRAG_AND_DROP_HINT": "或者拖动并拖动到 Ente 窗口", + "drag_and_drop_hint": "或者拖动并拖动到 Ente 窗口", "AUTHENTICATE": "身份认证", "UPLOADED_TO_SINGLE_COLLECTION": "已上传到单个收藏", "UPLOADED_TO_SEPARATE_COLLECTIONS": "已上传到单独收藏", From 2a07684de0831aeb6a630e788c94193408624233 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:14:38 +0530 Subject: [PATCH 324/466] More --- web/apps/photos/src/components/ExportModal.tsx | 2 +- web/packages/next/locales/ar-SA/translation.json | 2 +- web/packages/next/locales/bg-BG/translation.json | 2 +- web/packages/next/locales/ca-ES/translation.json | 2 +- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/en-US/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/fa-IR/translation.json | 2 +- web/packages/next/locales/fi-FI/translation.json | 2 +- web/packages/next/locales/fr-FR/translation.json | 2 +- web/packages/next/locales/gu-IN/translation.json | 2 +- web/packages/next/locales/hi-IN/translation.json | 2 +- web/packages/next/locales/id-ID/translation.json | 2 +- web/packages/next/locales/is-IS/translation.json | 2 +- web/packages/next/locales/it-IT/translation.json | 2 +- web/packages/next/locales/ko-KR/translation.json | 2 +- web/packages/next/locales/nl-NL/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/pt-PT/translation.json | 2 +- web/packages/next/locales/ru-RU/translation.json | 2 +- web/packages/next/locales/sv-SE/translation.json | 2 +- web/packages/next/locales/te-IN/translation.json | 2 +- web/packages/next/locales/th-TH/translation.json | 2 +- web/packages/next/locales/ti-ER/translation.json | 2 +- web/packages/next/locales/tr-TR/translation.json | 2 +- web/packages/next/locales/zh-CN/translation.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/web/apps/photos/src/components/ExportModal.tsx b/web/apps/photos/src/components/ExportModal.tsx index e6a49f8861..b225bfc1a2 100644 --- a/web/apps/photos/src/components/ExportModal.tsx +++ b/web/apps/photos/src/components/ExportModal.tsx @@ -195,7 +195,7 @@ function ExportDirectory({ exportFolder, changeExportDirectory, exportStage }) { <> {!exportFolder ? ( ) : ( diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index 7a455c27c8..19eba6b786 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index b3e6d84d33..105e5a1766 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Bist du sicher, dass du die Zwei-Faktor-Authentifizierung deaktivieren willst", "TWO_FACTOR_DISABLE_FAILED": "Fehler beim Deaktivieren des zweiten Faktors, bitte versuchen Sie es erneut", "EXPORT_DATA": "Daten exportieren", - "SELECT_FOLDER": "Ordner auswählen", + "select_folder": "Ordner auswählen", "DESTINATION": "Zielort", "START": "Start", "LAST_EXPORT_TIME": "Letztes Exportdatum", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 13afc04fcd..0e3315116d 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", "EXPORT_DATA": "Export data", - "SELECT_FOLDER": "Select folder", + "select_folder": "Select folder", "DESTINATION": "Destination", "START": "Start", "LAST_EXPORT_TIME": "Last export time", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index e72bd754b6..a9ac2dd175 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "¿Estás seguro de que desea deshabilitar la autenticación de doble factor?", "TWO_FACTOR_DISABLE_FAILED": "Error al desactivar dos factores, inténtalo de nuevo", "EXPORT_DATA": "Exportar datos", - "SELECT_FOLDER": "Seleccionar carpeta", + "select_folder": "Seleccionar carpeta", "DESTINATION": "Destinación", "START": "Inicio", "LAST_EXPORT_TIME": "Fecha de la última exportación", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index bf05b394fc..2d45e424ad 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 95f7ac085f..3fd7d6014b 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Êtes-vous certains de vouloir désactiver la double-authentification", "TWO_FACTOR_DISABLE_FAILED": "Échec de désactivation de la double-authentification, veuillez réessayer", "EXPORT_DATA": "Exporter les données", - "SELECT_FOLDER": "Sélectionner un dossier", + "select_folder": "Sélectionner un dossier", "DESTINATION": "Destination", "START": "Démarrer", "LAST_EXPORT_TIME": "Horaire du dernier export", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index e473b0e8f8..0a984cf055 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "Gagal menonaktifkan autentikasi dua langkah, silakan coba lagi", "EXPORT_DATA": "Ekspor data", - "SELECT_FOLDER": "Pilih folder", + "select_folder": "Pilih folder", "DESTINATION": "", "START": "Mulai", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 6e575a9e61..381c200211 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index a9ac20f1b0..c98fa0022f 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "Esporta dati", - "SELECT_FOLDER": "Seleziona cartella", + "select_folder": "Seleziona cartella", "DESTINATION": "Destinazione", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 34bca6a2bb..08e28552bc 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index fe198535bb..1f8a6884b9 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Weet u zeker dat u tweestapsverificatie wilt uitschakelen", "TWO_FACTOR_DISABLE_FAILED": "Uitschakelen van tweestapsverificatie is mislukt, probeer het opnieuw", "EXPORT_DATA": "Gegevens exporteren", - "SELECT_FOLDER": "Map selecteren", + "select_folder": "Map selecteren", "DESTINATION": "Bestemming", "START": "Start", "LAST_EXPORT_TIME": "Tijd laatste export", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index e80d7dc997..e0127cfc96 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Você tem certeza de que deseja desativar a autenticação de dois fatores", "TWO_FACTOR_DISABLE_FAILED": "Não foi possível desativar dois fatores, por favor tente novamente", "EXPORT_DATA": "Exportar dados", - "SELECT_FOLDER": "Selecione a pasta", + "select_folder": "Selecione a pasta", "DESTINATION": "Destino", "START": "Iniciar", "LAST_EXPORT_TIME": "Data da última exportação", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index 61dcf00937..495c132f67 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 99f1a2485f..559c589352 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "Вы уверены, что хотите отключить двухфакторную аутентификацию", "TWO_FACTOR_DISABLE_FAILED": "Не удалось отключить два фактора, пожалуйста, повторите попытку", "EXPORT_DATA": "Экспортировать данные", - "SELECT_FOLDER": "Выбрать папку", + "select_folder": "Выбрать папку", "DESTINATION": "Место назначения", "START": "Начать", "LAST_EXPORT_TIME": "Время последнего экспорта", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index aa1ae577bf..65a264435c 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "Exportera data", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index 0096bb7ae5..cddac5e8e7 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "", "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", - "SELECT_FOLDER": "", + "select_folder": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index db2029e7e9..1ad22cf3d1 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -271,7 +271,7 @@ "DISABLE_TWO_FACTOR_MESSAGE": "您确定要禁用您的双重认证吗?", "TWO_FACTOR_DISABLE_FAILED": "禁用双重认证失败,请再试一次", "EXPORT_DATA": "导出数据", - "SELECT_FOLDER": "选择文件夹", + "select_folder": "选择文件夹", "DESTINATION": "目标位置", "START": "开始", "LAST_EXPORT_TIME": "最后一次导出时间", From d4f0384f137b26a4c8251d6a59467cb6fe303055 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:20:07 +0530 Subject: [PATCH 325/466] Move to tr --- .../src/components/Upload/UploadProgress/dialog.tsx | 3 +-- .../src/components/Upload/UploadTypeSelector.tsx | 11 ++++------- web/packages/next/locales/en-US/translation.json | 4 ++++ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx index ded9e2c17f..ae4d9f34d6 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx @@ -96,10 +96,9 @@ export function UploadProgressDialog() { uploadResult={UPLOAD_RESULT.FAILED} sectionTitle={t("FAILED_UPLOADS")} sectionInfo={ - /* TODO(MR): Move these to localized strings when finalized. */ uploadStage === UPLOAD_STAGES.FINISH ? undefined - : "There will be an option to retry these when the upload finishes." + : t("failed_uploads_hint") } /> > = ({ disableRipple onClick={() => onSelect("folders")} > - {pt("Select folder")} + {t("select_folder")} > = ({ disableRipple onClick={() => onSelect("zips")} > - {pt("Select zips")} + {t("Select zips")} > = ({ fullWidth disableRipple > - {pt("FAQ")} + {t("faq")} - {pt( - "Unzip all zips into the same folder and upload that. Or upload the zips directly. See FAQ for details.", - )} + {t("takeout_hint")} diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 0e3315116d..cb368cf789 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", "EXPORT_DATA": "Export data", "select_folder": "Select folder", + "select_zips": "Select zips", + "faq": "FAQ", + "takeout_hint": "Unzip all zips into the same folder and upload that. Or upload the zips directly. See FAQ for details.", "DESTINATION": "Destination", "START": "Start", "LAST_EXPORT_TIME": "Last export time", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", "RETRY_FAILED": "Retry failed uploads", "FAILED_UPLOADS": "Failed uploads ", + "failed_uploads_hint": "There will be an option to retry these when the upload finishes.", "SKIPPED_FILES": "Ignored uploads", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", "UNSUPPORTED_FILES": "Unsupported files", From 26f421c77ea0b4a33e64b229ecf152766ebcefa4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:22:31 +0530 Subject: [PATCH 326/466] Tweak --- .../photos/src/components/Upload/UploadTypeSelector.tsx | 7 ++++++- web/packages/next/locales/en-US/translation.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx index 7f6e301066..c3b4d38452 100644 --- a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx +++ b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx @@ -190,7 +190,12 @@ const DefaultOptions: React.FC = ({ /> )} - + {t("drag_and_drop_hint")} diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index cb368cf789..db6cf98c27 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -287,7 +287,7 @@ "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", "RETRY_FAILED": "Retry failed uploads", "FAILED_UPLOADS": "Failed uploads ", - "failed_uploads_hint": "There will be an option to retry these when the upload finishes.", + "failed_uploads_hint": "There will be an option to retry these when the upload finishes", "SKIPPED_FILES": "Ignored uploads", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", "UNSUPPORTED_FILES": "Unsupported files", From 49ca5819049bbc83834f1939e0211f902a6fba98 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Tue, 9 Jul 2024 05:01:06 +0000 Subject: [PATCH 327/466] New Crowdin translations by GitHub Action --- web/packages/next/locales/ar-SA/translation.json | 4 ++++ web/packages/next/locales/bg-BG/translation.json | 4 ++++ web/packages/next/locales/ca-ES/translation.json | 4 ++++ web/packages/next/locales/de-DE/translation.json | 6 +++++- web/packages/next/locales/es-ES/translation.json | 6 +++++- web/packages/next/locales/fa-IR/translation.json | 4 ++++ web/packages/next/locales/fi-FI/translation.json | 4 ++++ web/packages/next/locales/fr-FR/translation.json | 6 +++++- web/packages/next/locales/gu-IN/translation.json | 4 ++++ web/packages/next/locales/hi-IN/translation.json | 4 ++++ web/packages/next/locales/id-ID/translation.json | 10 +++++++--- web/packages/next/locales/is-IS/translation.json | 4 ++++ web/packages/next/locales/it-IT/translation.json | 4 ++++ web/packages/next/locales/ko-KR/translation.json | 4 ++++ web/packages/next/locales/nl-NL/translation.json | 6 +++++- web/packages/next/locales/pt-BR/translation.json | 6 +++++- web/packages/next/locales/pt-PT/translation.json | 4 ++++ web/packages/next/locales/ru-RU/translation.json | 4 ++++ web/packages/next/locales/sv-SE/translation.json | 4 ++++ web/packages/next/locales/te-IN/translation.json | 4 ++++ web/packages/next/locales/th-TH/translation.json | 4 ++++ web/packages/next/locales/ti-ER/translation.json | 4 ++++ web/packages/next/locales/tr-TR/translation.json | 4 ++++ web/packages/next/locales/zh-CN/translation.json | 6 +++++- 24 files changed, 105 insertions(+), 9 deletions(-) diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index 19eba6b786..3cda9c957f 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 105e5a1766..6a5521173f 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Fehler beim Deaktivieren des zweiten Faktors, bitte versuchen Sie es erneut", "EXPORT_DATA": "Daten exportieren", "select_folder": "Ordner auswählen", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Zielort", "START": "Start", "LAST_EXPORT_TIME": "Letztes Exportdatum", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Die Foto- und Videodateien deiner Live-Fotos wurden in einer einzigen Datei zusammengeführt", "RETRY_FAILED": "Fehlgeschlagene Uploads erneut probieren", "FAILED_UPLOADS": "Fehlgeschlagene Uploads ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Ignorierte Uploads", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Das Vorschaubild konnte nicht erzeugt werden", "UNSUPPORTED_FILES": "Nicht unterstützte Dateien", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Debug-Logs", "file": "Datei", "folder": "Ordner", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "Duplikate bereinigen", "NO_DUPLICATES_FOUND": "Du hast keine Duplikate, die gelöscht werden können", "FILES": "dateien", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index a9ac2dd175..cb2735c3c3 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Error al desactivar dos factores, inténtalo de nuevo", "EXPORT_DATA": "Exportar datos", "select_folder": "Seleccionar carpeta", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Destinación", "START": "Inicio", "LAST_EXPORT_TIME": "Fecha de la última exportación", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Los archivos de foto y vídeo de tus fotos en vivo se han fusionado en un solo archivo", "RETRY_FAILED": "Reintentar subidas fallidas", "FAILED_UPLOADS": "Subidas fallidas ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Subidas ignoradas", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Generación de miniaturas fallida", "UNSUPPORTED_FILES": "Archivos no soportados", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Logs de depuración", "file": "Archivo", "folder": "Carpeta", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "Deduplicar archivos", "NO_DUPLICATES_FOUND": "No tienes archivos duplicados que puedan ser borrados", "FILES": "archivos", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 2d45e424ad..b1203de644 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 3fd7d6014b..08fc02c5fb 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Échec de désactivation de la double-authentification, veuillez réessayer", "EXPORT_DATA": "Exporter les données", "select_folder": "Sélectionner un dossier", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Destination", "START": "Démarrer", "LAST_EXPORT_TIME": "Horaire du dernier export", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Les fichiers photos et vidéos depuis votre espace Live Photos ont été fusionnés en un seul fichier", "RETRY_FAILED": "Réessayer les chargements ayant échoués", "FAILED_UPLOADS": "Chargements échoués ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Chargements ignorés", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Échec de création d'une miniature", "UNSUPPORTED_FILES": "Fichiers non supportés", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", "file": "Fichier", "folder": "Dossier", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "Déduplication de fichiers", "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", "FILES": "fichiers", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 0a984cf055..903df88970 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Gagal menonaktifkan autentikasi dua langkah, silakan coba lagi", "EXPORT_DATA": "Ekspor data", "select_folder": "Pilih folder", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "Mulai", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", @@ -399,9 +403,9 @@ "PASSWORD_LOCK": "Kunci dengan sandi", "LOCK": "", "DOWNLOAD_UPLOAD_LOGS": "Log debug", - "file": "File", - "folder": "Folder", - "google_takeout": "Google takeout", + "file": "", + "folder": "", + "google_takeout": "", "DEDUPLICATE_FILES": "", "NO_DUPLICATES_FOUND": "", "FILES": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 381c200211..acea36e699 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index c98fa0022f..b9f2b8a3e6 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "Esporta dati", "select_folder": "Seleziona cartella", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Destinazione", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "Caricamento fallito ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Ignora caricamenti", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 08e28552bc..63cce63e1a 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 1f8a6884b9..f77791f2b2 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Uitschakelen van tweestapsverificatie is mislukt, probeer het opnieuw", "EXPORT_DATA": "Gegevens exporteren", "select_folder": "Map selecteren", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Bestemming", "START": "Start", "LAST_EXPORT_TIME": "Tijd laatste export", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "De foto en video bestanden van je Live Photos zijn samengevoegd tot één enkel bestand", "RETRY_FAILED": "Probeer mislukte uploads nogmaals", "FAILED_UPLOADS": "Mislukte uploads ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Genegeerde uploads", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generatie mislukt", "UNSUPPORTED_FILES": "Niet-ondersteunde bestanden", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Logboeken voor foutmeldingen", "file": "Bestand", "folder": "Map", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "Dubbele bestanden verwijderen", "NO_DUPLICATES_FOUND": "Je hebt geen dubbele bestanden die kunnen worden gewist", "FILES": "bestanden", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index e0127cfc96..14a8aeb6fb 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Não foi possível desativar dois fatores, por favor tente novamente", "EXPORT_DATA": "Exportar dados", "select_folder": "Selecione a pasta", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Destino", "START": "Iniciar", "LAST_EXPORT_TIME": "Data da última exportação", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Os arquivos de foto e vídeo das suas Fotos em Movimento foram mesclados em um único arquivo", "RETRY_FAILED": "Repetir envios que falharam", "FAILED_UPLOADS": "Envios com falhas ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Envios ignorados", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Falha ao gerar miniaturas", "UNSUPPORTED_FILES": "Arquivos não suportados", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Logs de depuração", "file": "Arquivo", "folder": "Pasta", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "Arquivos duplicados", "NO_DUPLICATES_FOUND": "Você não tem arquivos duplicados que possam ser limpos", "FILES": "arquivos", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index 495c132f67..2713fc8f2e 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 559c589352..1b7db1d03d 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Не удалось отключить два фактора, пожалуйста, повторите попытку", "EXPORT_DATA": "Экспортировать данные", "select_folder": "Выбрать папку", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "Место назначения", "START": "Начать", "LAST_EXPORT_TIME": "Время последнего экспорта", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Фото- и видеофайлы из ваших Live Photos были объединены в один файл", "RETRY_FAILED": "Повторите попытку неудачной загрузки", "FAILED_UPLOADS": "Неудачная загрузка ", + "failed_uploads_hint": "", "SKIPPED_FILES": "Игнорируемые загрузки", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Не удалось создать миниатюру", "UNSUPPORTED_FILES": "Неподдерживаемые файлы", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 65a264435c..b069f7b7bd 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "Exportera data", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index cddac5e8e7..c3addf65f2 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "", "EXPORT_DATA": "", "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "", "START": "", "LAST_EXPORT_TIME": "", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "", "RETRY_FAILED": "", "FAILED_UPLOADS": "", + "failed_uploads_hint": "", "SKIPPED_FILES": "", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", "UNSUPPORTED_FILES": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 1ad22cf3d1..50db32b672 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -272,6 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "禁用双重认证失败,请再试一次", "EXPORT_DATA": "导出数据", "select_folder": "选择文件夹", + "select_zips": "", + "faq": "", + "takeout_hint": "", "DESTINATION": "目标位置", "START": "开始", "LAST_EXPORT_TIME": "最后一次导出时间", @@ -284,6 +287,7 @@ "LIVE_PHOTOS_DETECTED": "实况照片中的照片和视频文件已合并为一个文件", "RETRY_FAILED": "重试上传失败的文件", "FAILED_UPLOADS": "上传失败 ", + "failed_uploads_hint": "", "SKIPPED_FILES": "已忽略的上传内容", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "缩略图生成失败", "UNSUPPORTED_FILES": "不支持的文件", @@ -401,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "调试日志", "file": "文件", "folder": "文件夹", - "google_takeout": "Google takeout", + "google_takeout": "", "DEDUPLICATE_FILES": "删除重复文件", "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", "FILES": "文件", From a8c267e2b0a668b4d9d3567c9024c5f9de5e0b27 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 10:46:11 +0530 Subject: [PATCH 328/466] [meta] Change translation cron schedule Tue => Mon --- .github/workflows/auth-crowdin-sync.yml | 3 ++- .github/workflows/mobile-crowdin-sync.yml | 3 ++- .github/workflows/web-crowdin-sync.yml | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/auth-crowdin-sync.yml b/.github/workflows/auth-crowdin-sync.yml index be486b8dee..b8027c82f0 100644 --- a/.github/workflows/auth-crowdin-sync.yml +++ b/.github/workflows/auth-crowdin-sync.yml @@ -2,8 +2,9 @@ name: "Sync Crowdin translations (auth)" on: schedule: + # Run Mondays at ~6:30 AM IST # See: [Note: Run workflow on specific days of the week] - - cron: "50 1 * * 2" + - cron: "50 0 * * 1" # Also allow manually running the workflow. workflow_dispatch: diff --git a/.github/workflows/mobile-crowdin-sync.yml b/.github/workflows/mobile-crowdin-sync.yml index a6fbc42a14..5f8da62b4d 100644 --- a/.github/workflows/mobile-crowdin-sync.yml +++ b/.github/workflows/mobile-crowdin-sync.yml @@ -2,8 +2,9 @@ name: "Sync Crowdin translations (mobile)" on: schedule: + # Run Mondays at ~6:30 AM IST # See: [Note: Run workflow on specific days of the week] - - cron: "40 1 * * 2" + - cron: "40 0 * * 1" # Also allow manually running the workflow. workflow_dispatch: diff --git a/.github/workflows/web-crowdin-sync.yml b/.github/workflows/web-crowdin-sync.yml index 978f24b271..d4a83e3bea 100644 --- a/.github/workflows/web-crowdin-sync.yml +++ b/.github/workflows/web-crowdin-sync.yml @@ -9,6 +9,8 @@ on: # Or the workflow itself is changed - ".github/workflows/web-crowdin.yml" schedule: + # Run Mondays at ~6:00 AM IST + # # [Note: Run workflow on specific days of the week] # # The last (5th) component of the cron syntax denotes the day of the @@ -16,7 +18,7 @@ on: # and FRI, this can be set to `2,5`. # # See also: [Note: Run workflow every 24 hours] - - cron: "20 1 * * 2" + - cron: "20 0 * * 1" # Also allow manually running the workflow. workflow_dispatch: From b36c4398c1a01b78bdd9f6c1e3b76215d9ac49d7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 19:37:32 +0530 Subject: [PATCH 329/466] wip DB changes for clip --- web/packages/new/photos/services/ml/db.ts | 43 +++++++++++++++++++---- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index b8bcad5ed9..042af26997 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -1,5 +1,6 @@ import log from "@/next/log"; import { deleteDB, openDB, type DBSchema } from "idb"; +import type { EmbeddingModel } from "./embedding"; import type { FaceIndex } from "./face"; /** @@ -53,6 +54,13 @@ interface FileStatus { * buckets. */ status: "indexable" | "indexed" | "failed"; + /** + * A list of embeddings that we still need to compute for the file. + * + * This is guaranteed to be empty if status is "indexed", and will have at + * least one entry otherwise. + */ + pending: EmbeddingModel[]; /** * The number of times attempts to index this file failed. * @@ -137,27 +145,48 @@ export const clearFaceDB = async () => { }); }; +/** + * Return a new object suitable for use as the initial value of the entry for a + * file in the file status store. + */ +const newFileStatus = (fileID: number): FileStatus => ({ + fileID, + status: "indexable", + pending: ["file-ml-clip-face", "onnx-clip"], + failureCount: 0, +}); + /** * Save the given {@link faceIndex} locally. * * @param faceIndex A {@link FaceIndex} representing the faces that we detected * (and their corresponding embeddings) in some file. * - * This function adds a new entry, overwriting any existing ones (No merging is - * performed, the existing entry is unconditionally overwritten). + * This function adds a new entry for the face index, overwriting any existing + * ones (No merging is performed, the existing entry is unconditionally + * overwritten). The file status is updated to remove the entry for face from + * the pending embeddings. If there are no other pending embeddings, the file + * status changes to "indexed". */ export const saveFaceIndex = async (faceIndex: FaceIndex) => { + const { fileID } = faceIndex; + const db = await faceDB(); const tx = db.transaction(["face-index", "file-status"], "readwrite"); const indexStore = tx.objectStore("face-index"); const statusStore = tx.objectStore("file-status"); + + const fileStatus = + (await statusStore.get(IDBKeyRange.only(fileID))) ?? + newFileStatus(fileID); + fileStatus.pending = fileStatus.pending.filter( + (v) => v != "file-ml-clip-face", + ); + if (fileStatus.pending.length == 0) fileStatus.status = "indexed"; + await Promise.all([ indexStore.put(faceIndex), - statusStore.put({ - fileID: faceIndex.fileID, - status: "indexed", - failureCount: 0, - }), + statusStore.put(fileStatus), tx.done, ]); }; From 2bc95782a6e147aa313975f5c6c1a93234030a90 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 8 Jul 2024 19:42:46 +0530 Subject: [PATCH 330/466] db 2 --- web/packages/new/photos/services/ml/db.ts | 37 +++++++++++------------ 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 042af26997..32b1d338f7 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -145,27 +145,16 @@ export const clearFaceDB = async () => { }); }; -/** - * Return a new object suitable for use as the initial value of the entry for a - * file in the file status store. - */ -const newFileStatus = (fileID: number): FileStatus => ({ - fileID, - status: "indexable", - pending: ["file-ml-clip-face", "onnx-clip"], - failureCount: 0, -}); - /** * Save the given {@link faceIndex} locally. * * @param faceIndex A {@link FaceIndex} representing the faces that we detected - * (and their corresponding embeddings) in some file. + * (and their corresponding embeddings) in a particular file. * * This function adds a new entry for the face index, overwriting any existing * ones (No merging is performed, the existing entry is unconditionally * overwritten). The file status is updated to remove the entry for face from - * the pending embeddings. If there are no other pending embeddings, the file + * the pending embeddings. If there are no other pending embeddings, the * status changes to "indexed". */ export const saveFaceIndex = async (faceIndex: FaceIndex) => { @@ -191,6 +180,19 @@ export const saveFaceIndex = async (faceIndex: FaceIndex) => { ]); }; +/** + * Return a new object suitable for use as the initial value of the entry for a + * file in the file status store. + */ +const newFileStatus = (fileID: number): FileStatus => ({ + fileID, + status: "indexable", + // TODO-ML: + // pending: ["file-ml-clip-face", "onnx-clip"], + pending: ["file-ml-clip-face"], + failureCount: 0, +}); + /** * Return the {@link FaceIndex}, if any, for {@link fileID}. */ @@ -213,13 +215,8 @@ export const faceIndex = async (fileID: number) => { export const addFileEntry = async (fileID: number) => { const db = await faceDB(); const tx = db.transaction("file-status", "readwrite"); - if ((await tx.store.getKey(fileID)) === undefined) { - await tx.store.put({ - fileID, - status: "indexable", - failureCount: 0, - }); - } + if ((await tx.store.getKey(fileID)) === undefined) + await tx.store.put(newFileStatus(fileID)); return tx.done; }; From 4fada9bdf9740b2a3ba115e25b00677aaf58cb96 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 11:11:12 +0530 Subject: [PATCH 331/466] face => ml --- web/packages/new/photos/services/ml/db.ts | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 32b1d338f7..9a71b39761 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -202,8 +202,8 @@ export const faceIndex = async (fileID: number) => { }; /** - * Record the existence of a file so that entities in the face indexing universe - * know about it (e.g. can index it if it is new and it needs indexing). + * Record the existence of a file so that entities in the ML universe know about + * it (e.g. can index it if it is new and it needs indexing). * * @param fileID The ID of an {@link EnteFile}. * @@ -276,11 +276,7 @@ export const updateAssumingLocalFiles = async ( await Promise.all( [ newFileIDs.map((id) => - tx.objectStore("file-status").put({ - fileID: id, - status: "indexable", - failureCount: 0, - }), + tx.objectStore("file-status").put(newFileStatus(id)), ), removedFileIDs.map((id) => tx.objectStore("file-status").delete(id), @@ -339,11 +335,8 @@ export const indexableFileIDs = async (count?: number) => { export const markIndexingFailed = async (fileID: number) => { const db = await faceDB(); const tx = db.transaction("file-status", "readwrite"); - const failureCount = ((await tx.store.get(fileID))?.failureCount ?? 0) + 1; - await tx.store.put({ - fileID, - status: "failed", - failureCount, - }); - return tx.done; + const fileStatus = (await tx.store.get(fileID)) ?? newFileStatus(fileID); + fileStatus.status = "failed"; + fileStatus.failureCount = fileStatus.failureCount + 1; + await Promise.all([tx.store.put(fileStatus), tx.done]); }; From a0980a9638594a477e7eb4756242e31023b240c8 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Tue, 9 Jul 2024 11:24:50 +0530 Subject: [PATCH 332/466] [mob][photos] Lockscreen Fixes --- mobile/lib/services/local_authentication_service.dart | 9 ++++++++- .../ui/settings/lock_screen/lock_screen_password.dart | 4 +++- mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart | 4 +++- mobile/lib/utils/auth_util.dart | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index a989da5124..6167fca67f 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -21,7 +21,11 @@ class LocalAuthenticationService { ) async { if (await _isLocalAuthSupportedOnDevice()) { AppLock.of(context)!.setEnabled(false); - final result = await requestAuthentication(context, infoMessage); + final result = await requestAuthentication( + context, + infoMessage, + isAuthenticatingForInAppChange: true, + ); AppLock.of(context)!.setEnabled( await Configuration.instance.shouldShowLockScreen(), ); @@ -40,6 +44,7 @@ class LocalAuthenticationService { String? savedPin, String? savedPassword, { bool isOnOpeningApp = false, + bool isAuthenticatingForInAppChange = false, }) async { if (savedPassword != null) { final result = await Navigator.of(context).push( @@ -47,6 +52,7 @@ class LocalAuthenticationService { builder: (BuildContext context) { return LockScreenPassword( isAuthenticating: true, + isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, isOnOpeningApp: isOnOpeningApp, authPass: savedPassword, ); @@ -63,6 +69,7 @@ class LocalAuthenticationService { builder: (BuildContext context) { return LockScreenPin( isAuthenticating: true, + isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, isOnOpeningApp: isOnOpeningApp, authPin: savedPin, ); diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index 24d0f7575a..4cf7f965e0 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -18,12 +18,14 @@ class LockScreenPassword extends StatefulWidget { super.key, this.isAuthenticating = false, this.isOnOpeningApp = false, + this.isAuthenticatingForInAppChange = false, this.authPass, }); //Is false when setting a new password final bool isAuthenticating; final bool isOnOpeningApp; + final bool isAuthenticatingForInAppChange; final String? authPass; @override State createState() => _LockScreenPasswordState(); @@ -201,7 +203,7 @@ class _LockScreenPasswordState extends State { if (widget.authPass == base64Encode(hash)) { await _lockscreenSetting.setInvalidAttemptCount(0); - widget.isOnOpeningApp + widget.isOnOpeningApp || widget.isAuthenticatingForInAppChange ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index 622078706f..bc0eb91cde 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -20,12 +20,14 @@ class LockScreenPin extends StatefulWidget { super.key, this.isAuthenticating = false, this.isOnOpeningApp = false, + this.isAuthenticatingForInAppChange = false, this.authPin, }); //Is false when setting a new password final bool isAuthenticating; final bool isOnOpeningApp; + final bool isAuthenticatingForInAppChange; final String? authPin; @override State createState() => _LockScreenPinState(); @@ -62,7 +64,7 @@ class _LockScreenPinState extends State { if (widget.authPin == base64Encode(hash)) { invalidAttemptsCount = 0; await _lockscreenSetting.setInvalidAttemptCount(0); - widget.isOnOpeningApp + widget.isOnOpeningApp || widget.isAuthenticatingForInAppChange ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 9c4e161fbf..6db836594c 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -11,6 +11,7 @@ Future requestAuthentication( BuildContext context, String reason, { bool isOpeningApp = false, + bool isAuthenticatingForInAppChange = false, }) async { Logger("AuthUtil").info("Requesting authentication"); await LocalAuthentication().stopAuthentication(); @@ -24,6 +25,7 @@ Future requestAuthentication( savedPin, savedPassword, isOnOpeningApp: isOpeningApp, + isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, ); } else { return await LocalAuthentication().authenticate( From 8d4629254ca74e5e51ce693377d382389515f493 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 11:40:24 +0530 Subject: [PATCH 333/466] Agenda --- web/packages/new/photos/services/ml/clip.ts | 77 +++++++++++++++++++++ web/packages/new/photos/services/ml/db.ts | 49 ++++++++----- web/packages/new/photos/services/ml/face.ts | 18 ++--- 3 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 web/packages/new/photos/services/ml/clip.ts diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts new file mode 100644 index 0000000000..87f03034f9 --- /dev/null +++ b/web/packages/new/photos/services/ml/clip.ts @@ -0,0 +1,77 @@ +import type { EnteFile } from "@/new/photos/types/file"; +import type { ImageBitmapAndData } from "./bitmap"; +import type { MLWorkerElectron } from "./worker-electron"; + +/** + * The version of the CLIP indexing pipeline implemented by the current client. + */ +export const clipIndexingVersion = 1; + +/** + * The CLIP embedding for a file (and some metadata). + * + * See {@link FaceIndex} for a similar structure with more comprehensive + * documentation. + */ +export interface CLIPIndex { + /** The ID of the {@link EnteFile} whose index this is. */ + fileID: number; + /** An integral version number of the indexing algorithm / pipeline. */ + version: number; + /** The UA for the client which generated this embedding. */ + client: string; + /** The CLIP embedding itself. */ + embedding: number[]; +} + +/** + * Compute the CLIP embedding of a given file. + * + * This function is the entry point to the CLIP indexing pipeline. The file goes + * through various stages: + * + * 1. Downloading the original if needed. + * 2. Convert (if needed) and pre-process. + * 3. Compute embeddings using ONNX/CLIP. + * + * Once all of it is done, it CLIP embedding (wrapped as a {@link CLIPIndex} so + * that it can be saved locally and also uploaded to the user's remote storage + * for use on their other devices). + * + * @param enteFile The {@link EnteFile} to index. + * + * @param uploadItem If we're called during the upload process, then this will + * be set to the {@link UploadItem} that was uploaded. This way, we can directly + * use the on-disk file instead of needing to download the original from remote. + * + * @param electron The {@link MLWorkerElectron} instance that allows us to call + * our Node.js layer for various functionality. + * + * @param userAgent The UA of the client that is doing the indexing (us). + */ +export const indexCLIP = async ( + enteFile: EnteFile, + image: ImageBitmapAndData, + electron: MLWorkerElectron, + userAgent: string, +): Promise => { + const { data: imageData } = image; + const fileID = enteFile.id; + + return { + fileID, + version: clipIndexingVersion, + client: userAgent, + embedding: await indexCLIP_(imageData, electron), + }; +}; + +const indexCLIP_ = async ( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _imageData: ImageData, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _electron: MLWorkerElectron, + // eslint-disable-next-line @typescript-eslint/require-await +): Promise => { + throw new Error("TODO"); +}; diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 9a71b39761..e1363f5fae 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -4,34 +4,42 @@ import type { EmbeddingModel } from "./embedding"; import type { FaceIndex } from "./face"; /** - * Face DB schema. + * ML DB schema. * - * There "face" database is made of two object stores: + * The "ML" database is made of three object stores: + * + * - "file-status": Contains {@link FileStatus} objects, one for each + * {@link EnteFile} that the ML subsystem knows about. Periodically (and when + * required), this is synced with the list of files that the current client + * knows about locally. * * - "face-index": Contains {@link FaceIndex} objects, either indexed locally or * fetched from remote storage. * - * - "file-status": Contains {@link FileStatus} objects, one for each - * {@link EnteFile} that the current client knows about. + * - "clip-index": Contains {@link CLIPIndex} objects, either indexed locally or + * fetched from remote storage. * - * Both the stores are keyed by {@link fileID}, and are expected to contain the - * exact same set of {@link fileID}s. The face-index can be thought of as the - * "original" indexing result, whilst file-status bookkeeps information about - * the indexing process (whether or not a file needs indexing, or if there were - * errors doing so). + * All the stores are keyed by {@link fileID}. The "file-status" contains + * book-keeping about the indexing process (whether or not a file needs + * indexing, or if there were errors doing so), while the other stores contain + * the actual indexing results. * * In tandem, these serve as the underlying storage for the functions exposed by * this file. */ interface FaceDBSchema extends DBSchema { + "file-status": { + key: number; + value: FileStatus; + indexes: { status: FileStatus["status"] }; + }; "face-index": { key: number; value: FaceIndex; }; - "file-status": { + "clip-index": { key: number; - value: FileStatus; - indexes: { status: FileStatus["status"] }; + value: CLIPIndex; }; } @@ -45,13 +53,20 @@ interface FileStatus { * to be indexed. * * - "indexed" - We have a corresponding entry for this file in the - * "face-index" object (either indexed locally or fetched from remote). + * "face-index" _and_ "clip-index" object stores (either indexed locally + * or fetched from remote). * * - "failed" - Indexing was attempted but failed. * - * We also have a (IndexedDB) "index" on this field to allow us to - * efficiently select or count {@link fileIDs} that fall into various - * buckets. + * There can arise situations in which a file has one, but not all, indexes. + * e.g. it may have a "face-index" but "clip-index" might've not yet + * happened (or failed). In such cases, the status of the file will be + * "indexable": it transitions to "indexed" only after all indexes have been + * computed or fetched. + * + * If you have't heard the word "index" to the point of zoning out, we also + * have a (IndexedDB) "index" on the status field to allow us to efficiently + * select or count {@link fileIDs} that fall into various buckets. */ status: "indexable" | "indexed" | "failed"; /** @@ -64,6 +79,8 @@ interface FileStatus { /** * The number of times attempts to index this file failed. * + * It counts failure across all index types. + * * This is guaranteed to be `0` for files with status "indexed". */ failureCount: number; diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 149e922b09..5c1d3a6763 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -196,24 +196,26 @@ export interface Box { /** * Index faces in the given file. * - * This function is the entry point to the indexing pipeline. The file goes + * This function is the entry point to the face indexing pipeline. The file goes * through various stages: * * 1. Downloading the original if needed. * 2. Detect faces using ONNX/YOLO * 3. Align the face rectangles, compute blur. - * 4. Compute embeddings for the detected face (crops). + * 4. Compute embeddings using ONNX/MFNT for the detected face (crop). * * Once all of it is done, it returns the face rectangles and embeddings so that - * they can be saved locally for offline use, and encrypts and uploads them to - * the user's remote storage so that their other devices can download them - * instead of needing to reindex. + * they can be saved locally (for offline use), and also uploaded to the user's + * remote storage so that their other devices can download them instead of + * needing to reindex. + * + * As an optimization, it also saves the face crops of the detected faces to the + * local cache (they can be regenerated independently too by using + * {@link regenerateFaceCrops}). * * @param enteFile The {@link EnteFile} to index. * - * @param uploadItem If we're called during the upload process, then this will - * be set to the {@link UploadItem} that was uploaded. This way, we can directly - * use the on-disk file instead of needing to download the original from remote. + * @param image The file's contents. * * @param electron The {@link MLWorkerElectron} instance that allows us to call * our Node.js layer for various functionality. From f2bcf1744fd38164137882b0c28f0396ae47f098 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 11:51:00 +0530 Subject: [PATCH 334/466] generalize --- web/packages/new/photos/services/ml/db.ts | 59 +++++++++++--------- web/packages/new/photos/services/ml/index.ts | 4 +- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index e1363f5fae..68bbe65601 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -1,5 +1,6 @@ import log from "@/next/log"; import { deleteDB, openDB, type DBSchema } from "idb"; +import type { CLIPIndex } from "./clip"; import type { EmbeddingModel } from "./embedding"; import type { FaceIndex } from "./face"; @@ -27,7 +28,7 @@ import type { FaceIndex } from "./face"; * In tandem, these serve as the underlying storage for the functions exposed by * this file. */ -interface FaceDBSchema extends DBSchema { +interface MLDBSchema extends DBSchema { "file-status": { key: number; value: FileStatus; @@ -87,40 +88,44 @@ interface FileStatus { } /** - * A lazily-created, cached promise for face DB. + * A lazily-created, cached promise for ML DB. * * See: [Note: Caching IDB instances in separate execution contexts]. */ -let _faceDB: ReturnType | undefined; +let _mlDB: ReturnType | undefined; -const openFaceDB = async () => { +const openMLDB = async () => { deleteLegacyDB(); - const db = await openDB("face", 1, { + // TODO-ML: "face" => "ml", v2 => v1 + const db = await openDB("face", 2, { upgrade(db, oldVersion, newVersion) { - log.info(`Upgrading face DB ${oldVersion} => ${newVersion}`); + log.info(`Upgrading ML DB ${oldVersion} => ${newVersion}`); if (oldVersion < 1) { - db.createObjectStore("face-index", { keyPath: "fileID" }); db.createObjectStore("file-status", { keyPath: "fileID", }).createIndex("status", "status"); + db.createObjectStore("face-index", { keyPath: "fileID" }); + } + if (oldVersion < 2) { + db.createObjectStore("clip-index", { keyPath: "fileID" }); } }, blocking() { log.info( - "Another client is attempting to open a new version of face DB", + "Another client is attempting to open a new version of ML DB", ); db.close(); - _faceDB = undefined; + _mlDB = undefined; }, blocked() { log.warn( - "Waiting for an existing client to close their connection so that we can update the face DB version", + "Waiting for an existing client to close their connection so that we can update the ML DB version", ); }, terminated() { - log.warn("Our connection to face DB was unexpectedly terminated"); - _faceDB = undefined; + log.warn("Our connection to ML DB was unexpectedly terminated"); + _mlDB = undefined; }, }); return db; @@ -134,29 +139,29 @@ const deleteLegacyDB = () => { }; /** - * @returns a lazily created, cached connection to the face DB. + * @returns a lazily created, cached connection to the ML DB. */ -const faceDB = () => (_faceDB ??= openFaceDB()); +const mlDB = () => (_mlDB ??= openMLDB()); /** - * Clear any data stored in the face DB. + * Clear any data stored in the ML DB. * * This is meant to be called during logout in the main thread. */ -export const clearFaceDB = async () => { +export const clearMLDB = async () => { deleteLegacyDB(); try { - if (_faceDB) (await _faceDB).close(); + if (_mlDB) (await _mlDB).close(); } catch (e) { - log.warn("Ignoring error when trying to close face DB", e); + log.warn("Ignoring error when trying to close ML DB", e); } - _faceDB = undefined; + _mlDB = undefined; return deleteDB("face", { blocked() { log.warn( - "Waiting for an existing client to close their connection so that we can delete the face DB", + "Waiting for an existing client to close their connection so that we can delete the ML DB", ); }, }); @@ -177,7 +182,7 @@ export const clearFaceDB = async () => { export const saveFaceIndex = async (faceIndex: FaceIndex) => { const { fileID } = faceIndex; - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction(["face-index", "file-status"], "readwrite"); const indexStore = tx.objectStore("face-index"); const statusStore = tx.objectStore("file-status"); @@ -214,7 +219,7 @@ const newFileStatus = (fileID: number): FileStatus => ({ * Return the {@link FaceIndex}, if any, for {@link fileID}. */ export const faceIndex = async (fileID: number) => { - const db = await faceDB(); + const db = await mlDB(); return db.get("face-index", fileID); }; @@ -230,7 +235,7 @@ export const faceIndex = async (fileID: number) => { * unperturbed. */ export const addFileEntry = async (fileID: number) => { - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction("file-status", "readwrite"); if ((await tx.store.getKey(fileID)) === undefined) await tx.store.put(newFileStatus(fileID)); @@ -265,7 +270,7 @@ export const updateAssumingLocalFiles = async ( localFileIDs: number[], localTrashFilesIDs: number[], ) => { - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction(["face-index", "file-status"], "readwrite"); const fdbFileIDs = await tx.objectStore("file-status").getAllKeys(); const fdbIndexedFileIDs = await tx @@ -311,7 +316,7 @@ export const updateAssumingLocalFiles = async ( * within the purview of the indexer is thus indexable + indexed. */ export const indexableAndIndexedCounts = async () => { - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction("file-status", "readwrite"); const indexableCount = await tx.store .index("status") @@ -333,7 +338,7 @@ export const indexableAndIndexedCounts = async () => { * @param count Limit the result to up to {@link count} items. */ export const indexableFileIDs = async (count?: number) => { - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction("file-status", "readonly"); return tx.store .index("status") @@ -350,7 +355,7 @@ export const indexableFileIDs = async (count?: number) => { * existing entry is incremented. */ export const markIndexingFailed = async (fileID: number) => { - const db = await faceDB(); + const db = await mlDB(); const tx = db.transaction("file-status", "readwrite"); const fileStatus = (await tx.store.get(fileID)) ?? newFileStatus(fileID); fileStatus.status = "failed"; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 04531f577a..b161aaf435 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -16,7 +16,7 @@ import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { proxy } from "comlink"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; -import { clearFaceDB, faceIndex, indexableAndIndexedCounts } from "./db"; +import { clearMLDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; /** @@ -87,7 +87,7 @@ export const logoutML = async () => { // contexts], it gets called first in the logout sequence, and then this // `logoutML` gets called at a later point in time. _isMLEnabled = false; - await clearFaceDB(); + await clearMLDB(); }; /** From 3bef2e82682307fea4345b980855857de22a5e8d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 12:04:01 +0530 Subject: [PATCH 335/466] generalize --- web/packages/new/photos/services/ml/db.ts | 88 +++++++++++++++----- web/packages/new/photos/services/ml/index.ts | 2 +- 2 files changed, 67 insertions(+), 23 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 68bbe65601..d2dbfde427 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -146,7 +146,7 @@ const mlDB = () => (_mlDB ??= openMLDB()); /** * Clear any data stored in the ML DB. * - * This is meant to be called during logout in the main thread. + * This is meant to be called during logout on the main thread. */ export const clearMLDB = async () => { deleteLegacyDB(); @@ -175,17 +175,17 @@ export const clearMLDB = async () => { * * This function adds a new entry for the face index, overwriting any existing * ones (No merging is performed, the existing entry is unconditionally - * overwritten). The file status is updated to remove the entry for face from - * the pending embeddings. If there are no other pending embeddings, the - * status changes to "indexed". + * overwritten). The file status is also updated to remove face from the pending + * embeddings. If there are no other pending embeddings, the status changes to + * "indexed". */ export const saveFaceIndex = async (faceIndex: FaceIndex) => { const { fileID } = faceIndex; const db = await mlDB(); - const tx = db.transaction(["face-index", "file-status"], "readwrite"); - const indexStore = tx.objectStore("face-index"); + const tx = db.transaction(["file-status", "face-index"], "readwrite"); const statusStore = tx.objectStore("file-status"); + const indexStore = tx.objectStore("face-index"); const fileStatus = (await statusStore.get(IDBKeyRange.only(fileID))) ?? @@ -196,8 +196,8 @@ export const saveFaceIndex = async (faceIndex: FaceIndex) => { if (fileStatus.pending.length == 0) fileStatus.status = "indexed"; await Promise.all([ - indexStore.put(faceIndex), statusStore.put(fileStatus), + indexStore.put(faceIndex), tx.done, ]); }; @@ -215,6 +215,39 @@ const newFileStatus = (fileID: number): FileStatus => ({ failureCount: 0, }); +/** + * Save the given {@link clipIndex} locally. + * + * @param clipIndex A {@link CLIPIndex} containing the CLIP embedding for a + * particular file. + * + * This function adds a new entry for the CLIP index, overwriting any existing + * ones (No merging is performed, the existing entry is unconditionally + * overwritten). The file status is also updated to remove CLIP from the pending + * embeddings. If there are no other pending embeddings, the status changes to + * "indexed". + */ +export const saveCLIPIndex = async (clipIndex: CLIPIndex) => { + const { fileID } = clipIndex; + + const db = await mlDB(); + const tx = db.transaction(["file-status", "clip-index"], "readwrite"); + const statusStore = tx.objectStore("file-status"); + const indexStore = tx.objectStore("clip-index"); + + const fileStatus = + (await statusStore.get(IDBKeyRange.only(fileID))) ?? + newFileStatus(fileID); + fileStatus.pending = fileStatus.pending.filter((v) => v != "onnx-clip"); + if (fileStatus.pending.length == 0) fileStatus.status = "indexed"; + + await Promise.all([ + statusStore.put(fileStatus), + indexStore.put(clipIndex), + tx.done, + ]); +}; + /** * Return the {@link FaceIndex}, if any, for {@link fileID}. */ @@ -223,6 +256,14 @@ export const faceIndex = async (fileID: number) => { return db.get("face-index", fileID); }; +/** + * Return all CLIP embeddings present locally. + */ +export const clipEmbeddings = async () => { + const db = await mlDB(); + return (await db.getAll("clip-index")).map((index) => index.embedding); +}; + /** * Record the existence of a file so that entities in the ML universe know about * it (e.g. can index it if it is new and it needs indexing). @@ -243,35 +284,37 @@ export const addFileEntry = async (fileID: number) => { }; /** - * Update entries in the face DB to align with the state of local files outside - * face DB. + * Update entries in ML DB to align with the state of local files outside ML DB. * - * @param localFileIDs IDs of all the files that the client is aware of filtered - * to only keep the files that the user owns and the formats that can be indexed - * by our current face indexing pipeline. + * @param localFileIDs IDs of all the files that the client is aware of, + * filtered to only keep the files that the user owns and the formats that can + * be indexed by our current indexing pipelines. * * @param localTrashFilesIDs IDs of all the files in trash. * - * This function then updates the state of file entries in face DB to the be in - * sync with these provided local file IDS. + * This function then updates the state of file entries in ML DB to the be in + * sync with these provided local file IDs. * - * - Files that are present locally but are not yet in face DB get a fresh entry + * - Files that are present locally but are not yet in ML DB get a fresh entry * in face DB (and are marked as indexable). * - * - Files that are not present locally (nor are in trash) but still exist in - * face DB are removed from face DB (including their face index, if any). + * - Files that are not present locally (nor are in trash) but still exist in ML + * DB are removed from ML DB (including any indexes). * - * - Files that are not present locally but are in the trash are retained in - * face DB if their status is "indexed" (otherwise they too are removed). This - * is prevent churn (re-indexing) if the user moves some files to trash but - * then later restores them before they get permanently deleted. + * - Files that are not present locally but are in the trash are retained in ML + * DB if their status is "indexed"; otherwise they too are removed. This + * special case is to prevent churn (re-indexing) if the user moves some files + * to trash but then later restores them before they get permanently deleted. */ export const updateAssumingLocalFiles = async ( localFileIDs: number[], localTrashFilesIDs: number[], ) => { const db = await mlDB(); - const tx = db.transaction(["face-index", "file-status"], "readwrite"); + const tx = db.transaction( + ["file-status", "face-index", "clip-index"], + "readwrite", + ); const fdbFileIDs = await tx.objectStore("file-status").getAllKeys(); const fdbIndexedFileIDs = await tx .objectStore("file-status") @@ -304,6 +347,7 @@ export const updateAssumingLocalFiles = async ( tx.objectStore("file-status").delete(id), ), removedFileIDs.map((id) => tx.objectStore("face-index").delete(id)), + removedFileIDs.map((id) => tx.objectStore("clip-index").delete(id)), tx.done, ].flat(), ); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index b161aaf435..62f4637894 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -85,7 +85,7 @@ export const logoutML = async () => { // `terminateMLWorker` is conceptually also part of this, but for the // reasons mentioned in [Note: Caching IDB instances in separate execution // contexts], it gets called first in the logout sequence, and then this - // `logoutML` gets called at a later point in time. + // function (`logoutML`) gets called at a later point in time. _isMLEnabled = false; await clearMLDB(); }; From 4d84e966b0298a92de895c4dedc3390d8fda7387 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 12:09:38 +0530 Subject: [PATCH 336/466] db done --- web/packages/new/photos/services/ml/db.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index d2dbfde427..1ba61b9a10 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -356,8 +356,9 @@ export const updateAssumingLocalFiles = async ( /** * Return the count of files that can be, and that have been, indexed. * - * These counts are mutually exclusive. The total number of files that fall - * within the purview of the indexer is thus indexable + indexed. + * These counts are mutually exclusive. Thus the total number of files that are + * fall within the purview of the indexer will be indexable + indexed (if we are + * ignoring the "failed" ones). */ export const indexableAndIndexedCounts = async () => { const db = await mlDB(); @@ -375,7 +376,7 @@ export const indexableAndIndexedCounts = async () => { * Return a list of fileIDs that need to be indexed. * * This list is from the universe of the file IDs that the face DB knows about - * (can use {@link addFileEntry} to inform it about new files). From this + * (we can use {@link addFileEntry} to inform it about new files). From this * universe, we filter out fileIDs the files corresponding to which have already * been indexed, or which should be ignored. * @@ -397,6 +398,9 @@ export const indexableFileIDs = async (count?: number) => { * If an entry does not exist yet for the given file, then a new one is created * and its failure count is set to 1. Otherwise the failure count of the * existing entry is incremented. + * + * This count is across all different types of indexing (face, CLIP) that happen + * on the file. */ export const markIndexingFailed = async (fileID: number) => { const db = await mlDB(); From cfb1b8423be75986ea1a1c1300b4f16583993d14 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 12:33:09 +0530 Subject: [PATCH 337/466] Continue --- web/packages/new/photos/services/ml/clip.ts | 109 +++++++++++++++++- web/packages/new/photos/services/ml/image.ts | 2 +- web/packages/new/photos/services/ml/index.ts | 1 + .../new/photos/services/ml/worker-electron.ts | 1 + web/packages/next/types/ipc.ts | 7 +- 5 files changed, 113 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 87f03034f9..f8202d89ca 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -1,5 +1,10 @@ +// See: [Note: Allowing non-null assertions selectively] +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + import type { EnteFile } from "@/new/photos/types/file"; +import { ensure } from "@/utils/ensure"; import type { ImageBitmapAndData } from "./bitmap"; +import { pixelRGBBicubic } from "./image"; import type { MLWorkerElectron } from "./worker-electron"; /** @@ -12,6 +17,47 @@ export const clipIndexingVersion = 1; * * See {@link FaceIndex} for a similar structure with more comprehensive * documentation. + * + * --- + * + * [Note: Natural language search using CLIP] + * + * CLIP (Contrastive Language-Image Pretraining) is a neural network trained on + * (image, text) pairs. It can be thought of as two separate (but jointly + * trained) encoders - one for images, and one for text - that both map to the + * same embedding space. + * + * We use this for natural language search within the app: + * + * 1. Pre-compute an embedding for each image. + * + * 2. When the user searches, compute an embedding for the search term. + * + * 3. Use cosine similarity to find the find the image (embedding) closest to + * the text (embedding). + * + * More details are in our [blog + * post](https://ente.io/blog/image-search-with-clip-ggml/) that describes the + * initial launch of this feature using the GGML runtime. + * + * Since the initial launch, we've switched over to another runtime, + * [ONNX](https://onnxruntime.ai) and have made other implementation changes, + * but the overall gist remains the same. + * + * Note that we don't train the neural network - we only use one of the publicly + * available pre-trained neural networks for inference. These neural networks + * are wholly defined by their connectivity and weights. ONNX, our ML runtimes, + * loads these weights and instantiates a running network that we can use to + * compute the embeddings. + * + * Theoretically, the same CLIP model can be loaded by different frameworks / + * runtimes, but in practice each runtime has its own preferred format, and + * there are also quantization tradeoffs. So there is a specific model (a binary + * encoding of weights) tied to our current runtime that we use. + * + * To ensure that the embeddings, for the most part, can be shared, whenever + * possible we try to ensure that all the preprocessing steps, and the model + * itself, is the same across clients - web and mobile. */ export interface CLIPIndex { /** The ID of the {@link EnteFile} whose index this is. */ @@ -68,10 +114,67 @@ export const indexCLIP = async ( const indexCLIP_ = async ( // eslint-disable-next-line @typescript-eslint/no-unused-vars - _imageData: ImageData, + imageData: ImageData, // eslint-disable-next-line @typescript-eslint/no-unused-vars - _electron: MLWorkerElectron, + electron: MLWorkerElectron, // eslint-disable-next-line @typescript-eslint/require-await ): Promise => { - throw new Error("TODO"); + const clipInput = convertToCLIPInput(imageData); + const embedding = await electron.computeCLIPImageEmbedding(clipInput); + return Array.from(normalizeEmbedding(embedding)); +}; + +/** + * Convert {@link imageData} into the format that the CLIP model expects. + */ +const convertToCLIPInput = (imageData: ImageData) => { + const requiredWidth = 224; + const requiredHeight = 224; + + const mean: number[] = [0.48145466, 0.4578275, 0.40821073]; + const std: number[] = [0.26862954, 0.26130258, 0.27577711]; + + const { width, height, data: pixelData } = imageData; + + // Maintain aspect ratio. + const scale = Math.max(requiredWidth / width, requiredHeight / height); + + const scaledWidth = Math.round(width * scale); + const scaledHeight = Math.round(height * scale); + const widthOffset = Math.max(0, scaledWidth - requiredWidth) / 2; + const heightOffset = Math.max(0, scaledHeight - requiredHeight) / 2; + + const clipInput = new Float32Array(3 * requiredWidth * requiredHeight); + + // Populate the Float32Array with normalized pixel values. + let pi = 0; + const cOffsetG = requiredHeight * requiredWidth; // ChannelOffsetGreen + const cOffsetB = 2 * requiredHeight * requiredWidth; // ChannelOffsetBlue + for (let h = 0 + heightOffset; h < scaledHeight - heightOffset; h++) { + for (let w = 0 + widthOffset; w < scaledWidth - widthOffset; w++) { + const { r, g, b } = pixelRGBBicubic( + w / scale, + h / scale, + pixelData, + width, + height, + ); + clipInput[pi] = (r / 255.0 - mean[0]!) / std[0]!; + clipInput[pi + cOffsetG] = (g / 255.0 - mean[1]!) / std[1]!; + clipInput[pi + cOffsetB] = (b / 255.0 - mean[2]!) / std[2]!; + pi++; + } + } + return clipInput; +}; + +const normalizeEmbedding = (embedding: Float32Array) => { + let normalization = 0; + for (const v of embedding) normalization += v * v; + + const sqrtNormalization = Math.sqrt(normalization); + for (let index = 0; index < embedding.length; index++) + embedding[index] = ensure(embedding[index]) / sqrtNormalization; + + return embedding; }; diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index b3b078041f..d1608e96e0 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -80,7 +80,7 @@ const pixelRGBA = ( * Returns the pixel value (RGB) at the given coordinates ({@link fx}, * {@link fy}) using bicubic interpolation. */ -const pixelRGBBicubic = ( +export const pixelRGBBicubic = ( fx: number, fy: number, imageData: Uint8ClampedArray, diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 62f4637894..1f6ff828f1 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -47,6 +47,7 @@ const createComlinkWorker = async () => { appVersion: electron.appVersion, detectFaces: electron.detectFaces, computeFaceEmbeddings: electron.computeFaceEmbeddings, + computeCLIPImageEmbedding: electron.computeCLIPImageEmbedding, }; const cw = new ComlinkWorker( diff --git a/web/packages/new/photos/services/ml/worker-electron.ts b/web/packages/new/photos/services/ml/worker-electron.ts index 250db9cf5d..0e187a178a 100644 --- a/web/packages/new/photos/services/ml/worker-electron.ts +++ b/web/packages/new/photos/services/ml/worker-electron.ts @@ -10,4 +10,5 @@ export interface MLWorkerElectron { appVersion: () => Promise; detectFaces: (input: Float32Array) => Promise; computeFaceEmbeddings: (input: Float32Array) => Promise; + computeCLIPImageEmbedding: (input: Float32Array) => Promise; } diff --git a/web/packages/next/types/ipc.ts b/web/packages/next/types/ipc.ts index 4f68d50d73..be53612981 100644 --- a/web/packages/next/types/ipc.ts +++ b/web/packages/next/types/ipc.ts @@ -337,9 +337,10 @@ export interface Electron { /** * Return a CLIP embedding of the given image. * - * See: [Note: CLIP based magic search] + * See: [Note: Natural language search using CLIP] * - * @param jpegImageData The raw bytes of the image encoded as an JPEG. + * The input is a opaque binary data whose internal structure is specific to + * our implementation and the ML model (CLIP) we use. * * @returns A CLIP embedding. */ @@ -361,7 +362,7 @@ export interface Electron { * embeddings are used as part of deducing user initiated search results, * and we don't want to block that interaction on a large network request. * - * See: [Note: CLIP based magic search] + * See: [Note: Natural language search using CLIP] * * @param text The string whose embedding we want to compute. * From d11e94c939bca10eecc83084e1b716fd45a25559 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 12:37:33 +0530 Subject: [PATCH 338/466] Silence warning --- web/packages/build-config/tsconfig-typecheck.json | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/packages/build-config/tsconfig-typecheck.json b/web/packages/build-config/tsconfig-typecheck.json index 22aa4ab67a..8d96d36003 100644 --- a/web/packages/build-config/tsconfig-typecheck.json +++ b/web/packages/build-config/tsconfig-typecheck.json @@ -17,12 +17,21 @@ * implies "ESNext.*"), "DOM.Iterable" (the ability to iterate over DOM * elements) is not a subset of "DOM" and needs to be listed out * explicitly. - * - * Note that we don't need to specify the `target` compilerOption, since - * tsc isn't actually generating (emitting) the JavaScript. */ "lib": ["ESnext", "DOM", "DOM.Iterable", "WebWorker"], + /** + * We don't potentially need to specify the `target` compilerOption, + * since tsc isn't actually generating (emitting) the JavaScript. + * However, without a target TypeScript becomes very conservative, and + * complains about things like + * + * > Type 'Float32Array' can only be iterated through when using the + * > '--downlevelIteration' flag or with a '--target' of 'es2015' or + * > higher. + */ + "target": "ES2015", + /* * The module system to assume the generated JavaScript will use. * From 023610cebde3356150e8791765a28cc6e5237d98 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 12:39:55 +0530 Subject: [PATCH 339/466] Remove the need for null assertions --- web/packages/new/photos/services/ml/clip.ts | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index f8202d89ca..88eb49fd2d 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -1,6 +1,3 @@ -// See: [Note: Allowing non-null assertions selectively] -/* eslint-disable @typescript-eslint/no-non-null-assertion */ - import type { EnteFile } from "@/new/photos/types/file"; import { ensure } from "@/utils/ensure"; import type { ImageBitmapAndData } from "./bitmap"; @@ -108,16 +105,13 @@ export const indexCLIP = async ( fileID, version: clipIndexingVersion, client: userAgent, - embedding: await indexCLIP_(imageData, electron), + embedding: await computeEmbedding(imageData, electron), }; }; -const indexCLIP_ = async ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars +const computeEmbedding = async ( imageData: ImageData, - // eslint-disable-next-line @typescript-eslint/no-unused-vars electron: MLWorkerElectron, - // eslint-disable-next-line @typescript-eslint/require-await ): Promise => { const clipInput = convertToCLIPInput(imageData); const embedding = await electron.computeCLIPImageEmbedding(clipInput); @@ -131,8 +125,8 @@ const convertToCLIPInput = (imageData: ImageData) => { const requiredWidth = 224; const requiredHeight = 224; - const mean: number[] = [0.48145466, 0.4578275, 0.40821073]; - const std: number[] = [0.26862954, 0.26130258, 0.27577711]; + const mean = [0.48145466, 0.4578275, 0.40821073] as const; + const std = [0.26862954, 0.26130258, 0.27577711] as const; const { width, height, data: pixelData } = imageData; @@ -159,9 +153,9 @@ const convertToCLIPInput = (imageData: ImageData) => { width, height, ); - clipInput[pi] = (r / 255.0 - mean[0]!) / std[0]!; - clipInput[pi + cOffsetG] = (g / 255.0 - mean[1]!) / std[1]!; - clipInput[pi + cOffsetB] = (b / 255.0 - mean[2]!) / std[2]!; + clipInput[pi] = (r / 255.0 - mean[0]) / std[0]; + clipInput[pi + cOffsetG] = (g / 255.0 - mean[1]) / std[1]; + clipInput[pi + cOffsetB] = (b / 255.0 - mean[2]) / std[2]; pi++; } } From ca44202fcd0ddc83cd387c9f8950c9bca948b9d9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 13:14:24 +0530 Subject: [PATCH 340/466] remote --- .../new/photos/services/ml/embedding.ts | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index ce82780ee2..7685f0fb7c 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -12,8 +12,9 @@ import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; import { apiURL } from "@/next/origins"; import { z } from "zod"; -import { saveFaceIndex } from "./db"; -import { type FaceIndex, faceIndexingVersion } from "./face"; +import { clipIndexingVersion, type CLIPIndex } from "./clip"; +import { saveCLIPIndex, saveFaceIndex } from "./db"; +import { faceIndexingVersion, type FaceIndex } from "./face"; /** * The embeddings that we (the current client) knows how to handle. @@ -397,3 +398,61 @@ const FaceIndex = z */ export const putFaceIndex = async (enteFile: EnteFile, faceIndex: FaceIndex) => putEmbedding(enteFile, "file-ml-clip-face", JSON.stringify(faceIndex)); + +// MARK: - CLIP + +/** + * Fetch new or updated CLIP embeddings from remote and save them locally. + * + * See {@link pullFaceEmbeddings} for a sibling function with more comprehensive + * documentation. + * + * @returns true if at least one embedding was pulled, false otherwise. + */ +export const pullCLIPEmbeddings = () => + pullEmbeddings("onnx-clip", (jsonString: string) => + // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment + // @ts-ignore TODO: There is no error here, but this file is imported by + // one of our packages that doesn't have strict mode enabled yet, + // causing a spurious error to be emitted in that context. + saveCLIPIndexIfNewer(CLIPIndex.parse(JSON.parse(jsonString))), + ); + +/** + * Save the given {@link clipIndex} locally if it is newer than the one we have. + * + * This is a variant of {@link saveCLIPIndex} that performs version checking as + * described in [Note: Handling versioning of embeddings]. + */ +const saveCLIPIndexIfNewer = async (index: CLIPIndex) => { + const version = index.version; + if (version < clipIndexingVersion) { + log.info( + `Ignoring remote CLIP index with version ${version} older than what our indexer can produce (${clipIndexingVersion})`, + ); + return; + } + return saveCLIPIndex(index); +}; + +/** + * Zod schemas for the {@link CLIPIndex} types. + * + * See: [Note: Duplicated between Zod schemas and TS type] + */ +const CLIPIndex = z + .object({ + fileID: z.number(), + version: z.number(), + client: z.string(), + embedding: z.array(z.number()), + }) + // Retain fields we might not (currently) understand. + .passthrough(); + +/** + * Save the CLIP index for the given {@link enteFile} on remote so that other + * clients can directly pull it instead of needing to reindex. + */ +export const putCLIPIndex = async (enteFile: EnteFile, clipIndex: CLIPIndex) => + putEmbedding(enteFile, "onnx-clip", JSON.stringify(clipIndex)); From 2920e04aa5ca1b4165f20d184d55e4d55d5a9695 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 13:26:30 +0530 Subject: [PATCH 341/466] Pull both --- web/packages/new/photos/services/ml/worker.ts | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index d854989c5f..ef752c57af 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -18,7 +18,11 @@ import { saveFaceIndex, updateAssumingLocalFiles, } from "./db"; -import { pullFaceEmbeddings, putFaceIndex } from "./embedding"; +import { + pullCLIPEmbeddings, + pullFaceEmbeddings, + putFaceIndex, +} from "./embedding"; import { type FaceIndex, indexFaces } from "./face"; import type { MLWorkerElectron } from "./worker-electron"; @@ -239,7 +243,24 @@ expose(MLWorker); * Return true atleast one embedding was pulled. */ const pull = async () => { - return pullFaceEmbeddings(); + const res = await Promise.allSettled([ + pullFaceEmbeddings(), + // TODO-ML: clip-test + pullCLIPEmbeddings(), + ]); + for (const r of res) { + switch (r.status) { + case "fulfilled": + // Return true if any pulled something. + if (r.value) return true; + break; + case "rejected": + // Throw if any failed. + throw r.reason; + } + } + // Return false if neither pulled anything. + return false; }; /** From ed660c36df712488afd368c57a018be487b4c5b9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 13:30:17 +0530 Subject: [PATCH 342/466] Remove unnecessary return --- web/packages/new/photos/services/ml/worker.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index ef752c57af..14da19691a 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -415,6 +415,4 @@ const index = async ( const ms = Date.now() - startTime; return `Indexed ${nf} faces in ${f} (${ms} ms)`; }); - - return faceIndex; }; From cb148ea3b13ed76c71dd91fc45b6d213540dfcb6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 13:52:26 +0530 Subject: [PATCH 343/466] both --- web/packages/new/photos/services/ml/worker.ts | 72 ++++++++++++++++--- 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 14da19691a..17e45a4236 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -11,19 +11,22 @@ import { expose } from "comlink"; import downloadManager from "../download"; import { getAllLocalFiles, getLocalTrashedFiles } from "../files"; import type { UploadItem } from "../upload/types"; -import { imageBitmapAndData } from "./bitmap"; +import { imageBitmapAndData, type ImageBitmapAndData } from "./bitmap"; +import { indexCLIP, type CLIPIndex } from "./clip"; import { indexableFileIDs, markIndexingFailed, + saveCLIPIndex, saveFaceIndex, updateAssumingLocalFiles, } from "./db"; import { pullCLIPEmbeddings, pullFaceEmbeddings, + putCLIPIndex, putFaceIndex, } from "./embedding"; -import { type FaceIndex, indexFaces } from "./face"; +import { indexFaces, type FaceIndex } from "./face"; import type { MLWorkerElectron } from "./worker-electron"; const idleDurationStart = 5; /* 5 seconds */ @@ -360,6 +363,32 @@ const index = async ( const startTime = Date.now(); const image = await imageBitmapAndData(enteFile, uploadItem, electron); + const res = await Promise.allSettled([ + _indexFace(f, enteFile, image, electron, userAgent), + // TODO-ML: clip-test + _indexCLIP(f, enteFile, image, electron, userAgent), + ]); + image.bitmap.close(); + + const msg: string[] = []; + for (const r of res) { + if (r.status == "rejected") throw r.reason; + else msg.push(r.value); + } + + log.debug(() => { + const ms = Date.now() - startTime; + return `Indexed ${msg.join(" and ")} in ${f} (${ms} ms)`; + }); +}; + +const _indexFace = async ( + f: string, + enteFile: EnteFile, + image: ImageBitmapAndData, + electron: MLWorkerElectron, + userAgent: string, +) => { let faceIndex: FaceIndex; try { faceIndex = await indexFaces(enteFile, image, electron, userAgent); @@ -367,8 +396,6 @@ const index = async ( log.error(`Failed to index faces in ${f}`, e); await markIndexingFailed(enteFile.id); throw e; - } finally { - image.bitmap.close(); } // [Note: Transient and permanent indexing failures] @@ -410,9 +437,36 @@ const index = async ( throw e; } - log.debug(() => { - const nf = faceIndex.faceEmbedding.faces.length; - const ms = Date.now() - startTime; - return `Indexed ${nf} faces in ${f} (${ms} ms)`; - }); + // A message for debug printing. + return `${faceIndex.faceEmbedding.faces.length} faces`; +}; + +const _indexCLIP = async ( + f: string, + enteFile: EnteFile, + image: ImageBitmapAndData, + electron: MLWorkerElectron, + userAgent: string, +) => { + let clipIndex: CLIPIndex; + try { + clipIndex = await indexCLIP(enteFile, image, electron, userAgent); + } catch (e) { + log.error(`Failed to index CLIP in ${f}`, e); + await markIndexingFailed(enteFile.id); + throw e; + } + + // See: [Note: Transient and permanent indexing failures] + try { + await putCLIPIndex(enteFile, clipIndex); + await saveCLIPIndex(clipIndex); + } catch (e) { + log.error(`Failed to put/save CLIP index for ${f}`, e); + if (isHTTP4xxError(e)) await markIndexingFailed(enteFile.id); + throw e; + } + + // A message for debug printing. + return "clip"; }; From 45b1f82032fb254145c447a4bfb1031832de1675 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:08:58 +0530 Subject: [PATCH 344/466] wip towards removal --- web/apps/photos/src/services/clip-service.ts | 25 ------ web/apps/photos/src/services/searchService.ts | 85 +++++++++++++------ web/packages/new/photos/services/ml/clip.ts | 8 +- web/packages/shared/error/index.ts | 1 - 4 files changed, 66 insertions(+), 53 deletions(-) diff --git a/web/apps/photos/src/services/clip-service.ts b/web/apps/photos/src/services/clip-service.ts index 4b9900aed5..59fb60fdcf 100644 --- a/web/apps/photos/src/services/clip-service.ts +++ b/web/apps/photos/src/services/clip-service.ts @@ -359,32 +359,7 @@ const getNonClipEmbeddingExtractedFiles = async ( }); }; -export const computeClipMatchScore = async ( - imageEmbedding: Float32Array, - textEmbedding: Float32Array, -) => { - if (imageEmbedding.length !== textEmbedding.length) { - throw Error("imageEmbedding and textEmbedding length mismatch"); - } - let score = 0; - let imageNormalization = 0; - let textNormalization = 0; - for (let index = 0; index < imageEmbedding.length; index++) { - imageNormalization += imageEmbedding[index] * imageEmbedding[index]; - textNormalization += textEmbedding[index] * textEmbedding[index]; - } - for (let index = 0; index < imageEmbedding.length; index++) { - imageEmbedding[index] = - imageEmbedding[index] / Math.sqrt(imageNormalization); - textEmbedding[index] = - textEmbedding[index] / Math.sqrt(textNormalization); - } - for (let index = 0; index < imageEmbedding.length; index++) { - score += imageEmbedding[index] * textEmbedding[index]; - } - return score; -}; const initialIndexingStatus = async (): Promise => { const user = getData(LS_KEYS.USER); diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 98e5c5e842..b2d2c6aad3 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -19,14 +19,12 @@ import { import ComlinkSearchWorker from "utils/comlink/ComlinkSearchWorker"; import { getUniqueFiles } from "utils/file"; import { getFormattedDate } from "utils/search"; -import { clipService, computeClipMatchScore } from "./clip-service"; -import { localCLIPEmbeddings } from "./embeddingService"; import { getLatestEntities } from "./entityService"; import locationSearchService, { City } from "./locationSearchService"; const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]); -const CLIP_SCORE_THRESHOLD = 0.23; +// const CLIP_SCORE_THRESHOLD = 0.23; export const getDefaultOptions = async () => { return [ @@ -373,31 +371,66 @@ async function searchLocationTag(searchPhrase: string): Promise { } const searchClip = async ( - searchPhrase: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _searchPhrase: string, ): Promise => { - const textEmbedding = - await clipService.getTextEmbeddingIfAvailable(searchPhrase); - if (!textEmbedding) return undefined; - - const imageEmbeddings = await localCLIPEmbeddings(); - const clipSearchResult = new Map( - ( - await Promise.all( - imageEmbeddings.map( - async (imageEmbedding): Promise<[number, number]> => [ - imageEmbedding.fileID, - await computeClipMatchScore( - imageEmbedding.embedding, - textEmbedding, - ), - ], - ), - ) - ).filter(([, score]) => score >= CLIP_SCORE_THRESHOLD), - ); - - return clipSearchResult; + // TODO-ML: + return undefined; }; +// const textEmbedding = +// await clipService.getTextEmbeddingIfAvailable(searchPhrase); +// if (!textEmbedding) return undefined; + +// const imageEmbeddings = await localCLIPEmbeddings(); +// const clipSearchResult = new Map( +// ( +// await Promise.all( +// imageEmbeddings.map( +// async (imageEmbedding): Promise<[number, number]> => [ +// imageEmbedding.fileID, +// await computeClipMatchScore( +// imageEmbedding.embedding, +// textEmbedding, +// ), +// ], +// ), +// ) +// ).filter(([, score]) => score >= CLIP_SCORE_THRESHOLD), +// ); + +// return clipSearchResult; +// }; + +// getTextEmbeddingIfAvailable = async (text: string) => { +// return ensureElectron().computeCLIPTextEmbeddingIfAvailable(text); +// }; + +// export const computeClipMatchScore = async ( +// imageEmbedding: Float32Array, +// textEmbedding: Float32Array, +// ) => { +// if (imageEmbedding.length !== textEmbedding.length) { +// throw Error("imageEmbedding and textEmbedding length mismatch"); +// } +// let score = 0; +// let imageNormalization = 0; +// let textNormalization = 0; + +// for (let index = 0; index < imageEmbedding.length; index++) { +// imageNormalization += imageEmbedding[index] * imageEmbedding[index]; +// textNormalization += textEmbedding[index] * textEmbedding[index]; +// } +// for (let index = 0; index < imageEmbedding.length; index++) { +// imageEmbedding[index] = +// imageEmbedding[index] / Math.sqrt(imageNormalization); +// textEmbedding[index] = +// textEmbedding[index] / Math.sqrt(textNormalization); +// } +// for (let index = 0; index < imageEmbedding.length; index++) { +// score += imageEmbedding[index] * textEmbedding[index]; +// } +// return score; +// }; function convertSuggestionToSearchQuery(option: Suggestion): Search { switch (option.type) { diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 88eb49fd2d..ef59fed210 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -63,7 +63,13 @@ export interface CLIPIndex { version: number; /** The UA for the client which generated this embedding. */ client: string; - /** The CLIP embedding itself. */ + /** + * The CLIP embedding itself. + * + * This is an array of 512 floating point values that represent the + * embedding of the image in the same space where we'll embed the text so + * that both of them can be compared using a cosine distance. + */ embedding: number[]; } diff --git a/web/packages/shared/error/index.ts b/web/packages/shared/error/index.ts index 3dea65554b..b3f16fa648 100644 --- a/web/packages/shared/error/index.ts +++ b/web/packages/shared/error/index.ts @@ -71,7 +71,6 @@ export const CustomError = { CLIENT_ERROR: "client error", ServerError: "server error", FILE_NOT_FOUND: "file not found", - UNSUPPORTED_PLATFORM: "Unsupported platform", UPDATE_URL_FILE_ID_MISMATCH: "update url file id mismatch", URL_ALREADY_SET: "url already set", FILE_CONVERSION_FAILED: "file conversion failed", From 2f5c966892b1c316cce829720248e8a02e24d7eb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:22:50 +0530 Subject: [PATCH 345/466] Remove old --- .../photos/src/services/embeddingService.ts | 352 ------------------ web/apps/photos/src/types/embedding.tsx | 29 -- web/packages/new/photos/services/ml/db.ts | 14 + .../new/photos/services/ml/embedding.ts | 2 +- web/packages/next/origins.ts | 4 +- web/packages/next/worker/comlink-worker.ts | 8 +- web/packages/shared/error/index.ts | 1 - 7 files changed, 20 insertions(+), 390 deletions(-) delete mode 100644 web/apps/photos/src/services/embeddingService.ts delete mode 100644 web/apps/photos/src/types/embedding.tsx diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts deleted file mode 100644 index ca1e0dd8a9..0000000000 --- a/web/apps/photos/src/services/embeddingService.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { - getAllLocalFiles, - getLocalTrashedFiles, -} from "@/new/photos/services/files"; -import type { EmbeddingModel } from "@/new/photos/services/ml/embedding"; -import type { FaceIndex } from "@/new/photos/services/ml/face"; -import { EnteFile } from "@/new/photos/types/file"; -import { inWorker } from "@/next/env"; -import log from "@/next/log"; -import { apiURL } from "@/next/origins"; -import { workerBridge } from "@/next/worker/worker-bridge"; -import ComlinkCryptoWorker from "@ente/shared/crypto"; -import { CustomError } from "@ente/shared/error"; -import HTTPService from "@ente/shared/network/HTTPService"; -import localForage from "@ente/shared/storage/localForage"; -import { getToken } from "@ente/shared/storage/localStorage/helpers"; -import type { - Embedding, - EncryptedEmbedding, - GetEmbeddingDiffResponse, - PutEmbeddingRequest, -} from "types/embedding"; -import { getLocalCollections } from "./collectionService"; - -type FileML = FaceIndex & { - updatedAt: number; -}; -const DIFF_LIMIT = 500; - -/** Local storage key suffix for embedding sync times */ -const embeddingSyncTimeLSKeySuffix = "embedding_sync_time"; -/** Local storage key for CLIP embeddings. */ -const clipEmbeddingsLSKey = "embeddings_v2"; -const FILE_EMBEDING_TABLE = "file_embeddings"; - -/** Return all CLIP embeddings that we have available locally. */ -export const localCLIPEmbeddings = async () => - (await storedCLIPEmbeddings()).filter(({ model }) => model === "onnx-clip"); - -const storedCLIPEmbeddings = async () => { - const embeddings: Array = - await localForage.getItem(clipEmbeddingsLSKey); - if (!embeddings) { - // Migrate - await localForage.removeItem("embeddings"); - await localForage.removeItem("embedding_sync_time"); - await localForage.setItem(clipEmbeddingsLSKey, []); - return []; - } - return embeddings; -}; - -export const getFileMLEmbeddings = async (): Promise => { - const embeddings: Array = - await localForage.getItem(FILE_EMBEDING_TABLE); - if (!embeddings) { - return []; - } - return embeddings; -}; - -const getModelEmbeddingSyncTime = async (model: EmbeddingModel) => { - return ( - (await localForage.getItem( - `${model}-${embeddingSyncTimeLSKeySuffix}`, - )) ?? 0 - ); -}; - -const setModelEmbeddingSyncTime = async ( - model: EmbeddingModel, - time: number, -) => { - await localForage.setItem(`${model}-${embeddingSyncTimeLSKeySuffix}`, time); -}; - -/** - * Fetch new CLIP embeddings with the server and save them locally. Also prune - * local embeddings for any files no longer exist locally. - */ -export const syncCLIPEmbeddings = async () => { - const model: EmbeddingModel = "onnx-clip"; - try { - let allEmbeddings = await storedCLIPEmbeddings(); - const localFiles = await getAllLocalFiles(); - const hiddenAlbums = await getLocalCollections("hidden"); - const localTrashFiles = await getLocalTrashedFiles(); - const fileIdToKeyMap = new Map(); - const allLocalFiles = [...localFiles, ...localTrashFiles]; - allLocalFiles.forEach((file) => { - fileIdToKeyMap.set(file.id, file.key); - }); - await cleanupDeletedEmbeddings( - allLocalFiles, - allEmbeddings, - clipEmbeddingsLSKey, - ); - log.info(`Syncing embeddings localCount: ${allEmbeddings.length}`); - - let modelLastSinceTime = await getModelEmbeddingSyncTime(model); - log.info( - `Syncing ${model} model's embeddings sinceTime: ${modelLastSinceTime}`, - ); - let response: GetEmbeddingDiffResponse; - do { - response = await getEmbeddingsDiff(modelLastSinceTime, model); - if (!response.diff?.length) { - return; - } - // Note: in rare cases we might get a diff entry for an embedding - // corresponding to a file which has been deleted (but whose - // embedding is enqueued for deletion). Client should expect such a - // scenario (all it has to do is just ignore them). - const newEmbeddings = await Promise.all( - response.diff.map(async (embedding) => { - try { - const { - encryptedEmbedding, - decryptionHeader, - ...rest - } = embedding; - const worker = await ComlinkCryptoWorker.getInstance(); - const fileKey = fileIdToKeyMap.get(embedding.fileID); - if (!fileKey) { - throw Error(CustomError.FILE_NOT_FOUND); - } - const decryptedData = await worker.decryptEmbedding( - encryptedEmbedding, - decryptionHeader, - fileIdToKeyMap.get(embedding.fileID), - ); - - return { - ...rest, - embedding: decryptedData, - } as Embedding; - } catch (e) { - let hasHiddenAlbums = false; - if (e.message === CustomError.FILE_NOT_FOUND) { - hasHiddenAlbums = hiddenAlbums?.length > 0; - } - log.error( - `decryptEmbedding failed for file (hasHiddenAlbums: ${hasHiddenAlbums})`, - e, - ); - } - }), - ); - allEmbeddings = getLatestVersionEmbeddings([ - ...allEmbeddings, - ...newEmbeddings, - ]); - modelLastSinceTime = response.diff.reduce( - (max, { updatedAt }) => Math.max(max, updatedAt), - modelLastSinceTime, - ); - await localForage.setItem(clipEmbeddingsLSKey, allEmbeddings); - await setModelEmbeddingSyncTime(model, modelLastSinceTime); - log.info( - `Syncing embeddings syncedEmbeddingsCount: ${allEmbeddings.length}`, - ); - } while (response.diff.length > 0); - } catch (e) { - log.error("Sync embeddings failed", e); - } -}; - -export const syncFaceEmbeddings = async () => { - const model: EmbeddingModel = "file-ml-clip-face"; - try { - let allEmbeddings: FileML[] = await getFileMLEmbeddings(); - const localFiles = await getAllLocalFiles(); - const hiddenAlbums = await getLocalCollections("hidden"); - const localTrashFiles = await getLocalTrashedFiles(); - const fileIdToKeyMap = new Map(); - const allLocalFiles = [...localFiles, ...localTrashFiles]; - allLocalFiles.forEach((file) => { - fileIdToKeyMap.set(file.id, file.key); - }); - await cleanupDeletedEmbeddings( - allLocalFiles, - allEmbeddings, - FILE_EMBEDING_TABLE, - ); - log.info(`Syncing embeddings localCount: ${allEmbeddings.length}`); - - let modelLastSinceTime = await getModelEmbeddingSyncTime(model); - log.info( - `Syncing ${model} model's embeddings sinceTime: ${modelLastSinceTime}`, - ); - let response: GetEmbeddingDiffResponse; - do { - response = await getEmbeddingsDiff(modelLastSinceTime, model); - if (!response.diff?.length) { - return; - } - const newEmbeddings = await Promise.all( - response.diff.map(async (embedding) => { - try { - const worker = await ComlinkCryptoWorker.getInstance(); - const fileKey = fileIdToKeyMap.get(embedding.fileID); - if (!fileKey) { - throw Error(CustomError.FILE_NOT_FOUND); - } - const decryptedData = await worker.decryptMetadata( - embedding.encryptedEmbedding, - embedding.decryptionHeader, - fileIdToKeyMap.get(embedding.fileID), - ); - - return { - ...decryptedData, - updatedAt: embedding.updatedAt, - } as unknown as FileML; - } catch (e) { - let hasHiddenAlbums = false; - if (e.message === CustomError.FILE_NOT_FOUND) { - hasHiddenAlbums = hiddenAlbums?.length > 0; - } - log.error( - `decryptEmbedding failed for file (hasHiddenAlbums: ${hasHiddenAlbums})`, - e, - ); - } - }), - ); - allEmbeddings = getLatestVersionFileEmbeddings([ - ...allEmbeddings, - ...newEmbeddings, - ]); - modelLastSinceTime = response.diff.reduce( - (max, { updatedAt }) => Math.max(max, updatedAt), - modelLastSinceTime, - ); - await localForage.setItem(FILE_EMBEDING_TABLE, allEmbeddings); - await setModelEmbeddingSyncTime(model, modelLastSinceTime); - log.info( - `Syncing embeddings syncedEmbeddingsCount: ${allEmbeddings.length}`, - ); - } while (response.diff.length > 0); - } catch (e) { - log.error("Sync embeddings failed", e); - } -}; - -const getLatestVersionEmbeddings = (embeddings: Embedding[]) => { - const latestVersionEntities = new Map(); - embeddings.forEach((embedding) => { - if (!embedding?.fileID) { - return; - } - const existingEmbeddings = latestVersionEntities.get(embedding.fileID); - if ( - !existingEmbeddings || - existingEmbeddings.updatedAt < embedding.updatedAt - ) { - latestVersionEntities.set(embedding.fileID, embedding); - } - }); - return Array.from(latestVersionEntities.values()); -}; - -const getLatestVersionFileEmbeddings = (embeddings: FileML[]) => { - const latestVersionEntities = new Map(); - embeddings.forEach((embedding) => { - if (!embedding?.fileID) { - return; - } - const existingEmbeddings = latestVersionEntities.get(embedding.fileID); - if ( - !existingEmbeddings || - existingEmbeddings.updatedAt < embedding.updatedAt - ) { - latestVersionEntities.set(embedding.fileID, embedding); - } - }); - return Array.from(latestVersionEntities.values()); -}; - -export const getEmbeddingsDiff = async ( - sinceTime: number, - model: EmbeddingModel, -): Promise => { - try { - const token = getToken(); - if (!token) { - return; - } - const response = await HTTPService.get( - await apiURL("/embeddings/diff"), - { - sinceTime, - limit: DIFF_LIMIT, - model, - }, - { - "X-Auth-Token": token, - }, - ); - return await response.data; - } catch (e) { - log.error("get embeddings diff failed", e); - throw e; - } -}; - -export const putEmbedding = async ( - putEmbeddingReq: PutEmbeddingRequest, -): Promise => { - try { - const token = inWorker() - ? await workerBridge.getAuthToken() - : getToken(); - if (!token) { - log.info("putEmbedding failed: token not found"); - throw Error(CustomError.TOKEN_MISSING); - } - const resp = await HTTPService.put( - await apiURL("/embeddings"), - putEmbeddingReq, - null, - { - "X-Auth-Token": token, - }, - ); - return resp.data; - } catch (e) { - log.error("put embedding failed", e); - throw e; - } -}; - -export const cleanupDeletedEmbeddings = async ( - allLocalFiles: EnteFile[], - allLocalEmbeddings: Embedding[] | FileML[], - tableName: string, -) => { - const activeFileIds = new Set(); - allLocalFiles.forEach((file) => { - activeFileIds.add(file.id); - }); - - const remainingEmbeddings = allLocalEmbeddings.filter((embedding) => - activeFileIds.has(embedding.fileID), - ); - if (allLocalEmbeddings.length !== remainingEmbeddings.length) { - log.info( - `cleanupDeletedEmbeddings embeddingsCount: ${allLocalEmbeddings.length} remainingEmbeddingsCount: ${remainingEmbeddings.length}`, - ); - await localForage.setItem(tableName, remainingEmbeddings); - } -}; diff --git a/web/apps/photos/src/types/embedding.tsx b/web/apps/photos/src/types/embedding.tsx deleted file mode 100644 index 6499a1b7d7..0000000000 --- a/web/apps/photos/src/types/embedding.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import type { EmbeddingModel } from "@/new/photos/services/ml/embedding"; - -export interface EncryptedEmbedding { - fileID: number; - /** @see {@link EmbeddingModel} */ - model: string; - encryptedEmbedding: string; - decryptionHeader: string; - updatedAt: number; -} - -export interface Embedding - extends Omit< - EncryptedEmbedding, - "encryptedEmbedding" | "decryptionHeader" - > { - embedding?: Float32Array; -} - -export interface GetEmbeddingDiffResponse { - diff: EncryptedEmbedding[]; -} - -export interface PutEmbeddingRequest { - fileID: number; - model: EmbeddingModel; - encryptedEmbedding: string; - decryptionHeader: string; -} diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 1ba61b9a10..7de44f4628 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -1,4 +1,5 @@ import log from "@/next/log"; +import localForage from "@ente/shared/storage/localForage"; import { deleteDB, openDB, type DBSchema } from "idb"; import type { CLIPIndex } from "./clip"; import type { EmbeddingModel } from "./embedding"; @@ -136,6 +137,19 @@ const deleteLegacyDB = () => { // This code was added June 2024 (v1.7.1-rc) and can be removed once clients // have migrated over. void deleteDB("mldata"); + + // Delete the legacy CLIP (mostly) related keys from LocalForage. + // + // This code was added July 2024 (v1.7.2-rc) and can be removed once + // sufficient clients have migrated over (tag: Migration). + void Promise.all([ + localForage.removeItem("embeddings"), + localForage.removeItem("embedding_sync_time"), + localForage.removeItem("embeddings_v2"), + localForage.removeItem("file_embeddings"), + localForage.removeItem("onnx-clip-embedding_sync_time"), + localForage.removeItem("file-ml-clip-face-embedding_sync_time"), + ]); }; /** diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 7685f0fb7c..5c07b9e375 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -49,7 +49,7 @@ import { faceIndexingVersion, type FaceIndex } from "./face"; * "model" (i.e "type") field to create a new universe of embeddings. */ export type EmbeddingModel = - | "onnx-clip" /* CLIP (text) embeddings */ + | "onnx-clip" /* CLIP embeddings */ | "file-ml-clip-face" /* Face embeddings */; const RemoteEmbedding = z.object({ diff --git a/web/packages/next/origins.ts b/web/packages/next/origins.ts index 13937f42c0..874c0a6aec 100644 --- a/web/packages/next/origins.ts +++ b/web/packages/next/origins.ts @@ -38,8 +38,8 @@ export const apiURL = async (path: string) => (await apiOrigin()) + path; export const customAPIOrigin = async () => { let origin = await getKV("apiOrigin"); if (!origin && !inWorker()) { - // TODO: Migration of apiOrigin from local storage to indexed DB - // Remove me after a bit (27 June 2024). + // TODO: Migration of apiOrigin from local storage to indexed DB. Added + // 27 June 2024, 1.7.2-rc. Remove me after a bit (tag: Migration). const legacyOrigin = localStorage.getItem("apiOrigin"); if (legacyOrigin !== null) { origin = legacyOrigin; diff --git a/web/packages/next/worker/comlink-worker.ts b/web/packages/next/worker/comlink-worker.ts index c9b8879695..bfc49064c8 100644 --- a/web/packages/next/worker/comlink-worker.ts +++ b/web/packages/next/worker/comlink-worker.ts @@ -1,7 +1,6 @@ import { ensureElectron } from "@/next/electron"; import log, { logToDisk } from "@/next/log"; import { expose, wrap, type Remote } from "comlink"; -import { ensureLocalUser } from "../local-user"; /** * A minimal wrapper for a web {@link Worker}, proxying a class of type T. @@ -62,13 +61,12 @@ export class ComlinkWorker InstanceType> { * * Not all workers need access to all these functions, and this can indeed be * done in a more fine-grained, per-worker, manner if needed. For now, since it - * is a motley bunch, we just inject them all to all workers. + * is just a couple, we just inject them all to all workers. */ const workerBridge = { - // Needed by all workers (likely, not necessarily). + // Needed by all workers (likely, but not necessarily). logToDisk, - // Needed by MLWorker. - getAuthToken: () => ensureLocalUser().token, + // Needed by ML worker. convertToJPEG: (imageData: Uint8Array) => ensureElectron().convertToJPEG(imageData), }; diff --git a/web/packages/shared/error/index.ts b/web/packages/shared/error/index.ts index b3f16fa648..cdaf30e549 100644 --- a/web/packages/shared/error/index.ts +++ b/web/packages/shared/error/index.ts @@ -70,7 +70,6 @@ export const CustomError = { TWO_FACTOR_ENABLED: "two factor enabled", CLIENT_ERROR: "client error", ServerError: "server error", - FILE_NOT_FOUND: "file not found", UPDATE_URL_FILE_ID_MISMATCH: "update url file id mismatch", URL_ALREADY_SET: "url already set", FILE_CONVERSION_FAILED: "file conversion failed", From 82ec83caf3c754280e30f45786b08b059111fee7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:24:45 +0530 Subject: [PATCH 346/466] Remove 2 --- web/apps/photos/src/services/clip-service.ts | 377 ------------------- web/packages/new/photos/services/ml/db.ts | 3 +- 2 files changed, 2 insertions(+), 378 deletions(-) delete mode 100644 web/apps/photos/src/services/clip-service.ts diff --git a/web/apps/photos/src/services/clip-service.ts b/web/apps/photos/src/services/clip-service.ts deleted file mode 100644 index 59fb60fdcf..0000000000 --- a/web/apps/photos/src/services/clip-service.ts +++ /dev/null @@ -1,377 +0,0 @@ -import { FILE_TYPE } from "@/media/file-type"; -import downloadManager from "@/new/photos/services/download"; -import { getAllLocalFiles, getLocalFiles } from "@/new/photos/services/files"; -import { EnteFile } from "@/new/photos/types/file"; -import { ensureElectron } from "@/next/electron"; -import log from "@/next/log"; -import ComlinkCryptoWorker from "@ente/shared/crypto"; -import { CustomError } from "@ente/shared/error"; -import { Events, eventBus } from "@ente/shared/events"; -import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; -import PQueue from "p-queue"; -import { Embedding } from "types/embedding"; -import { getPersonalFiles } from "utils/file"; -import { localCLIPEmbeddings, putEmbedding } from "./embeddingService"; - -/** Status of CLIP indexing on the images in the user's local library. */ -export interface CLIPIndexingStatus { - /** Number of items pending indexing. */ - pending: number; - /** Number of items that have already been indexed. */ - indexed: number; -} - -/** - * Use a CLIP based neural network for natural language search. - * - * [Note: CLIP based magic search] - * - * CLIP (Contrastive Language-Image Pretraining) is a neural network trained on - * (image, text) pairs. It can be thought of as two separate (but jointly - * trained) encoders - one for images, and one for text - that both map to the - * same embedding space. - * - * We use this for natural language search within the app (aka "magic search"): - * - * 1. Pre-compute an embedding for each image. - * - * 2. When the user searches, compute an embedding for the search term. - * - * 3. Use cosine similarity to find the find the image (embedding) closest to - * the text (embedding). - * - * More details are in our [blog - * post](https://ente.io/blog/image-search-with-clip-ggml/) that describes the - * initial launch of this feature using the GGML runtime. - * - * Since the initial launch, we've switched over to another runtime, - * [ONNX](https://onnxruntime.ai). - * - * Note that we don't train the neural network - we only use one of the publicly - * available pre-trained neural networks for inference. These neural networks - * are wholly defined by their connectivity and weights. ONNX, our ML runtimes, - * loads these weights and instantiates a running network that we can use to - * compute the embeddings. - * - * Theoretically, the same CLIP model can be loaded by different frameworks / - * runtimes, but in practice each runtime has its own preferred format, and - * there are also quantization tradeoffs. So there is a specific model (a binary - * encoding of weights) tied to our current runtime that we use. - * - * To ensure that the embeddings, for the most part, can be shared, whenever - * possible we try to ensure that all the preprocessing steps, and the model - * itself, is the same across clients - web and mobile. - */ -class CLIPService { - private embeddingExtractionInProgress: AbortController | null = null; - private reRunNeeded = false; - private indexingStatus: CLIPIndexingStatus = { - pending: 0, - indexed: 0, - }; - private onUpdateHandler: ((status: CLIPIndexingStatus) => void) | undefined; - private liveEmbeddingExtractionQueue: PQueue; - private onFileUploadedHandler: - | ((arg: { enteFile: EnteFile; localFile: globalThis.File }) => void) - | null = null; - - constructor() { - this.liveEmbeddingExtractionQueue = new PQueue({ - concurrency: 1, - }); - } - - async logout() { - if (this.embeddingExtractionInProgress) { - this.embeddingExtractionInProgress.abort(); - } - if (this.onFileUploadedHandler) { - await this.removeOnFileUploadListener(); - } - } - - setupOnFileUploadListener = async () => { - try { - if (this.onFileUploadedHandler) { - log.info("file upload listener already setup"); - return; - } - log.info("setting up file upload listener"); - this.onFileUploadedHandler = (args) => { - this.runLocalFileClipExtraction(args); - }; - eventBus.on(Events.FILE_UPLOADED, this.onFileUploadedHandler, this); - log.info("setup file upload listener successfully"); - } catch (e) { - log.error("failed to setup clip service", e); - } - }; - - removeOnFileUploadListener = async () => { - try { - if (!this.onFileUploadedHandler) { - log.info("file upload listener already removed"); - return; - } - log.info("removing file upload listener"); - eventBus.removeListener( - Events.FILE_UPLOADED, - this.onFileUploadedHandler, - this, - ); - this.onFileUploadedHandler = null; - log.info("removed file upload listener successfully"); - } catch (e) { - log.error("failed to remove clip service", e); - } - }; - - getIndexingStatus = async () => { - if ( - this.indexingStatus.pending === 0 && - this.indexingStatus.indexed === 0 - ) { - this.indexingStatus = await initialIndexingStatus(); - } - return this.indexingStatus; - }; - - /** - * Set the {@link handler} to invoke whenever our indexing status changes. - */ - setOnUpdateHandler = (handler?: (status: CLIPIndexingStatus) => void) => { - this.onUpdateHandler = handler; - }; - - scheduleImageEmbeddingExtraction = async () => { - try { - if (this.embeddingExtractionInProgress) { - log.info( - "clip embedding extraction already in progress, scheduling re-run", - ); - this.reRunNeeded = true; - return; - } else { - log.info( - "clip embedding extraction not in progress, starting clip embedding extraction", - ); - } - const canceller = new AbortController(); - this.embeddingExtractionInProgress = canceller; - try { - await this.runClipEmbeddingExtraction(canceller); - } finally { - this.embeddingExtractionInProgress = null; - if (!canceller.signal.aborted && this.reRunNeeded) { - this.reRunNeeded = false; - log.info("re-running clip embedding extraction"); - setTimeout( - () => this.scheduleImageEmbeddingExtraction(), - 0, - ); - } - } - } catch (e) { - if (e.message !== CustomError.REQUEST_CANCELLED) { - log.error("failed to schedule clip embedding extraction", e); - } - } - }; - - getTextEmbeddingIfAvailable = async (text: string) => { - return ensureElectron().computeCLIPTextEmbeddingIfAvailable(text); - }; - - private runClipEmbeddingExtraction = async (canceller: AbortController) => { - try { - const user = getData(LS_KEYS.USER); - if (!user) { - return; - } - const localFiles = getPersonalFiles(await getAllLocalFiles(), user); - const existingEmbeddings = await localCLIPEmbeddings(); - const pendingFiles = await getNonClipEmbeddingExtractedFiles( - localFiles, - existingEmbeddings, - ); - this.updateIndexingStatus({ - indexed: existingEmbeddings.length, - pending: pendingFiles.length, - }); - if (pendingFiles.length === 0) { - log.info("no clip embedding extraction needed, all done"); - return; - } - log.info( - `starting clip embedding extraction for ${pendingFiles.length} files`, - ); - for (const file of pendingFiles) { - try { - log.info( - `extracting clip embedding for file: ${file.metadata.title} fileID: ${file.id}`, - ); - if (canceller.signal.aborted) { - throw Error(CustomError.REQUEST_CANCELLED); - } - const embeddingData = - await this.extractFileClipImageEmbedding(file); - log.info( - `successfully extracted clip embedding for file: ${file.metadata.title} fileID: ${file.id} embedding length: ${embeddingData?.length}`, - ); - await this.encryptAndUploadEmbedding(file, embeddingData); - this.onSuccessStatusUpdater(); - log.info( - `successfully put clip embedding to server for file: ${file.metadata.title} fileID: ${file.id}`, - ); - } catch (e) { - if (e?.message !== CustomError.REQUEST_CANCELLED) { - log.error( - "failed to extract clip embedding for file", - e, - ); - } - if ( - e?.message === CustomError.REQUEST_CANCELLED || - e?.message?.includes(CustomError.UNSUPPORTED_PLATFORM) - ) { - throw e; - } - } - } - } catch (e) { - if (e.message !== CustomError.REQUEST_CANCELLED) { - log.error("failed to extract clip embedding", e); - } - throw e; - } - }; - - private async runLocalFileClipExtraction(arg: { - enteFile: EnteFile; - localFile: globalThis.File; - }) { - const { enteFile, localFile } = arg; - log.info( - `clip embedding extraction onFileUploadedHandler file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, - enteFile.id, - ); - if (enteFile.metadata.fileType === FILE_TYPE.VIDEO) { - log.info( - `skipping video file for clip embedding extraction file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, - ); - return; - } - const extension = enteFile.metadata.title.split(".").pop(); - if (!extension || !["jpg", "jpeg"].includes(extension)) { - log.info( - `skipping non jpg file for clip embedding extraction file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, - ); - return; - } - log.info( - `queuing up for local clip embedding extraction for file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, - ); - try { - await this.liveEmbeddingExtractionQueue.add(async () => { - const embedding = - await this.extractLocalFileClipImageEmbedding(localFile); - await this.encryptAndUploadEmbedding(enteFile, embedding); - }); - log.info( - `successfully extracted clip embedding for file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, - ); - } catch (e) { - log.error("Failed in ML onFileUploadedHandler", e); - } - } - - private extractLocalFileClipImageEmbedding = async (localFile: File) => { - const file = await localFile - .arrayBuffer() - .then((buffer) => new Uint8Array(buffer)); - return await ensureElectron().computeCLIPImageEmbedding(file); - }; - - private encryptAndUploadEmbedding = async ( - file: EnteFile, - embeddingData: Float32Array, - ) => { - if (embeddingData?.length !== 512) { - throw Error( - `invalid length embedding data length: ${embeddingData?.length}`, - ); - } - const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); - const { file: encryptedEmbeddingData } = - await comlinkCryptoWorker.encryptEmbedding(embeddingData, file.key); - log.info( - `putting clip embedding to server for file: ${file.metadata.title} fileID: ${file.id}`, - ); - await putEmbedding({ - fileID: file.id, - encryptedEmbedding: encryptedEmbeddingData.encryptedData, - decryptionHeader: encryptedEmbeddingData.decryptionHeader, - model: "onnx-clip", - }); - }; - - private updateIndexingStatus = (status: CLIPIndexingStatus) => { - this.indexingStatus = status; - const handler = this.onUpdateHandler; - if (handler) handler(status); - }; - - private extractFileClipImageEmbedding = async (file: EnteFile) => { - const thumb = await downloadManager.getThumbnail(file); - const embedding = - await ensureElectron().computeCLIPImageEmbedding(thumb); - return embedding; - }; - - private onSuccessStatusUpdater = () => { - this.updateIndexingStatus({ - pending: this.indexingStatus.pending - 1, - indexed: this.indexingStatus.indexed + 1, - }); - }; -} - -export const clipService = new CLIPService(); - -const getNonClipEmbeddingExtractedFiles = async ( - files: EnteFile[], - existingEmbeddings: Embedding[], -) => { - const existingEmbeddingFileIds = new Set(); - existingEmbeddings.forEach((embedding) => - existingEmbeddingFileIds.add(embedding.fileID), - ); - const idSet = new Set(); - return files.filter((file) => { - if (idSet.has(file.id)) { - return false; - } - if (existingEmbeddingFileIds.has(file.id)) { - return false; - } - idSet.add(file.id); - return true; - }); -}; - - - -const initialIndexingStatus = async (): Promise => { - const user = getData(LS_KEYS.USER); - if (!user) throw new Error("Orphan CLIP indexing without a login"); - const allEmbeddings = await localCLIPEmbeddings(); - const localFiles = getPersonalFiles(await getLocalFiles(), user); - const pendingFiles = await getNonClipEmbeddingExtractedFiles( - localFiles, - allEmbeddings, - ); - return { - indexed: allEmbeddings.length, - pending: pendingFiles.length, - }; -}; diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 7de44f4628..b75bb9e6c6 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -133,7 +133,8 @@ const openMLDB = async () => { }; const deleteLegacyDB = () => { - // Delete the legacy face DB. + // Delete the legacy face DB v1. + // // This code was added June 2024 (v1.7.1-rc) and can be removed once clients // have migrated over. void deleteDB("mldata"); From 53dc3bace9e51a8bfdc405b82951a401d6c67c6b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:30:31 +0530 Subject: [PATCH 347/466] Untie --- .../components/Sidebar/AdvancedSettings.tsx | 30 +++++++++---------- web/apps/photos/src/pages/gallery/index.tsx | 7 +---- web/apps/photos/src/services/logout.ts | 7 ----- web/apps/photos/src/services/sync.ts | 4 --- 4 files changed, 15 insertions(+), 33 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index c39649b4bf..9ef7a26973 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,8 +1,7 @@ -import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; -import { Box, DialogProps, Stack, Typography } from "@mui/material"; +import { Box, DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import MenuSectionTitle from "components/Menu/MenuSectionTitle"; @@ -11,9 +10,7 @@ import { MLSearchSettings } from "components/ml/MLSearchSettings"; import { t } from "i18next"; import isElectron from "is-electron"; import { AppContext } from "pages/_app"; -import { useContext, useEffect, useState } from "react"; -import { CLIPIndexingStatus, clipService } from "services/clip-service"; -import { formatNumber } from "utils/number/format"; +import { useContext, useState } from "react"; export default function AdvancedSettings({ open, onClose, onRootClose }) { const appContext = useContext(AppContext); @@ -39,16 +36,17 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { appContext.setIsCFProxyDisabled(!appContext.isCFProxyDisabled); }; - const [indexingStatus, setIndexingStatus] = useState({ - indexed: 0, - pending: 0, - }); + // TODO-ML: + // const [indexingStatus, setIndexingStatus] = useState({ + // indexed: 0, + // pending: 0, + // }); - useEffect(() => { - clipService.setOnUpdateHandler(setIndexingStatus); - clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); - return () => clipService.setOnUpdateHandler(undefined); - }, []); + // useEffect(() => { + // clipService.setOnUpdateHandler(setIndexingStatus); + // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); + // return () => clipService.setOnUpdateHandler(undefined); + // }, []); return ( - {isElectron() && ( + {/* TODO-ML: isElectron() && ( - )} + )*/} diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx index 42f3aed2c4..d419146379 100644 --- a/web/apps/photos/src/pages/gallery/index.tsx +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -81,7 +81,6 @@ import { useState, } from "react"; import { useDropzone } from "react-dropzone"; -import { clipService } from "services/clip-service"; import { constructEmailList, constructUserIDToEmailMap, @@ -390,7 +389,6 @@ export default function Gallery() { syncWithRemote(false, true); }, SYNC_INTERVAL_IN_MICROSECONDS); if (electron) { - // void clipService.setupOnFileUploadListener(); electron.onMainWindowFocus(() => syncWithRemote(false, true)); if (await shouldShowWhatsNew()) setOpenWhatsNew(true); } @@ -398,10 +396,7 @@ export default function Gallery() { main(); return () => { clearInterval(syncInterval.current); - if (electron) { - electron.onMainWindowFocus(undefined); - clipService.removeOnFileUploadListener(); - } + if (electron) electron.onMainWindowFocus(undefined); }; }, []); diff --git a/web/apps/photos/src/services/logout.ts b/web/apps/photos/src/services/logout.ts index afe8268708..4acc0927d3 100644 --- a/web/apps/photos/src/services/logout.ts +++ b/web/apps/photos/src/services/logout.ts @@ -3,7 +3,6 @@ import DownloadManager from "@/new/photos/services/download"; import { clearFeatureFlagSessionState } from "@/new/photos/services/feature-flags"; import { logoutML, terminateMLWorker } from "@/new/photos/services/ml"; import log from "@/next/log"; -import { clipService } from "services/clip-service"; import exportService from "./export"; /** @@ -46,12 +45,6 @@ export const photosLogout = async () => { ignoreError("download", e); } - try { - await clipService.logout(); - } catch (e) { - ignoreError("CLIP", e); - } - // - Desktop const electron = globalThis.electron; diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index 0af6cee42e..b628a3510d 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,8 +1,6 @@ import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; import { triggerMLSync } from "@/new/photos/services/ml"; import { isDesktop } from "@/next/app"; -import { clipService } from "services/clip-service"; -import { syncCLIPEmbeddings } from "services/embeddingService"; import { syncEntities } from "services/entityService"; import { syncMapEnabled } from "services/userService"; @@ -20,8 +18,6 @@ export const sync = async () => { await syncMapEnabled(); fetchAndSaveFeatureFlagsIfNeeded(); if (isDesktop) { - await syncCLIPEmbeddings(); triggerMLSync(); - void clipService.scheduleImageEmbeddingExtraction(); } }; From e90ab70cc868e4617731b1be1301868b85950fd4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:34:34 +0530 Subject: [PATCH 348/466] Remove unused dep --- web/apps/photos/package.json | 1 - web/yarn.lock | 18 ------------------ 2 files changed, 19 deletions(-) diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json index e28732e737..f3fb32245e 100644 --- a/web/apps/photos/package.json +++ b/web/apps/photos/package.json @@ -28,7 +28,6 @@ "memoize-one": "^6.0.0", "ml-matrix": "^6.11", "p-debounce": "^4.0.0", - "p-queue": "^7.1.0", "photoswipe": "file:./thirdparty/photoswipe", "piexifjs": "^1.0.6", "pure-react-carousel": "^1.30.1", diff --git a/web/yarn.lock b/web/yarn.lock index 69100b9284..64220ae645 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2477,11 +2477,6 @@ eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - exifr@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/exifr/-/exifr-7.1.3.tgz#f6218012c36dbb7d843222011b27f065fddbab6f" @@ -3759,19 +3754,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-queue@^7.1.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-7.4.1.tgz#7f86f853048beca8272abdbb7cec1ed2afc0f265" - integrity sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA== - dependencies: - eventemitter3 "^5.0.1" - p-timeout "^5.0.2" - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" From df80d9c355b0ed56fa49c9d3c708b911f00a900c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:37:04 +0530 Subject: [PATCH 349/466] Prune --- .../src/services/upload/uploadManager.ts | 22 ------------------- web/packages/shared/events/index.ts | 4 ++-- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts index 8fe362cafd..f5feeda6ff 100644 --- a/web/apps/photos/src/services/upload/uploadManager.ts +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -19,7 +19,6 @@ import { wait } from "@/utils/promise"; import { getDedicatedCryptoWorker } from "@ente/shared/crypto"; import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; import { CustomError } from "@ente/shared/error"; -import { Events, eventBus } from "@ente/shared/events"; import { Canceler } from "axios"; import type { Remote } from "comlink"; import isElectron from "is-electron"; @@ -617,27 +616,6 @@ class UploadManager { const uploadItem = uploadableItem.uploadItem ?? uploadableItem.livePhotoAssets.image; - try { - let file: File | undefined; - if (uploadItem) { - if (uploadItem instanceof File) { - file = uploadItem; - } else if ( - typeof uploadItem == "string" || - Array.isArray(uploadItem) - ) { - // path from desktop, no file object - } else { - file = uploadItem.file; - } - } - eventBus.emit(Events.FILE_UPLOADED, { - enteFile: decryptedFile, - localFile: file, - }); - } catch (e) { - log.warn("Ignoring error in fileUploaded handlers", e); - } if ( uploadItem && (uploadResult == UPLOAD_RESULT.UPLOADED || diff --git a/web/packages/shared/events/index.ts b/web/packages/shared/events/index.ts index 32306fc64d..fa71a9de63 100644 --- a/web/packages/shared/events/index.ts +++ b/web/packages/shared/events/index.ts @@ -1,11 +1,11 @@ import { EventEmitter } from "eventemitter3"; +// TODO: Remove me + // When registering event handlers, // handle errors to avoid unhandled rejection or propagation to emit call export enum Events { - LOGOUT = "logout", - FILE_UPLOADED = "fileUploaded", LOCAL_FILES_UPDATED = "localFilesUpdated", } From c5b10b14d1d917b9a62f1b2b152ac63d7402b6b2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:42:06 +0530 Subject: [PATCH 350/466] Desktop changes --- desktop/package.json | 1 - desktop/src/main/services/ml-clip.ts | 207 --------------------------- desktop/yarn.lock | 5 - 3 files changed, 213 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 9085affe7d..e081a1bb80 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -34,7 +34,6 @@ "electron-updater": "^6.2", "ffmpeg-static": "^5.2", "html-entities": "^2.5", - "jpeg-js": "^0.4", "lru-cache": "^10.2", "next-electron-server": "^1", "node-stream-zip": "^1.15", diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index 98b8a01bfe..655f9b2437 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -54,213 +54,6 @@ const clipImageEmbedding_ = async (jpegFilePath: string) => { return normalizeEmbedding(imageEmbedding); }; -const getRGBData = async (jpegFilePath: string): Promise => { - const jpegData = await fs.readFile(jpegFilePath); - const rawImageData = jpeg.decode(jpegData, { - useTArray: true, - formatAsRGBA: true, - }); // TODO: manav: make sure this works on all images, not just jpeg - const pixelData = rawImageData.data; - - const requiredWidth = 224; - const requiredHeight = 224; - const requiredSize = 3 * requiredWidth * requiredHeight; - const mean: number[] = [0.48145466, 0.4578275, 0.40821073]; - const std: number[] = [0.26862954, 0.26130258, 0.27577711]; - - const scale = Math.max( - requiredWidth / rawImageData.width, - requiredHeight / rawImageData.height, - ); - const scaledWidth = Math.round(rawImageData.width * scale); - const scaledHeight = Math.round(rawImageData.height * scale); - const widthOffset = Math.max(0, scaledWidth - requiredWidth) / 2; - const heightOffset = Math.max(0, scaledHeight - requiredHeight) / 2; - - const processedImage = new Float32Array(requiredSize); - - // Populate the Float32Array with normalized pixel values. - let pi = 0; - const cOffsetG = requiredHeight * requiredWidth; // ChannelOffsetGreen - const cOffsetB = 2 * requiredHeight * requiredWidth; // ChannelOffsetBlue - for (let h = 0 + heightOffset; h < scaledHeight - heightOffset; h++) { - for (let w = 0 + widthOffset; w < scaledWidth - widthOffset; w++) { - const { r, g, b } = pixelRGBBicubic( - w / scale, - h / scale, - pixelData, - rawImageData.width, - rawImageData.height, - ); - processedImage[pi] = (r / 255.0 - mean[0]!) / std[0]!; - processedImage[pi + cOffsetG] = (g / 255.0 - mean[1]!) / std[1]!; - processedImage[pi + cOffsetB] = (b / 255.0 - mean[2]!) / std[2]!; - pi++; - } - } - return processedImage; -}; - -// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts -const pixelRGBBicubic = ( - fx: number, - fy: number, - imageData: Uint8Array, - imageWidth: number, - imageHeight: number, -) => { - // Clamp to image boundaries. - fx = clamp(fx, 0, imageWidth - 1); - fy = clamp(fy, 0, imageHeight - 1); - - const x = Math.trunc(fx) - (fx >= 0.0 ? 0 : 1); - const px = x - 1; - const nx = x + 1; - const ax = x + 2; - const y = Math.trunc(fy) - (fy >= 0.0 ? 0 : 1); - const py = y - 1; - const ny = y + 1; - const ay = y + 2; - const dx = fx - x; - const dy = fy - y; - - const cubic = ( - dx: number, - ipp: number, - icp: number, - inp: number, - iap: number, - ) => - icp + - 0.5 * - (dx * (-ipp + inp) + - dx * dx * (2 * ipp - 5 * icp + 4 * inp - iap) + - dx * dx * dx * (-ipp + 3 * icp - 3 * inp + iap)); - - const icc = pixelRGBA(imageData, imageWidth, imageHeight, x, y); - - const ipp = - px < 0 || py < 0 - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, px, py); - const icp = - px < 0 ? icc : pixelRGBA(imageData, imageWidth, imageHeight, x, py); - const inp = - py < 0 || nx >= imageWidth - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, nx, py); - const iap = - ax >= imageWidth || py < 0 - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, ax, py); - - const ip0 = cubic(dx, ipp.r, icp.r, inp.r, iap.r); - const ip1 = cubic(dx, ipp.g, icp.g, inp.g, iap.g); - const ip2 = cubic(dx, ipp.b, icp.b, inp.b, iap.b); - // const ip3 = cubic(dx, ipp.a, icp.a, inp.a, iap.a); - - const ipc = - px < 0 ? icc : pixelRGBA(imageData, imageWidth, imageHeight, px, y); - const inc = - nx >= imageWidth - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, nx, y); - const iac = - ax >= imageWidth - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, ax, y); - - const ic0 = cubic(dx, ipc.r, icc.r, inc.r, iac.r); - const ic1 = cubic(dx, ipc.g, icc.g, inc.g, iac.g); - const ic2 = cubic(dx, ipc.b, icc.b, inc.b, iac.b); - // const ic3 = cubic(dx, ipc.a, icc.a, inc.a, iac.a); - - const ipn = - px < 0 || ny >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, px, ny); - const icn = - ny >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, x, ny); - const inn = - nx >= imageWidth || ny >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, nx, ny); - const ian = - ax >= imageWidth || ny >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, ax, ny); - - const in0 = cubic(dx, ipn.r, icn.r, inn.r, ian.r); - const in1 = cubic(dx, ipn.g, icn.g, inn.g, ian.g); - const in2 = cubic(dx, ipn.b, icn.b, inn.b, ian.b); - // const in3 = cubic(dx, ipn.a, icn.a, inn.a, ian.a); - - const ipa = - px < 0 || ay >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, px, ay); - const ica = - ay >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, x, ay); - const ina = - nx >= imageWidth || ay >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, nx, ay); - const iaa = - ax >= imageWidth || ay >= imageHeight - ? icc - : pixelRGBA(imageData, imageWidth, imageHeight, ax, ay); - - const ia0 = cubic(dx, ipa.r, ica.r, ina.r, iaa.r); - const ia1 = cubic(dx, ipa.g, ica.g, ina.g, iaa.g); - const ia2 = cubic(dx, ipa.b, ica.b, ina.b, iaa.b); - // const ia3 = cubic(dx, ipa.a, ica.a, ina.a, iaa.a); - - const c0 = Math.trunc(clamp(cubic(dy, ip0, ic0, in0, ia0), 0, 255)); - const c1 = Math.trunc(clamp(cubic(dy, ip1, ic1, in1, ia1), 0, 255)); - const c2 = Math.trunc(clamp(cubic(dy, ip2, ic2, in2, ia2), 0, 255)); - // const c3 = cubic(dy, ip3, ic3, in3, ia3); - - return { r: c0, g: c1, b: c2 }; -}; - -// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts -const clamp = (value: number, min: number, max: number) => - Math.min(max, Math.max(min, value)); - -// NOTE: exact duplicate of the function in web/apps/photos/src/services/face/image.ts -const pixelRGBA = ( - imageData: Uint8Array, - width: number, - height: number, - x: number, - y: number, -) => { - if (x < 0 || x >= width || y < 0 || y >= height) { - return { r: 0, g: 0, b: 0, a: 0 }; - } - const index = (y * width + x) * 4; - return { - r: ensure(imageData[index]), - g: ensure(imageData[index + 1]), - b: ensure(imageData[index + 2]), - a: ensure(imageData[index + 3]), - }; -}; - -const normalizeEmbedding = (embedding: Float32Array) => { - let normalization = 0; - for (const v of embedding) normalization += v * v; - - const sqrtNormalization = Math.sqrt(normalization); - for (let index = 0; index < embedding.length; index++) - embedding[index] = ensure(embedding[index]) / sqrtNormalization; - - return embedding; -}; const cachedCLIPTextSession = makeCachedInferenceSession( "clip-text-vit-32-uint8.onnx", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 7d9ef55d47..ac1692ddb0 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2130,11 +2130,6 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -jpeg-js@^0.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" - integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" From 942231c521cb319fba10b86b2f4dc68411063d8c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:43:03 +0530 Subject: [PATCH 351/466] Prune --- desktop/docs/dependencies.md | 22 ++++++++++------------ desktop/package.json | 1 - desktop/yarn.lock | 5 ----- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 097442e557..9d830edda6 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -112,21 +112,14 @@ resources (`build`) folder. This is used for thumbnail generation on Linux. On macOS, we use the `sips` CLI tool for conversion, but that is already available on the host machine, and is not bundled with our app. -### AI/ML +### ML -[onnxruntime-node](https://github.com/Microsoft/onnxruntime) is used as the -AI/ML runtime. It powers both natural language searches (using CLIP) and face +[onnxruntime-node](https://github.com/Microsoft/onnxruntime) is used as the ML +runtime. It powers both natural language searches (using CLIP) and face detection (using YOLO). -[jpeg-js](https://github.com/jpeg-js/jpeg-js#readme) is used for decoding JPEG -data into raw RGB bytes before passing it to ONNX. - -html-entities is used by the bundled clip-bpe-ts tokenizer for CLIP. - -### Watch Folders - -[chokidar](https://github.com/paulmillr/chokidar) is used as a file system -watcher for the watch folders functionality. +[clip-bpe-js](https://github.com/simonwarchol/clip-bpe-js) is used for tokening +the user's search phrase before computing its CLIP (text) embedding. ### ZIP @@ -135,3 +128,8 @@ reading of large ZIP files (e.g. during imports of Google Takeout ZIPs). [lru-cache](https://github.com/isaacs/node-lru-cache) is used to cache file ZIP handles to avoid reopening them for every operation. + +### Watch folders + +[chokidar](https://github.com/paulmillr/chokidar) is used as a file system +watcher for the watch folders functionality. diff --git a/desktop/package.json b/desktop/package.json index e081a1bb80..99a4d0da3e 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -33,7 +33,6 @@ "electron-store": "^8.2", "electron-updater": "^6.2", "ffmpeg-static": "^5.2", - "html-entities": "^2.5", "lru-cache": "^10.2", "next-electron-server": "^1", "node-stream-zip": "^1.15", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index ac1692ddb0..368a93bd90 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -1900,11 +1900,6 @@ hosted-git-info@^4.1.0: dependencies: lru-cache "^6.0.0" -html-entities@^2.5: - version "2.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== - http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" From 56fe538f07b937bde6259c87f82548533b1925b1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:55:27 +0530 Subject: [PATCH 352/466] Tie --- desktop/src/main/ipc.ts | 6 +-- desktop/src/main/services/ml-clip.ts | 42 +++---------------- desktop/src/preload.ts | 4 +- web/apps/photos/src/services/searchService.ts | 2 +- web/packages/next/types/ipc.ts | 11 +++-- 5 files changed, 16 insertions(+), 49 deletions(-) diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index d6672fa3ab..641ce9963d 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -186,10 +186,8 @@ export const attachIPCHandlers = () => { // - ML - ipcMain.handle( - "computeCLIPImageEmbedding", - (_, jpegImageData: Uint8Array) => - computeCLIPImageEmbedding(jpegImageData), + ipcMain.handle("computeCLIPImageEmbedding", (_, input: Float32Array) => + computeCLIPImageEmbedding(input), ); ipcMain.handle("computeCLIPTextEmbeddingIfAvailable", (_, text: string) => diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index 655f9b2437..c51d952fe8 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -1,23 +1,12 @@ -// TODO: These arise from the array indexing in the pre-processing code. Isolate -// once that code settles down to its final place (currently duplicated across -// web and desktop). -/* eslint-disable @typescript-eslint/no-non-null-assertion */ - /** * @file Compute CLIP embeddings for images and text. * * The embeddings are computed using ONNX runtime, with CLIP as the model. - * - * @see `web/apps/photos/src/services/clip-service.ts` for more details. */ import Tokenizer from "clip-bpe-js"; -import jpeg from "jpeg-js"; -import fs from "node:fs/promises"; import * as ort from "onnxruntime-node"; import log from "../log"; -import { writeStream } from "../stream"; import { ensure, wait } from "../utils/common"; -import { deleteTempFile, makeTempFilePath } from "../utils/temp"; import { makeCachedInferenceSession } from "./ml"; const cachedCLIPImageSession = makeCachedInferenceSession( @@ -25,36 +14,18 @@ const cachedCLIPImageSession = makeCachedInferenceSession( 351468764 /* 335.2 MB */, ); -export const computeCLIPImageEmbedding = async (jpegImageData: Uint8Array) => { - const tempFilePath = await makeTempFilePath(); - const imageStream = new Response(jpegImageData.buffer).body; - await writeStream(tempFilePath, ensure(imageStream)); - try { - return await clipImageEmbedding_(tempFilePath); - } finally { - await deleteTempFile(tempFilePath); - } -}; - -const clipImageEmbedding_ = async (jpegFilePath: string) => { +export const computeCLIPImageEmbedding = async (input: Float32Array) => { const session = await cachedCLIPImageSession(); - const t1 = Date.now(); - const rgbData = await getRGBData(jpegFilePath); + const t = Date.now(); const feeds = { - input: new ort.Tensor("float32", rgbData, [1, 3, 224, 224]), + input: new ort.Tensor("float32", input, [1, 3, 224, 224]), }; - const t2 = Date.now(); const results = await session.run(feeds); - log.debug( - () => - `ONNX/CLIP image embedding took ${Date.now() - t1} ms (prep: ${t2 - t1} ms, inference: ${Date.now() - t2} ms)`, - ); + log.debug(() => `ONNX/CLIP image embedding took ${Date.now() - t} ms`); /* Need these model specific casts to type the result */ - const imageEmbedding = ensure(results.output).data as Float32Array; - return normalizeEmbedding(imageEmbedding); + return ensure(results.output).data as Float32Array; }; - const cachedCLIPTextSession = makeCachedInferenceSession( "clip-text-vit-32-uint8.onnx", 64173509 /* 61.2 MB */, @@ -95,6 +66,5 @@ export const computeCLIPTextEmbeddingIfAvailable = async (text: string) => { () => `ONNX/CLIP text embedding took ${Date.now() - t1} ms (prep: ${t2 - t1} ms, inference: ${Date.now() - t2} ms)`, ); - const textEmbedding = ensure(results.output).data as Float32Array; - return normalizeEmbedding(textEmbedding); + return ensure(results.output).data as Float32Array; }; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 29bf9c0946..be11c2d8d4 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -163,8 +163,8 @@ const ffmpegExec = ( // - ML -const computeCLIPImageEmbedding = (jpegImageData: Uint8Array) => - ipcRenderer.invoke("computeCLIPImageEmbedding", jpegImageData); +const computeCLIPImageEmbedding = (input: Float32Array) => + ipcRenderer.invoke("computeCLIPImageEmbedding", input); const computeCLIPTextEmbeddingIfAvailable = (text: string) => ipcRenderer.invoke("computeCLIPTextEmbeddingIfAvailable", text); diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index b2d2c6aad3..84a38e144a 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -402,7 +402,7 @@ const searchClip = async ( // }; // getTextEmbeddingIfAvailable = async (text: string) => { -// return ensureElectron().computeCLIPTextEmbeddingIfAvailable(text); +// return normalizeEmbedding(ensureElectron().computeCLIPTextEmbeddingIfAvailable(text)); // }; // export const computeClipMatchScore = async ( diff --git a/web/packages/next/types/ipc.ts b/web/packages/next/types/ipc.ts index be53612981..7a11553835 100644 --- a/web/packages/next/types/ipc.ts +++ b/web/packages/next/types/ipc.ts @@ -339,14 +339,13 @@ export interface Electron { * * See: [Note: Natural language search using CLIP] * - * The input is a opaque binary data whose internal structure is specific to - * our implementation and the ML model (CLIP) we use. + * The input is a opaque float32 array representing the image. The layout + * and exact encoding of the input is specific to our implementation and the + * ML model (CLIP) we use. * - * @returns A CLIP embedding. + * @returns A CLIP embedding (an array of 512 floating point values). */ - computeCLIPImageEmbedding: ( - jpegImageData: Uint8Array, - ) => Promise; + computeCLIPImageEmbedding: (input: Float32Array) => Promise; /** * Return a CLIP embedding of the given image if we already have the model From 920685e15c768b0c9329528db2a1c66e125502e2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 14:56:49 +0530 Subject: [PATCH 353/466] lint --- web/packages/build-config/tsconfig-typecheck.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/build-config/tsconfig-typecheck.json b/web/packages/build-config/tsconfig-typecheck.json index 8d96d36003..ca5722c748 100644 --- a/web/packages/build-config/tsconfig-typecheck.json +++ b/web/packages/build-config/tsconfig-typecheck.json @@ -30,7 +30,7 @@ * > '--downlevelIteration' flag or with a '--target' of 'es2015' or * > higher. */ - "target": "ES2015", + "target": "ES2015", /* * The module system to assume the generated JavaScript will use. From b8b2d5873452ab812e77f453f6a795dba89b16e7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 15:29:34 +0530 Subject: [PATCH 354/466] Clip matches --- web/apps/photos/src/services/searchService.ts | 2 - web/packages/new/photos/services/ml/clip.ts | 79 ++++++++++++++++--- web/packages/new/photos/services/ml/db.ts | 6 +- 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 84a38e144a..c1625488e3 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -24,8 +24,6 @@ import locationSearchService, { City } from "./locationSearchService"; const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]); -// const CLIP_SCORE_THRESHOLD = 0.23; - export const getDefaultOptions = async () => { return [ // TODO-ML(MR): Skip this for now if indexing is disabled (eventually diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index ef59fed210..adad41b18b 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -1,6 +1,7 @@ import type { EnteFile } from "@/new/photos/types/file"; -import { ensure } from "@/utils/ensure"; +import type { Electron } from "@/next/types/ipc"; import type { ImageBitmapAndData } from "./bitmap"; +import { clipIndexes } from "./db"; import { pixelRGBBicubic } from "./image"; import type { MLWorkerElectron } from "./worker-electron"; @@ -120,8 +121,9 @@ const computeEmbedding = async ( electron: MLWorkerElectron, ): Promise => { const clipInput = convertToCLIPInput(imageData); - const embedding = await electron.computeCLIPImageEmbedding(clipInput); - return Array.from(normalizeEmbedding(embedding)); + return normalizedEmbedding( + await electron.computeCLIPImageEmbedding(clipInput), + ); }; /** @@ -168,13 +170,70 @@ const convertToCLIPInput = (imageData: ImageData) => { return clipInput; }; -const normalizeEmbedding = (embedding: Float32Array) => { - let normalization = 0; - for (const v of embedding) normalization += v * v; +const normalizedEmbedding = (embedding: Float32Array) => { + const norm = embedding.reduce((a, v) => a + v * v, 0); + const sqrtNorm = Math.sqrt(norm); + return Array.from(embedding).map((v) => v / sqrtNorm); +}; + +/** + * Use CLIP to perform a natural language search over image embeddings. + * + * @param searchPhrase The text entered by the user in the search box. + * + * @param electron The {@link Electron} instance to use to communicate with the + * native code running in our desktop app (the embedding happens in the native + * layer). + * + * It return a list of files that should be shown in the search results. The + * actual return type is a map from fileIDs to the scores they got (higher is + * better). This map will only contains entries whose score was above our + * minimum threshold. + * + * The result can also be `undefined`, which indicates that the download for the + * ML model is still in progress (trying again later should succeed). + */ +export const clipMatches = async ( + searchPhrase: string, + electron: Electron, +): Promise | undefined> => { + const textEmbedding = await electron + .computeCLIPTextEmbeddingIfAvailable(searchPhrase) + .then((e) => (e ? normalizedEmbedding(e) : e)); + if (!textEmbedding) return undefined; + + const imageEmbeddings = await clipIndexes(); - const sqrtNormalization = Math.sqrt(normalization); - for (let index = 0; index < embedding.length; index++) - embedding[index] = ensure(embedding[index]) / sqrtNormalization; + return new Map( + ( + await Promise.all( + imageEmbeddings.map( + async ({ + fileID, + embedding, + }): Promise<[number, number]> => [ + fileID, + await clipMatchScore(embedding, textEmbedding), + ], + ), + ) + ).filter(([, score]) => score >= 0.23), + ); +}; + +const clipMatchScore = async ( + imageEmbedding: number[], + textEmbedding: number[], +) => { + if (imageEmbedding.length != textEmbedding.length) + throw Error( + `CLIP image embeddings (${imageEmbedding.length}) and text embeddings (${textEmbedding.length}) length mismatch`, + ); - return embedding; + let score = 0; + for (let i = 0; i < imageEmbedding.length; i++) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + score += imageEmbedding[i]! * textEmbedding[i]!; + } + return score; }; diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index b75bb9e6c6..6a0fee1b6a 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -272,11 +272,11 @@ export const faceIndex = async (fileID: number) => { }; /** - * Return all CLIP embeddings present locally. + * Return all CLIP indexes present locally. */ -export const clipEmbeddings = async () => { +export const clipIndexes = async () => { const db = await mlDB(); - return (await db.getAll("clip-index")).map((index) => index.embedding); + return await db.getAll("clip-index"); }; /** From 11584ce08976416be63dc8dfaf96673265876341 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 15:34:47 +0530 Subject: [PATCH 355/466] Simplify --- web/packages/new/photos/services/ml/clip.ts | 26 ++++++--------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index adad41b18b..21794431ba 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -202,29 +202,17 @@ export const clipMatches = async ( .then((e) => (e ? normalizedEmbedding(e) : e)); if (!textEmbedding) return undefined; - const imageEmbeddings = await clipIndexes(); - - return new Map( - ( - await Promise.all( - imageEmbeddings.map( - async ({ - fileID, - embedding, - }): Promise<[number, number]> => [ - fileID, - await clipMatchScore(embedding, textEmbedding), - ], - ), + return new Map( + (await clipIndexes()) + .map( + ({ fileID, embedding }) => + [fileID, clipMatchScore(embedding, textEmbedding)] as const, ) - ).filter(([, score]) => score >= 0.23), + .filter(([, score]) => score >= 0.23), ); }; -const clipMatchScore = async ( - imageEmbedding: number[], - textEmbedding: number[], -) => { +const clipMatchScore = (imageEmbedding: number[], textEmbedding: number[]) => { if (imageEmbedding.length != textEmbedding.length) throw Error( `CLIP image embeddings (${imageEmbedding.length}) and text embeddings (${textEmbedding.length}) length mismatch`, From 49bfe5aabb6a414f9adbb6e5c66f97e8ca23d7cc Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 15:35:46 +0530 Subject: [PATCH 356/466] Restore search --- web/apps/photos/src/services/searchService.ts | 62 ++----------------- 1 file changed, 5 insertions(+), 57 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index c1625488e3..e993275293 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,8 +1,10 @@ import { FILE_TYPE } from "@/media/file-type"; import { faceIndexingStatus, isMLEnabled } from "@/new/photos/services/ml"; +import { clipMatches } from "@/new/photos/services/ml/clip"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; +import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import * as chrono from "chrono-node"; import { t } from "i18next"; @@ -369,66 +371,12 @@ async function searchLocationTag(searchPhrase: string): Promise { } const searchClip = async ( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _searchPhrase: string, + searchPhrase: string, ): Promise => { // TODO-ML: - return undefined; + //return undefined; + return clipMatches(searchPhrase, ensureElectron()); }; -// const textEmbedding = -// await clipService.getTextEmbeddingIfAvailable(searchPhrase); -// if (!textEmbedding) return undefined; - -// const imageEmbeddings = await localCLIPEmbeddings(); -// const clipSearchResult = new Map( -// ( -// await Promise.all( -// imageEmbeddings.map( -// async (imageEmbedding): Promise<[number, number]> => [ -// imageEmbedding.fileID, -// await computeClipMatchScore( -// imageEmbedding.embedding, -// textEmbedding, -// ), -// ], -// ), -// ) -// ).filter(([, score]) => score >= CLIP_SCORE_THRESHOLD), -// ); - -// return clipSearchResult; -// }; - -// getTextEmbeddingIfAvailable = async (text: string) => { -// return normalizeEmbedding(ensureElectron().computeCLIPTextEmbeddingIfAvailable(text)); -// }; - -// export const computeClipMatchScore = async ( -// imageEmbedding: Float32Array, -// textEmbedding: Float32Array, -// ) => { -// if (imageEmbedding.length !== textEmbedding.length) { -// throw Error("imageEmbedding and textEmbedding length mismatch"); -// } -// let score = 0; -// let imageNormalization = 0; -// let textNormalization = 0; - -// for (let index = 0; index < imageEmbedding.length; index++) { -// imageNormalization += imageEmbedding[index] * imageEmbedding[index]; -// textNormalization += textEmbedding[index] * textEmbedding[index]; -// } -// for (let index = 0; index < imageEmbedding.length; index++) { -// imageEmbedding[index] = -// imageEmbedding[index] / Math.sqrt(imageNormalization); -// textEmbedding[index] = -// textEmbedding[index] / Math.sqrt(textNormalization); -// } -// for (let index = 0; index < imageEmbedding.length; index++) { -// score += imageEmbedding[index] * textEmbedding[index]; -// } -// return score; -// }; function convertSuggestionToSearchQuery(option: Suggestion): Search { switch (option.type) { From 8fbcef42218c14dc7a979e5393ee3a2b17e11948 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 16:01:52 +0530 Subject: [PATCH 357/466] tsc --- web/packages/new/photos/services/ml/clip.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 21794431ba..5f5df66713 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -197,10 +197,10 @@ export const clipMatches = async ( searchPhrase: string, electron: Electron, ): Promise | undefined> => { - const textEmbedding = await electron - .computeCLIPTextEmbeddingIfAvailable(searchPhrase) - .then((e) => (e ? normalizedEmbedding(e) : e)); - if (!textEmbedding) return undefined; + const t = await electron.computeCLIPTextEmbeddingIfAvailable(searchPhrase); + if (!t) return undefined; + + const textEmbedding = normalizedEmbedding(t); return new Map( (await clipIndexes()) @@ -215,11 +215,12 @@ export const clipMatches = async ( const clipMatchScore = (imageEmbedding: number[], textEmbedding: number[]) => { if (imageEmbedding.length != textEmbedding.length) throw Error( - `CLIP image embeddings (${imageEmbedding.length}) and text embeddings (${textEmbedding.length}) length mismatch`, + `CLIP image embedding (${imageEmbedding.length}) and text embedding (${textEmbedding.length}) length mismatch`, ); let score = 0; for (let i = 0; i < imageEmbedding.length; i++) { + // We checked the length above. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion score += imageEmbedding[i]! * textEmbedding[i]!; } From 4f60cabdd0b335756eaac18d4d9666fe2c0b499b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 19:33:11 +0530 Subject: [PATCH 358/466] math --- web/packages/new/photos/services/ml/math.ts | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 web/packages/new/photos/services/ml/math.ts diff --git a/web/packages/new/photos/services/ml/math.ts b/web/packages/new/photos/services/ml/math.ts new file mode 100644 index 0000000000..3a692f5f38 --- /dev/null +++ b/web/packages/new/photos/services/ml/math.ts @@ -0,0 +1,37 @@ +/** + * Return the dot-product of two vectors. + * + * Dot product is the component-wise product of the corresponding elements of + * the two given vectors. + * + * Precondition: The two vectors must be of the same length. + */ +export const dotProduct = (v1: number[], v2: number[]) => { + if (v1.length != v2.length) + throw new Error(`Length mismatch ${v1.length} ${v2.length}`); + let d = 0; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + for (let i = 0; i < v1.length; i++) d += v1[i]! * v2[i]!; + return d; +}; + +/** + * Return the L2-norm ("magnitude") of the given vector. + * + * L2-norm is the sqrt of the sum of the squares of the components of the + * vector. It can also be thought of as the sqrt of the dot product of the + * vector with itself. + */ +export const norm = (v: number[]) => + Math.sqrt(v.reduce((a, x) => a + x * x, 0)); + +/** + * Return the cosine similarity of the two given vectors. + * + * The result is a value between [-1, 1] (inclusive), indicating how similar + * (1), orthogonal (0) and dissimilar (1) the two vectors are in direction. + * + * Precondition: The two vectors must be of the same length. + */ +export const cosineSimilarity = (v1: number[], v2: number[]) => + dotProduct(v1, v2) / (norm(v1) * norm(v2)); From 711c858d06f6b71df27bb9d09b94805c17f7156e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 19:35:43 +0530 Subject: [PATCH 359/466] Debug logs --- web/apps/photos/src/services/searchService.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index e993275293..2a92fa2171 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -375,7 +375,9 @@ const searchClip = async ( ): Promise => { // TODO-ML: //return undefined; - return clipMatches(searchPhrase, ensureElectron()); + const matches = await clipMatches(searchPhrase, ensureElectron()); + log.debug(() => ({ t: "clip-scores", matches })); + return matches; }; function convertSuggestionToSearchQuery(option: Suggestion): Search { From 840b415254276c04983797f05a1262872c018fec Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 19:41:23 +0530 Subject: [PATCH 360/466] Reframe --- web/packages/new/photos/services/ml/clip.ts | 42 ++++++--------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 5f5df66713..22fd05ec80 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -3,6 +3,7 @@ import type { Electron } from "@/next/types/ipc"; import type { ImageBitmapAndData } from "./bitmap"; import { clipIndexes } from "./db"; import { pixelRGBBicubic } from "./image"; +import { cosineSimilarity, norm } from "./math"; import type { MLWorkerElectron } from "./worker-electron"; /** @@ -121,9 +122,7 @@ const computeEmbedding = async ( electron: MLWorkerElectron, ): Promise => { const clipInput = convertToCLIPInput(imageData); - return normalizedEmbedding( - await electron.computeCLIPImageEmbedding(clipInput), - ); + return normalized(await electron.computeCLIPImageEmbedding(clipInput)); }; /** @@ -170,10 +169,10 @@ const convertToCLIPInput = (imageData: ImageData) => { return clipInput; }; -const normalizedEmbedding = (embedding: Float32Array) => { - const norm = embedding.reduce((a, v) => a + v * v, 0); - const sqrtNorm = Math.sqrt(norm); - return Array.from(embedding).map((v) => v / sqrtNorm); +const normalized = (embedding: Float32Array) => { + const nums = Array.from(embedding); + const n = norm(nums); + return nums.map((v) => v / n); }; /** @@ -200,29 +199,10 @@ export const clipMatches = async ( const t = await electron.computeCLIPTextEmbeddingIfAvailable(searchPhrase); if (!t) return undefined; - const textEmbedding = normalizedEmbedding(t); - - return new Map( - (await clipIndexes()) - .map( - ({ fileID, embedding }) => - [fileID, clipMatchScore(embedding, textEmbedding)] as const, - ) - .filter(([, score]) => score >= 0.23), + const textEmbedding = normalized(t); + const items = (await clipIndexes()).map( + ({ fileID, embedding }) => + [fileID, cosineSimilarity(embedding, textEmbedding)] as const, ); -}; - -const clipMatchScore = (imageEmbedding: number[], textEmbedding: number[]) => { - if (imageEmbedding.length != textEmbedding.length) - throw Error( - `CLIP image embedding (${imageEmbedding.length}) and text embedding (${textEmbedding.length}) length mismatch`, - ); - - let score = 0; - for (let i = 0; i < imageEmbedding.length; i++) { - // We checked the length above. - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - score += imageEmbedding[i]! * textEmbedding[i]!; - } - return score; + return new Map(items.filter(([, score]) => score >= 0.23)); }; From 064af381c54cc268b0e1c6bc2d8dd86c968a0d53 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 19:42:57 +0530 Subject: [PATCH 361/466] Move --- web/packages/new/photos/services/ml/crop.ts | 2 +- web/packages/new/photos/services/ml/face.ts | 2 +- web/packages/new/photos/services/ml/image.ts | 7 +------ web/packages/new/photos/services/ml/math.ts | 6 ++++++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/web/packages/new/photos/services/ml/crop.ts b/web/packages/new/photos/services/ml/crop.ts index 1d012b46fb..83502578e5 100644 --- a/web/packages/new/photos/services/ml/crop.ts +++ b/web/packages/new/photos/services/ml/crop.ts @@ -3,7 +3,7 @@ import { ensure } from "@/utils/ensure"; import type { EnteFile } from "../../types/file"; import { renderableImageBitmap } from "./bitmap"; import { type Box, type FaceIndex } from "./face"; -import { clamp } from "./image"; +import { clamp } from "./math"; /** * Regenerate and locally save face crops for faces in the given file. diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 5c1d3a6763..78ea3a3cd7 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -21,12 +21,12 @@ import { import type { ImageBitmapAndData } from "./bitmap"; import { saveFaceCrops } from "./crop"; import { - clamp, grayscaleIntMatrixFromNormalized2List, pixelRGBBilinear, warpAffineFloat32List, } from "./image"; import type { MLWorkerElectron } from "./worker-electron"; +import { clamp } from "./math"; /** * The version of the face indexing pipeline implemented by the current client. diff --git a/web/packages/new/photos/services/ml/image.ts b/web/packages/new/photos/services/ml/image.ts index d1608e96e0..dfea236561 100644 --- a/web/packages/new/photos/services/ml/image.ts +++ b/web/packages/new/photos/services/ml/image.ts @@ -3,12 +3,7 @@ import { ensure } from "@/utils/ensure"; import { Matrix, inverse } from "ml-matrix"; - -/** - * Clamp {@link value} to between {@link min} and {@link max}, inclusive. - */ -export const clamp = (value: number, min: number, max: number) => - Math.min(max, Math.max(min, value)); +import { clamp } from "./math"; /** * Returns the pixel value (RGB) at the given coordinates ({@link fx}, diff --git a/web/packages/new/photos/services/ml/math.ts b/web/packages/new/photos/services/ml/math.ts index 3a692f5f38..28b3c1c5eb 100644 --- a/web/packages/new/photos/services/ml/math.ts +++ b/web/packages/new/photos/services/ml/math.ts @@ -1,3 +1,9 @@ +/** + * Clamp {@link value} to between {@link min} and {@link max}, inclusive. + */ +export const clamp = (value: number, min: number, max: number) => + Math.min(max, Math.max(min, value)); + /** * Return the dot-product of two vectors. * From bab30ec508e14d2e0194a21040ab17bcf96c7bfd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 20:35:41 +0530 Subject: [PATCH 362/466] lf --- web/packages/new/photos/services/ml/face.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 78ea3a3cd7..5ecd57d771 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -25,8 +25,8 @@ import { pixelRGBBilinear, warpAffineFloat32List, } from "./image"; -import type { MLWorkerElectron } from "./worker-electron"; import { clamp } from "./math"; +import type { MLWorkerElectron } from "./worker-electron"; /** * The version of the face indexing pipeline implemented by the current client. From be61cd08b8644d3c10112f040a844b2da9890529 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 20:38:55 +0530 Subject: [PATCH 363/466] Prepare for merge to main --- web/apps/photos/src/services/searchService.ts | 15 +++++++-------- web/packages/new/photos/services/ml/db.ts | 2 +- web/packages/new/photos/services/ml/worker.ts | 14 +++++--------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 2a92fa2171..5514233ce4 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,10 +1,8 @@ import { FILE_TYPE } from "@/media/file-type"; import { faceIndexingStatus, isMLEnabled } from "@/new/photos/services/ml"; -import { clipMatches } from "@/new/photos/services/ml/clip"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; -import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import * as chrono from "chrono-node"; import { t } from "i18next"; @@ -371,13 +369,14 @@ async function searchLocationTag(searchPhrase: string): Promise { } const searchClip = async ( - searchPhrase: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _searchPhrase: string, ): Promise => { - // TODO-ML: - //return undefined; - const matches = await clipMatches(searchPhrase, ensureElectron()); - log.debug(() => ({ t: "clip-scores", matches })); - return matches; + // TODO-ML: clip-test + return undefined; + // const matches = await clipMatches(searchPhrase, ensureElectron()); + // log.debug(() => ({ t: "clip-scores", matches })); + // return matches; }; function convertSuggestionToSearchQuery(option: Suggestion): Search { diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 6a0fee1b6a..9e4f9cf90b 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -224,7 +224,7 @@ export const saveFaceIndex = async (faceIndex: FaceIndex) => { const newFileStatus = (fileID: number): FileStatus => ({ fileID, status: "indexable", - // TODO-ML: + // TODO-ML: clip-test // pending: ["file-ml-clip-face", "onnx-clip"], pending: ["file-ml-clip-face"], failureCount: 0, diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 17e45a4236..009d4b9106 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -20,12 +20,7 @@ import { saveFaceIndex, updateAssumingLocalFiles, } from "./db"; -import { - pullCLIPEmbeddings, - pullFaceEmbeddings, - putCLIPIndex, - putFaceIndex, -} from "./embedding"; +import { pullFaceEmbeddings, putCLIPIndex, putFaceIndex } from "./embedding"; import { indexFaces, type FaceIndex } from "./face"; import type { MLWorkerElectron } from "./worker-electron"; @@ -249,7 +244,7 @@ const pull = async () => { const res = await Promise.allSettled([ pullFaceEmbeddings(), // TODO-ML: clip-test - pullCLIPEmbeddings(), + // pullCLIPEmbeddings(), ]); for (const r of res) { switch (r.status) { @@ -366,7 +361,7 @@ const index = async ( const res = await Promise.allSettled([ _indexFace(f, enteFile, image, electron, userAgent), // TODO-ML: clip-test - _indexCLIP(f, enteFile, image, electron, userAgent), + // _indexCLIP(f, enteFile, image, electron, userAgent), ]); image.bitmap.close(); @@ -441,7 +436,8 @@ const _indexFace = async ( return `${faceIndex.faceEmbedding.faces.length} faces`; }; -const _indexCLIP = async ( +// TODO-ML: clip-test export +export const _indexCLIP = async ( f: string, enteFile: EnteFile, image: ImageBitmapAndData, From 882137251506f0844c285f365aa13ed6f10d021f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 9 Jul 2024 21:30:23 +0530 Subject: [PATCH 364/466] [web] Enhance log.debug --- .../new/photos/services/ml/embedding.ts | 2 +- web/packages/next/log.ts | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index 5c07b9e375..eadeb00b0e 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -267,7 +267,7 @@ export const putEmbedding = async ( model: EmbeddingModel, embedding: string, ) => { - log.debug(() => ({ t: `Uploading embedding`, model, embedding })); + log.debug(() => ["Uploading embedding", { model, embedding }]); const { encryptedMetadataB64, decryptionHeaderB64 } = await encryptFileMetadata(embedding, enteFile.key); diff --git a/web/packages/next/log.ts b/web/packages/next/log.ts index 1e86f7f17f..ee3b84f066 100644 --- a/web/packages/next/log.ts +++ b/web/packages/next/log.ts @@ -87,7 +87,23 @@ const logInfo = (...params: unknown[]) => { }; const logDebug = (param: () => unknown) => { - if (isDevBuild) console.log("[debug]", param()); + if (isDevBuild) { + const p = param(); + // Transform + // log.debug(() => ["tag", {x: y}]) + // => + // console.log("[debug] tag", {x: y}) + if (Array.isArray(p)) { + // tseslint is not happy with us for destructuring any, but this is + // non-production dev build only code, so silence it and go ahead. + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const [tag, ...rest] = p; + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.log(`[debug] ${tag}`, ...rest); + } else { /* Let console.log serialize it */ + console.log("[debug]", p); + } + } }; /** @@ -139,7 +155,9 @@ export default { * message. The provided function will only be called in development builds. * * The function can return an arbitrary value which is serialized before - * being logged. + * being logged. As a special case, arrays are spread, which allows one to + * write `log.debug(() => ["tag", {x: y}])` and have that be printed as if + * it were `console.log("[debug] tag", {x: y})`. * * This log is NOT written to disk. It is printed to the browser console, * but only in development builds. From 8117a2929cd5149899f68cc21548eaf05c8e9549 Mon Sep 17 00:00:00 2001 From: Aman Raj Singh Mourya Date: Wed, 10 Jul 2024 00:13:10 +0530 Subject: [PATCH 365/466] [mob][photos] Used better names --- .../local_authentication_service.dart | 10 +++---- .../lock_screen/lock_screen_password.dart | 27 ++++++++++++------- .../settings/lock_screen/lock_screen_pin.dart | 27 ++++++++++++------- mobile/lib/utils/auth_util.dart | 2 +- 4 files changed, 42 insertions(+), 24 deletions(-) diff --git a/mobile/lib/services/local_authentication_service.dart b/mobile/lib/services/local_authentication_service.dart index 6167fca67f..fecca7ac70 100644 --- a/mobile/lib/services/local_authentication_service.dart +++ b/mobile/lib/services/local_authentication_service.dart @@ -43,7 +43,7 @@ class LocalAuthenticationService { BuildContext context, String? savedPin, String? savedPassword, { - bool isOnOpeningApp = false, + bool isAuthenticatingOnAppLaunch = false, bool isAuthenticatingForInAppChange = false, }) async { if (savedPassword != null) { @@ -51,9 +51,9 @@ class LocalAuthenticationService { MaterialPageRoute( builder: (BuildContext context) { return LockScreenPassword( - isAuthenticating: true, + isChangingLockScreenSettings: true, isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, - isOnOpeningApp: isOnOpeningApp, + isAuthenticatingOnAppLaunch: isAuthenticatingOnAppLaunch, authPass: savedPassword, ); }, @@ -68,9 +68,9 @@ class LocalAuthenticationService { MaterialPageRoute( builder: (BuildContext context) { return LockScreenPin( - isAuthenticating: true, + isChangingLockScreenSettings: true, isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, - isOnOpeningApp: isOnOpeningApp, + isAuthenticatingOnAppLaunch: isAuthenticatingOnAppLaunch, authPin: savedPin, ); }, diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart index 4cf7f965e0..066aeb713c 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_password.dart @@ -16,15 +16,23 @@ import "package:photos/utils/lock_screen_settings.dart"; class LockScreenPassword extends StatefulWidget { const LockScreenPassword({ super.key, - this.isAuthenticating = false, - this.isOnOpeningApp = false, + this.isChangingLockScreenSettings = false, + this.isAuthenticatingOnAppLaunch = false, this.isAuthenticatingForInAppChange = false, this.authPass, }); - //Is false when setting a new password - final bool isAuthenticating; - final bool isOnOpeningApp; + /// [isChangingLockScreenSettings] Authentication required for changing lock screen settings. + /// Set to true when the app requires the user to authenticate before allowing + /// changes to the lock screen settings. + final bool isChangingLockScreenSettings; + + /// [isAuthenticatingOnAppLaunch] Authentication required on app launch. + /// Set to true when the app requires the user to authenticate immediately upon opening. + final bool isAuthenticatingOnAppLaunch; + + /// [isAuthenticatingForInAppChange] Authentication required for in-app changes (e.g., email, password). + /// Set to true when the app requires the to authenticate for sensitive actions like email, password changes. final bool isAuthenticatingForInAppChange; final String? authPass; @override @@ -157,7 +165,7 @@ class _LockScreenPasswordState extends State { ), ), Text( - widget.isAuthenticating + widget.isChangingLockScreenSettings ? S.of(context).enterPassword : S.of(context).setNewPassword, textAlign: TextAlign.center, @@ -203,7 +211,8 @@ class _LockScreenPasswordState extends State { if (widget.authPass == base64Encode(hash)) { await _lockscreenSetting.setInvalidAttemptCount(0); - widget.isOnOpeningApp || widget.isAuthenticatingForInAppChange + widget.isAuthenticatingOnAppLaunch || + widget.isAuthenticatingForInAppChange ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( @@ -212,7 +221,7 @@ class _LockScreenPasswordState extends State { ); return true; } else { - if (widget.isOnOpeningApp) { + if (widget.isAuthenticatingOnAppLaunch) { invalidAttemptsCount++; if (invalidAttemptsCount > 4) { await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); @@ -226,7 +235,7 @@ class _LockScreenPasswordState extends State { } Future _confirmPassword() async { - if (widget.isAuthenticating) { + if (widget.isChangingLockScreenSettings) { await _confirmPasswordAuth(_passwordController.text); return; } else { diff --git a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart index bc0eb91cde..166f137ab9 100644 --- a/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart +++ b/mobile/lib/ui/settings/lock_screen/lock_screen_pin.dart @@ -18,15 +18,23 @@ import 'package:pinput/pinput.dart'; class LockScreenPin extends StatefulWidget { const LockScreenPin({ super.key, - this.isAuthenticating = false, - this.isOnOpeningApp = false, + this.isChangingLockScreenSettings = false, + this.isAuthenticatingOnAppLaunch = false, this.isAuthenticatingForInAppChange = false, this.authPin, }); - //Is false when setting a new password - final bool isAuthenticating; - final bool isOnOpeningApp; + /// [isChangingLockScreenSettings] Authentication required for changing lock screen settings. + /// Set to true when the app requires the user to authenticate before allowing + /// changes to the lock screen settings. + final bool isChangingLockScreenSettings; + + /// [isAuthenticatingOnAppLaunch] Authentication required on app launch. + /// Set to true when the app requires the user to authenticate immediately upon opening. + final bool isAuthenticatingOnAppLaunch; + + /// [isAuthenticatingForInAppChange] Authentication required for in-app changes (e.g., email, password). + /// Set to true when the app requires the to authenticate for sensitive actions like email, password changes. final bool isAuthenticatingForInAppChange; final String? authPin; @override @@ -64,7 +72,8 @@ class _LockScreenPinState extends State { if (widget.authPin == base64Encode(hash)) { invalidAttemptsCount = 0; await _lockscreenSetting.setInvalidAttemptCount(0); - widget.isOnOpeningApp || widget.isAuthenticatingForInAppChange + widget.isAuthenticatingOnAppLaunch || + widget.isAuthenticatingForInAppChange ? Navigator.of(context).pop(true) : Navigator.of(context).pushReplacement( MaterialPageRoute( @@ -83,7 +92,7 @@ class _LockScreenPinState extends State { isPinValid = false; }); - if (widget.isOnOpeningApp) { + if (widget.isAuthenticatingOnAppLaunch) { invalidAttemptsCount++; if (invalidAttemptsCount > 4) { await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount); @@ -95,7 +104,7 @@ class _LockScreenPinState extends State { } Future _confirmPin(String code) async { - if (widget.isAuthenticating) { + if (widget.isChangingLockScreenSettings) { await confirmPinAuth(code); return; } else { @@ -222,7 +231,7 @@ class _LockScreenPinState extends State { ), ), Text( - widget.isAuthenticating + widget.isChangingLockScreenSettings ? S.of(context).enterPin : S.of(context).setNewPin, style: textTheme.bodyBold, diff --git a/mobile/lib/utils/auth_util.dart b/mobile/lib/utils/auth_util.dart index 6db836594c..f25aff58b7 100644 --- a/mobile/lib/utils/auth_util.dart +++ b/mobile/lib/utils/auth_util.dart @@ -24,7 +24,7 @@ Future requestAuthentication( context, savedPin, savedPassword, - isOnOpeningApp: isOpeningApp, + isAuthenticatingOnAppLaunch: isOpeningApp, isAuthenticatingForInAppChange: isAuthenticatingForInAppChange, ); } else { From 83516a7f27a7ad75334a6e530b0128227c3efbd9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 09:23:07 +0530 Subject: [PATCH 366/466] More --- .../PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- .../photos/src/components/Upload/Uploader.tsx | 5 ++--- web/apps/photos/src/services/searchService.ts | 2 +- web/apps/photos/src/services/watch.ts | 6 +++--- web/packages/accounts/components/Login.tsx | 2 +- web/packages/new/photos/services/ml/index.ts | 2 +- web/packages/new/photos/services/ml/worker.ts | 16 +++++++++------- 7 files changed, 18 insertions(+), 17 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index 3bb010d708..fe7f2724e2 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -775,7 +775,7 @@ const canvasToFile = async ( const [originalName] = nameAndExtension(originalFileName); const fileName = `${originalName}-edited.${extension}`; - log.debug(() => ({ a: "canvas => file", blob, type: blob.type, mimeType })); + log.debug(() => ["canvas => file", { blob, type: blob.type, mimeType }]); return new File([blob], fileName); }; diff --git a/web/apps/photos/src/components/Upload/Uploader.tsx b/web/apps/photos/src/components/Upload/Uploader.tsx index 767b32c35d..3604bef2ad 100644 --- a/web/apps/photos/src/components/Upload/Uploader.tsx +++ b/web/apps/photos/src/components/Upload/Uploader.tsx @@ -396,9 +396,8 @@ export default function Uploader({ ); setImportSuggestion(importSuggestion); - log.debug(() => "Uploader invoked:"); - log.debug(() => uploadItemsAndPaths.current); - log.debug(() => importSuggestion); + log.debug(() => ["Upload request", uploadItemsAndPaths.current]); + log.debug(() => ["Import suggestion", importSuggestion]); const _pickedUploadType = pickedUploadType.current; pickedUploadType.current = null; diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 5514233ce4..4afd7af0ef 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -375,7 +375,7 @@ const searchClip = async ( // TODO-ML: clip-test return undefined; // const matches = await clipMatches(searchPhrase, ensureElectron()); - // log.debug(() => ({ t: "clip-scores", matches })); + // log.debug(() => ["clip/scores", matches]); // return matches; }; diff --git a/web/apps/photos/src/services/watch.ts b/web/apps/photos/src/services/watch.ts index 8c367ee71c..fd381e278c 100644 --- a/web/apps/photos/src/services/watch.ts +++ b/web/apps/photos/src/services/watch.ts @@ -381,14 +381,14 @@ class FolderWatcher { const electron = ensureElectron(); const watch = this.activeWatch; - log.debug(() => + log.debug(() => [ + "watch/allFileUploadsDone", JSON.stringify({ - f: "watch/allFileUploadsDone", uploadItemsWithCollection, collections, watch, }), - ); + ]); const { syncedFiles, ignoredFiles } = this.deduceSyncedAndIgnored( uploadItemsWithCollection, diff --git a/web/packages/accounts/components/Login.tsx b/web/packages/accounts/components/Login.tsx index 68a9270c2f..206729a5b7 100644 --- a/web/packages/accounts/components/Login.tsx +++ b/web/packages/accounts/components/Login.tsx @@ -29,7 +29,7 @@ export const Login: React.FC = ({ signUp, host }) => { try { await setLSUser({ email }); const srpAttributes = await getSRPAttributes(email); - log.debug(() => ` srpAttributes: ${JSON.stringify(srpAttributes)}`); + log.debug(() => ["srpAttributes", JSON.stringify(srpAttributes)]); if (!srpAttributes || srpAttributes.isEmailMFAEnabled) { await sendOtt(email); router.push(PAGES.VERIFY); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 1f6ff828f1..41456b5663 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -184,7 +184,7 @@ export const triggerMLSync = () => { export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; - log.debug(() => ({ t: "ml/liveq", enteFile, uploadItem })); + log.debug(() => ["ml/liveq", {enteFile, uploadItem }]); void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 009d4b9106..e71d56a85d 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -145,13 +145,15 @@ export class MLWorker { } private async tick() { - log.debug(() => ({ - t: "ml/tick", - state: this.state, - shouldSync: this.shouldPull, - liveQ: this.liveQ, - idleDuration: this.idleDuration, - })); + log.debug(() => [ + "ml/tick", + { + state: this.state, + shouldSync: this.shouldPull, + liveQ: this.liveQ, + idleDuration: this.idleDuration, + }, + ]); const scheduleTick = () => void setTimeout(() => this.tick(), 0); From 881993ed650247a5d1953c126fb604e0fa83aedc Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 09:32:14 +0530 Subject: [PATCH 367/466] Match --- desktop/src/main/services/ml-clip.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index c51d952fe8..ae3470d2c7 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -54,17 +54,14 @@ export const computeCLIPTextEmbeddingIfAvailable = async (text: string) => { } const session = sessionOrSkip; - const t1 = Date.now(); + const t = Date.now(); const tokenizer = getTokenizer(); const tokenizedText = Int32Array.from(tokenizer.encodeForCLIP(text)); const feeds = { input: new ort.Tensor("int32", tokenizedText, [1, 77]), }; - const t2 = Date.now(); + const results = await session.run(feeds); - log.debug( - () => - `ONNX/CLIP text embedding took ${Date.now() - t1} ms (prep: ${t2 - t1} ms, inference: ${Date.now() - t2} ms)`, - ); + log.debug(() => `ONNX/CLIP text embedding took ${Date.now() - t} ms`); return ensure(results.output).data as Float32Array; }; From 072ee3861b8bc83296d995b0d976e802db90a371 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 09:36:34 +0530 Subject: [PATCH 368/466] lf --- web/packages/new/photos/services/ml/index.ts | 2 +- web/packages/next/log.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 41456b5663..f26357d48d 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -184,7 +184,7 @@ export const triggerMLSync = () => { export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { if (!_isMLEnabled) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; - log.debug(() => ["ml/liveq", {enteFile, uploadItem }]); + log.debug(() => ["ml/liveq", { enteFile, uploadItem }]); void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; diff --git a/web/packages/next/log.ts b/web/packages/next/log.ts index ee3b84f066..ffd0650817 100644 --- a/web/packages/next/log.ts +++ b/web/packages/next/log.ts @@ -100,7 +100,8 @@ const logDebug = (param: () => unknown) => { const [tag, ...rest] = p; // eslint-disable-next-line @typescript-eslint/no-unsafe-argument console.log(`[debug] ${tag}`, ...rest); - } else { /* Let console.log serialize it */ + } else { + /* Let console.log serialize it */ console.log("[debug]", p); } } From 24858ab73b2cbe0c5ec5871db096809690d3c87e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:17:35 +0530 Subject: [PATCH 369/466] Move --- .../components/PhotoViewer/FileInfo/index.tsx | 4 +- .../SearchBar/searchInput/MenuWithPeople.tsx | 2 +- .../new/photos/components}/PeopleList.tsx | 38 +++++++++---------- web/packages/new/photos/services/ml/people.ts | 2 +- 4 files changed, 22 insertions(+), 24 deletions(-) rename web/{apps/photos/src/components/ml => packages/new/photos/components}/PeopleList.tsx (86%) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 158277ff23..ac764bd1a4 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -1,3 +1,4 @@ +import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; @@ -12,9 +13,8 @@ import TextSnippetOutlined from "@mui/icons-material/TextSnippetOutlined"; import { Box, DialogProps, Link, Stack, styled } from "@mui/material"; import { Chip } from "components/Chip"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; -import { UnidentifiedFaces } from "components/ml/PeopleList"; import LinkButton from "components/pages/gallery/LinkButton"; +import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx index 6242090dfe..56dbd305fb 100644 --- a/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx @@ -1,7 +1,7 @@ +import { PeopleList } from "@/new/photos/components/PeopleList"; import { isMLEnabled } from "@/new/photos/services/ml"; import { Row } from "@ente/shared/components/Container"; import { Box, styled } from "@mui/material"; -import { PeopleList } from "components/ml/PeopleList"; import { t } from "i18next"; import { components } from "react-select"; import { Suggestion, SuggestionType } from "types/search"; diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx similarity index 86% rename from web/apps/photos/src/components/ml/PeopleList.tsx rename to web/packages/new/photos/components/PeopleList.tsx index 2a3da9f3b0..964f93a9f6 100644 --- a/web/apps/photos/src/components/ml/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -10,34 +10,30 @@ import { t } from "i18next"; import React, { useEffect, useState } from "react"; export interface PeopleListProps { - people: Array; - maxRows?: number; + people: Person[]; + maxRows: number; onSelect?: (person: Person, index: number) => void; } -export const PeopleList = React.memo((props: PeopleListProps) => { +export const PeopleList: React.FC = ({ + people, + maxRows, + onSelect, +}) => { return ( - - {props.people.map((person, index) => ( + + {people.map((person, index) => ( - props.onSelect && props.onSelect(person, index) - } + clickable={!!onSelect} + onClick={() => onSelect && onSelect(person, index)} > ))} ); -}); +}; const FaceChipContainer = styled("div")` display: flex; @@ -89,7 +85,7 @@ export const UnidentifiedFaces: React.FC = ({ useEffect(() => { let didCancel = false; - (async () => { + const go = async () => { const faceIDs = await unidentifiedFaceIDs(enteFile); !didCancel && setFaceIDs(faceIDs); // Don't block for the regeneration to happen. If anything got @@ -99,7 +95,9 @@ export const UnidentifiedFaces: React.FC = ({ void regenerateFaceCropsIfNeeded(enteFile).then((r) => setDidRegen(r), ); - })(); + }; + + void go(); return () => { didCancel = true; @@ -110,7 +108,7 @@ export const UnidentifiedFaces: React.FC = ({ return ( <> - + {t("UNIDENTIFIED_FACES")} @@ -140,7 +138,7 @@ const FaceCropImageView: React.FC = ({ faceID }) => { useEffect(() => { let didCancel = false; if (faceID) { - blobCache("face-crops") + void blobCache("face-crops") .then((cache) => cache.get(faceID)) .then((data) => { if (data) { diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index 0dac096dc4..97118ea94a 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -2,7 +2,7 @@ export interface Person { id: number; name?: string; files: number[]; - displayFaceId?: string; + displayFaceId: string; } // TODO-ML(MR): Forced disable clustering. It doesn't currently work, From d4be782b9cae66ba100fe9bdc3042f796857b4b4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:22:14 +0530 Subject: [PATCH 370/466] Silence a warning to avoid changing behaviour for now --- web/packages/new/photos/components/PeopleList.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 964f93a9f6..7b9a1369a0 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -152,6 +152,9 @@ const FaceCropImageView: React.FC = ({ faceID }) => { didCancel = true; if (objectURL) URL.revokeObjectURL(objectURL); }; + // TODO: The linter warning is actually correct, objectURL should be a + // dependency, but adding that require reworking this code first. + // eslint-disable-next-line react-hooks/exhaustive-deps }, [faceID]); return objectURL ? ( From 57ff75b85585f784ef5a943e3a2c285cbf414a8d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:22:50 +0530 Subject: [PATCH 371/466] lf --- web/packages/new/photos/components/PeopleList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 7b9a1369a0..39361f8741 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -3,7 +3,7 @@ import { unidentifiedFaceIDs, } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; -import { EnteFile } from "@/new/photos/types/file"; +import type { EnteFile } from "@/new/photos/types/file"; import { blobCache } from "@/next/blob-cache"; import { Skeleton, Typography, styled } from "@mui/material"; import { t } from "i18next"; From 4519dc94b88b00d78915927bec1486e839cfe7e5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:38:53 +0530 Subject: [PATCH 372/466] Move --- .../accounts/src/pages/passkeys/index.tsx | 4 +-- .../emailShare/AddParticipantForm.tsx | 6 ++-- .../emailShare/ManageEmailShare.tsx | 8 +++--- .../emailShare/ManageParticipant.tsx | 4 +-- .../CollectionShare/emailShare/index.tsx | 6 ++-- .../publicShare/EnablePublicShareOptions.tsx | 6 ++-- .../publicShare/manage/deviceLimit.tsx | 4 +-- .../publicShare/manage/index.tsx | 4 +-- .../publicShare/manage/linkExpiry.tsx | 4 +-- .../publicShare/manage/publicCollect.tsx | 4 +-- .../publicShare/managePublicShare.tsx | 4 +-- .../CollectionShare/sharingDetails.tsx | 6 ++-- .../ImageEditorOverlay/ColoursMenu.tsx | 4 +-- .../ImageEditorOverlay/CropMenu.tsx | 4 +-- .../ImageEditorOverlay/TransformMenu.tsx | 6 ++-- .../PhotoViewer/ImageEditorOverlay/index.tsx | 6 ++-- .../components/Sidebar/AdvancedSettings.tsx | 4 +-- .../src/components/Sidebar/MapSetting.tsx | 2 +- .../src/components/ml/MLSearchSettings.tsx | 2 +- .../components/menu}/MenuItemDivider.tsx | 0 .../common/components/menu}/MenuItemGroup.tsx | 0 .../components/menu}/MenuSectionTitle.tsx | 0 .../components/Menu/MenuItemDivider.tsx | 16 ----------- .../shared/components/Menu/MenuItemGroup.tsx | 20 ------------- .../components/Menu/MenuSectionTitle.tsx | 28 ------------------- 25 files changed, 44 insertions(+), 108 deletions(-) rename web/{apps/photos/src/components/Menu => packages/new/common/components/menu}/MenuItemDivider.tsx (100%) rename web/{apps/photos/src/components/Menu => packages/new/common/components/menu}/MenuItemGroup.tsx (100%) rename web/{apps/photos/src/components/Menu => packages/new/common/components/menu}/MenuSectionTitle.tsx (100%) delete mode 100644 web/packages/shared/components/Menu/MenuItemDivider.tsx delete mode 100644 web/packages/shared/components/Menu/MenuItemGroup.tsx delete mode 100644 web/packages/shared/components/Menu/MenuSectionTitle.tsx diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index 6f201ff33a..f928cabcca 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,3 +1,5 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; @@ -7,8 +9,6 @@ import { EnteDrawer } from "@ente/shared/components/EnteDrawer"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import InfoItem from "@ente/shared/components/Info/InfoItem"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; -import MenuItemDivider from "@ente/shared/components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "@ente/shared/components/Menu/MenuItemGroup"; import SingleInputForm from "@ente/shared/components/SingleInputForm"; import Titlebar from "@ente/shared/components/Titlebar"; import { formatDateTimeFull } from "@ente/shared/time/format"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx index 29e8be1015..bb36ae2e8a 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx @@ -1,12 +1,12 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { FlexWrapper } from "@ente/shared/components/Container"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import SubmitButton from "@ente/shared/components/SubmitButton"; import DoneIcon from "@mui/icons-material/Done"; import { Button, FormHelperText, Stack } from "@mui/material"; import TextField from "@mui/material/TextField"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import Avatar from "components/pages/gallery/Avatar"; import { Formik, type FormikHelpers } from "formik"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index 78e5dfe7ef..d33ce32605 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -1,3 +1,6 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; @@ -6,11 +9,8 @@ import ModeEditIcon from "@mui/icons-material/ModeEdit"; import Photo from "@mui/icons-material/Photo"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; -import Titlebar from "components/Titlebar"; import Avatar from "components/pages/gallery/Avatar"; +import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index c444c63faf..014f013a40 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,3 +1,5 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import BlockIcon from "@mui/icons-material/Block"; @@ -6,8 +8,6 @@ import ModeEditIcon from "@mui/icons-material/ModeEdit"; import PhotoIcon from "@mui/icons-material/Photo"; import { DialogProps, Stack, Typography } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index 9d2444e8aa..febb6e4d29 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -1,14 +1,14 @@ import { useRef, useState } from "react"; import { COLLECTION_ROLE, Collection } from "types/collection"; +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AddIcon from "@mui/icons-material/Add"; import ChevronRight from "@mui/icons-material/ChevronRight"; import Workspaces from "@mui/icons-material/Workspaces"; import { Stack } from "@mui/material"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import AvatarGroup from "components/pages/gallery/AvatarGroup"; import { t } from "i18next"; import AddParticipant from "./AddParticipant"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx index 5df152e0c7..d5ca9c8bdf 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -1,11 +1,11 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import DownloadSharp from "@mui/icons-material/DownloadSharp"; import LinkIcon from "@mui/icons-material/Link"; import PublicIcon from "@mui/icons-material/Public"; import { Stack, Typography } from "@mui/material"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; import { useContext, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index aacd0f2185..3377cb0276 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,9 +1,9 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { useMemo, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index be93a36a10..d4b253780b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,10 +1,10 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; import { DialogProps, Stack, Typography } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 458fcd20a1..6c311e365b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,10 +1,10 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { useMemo, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx index bfd78f1a31..1fc5a3385d 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx @@ -1,7 +1,7 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Stack } from "@mui/material"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { t } from "i18next"; import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx index 677228d55f..fe3dc1cf83 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx @@ -1,3 +1,5 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import ContentCopyIcon from "@mui/icons-material/ContentCopyOutlined"; @@ -5,8 +7,6 @@ import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; import LinkIcon from "@mui/icons-material/Link"; import PublicIcon from "@mui/icons-material/Public"; import { Stack, Typography } from "@mui/material"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import { t } from "i18next"; import { useState } from "react"; import { Collection, PublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx index e7ae9011cc..45dd8d9135 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -1,11 +1,11 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; import Photo from "@mui/icons-material/Photo"; import { Stack } from "@mui/material"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import Avatar from "components/pages/gallery/Avatar"; import { CollectionSummaryType } from "constants/collection"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx index deaebe2cf2..0db42793e2 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx @@ -1,7 +1,7 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Box, Slider } from "@mui/material"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { t } from "i18next"; import type { Dispatch, SetStateAction } from "react"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx index 11916a13a1..dd4a13b29d 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx @@ -1,7 +1,7 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import CropIcon from "@mui/icons-material/Crop"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { t } from "i18next"; import type { MutableRefObject } from "react"; import { useContext } from "react"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx index 6176ab3c18..2c56b93ff8 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx @@ -1,3 +1,6 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Crop169Icon from "@mui/icons-material/Crop169"; @@ -6,9 +9,6 @@ import CropSquareIcon from "@mui/icons-material/CropSquare"; import FlipIcon from "@mui/icons-material/Flip"; import RotateLeftIcon from "@mui/icons-material/RotateLeft"; import RotateRightIcon from "@mui/icons-material/RotateRight"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { t } from "i18next"; import { Fragment, useContext } from "react"; import { ImageEditorOverlayContext } from "."; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index fe7f2724e2..2aa924a054 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,3 +1,6 @@ +import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { nameAndExtension } from "@/next/file"; @@ -27,9 +30,6 @@ import { Typography, } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import MenuItemDivider from "components/Menu/MenuItemDivider"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import { CORNER_THRESHOLD, FILTER_DEFAULT_VALUES } from "constants/photoEditor"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 9ef7a26973..742ebe0ebf 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,10 +1,10 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; import Titlebar from "components/Titlebar"; import { MLSearchSettings } from "components/ml/MLSearchSettings"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 18d1a0639a..7ce53ca852 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,3 +1,4 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { @@ -9,7 +10,6 @@ import { Typography, } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 118684dccc..abdc8a38c7 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,3 +1,4 @@ +import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { canEnableFaceIndexing, disableML, @@ -18,7 +19,6 @@ import { Typography, } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Menu/MenuItemDivider.tsx b/web/packages/new/common/components/menu/MenuItemDivider.tsx similarity index 100% rename from web/apps/photos/src/components/Menu/MenuItemDivider.tsx rename to web/packages/new/common/components/menu/MenuItemDivider.tsx diff --git a/web/apps/photos/src/components/Menu/MenuItemGroup.tsx b/web/packages/new/common/components/menu/MenuItemGroup.tsx similarity index 100% rename from web/apps/photos/src/components/Menu/MenuItemGroup.tsx rename to web/packages/new/common/components/menu/MenuItemGroup.tsx diff --git a/web/apps/photos/src/components/Menu/MenuSectionTitle.tsx b/web/packages/new/common/components/menu/MenuSectionTitle.tsx similarity index 100% rename from web/apps/photos/src/components/Menu/MenuSectionTitle.tsx rename to web/packages/new/common/components/menu/MenuSectionTitle.tsx diff --git a/web/packages/shared/components/Menu/MenuItemDivider.tsx b/web/packages/shared/components/Menu/MenuItemDivider.tsx deleted file mode 100644 index da3b309a2b..0000000000 --- a/web/packages/shared/components/Menu/MenuItemDivider.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Divider } from "@mui/material"; -interface Iprops { - hasIcon?: boolean; -} -export default function MenuItemDivider({ hasIcon = false }: Iprops) { - return ( - - ); -} diff --git a/web/packages/shared/components/Menu/MenuItemGroup.tsx b/web/packages/shared/components/Menu/MenuItemGroup.tsx deleted file mode 100644 index 0b80262b5f..0000000000 --- a/web/packages/shared/components/Menu/MenuItemGroup.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { styled } from "@mui/material"; - -export const MenuItemGroup = styled("div")( - ({ theme }) => ` - & > .MuiMenuItem-root{ - border-radius: 8px; - background-color: transparent; - } - & > .MuiMenuItem-root:not(:last-of-type) { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - & > .MuiMenuItem-root:not(:first-of-type) { - border-top-left-radius: 0; - border-top-right-radius: 0; - } - background-color: ${theme.colors.fill.faint}; - border-radius: 8px; -`, -); diff --git a/web/packages/shared/components/Menu/MenuSectionTitle.tsx b/web/packages/shared/components/Menu/MenuSectionTitle.tsx deleted file mode 100644 index 5c07b8d92b..0000000000 --- a/web/packages/shared/components/Menu/MenuSectionTitle.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; -import { Typography } from "@mui/material"; - -interface Iprops { - title: string; - icon?: JSX.Element; -} - -export default function MenuSectionTitle({ title, icon }: Iprops) { - return ( - svg": { - fontSize: "17px", - color: (theme) => theme.colors.stroke.muted, - }, - }} - > - {icon && icon} - - {title} - - - ); -} From 4d11623f770cadac01be0dc7e215111fe6a0b02a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:47:41 +0530 Subject: [PATCH 373/466] Fix warnings --- web/apps/accounts/src/pages/passkeys/index.tsx | 2 +- .../CollectionShare/emailShare/AddParticipantForm.tsx | 2 +- .../CollectionShare/emailShare/ManageEmailShare.tsx | 2 +- .../CollectionShare/emailShare/ManageParticipant.tsx | 2 +- .../Collections/CollectionShare/emailShare/index.tsx | 2 +- .../publicShare/EnablePublicShareOptions.tsx | 2 +- .../publicShare/manage/deviceLimit.tsx | 2 +- .../CollectionShare/publicShare/manage/index.tsx | 2 +- .../CollectionShare/publicShare/manage/linkExpiry.tsx | 2 +- .../CollectionShare/publicShare/managePublicShare.tsx | 2 +- .../Collections/CollectionShare/sharingDetails.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/TransformMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- .../new/common/components/menu/MenuItemDivider.tsx | 11 ++++++++--- 14 files changed, 21 insertions(+), 16 deletions(-) diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index f928cabcca..04a68e1c84 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx index bb36ae2e8a..bd07d854cf 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { FlexWrapper } from "@ente/shared/components/Container"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index d33ce32605..13f4a2d9e7 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index 014f013a40..38adca4c87 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index febb6e4d29..58dc59b385 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -1,7 +1,7 @@ import { useRef, useState } from "react"; import { COLLECTION_ROLE, Collection } from "types/collection"; -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx index d5ca9c8bdf..ab8cc25239 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index 3377cb0276..c076da752e 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index d4b253780b..d97d59c191 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 6c311e365b..8b4e04cb93 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx index fe3dc1cf83..e2b58b15cf 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx index 45dd8d9135..16f715520a 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx index 2c56b93ff8..dd0e1f43cb 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import log from "@/next/log"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index 2aa924a054..ff1310d232 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,4 +1,4 @@ -import MenuItemDivider from "@/new/common/components/menu/MenuItemDivider"; +import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; import downloadManager from "@/new/photos/services/download"; diff --git a/web/packages/new/common/components/menu/MenuItemDivider.tsx b/web/packages/new/common/components/menu/MenuItemDivider.tsx index da3b309a2b..21c632ee49 100644 --- a/web/packages/new/common/components/menu/MenuItemDivider.tsx +++ b/web/packages/new/common/components/menu/MenuItemDivider.tsx @@ -1,8 +1,13 @@ import { Divider } from "@mui/material"; -interface Iprops { +import React from "react"; + +interface MenuItemDividerProps { hasIcon?: boolean; } -export default function MenuItemDivider({ hasIcon = false }: Iprops) { + +export const MenuItemDivider: React.FC = ({ + hasIcon, +}) => { return ( ); -} +}; From ecd4201304249763d01e440aeabb17d3da1a4e2e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:49:11 +0530 Subject: [PATCH 374/466] Fix warnings --- .../CollectionShare/emailShare/AddParticipantForm.tsx | 2 +- .../CollectionShare/emailShare/ManageEmailShare.tsx | 2 +- .../Collections/CollectionShare/emailShare/index.tsx | 2 +- .../publicShare/EnablePublicShareOptions.tsx | 2 +- .../publicShare/manage/publicCollect.tsx | 2 +- .../Collections/CollectionShare/sharingDetails.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/CropMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/TransformMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- .../photos/src/components/Sidebar/AdvancedSettings.tsx | 2 +- .../new/common/components/menu/MenuSectionTitle.tsx | 10 +++++++--- 12 files changed, 18 insertions(+), 14 deletions(-) diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx index bd07d854cf..0673dddff4 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { FlexWrapper } from "@ente/shared/components/Container"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import SubmitButton from "@ente/shared/components/SubmitButton"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index 13f4a2d9e7..b6ca4ba235 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index 58dc59b385..72ebb02aac 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -3,7 +3,7 @@ import { COLLECTION_ROLE, Collection } from "types/collection"; import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AddIcon from "@mui/icons-material/Add"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx index ab8cc25239..e4751e939a 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import DownloadSharp from "@mui/icons-material/DownloadSharp"; import LinkIcon from "@mui/icons-material/Link"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx index 1fc5a3385d..88e16303fd 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Stack } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx index 16f715520a..8ed470bc4f 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx index 0db42793e2..b440cb3ad4 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Box, Slider } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx index dd4a13b29d..65528a7833 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import CropIcon from "@mui/icons-material/Crop"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx index dd0e1f43cb..a1a184e321 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Crop169Icon from "@mui/icons-material/Crop169"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index ff1310d232..ab0b4afae6 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,6 +1,6 @@ import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { nameAndExtension } from "@/next/file"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 742ebe0ebf..178dbba813 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import MenuSectionTitle from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; diff --git a/web/packages/new/common/components/menu/MenuSectionTitle.tsx b/web/packages/new/common/components/menu/MenuSectionTitle.tsx index 5c07b8d92b..0a79fd4b5f 100644 --- a/web/packages/new/common/components/menu/MenuSectionTitle.tsx +++ b/web/packages/new/common/components/menu/MenuSectionTitle.tsx @@ -1,12 +1,16 @@ import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; import { Typography } from "@mui/material"; +import React from "react"; -interface Iprops { +interface MenuSectionTitleProps { title: string; icon?: JSX.Element; } -export default function MenuSectionTitle({ title, icon }: Iprops) { +export const MenuSectionTitle: React.FC = ({ + title, + icon, +}) => { return ( ); -} +}; From 2510226a576e553d4e6f7a5587fd781ef4b1d8c7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:54:27 +0530 Subject: [PATCH 375/466] Consolidate --- .../accounts/src/pages/passkeys/index.tsx | 3 +- .../emailShare/AddParticipantForm.tsx | 8 ++- .../emailShare/ManageEmailShare.tsx | 8 ++- .../emailShare/ManageParticipant.tsx | 3 +- .../CollectionShare/emailShare/index.tsx | 8 ++- .../publicShare/EnablePublicShareOptions.tsx | 8 ++- .../publicShare/manage/deviceLimit.tsx | 3 +- .../publicShare/manage/index.tsx | 3 +- .../publicShare/manage/linkExpiry.tsx | 3 +- .../publicShare/manage/publicCollect.tsx | 3 +- .../publicShare/managePublicShare.tsx | 3 +- .../CollectionShare/sharingDetails.tsx | 8 ++- .../ImageEditorOverlay/ColoursMenu.tsx | 3 +- .../ImageEditorOverlay/CropMenu.tsx | 3 +- .../ImageEditorOverlay/TransformMenu.tsx | 8 ++- .../PhotoViewer/ImageEditorOverlay/index.tsx | 8 ++- .../components/Sidebar/AdvancedSettings.tsx | 3 +- .../src/components/Sidebar/MapSetting.tsx | 2 +- .../src/components/ml/MLSearchSettings.tsx | 2 +- web/packages/new/common/components/Menu.tsx | 70 +++++++++++++++++++ .../components/menu/MenuItemDivider.tsx | 21 ------ .../common/components/menu/MenuItemGroup.tsx | 20 ------ .../components/menu/MenuSectionTitle.tsx | 32 --------- 23 files changed, 117 insertions(+), 116 deletions(-) create mode 100644 web/packages/new/common/components/Menu.tsx delete mode 100644 web/packages/new/common/components/menu/MenuItemDivider.tsx delete mode 100644 web/packages/new/common/components/menu/MenuItemGroup.tsx delete mode 100644 web/packages/new/common/components/menu/MenuSectionTitle.tsx diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index 04a68e1c84..96915d3d85 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx index 0673dddff4..bff0c8489e 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import { FlexWrapper } from "@ente/shared/components/Container"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import SubmitButton from "@ente/shared/components/SubmitButton"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index b6ca4ba235..7dd4ab75a6 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index 38adca4c87..976fee2df8 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import BlockIcon from "@mui/icons-material/Block"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index 72ebb02aac..f5a9fa40aa 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -1,9 +1,11 @@ import { useRef, useState } from "react"; import { COLLECTION_ROLE, Collection } from "types/collection"; -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AddIcon from "@mui/icons-material/Add"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx index e4751e939a..fe3acb8c57 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import DownloadSharp from "@mui/icons-material/DownloadSharp"; import LinkIcon from "@mui/icons-material/Link"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index c076da752e..4377609cbf 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index d97d59c191..4543594028 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 8b4e04cb93..5f2d1b7035 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx index 88e16303fd..3e8bf8bd33 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx @@ -1,5 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Stack } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx index e2b58b15cf..e85f0ded45 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx @@ -1,5 +1,4 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import ContentCopyIcon from "@mui/icons-material/ContentCopyOutlined"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx index 8ed470bc4f..f6c78cb7c9 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx index b440cb3ad4..009160bf1f 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx @@ -1,5 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Box, Slider } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx index 65528a7833..d257ce4b72 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx @@ -1,5 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import CropIcon from "@mui/icons-material/Crop"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx index a1a184e321..1951224a10 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Crop169Icon from "@mui/icons-material/Crop169"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index ab0b4afae6..6899f145cd 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,6 +1,8 @@ -import { MenuItemDivider } from "@/new/common/components/menu/MenuItemDivider"; -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { + MenuItemDivider, + MenuItemGroup, + MenuSectionTitle, +} from "@/new/common/components/Menu"; import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; import { nameAndExtension } from "@/next/file"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 178dbba813..d1c1a9a0a4 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,5 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; -import { MenuSectionTitle } from "@/new/common/components/menu/MenuSectionTitle"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 7ce53ca852..1c5cb1df70 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemGroup } from "@/new/common/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index abdc8a38c7..3f69a41fbe 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/menu/MenuItemGroup"; +import { MenuItemGroup } from "@/new/common/components/Menu"; import { canEnableFaceIndexing, disableML, diff --git a/web/packages/new/common/components/Menu.tsx b/web/packages/new/common/components/Menu.tsx new file mode 100644 index 0000000000..00381aea67 --- /dev/null +++ b/web/packages/new/common/components/Menu.tsx @@ -0,0 +1,70 @@ +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { Divider, styled, Typography } from "@mui/material"; +import React from "react"; + +interface MenuSectionTitleProps { + title: string; + icon?: JSX.Element; +} + +export const MenuSectionTitle: React.FC = ({ + title, + icon, +}) => { + return ( + svg": { + fontSize: "17px", + color: (theme) => theme.colors.stroke.muted, + }, + }} + > + {icon && icon} + + {title} + + + ); +}; + +interface MenuItemDividerProps { + hasIcon?: boolean; +} + +export const MenuItemDivider: React.FC = ({ + hasIcon, +}) => { + return ( + + ); +}; + +export const MenuItemGroup = styled("div")( + ({ theme }) => ` + & > .MuiMenuItem-root{ + border-radius: 8px; + background-color: transparent; + } + & > .MuiMenuItem-root:not(:last-of-type) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + & > .MuiMenuItem-root:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + background-color: ${theme.colors.fill.faint}; + border-radius: 8px; +`, +); diff --git a/web/packages/new/common/components/menu/MenuItemDivider.tsx b/web/packages/new/common/components/menu/MenuItemDivider.tsx deleted file mode 100644 index 21c632ee49..0000000000 --- a/web/packages/new/common/components/menu/MenuItemDivider.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Divider } from "@mui/material"; -import React from "react"; - -interface MenuItemDividerProps { - hasIcon?: boolean; -} - -export const MenuItemDivider: React.FC = ({ - hasIcon, -}) => { - return ( - - ); -}; diff --git a/web/packages/new/common/components/menu/MenuItemGroup.tsx b/web/packages/new/common/components/menu/MenuItemGroup.tsx deleted file mode 100644 index 0b80262b5f..0000000000 --- a/web/packages/new/common/components/menu/MenuItemGroup.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { styled } from "@mui/material"; - -export const MenuItemGroup = styled("div")( - ({ theme }) => ` - & > .MuiMenuItem-root{ - border-radius: 8px; - background-color: transparent; - } - & > .MuiMenuItem-root:not(:last-of-type) { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - & > .MuiMenuItem-root:not(:first-of-type) { - border-top-left-radius: 0; - border-top-right-radius: 0; - } - background-color: ${theme.colors.fill.faint}; - border-radius: 8px; -`, -); diff --git a/web/packages/new/common/components/menu/MenuSectionTitle.tsx b/web/packages/new/common/components/menu/MenuSectionTitle.tsx deleted file mode 100644 index 0a79fd4b5f..0000000000 --- a/web/packages/new/common/components/menu/MenuSectionTitle.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; -import { Typography } from "@mui/material"; -import React from "react"; - -interface MenuSectionTitleProps { - title: string; - icon?: JSX.Element; -} - -export const MenuSectionTitle: React.FC = ({ - title, - icon, -}) => { - return ( - svg": { - fontSize: "17px", - color: (theme) => theme.colors.stroke.muted, - }, - }} - > - {icon && icon} - - {title} - - - ); -}; From cd433aa39e362401d94eeeff515620bbdec79f45 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 10:58:57 +0530 Subject: [PATCH 376/466] Move --- web/apps/accounts/src/pages/passkeys/index.tsx | 2 +- .../CollectionShare/emailShare/AddParticipantForm.tsx | 2 +- .../CollectionShare/emailShare/ManageEmailShare.tsx | 2 +- .../CollectionShare/emailShare/ManageParticipant.tsx | 2 +- .../Collections/CollectionShare/emailShare/index.tsx | 2 +- .../publicShare/EnablePublicShareOptions.tsx | 2 +- .../CollectionShare/publicShare/manage/deviceLimit.tsx | 2 +- .../CollectionShare/publicShare/manage/index.tsx | 2 +- .../CollectionShare/publicShare/manage/linkExpiry.tsx | 2 +- .../CollectionShare/publicShare/manage/publicCollect.tsx | 2 +- .../CollectionShare/publicShare/managePublicShare.tsx | 2 +- .../Collections/CollectionShare/sharingDetails.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/CropMenu.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/TransformMenu.tsx | 2 +- .../components/PhotoViewer/ImageEditorOverlay/index.tsx | 6 +++--- .../photos/src/components/Sidebar/AdvancedSettings.tsx | 2 +- web/apps/photos/src/components/Sidebar/MapSetting.tsx | 2 +- web/apps/photos/src/components/ml/MLSearchSettings.tsx | 2 +- web/packages/new/photos/services/ml/embedding.ts | 8 ++++---- web/packages/new/{common => shared}/components/Menu.tsx | 0 web/packages/new/{common => shared}/crypto/ente.ts | 0 22 files changed, 25 insertions(+), 25 deletions(-) rename web/packages/new/{common => shared}/components/Menu.tsx (100%) rename web/packages/new/{common => shared}/crypto/ente.ts (100%) diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index 96915d3d85..e46e7d2681 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx index bff0c8489e..9bf36991d4 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipantForm.tsx @@ -2,7 +2,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import { FlexWrapper } from "@ente/shared/components/Container"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import SubmitButton from "@ente/shared/components/SubmitButton"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index 7dd4ab75a6..a7ee1293d8 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -2,7 +2,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index 976fee2df8..1a8c975f3a 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import BlockIcon from "@mui/icons-material/Block"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx index f5a9fa40aa..768e91d5e1 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -5,7 +5,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AddIcon from "@mui/icons-material/Add"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx index fe3acb8c57..e6a9baf3cc 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -2,7 +2,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import DownloadSharp from "@mui/icons-material/DownloadSharp"; import LinkIcon from "@mui/icons-material/Link"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index 4377609cbf..c198bc5aa5 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index 4543594028..10b1410782 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 5f2d1b7035..c969429c42 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx index 3e8bf8bd33..4290cd349f 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Stack } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx index e85f0ded45..1f723ae161 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx @@ -1,4 +1,4 @@ -import { MenuItemDivider, MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import ContentCopyIcon from "@mui/icons-material/ContentCopyOutlined"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx index f6c78cb7c9..25e3771fc1 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -2,7 +2,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx index 009160bf1f..7f7fcf5112 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/ColoursMenu.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Box, Slider } from "@mui/material"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx index d257ce4b72..923998b009 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/CropMenu.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import CropIcon from "@mui/icons-material/Crop"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx index 1951224a10..9c578c0261 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/TransformMenu.tsx @@ -2,7 +2,7 @@ import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; +} from "@/new/shared/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Crop169Icon from "@mui/icons-material/Crop169"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index 6899f145cd..1bc3f3ad5c 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,10 +1,10 @@ +import downloadManager from "@/new/photos/services/download"; +import { EnteFile } from "@/new/photos/types/file"; import { MenuItemDivider, MenuItemGroup, MenuSectionTitle, -} from "@/new/common/components/Menu"; -import downloadManager from "@/new/photos/services/download"; -import { EnteFile } from "@/new/photos/types/file"; +} from "@/new/shared/components/Menu"; import { nameAndExtension } from "@/next/file"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index d1c1a9a0a4..c07dd2c7e6 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup, MenuSectionTitle } from "@/new/common/components/Menu"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 1c5cb1df70..8e6a1f1764 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,4 +1,4 @@ -import { MenuItemGroup } from "@/new/common/components/Menu"; +import { MenuItemGroup } from "@/new/shared/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 3f69a41fbe..a98afaf3a0 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,10 +1,10 @@ -import { MenuItemGroup } from "@/new/common/components/Menu"; import { canEnableFaceIndexing, disableML, enableML, isMLEnabled, } from "@/new/photos/services/ml"; +import { MenuItemGroup } from "@/new/shared/components/Menu"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/packages/new/photos/services/ml/embedding.ts b/web/packages/new/photos/services/ml/embedding.ts index eadeb00b0e..a6884bc17d 100644 --- a/web/packages/new/photos/services/ml/embedding.ts +++ b/web/packages/new/photos/services/ml/embedding.ts @@ -1,12 +1,12 @@ -import { - decryptFileMetadata, - encryptFileMetadata, -} from "@/new/common/crypto/ente"; import { getAllLocalFiles, getLocalTrashedFiles, } from "@/new/photos/services/files"; import type { EnteFile } from "@/new/photos/types/file"; +import { + decryptFileMetadata, + encryptFileMetadata, +} from "@/new/shared/crypto/ente"; import { authenticatedRequestHeaders, ensureOk } from "@/next/http"; import { getKV, setKV } from "@/next/kv"; import log from "@/next/log"; diff --git a/web/packages/new/common/components/Menu.tsx b/web/packages/new/shared/components/Menu.tsx similarity index 100% rename from web/packages/new/common/components/Menu.tsx rename to web/packages/new/shared/components/Menu.tsx diff --git a/web/packages/new/common/crypto/ente.ts b/web/packages/new/shared/crypto/ente.ts similarity index 100% rename from web/packages/new/common/crypto/ente.ts rename to web/packages/new/shared/crypto/ente.ts From fde6e14440b843a14e6185c69a67a17193eceeb3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 11:00:43 +0530 Subject: [PATCH 377/466] Move --- .../accounts/src/pages/passkeys/index.tsx | 2 +- .../emailShare/AddParticipant.tsx | 2 +- .../emailShare/ManageEmailShare.tsx | 2 +- .../emailShare/ManageParticipant.tsx | 2 +- .../Collections/CollectionShare/index.tsx | 2 +- .../publicShare/manage/deviceLimit.tsx | 2 +- .../publicShare/manage/index.tsx | 2 +- .../publicShare/manage/linkExpiry.tsx | 2 +- .../PhotoViewer/FileInfo/ExifData.tsx | 2 +- .../components/PhotoViewer/FileInfo/index.tsx | 2 +- .../components/Sidebar/AdvancedSettings.tsx | 2 +- .../src/components/Sidebar/MapSetting.tsx | 2 +- .../src/components/Sidebar/Preferences.tsx | 2 +- .../src/components/ml/MLSearchSettings.tsx | 2 +- .../new/shared}/components/Titlebar.tsx | 0 web/packages/shared/components/Titlebar.tsx | 59 ------------------- 16 files changed, 14 insertions(+), 73 deletions(-) rename web/{apps/photos/src => packages/new/shared}/components/Titlebar.tsx (100%) delete mode 100644 web/packages/shared/components/Titlebar.tsx diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index e46e7d2681..e98cc3f167 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,4 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; @@ -9,7 +10,6 @@ import FormPaper from "@ente/shared/components/Form/FormPaper"; import InfoItem from "@ente/shared/components/Info/InfoItem"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import SingleInputForm from "@ente/shared/components/SingleInputForm"; -import Titlebar from "@ente/shared/components/Titlebar"; import { formatDateTimeFull } from "@ente/shared/time/format"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx index 05437ada00..733406c968 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx @@ -1,6 +1,6 @@ +import Titlebar from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { COLLECTION_ROLE, Collection } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index a7ee1293d8..807551b4fe 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -3,6 +3,7 @@ import { MenuItemGroup, MenuSectionTitle, } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; @@ -12,7 +13,6 @@ import Photo from "@mui/icons-material/Photo"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; import Avatar from "components/pages/gallery/Avatar"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index 1a8c975f3a..022e1d9e4b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,4 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import BlockIcon from "@mui/icons-material/Block"; @@ -7,7 +8,6 @@ import ModeEditIcon from "@mui/icons-material/ModeEdit"; import PhotoIcon from "@mui/icons-material/Photo"; import { DialogProps, Stack, Typography } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx index 22de9b55e8..f8ba77f510 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx @@ -1,6 +1,6 @@ +import Titlebar from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { CollectionSummaryType } from "constants/collection"; import { t } from "i18next"; import { Collection, CollectionSummary } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index c198bc5aa5..7e4a91608b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,9 +1,9 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { useMemo, useState } from "react"; import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index 10b1410782..438e69eb03 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,10 +1,10 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; import { DialogProps, Stack, Typography } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; import { useContext, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index c969429c42..6d808a4450 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,10 +1,10 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { useMemo, useState } from "react"; import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx index c6c0582f8e..54db4e3849 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx @@ -1,7 +1,7 @@ +import Titlebar from "@/new/shared/components/Titlebar"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { formatDateTimeFull } from "@ente/shared/time/format"; import { Box, Stack, styled, Typography } from "@mui/material"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import React from "react"; import { FileInfoSidebar } from "."; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index ac764bd1a4..875041bf4b 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -1,6 +1,7 @@ import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; +import Titlebar from "@/new/shared/components/Titlebar"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; @@ -14,7 +15,6 @@ import { Box, DialogProps, Link, Stack, styled } from "@mui/material"; import { Chip } from "components/Chip"; import { EnteDrawer } from "components/EnteDrawer"; import LinkButton from "components/pages/gallery/LinkButton"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index c07dd2c7e6..6362ca9d12 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,10 +1,10 @@ import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { MLSearchSettings } from "components/ml/MLSearchSettings"; import { t } from "i18next"; import isElectron from "is-electron"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 8e6a1f1764..3b07087402 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,4 +1,5 @@ import { MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { @@ -10,7 +11,6 @@ import { Typography, } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index 0fe44712e2..9ca8c944e5 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -1,3 +1,4 @@ +import Titlebar from "@/new/shared/components/Titlebar"; import { getLocaleInUse, setLocaleInUse, @@ -9,7 +10,6 @@ import ChevronRight from "@mui/icons-material/ChevronRight"; import { Box, DialogProps, Stack } from "@mui/material"; import DropdownInput from "components/DropdownInput"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { useState } from "react"; import AdvancedSettings from "./AdvancedSettings"; diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index a98afaf3a0..d51a7609cf 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -5,6 +5,7 @@ import { isMLEnabled, } from "@/new/photos/services/ml"; import { MenuItemGroup } from "@/new/shared/components/Menu"; +import Titlebar from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { @@ -19,7 +20,6 @@ import { Typography, } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; -import Titlebar from "components/Titlebar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/Titlebar.tsx b/web/packages/new/shared/components/Titlebar.tsx similarity index 100% rename from web/apps/photos/src/components/Titlebar.tsx rename to web/packages/new/shared/components/Titlebar.tsx diff --git a/web/packages/shared/components/Titlebar.tsx b/web/packages/shared/components/Titlebar.tsx deleted file mode 100644 index ed9089f4c2..0000000000 --- a/web/packages/shared/components/Titlebar.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { FlexWrapper } from "@ente/shared/components/Container"; -import ArrowBack from "@mui/icons-material/ArrowBack"; -import Close from "@mui/icons-material/Close"; -import { Box, IconButton, Typography } from "@mui/material"; - -interface Iprops { - title: string; - caption?: string; - onClose: () => void; - backIsClose?: boolean; - onRootClose?: () => void; - actionButton?: JSX.Element; -} - -export default function Titlebar({ - title, - caption, - onClose, - backIsClose, - actionButton, - onRootClose, -}: Iprops): JSX.Element { - return ( - <> - - - {backIsClose ? : } - - - {actionButton && actionButton} - {!backIsClose && ( - - - - )} - - - - - {title} - - - {caption} - - - - ); -} From eb271088a40adc020ffd90db8554d3f53bbe5166 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 11:02:01 +0530 Subject: [PATCH 378/466] Move --- web/apps/accounts/src/pages/passkeys/index.tsx | 2 +- .../CollectionShare/emailShare/AddParticipant.tsx | 2 +- .../CollectionShare/emailShare/ManageEmailShare.tsx | 2 +- .../CollectionShare/emailShare/ManageParticipant.tsx | 2 +- .../src/components/Collections/CollectionShare/index.tsx | 2 +- .../CollectionShare/publicShare/manage/deviceLimit.tsx | 2 +- .../CollectionShare/publicShare/manage/index.tsx | 2 +- .../CollectionShare/publicShare/manage/linkExpiry.tsx | 2 +- .../src/components/PhotoViewer/FileInfo/ExifData.tsx | 2 +- .../photos/src/components/PhotoViewer/FileInfo/index.tsx | 2 +- .../photos/src/components/Sidebar/AdvancedSettings.tsx | 2 +- web/apps/photos/src/components/Sidebar/MapSetting.tsx | 2 +- web/apps/photos/src/components/Sidebar/Preferences.tsx | 2 +- web/apps/photos/src/components/ml/MLSearchSettings.tsx | 2 +- web/packages/new/shared/components/Titlebar.tsx | 9 +++++---- 15 files changed, 19 insertions(+), 18 deletions(-) diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index e98cc3f167..5e91654559 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,5 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx index 733406c968..9edb18b0de 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx @@ -1,4 +1,4 @@ -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index 807551b4fe..8e15765a5a 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -3,7 +3,7 @@ import { MenuItemGroup, MenuSectionTitle, } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import Add from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index 022e1d9e4b..ca233755d4 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,5 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import BlockIcon from "@mui/icons-material/Block"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx index f8ba77f510..7653877c9b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx @@ -1,4 +1,4 @@ -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; import { EnteDrawer } from "components/EnteDrawer"; import { CollectionSummaryType } from "constants/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index 7e4a91608b..7b3950edb8 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,5 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index 438e69eb03..d072d5b4cd 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,5 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 6d808a4450..2902055b9e 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,5 +1,5 @@ import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx index 54db4e3849..d84aa106c3 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx @@ -1,4 +1,4 @@ -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { formatDateTimeFull } from "@ente/shared/time/format"; import { Box, Stack, styled, Typography } from "@mui/material"; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 875041bf4b..0f1869e28e 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -1,7 +1,7 @@ import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 6362ca9d12..6f270670d2 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 3b07087402..373243612f 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,5 +1,5 @@ import { MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index 9ca8c944e5..e8cb67de21 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -1,4 +1,4 @@ -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import { getLocaleInUse, setLocaleInUse, diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index d51a7609cf..bb057a1dd3 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -5,7 +5,7 @@ import { isMLEnabled, } from "@/new/photos/services/ml"; import { MenuItemGroup } from "@/new/shared/components/Menu"; -import Titlebar from "@/new/shared/components/Titlebar"; +import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { diff --git a/web/packages/new/shared/components/Titlebar.tsx b/web/packages/new/shared/components/Titlebar.tsx index ed9089f4c2..e46fb92ce0 100644 --- a/web/packages/new/shared/components/Titlebar.tsx +++ b/web/packages/new/shared/components/Titlebar.tsx @@ -2,8 +2,9 @@ import { FlexWrapper } from "@ente/shared/components/Container"; import ArrowBack from "@mui/icons-material/ArrowBack"; import Close from "@mui/icons-material/Close"; import { Box, IconButton, Typography } from "@mui/material"; +import React from "react"; -interface Iprops { +interface TitlebarProps { title: string; caption?: string; onClose: () => void; @@ -12,14 +13,14 @@ interface Iprops { actionButton?: JSX.Element; } -export default function Titlebar({ +export const Titlebar: React.FC = ({ title, caption, onClose, backIsClose, actionButton, onRootClose, -}: Iprops): JSX.Element { +}) => { return ( <> ); -} +}; From 8e10c8bec6e00aff65f056a1d3d4b5de44668bd6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 11:33:07 +0530 Subject: [PATCH 379/466] Move --- web/apps/accounts/src/pages/passkeys/index.tsx | 2 +- .../CollectionShare/emailShare/AddParticipant.tsx | 2 +- .../CollectionShare/emailShare/ManageEmailShare.tsx | 2 +- .../CollectionShare/emailShare/ManageParticipant.tsx | 2 +- .../components/Collections/CollectionShare/index.tsx | 2 +- .../CollectionShare/publicShare/manage/deviceLimit.tsx | 2 +- .../CollectionShare/publicShare/manage/index.tsx | 2 +- .../CollectionShare/publicShare/manage/linkExpiry.tsx | 2 +- .../src/components/PhotoViewer/FileInfo/index.tsx | 2 +- .../PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- .../photos/src/components/Sidebar/AdvancedSettings.tsx | 2 +- web/apps/photos/src/components/Sidebar/MapSetting.tsx | 2 +- web/apps/photos/src/components/Sidebar/Preferences.tsx | 2 +- web/apps/photos/src/components/Sidebar/index.tsx | 2 +- web/apps/photos/src/components/ml/MLSearchSettings.tsx | 2 +- .../new/shared}/components/EnteDrawer.tsx | 0 web/packages/shared/components/EnteDrawer.tsx | 10 ---------- 17 files changed, 15 insertions(+), 25 deletions(-) rename web/{apps/photos/src => packages/new/shared}/components/EnteDrawer.tsx (100%) delete mode 100644 web/packages/shared/components/EnteDrawer.tsx diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index 5e91654559..1ca210d5f6 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,3 +1,4 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; @@ -5,7 +6,6 @@ import { ensure } from "@/utils/ensure"; import { CenteredFlex } from "@ente/shared/components/Container"; import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; import EnteButton from "@ente/shared/components/EnteButton"; -import { EnteDrawer } from "@ente/shared/components/EnteDrawer"; import FormPaper from "@ente/shared/components/Form/FormPaper"; import InfoItem from "@ente/shared/components/Info/InfoItem"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx index 9edb18b0de..5d833642df 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/AddParticipant.tsx @@ -1,6 +1,6 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { COLLECTION_ROLE, Collection } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx index 8e15765a5a..972b11019e 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -1,3 +1,4 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup, @@ -11,7 +12,6 @@ import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; import Photo from "@mui/icons-material/Photo"; import { DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import Avatar from "components/pages/gallery/Avatar"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx index ca233755d4..fd8421ed5d 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -1,3 +1,4 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; @@ -7,7 +8,6 @@ import DoneIcon from "@mui/icons-material/Done"; import ModeEditIcon from "@mui/icons-material/ModeEdit"; import PhotoIcon from "@mui/icons-material/Photo"; import { DialogProps, Stack, Typography } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { GalleryContext } from "pages/gallery"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx index 7653877c9b..0e675fcafa 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx @@ -1,6 +1,6 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { CollectionSummaryType } from "constants/collection"; import { t } from "i18next"; import { Collection, CollectionSummary } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx index 7b3950edb8..4090b08ec1 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -1,9 +1,9 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { useMemo, useState } from "react"; import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx index d072d5b4cd..5cb996e86f 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -1,10 +1,10 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; import { DialogProps, Stack, Typography } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; import { useContext, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx index 2902055b9e..6cafd68c3b 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -1,10 +1,10 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { formatDateTime } from "@ente/shared/time/format"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { useMemo, useState } from "react"; import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 0f1869e28e..d486efb990 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -1,6 +1,7 @@ import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { Titlebar } from "@/new/shared/components/Titlebar"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; @@ -13,7 +14,6 @@ import LocationOnOutlined from "@mui/icons-material/LocationOnOutlined"; import TextSnippetOutlined from "@mui/icons-material/TextSnippetOutlined"; import { Box, DialogProps, Link, Stack, styled } from "@mui/material"; import { Chip } from "components/Chip"; -import { EnteDrawer } from "components/EnteDrawer"; import LinkButton from "components/pages/gallery/LinkButton"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index 1bc3f3ad5c..94002c664f 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -1,5 +1,6 @@ import downloadManager from "@/new/photos/services/download"; import { EnteFile } from "@/new/photos/types/file"; +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemDivider, MenuItemGroup, @@ -31,7 +32,6 @@ import { Tabs, Typography, } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { CORNER_THRESHOLD, FILTER_DEFAULT_VALUES } from "constants/photoEditor"; import { t } from "i18next"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 6f270670d2..c3c9134aa8 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,10 +1,10 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { MLSearchSettings } from "components/ml/MLSearchSettings"; import { t } from "i18next"; import isElectron from "is-electron"; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting.tsx b/web/apps/photos/src/components/Sidebar/MapSetting.tsx index 373243612f..60d71dca66 100644 --- a/web/apps/photos/src/components/Sidebar/MapSetting.tsx +++ b/web/apps/photos/src/components/Sidebar/MapSetting.tsx @@ -1,3 +1,4 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; @@ -10,7 +11,6 @@ import { Stack, Typography, } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index e8cb67de21..ac6e9ecb57 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -1,3 +1,4 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { getLocaleInUse, @@ -9,7 +10,6 @@ import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import { Box, DialogProps, Stack } from "@mui/material"; import DropdownInput from "components/DropdownInput"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { useState } from "react"; import AdvancedSettings from "./AdvancedSettings"; diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 1dedaf6a79..3d3f9f964a 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -1,4 +1,5 @@ import { openAccountsManagePasskeysPage } from "@/accounts/services/passkey"; +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import log from "@/next/log"; import { savedLogs } from "@/next/log-web"; import { customAPIHost } from "@/next/origins"; @@ -34,7 +35,6 @@ import { } from "@mui/material"; import Typography from "@mui/material/Typography"; import DeleteAccountModal from "components/DeleteAccountModal"; -import { EnteDrawer } from "components/EnteDrawer"; import TwoFactorModal from "components/TwoFactor/Modal"; import { WatchFolder } from "components/WatchFolder"; import LinkButton from "components/pages/gallery/LinkButton"; diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index bb057a1dd3..4f7b251bc3 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -4,6 +4,7 @@ import { enableML, isMLEnabled, } from "@/new/photos/services/ml"; +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import log from "@/next/log"; @@ -19,7 +20,6 @@ import { Stack, Typography, } from "@mui/material"; -import { EnteDrawer } from "components/EnteDrawer"; import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/EnteDrawer.tsx b/web/packages/new/shared/components/EnteDrawer.tsx similarity index 100% rename from web/apps/photos/src/components/EnteDrawer.tsx rename to web/packages/new/shared/components/EnteDrawer.tsx diff --git a/web/packages/shared/components/EnteDrawer.tsx b/web/packages/shared/components/EnteDrawer.tsx deleted file mode 100644 index e6fc35bb15..0000000000 --- a/web/packages/shared/components/EnteDrawer.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Drawer, styled } from "@mui/material"; - -export const EnteDrawer = styled(Drawer)(({ theme }) => ({ - "& .MuiPaper-root": { - maxWidth: "375px", - width: "100%", - scrollbarWidth: "thin", - padding: theme.spacing(1), - }, -})); From 6f40cbe27e01a940a47bee7a1be054935de36780 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 12:08:22 +0530 Subject: [PATCH 380/466] Agenda --- .../src/components/ml/MLSearchSettings.tsx | 4 +- web/packages/new/photos/services/ml/index.ts | 80 +++++++++++++------ 2 files changed, 59 insertions(+), 25 deletions(-) diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 4f7b251bc3..80b09d0e81 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -1,5 +1,5 @@ import { - canEnableFaceIndexing, + canEnableML, disableML, enableML, isMLEnabled, @@ -264,7 +264,7 @@ function EnableMLSearch({ onClose, enableMlSearch, onRootClose }) { const [canEnable, setCanEnable] = useState(false); useEffect(() => { - canEnableFaceIndexing().then((v) => setCanEnable(v)); + canEnableML().then((v) => setCanEnable(v)); }, []); return ( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index f26357d48d..4c66ddf65d 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -22,13 +22,13 @@ import { MLWorker } from "./worker"; /** * In-memory flag that tracks if ML is enabled. * - * - On app start, this is read from local storage in the `initML` function. + * - On app start, this is read from local storage during {@link initML}. * * - If the user updates their preference, then `setMLEnabled` will get called * with the updated preference where this value will be updated (in addition * to updating local storage). * - * - It is cleared in `logoutML`. + * - It is cleared in {@link logoutML}. */ let _isMLEnabled = false; @@ -79,7 +79,7 @@ export const initML = () => { // ML currently only works when we're running in our desktop app. if (!isDesktop) return; // TODO-ML: Rename the isFace* flag since it now drives ML as a whole. - _isMLEnabled = isFaceIndexingEnabled(); + _isMLEnabled = isMLEnabledLocally(); }; export const logoutML = async () => { @@ -92,30 +92,40 @@ export const logoutML = async () => { }; /** - * Return true if we should show an option to the user to allow them to enable - * face search in the UI. + * Return true if we should show an UI option to the user to allow them to + * enable ML. */ -export const canEnableFaceIndexing = async () => +export const canEnableML = async () => (await isInternalUser()) || (await isBetaUser()); /** * Return true if the user has enabled machine learning in their preferences. * - * TODO-ML: The UI for this needs rework. We might retain the older remote (and - * local) storage key, but otherwise this setting now reflects the state of ML - * overall and not just face search. + * [Note: ML preferences] + * + * The user may enable ML. This enables in both locally by persisting a local + * storage flag, and sets a flag on remote so that the user's other devices can + * also enable it. + * + * The user may pause ML locally. This does not modify the remote flag, but it + * unsets the local flag. Subsequently resuming ML (locally) will set the local + * flag again. + * + * ML related operations are driven by the {@link isMLEnabled} property. This is + * true if ML is enabled locally (which implies it is also enabled on remote). */ export const isMLEnabled = () => - // Impl note: Keep it fast, the UI directly calls this multiple times. + // Implementation note: Keep it fast, the UI directly calls this many times. _isMLEnabled; /** * Enable ML. * - * Persist the user's preference and trigger a sync. + * Persist the user's preference both locally and on remote, and trigger a sync. */ export const enableML = () => { - setIsFaceIndexingEnabled(true); + // TODO-ML: API call. + setIsMLEnabledLocally(true); _isMLEnabled = true; triggerMLSync(); }; @@ -123,30 +133,54 @@ export const enableML = () => { /** * Disable ML. * - * Stop any in-progress ML tasks and persist the user's preference. + * Stop any in-progress ML tasks, and persist the user's preference both locally + * and on remote. */ export const disableML = () => { terminateMLWorker(); - setIsFaceIndexingEnabled(false); + setIsMLEnabledLocally(false); + // TODO-ML: API call. + _isMLEnabled = false; +}; + +/** + * Pause ML on this device. + * + * Stop any in-progress ML tasks, and persist the user's local preference. + */ +export const pauseML = () => { + terminateMLWorker(); + setIsMLEnabledLocally(false); _isMLEnabled = false; }; /** - * Return true if the user has enabled face indexing in the app's settings. + * Resume ML on this device. + * + * Persist the user's preference locally, and trigger a sync. + */ +export const resumeML = () => { + setIsMLEnabledLocally(true); + _isMLEnabled = true; + triggerMLSync(); +}; + +/** + * Return true if ML is enabled locally. + * + * This setting is persisted locally (in local storage). It is not synced with + * remote and only tracks if ML is enabled locally. * - * This setting is persisted locally (in local storage) and is not synced with - * remote. There is a separate setting, "faceSearchEnabled" that is synced with - * remote, but that tracks whether or not the user has enabled face search once - * on any client. This {@link isFaceIndexingEnabled} property, on the other - * hand, denotes whether or not indexing is enabled on the current client. + * The remote status is tracked with a separate {@link isMLEnabledRemote} flag + * that is synced with remote. */ -const isFaceIndexingEnabled = () => +const isMLEnabledLocally = () => localStorage.getItem("faceIndexingEnabled") == "1"; /** - * Update the (locally stored) value of {@link isFaceIndexingEnabled}. + * Update the (locally stored) value of {@link isMLEnabledLocally}. */ -const setIsFaceIndexingEnabled = (enabled: boolean) => +const setIsMLEnabledLocally = (enabled: boolean) => enabled ? localStorage.setItem("faceIndexingEnabled", "1") : localStorage.removeItem("faceIndexingEnabled"); From e1ce2e5e840b65c567e904e7fcad6ffc7720e11d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 12:22:45 +0530 Subject: [PATCH 381/466] Cont --- web/packages/new/photos/services/ml/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 4c66ddf65d..6def77972c 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -20,13 +20,12 @@ import { clearMLDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; /** - * In-memory flag that tracks if ML is enabled. + * In-memory flag that tracks if ML is enabled locally. * * - On app start, this is read from local storage during {@link initML}. * - * - If the user updates their preference, then `setMLEnabled` will get called - * with the updated preference where this value will be updated (in addition - * to updating local storage). + * - It gets updated if the user enables/disables ML (remote) or if they + * pause/resume ML (local). * * - It is cleared in {@link logoutML}. */ @@ -64,6 +63,8 @@ const createComlinkWorker = async () => { * This is useful during logout to immediately stop any background ML operations * that are in-flight for the current user. After the user logs in again, a new * {@link worker} will be created on demand for subsequent usage. + * + * It is also called when the user pauses or disables ML. */ export const terminateMLWorker = () => { if (_comlinkWorker) { @@ -78,7 +79,6 @@ export const terminateMLWorker = () => { export const initML = () => { // ML currently only works when we're running in our desktop app. if (!isDesktop) return; - // TODO-ML: Rename the isFace* flag since it now drives ML as a whole. _isMLEnabled = isMLEnabledLocally(); }; @@ -137,9 +137,9 @@ export const enableML = () => { * and on remote. */ export const disableML = () => { + // TODO-ML: API call. terminateMLWorker(); setIsMLEnabledLocally(false); - // TODO-ML: API call. _isMLEnabled = false; }; From 6d09d1f9b7a64584d6953bf93e102aec1d79acf2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 12:39:51 +0530 Subject: [PATCH 382/466] rs 1 --- .../new/photos/services/remote-store.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 web/packages/new/photos/services/remote-store.ts diff --git a/web/packages/new/photos/services/remote-store.ts b/web/packages/new/photos/services/remote-store.ts new file mode 100644 index 0000000000..d9e26dd680 --- /dev/null +++ b/web/packages/new/photos/services/remote-store.ts @@ -0,0 +1,19 @@ +import { authenticatedRequestHeaders, ensureOk } from "@/next/http"; +import { apiURL } from "@/next/origins"; +import { z } from "zod"; + +/** + * Fetch the value of a remote value for the given {@link key}. + */ +export const getRemoteValue = async (key: string) => { + const url = await apiURL("/remote-store"); + const params = new URLSearchParams({ key }); + const res = await fetch(`${url}?${params.toString()}`, { + headers: await authenticatedRequestHeaders(), + }); + ensureOk(res); + const data = GetRemoteStoreResponse.parse(await res.json()); + return data?.value; +}; + +const GetRemoteStoreResponse = z.object({ value: z.string() }).nullable(); From cfad9f841ef842821465c5cc8bf918d890b773fb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 12:53:06 +0530 Subject: [PATCH 383/466] flags --- web/packages/new/photos/services/ml/index.ts | 12 ++++++++ .../new/photos/services/remote-store.ts | 30 +++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 6def77972c..a4d129459f 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -14,6 +14,7 @@ import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { proxy } from "comlink"; +import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; import { clearMLDB, faceIndex, indexableAndIndexedCounts } from "./db"; @@ -185,6 +186,17 @@ const setIsMLEnabledLocally = (enabled: boolean) => ? localStorage.setItem("faceIndexingEnabled", "1") : localStorage.removeItem("faceIndexingEnabled"); +/** + * For historical reasons, this is called "faceSearchEnabled" (it started off as + * a flag to ensure we have taken the face recognition consent from the user). + * + * Now it tracks the status of ML in general (which includes faces + consent). + */ +const mlRemoteKey = "faceSearchEnabled"; +const getIsMLEnabledRemote = () => getRemoteFlag(mlRemoteKey); +const updateIsMLEnabledRemote = (enabled: boolean) => + updateRemoteFlag(mlRemoteKey, enabled); + /** * Trigger a "sync", whatever that means for the ML subsystem. * diff --git a/web/packages/new/photos/services/remote-store.ts b/web/packages/new/photos/services/remote-store.ts index d9e26dd680..1501c0d220 100644 --- a/web/packages/new/photos/services/remote-store.ts +++ b/web/packages/new/photos/services/remote-store.ts @@ -3,7 +3,9 @@ import { apiURL } from "@/next/origins"; import { z } from "zod"; /** - * Fetch the value of a remote value for the given {@link key}. + * Fetch the value for the given {@link key} from remote store. + * + * If the key is not present in the remote store, return `undefined`. */ export const getRemoteValue = async (key: string) => { const url = await apiURL("/remote-store"); @@ -12,8 +14,30 @@ export const getRemoteValue = async (key: string) => { headers: await authenticatedRequestHeaders(), }); ensureOk(res); - const data = GetRemoteStoreResponse.parse(await res.json()); - return data?.value; + return GetRemoteStoreResponse.parse(await res.json())?.value; }; const GetRemoteStoreResponse = z.object({ value: z.string() }).nullable(); + +/** + * Convenience wrapper over {@link getRemoteValue} that returns booleans. + */ +export const getRemoteFlag = async (key: string) => + (await getRemoteValue(key)) == "true"; + +/** + * Update or insert {@link value} for the given {@link key} into remote store. + */ +export const updateRemoteValue = async (key: string, value: string) => + ensureOk( + await fetch(await apiURL("/remote-store/update"), { + headers: await authenticatedRequestHeaders(), + body: JSON.stringify({ key, value }), + }), + ); + +/** + * Convenience wrapper over {@link updateRemoteValue} that sets booleans. + */ +export const updateRemoteFlag = (key: string, value: boolean) => + updateRemoteValue(key, JSON.stringify(value)); From c5cd6cbbca521c6ba8d48d93a8a52ea79db4fc07 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:03:25 +0530 Subject: [PATCH 384/466] Use new --- .../src/components/ml/MLSearchSettings.tsx | 21 ++++------ web/apps/photos/src/services/userService.ts | 41 ------------------- web/packages/new/photos/services/ml/index.ts | 12 +++--- 3 files changed, 15 insertions(+), 59 deletions(-) diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/apps/photos/src/components/ml/MLSearchSettings.tsx index 80b09d0e81..66eac5a578 100644 --- a/web/apps/photos/src/components/ml/MLSearchSettings.tsx +++ b/web/apps/photos/src/components/ml/MLSearchSettings.tsx @@ -2,7 +2,9 @@ import { canEnableML, disableML, enableML, + getIsMLEnabledRemote, isMLEnabled, + pauseML, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; @@ -24,10 +26,6 @@ import { t } from "i18next"; import { AppContext } from "pages/_app"; import { useContext, useEffect, useState } from "react"; import { Trans } from "react-i18next"; -import { - getFaceSearchEnabledStatus, - updateFaceSearchEnabledStatus, -} from "services/userService"; export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const { @@ -48,11 +46,11 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const enableMlSearch = async () => { try { - const hasEnabledFaceSearch = await getFaceSearchEnabledStatus(); - if (!hasEnabledFaceSearch) { + const isEnabledRemote = await getIsMLEnabledRemote(); + if (!isEnabledRemote) { openEnableFaceSearch(); } else { - enableML(); + await enableML(); } } catch (e) { log.error("Enable ML search failed", e); @@ -63,9 +61,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const enableFaceSearch = async () => { try { startLoading(); - // Update the consent flag. - await updateFaceSearchEnabledStatus(true); - enableML(); + await enableML(); closeEnableFaceSearch(); finishLoading(); } catch (e) { @@ -76,7 +72,7 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const disableMlSearch = async () => { try { - disableML(); + pauseML(); onClose(); } catch (e) { log.error("Disable ML search failed", e); @@ -87,7 +83,8 @@ export const MLSearchSettings = ({ open, onClose, onRootClose }) => { const disableFaceSearch = async () => { try { startLoading(); - await disableMlSearch(); + await disableML(); + onClose(); finishLoading(); } catch (e) { log.error("Disable face search failed", e); diff --git a/web/apps/photos/src/services/userService.ts b/web/apps/photos/src/services/userService.ts index 11da7b07c8..4c6e17e826 100644 --- a/web/apps/photos/src/services/userService.ts +++ b/web/apps/photos/src/services/userService.ts @@ -206,47 +206,6 @@ export const deleteAccount = async ( } }; -export const getFaceSearchEnabledStatus = async () => { - try { - const token = getToken(); - const resp: AxiosResponse = - await HTTPService.get( - await apiURL("/remote-store"), - { - key: "faceSearchEnabled", - defaultValue: false, - }, - { - "X-Auth-Token": token, - }, - ); - return resp.data.value === "true"; - } catch (e) { - log.error("failed to get face search enabled status", e); - throw e; - } -}; - -export const updateFaceSearchEnabledStatus = async (newStatus: boolean) => { - try { - const token = getToken(); - await HTTPService.post( - await apiURL("/remote-store/update"), - { - key: "faceSearchEnabled", - value: newStatus.toString(), - }, - null, - { - "X-Auth-Token": token, - }, - ); - } catch (e) { - log.error("failed to update face search enabled status", e); - throw e; - } -}; - export const syncMapEnabled = async () => { try { const status = await getMapEnabledStatus(); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index a4d129459f..9e6c3fdda5 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -106,7 +106,7 @@ export const canEnableML = async () => * * The user may enable ML. This enables in both locally by persisting a local * storage flag, and sets a flag on remote so that the user's other devices can - * also enable it. + * also enable it if they wish. * * The user may pause ML locally. This does not modify the remote flag, but it * unsets the local flag. Subsequently resuming ML (locally) will set the local @@ -124,8 +124,8 @@ export const isMLEnabled = () => * * Persist the user's preference both locally and on remote, and trigger a sync. */ -export const enableML = () => { - // TODO-ML: API call. +export const enableML = async () => { + await updateIsMLEnabledRemote(true); setIsMLEnabledLocally(true); _isMLEnabled = true; triggerMLSync(); @@ -137,8 +137,8 @@ export const enableML = () => { * Stop any in-progress ML tasks, and persist the user's preference both locally * and on remote. */ -export const disableML = () => { - // TODO-ML: API call. +export const disableML = async () => { + await updateIsMLEnabledRemote(false); terminateMLWorker(); setIsMLEnabledLocally(false); _isMLEnabled = false; @@ -193,7 +193,7 @@ const setIsMLEnabledLocally = (enabled: boolean) => * Now it tracks the status of ML in general (which includes faces + consent). */ const mlRemoteKey = "faceSearchEnabled"; -const getIsMLEnabledRemote = () => getRemoteFlag(mlRemoteKey); +export const getIsMLEnabledRemote = () => getRemoteFlag(mlRemoteKey); const updateIsMLEnabledRemote = (enabled: boolean) => updateRemoteFlag(mlRemoteKey, enabled); From 5c916374f312980935ad7386a6c334fe7e453256 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:04:48 +0530 Subject: [PATCH 385/466] Move --- web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx | 2 +- .../new/photos/components/MLSettings.tsx} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename web/{apps/photos/src/components/ml/MLSearchSettings.tsx => packages/new/photos/components/MLSettings.tsx} (100%) diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index c3c9134aa8..c580c6a758 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,3 +1,4 @@ +import { MLSearchSettings } from "@/new/photos/components/MLSettings"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; @@ -5,7 +6,6 @@ import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; -import { MLSearchSettings } from "components/ml/MLSearchSettings"; import { t } from "i18next"; import isElectron from "is-electron"; import { AppContext } from "pages/_app"; diff --git a/web/apps/photos/src/components/ml/MLSearchSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx similarity index 100% rename from web/apps/photos/src/components/ml/MLSearchSettings.tsx rename to web/packages/new/photos/components/MLSettings.tsx From aa6e5c923443afc14299bed1d93873e7f5335571 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:17:50 +0530 Subject: [PATCH 386/466] Start fixing lint issues --- .../components/Sidebar/AdvancedSettings.tsx | 5 ++-- .../new/photos/components/MLSettings.tsx | 26 +++++++++++++++---- web/packages/new/photos/types/context.ts | 19 ++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 web/packages/new/photos/types/context.ts diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index c580c6a758..1520845400 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,4 +1,4 @@ -import { MLSearchSettings } from "@/new/photos/components/MLSettings"; +import { MLSettings } from "@/new/photos/components/MLSettings"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; @@ -132,10 +132,11 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { - ); diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 66eac5a578..8553ac0b75 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -15,7 +15,7 @@ import { Box, Button, Checkbox, - DialogProps, + type DialogProps, FormControlLabel, FormGroup, Link, @@ -23,17 +23,33 @@ import { Typography, } from "@mui/material"; import { t } from "i18next"; -import { AppContext } from "pages/_app"; -import { useContext, useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { Trans } from "react-i18next"; +import type { NewAppContextPhotos } from "../types/context"; -export const MLSearchSettings = ({ open, onClose, onRootClose }) => { +interface MLSettingsProps { + /** If `true`, then the drawer page is shown. */ + open: boolean; + /** Called when the user wants to go back from this drawer page. */ + onClose: () => void; + /** Called when the user wants to close the containing drawer. */ + onRootClose: () => void; + /** See: [Note: Migrating components that need the app context]. */ + appContext: NewAppContextPhotos; +} + +export const MLSettings: React.FC = ({ + open, + onClose, + onRootClose, + appContext, +}) => { const { setDialogMessage, somethingWentWrong, startLoading, finishLoading, - } = useContext(AppContext); + } = appContext; const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); diff --git a/web/packages/new/photos/types/context.ts b/web/packages/new/photos/types/context.ts new file mode 100644 index 0000000000..d864717146 --- /dev/null +++ b/web/packages/new/photos/types/context.ts @@ -0,0 +1,19 @@ +import type { SetDialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; + +/** + * A subset of the AppContext type used by the photos app. + * + * [Note: Migrating components that need the app context] + * + * This only exists to make it easier to migrate code into the @/new package. + * Once we move this code back (after TypeScript strict mode migration is done), + * then the code that uses this can start directly using the actual app context + * instead of needing to explicitly pass a prop of this type. + * */ +export interface NewAppContextPhotos { + startLoading: () => void; + finishLoading: () => void; + closeMessageDialog: () => void; + setDialogMessage: SetDialogBoxAttributes; + somethingWentWrong: () => void; +} From 071a63a81c4e0472a77fcfb062f9bd19821df6c3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:27:00 +0530 Subject: [PATCH 387/466] Outer --- .../photos/src/components/Sidebar/AdvancedSettings.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 1520845400..20552ed655 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -2,6 +2,7 @@ import { MLSettings } from "@/new/photos/components/MLSettings"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; +import { pt } from "@/next/i18n"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; import ScienceIcon from "@mui/icons-material/Science"; @@ -75,9 +76,14 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { } onClick={openMlSearchSettings} - label={t("ML_SEARCH")} + label={pt("ML search")} /> + )} From 8830a60ecfcaebde544b6e80781b5bd231b3ca29 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:34:54 +0530 Subject: [PATCH 388/466] Move up --- .../components/Sidebar/AdvancedSettings.tsx | 85 +------------------ .../src/components/Sidebar/Preferences.tsx | 48 +++++++++-- .../new/photos/components/MLSettings.tsx | 47 ++++++++++ 3 files changed, 91 insertions(+), 89 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 20552ed655..5810834636 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,23 +1,14 @@ -import { MLSettings } from "@/new/photos/components/MLSettings"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; -import { pt } from "@/next/i18n"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; -import ChevronRight from "@mui/icons-material/ChevronRight"; -import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import { t } from "i18next"; -import isElectron from "is-electron"; import { AppContext } from "pages/_app"; -import { useContext, useState } from "react"; +import { useContext } from "react"; export default function AdvancedSettings({ open, onClose, onRootClose }) { const appContext = useContext(AppContext); - const [mlSearchSettingsView, setMlSearchSettingsView] = useState(false); - - const openMlSearchSettings = () => setMlSearchSettingsView(true); - const closeMlSearchSettings = () => setMlSearchSettingsView(false); const handleRootClose = () => { onClose(); @@ -36,18 +27,6 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { appContext.setIsCFProxyDisabled(!appContext.isCFProxyDisabled); }; - // TODO-ML: - // const [indexingStatus, setIndexingStatus] = useState({ - // indexed: 0, - // pending: 0, - // }); - - // useEffect(() => { - // clipService.setOnUpdateHandler(setIndexingStatus); - // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); - // return () => clipService.setOnUpdateHandler(undefined); - // }, []); - return ( - {isElectron() && ( - - } - /> - - } - onClick={openMlSearchSettings} - label={pt("ML search")} - /> - - - - )} - - {/* TODO-ML: isElectron() && ( - - - - - - {t("INDEXED_ITEMS")} - - - {formatNumber( - indexingStatus.indexed, - )} - - - - - {t("PENDING_ITEMS")} - - - {formatNumber( - indexingStatus.pending, - )} - - - - - )*/} - ); } diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index ac6e9ecb57..0889af6ecc 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -1,23 +1,35 @@ +import { MLSettings } from "@/new/photos/components/MLSettings"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; +import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; import { getLocaleInUse, + pt, setLocaleInUse, supportedLocales, type SupportedLocale, } from "@/next/i18n"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import ChevronRight from "@mui/icons-material/ChevronRight"; +import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import DropdownInput from "components/DropdownInput"; import { t } from "i18next"; -import { useState } from "react"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { useContext, useState } from "react"; import AdvancedSettings from "./AdvancedSettings"; import MapSettings from "./MapSetting"; export default function Preferences({ open, onClose, onRootClose }) { + const appContext = useContext(AppContext); + const [advancedSettingsView, setAdvancedSettingsView] = useState(false); const [mapSettingsView, setMapSettingsView] = useState(false); + const [mlSearchSettingsView, setMlSearchSettingsView] = useState(false); + + const openMlSearchSettings = () => setMlSearchSettingsView(true); + const closeMlSearchSettings = () => setMlSearchSettingsView(false); const openAdvancedSettings = () => setAdvancedSettingsView(true); const closeAdvancedSettings = () => setAdvancedSettingsView(false); @@ -66,19 +78,45 @@ export default function Preferences({ open, onClose, onRootClose }) { endIcon={} label={t("ADVANCED")} /> + {isElectron() && ( + + } + /> + + } + onClick={openMlSearchSettings} + label={pt("ML search")} + /> + + + + )} - + ); } diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 8553ac0b75..07db162c1a 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -138,6 +138,53 @@ export const MLSettings: React.FC = ({ } }; + // TODO-ML: + // const [indexingStatus, setIndexingStatus] = useState({ + // indexed: 0, + // pending: 0, + // }); + + // useEffect(() => { + // clipService.setOnUpdateHandler(setIndexingStatus); + // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); + // return () => clipService.setOnUpdateHandler(undefined); + // }, []); + /* TODO-ML: isElectron() && ( + + + + + + {t("INDEXED_ITEMS")} + + + {formatNumber( + indexingStatus.indexed, + )} + + + + + {t("PENDING_ITEMS")} + + + {formatNumber( + indexingStatus.pending, + )} + + + + + )*/ + return ( Date: Wed, 10 Jul 2024 13:40:11 +0530 Subject: [PATCH 389/466] Tweaks --- .../src/components/Sidebar/Preferences.tsx | 11 +++----- .../new/photos/components/MLSettings.tsx | 28 +++++++++---------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index 0889af6ecc..5975059af9 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -26,10 +26,7 @@ export default function Preferences({ open, onClose, onRootClose }) { const [advancedSettingsView, setAdvancedSettingsView] = useState(false); const [mapSettingsView, setMapSettingsView] = useState(false); - const [mlSearchSettingsView, setMlSearchSettingsView] = useState(false); - - const openMlSearchSettings = () => setMlSearchSettingsView(true); - const closeMlSearchSettings = () => setMlSearchSettingsView(false); + const [openMLSettings, setOpenMLSettings] = useState(false); const openAdvancedSettings = () => setAdvancedSettingsView(true); const closeAdvancedSettings = () => setAdvancedSettingsView(false); @@ -87,7 +84,7 @@ export default function Preferences({ open, onClose, onRootClose }) { } - onClick={openMlSearchSettings} + onClick={() => setOpenMLSettings(true)} label={pt("ML search")} /> @@ -102,8 +99,8 @@ export default function Preferences({ open, onClose, onRootClose }) { setOpenMLSettings(false)} onRootClose={handleRootClose} appContext={appContext} /> diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 07db162c1a..a74fe48460 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -28,7 +28,7 @@ import { Trans } from "react-i18next"; import type { NewAppContextPhotos } from "../types/context"; interface MLSettingsProps { - /** If `true`, then the drawer page is shown. */ + /** If `true`, then this drawer page is shown. */ open: boolean; /** Called when the user wants to go back from this drawer page. */ onClose: () => void; @@ -53,6 +53,19 @@ export const MLSettings: React.FC = ({ const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + const openEnableFaceSearch = () => { setEnableFaceSearchView(true); }; @@ -125,19 +138,6 @@ export const MLSettings: React.FC = ({ }); }; - const handleRootClose = () => { - onClose(); - onRootClose(); - }; - - const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { - if (reason === "backdropClick") { - handleRootClose(); - } else { - onClose(); - } - }; - // TODO-ML: // const [indexingStatus, setIndexingStatus] = useState({ // indexed: 0, From 162107b3a9b696ecf49b1beefe58e0eec71f3138 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 13:40:39 +0530 Subject: [PATCH 390/466] Fix --- web/packages/new/photos/services/remote-store.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/web/packages/new/photos/services/remote-store.ts b/web/packages/new/photos/services/remote-store.ts index 1501c0d220..ac4d6941a6 100644 --- a/web/packages/new/photos/services/remote-store.ts +++ b/web/packages/new/photos/services/remote-store.ts @@ -31,6 +31,7 @@ export const getRemoteFlag = async (key: string) => export const updateRemoteValue = async (key: string, value: string) => ensureOk( await fetch(await apiURL("/remote-store/update"), { + method: "POST", headers: await authenticatedRequestHeaders(), body: JSON.stringify({ key, value }), }), From 3b951f237f78b3b05cca8e521e780c98a651e2a1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 14:16:04 +0530 Subject: [PATCH 391/466] wip refactor --- .../new/photos/components/MLSettings.tsx | 173 +++++++++++------- 1 file changed, 109 insertions(+), 64 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index a74fe48460..33c7367cdf 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -3,13 +3,14 @@ import { disableML, enableML, getIsMLEnabledRemote, - isMLEnabled, pauseML, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; +import { pt } from "@/next/i18n"; import log from "@/next/log"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; import { Box, @@ -51,6 +52,21 @@ export const MLSettings: React.FC = ({ finishLoading, } = appContext; + /** + * The state of our component. + * + * To avoid confusion with useState, we call it status instead. */ + // TODO: This Status is not automatically synced with the lower layers that + // hold the actual state. + type Status = + | "loading" /* fetching the data we need from the lower layers */ + | "notEligible" /* user is not in the beta program */ + | "disabled" /* eligible, but ML is currently disabled */ + | "enabled" /* ML is enabled */ + | "paused"; /* ML is disabled locally, but is otherwise enabled */ + + const [status, setStatus] = useState("loading"); + const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); const handleRootClose = () => { @@ -185,6 +201,25 @@ export const MLSettings: React.FC = ({ )*/ + const components: Record = { + loading: , + disabled: ( + + ), + enabled: ( + + ), + }; + return ( = ({ sx: { "&&&": { backgroundColor: "transparent" } }, }} > - {isMLEnabled() ? ( - - ) : ( - + - )} + {components[status] ?? } + = ({ ); }; +const Loading: React.FC = () => { + return ( + + + + ); +}; +type EnableMLProps = Omit & { + /** Called when the user enables ML */ + onEnable: () => void; +}; + +const EnableML: React.FC = ({ + onClose, + enableMlSearch, + onRootClose, +}) => { + // const showDetails = () => + // openLink("https://ente.io/blog/desktop-ml-beta", true); + + const [canEnable, setCanEnable] = useState(false); + + useEffect(() => { + canEnableML().then((v) => setCanEnable(v)); + }, []); + + return ( + + + + {canEnable ? ( + + + {/* + + */} + + ) : ( + + {" "} + + {/* */} + We're putting finishing touches, coming back soon! + + + )} + + + ); +}; + function EnableFaceSearch({ open, onClose, enableFaceSearch, onRootClose }) { const [acceptTerms, setAcceptTerms] = useState(false); @@ -317,57 +413,6 @@ function EnableFaceSearch({ open, onClose, enableFaceSearch, onRootClose }) { ); } -function EnableMLSearch({ onClose, enableMlSearch, onRootClose }) { - // const showDetails = () => - // openLink("https://ente.io/blog/desktop-ml-beta", true); - - const [canEnable, setCanEnable] = useState(false); - - useEffect(() => { - canEnableML().then((v) => setCanEnable(v)); - }, []); - - return ( - - - - {canEnable ? ( - - - {/* - - */} - - ) : ( - - {" "} - - {/* */} - We're putting finishing touches, coming back soon! - - - )} - - - ); -} - function ManageMLSearch({ onClose, disableMlSearch, From 1322e5df79f70922f04d600c5a73b15ee6d5a08a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 14:23:44 +0530 Subject: [PATCH 392/466] r2 --- .../new/photos/components/MLSettings.tsx | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 33c7367cdf..0011265122 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -3,12 +3,13 @@ import { disableML, enableML, getIsMLEnabledRemote, + isMLEnabled, pauseML, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; -import { pt } from "@/next/i18n"; +import { pt, ut } from "@/next/i18n"; import log from "@/next/log"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; @@ -67,6 +68,22 @@ export const MLSettings: React.FC = ({ const [status, setStatus] = useState("loading"); + const refreshStatus = async () => { + if (isMLEnabled()) { + setStatus("enabled"); + } else if (await getIsMLEnabledRemote()) { + setStatus("paused"); + } else if (await canEnableML()) { + setStatus("disabled"); + } else { + setStatus("notEligible"); + } + }; + + useEffect(() => { + void refreshStatus(); + }, []); + const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); const handleRootClose = () => { @@ -203,6 +220,7 @@ export const MLSettings: React.FC = ({ const components: Record = { loading: , + notEligible: , disabled: ( { ); }; + +const ComingSoon: React.FC = () => { + return ( + + + {ut("We're putting finishing touches, coming back soon!")} + + + ); +}; + type EnableMLProps = Omit & { /** Called when the user enables ML */ onEnable: () => void; @@ -305,13 +334,7 @@ const EnableML: React.FC = ({ */} ) : ( - - {" "} - - {/* */} - We're putting finishing touches, coming back soon! - - +
)} From 83d6d99469b8244cb6dfbf5f165be18b6103be83 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 14:32:01 +0530 Subject: [PATCH 393/466] r3 --- .../new/photos/components/MLSettings.tsx | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 0011265122..29658df882 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -84,7 +84,7 @@ export const MLSettings: React.FC = ({ void refreshStatus(); }, []); - const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); + const [openFaceConsent, setOpenFaceConsent] = useState(false); const handleRootClose = () => { onClose(); @@ -92,11 +92,8 @@ export const MLSettings: React.FC = ({ }; const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { - if (reason === "backdropClick") { - handleRootClose(); - } else { - onClose(); - } + if (reason == "backdropClick") handleRootClose(); + else onClose(); }; const openEnableFaceSearch = () => { @@ -106,16 +103,18 @@ export const MLSettings: React.FC = ({ setEnableFaceSearchView(false); }; - const enableMlSearch = async () => { + // The user may've changed the remote flag on a different device, so in both + // cases (enable or resume), do the same flow: + // + // - If remote flag is not set, then show the consent dialog + // - Otherwise enable ML (both locally and on remote). + // + const handleEnableOrResumeML = async () => { try { - const isEnabledRemote = await getIsMLEnabledRemote(); - if (!isEnabledRemote) { - openEnableFaceSearch(); - } else { - await enableML(); - } + if (await getIsMLEnabledRemote()) await enableML(); + else setOpenFaceConsent(true); } catch (e) { - log.error("Enable ML search failed", e); + log.error("Failed to enable or resume ML", e); somethingWentWrong(); } }; @@ -224,7 +223,7 @@ export const MLSettings: React.FC = ({ disabled: ( ), @@ -288,7 +287,7 @@ const ComingSoon: React.FC = () => { }; type EnableMLProps = Omit & { - /** Called when the user enables ML */ + /** Called when the user enables ML. */ onEnable: () => void; }; From ebfd8909a947c65d1e1603a13361c52956a98784 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 14:32:36 +0530 Subject: [PATCH 394/466] Move to its final place --- .../new/photos/components/MLSettings.tsx | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 29658df882..3f38856e0e 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -170,53 +170,6 @@ export const MLSettings: React.FC = ({ }); }; - // TODO-ML: - // const [indexingStatus, setIndexingStatus] = useState({ - // indexed: 0, - // pending: 0, - // }); - - // useEffect(() => { - // clipService.setOnUpdateHandler(setIndexingStatus); - // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); - // return () => clipService.setOnUpdateHandler(undefined); - // }, []); - /* TODO-ML: isElectron() && ( - - - - - - {t("INDEXED_ITEMS")} - - - {formatNumber( - indexingStatus.indexed, - )} - - - - - {t("PENDING_ITEMS")} - - - {formatNumber( - indexingStatus.pending, - )} - - - - - )*/ - const components: Record = { loading: , notEligible: , @@ -441,6 +394,53 @@ function ManageMLSearch({ handleDisableFaceSearch, onRootClose, }) { + // TODO-ML: + // const [indexingStatus, setIndexingStatus] = useState({ + // indexed: 0, + // pending: 0, + // }); + + // useEffect(() => { + // clipService.setOnUpdateHandler(setIndexingStatus); + // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); + // return () => clipService.setOnUpdateHandler(undefined); + // }, []); + /* TODO-ML: isElectron() && ( + + + + + + {t("INDEXED_ITEMS")} + + + {formatNumber( + indexingStatus.indexed, + )} + + + + + {t("PENDING_ITEMS")} + + + {formatNumber( + indexingStatus.pending, + )} + + + + + )*/ + return ( Date: Wed, 10 Jul 2024 14:35:00 +0530 Subject: [PATCH 395/466] r4 --- .../new/photos/components/MLSettings.tsx | 53 ++++++------------- 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 3f38856e0e..f22eaf4d96 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -111,8 +111,12 @@ export const MLSettings: React.FC = ({ // const handleEnableOrResumeML = async () => { try { - if (await getIsMLEnabledRemote()) await enableML(); - else setOpenFaceConsent(true); + if (!(await getIsMLEnabledRemote())) { + setOpenFaceConsent(true); + } else { + await enableML(); + setStatus("enabled"); + } } catch (e) { log.error("Failed to enable or resume ML", e); somethingWentWrong(); @@ -239,43 +243,23 @@ const ComingSoon: React.FC = () => { ); }; -type EnableMLProps = Omit & { +interface EnableMLProps { /** Called when the user enables ML. */ onEnable: () => void; -}; +} -const EnableML: React.FC = ({ - onClose, - enableMlSearch, - onRootClose, -}) => { +const EnableML: React.FC = ({ onEnable }) => { // const showDetails = () => // openLink("https://ente.io/blog/desktop-ml-beta", true); - const [canEnable, setCanEnable] = useState(false); - - useEffect(() => { - canEnableML().then((v) => setCanEnable(v)); - }, []); - return ( - - - - {canEnable ? ( - - - {/* + + ( + + + {/* */} - - ) : ( -
- )} + ) ); }; From d7371392feaebee2319f93ff2c3e03f534c10d04 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 14:49:55 +0530 Subject: [PATCH 396/466] [docs] Improve send logs instructions --- .../photos/troubleshooting/sharing-logs.md | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/photos/troubleshooting/sharing-logs.md b/docs/docs/photos/troubleshooting/sharing-logs.md index 3015a691f8..58902f2aab 100644 --- a/docs/docs/photos/troubleshooting/sharing-logs.md +++ b/docs/docs/photos/troubleshooting/sharing-logs.md @@ -5,41 +5,41 @@ description: How to report bugs and share the logs from your Ente Photos app # Sharing debug logs -In some cases when you report a bug, our customer support might request you to -share debug logs from your app to help our developers find the issue. +In some cases when you report an issue, our customer support might request you +to share debug logs from your app to help our developers find the issue. Note that the debug logs contain potentially sensitive information like the file names, so please feel free to not share them if you have any hesitation or want to keep these private. We will try to diagnose the issue even without the logs, the logs just make the process a bit faster and easier. -### Mobile +## Mobile -To **_Report a bug_** on your mobile device, follow these steps: +- Open settings (tap on the three horizontal lines button). +- Tap on _Support_ from the settings. +- Select for the option to _Report a Bug_. +- Tap on _Report a bug_. -- Tap on the three horizontal lines to access the settings. -- Tap on **"Support"** from the settings. -- Select for the option to **"Report a Bug"**. -- Tap on **"Report a bug"** . +## Desktop -### Desktop +- Click on _Help_ menu at the top of your screen, and select the _View logs_ + option. +- Open settings (click on the three horizontal lines button located at the top + left corner of the screen). +- Click on _Support_. This will open your email client where you can attach + the logs in the email and describe the issue. -To **_Report a bug_** on the desktop app, follow these steps: +## Web -- Click on the three horizontal lines located in the top left corner of the - screen to access the settings. -- Click on **"Debug logs"** from the settings. -- Click on **Download logs**. -- Then Click on **"Support"**. -- Attach the downloaded logs in the email and describe the issue. +- Open settings (click on the three horizontal lines button located at the top + left corner of the screen). +- Click on _Debug Logs_ towards the bottom of settings. +- Click on _Download logs_ +- Click on _Support_. This will open your email client where you can attach + the logs in the email and describe the issue. -### Web +## Send email manually -To **_Report a bug_** on the web, follow these steps: - -- Click on the three horizontal lines located in the top left corner of the - screen to access the settings. -- Click on **"Debug Logs"** -- Click on **Download logs** -- Click on **"Support"** from the settings. -- Attach the downloaded logs in the email and describe the issue. +If _Report a bug_ or _Support_ doesn't automatically open your email client, you +can also directly send a mail to support@ente.io. From 70b74fc2855889b88eb8954aa64383816bd7f3d2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 15:08:09 +0530 Subject: [PATCH 397/466] Continue --- .../new/photos/components/MLSettings.tsx | 90 +++++++++++++------ 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index f22eaf4d96..668fa0ab4b 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -67,6 +67,7 @@ export const MLSettings: React.FC = ({ | "paused"; /* ML is disabled locally, but is otherwise enabled */ const [status, setStatus] = useState("loading"); + const [openFaceConsent, setOpenFaceConsent] = useState(false); const refreshStatus = async () => { if (isMLEnabled()) { @@ -84,8 +85,6 @@ export const MLSettings: React.FC = ({ void refreshStatus(); }, []); - const [openFaceConsent, setOpenFaceConsent] = useState(false); - const handleRootClose = () => { onClose(); onRootClose(); @@ -96,13 +95,6 @@ export const MLSettings: React.FC = ({ else onClose(); }; - const openEnableFaceSearch = () => { - setEnableFaceSearchView(true); - }; - const closeEnableFaceSearch = () => { - setEnableFaceSearchView(false); - }; - // The user may've changed the remote flag on a different device, so in both // cases (enable or resume), do the same flow: // @@ -110,6 +102,7 @@ export const MLSettings: React.FC = ({ // - Otherwise enable ML (both locally and on remote). // const handleEnableOrResumeML = async () => { + startLoading(); try { if (!(await getIsMLEnabledRemote())) { setOpenFaceConsent(true); @@ -120,9 +113,71 @@ export const MLSettings: React.FC = ({ } catch (e) { log.error("Failed to enable or resume ML", e); somethingWentWrong(); + } finally { + finishLoading(); + } + }; + + const handleConsent = async () => { + startLoading(); + try { + await enableML(); + setStatus("enabled"); + } catch (e) { + log.error("Failed to enable ML", e); + somethingWentWrong(); + } finally { + finishLoading(); + } + }; + + const handlePauseML = () => { + try { + pauseML(); + setStatus("paused"); + } catch (e) { + log.error("Failed to enable ML", e); + somethingWentWrong(); + } + }; + + const confirmDisableML = () => { + setDialogMessage({ + title: t("DISABLE_FACE_SEARCH_TITLE"), + content: ( + + + + ), + close: { text: t("CANCEL") }, + proceed: { + variant: "primary", + text: t("DISABLE_FACE_SEARCH"), + action: () => void didConfirmDisableML(), + }, + }); + }; + + const didConfirmDisableML = async () => { + startLoading(); + try { + await disableML(); + setStatus("disabled"); + } catch (e) { + log.error("Failed to disable ML", e); + somethingWentWrong(); + } finally { + finishLoading(); } }; + const openEnableFaceSearch = () => { + setEnableFaceSearchView(true); + }; + const closeEnableFaceSearch = () => { + setEnableFaceSearchView(false); + }; + const enableFaceSearch = async () => { try { startLoading(); @@ -157,23 +212,6 @@ export const MLSettings: React.FC = ({ } }; - const confirmDisableFaceSearch = () => { - setDialogMessage({ - title: t("DISABLE_FACE_SEARCH_TITLE"), - content: ( - - - - ), - close: { text: t("CANCEL") }, - proceed: { - variant: "primary", - text: t("DISABLE_FACE_SEARCH"), - action: disableFaceSearch, - }, - }); - }; - const components: Record = { loading: , notEligible: , From d1968e46e560093beb3f96583b32de370bab4e91 Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Wed, 10 Jul 2024 15:25:54 +0530 Subject: [PATCH 398/466] Incorporate suggestions --- docs/docs/photos/faq/security-and-privacy.md | 139 ++++++++++--------- 1 file changed, 76 insertions(+), 63 deletions(-) diff --git a/docs/docs/photos/faq/security-and-privacy.md b/docs/docs/photos/faq/security-and-privacy.md index 9dadf8bdf1..3990e2b623 100644 --- a/docs/docs/photos/faq/security-and-privacy.md +++ b/docs/docs/photos/faq/security-and-privacy.md @@ -1,73 +1,77 @@ --- -title: Security and privacy FAQ -description: - Frequently asked questions about security and privacy of Ente Photos +title: Security and Privacy FAQ +description: Comprehensive information about security and privacy measures in Ente Photos --- -# Security and privacy - -## Can Ente see my photos and videos? - -No. - -Your files are encrypted with a key before they are uploaded to our servers. - -These keys can be accessed only with your password. - -Since only you know your password, only you can decrypt your files. - -To learn more about our encryption protocol, please read about our -[architecture](https://ente.io/architecture). - -## How is my data encrypted? - -We use [libsodium](https://libsodium.gitbook.io/doc/)'s implementations -`XChaCha20` and `XSalsa20` to encrypt your data, along with `Poly1305` MAC for -authentication. - -Please refer to the document on our [architecture](https://ente.io/architecture) -for more details. - -## Where is my data stored? - -Your data is replicated to multiple providers in different countries in the EU. - -Currently we have datacenters in the following locations: - -- Amsterdam, Netherlands -- Paris, France -- Frankfurt, Germany - -Much more details about our replication and reliability are documented -[here](https://ente.io/reliability). - -## What happens if I forget my password? - -You can reset your password with your recovery key. - -If you lose both your password and your recovery key, you will not be able to -decrypt your data. - -## Can I change my password? - -Yes. - -You can change your password from any of our apps. - -Thanks to our [architecture](https://ente.io/architecture), you can do so -without having to re-encrypt any of your files. +# Security and Privacy FAQ + +Welcome to Ente Photos' Security and Privacy FAQ. This document provides +detailed information about our security practices, privacy measures, and how we +protect your data. We are committed to maintaining the highest standards of data +protection and transparency. + +## Data Encryption and Storage + +### Can Ente see my photos and videos? +No. Your files are encrypted on your device before being uploaded to our +servers. The encryption keys are derived from your password using advanced key +derivation functions. Since only you know your password, only you can decrypt +your files. For technical details, please see our [architecture +document](https://ente.io/architecture). + +### How is my data encrypted? +We use the following encryption algorithms: +- Encryption: `XChaCha20` and `XSalsa20` +- Authentication: Poly1305 message authentication code (MAC) +- Key derivation: Argon2id with high memory and computation parameters + +These algorithms are implemented using +[libsodium](https://libsodium.gitbook.io/doc/), a externally audited +cryptographic library. Our [architecture document](https://ente.io/architecture) +provides full technical specifications. + +### Where is my data stored? +Your encrypted data is stored redundantly across multiple providers in the EU: +- Amsterdam, Netherlands +- Paris, France +- Frankfurt, Germany + +We use a combination of object storage and distributed databases to ensure high +availability and durability. Our [reliability +document](https://ente.io/reliability) provides in-depth information about our +storage infrastructure and data replication strategies. + +### How does Ente's encryption compare to industry standards? +Our encryption model goes beyond industry standards. While many services use +server-side encryption, we implement end-to-end encryption. This means that even +in the unlikely event of a server breach, your data remains protected. + +## Account Security + +### What happens if I forget my password? +You can reset your password using your recovery key. This key is a randomly +generated string provided to you during account creation. Store it securely, as +it's your lifeline if you forget your password. If you lose both your password +and recovery key, we cannot recover your account or data due to our +zero-knowledge architecture. + +### Can I change my password? +Yes, you can change your password at any time from our apps. Our architecture +allows password changes without re-encrypting your entire library. The privacy of your account is a function of the strength of your password, please choose a strong one. -## Do you support 2FA? +### Do you support two-factor authentication (2FA)? +Yes, we recommend enabling 2FA for an additional layer of security. We support: +- Time-based One-Time Passwords (TOTP) +- WebAuthn/FIDO2 for hardware security keys -Yes. +You can set up 2FA in the settings of our mobile or desktop apps. -You can setup two-factor authentication from the settings screen of the mobile -app or from the side bar of our desktop app. +## Sharing and Collaboration -## How does sharing work? +### How does sharing work? The information required to decrypt an album is encrypted with the recipient's public key such that only they can decrypt them. @@ -81,22 +85,31 @@ and is never sent to our servers. Please note that only users on the paid plan are allowed to share albums. The receiver just needs a free Ente account. -## Has the Ente Photos app been audited by a credible source? +## Security Audits +## Has the Ente Photos app been audited by a credible source? Yes, Ente Photos has undergone a thorough security audit conducted by Cure53, in collaboration with Symbolic Software. Cure53 is a prominent German cybersecurity firm, while Symbolic Software specializes in applied cryptography. Please find the full report here: https://ente.io/blog/cryptography-audit/ -## How can I delete my account? +## Account Management + +### How can I delete my account? You can delete your account at any time by using the "Delete account" option in the settings. For security reasons, we request you to delete your account on your own instead of contacting support to ask them to delete your account. -Note that both Ente photos and Ente auth data will be deleted when you delete +Note that both Ente Photos and Ente Auth data will be deleted when you delete your account (irrespective of which app you delete it from) since both photos and auth use the same underlying account. To know details of how your data is deleted, including when you delete your account, please see https://ente.io/blog/how-ente-deletes-data/. + +## Additional Support + +For any security or privacy questions not covered here, please contact our team +at security@ente.io. We're committed to addressing your concerns and +continuously improving our security measures. From 2ac968fdf6ebec4cf3937be5a3c174d06cc1b3b3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 15:34:23 +0530 Subject: [PATCH 399/466] Fixed --- .../new/photos/components/MLSettings.tsx | 220 ++++++++---------- 1 file changed, 102 insertions(+), 118 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 668fa0ab4b..f30ee64b1d 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -34,7 +34,7 @@ interface MLSettingsProps { open: boolean; /** Called when the user wants to go back from this drawer page. */ onClose: () => void; - /** Called when the user wants to close the containing drawer. */ + /** Called when the user wants to close the entire stack of drawers. */ onRootClose: () => void; /** See: [Note: Migrating components that need the app context]. */ appContext: NewAppContextPhotos; @@ -63,17 +63,20 @@ export const MLSettings: React.FC = ({ | "loading" /* fetching the data we need from the lower layers */ | "notEligible" /* user is not in the beta program */ | "disabled" /* eligible, but ML is currently disabled */ - | "enabled" /* ML is enabled */ - | "paused"; /* ML is disabled locally, but is otherwise enabled */ + | "enabledOrPaused"; /* ML is enabled, but may be paused (See isPaused) */ const [status, setStatus] = useState("loading"); const [openFaceConsent, setOpenFaceConsent] = useState(false); + /** Only valid when status is "enabledOrPaused" */ + const [isPaused, setIsPaused] = useState(false); const refreshStatus = async () => { if (isMLEnabled()) { - setStatus("enabled"); + setStatus("enabledOrPaused"); + setIsPaused(false); } else if (await getIsMLEnabledRemote()) { - setStatus("paused"); + setStatus("enabledOrPaused"); + setIsPaused(true); } else if (await canEnableML()) { setStatus("disabled"); } else { @@ -108,7 +111,8 @@ export const MLSettings: React.FC = ({ setOpenFaceConsent(true); } else { await enableML(); - setStatus("enabled"); + setStatus("enabledOrPaused"); + setIsPaused(false); } } catch (e) { log.error("Failed to enable or resume ML", e); @@ -122,7 +126,10 @@ export const MLSettings: React.FC = ({ startLoading(); try { await enableML(); - setStatus("enabled"); + setStatus("enabledOrPaused"); + setIsPaused(false); + // Close the FaceConsent drawer, come back to ourselves. + setOpenFaceConsent(false); } catch (e) { log.error("Failed to enable ML", e); somethingWentWrong(); @@ -134,31 +141,15 @@ export const MLSettings: React.FC = ({ const handlePauseML = () => { try { pauseML(); - setStatus("paused"); + setStatus("enabledOrPaused"); + setIsPaused(true); } catch (e) { log.error("Failed to enable ML", e); somethingWentWrong(); } }; - const confirmDisableML = () => { - setDialogMessage({ - title: t("DISABLE_FACE_SEARCH_TITLE"), - content: ( - - - - ), - close: { text: t("CANCEL") }, - proceed: { - variant: "primary", - text: t("DISABLE_FACE_SEARCH"), - action: () => void didConfirmDisableML(), - }, - }); - }; - - const didConfirmDisableML = async () => { + const handleDisableML = async () => { startLoading(); try { await disableML(); @@ -171,63 +162,17 @@ export const MLSettings: React.FC = ({ } }; - const openEnableFaceSearch = () => { - setEnableFaceSearchView(true); - }; - const closeEnableFaceSearch = () => { - setEnableFaceSearchView(false); - }; - - const enableFaceSearch = async () => { - try { - startLoading(); - await enableML(); - closeEnableFaceSearch(); - finishLoading(); - } catch (e) { - log.error("Enable face search failed", e); - somethingWentWrong(); - } - }; - - const disableMlSearch = async () => { - try { - pauseML(); - onClose(); - } catch (e) { - log.error("Disable ML search failed", e); - somethingWentWrong(); - } - }; - - const disableFaceSearch = async () => { - try { - startLoading(); - await disableML(); - onClose(); - finishLoading(); - } catch (e) { - log.error("Disable face search failed", e); - somethingWentWrong(); - } - }; - const components: Record = { loading: , notEligible: , - disabled: ( - - ), - enabled: ( - , + enabledOrPaused: ( + ), }; @@ -249,15 +194,15 @@ export const MLSettings: React.FC = ({ title={pt("ML search")} onRootClose={onRootClose} /> - {components[status] ?? } + {components[status]} - setOpenFaceConsent(false)} onRootClose={handleRootClose} + onConsent={handleConsent} /> ); @@ -312,7 +257,17 @@ const EnableML: React.FC = ({ onEnable }) => { ); }; -function EnableFaceSearch({ open, onClose, enableFaceSearch, onRootClose }) { +type FaceConsentProps = Omit & { + /** Called when the user provides their consent. */ + onConsent: () => void; +}; + +const FaceConsent: React.FC = ({ + open, + onClose, + onRootClose, + onConsent, +}) => { const [acceptTerms, setAcceptTerms] = useState(false); useEffect(() => { @@ -325,12 +280,10 @@ function EnableFaceSearch({ open, onClose, enableFaceSearch, onRootClose }) { }; const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { - if (reason === "backdropClick") { - handleRootClose(); - } else { - onClose(); - } + if (reason == "backdropClick") handleRootClose(); + else onClose(); }; + return ( {t("ENABLE_FACE_SEARCH")} @@ -405,14 +358,45 @@ function EnableFaceSearch({ open, onClose, enableFaceSearch, onRootClose }) { ); +}; + +interface ManageMLProps { + /** `true` if ML is locally paused. */ + isPaused: boolean; + /** Called when the user wants to pause ML. */ + onPauseML: () => void; + /** Called when the user wants to resume ML. */ + onResumeML: () => void; + /** Called when the user wants to disable ML. */ + onDisableML: () => void; + /** Subset of appContext. */ + setDialogMessage: NewAppContextPhotos["setDialogMessage"]; } -function ManageMLSearch({ - onClose, - disableMlSearch, - handleDisableFaceSearch, - onRootClose, -}) { +const ManageML: React.FC = ({ + isPaused, + onPauseML, + onResumeML, + onDisableML, + setDialogMessage, +}) => { + const confirmDisableML = () => { + setDialogMessage({ + title: t("DISABLE_FACE_SEARCH_TITLE"), + content: ( + + + + ), + close: { text: t("CANCEL") }, + proceed: { + variant: "primary", + text: t("DISABLE_FACE_SEARCH"), + action: onDisableML, + }, + }); + }; + // TODO-ML: // const [indexingStatus, setIndexingStatus] = useState({ // indexed: 0, @@ -461,28 +445,28 @@ function ManageMLSearch({ )*/ return ( - - - - - + + + + {isPaused ? ( - - + ) : ( - - - - + )} + + + + + + ); -} +}; From f9b8c5287de841ecff885284d883764accfb75dd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 15:51:53 +0530 Subject: [PATCH 400/466] Work towards --- .../new/photos/components/MLSettings.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index f30ee64b1d..a316fabdf8 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -236,9 +236,13 @@ const EnableML: React.FC = ({ onEnable }) => { // openLink("https://ente.io/blog/desktop-ml-beta", true); return ( - - ( - + + + {pt( + "Enable ML (Machine Learning) for face recognition, magic search and other advanced search features", + )} + + @@ -252,7 +256,11 @@ const EnableML: React.FC = ({ onEnable }) => { */} - ) + + {pt( + 'Magic search allows to search photos by their contents (e.g. "car", "red car" or even "ferrari")', + )} + ); }; From 0f4459112ea72dd1e90bbfdd194b4d28f94ddec9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 15:59:51 +0530 Subject: [PATCH 401/466] Context --- .../new/photos/components/MLSettings.tsx | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index a316fabdf8..b52439d785 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -232,29 +232,22 @@ interface EnableMLProps { } const EnableML: React.FC = ({ onEnable }) => { - // const showDetails = () => - // openLink("https://ente.io/blog/desktop-ml-beta", true); - - return ( + const showDetails = () => 3; + /*openLink("https://ente.io/blog/desktop-ml-beta", true)*/ return ( {pt( "Enable ML (Machine Learning) for face recognition, magic search and other advanced search features", )} - + - {/* - - */} + + {pt( From 2865b33fc2ce9338934d7c75003d4a4c868c48f8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 16:01:04 +0530 Subject: [PATCH 402/466] lf --- web/packages/new/photos/components/MLSettings.tsx | 2 +- web/packages/shared/components/DialogBox/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index b52439d785..8e010d0ac6 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -240,7 +240,7 @@ const EnableML: React.FC = ({ onEnable }) => { "Enable ML (Machine Learning) for face recognition, magic search and other advanced search features", )} - + diff --git a/web/packages/shared/components/DialogBox/types.ts b/web/packages/shared/components/DialogBox/types.ts index 08b52fe4c3..944cd79017 100644 --- a/web/packages/shared/components/DialogBox/types.ts +++ b/web/packages/shared/components/DialogBox/types.ts @@ -1,4 +1,4 @@ -import { ButtonProps } from "@mui/material"; +import type { ButtonProps } from "@mui/material"; export interface DialogBoxAttributes { icon?: React.ReactNode; From d661f4ac1f3f74e95e3aaa893dbb46e0a0a082b0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 19:14:04 +0530 Subject: [PATCH 403/466] Space --- desktop/src/main/services/ml-clip.ts | 1 + desktop/src/main/services/ml-face.ts | 1 + desktop/src/main/services/ml.ts | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/desktop/src/main/services/ml-clip.ts b/desktop/src/main/services/ml-clip.ts index ae3470d2c7..cea1d667b5 100644 --- a/desktop/src/main/services/ml-clip.ts +++ b/desktop/src/main/services/ml-clip.ts @@ -3,6 +3,7 @@ * * The embeddings are computed using ONNX runtime, with CLIP as the model. */ + import Tokenizer from "clip-bpe-js"; import * as ort from "onnxruntime-node"; import log from "../log"; diff --git a/desktop/src/main/services/ml-face.ts b/desktop/src/main/services/ml-face.ts index b6fb5c90f3..33c09efaa2 100644 --- a/desktop/src/main/services/ml-face.ts +++ b/desktop/src/main/services/ml-face.ts @@ -6,6 +6,7 @@ * * The runtime used is ONNX. */ + import * as ort from "onnxruntime-node"; import log from "../log"; import { ensure } from "../utils/common"; diff --git a/desktop/src/main/services/ml.ts b/desktop/src/main/services/ml.ts index 6b38bc74dc..55bb8d79c2 100644 --- a/desktop/src/main/services/ml.ts +++ b/desktop/src/main/services/ml.ts @@ -1,5 +1,5 @@ /** - * @file AI/ML related functionality, generic layer. + * @file ML related functionality, generic layer. * * @see also `ml-clip.ts`, `ml-face.ts`. * @@ -10,6 +10,7 @@ * can use the binary ONNX runtime which is 10-20x faster than the WASM based * web one. */ + import { app, net } from "electron/main"; import { existsSync } from "fs"; import fs from "node:fs/promises"; From 10e55b67396b5456130c038204dbfa0a88671205 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 19:27:50 +0530 Subject: [PATCH 404/466] Newer --- web/apps/photos/src/components/Sidebar/index.tsx | 10 +++++----- web/apps/photos/src/utils/billing/index.ts | 4 ++-- web/apps/photos/src/utils/common/index.ts | 10 ---------- web/apps/photos/src/utils/ui/index.tsx | 4 ++-- web/packages/new/photos/components/MLSettings.tsx | 9 ++++++--- web/packages/new/photos/utils/web.ts | 15 ++++++++++++++- 6 files changed, 29 insertions(+), 23 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 3d3f9f964a..9108d29d2e 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -1,4 +1,5 @@ import { openAccountsManagePasskeysPage } from "@/accounts/services/passkey"; +import { initiateEmail, openURL } from "@/new/photos/utils/web"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import log from "@/next/log"; import { savedLogs } from "@/next/log-web"; @@ -73,7 +74,6 @@ import { isSubscriptionCancelled, isSubscriptionPastDue, } from "utils/billing"; -import { openLink } from "utils/common"; import { getDownloadAppMessage } from "utils/ui"; import { isFamilyAdmin, isPartOfFamily } from "utils/user/family"; import { testUpload } from "../../../tests/upload.test"; @@ -594,10 +594,10 @@ const HelpSection: React.FC = () => { const { setDialogMessage } = useContext(AppContext); const { openExportModal } = useContext(GalleryContext); - const openRoadmap = () => - openLink("https://github.com/ente-io/ente/discussions", true); + const requestFeature = () => + openURL("https://github.com/ente-io/ente/discussions"); - const contactSupport = () => openLink("mailto:support@ente.io", true); + const contactSupport = () => initiateEmail("support@ente.io"); function openExport() { if (isElectron()) { @@ -610,7 +610,7 @@ const HelpSection: React.FC = () => { return ( <> diff --git a/web/apps/photos/src/utils/billing/index.ts b/web/apps/photos/src/utils/billing/index.ts index 302baa97ee..2afe4f395f 100644 --- a/web/apps/photos/src/utils/billing/index.ts +++ b/web/apps/photos/src/utils/billing/index.ts @@ -1,3 +1,4 @@ +import { openURL } from "@/new/photos/utils/web"; import log from "@/next/log"; import { SetDialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; @@ -8,7 +9,6 @@ import billingService from "services/billingService"; import { Plan, Subscription } from "types/billing"; import { SetLoading } from "types/gallery"; import { BonusData, UserDetails } from "types/user"; -import { openLink } from "utils/common"; import { getSubscriptionPurchaseSuccessMessage } from "utils/ui"; import { getTotalFamilyUsage, isPartOfFamily } from "utils/user/family"; @@ -220,7 +220,7 @@ export async function manageFamilyMethod( try { setLoading(true); const familyPortalRedirectURL = getRedirectURL(REDIRECTS.FAMILIES); - openLink(familyPortalRedirectURL, true); + openURL(familyPortalRedirectURL); } catch (e) { log.error("failed to redirect to family portal", e); setDialogMessage({ diff --git a/web/apps/photos/src/utils/common/index.ts b/web/apps/photos/src/utils/common/index.ts index 9de9f54c41..91628f98c4 100644 --- a/web/apps/photos/src/utils/common/index.ts +++ b/web/apps/photos/src/utils/common/index.ts @@ -6,16 +6,6 @@ export const preloadImage = (imgBasePath: string) => { new Image().srcset = srcSet.join(","); }; -export function openLink(href: string, newTab?: boolean) { - const a = document.createElement("a"); - a.href = href; - if (newTab) { - a.target = "_blank"; - } - a.rel = "noreferrer noopener"; - a.click(); -} - export function isClipboardItemPresent() { return typeof ClipboardItem !== "undefined"; } diff --git a/web/apps/photos/src/utils/ui/index.tsx b/web/apps/photos/src/utils/ui/index.tsx index c930f47c8c..f8c0d6cb12 100644 --- a/web/apps/photos/src/utils/ui/index.tsx +++ b/web/apps/photos/src/utils/ui/index.tsx @@ -1,3 +1,4 @@ +import { openURL } from "@/new/photos/utils/web"; import { ensureElectron } from "@/next/electron"; import { AppUpdate } from "@/next/types/ipc"; import { DialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; @@ -7,7 +8,6 @@ import { Link } from "@mui/material"; import { t } from "i18next"; import { Trans } from "react-i18next"; import { Subscription } from "types/billing"; -import { openLink } from "utils/common"; export const getDownloadAppMessage = (): DialogBoxAttributes => { return { @@ -25,7 +25,7 @@ export const getDownloadAppMessage = (): DialogBoxAttributes => { }; }; -const downloadApp = () => openLink("https://ente.io/download/desktop", true); +const downloadApp = () => openURL("https://ente.io/download/desktop"); export const getTrashFilesMessage = ( deleteFileHelper, diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 8e010d0ac6..96d9be767b 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -28,6 +28,7 @@ import { t } from "i18next"; import React, { useEffect, useState } from "react"; import { Trans } from "react-i18next"; import type { NewAppContextPhotos } from "../types/context"; +import { openURL } from "../utils/web"; interface MLSettingsProps { /** If `true`, then this drawer page is shown. */ @@ -232,8 +233,10 @@ interface EnableMLProps { } const EnableML: React.FC = ({ onEnable }) => { - const showDetails = () => 3; - /*openLink("https://ente.io/blog/desktop-ml-beta", true)*/ return ( + // TODO-ML: Update link. + const moreDetails = () => openURL("https://ente.io/blog/desktop-ml-beta"); + + return ( {pt( @@ -245,7 +248,7 @@ const EnableML: React.FC = ({ onEnable }) => { {t("ENABLE")} - diff --git a/web/packages/new/photos/utils/web.ts b/web/packages/new/photos/utils/web.ts index 18f72bd61e..7236cab798 100644 --- a/web/packages/new/photos/utils/web.ts +++ b/web/packages/new/photos/utils/web.ts @@ -1,3 +1,16 @@ +/** + * Open the given {@link url} in a new browser tab. + * + * @param url The URL to open. + */ +export const openURL = (url: string) => { + const a = document.createElement("a"); + a.href = url; + a.target = "_blank"; + a.rel = "noopener"; + a.click(); +}; + /** * Open the system configured email client, initiating a new email to the given * {@link email} address. @@ -5,6 +18,6 @@ export const initiateEmail = (email: string) => { const a = document.createElement("a"); a.href = "mailto:" + email; - a.rel = "noreferrer noopener"; + a.rel = "noopener"; a.click(); }; From 9616640fce7cc60cdb92aa06c25fb2d816652291 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 19:34:46 +0530 Subject: [PATCH 405/466] Fix p nesting warning --- web/packages/new/photos/components/MLSettings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 96d9be767b..7c29c67e52 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -304,7 +304,7 @@ const FaceConsent: React.FC = ({ onRootClose={handleRootClose} /> - + Date: Wed, 10 Jul 2024 19:42:13 +0530 Subject: [PATCH 406/466] Modify --- web/packages/new/photos/components/MLSettings.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 7c29c67e52..9e0c2e0f81 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -460,14 +460,14 @@ const ManageML: React.FC = ({ ) : ( )} From b0b82aabd8bcf09c8d13c8faf866b86d844260b2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 20:03:52 +0530 Subject: [PATCH 407/466] Face => ML --- .../new/photos/components/MLSettings.tsx | 24 ++++++++++--------- web/packages/new/photos/types/context.ts | 5 ++-- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 9e0c2e0f81..5925464113 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -48,10 +48,10 @@ export const MLSettings: React.FC = ({ appContext, }) => { const { - setDialogMessage, - somethingWentWrong, startLoading, finishLoading, + setDialogBoxAttributesV2, + somethingWentWrong, } = appContext; /** @@ -169,11 +169,10 @@ export const MLSettings: React.FC = ({ disabled: , enabledOrPaused: ( ), }; @@ -374,7 +373,7 @@ interface ManageMLProps { /** Called when the user wants to disable ML. */ onDisableML: () => void; /** Subset of appContext. */ - setDialogMessage: NewAppContextPhotos["setDialogMessage"]; + setDialogBoxAttributesV2: NewAppContextPhotos["setDialogBoxAttributesV2"]; } const ManageML: React.FC = ({ @@ -382,22 +381,25 @@ const ManageML: React.FC = ({ onPauseML, onResumeML, onDisableML, - setDialogMessage, + setDialogBoxAttributesV2, }) => { const confirmDisableML = () => { - setDialogMessage({ - title: t("DISABLE_FACE_SEARCH_TITLE"), + setDialogBoxAttributesV2({ + title: pt("Disable ML search"), content: ( - + {pt( + "Do you want to disable ML search on all your devices?", + )} ), close: { text: t("CANCEL") }, proceed: { - variant: "primary", - text: t("DISABLE_FACE_SEARCH"), + variant: "critical", + text: pt("Disable"), action: onDisableML, }, + buttonDirection: "row" }); }; diff --git a/web/packages/new/photos/types/context.ts b/web/packages/new/photos/types/context.ts index d864717146..6076bc22a7 100644 --- a/web/packages/new/photos/types/context.ts +++ b/web/packages/new/photos/types/context.ts @@ -1,4 +1,4 @@ -import type { SetDialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; +import type { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; /** * A subset of the AppContext type used by the photos app. @@ -13,7 +13,6 @@ import type { SetDialogBoxAttributes } from "@ente/shared/components/DialogBox/t export interface NewAppContextPhotos { startLoading: () => void; finishLoading: () => void; - closeMessageDialog: () => void; - setDialogMessage: SetDialogBoxAttributes; + setDialogBoxAttributesV2: (attrs: DialogBoxAttributesV2) => void; somethingWentWrong: () => void; } From 44e165b8ee4eeb81c1352a3d380de7435baf9b67 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 20:24:52 +0530 Subject: [PATCH 408/466] Rework --- .../new/photos/components/MLSettings.tsx | 86 +++++++++---------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 5925464113..4baaa7a2ff 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -64,20 +64,16 @@ export const MLSettings: React.FC = ({ | "loading" /* fetching the data we need from the lower layers */ | "notEligible" /* user is not in the beta program */ | "disabled" /* eligible, but ML is currently disabled */ - | "enabledOrPaused"; /* ML is enabled, but may be paused (See isPaused) */ + | "enabled"; /* ML is enabled, but may be paused locally */ const [status, setStatus] = useState("loading"); const [openFaceConsent, setOpenFaceConsent] = useState(false); - /** Only valid when status is "enabledOrPaused" */ - const [isPaused, setIsPaused] = useState(false); + const [isEnabledLocal, setIsEnabledLocal] = useState(false); const refreshStatus = async () => { - if (isMLEnabled()) { - setStatus("enabledOrPaused"); - setIsPaused(false); - } else if (await getIsMLEnabledRemote()) { - setStatus("enabledOrPaused"); - setIsPaused(true); + if (isMLEnabled() || (await getIsMLEnabledRemote())) { + setStatus("enabled"); + setIsEnabledLocal(isMLEnabled()); } else if (await canEnableML()) { setStatus("disabled"); } else { @@ -112,8 +108,8 @@ export const MLSettings: React.FC = ({ setOpenFaceConsent(true); } else { await enableML(); - setStatus("enabledOrPaused"); - setIsPaused(false); + setStatus("enabled"); + setIsEnabledLocal(isMLEnabled()); } } catch (e) { log.error("Failed to enable or resume ML", e); @@ -127,8 +123,8 @@ export const MLSettings: React.FC = ({ startLoading(); try { await enableML(); - setStatus("enabledOrPaused"); - setIsPaused(false); + setStatus("enabled"); + setIsEnabledLocal(isMLEnabled()); // Close the FaceConsent drawer, come back to ourselves. setOpenFaceConsent(false); } catch (e) { @@ -139,13 +135,12 @@ export const MLSettings: React.FC = ({ } }; - const handlePauseML = () => { + const handleToggleLocal = async () => { try { - pauseML(); - setStatus("enabledOrPaused"); - setIsPaused(true); + isMLEnabled() ? pauseML() : await handleEnableOrResumeML(); + setIsEnabledLocal(isMLEnabled()); } catch (e) { - log.error("Failed to enable ML", e); + log.error("Failed to toggle local state of ML", e); somethingWentWrong(); } }; @@ -167,11 +162,10 @@ export const MLSettings: React.FC = ({ loading: , notEligible: , disabled: , - enabledOrPaused: ( + enabled: ( ), @@ -364,12 +358,10 @@ const FaceConsent: React.FC = ({ }; interface ManageMLProps { - /** `true` if ML is locally paused. */ - isPaused: boolean; - /** Called when the user wants to pause ML. */ - onPauseML: () => void; - /** Called when the user wants to resume ML. */ - onResumeML: () => void; + /** `true` if ML is enabled locally (in addition to remote). */ + isEnabledLocal: boolean; + /** Called when the user wants to toggle the ML status locally. */ + onToggleLocal: () => void; /** Called when the user wants to disable ML. */ onDisableML: () => void; /** Subset of appContext. */ @@ -377,9 +369,8 @@ interface ManageMLProps { } const ManageML: React.FC = ({ - isPaused, - onPauseML, - onResumeML, + isEnabledLocal, + onToggleLocal, onDisableML, setDialogBoxAttributesV2, }) => { @@ -399,7 +390,7 @@ const ManageML: React.FC = ({ text: pt("Disable"), action: onDisableML, }, - buttonDirection: "row" + buttonDirection: "row", }); }; @@ -450,28 +441,31 @@ const ManageML: React.FC = ({ )*/ + console.log("rendering", isEnabledLocal, isMLEnabled()); return ( - {isPaused ? ( - - ) : ( - - )} + - + + {/* - + */} ); From 7069e15b79a33f21c8b2d423d81b151eaff5959d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Jul 2024 20:49:19 +0530 Subject: [PATCH 409/466] Duals --- .../new/photos/components/MLSettings.tsx | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 4baaa7a2ff..a5bf59ae29 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -441,10 +441,17 @@ const ManageML: React.FC = ({ )*/ - console.log("rendering", isEnabledLocal, isMLEnabled()); return ( + + + = ({ onClick={onToggleLocal} /> - - {/* - - */} ); From 5fef9b21e59b4f3933a4c647f3b9cef530f84de2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 10:00:54 +0530 Subject: [PATCH 410/466] Template --- .../new/photos/components/MLSettings.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index a5bf59ae29..578a388399 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -21,6 +21,7 @@ import { FormControlLabel, FormGroup, Link, + Paper, Stack, Typography, } from "@mui/material"; @@ -442,8 +443,8 @@ const ManageML: React.FC = ({ )*/ return ( - - + + = ({ /> - + + + + Status + Indexing + + + Processed + 34 / 133 + + + + ); }; From 6086e139e436bb80339721b39d792857edf35270 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 10:06:52 +0530 Subject: [PATCH 411/466] Degrade gracefully --- web/packages/new/photos/components/MLSettings.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 578a388399..3502739a54 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -464,13 +464,13 @@ const ManageML: React.FC = ({ - + Status Indexing - + Processed - 34 / 133 + 33,000,000 / 13,000,000 From 6f577d150a3d9cce08b87f2732573dd03658caf3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 10:37:57 +0530 Subject: [PATCH 412/466] wip useSyncExternalStore --- .../new/photos/components/MLSettings.tsx | 19 +++++-- web/packages/new/photos/services/ml/index.ts | 52 ++++++++++++++++--- 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 3502739a54..34b1284287 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -26,7 +26,7 @@ import { Typography, } from "@mui/material"; import { t } from "i18next"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useSyncExternalStore } from "react"; import { Trans } from "react-i18next"; import type { NewAppContextPhotos } from "../types/context"; import { openURL } from "../utils/web"; @@ -375,6 +375,7 @@ const ManageML: React.FC = ({ onDisableML, setDialogBoxAttributesV2, }) => { + const status = useSyncExternalStore(); const confirmDisableML = () => { setDialogBoxAttributesV2({ title: pt("Disable ML search"), @@ -464,13 +465,23 @@ const ManageML: React.FC = ({ - + Status Indexing - + Processed - 33,000,000 / 13,000,000 + + 33,000,000 / 13,000,000 + diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 9e6c3fdda5..683b6fd8d7 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -35,6 +35,13 @@ let _isMLEnabled = false; /** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ let _comlinkWorker: ComlinkWorker | undefined; +/** + * Subscriptions to {@link MLStatus}. + * + * See {@link mlStatusSubscribe}. + */ +let _mlStatusListeners: (() => void)[] = []; + /** Lazily created, cached, instance of {@link MLWorker}. */ const worker = async () => { if (!_comlinkWorker) _comlinkWorker = await createComlinkWorker(); @@ -89,6 +96,7 @@ export const logoutML = async () => { // contexts], it gets called first in the logout sequence, and then this // function (`logoutML`) gets called at a later point in time. _isMLEnabled = false; + _mlStatusListeners = []; await clearMLDB(); }; @@ -193,7 +201,15 @@ const setIsMLEnabledLocally = (enabled: boolean) => * Now it tracks the status of ML in general (which includes faces + consent). */ const mlRemoteKey = "faceSearchEnabled"; + +/** + * Return `true` if the flag to enable ML is set on remote. + */ export const getIsMLEnabledRemote = () => getRemoteFlag(mlRemoteKey); + +/** + * Update the remote flag that tracks ML status across the user's devices. + */ const updateIsMLEnabledRemote = (enabled: boolean) => updateRemoteFlag(mlRemoteKey, enabled); @@ -234,41 +250,63 @@ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; -export interface FaceIndexingStatus { +export interface MLStatus { /** * Which phase we are in within the indexing pipeline when viewed across the * user's entire library: * + * - "paused": ML is currently paused on this device. + * * - "scheduled": There are files we know of that have not been indexed. * - * - "indexing": The face indexer is currently running. + * - "indexing": The indexer is currently running. * - * - "clustering": All files we know of have been indexed, and we are now + * - "clustering": All file we know of have been indexed, and we are now * clustering the faces that were found. * - * - "done": Face indexing and clustering is complete for the user's + * - "done": ML indexing and face clustering is complete for the user's * library. */ - phase: "scheduled" | "indexing" | "clustering" | "done"; + phase: "paused" | "scheduled" | "indexing" | "clustering" | "done"; /** The number of files that have already been indexed. */ nSyncedFiles: number; /** The total number of files that are eligible for indexing. */ nTotalFiles: number; } +/** + * A function that can be used to subscribe to updates in the ML status. + * + * This, along with {@link mlStatusSnapshot}, are meant to be used as arguments + * to React's {@link useSyncExternalStore}. + * + * @param callback A function that will be invoked whenever the result of + * {@link mlStatusSnapshot} changes. + * + * @returns A function that can be used to clear the subscription. + */ +export const mlStatusSubscribe = (onChange: () => void): (() => void) => { + _mlStatusListeners.push(onChange); + return () => { + _mlStatusListeners = _mlStatusListeners.filter((v) => v != onChange); + }; +}; + + + /** * Return the current state of the face indexing pipeline. * * Precondition: ML must be enabled. */ -export const faceIndexingStatus = async (): Promise => { +export const faceIndexingStatus = async (): Promise => { if (!isMLEnabled()) throw new Error("Cannot get indexing status when ML is not enabled"); const { indexedCount, indexableCount } = await indexableAndIndexedCounts(); const isIndexing = await (await worker()).isIndexing(); - let phase: FaceIndexingStatus["phase"]; + let phase: MLStatus["phase"]; if (indexableCount > 0) { phase = !isIndexing ? "scheduled" : "indexing"; } else { From 661d0383fbbbf339a3d4fb3edbd44f168635f30b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 10:41:37 +0530 Subject: [PATCH 413/466] Scaffold --- web/packages/new/photos/services/ml/index.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 683b6fd8d7..663541a3e0 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -42,6 +42,13 @@ let _comlinkWorker: ComlinkWorker | undefined; */ let _mlStatusListeners: (() => void)[] = []; +/** + * Snapshot of {@link MLStatus}. + * + * See {@link mlStatusSnapshot}. + */ +let _mlStatusSnapshot: MLStatus | undefined; + /** Lazily created, cached, instance of {@link MLWorker}. */ const worker = async () => { if (!_comlinkWorker) _comlinkWorker = await createComlinkWorker(); @@ -97,6 +104,7 @@ export const logoutML = async () => { // function (`logoutML`) gets called at a later point in time. _isMLEnabled = false; _mlStatusListeners = []; + _mlStatusSnapshot = undefined; await clearMLDB(); }; @@ -292,7 +300,16 @@ export const mlStatusSubscribe = (onChange: () => void): (() => void) => { }; }; +export const mlStatusSnapshot = (): MLStatus => + (_mlStatusSnapshot ??= getMLStatus()); +const getMLStatus = (): MLStatus => { + return { + phase: "paused", + nSyncedFiles: 0, + nTotalFiles: 0, + }; +}; /** * Return the current state of the face indexing pipeline. From df4364525d21562cf8a2e379ed3de09d908d89ec Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 11:00:22 +0530 Subject: [PATCH 414/466] Hook it up --- .../new/photos/components/MLSettings.tsx | 22 ++++--- web/packages/new/photos/services/ml/index.ts | 57 ++++++++++++------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 34b1284287..35c8a2585f 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -4,6 +4,8 @@ import { enableML, getIsMLEnabledRemote, isMLEnabled, + mlStatusSnapshot, + mlStatusSubscribe, pauseML, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; @@ -69,12 +71,10 @@ export const MLSettings: React.FC = ({ const [status, setStatus] = useState("loading"); const [openFaceConsent, setOpenFaceConsent] = useState(false); - const [isEnabledLocal, setIsEnabledLocal] = useState(false); const refreshStatus = async () => { if (isMLEnabled() || (await getIsMLEnabledRemote())) { setStatus("enabled"); - setIsEnabledLocal(isMLEnabled()); } else if (await canEnableML()) { setStatus("disabled"); } else { @@ -110,7 +110,6 @@ export const MLSettings: React.FC = ({ } else { await enableML(); setStatus("enabled"); - setIsEnabledLocal(isMLEnabled()); } } catch (e) { log.error("Failed to enable or resume ML", e); @@ -125,7 +124,6 @@ export const MLSettings: React.FC = ({ try { await enableML(); setStatus("enabled"); - setIsEnabledLocal(isMLEnabled()); // Close the FaceConsent drawer, come back to ourselves. setOpenFaceConsent(false); } catch (e) { @@ -139,7 +137,6 @@ export const MLSettings: React.FC = ({ const handleToggleLocal = async () => { try { isMLEnabled() ? pauseML() : await handleEnableOrResumeML(); - setIsEnabledLocal(isMLEnabled()); } catch (e) { log.error("Failed to toggle local state of ML", e); somethingWentWrong(); @@ -165,7 +162,7 @@ export const MLSettings: React.FC = ({ disabled: , enabled: ( @@ -359,8 +356,6 @@ const FaceConsent: React.FC = ({ }; interface ManageMLProps { - /** `true` if ML is enabled locally (in addition to remote). */ - isEnabledLocal: boolean; /** Called when the user wants to toggle the ML status locally. */ onToggleLocal: () => void; /** Called when the user wants to disable ML. */ @@ -370,12 +365,15 @@ interface ManageMLProps { } const ManageML: React.FC = ({ - isEnabledLocal, onToggleLocal, onDisableML, setDialogBoxAttributesV2, }) => { - const status = useSyncExternalStore(); + const { phase, nSyncedFiles, nTotalFiles } = useSyncExternalStore( + mlStatusSubscribe, + mlStatusSnapshot, + ); + const confirmDisableML = () => { setDialogBoxAttributesV2({ title: pt("Disable ML search"), @@ -458,7 +456,7 @@ const ManageML: React.FC = ({ @@ -480,7 +478,7 @@ const ManageML: React.FC = ({ > Processed - 33,000,000 / 13,000,000 + {`${nSyncedFiles} / ${nTotalFiles}`} diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 663541a3e0..a90a30c577 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -42,12 +42,25 @@ let _comlinkWorker: ComlinkWorker | undefined; */ let _mlStatusListeners: (() => void)[] = []; +/** + * Type-wise, we should''ve used undefined to indicate that we don't yet have a + * snapshot, but that would make the {@link mlStatusSnapshot} async, + * complicating its usage with React's {@link useSyncExternalStore}. + * + * So instead this value stands in for an `undefined` {@link MLStatus}. + */ +const placeholderMLStatus: MLStatus = { + phase: "paused", + nSyncedFiles: 0, + nTotalFiles: 0, +}; + /** * Snapshot of {@link MLStatus}. * * See {@link mlStatusSnapshot}. */ -let _mlStatusSnapshot: MLStatus | undefined; +let _mlStatusSnapshot = placeholderMLStatus; /** Lazily created, cached, instance of {@link MLWorker}. */ const worker = async () => { @@ -104,7 +117,7 @@ export const logoutML = async () => { // function (`logoutML`) gets called at a later point in time. _isMLEnabled = false; _mlStatusListeners = []; - _mlStatusSnapshot = undefined; + _mlStatusSnapshot = placeholderMLStatus; await clearMLDB(); }; @@ -295,39 +308,41 @@ export interface MLStatus { */ export const mlStatusSubscribe = (onChange: () => void): (() => void) => { _mlStatusListeners.push(onChange); + // Unconditionally update the snapshot. + void updateMLStatusSnapshot(); return () => { - _mlStatusListeners = _mlStatusListeners.filter((v) => v != onChange); + _mlStatusListeners = _mlStatusListeners.filter((l) => l != onChange); }; }; -export const mlStatusSnapshot = (): MLStatus => - (_mlStatusSnapshot ??= getMLStatus()); +export const mlStatusSnapshot = (): MLStatus => _mlStatusSnapshot; -const getMLStatus = (): MLStatus => { - return { - phase: "paused", - nSyncedFiles: 0, - nTotalFiles: 0, - }; +export const updateMLStatusSnapshot = async () => { + const status = await getMLStatus(); + _mlStatusSnapshot = status; + _mlStatusListeners.forEach((l) => l()); }; /** - * Return the current state of the face indexing pipeline. + * Return the current state of the ML subsystem. * - * Precondition: ML must be enabled. + * Precondition: ML must be enabled on remote, though it is fine if it is paused + * locally. */ -export const faceIndexingStatus = async (): Promise => { - if (!isMLEnabled()) - throw new Error("Cannot get indexing status when ML is not enabled"); - +export const getMLStatus = async (): Promise => { const { indexedCount, indexableCount } = await indexableAndIndexedCounts(); - const isIndexing = await (await worker()).isIndexing(); let phase: MLStatus["phase"]; - if (indexableCount > 0) { - phase = !isIndexing ? "scheduled" : "indexing"; + if (!isMLEnabled()) { + phase = "paused"; } else { - phase = "done"; + const isIndexing = await (await worker()).isIndexing(); + + if (indexableCount > 0) { + phase = !isIndexing ? "scheduled" : "indexing"; + } else { + phase = "done"; + } } return { From 2e1fde906ea34992d5548b5e87fd7ecf5579a749 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 11:15:53 +0530 Subject: [PATCH 415/466] The type annotation for _mlStatusSnapshot is required --- web/packages/new/photos/services/ml/index.ts | 53 +++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index a90a30c577..68e8c0ce0f 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -60,7 +60,7 @@ const placeholderMLStatus: MLStatus = { * * See {@link mlStatusSnapshot}. */ -let _mlStatusSnapshot = placeholderMLStatus; +let _mlStatusSnapshot: MLStatus = placeholderMLStatus; /** Lazily created, cached, instance of {@link MLWorker}. */ const worker = async () => { @@ -271,29 +271,31 @@ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; -export interface MLStatus { - /** - * Which phase we are in within the indexing pipeline when viewed across the - * user's entire library: - * - * - "paused": ML is currently paused on this device. - * - * - "scheduled": There are files we know of that have not been indexed. - * - * - "indexing": The indexer is currently running. - * - * - "clustering": All file we know of have been indexed, and we are now - * clustering the faces that were found. - * - * - "done": ML indexing and face clustering is complete for the user's - * library. - */ - phase: "paused" | "scheduled" | "indexing" | "clustering" | "done"; - /** The number of files that have already been indexed. */ - nSyncedFiles: number; - /** The total number of files that are eligible for indexing. */ - nTotalFiles: number; -} +export type MLStatus = + | { phase: "disabled" /* The ML remote flag is off */ } + | { + /** + * Which phase we are in within the indexing pipeline when viewed across the + * user's entire library: + * + * - "paused": ML is currently paused on this device. + * + * - "scheduled": There are files we know of that have not been indexed. + * + * - "indexing": The indexer is currently running. + * + * - "clustering": All file we know of have been indexed, and we are now + * clustering the faces that were found. + * + * - "done": ML indexing and face clustering is complete for the user's + * library. + */ + phase: "paused" | "scheduled" | "indexing" | "clustering" | "done"; + /** The number of files that have already been indexed. */ + nSyncedFiles: number; + /** The total number of files that are eligible for indexing. */ + nTotalFiles: number; + }; /** * A function that can be used to subscribe to updates in the ML status. @@ -334,7 +336,8 @@ export const getMLStatus = async (): Promise => { let phase: MLStatus["phase"]; if (!isMLEnabled()) { - phase = "paused"; + phase = "disabled"; + return { phase }; } else { const isIndexing = await (await worker()).isIndexing(); From 0214ccf680c07df5b22d1c3121c381804d185c7b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 11:43:49 +0530 Subject: [PATCH 416/466] Integrate --- web/packages/new/photos/services/ml/index.ts | 111 ++++++++++++------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 68e8c0ce0f..d310f1ea8e 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -30,7 +30,16 @@ import { MLWorker } from "./worker"; * * - It is cleared in {@link logoutML}. */ -let _isMLEnabled = false; +let _isMLEnabledLocal = false; + +/** + * In-memory flag that tracks if the remote flag for ML is set. + * + * - It is updated each time we sync the status with remote. + * + * - It is cleared in {@link logoutML}. + */ +let _isMLEnabledRemote: boolean | undefined; /** Cached instance of the {@link ComlinkWorker} that wraps our web worker. */ let _comlinkWorker: ComlinkWorker | undefined; @@ -42,25 +51,12 @@ let _comlinkWorker: ComlinkWorker | undefined; */ let _mlStatusListeners: (() => void)[] = []; -/** - * Type-wise, we should''ve used undefined to indicate that we don't yet have a - * snapshot, but that would make the {@link mlStatusSnapshot} async, - * complicating its usage with React's {@link useSyncExternalStore}. - * - * So instead this value stands in for an `undefined` {@link MLStatus}. - */ -const placeholderMLStatus: MLStatus = { - phase: "paused", - nSyncedFiles: 0, - nTotalFiles: 0, -}; - /** * Snapshot of {@link MLStatus}. * * See {@link mlStatusSnapshot}. */ -let _mlStatusSnapshot: MLStatus = placeholderMLStatus; +let _mlStatusSnapshot: MLStatus | undefined; /** Lazily created, cached, instance of {@link MLWorker}. */ const worker = async () => { @@ -107,7 +103,7 @@ export const terminateMLWorker = () => { export const initML = () => { // ML currently only works when we're running in our desktop app. if (!isDesktop) return; - _isMLEnabled = isMLEnabledLocally(); + _isMLEnabledLocal = isMLEnabledLocally(); }; export const logoutML = async () => { @@ -115,9 +111,10 @@ export const logoutML = async () => { // reasons mentioned in [Note: Caching IDB instances in separate execution // contexts], it gets called first in the logout sequence, and then this // function (`logoutML`) gets called at a later point in time. - _isMLEnabled = false; + _isMLEnabledLocal = false; + _isMLEnabledRemote = undefined; _mlStatusListeners = []; - _mlStatusSnapshot = placeholderMLStatus; + _mlStatusSnapshot = undefined; await clearMLDB(); }; @@ -145,8 +142,8 @@ export const canEnableML = async () => * true if ML is enabled locally (which implies it is also enabled on remote). */ export const isMLEnabled = () => - // Implementation note: Keep it fast, the UI directly calls this many times. - _isMLEnabled; + // Implementation note: Keep it fast, it might be called frequently. + _isMLEnabledLocal; /** * Enable ML. @@ -156,7 +153,9 @@ export const isMLEnabled = () => export const enableML = async () => { await updateIsMLEnabledRemote(true); setIsMLEnabledLocally(true); - _isMLEnabled = true; + _isMLEnabledRemote = true; + _isMLEnabledLocal = true; + triggerStatusUpdate(); triggerMLSync(); }; @@ -170,7 +169,9 @@ export const disableML = async () => { await updateIsMLEnabledRemote(false); terminateMLWorker(); setIsMLEnabledLocally(false); - _isMLEnabled = false; + _isMLEnabledRemote = false; + _isMLEnabledLocal = false; + triggerStatusUpdate(); }; /** @@ -181,7 +182,8 @@ export const disableML = async () => { export const pauseML = () => { terminateMLWorker(); setIsMLEnabledLocally(false); - _isMLEnabled = false; + _isMLEnabledLocal = false; + triggerStatusUpdate(); }; /** @@ -191,7 +193,8 @@ export const pauseML = () => { */ export const resumeML = () => { setIsMLEnabledLocally(true); - _isMLEnabled = true; + _isMLEnabledLocal = true; + triggerStatusUpdate(); triggerMLSync(); }; @@ -237,16 +240,25 @@ const updateIsMLEnabledRemote = (enabled: boolean) => /** * Trigger a "sync", whatever that means for the ML subsystem. * - * This is called during the global sync sequence. If ML is enabled, then we use - * this as a signal to pull embeddings from remote, and start backfilling if - * needed. + * This is called during the global sync sequence. + * + * First we check again with remote ML flag is set. If it is not set, then we + * disable ML locally too. + * + * Otherwise, and if ML is enabled locally also, then we use this as a signal to + * pull embeddings from remote, and start backfilling if needed. * * This function does not wait for these processes to run to completion, and * returns immediately. */ -export const triggerMLSync = () => { - if (!_isMLEnabled) return; - void worker().then((w) => w.sync()); +export const triggerMLSync = () => void mlSync(); + +const mlSync = async () => { + _isMLEnabledRemote = await getIsMLEnabledRemote(); + if (!_isMLEnabledRemote) _isMLEnabledLocal = false; + triggerStatusUpdate(); + + if (_isMLEnabledLocal) void worker().then((w) => w.sync()); }; /** @@ -265,7 +277,7 @@ export const triggerMLSync = () => { * image part of the live photo that was uploaded. */ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { - if (!_isMLEnabled) return; + if (!_isMLEnabledLocal) return; if (enteFile.metadata.fileType !== FILE_TYPE.IMAGE) return; log.debug(() => ["ml/liveq", { enteFile, uploadItem }]); void worker().then((w) => w.onUpload(enteFile, uploadItem)); @@ -300,7 +312,7 @@ export type MLStatus = /** * A function that can be used to subscribe to updates in the ML status. * - * This, along with {@link mlStatusSnapshot}, are meant to be used as arguments + * This, along with {@link mlStatusSnapshot}, is meant to be used as arguments * to React's {@link useSyncExternalStore}. * * @param callback A function that will be invoked whenever the result of @@ -310,18 +322,36 @@ export type MLStatus = */ export const mlStatusSubscribe = (onChange: () => void): (() => void) => { _mlStatusListeners.push(onChange); - // Unconditionally update the snapshot. - void updateMLStatusSnapshot(); return () => { _mlStatusListeners = _mlStatusListeners.filter((l) => l != onChange); }; }; -export const mlStatusSnapshot = (): MLStatus => _mlStatusSnapshot; +/** + * Return the last known, cached {@link MLStatus}. + * + * This, along with {@link mlStatusSnapshot}, is meant to be used as arguments + * to React's {@link useSyncExternalStore}. + * + * A return value of `undefined` indicates that we're still performing the + * asynchronous tasks that are needed to get the status. + */ +export const mlStatusSnapshot = (): MLStatus | undefined => { + const result = _mlStatusSnapshot; + // We don't have it yet, so start figuring it out now. + if (!result) triggerStatusUpdate(); + return result; +}; + +/** + * Trigger an asynchronous and unconditional update of the {@link MLStatus} + * snapshot. + */ +const triggerStatusUpdate = () => void updateMLStatusSnapshot(); -export const updateMLStatusSnapshot = async () => { - const status = await getMLStatus(); - _mlStatusSnapshot = status; +/** Unconditionally update of the {@link MLStatus} snapshot. */ +const updateMLStatusSnapshot = async () => { + _mlStatusSnapshot = await getMLStatus(); _mlStatusListeners.forEach((l) => l()); }; @@ -332,12 +362,13 @@ export const updateMLStatusSnapshot = async () => { * locally. */ export const getMLStatus = async (): Promise => { + if (!_isMLEnabledRemote) return { phase: "disabled" }; + const { indexedCount, indexableCount } = await indexableAndIndexedCounts(); let phase: MLStatus["phase"]; - if (!isMLEnabled()) { + if (!_isMLEnabledLocal) { phase = "disabled"; - return { phase }; } else { const isIndexing = await (await worker()).isIndexing(); From 06bf2ddad4e4b6423fb02a212ceaad3151a41e56 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 11:56:53 +0530 Subject: [PATCH 417/466] Integrate --- .../new/photos/components/MLSettings.tsx | 122 +++--------------- web/packages/new/photos/services/ml/index.ts | 2 +- 2 files changed, 20 insertions(+), 104 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 35c8a2585f..72bf56e4d2 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -1,5 +1,4 @@ import { - canEnableML, disableML, enableML, getIsMLEnabledRemote, @@ -7,11 +6,12 @@ import { mlStatusSnapshot, mlStatusSubscribe, pauseML, + type MLStatus, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; -import { pt, ut } from "@/next/i18n"; +import { pt } from "@/next/i18n"; import log from "@/next/log"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; @@ -19,13 +19,13 @@ import { Box, Button, Checkbox, - type DialogProps, FormControlLabel, FormGroup, Link, Paper, Stack, Typography, + type DialogProps, } from "@mui/material"; import { t } from "i18next"; import React, { useEffect, useState, useSyncExternalStore } from "react"; @@ -57,35 +57,9 @@ export const MLSettings: React.FC = ({ somethingWentWrong, } = appContext; - /** - * The state of our component. - * - * To avoid confusion with useState, we call it status instead. */ - // TODO: This Status is not automatically synced with the lower layers that - // hold the actual state. - type Status = - | "loading" /* fetching the data we need from the lower layers */ - | "notEligible" /* user is not in the beta program */ - | "disabled" /* eligible, but ML is currently disabled */ - | "enabled"; /* ML is enabled, but may be paused locally */ - - const [status, setStatus] = useState("loading"); + const mlStatus = useSyncExternalStore(mlStatusSubscribe, mlStatusSnapshot); const [openFaceConsent, setOpenFaceConsent] = useState(false); - const refreshStatus = async () => { - if (isMLEnabled() || (await getIsMLEnabledRemote())) { - setStatus("enabled"); - } else if (await canEnableML()) { - setStatus("disabled"); - } else { - setStatus("notEligible"); - } - }; - - useEffect(() => { - void refreshStatus(); - }, []); - const handleRootClose = () => { onClose(); onRootClose(); @@ -109,7 +83,6 @@ export const MLSettings: React.FC = ({ setOpenFaceConsent(true); } else { await enableML(); - setStatus("enabled"); } } catch (e) { log.error("Failed to enable or resume ML", e); @@ -123,7 +96,6 @@ export const MLSettings: React.FC = ({ startLoading(); try { await enableML(); - setStatus("enabled"); // Close the FaceConsent drawer, come back to ourselves. setOpenFaceConsent(false); } catch (e) { @@ -147,7 +119,6 @@ export const MLSettings: React.FC = ({ startLoading(); try { await disableML(); - setStatus("disabled"); } catch (e) { log.error("Failed to disable ML", e); somethingWentWrong(); @@ -156,18 +127,20 @@ export const MLSettings: React.FC = ({ } }; - const components: Record = { - loading: , - notEligible: , - disabled: , - enabled: ( + let component: React.ReactNode; + if (!mlStatus) { + component = ; + } else if (mlStatus.phase == "disabled") { + component = ; + } else { + component = ( - ), - }; + ); + } return ( @@ -186,7 +159,7 @@ export const MLSettings: React.FC = ({ title={pt("ML search")} onRootClose={onRootClose} /> - {components[status]} + {component} @@ -208,16 +181,6 @@ const Loading: React.FC = () => { ); }; -const ComingSoon: React.FC = () => { - return ( - - - {ut("We're putting finishing touches, coming back soon!")} - - - ); -}; - interface EnableMLProps { /** Called when the user enables ML. */ onEnable: () => void; @@ -356,6 +319,8 @@ const FaceConsent: React.FC = ({ }; interface ManageMLProps { + /** The {@link MLStatus}; a non-disabled one. */ + mlStatus: Exclude; /** Called when the user wants to toggle the ML status locally. */ onToggleLocal: () => void; /** Called when the user wants to disable ML. */ @@ -365,14 +330,12 @@ interface ManageMLProps { } const ManageML: React.FC = ({ + mlStatus, onToggleLocal, onDisableML, setDialogBoxAttributesV2, }) => { - const { phase, nSyncedFiles, nTotalFiles } = useSyncExternalStore( - mlStatusSubscribe, - mlStatusSnapshot, - ); + const { phase, nSyncedFiles, nTotalFiles } = mlStatus; const confirmDisableML = () => { setDialogBoxAttributesV2({ @@ -394,53 +357,6 @@ const ManageML: React.FC = ({ }); }; - // TODO-ML: - // const [indexingStatus, setIndexingStatus] = useState({ - // indexed: 0, - // pending: 0, - // }); - - // useEffect(() => { - // clipService.setOnUpdateHandler(setIndexingStatus); - // clipService.getIndexingStatus().then((st) => setIndexingStatus(st)); - // return () => clipService.setOnUpdateHandler(undefined); - // }, []); - /* TODO-ML: isElectron() && ( - - - - - - {t("INDEXED_ITEMS")} - - - {formatNumber( - indexingStatus.indexed, - )} - - - - - {t("PENDING_ITEMS")} - - - {formatNumber( - indexingStatus.pending, - )} - - - - - )*/ - return ( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index d310f1ea8e..c599368fc5 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -368,7 +368,7 @@ export const getMLStatus = async (): Promise => { let phase: MLStatus["phase"]; if (!_isMLEnabledLocal) { - phase = "disabled"; + phase = "paused"; } else { const isIndexing = await (await worker()).isIndexing(); From 5ff9f408eba1ff97bbbe121da0e1c0199c8df8ae Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 12:07:27 +0530 Subject: [PATCH 418/466] Touchups --- web/packages/new/photos/services/ml/index.ts | 25 +++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index c599368fc5..e0084045d1 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -3,10 +3,6 @@ */ import { FILE_TYPE } from "@/media/file-type"; -import { - isBetaUser, - isInternalUser, -} from "@/new/photos/services/feature-flags"; import type { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; import { blobCache } from "@/next/blob-cache"; @@ -97,12 +93,17 @@ export const terminateMLWorker = () => { } }; +/** Gatekeep some common entry points to catch accidental invocations. */ +const ensureDesktop = () => { + // ML currently only works when we're running in our desktop app. + if (!isDesktop) throw new Error("ML subsystem can only be used on desktop"); +}; + /** * Initialize the ML subsystem if the user has enabled it in preferences. */ export const initML = () => { - // ML currently only works when we're running in our desktop app. - if (!isDesktop) return; + ensureDesktop(); _isMLEnabledLocal = isMLEnabledLocally(); }; @@ -118,13 +119,6 @@ export const logoutML = async () => { await clearMLDB(); }; -/** - * Return true if we should show an UI option to the user to allow them to - * enable ML. - */ -export const canEnableML = async () => - (await isInternalUser()) || (await isBetaUser()); - /** * Return true if the user has enabled machine learning in their preferences. * @@ -251,7 +245,10 @@ const updateIsMLEnabledRemote = (enabled: boolean) => * This function does not wait for these processes to run to completion, and * returns immediately. */ -export const triggerMLSync = () => void mlSync(); +export const triggerMLSync = () => { + ensureDesktop(); + void mlSync(); +}; const mlSync = async () => { _isMLEnabledRemote = await getIsMLEnabledRemote(); From 52251ad6547f212bbf1988d4557249a80ae151a5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 12:30:02 +0530 Subject: [PATCH 419/466] Improve UI feedback --- .../new/photos/components/MLSettings.tsx | 54 +++++++++---------- web/packages/new/photos/services/ml/index.ts | 31 +++++++++-- 2 files changed, 55 insertions(+), 30 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 72bf56e4d2..ee3624d6fa 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -6,6 +6,7 @@ import { mlStatusSnapshot, mlStatusSubscribe, pauseML, + resumeML, type MLStatus, } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; @@ -70,13 +71,7 @@ export const MLSettings: React.FC = ({ else onClose(); }; - // The user may've changed the remote flag on a different device, so in both - // cases (enable or resume), do the same flow: - // - // - If remote flag is not set, then show the consent dialog - // - Otherwise enable ML (both locally and on remote). - // - const handleEnableOrResumeML = async () => { + const handleEnableML = async () => { startLoading(); try { if (!(await getIsMLEnabledRemote())) { @@ -106,15 +101,6 @@ export const MLSettings: React.FC = ({ } }; - const handleToggleLocal = async () => { - try { - isMLEnabled() ? pauseML() : await handleEnableOrResumeML(); - } catch (e) { - log.error("Failed to toggle local state of ML", e); - somethingWentWrong(); - } - }; - const handleDisableML = async () => { startLoading(); try { @@ -131,12 +117,11 @@ export const MLSettings: React.FC = ({ if (!mlStatus) { component = ; } else if (mlStatus.phase == "disabled") { - component = ; + component = ; } else { component = ( ); @@ -321,8 +306,6 @@ const FaceConsent: React.FC = ({ interface ManageMLProps { /** The {@link MLStatus}; a non-disabled one. */ mlStatus: Exclude; - /** Called when the user wants to toggle the ML status locally. */ - onToggleLocal: () => void; /** Called when the user wants to disable ML. */ onDisableML: () => void; /** Subset of appContext. */ @@ -331,12 +314,31 @@ interface ManageMLProps { const ManageML: React.FC = ({ mlStatus, - onToggleLocal, onDisableML, setDialogBoxAttributesV2, }) => { const { phase, nSyncedFiles, nTotalFiles } = mlStatus; + let status: string; + switch (phase) { + case "paused": + status = pt("Paused"); + break; + case "indexing": + status = pt("Indexing"); + break; + case "scheduled": + status = pt("Scheduled"); + break; + // TODO: Clustering + default: + status = pt("Done"); + break; + } + const processed = `${nSyncedFiles} / ${nTotalFiles}`; + + const handleToggleLocal = () => (isMLEnabled() ? pauseML() : resumeML()); + const confirmDisableML = () => { setDialogBoxAttributesV2({ title: pt("Disable ML search"), @@ -373,19 +375,19 @@ const ManageML: React.FC = ({ label={pt("On this device")} variant="toggle" checked={phase != "paused"} - onClick={onToggleLocal} + onClick={handleToggleLocal} /> - + Status - Indexing + {status} = ({ justifyContent={"space-between"} > Processed - - {`${nSyncedFiles} / ${nTotalFiles}`} - + {processed} diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index e0084045d1..f5a501151d 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -149,6 +149,7 @@ export const enableML = async () => { setIsMLEnabledLocally(true); _isMLEnabledRemote = true; _isMLEnabledLocal = true; + setInterimScheduledStatus(); triggerStatusUpdate(); triggerMLSync(); }; @@ -188,6 +189,7 @@ export const pauseML = () => { export const resumeML = () => { setIsMLEnabledLocally(true); _isMLEnabledLocal = true; + setInterimScheduledStatus(); triggerStatusUpdate(); triggerMLSync(); }; @@ -347,8 +349,11 @@ export const mlStatusSnapshot = (): MLStatus | undefined => { const triggerStatusUpdate = () => void updateMLStatusSnapshot(); /** Unconditionally update of the {@link MLStatus} snapshot. */ -const updateMLStatusSnapshot = async () => { - _mlStatusSnapshot = await getMLStatus(); +const updateMLStatusSnapshot = async () => + setMLStatusSnapshot(await getMLStatus()); + +const setMLStatusSnapshot = (snapshot: MLStatus) => { + _mlStatusSnapshot = snapshot; _mlStatusListeners.forEach((l) => l()); }; @@ -358,7 +363,7 @@ const updateMLStatusSnapshot = async () => { * Precondition: ML must be enabled on remote, though it is fine if it is paused * locally. */ -export const getMLStatus = async (): Promise => { +const getMLStatus = async (): Promise => { if (!_isMLEnabledRemote) return { phase: "disabled" }; const { indexedCount, indexableCount } = await indexableAndIndexedCounts(); @@ -383,6 +388,26 @@ export const getMLStatus = async (): Promise => { }; }; +/** + * When the user enables or resumes ML, we wish to give immediate feedback. + * + * So this is an intermediate state with possibly incorrect counts (but correct + * phase) that is set immediately to trigger a UI update. It uses the counts + * from the last known status, just updates the phase. + * + * Once the worker is initialized and the correct counts fetched, this will + * update to the correct state (should take less than one second). + */ +const setInterimScheduledStatus = () => { + let nSyncedFiles = 0, + nTotalFiles = 0; + if (_mlStatusSnapshot && _mlStatusSnapshot.phase != "disabled") { + nSyncedFiles = _mlStatusSnapshot.nSyncedFiles; + nTotalFiles = _mlStatusSnapshot.nTotalFiles; + } + setMLStatusSnapshot({ phase: "scheduled", nSyncedFiles, nTotalFiles }); +}; + /** * Return the IDs of all the faces in the given {@link enteFile} that are not * associated with a person cluster. From b402c6ae32aa74bde899bb28a8432ca0425242d2 Mon Sep 17 00:00:00 2001 From: Victor Muthiani <121645908+Vantesh@users.noreply.github.com> Date: Thu, 11 Jul 2024 10:13:59 +0300 Subject: [PATCH 420/466] [Auth] Add 2 new icons and optimize 2 icons (#2411) ## Description New icons: - Deriv - Airtm Optimized icons - Yahoo - Bitget --- .../custom-icons/_data/custom-icons.json | 7 +++++++ auth/assets/custom-icons/icons/airtm.svg | 1 + auth/assets/custom-icons/icons/bitget.svg | 19 +------------------ auth/assets/custom-icons/icons/deriv.svg | 1 + auth/assets/custom-icons/icons/yahoo.svg | 2 +- 5 files changed, 11 insertions(+), 19 deletions(-) create mode 100644 auth/assets/custom-icons/icons/airtm.svg create mode 100644 auth/assets/custom-icons/icons/deriv.svg diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index 171ef0dd72..a6019b5a6e 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -14,6 +14,10 @@ { "title": "Airtable" }, + { + "title": "airtm" + "hex": "000000" + }, { "title": "Anycoin Direct", "slug": "anycoindirect" @@ -115,6 +119,9 @@ }, { "title": "DEGIRO" + }, + { + "title": "deriv" }, { "title": "DirectAdmin" diff --git a/auth/assets/custom-icons/icons/airtm.svg b/auth/assets/custom-icons/icons/airtm.svg new file mode 100644 index 0000000000..bfef999bac --- /dev/null +++ b/auth/assets/custom-icons/icons/airtm.svg @@ -0,0 +1 @@ + diff --git a/auth/assets/custom-icons/icons/bitget.svg b/auth/assets/custom-icons/icons/bitget.svg index 19b60c978a..845282f0e2 100644 --- a/auth/assets/custom-icons/icons/bitget.svg +++ b/auth/assets/custom-icons/icons/bitget.svg @@ -1,18 +1 @@ - - - - - - - - - - - - - - - - - - + diff --git a/auth/assets/custom-icons/icons/deriv.svg b/auth/assets/custom-icons/icons/deriv.svg new file mode 100644 index 0000000000..41581a265d --- /dev/null +++ b/auth/assets/custom-icons/icons/deriv.svg @@ -0,0 +1 @@ + diff --git a/auth/assets/custom-icons/icons/yahoo.svg b/auth/assets/custom-icons/icons/yahoo.svg index 182be51925..38885c8bb1 100644 --- a/auth/assets/custom-icons/icons/yahoo.svg +++ b/auth/assets/custom-icons/icons/yahoo.svg @@ -1 +1 @@ - + From 6ccb61b425a6cdc25bfec98472c087210753e2f5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 13:40:57 +0530 Subject: [PATCH 421/466] Enhance --- .../new/photos/components/MLSettings.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index ee3624d6fa..3adb4b6a0b 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -20,6 +20,7 @@ import { Box, Button, Checkbox, + Divider, FormControlLabel, FormGroup, Link, @@ -380,21 +381,32 @@ const ManageML: React.FC = ({ - + - Status + + {pt("Status")} + {status} + - Processed + + {pt("Processed")} + {processed} From 8dad88eca6e571ec6aa08c5e3886b24c7f2dec12 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 13:43:04 +0530 Subject: [PATCH 422/466] Disable ripples on the background item for toggles --- web/packages/shared/components/Menu/EnteMenuItem.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/web/packages/shared/components/Menu/EnteMenuItem.tsx b/web/packages/shared/components/Menu/EnteMenuItem.tsx index 042348482b..ba52e78701 100644 --- a/web/packages/shared/components/Menu/EnteMenuItem.tsx +++ b/web/packages/shared/components/Menu/EnteMenuItem.tsx @@ -72,6 +72,7 @@ export function EnteMenuItem({ From 62e4a6c344546555a6de8747e4587bff6ad5ffc0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 13:50:22 +0530 Subject: [PATCH 423/466] Dot product --- web/packages/new/photos/services/ml/clip.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 22fd05ec80..91a0270dc8 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -3,7 +3,7 @@ import type { Electron } from "@/next/types/ipc"; import type { ImageBitmapAndData } from "./bitmap"; import { clipIndexes } from "./db"; import { pixelRGBBicubic } from "./image"; -import { cosineSimilarity, norm } from "./math"; +import { dotProduct, norm } from "./math"; import type { MLWorkerElectron } from "./worker-electron"; /** @@ -202,7 +202,12 @@ export const clipMatches = async ( const textEmbedding = normalized(t); const items = (await clipIndexes()).map( ({ fileID, embedding }) => - [fileID, cosineSimilarity(embedding, textEmbedding)] as const, + // What we want to do is `cosineSimilarity`, but since both the + // embeddings involved are already normalized, we can save the norm + // calculations and directly do their `dotProduct`. + // + // This code is on the hot path, so these optimizations help. + [fileID, dotProduct(embedding, textEmbedding)] as const, ); return new Map(items.filter(([, score]) => score >= 0.23)); }; From 13c042f692f8ed6eef106d6ba2308b9882dc7cc4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 13:53:27 +0530 Subject: [PATCH 424/466] Remove scaffolding code --- web/packages/new/photos/services/ml/bitmap.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/web/packages/new/photos/services/ml/bitmap.ts b/web/packages/new/photos/services/ml/bitmap.ts index 3772385425..fe3fc7da4e 100644 --- a/web/packages/new/photos/services/ml/bitmap.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -35,22 +35,14 @@ export const imageBitmapAndData = async ( ? await renderableUploadItemImageBitmap(enteFile, uploadItem, electron) : await renderableImageBitmap(enteFile); - // Use an OffscreenCanvas to get the bitmap's data. - const { width, height } = imageBitmap; + // Use an OffscreenCanvas to get the bitmap's data. const offscreenCanvas = new OffscreenCanvas(width, height); const ctx = ensure(offscreenCanvas.getContext("2d")); ctx.drawImage(imageBitmap, 0, 0, width, height); const imageData = ctx.getImageData(0, 0, width, height); - // TODO-ML: This check isn't needed, keeping it around during scaffolding. - if ( - imageBitmap.width != imageData.width || - imageBitmap.height != imageData.height - ) - throw new Error("Dimension mismatch"); - return { bitmap: imageBitmap, data: imageData }; }; From b25dbfc10b7d453bf83d757555666646e073290e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:02:55 +0530 Subject: [PATCH 425/466] wip separate flag --- .../src/components/Sidebar/Preferences.tsx | 4 ++-- web/apps/photos/src/pages/_app.tsx | 4 ++-- web/apps/photos/src/services/searchService.ts | 23 +++++++++---------- web/apps/photos/src/services/sync.ts | 7 ++---- web/packages/new/photos/services/ml/index.ts | 21 ++++++++--------- 5 files changed, 26 insertions(+), 33 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/Preferences.tsx b/web/apps/photos/src/components/Sidebar/Preferences.tsx index 5975059af9..32c36f991c 100644 --- a/web/apps/photos/src/components/Sidebar/Preferences.tsx +++ b/web/apps/photos/src/components/Sidebar/Preferences.tsx @@ -1,4 +1,5 @@ import { MLSettings } from "@/new/photos/components/MLSettings"; +import { isMLSupported } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; @@ -15,7 +16,6 @@ import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import DropdownInput from "components/DropdownInput"; import { t } from "i18next"; -import isElectron from "is-electron"; import { AppContext } from "pages/_app"; import { useContext, useState } from "react"; import AdvancedSettings from "./AdvancedSettings"; @@ -75,7 +75,7 @@ export default function Preferences({ open, onClose, onRootClose }) { endIcon={} label={t("ADVANCED")} /> - {isElectron() && ( + {isMLSupported && ( { return [ - // TODO-ML(MR): Skip this for now if indexing is disabled (eventually - // the indexing status should not be tied to results). - ...(isMLEnabled() ? [await getIndexStatusSuggestion()] : []), + ...(await getMLStatusSuggestion()), ...(await convertSuggestionsToOptions(await getAllPeopleSuggestion())), ].filter((t) => !!t); }; @@ -171,32 +169,33 @@ export async function getAllPeopleSuggestion(): Promise> { } } -export async function getIndexStatusSuggestion(): Promise { - try { - const indexStatus = await faceIndexingStatus(); +export async function getMLStatusSuggestion(): Promise { + const status = await mlStatusSnapshot(); + isMLEnabled(); + try { let label: string; - switch (indexStatus.phase) { + switch (status.phase) { case "scheduled": label = t("INDEXING_SCHEDULED"); break; case "indexing": label = t("ANALYZING_PHOTOS", { - indexStatus, + indexStatus: status, }); break; case "clustering": - label = t("INDEXING_PEOPLE", { indexStatus }); + label = t("INDEXING_PEOPLE", { indexStatus: status }); break; case "done": - label = t("INDEXING_DONE", { indexStatus }); + label = t("INDEXING_DONE", { indexStatus: status }); break; } return { label, type: SuggestionType.INDEX_STATUS, - value: indexStatus, + value: status, hide: true, }; } catch (e) { diff --git a/web/apps/photos/src/services/sync.ts b/web/apps/photos/src/services/sync.ts index b628a3510d..5ebc5b43b0 100644 --- a/web/apps/photos/src/services/sync.ts +++ b/web/apps/photos/src/services/sync.ts @@ -1,6 +1,5 @@ import { fetchAndSaveFeatureFlagsIfNeeded } from "@/new/photos/services/feature-flags"; -import { triggerMLSync } from "@/new/photos/services/ml"; -import { isDesktop } from "@/next/app"; +import { isMLSupported, triggerMLSync } from "@/new/photos/services/ml"; import { syncEntities } from "services/entityService"; import { syncMapEnabled } from "services/userService"; @@ -17,7 +16,5 @@ export const sync = async () => { await syncEntities(); await syncMapEnabled(); fetchAndSaveFeatureFlagsIfNeeded(); - if (isDesktop) { - triggerMLSync(); - } + if (isMLSupported) triggerMLSync(); }; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index f5a501151d..8ac088253d 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -93,17 +93,17 @@ export const terminateMLWorker = () => { } }; -/** Gatekeep some common entry points to catch accidental invocations. */ -const ensureDesktop = () => { - // ML currently only works when we're running in our desktop app. - if (!isDesktop) throw new Error("ML subsystem can only be used on desktop"); -}; +/** + * Return true if the current client supports ML. + * + * ML currently only works when we're running in our desktop app. + */ +export const isMLSupported = isDesktop; /** * Initialize the ML subsystem if the user has enabled it in preferences. */ export const initML = () => { - ensureDesktop(); _isMLEnabledLocal = isMLEnabledLocally(); }; @@ -247,10 +247,7 @@ const updateIsMLEnabledRemote = (enabled: boolean) => * This function does not wait for these processes to run to completion, and * returns immediately. */ -export const triggerMLSync = () => { - ensureDesktop(); - void mlSync(); -}; +export const triggerMLSync = () => void mlSync(); const mlSync = async () => { _isMLEnabledRemote = await getIsMLEnabledRemote(); @@ -337,8 +334,8 @@ export const mlStatusSubscribe = (onChange: () => void): (() => void) => { */ export const mlStatusSnapshot = (): MLStatus | undefined => { const result = _mlStatusSnapshot; - // We don't have it yet, so start figuring it out now. - if (!result) triggerStatusUpdate(); + // We don't have it yet but we're on a supported client, trigger an update. + if (!result && isDesktop) triggerStatusUpdate(); return result; }; From a3dc69188554557ce147107a7c3847ea9eeb464b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:12:44 +0530 Subject: [PATCH 426/466] Use in search bar --- web/apps/photos/src/services/searchService.ts | 62 +++++++++---------- web/packages/new/photos/services/ml/index.ts | 4 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 42b35c57a9..fc89877759 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -1,5 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; -import { mlStatusSnapshot } from "@/new/photos/services/ml"; +import { isMLSupported, mlStatusSnapshot } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { isDesktop } from "@/next/app"; @@ -26,7 +26,7 @@ const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]); export const getDefaultOptions = async () => { return [ - ...(await getMLStatusSuggestion()), + await getMLStatusSuggestion(), ...(await convertSuggestionsToOptions(await getAllPeopleSuggestion())), ].filter((t) => !!t); }; @@ -169,38 +169,38 @@ export async function getAllPeopleSuggestion(): Promise> { } } -export async function getMLStatusSuggestion(): Promise { - const status = await mlStatusSnapshot(); +export async function getMLStatusSuggestion(): Promise { + if (!isMLSupported) return undefined; - isMLEnabled(); - try { - let label: string; - switch (status.phase) { - case "scheduled": - label = t("INDEXING_SCHEDULED"); - break; - case "indexing": - label = t("ANALYZING_PHOTOS", { - indexStatus: status, - }); - break; - case "clustering": - label = t("INDEXING_PEOPLE", { indexStatus: status }); - break; - case "done": - label = t("INDEXING_DONE", { indexStatus: status }); - break; - } + const status = mlStatusSnapshot(); - return { - label, - type: SuggestionType.INDEX_STATUS, - value: status, - hide: true, - }; - } catch (e) { - log.error("getIndexStatusSuggestion failed", e); + if (!status || status.phase == "disabled" || status.phase == "paused") + return undefined; + + let label: string; + switch (status.phase) { + case "scheduled": + label = t("INDEXING_SCHEDULED"); + break; + case "indexing": + label = t("ANALYZING_PHOTOS", { + indexStatus: status, + }); + break; + case "clustering": + label = t("INDEXING_PEOPLE", { indexStatus: status }); + break; + case "done": + label = t("INDEXING_DONE", { indexStatus: status }); + break; } + + return { + label, + type: SuggestionType.INDEX_STATUS, + value: status, + hide: true, + }; } function getDateSuggestion(searchPhrase: string): Suggestion[] { diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 8ac088253d..3152980886 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -334,8 +334,8 @@ export const mlStatusSubscribe = (onChange: () => void): (() => void) => { */ export const mlStatusSnapshot = (): MLStatus | undefined => { const result = _mlStatusSnapshot; - // We don't have it yet but we're on a supported client, trigger an update. - if (!result && isDesktop) triggerStatusUpdate(); + // We don't have it yet, trigger an update. + if (!result) triggerStatusUpdate(); return result; }; From 73ad758191a10a305011651964e0065366f6ed84 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:18:10 +0530 Subject: [PATCH 427/466] Fix --- web/packages/new/photos/components/PeopleList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 39361f8741..5c13aa9c55 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -108,7 +108,7 @@ export const UnidentifiedFaces: React.FC = ({ return ( <> - + {t("UNIDENTIFIED_FACES")} From fdcc6b6997159a933e4f6f708713359b25b06505 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:19:03 +0530 Subject: [PATCH 428/466] Tweak and lint --- web/apps/photos/src/services/searchService.ts | 4 +--- web/apps/photos/src/types/search/index.ts | 4 ++-- web/packages/new/photos/services/ml/clip.ts | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index fc89877759..acf12a1e94 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -183,9 +183,7 @@ export async function getMLStatusSuggestion(): Promise { label = t("INDEXING_SCHEDULED"); break; case "indexing": - label = t("ANALYZING_PHOTOS", { - indexStatus: status, - }); + label = t("ANALYZING_PHOTOS", { indexStatus: status }); break; case "clustering": label = t("INDEXING_PEOPLE", { indexStatus: status }); diff --git a/web/apps/photos/src/types/search/index.ts b/web/apps/photos/src/types/search/index.ts index 575cb0a9c7..130471ae76 100644 --- a/web/apps/photos/src/types/search/index.ts +++ b/web/apps/photos/src/types/search/index.ts @@ -1,5 +1,5 @@ import { FILE_TYPE } from "@/media/file-type"; -import type { FaceIndexingStatus } from "@/new/photos/services/ml"; +import type { MLStatus } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import { EnteFile } from "@/new/photos/types/file"; import { City } from "services/locationSearchService"; @@ -31,7 +31,7 @@ export interface Suggestion { | DateValue | number[] | Person - | FaceIndexingStatus + | MLStatus | LocationTagData | City | FILE_TYPE diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 91a0270dc8..0726929e2a 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -26,7 +26,7 @@ export const clipIndexingVersion = 1; * trained) encoders - one for images, and one for text - that both map to the * same embedding space. * - * We use this for natural language search within the app: + * We use this for natural language search (aka "magic search") within the app: * * 1. Pre-compute an embedding for each image. * From 544a5a9ccc908b9e7c6ddc43ec042c12617e1cb3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:39:45 +0530 Subject: [PATCH 429/466] Use consistent key --- desktop/src/main.ts | 2 +- desktop/src/main/services/upload.ts | 2 +- web/apps/accounts/src/pages/_app.tsx | 6 ++++-- web/packages/new/photos/components/DevSettings.tsx | 14 ++++++++++---- web/packages/new/photos/services/ml/db.ts | 8 ++++---- web/packages/next/i18n.ts | 2 +- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index be5721ed0e..2622d09a6e 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -537,7 +537,7 @@ const setupTrayItem = (mainWindow: BrowserWindow) => { * old cache dir if it exists. * * Added May 2024, v1.7.0. This migration code can be removed after some time - * once most people have upgraded to newer versions. + * once most people have upgraded to newer versions (tag: Migration). */ const deleteLegacyDiskCacheDirIfExists = async () => { const removeIfExists = async (dirPath: string) => { diff --git a/desktop/src/main/services/upload.ts b/desktop/src/main/services/upload.ts index 3da9cafd7c..a7e3fc8671 100644 --- a/desktop/src/main/services/upload.ts +++ b/desktop/src/main/services/upload.ts @@ -58,7 +58,7 @@ export const pendingUploads = async (): Promise => { const allZipItems = uploadStatusStore.get("zipItems"); let zipItems: typeof allZipItems; - // Migration code - May 2024. Remove after a bit. + // Migration code - May 2024. Remove after a bit (tag: Migration). // // The older store formats will not have zipItems and instead will have // zipPaths. If we find such a case, read the zipPaths and enqueue all of diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 7029cacd86..2cf427b918 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -33,8 +33,10 @@ const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { disableDiskLogs(); // The accounts app has no local state, but some older builds might've - // leftover some scraps. Clear it out. This code added 1 July 2024, can - // be removed after a while (tag: Migration). + // leftover some scraps. Clear it out. + // + // This code added on 1 July 2024, can be removed soon since this data + // was never saved before this was released (tag: Migration). clearData(); void setupI18n().finally(() => setIsI18nReady(true)); logUnhandledErrorsAndRejections(true); diff --git a/web/packages/new/photos/components/DevSettings.tsx b/web/packages/new/photos/components/DevSettings.tsx index 84c71b09c5..7919314068 100644 --- a/web/packages/new/photos/components/DevSettings.tsx +++ b/web/packages/new/photos/components/DevSettings.tsx @@ -71,8 +71,11 @@ const Contents: React.FC = (props) => { () => void getKV("apiOrigin").then((o) => setInitialAPIOrigin( - // TODO: Migration of apiOrigin from local storage to indexed DB - // Remove me after a bit (27 June 2024). + // Migrate apiOrigin from local storage to indexed DB. + // + // This code was added 27 June 2024. Note that the legacy + // value was never in production builds, only nightlies, so + // this code can be removed soon (tag: Migration). o ?? localStorage.getItem("apiOrigin") ?? "", ), ), @@ -215,8 +218,11 @@ const Form: React.FC = ({ initialAPIOrigin, onClose }) => { const updateAPIOrigin = async (origin: string) => { if (!origin) { await removeKV("apiOrigin"); - // TODO: Migration of apiOrigin from local storage to indexed DB - // Remove me after a bit (27 June 2024). + // Migrate apiOrigin from local storage to indexed DB. + // + // This code was added 27 June 2024. Note that the legacy value was + // never in production builds, only nightlies, so this code can be + // removed at some point soon (tag: Migration). localStorage.removeItem("apiOrigin"); return; } diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 9e4f9cf90b..51ca2f749b 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -135,14 +135,14 @@ const openMLDB = async () => { const deleteLegacyDB = () => { // Delete the legacy face DB v1. // - // This code was added June 2024 (v1.7.1-rc) and can be removed once clients - // have migrated over. + // This code was added June 2024 (v1.7.1-rc) and can be removed at some + // point when most clients have migrated (tag: Migration). void deleteDB("mldata"); // Delete the legacy CLIP (mostly) related keys from LocalForage. // - // This code was added July 2024 (v1.7.2-rc) and can be removed once - // sufficient clients have migrated over (tag: Migration). + // This code was added July 2024 (v1.7.2-rc) and can be removed at some + // point when most clients have migrated (tag: Migration). void Promise.all([ localForage.removeItem("embeddings"), localForage.removeItem("embedding_sync_time"), diff --git a/web/packages/next/i18n.ts b/web/packages/next/i18n.ts index cec28add94..9cd5293832 100644 --- a/web/packages/next/i18n.ts +++ b/web/packages/next/i18n.ts @@ -136,7 +136,7 @@ const savedLocaleStringMigratingIfNeeded = (): SupportedLocale | undefined => { // This migration is dated Feb 2024. And it can be removed after a few // months, because by then either customers would've opened the app and // their setting migrated to the new format, or the browser would've cleared - // the older local storage entry anyway. + // the older local storage entry anyway (tag: Migration). if (!ls) { // Nothing found From 936e0470e63fae6c26cd9e2b81689e43c4d356cd Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 14:56:55 +0530 Subject: [PATCH 430/466] Live update --- web/packages/new/photos/services/ml/bitmap.ts | 2 +- web/packages/new/photos/services/ml/clip.ts | 2 +- web/packages/new/photos/services/ml/face.ts | 2 +- web/packages/new/photos/services/ml/index.ts | 9 ++++++++- .../ml/{worker-electron.ts => worker-types.ts} | 18 ++++++++++++++++++ web/packages/new/photos/services/ml/worker.ts | 12 ++++++++++-- web/packages/new/photos/utils/native-stream.ts | 2 +- 7 files changed, 40 insertions(+), 7 deletions(-) rename web/packages/new/photos/services/ml/{worker-electron.ts => worker-types.ts} (57%) diff --git a/web/packages/new/photos/services/ml/bitmap.ts b/web/packages/new/photos/services/ml/bitmap.ts index fe3fc7da4e..7b851d2b8c 100644 --- a/web/packages/new/photos/services/ml/bitmap.ts +++ b/web/packages/new/photos/services/ml/bitmap.ts @@ -7,7 +7,7 @@ import { renderableImageBlob } from "../../utils/file"; import { readStream } from "../../utils/native-stream"; import DownloadManager from "../download"; import type { UploadItem } from "../upload/types"; -import type { MLWorkerElectron } from "./worker-electron"; +import type { MLWorkerElectron } from "./worker-types"; export interface ImageBitmapAndData { bitmap: ImageBitmap; diff --git a/web/packages/new/photos/services/ml/clip.ts b/web/packages/new/photos/services/ml/clip.ts index 0726929e2a..16bf637e5a 100644 --- a/web/packages/new/photos/services/ml/clip.ts +++ b/web/packages/new/photos/services/ml/clip.ts @@ -4,7 +4,7 @@ import type { ImageBitmapAndData } from "./bitmap"; import { clipIndexes } from "./db"; import { pixelRGBBicubic } from "./image"; import { dotProduct, norm } from "./math"; -import type { MLWorkerElectron } from "./worker-electron"; +import type { MLWorkerElectron } from "./worker-types"; /** * The version of the CLIP indexing pipeline implemented by the current client. diff --git a/web/packages/new/photos/services/ml/face.ts b/web/packages/new/photos/services/ml/face.ts index 5ecd57d771..4e18127a2c 100644 --- a/web/packages/new/photos/services/ml/face.ts +++ b/web/packages/new/photos/services/ml/face.ts @@ -26,7 +26,7 @@ import { warpAffineFloat32List, } from "./image"; import { clamp } from "./math"; -import type { MLWorkerElectron } from "./worker-electron"; +import type { MLWorkerElectron } from "./worker-types"; /** * The version of the face indexing pipeline implemented by the current client. diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 3152980886..39aaeec8d9 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -68,12 +68,17 @@ const createComlinkWorker = async () => { computeFaceEmbeddings: electron.computeFaceEmbeddings, computeCLIPImageEmbedding: electron.computeCLIPImageEmbedding, }; + const delegate = { + workerDidProcessFile, + }; const cw = new ComlinkWorker( "ML", new Worker(new URL("worker.ts", import.meta.url)), ); - await cw.remote.then((w) => w.init(proxy(mlWorkerElectron))); + await cw.remote.then((w) => + w.init(proxy(mlWorkerElectron), proxy(delegate)), + ); return cw; }; @@ -405,6 +410,8 @@ const setInterimScheduledStatus = () => { setMLStatusSnapshot({ phase: "scheduled", nSyncedFiles, nTotalFiles }); }; +const workerDidProcessFile = () => triggerStatusUpdate(); + /** * Return the IDs of all the faces in the given {@link enteFile} that are not * associated with a person cluster. diff --git a/web/packages/new/photos/services/ml/worker-electron.ts b/web/packages/new/photos/services/ml/worker-types.ts similarity index 57% rename from web/packages/new/photos/services/ml/worker-electron.ts rename to web/packages/new/photos/services/ml/worker-types.ts index 0e187a178a..2e30703844 100644 --- a/web/packages/new/photos/services/ml/worker-electron.ts +++ b/web/packages/new/photos/services/ml/worker-types.ts @@ -1,3 +1,8 @@ +/** + * @file Type for the objects shared (as a Comlink proxy) by the main thread and + * the ML worker. + */ + /** * A subset of {@link Electron} provided to the {@link MLWorker}. * @@ -12,3 +17,16 @@ export interface MLWorkerElectron { computeFaceEmbeddings: (input: Float32Array) => Promise; computeCLIPImageEmbedding: (input: Float32Array) => Promise; } + +/** + * Callbacks invoked by the worker at various points in the indexing pipeline to + * notify the main thread of events it might be interested in. + */ +export interface MLWorkerDelegate { + /** + * Called whenever a file is processed during indexing. + * + * It is called both when the indexing was successful or failed. + */ + workerDidProcessFile: () => void; +} diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index e71d56a85d..22013d0811 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -22,7 +22,7 @@ import { } from "./db"; import { pullFaceEmbeddings, putCLIPIndex, putFaceIndex } from "./embedding"; import { indexFaces, type FaceIndex } from "./face"; -import type { MLWorkerElectron } from "./worker-electron"; +import type { MLWorkerDelegate, MLWorkerElectron } from "./worker-types"; const idleDurationStart = 5; /* 5 seconds */ const idleDurationMax = 16 * 60; /* 16 minutes */ @@ -56,6 +56,7 @@ interface IndexableItem { */ export class MLWorker { private electron: MLWorkerElectron | undefined; + private delegate: MLWorkerDelegate | undefined; private userAgent: string | undefined; private state: "idle" | "pull" | "indexing" = "idle"; private shouldPull = false; @@ -73,9 +74,13 @@ export class MLWorker { * @param electron The {@link MLWorkerElectron} that allows the worker to * use the functionality provided by our Node.js layer when running in the * context of our desktop app + * + * @param delegate The {@link MLWorkerDelegate} the worker can use to inform + * the main thread of interesting events. */ - async init(electron: MLWorkerElectron) { + async init(electron: MLWorkerElectron, delegate?: MLWorkerDelegate) { this.electron = electron; + this.delegate = delegate; // Set the user agent that'll be set in the generated embeddings. this.userAgent = `${clientPackageName}/${await electron.appVersion()}`; // Initialize the downloadManager running in the web worker with the @@ -202,6 +207,7 @@ export class MLWorker { items, ensure(this.electron), ensure(this.userAgent), + this.delegate, ); if (allSuccess) { // Everything is running smoothly. Reset the idle duration. @@ -276,6 +282,7 @@ const indexNextBatch = async ( items: IndexableItem[], electron: MLWorkerElectron, userAgent: string, + delegate: MLWorkerDelegate | undefined, ) => { // Don't try to index if we wouldn't be able to upload them anyway. The // liveQ has already been drained, but that's fine, it'll be rare that we @@ -293,6 +300,7 @@ const indexNextBatch = async ( for (const { enteFile, uploadItem } of items) { try { await index(enteFile, uploadItem, electron, userAgent); + delegate?.workerDidProcessFile(); // Possibly unnecessary, but let us drain the microtask queue. await wait(0); } catch { diff --git a/web/packages/new/photos/utils/native-stream.ts b/web/packages/new/photos/utils/native-stream.ts index 70b052b4c1..0475f070db 100644 --- a/web/packages/new/photos/utils/native-stream.ts +++ b/web/packages/new/photos/utils/native-stream.ts @@ -7,7 +7,7 @@ */ import type { Electron, ZipItem } from "@/next/types/ipc"; -import type { MLWorkerElectron } from "../services/ml/worker-electron"; +import type { MLWorkerElectron } from "../services/ml/worker-types"; /** * Stream the given file or zip entry from the user's local file system. From 4773c7c26267777e9bc88ca5b8c09740efc144f0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 15:12:23 +0530 Subject: [PATCH 431/466] Debounce --- web/packages/new/photos/services/ml/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 39aaeec8d9..2589c95512 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -10,6 +10,7 @@ import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { proxy } from "comlink"; +import pDebounce from "p-debounce"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; @@ -410,7 +411,7 @@ const setInterimScheduledStatus = () => { setMLStatusSnapshot({ phase: "scheduled", nSyncedFiles, nTotalFiles }); }; -const workerDidProcessFile = () => triggerStatusUpdate(); +const workerDidProcessFile = () => void pDebounce(triggerStatusUpdate, 2000)(); /** * Return the IDs of all the faces in the given {@link enteFile} that are not From 5033ab2fede697c629d12ee5773a4fda77b20701 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 11 Jul 2024 16:01:11 +0530 Subject: [PATCH 432/466] [mob][photos] bump up to v0.9.7 --- mobile/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index a0479b453d..8b2cbcfe43 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,7 +12,7 @@ description: ente photos application # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.9.6+906 +version: 0.9.7+907 publish_to: none environment: From 9fe894e36898c93432eac3bfcce0c08e6075b792 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:32:46 +0530 Subject: [PATCH 433/466] [auth] Fix json --- .../custom-icons/_data/custom-icons.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index a6019b5a6e..33162f80dc 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -1,9 +1,9 @@ { "icons": [ - { "title": "1xBet", - "altNames": ["1x", "1x bet", "1x-bet" - ] - }, + { "title": "1xBet", + "altNames": ["1x", "1x bet", "1x-bet" + ] + }, { "title": "3Commas" }, @@ -15,7 +15,7 @@ "title": "Airtable" }, { - "title": "airtm" + "title": "airtm", "hex": "000000" }, { @@ -120,7 +120,7 @@ { "title": "DEGIRO" }, - { + { "title": "deriv" }, { @@ -341,8 +341,8 @@ { "title": "Odido" }, - { "title": "okx", - "hex": "858585" }, + { "title": "okx", + "hex": "858585" }, { "title": "Parsec" }, @@ -560,8 +560,8 @@ ], "slug": "Yandex" }, - { "title": "yahoo" }, - { + { "title": "yahoo" }, + { "title": "YNAB", "altNames": [ From 349a5021a50e0591e2c9cd7047770068eb3dc4d6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 20:07:31 +0530 Subject: [PATCH 434/466] Debounce never calls the underyling if it keeps getting called within wait --- web/packages/new/photos/services/ml/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 2589c95512..54eaac31ae 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -10,7 +10,6 @@ import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { proxy } from "comlink"; -import pDebounce from "p-debounce"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; @@ -411,7 +410,7 @@ const setInterimScheduledStatus = () => { setMLStatusSnapshot({ phase: "scheduled", nSyncedFiles, nTotalFiles }); }; -const workerDidProcessFile = () => void pDebounce(triggerStatusUpdate, 2000)(); +const workerDidProcessFile = triggerStatusUpdate; /** * Return the IDs of all the faces in the given {@link enteFile} that are not From 21b63169963b1d906e6d042dedfe60fc205c1a52 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 11 Jul 2024 20:19:01 +0530 Subject: [PATCH 435/466] Disable ML for everyone while it is WIP Preparing for merge and the interim release --- .../components/Sidebar/AdvancedSettings.tsx | 36 ++++++++++- .../new/photos/components/MLSettingsBeta.tsx | 60 +++++++++++++++++++ web/packages/new/photos/services/ml/index.ts | 13 +++- 3 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 web/packages/new/photos/components/MLSettingsBeta.tsx diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 5810834636..5dfd95b30c 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -1,15 +1,27 @@ +import { MLSettingsBeta } from "@/new/photos/components/MLSettingsBeta"; +import { canEnableML } from "@/new/photos/services/ml"; import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; import { MenuItemGroup, MenuSectionTitle } from "@/new/shared/components/Menu"; import { Titlebar } from "@/new/shared/components/Titlebar"; +import { isDesktop } from "@/next/app"; +import { pt } from "@/next/i18n"; import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import ScienceIcon from "@mui/icons-material/Science"; import { Box, DialogProps, Stack } from "@mui/material"; import { t } from "i18next"; import { AppContext } from "pages/_app"; -import { useContext } from "react"; +import { useContext, useEffect, useState } from "react"; export default function AdvancedSettings({ open, onClose, onRootClose }) { const appContext = useContext(AppContext); + const [showMLSettings, setShowMLSettings] = useState(false); + const [openMLSettings, setOpenMLSettings] = useState(false); + + useEffect(() => { + if (isDesktop) void canEnableML().then(setShowMLSettings); + }, []); const handleRootClose = () => { onClose(); onRootClose(); @@ -59,8 +71,30 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { /> + + {showMLSettings && ( + + } + /> + + } + onClick={() => setOpenMLSettings(true)} + label={pt("ML search")} + /> + + + )} + + setOpenMLSettings(false)} + onRootClose={handleRootClose} + /> ); } diff --git a/web/packages/new/photos/components/MLSettingsBeta.tsx b/web/packages/new/photos/components/MLSettingsBeta.tsx new file mode 100644 index 0000000000..8e50a6119a --- /dev/null +++ b/web/packages/new/photos/components/MLSettingsBeta.tsx @@ -0,0 +1,60 @@ +import { EnteDrawer } from "@/new/shared/components/EnteDrawer"; +import { Titlebar } from "@/new/shared/components/Titlebar"; +import { pt, ut } from "@/next/i18n"; +import { Box, Stack, Typography, type DialogProps } from "@mui/material"; +import React from "react"; + +interface MLSettingsBetaProps { + /** If `true`, then this drawer page is shown. */ + open: boolean; + /** Called when the user wants to go back from this drawer page. */ + onClose: () => void; + /** Called when the user wants to close the entire stack of drawers. */ + onRootClose: () => void; +} + +export const MLSettingsBeta: React.FC = ({ + open, + onClose, + onRootClose, +}) => { + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason == "backdropClick") handleRootClose(); + else onClose(); + }; + + return ( + + + + + + + + {ut( + "We're putting finishing touches, coming back soon!", + )} + + + + + + ); +}; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 54eaac31ae..64571f1de0 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -10,6 +10,7 @@ import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; import { proxy } from "comlink"; +import { isBetaUser, isInternalUser } from "../feature-flags"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; import type { UploadItem } from "../upload/types"; import { regenerateFaceCrops } from "./crop"; @@ -103,7 +104,17 @@ export const terminateMLWorker = () => { * * ML currently only works when we're running in our desktop app. */ -export const isMLSupported = isDesktop; +// TODO-ML: +export const isMLSupported = + isDesktop && process.env.NEXT_PUBLIC_ENTE_ENABLE_WIP_ML; + +/** + * Was this someone who might've enabled the beta ML? If so, show them the + * coming back soon banner while we finalize it. + * TODO-ML: + */ +export const canEnableML = async () => + (await isInternalUser()) || (await isBetaUser()); /** * Initialize the ML subsystem if the user has enabled it in preferences. From eeab98c768499785b4832d71db1852f53c7d0c26 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 11:00:53 +0530 Subject: [PATCH 436/466] [server] Add a workaround for Safari to recognize Yubikeys Safari just doesn't recognize the Yubikey (macOS/iOS, NFC/USB, doesn't matter) if display name is set to the empty string. Safari's long description doesn't care to mention this requirement: https://webkit.org/blog/11312/meet-face-id-and-touch-id-for-the-web/ Tested on localhost with Safari macOS. Will test on iOS post deployment. --- server/pkg/repo/passkey/passkey.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/pkg/repo/passkey/passkey.go b/server/pkg/repo/passkey/passkey.go index 2c46320212..603c3ab26c 100644 --- a/server/pkg/repo/passkey/passkey.go +++ b/server/pkg/repo/passkey/passkey.go @@ -47,7 +47,9 @@ func (u *PasskeyUser) WebAuthnName() string { } func (u *PasskeyUser) WebAuthnDisplayName() string { - return u.Name + // Safari requires a display name to be set, otherwise it does not recognize + // security keys. + return u.Email } func (u *PasskeyUser) WebAuthnCredentials() []webauthn.Credential { From 0ea408379a26d43641b6c7d18d91bec48690ceb4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 11:17:02 +0530 Subject: [PATCH 437/466] [server] [cli] Fix docker "FROM AS" case warnings With the latest Docker update (27.0.3), it now warns about the "FROM" and "AS" in the Dockerfile not matching. E.g. when building the server docker image: > WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 1) --- cli/Dockerfile | 2 +- cli/Dockerfile-x86 | 2 +- server/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/Dockerfile b/cli/Dockerfile index 827269f5f8..4e00a47645 100644 --- a/cli/Dockerfile +++ b/cli/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20-alpine3.17 as builder +FROM golang:1.20-alpine3.17 AS builder RUN apk add --no-cache gcc musl-dev git build-base pkgconfig libsodium-dev ENV GOOS=linux diff --git a/cli/Dockerfile-x86 b/cli/Dockerfile-x86 index 23a877cb9f..42ea9c90dc 100644 --- a/cli/Dockerfile-x86 +++ b/cli/Dockerfile-x86 @@ -1,4 +1,4 @@ -FROM golang:1.20-alpine3.17@sha256:9c2f89db6fda13c3c480749787f62fed5831699bb2c32881b8f327f1cf7bae42 as builder386 +FROM golang:1.20-alpine3.17@sha256:9c2f89db6fda13c3c480749787f62fed5831699bb2c32881b8f327f1cf7bae42 AS builder386 RUN apt-get update RUN apt-get install -y gcc RUN apt-get install -y git diff --git a/server/Dockerfile b/server/Dockerfile index d902deebfd..778d5ed8ee 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21-alpine3.17 as builder +FROM golang:1.21-alpine3.17 AS builder RUN apk add --no-cache gcc musl-dev git build-base pkgconfig libsodium-dev ENV GOOS=linux From 8e136ecdc165a1d613d1ca9f324646617ef458c7 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:05:42 +0530 Subject: [PATCH 438/466] Fix: don't edit location/time in the file object --- .../ui/viewer/file/file_details_widget.dart | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/mobile/lib/ui/viewer/file/file_details_widget.dart b/mobile/lib/ui/viewer/file/file_details_widget.dart index f6270e914d..b28951431d 100644 --- a/mobile/lib/ui/viewer/file/file_details_widget.dart +++ b/mobile/lib/ui/viewer/file/file_details_widget.dart @@ -11,7 +11,6 @@ import "package:photos/events/people_changed_event.dart"; import "package:photos/generated/l10n.dart"; import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/file_type.dart'; -import "package:photos/models/location/location.dart"; import "package:photos/models/metadata/file_magic.dart"; import "package:photos/services/file_magic_service.dart"; import 'package:photos/theme/ente_theme.dart'; @@ -60,12 +59,9 @@ class _FileDetailsWidgetState extends State { "longRef": null, }; - int? creationTime; - Location? location; - late final StreamSubscription _peopleChangedEvent; - bool _isImage = false; + bool _isImage = false; late int _currentUserID; bool showExifListTile = false; final ValueNotifier hasLocationData = ValueNotifier(false); @@ -126,13 +122,6 @@ class _FileDetailsWidgetState extends State { } final properties = await FFProbeUtil.getProperties(mediaInfo); - location = properties.location; - if (location != null) { - hasLocationData.value = true; - } - creationTime = DateTime.tryParse(properties.creationTime ?? "") - ?.microsecondsSinceEpoch; - setState(() {}); } @@ -165,9 +154,7 @@ class _FileDetailsWidgetState extends State { ); fileDetailsTiles.addAll([ CreationTimeItem( - file.copyWith( - creationTime: creationTime, - ), + file, _currentUserID, ), const FileDetailsDivider(), @@ -206,9 +193,7 @@ class _FileDetailsWidgetState extends State { ? Column( children: [ LocationTagsWidget( - widget.file.copyWith( - location: location, - ), + widget.file, ), const FileDetailsDivider(), ], From 7047383e09c55e05e4cdd3d3f8343c3013633bc7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 12:19:44 +0530 Subject: [PATCH 439/466] [accounts] Restore the workaround for Safari This restores the workaround I'd removed in 4d84e966b0298a92de895c4dedc3390d8fda7387. listItem.transports = ["usb", "nfc", "ble", "internal"]; - This PR fixes the passkey verification on Safari. - Sibling PR that fixes the passkey registration: https://github.com/ente-io/ente/pull/2429/files --- web/apps/accounts/src/services/passkey.ts | 56 ++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index 469881e5c6..8f2f15b6d2 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -454,7 +454,61 @@ export const beginPasskeyAuthentication = async ( */ export const signChallenge = async ( publicKey: PublicKeyCredentialRequestOptions, -) => nullToUndefined(await navigator.credentials.get({ publicKey })); +) => { + // Hint all transports to make security keys like Yubikey work across + // varying registration/verification scenarios. + // + // During verification, we need to pass a `transport` property. + // + // > The `transports` property is hint of the methods that the client could + // > use to communicate with the relevant authenticator of the public key + // > credential to retrieve. Possible values are ["ble", "hybrid", + // > "internal", "nfc", "usb"]. + // > + // > MDN + // + // When we register a passkey, we save the transport alongwith the + // credential. During authentication, we pass that transport back to the + // browser. This is the approach recommended by the spec: + // + // > When registering a new credential, the Relying Party SHOULD store the + // > value returned from getTransports(). When creating a + // > PublicKeyCredentialDescriptor for that credential, the Relying Party + // > SHOULD retrieve that stored value and set it as the value of the + // > transports member. + // > + // > https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialdescriptor-transports + // + // However, following this recommendation break things currently (2024) in + // various ways. For example, if a user registers a Yubikey NFC security key + // on Firefox on their laptop, then Firefox returns ["usb"]. This is + // incorrect, it should be ["usb", "nfc"] (which is what Chrome does, since + // the hardware itself supports both USB and NFC transports). + // + // Later, if the user tries to verifying with their security key on their + // iPhone Safari via NFC, the browser doesn't recognize it (which seems + // incorrect too, the transport is meant to be a "hint" not a binding). + // + // > Note that these hints represent the WebAuthn Relying Party's best + // > belief as to how an authenticator may be reached. + // > + // > https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialdescriptor-transports + // + // As a workaround, we override transports with known possible values. + + for (const cred of publicKey.allowCredentials ?? []) { + cred.transports = [ + ...(cred.transports ?? []), + "usb", + "nfc", + "ble", + "hybrid", + "internal", + ]; + } + + return nullToUndefined(await navigator.credentials.get({ publicKey })); +}; interface FinishPasskeyAuthenticationOptions { passkeySessionID: string; From 95c04b554c86b0542b2b5aa9c702fe57a9c13278 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:59:03 +0530 Subject: [PATCH 440/466] [mob] Add missing tr file for Turkish --- mobile/lib/generated/intl/messages_all.dart | 4 + mobile/lib/generated/intl/messages_de.dart | 167 +- mobile/lib/generated/intl/messages_en.dart | 136 +- mobile/lib/generated/intl/messages_es.dart | 132 +- mobile/lib/generated/intl/messages_fr.dart | 132 +- mobile/lib/generated/intl/messages_it.dart | 128 +- mobile/lib/generated/intl/messages_nl.dart | 218 ++- mobile/lib/generated/intl/messages_pl.dart | 4 +- mobile/lib/generated/intl/messages_pt.dart | 184 +- mobile/lib/generated/intl/messages_ru.dart | 132 +- mobile/lib/generated/intl/messages_tr.dart | 1710 +++++++++++++++++++ mobile/lib/generated/intl/messages_zh.dart | 166 +- mobile/lib/generated/l10n.dart | 1 + mobile/lib/l10n/intl_en.arb | 1 + mobile/lib/l10n/intl_tr.arb | 1279 ++++++++++++++ mobile/pubspec.lock | 16 +- mobile/pubspec.yaml | 1 + 17 files changed, 3738 insertions(+), 673 deletions(-) create mode 100644 mobile/lib/generated/intl/messages_tr.dart create mode 100644 mobile/lib/l10n/intl_tr.arb diff --git a/mobile/lib/generated/intl/messages_all.dart b/mobile/lib/generated/intl/messages_all.dart index aa2bd004dd..e274c0ccdb 100644 --- a/mobile/lib/generated/intl/messages_all.dart +++ b/mobile/lib/generated/intl/messages_all.dart @@ -28,6 +28,7 @@ import 'messages_no.dart' as messages_no; import 'messages_pl.dart' as messages_pl; import 'messages_pt.dart' as messages_pt; import 'messages_ru.dart' as messages_ru; +import 'messages_tr.dart' as messages_tr; import 'messages_zh.dart' as messages_zh; typedef Future LibraryLoader(); @@ -44,6 +45,7 @@ Map _deferredLibraries = { 'pl': () => new SynchronousFuture(null), 'pt': () => new SynchronousFuture(null), 'ru': () => new SynchronousFuture(null), + 'tr': () => new SynchronousFuture(null), 'zh': () => new SynchronousFuture(null), }; @@ -73,6 +75,8 @@ MessageLookupByLibrary? _findExact(String localeName) { return messages_pt.messages; case 'ru': return messages_ru.messages; + case 'tr': + return messages_tr.messages; case 'zh': return messages_zh.messages; default: diff --git a/mobile/lib/generated/intl/messages_de.dart b/mobile/lib/generated/intl/messages_de.dart index 7cc6c8c726..fa53d3ac76 100644 --- a/mobile/lib/generated/intl/messages_de.dart +++ b/mobile/lib/generated/intl/messages_de.dart @@ -127,92 +127,94 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Erfolgreich zu ${albumName} hinzugefügt"; - static String m37(passwordStrengthValue) => + static String m37(name) => "Nicht ${name}?"; + + static String m38(passwordStrengthValue) => "Passwortstärke: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Bitte kontaktiere den Support von ${providerName}, falls etwas abgebucht wurde"; - static String m39(endDate) => + static String m40(endDate) => "Kostenlose Testversion gültig bis ${endDate}.\nSie können anschließend ein bezahltes Paket auswählen."; - static String m40(toEmail) => "Bitte sende uns eine E-Mail an ${toEmail}"; + static String m41(toEmail) => "Bitte sende uns eine E-Mail an ${toEmail}"; - static String m41(toEmail) => "Bitte sende die Protokolle an ${toEmail}"; + static String m42(toEmail) => "Bitte sende die Protokolle an ${toEmail}"; - static String m42(storeName) => "Bewerte uns auf ${storeName}"; + static String m43(storeName) => "Bewerte uns auf ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Ihr beide erhaltet ${storageInGB} GB* kostenlos"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} wird aus diesem geteilten Album entfernt\n\nAlle von ihnen hinzugefügte Fotos werden ebenfalls aus dem Album entfernt"; - static String m45(endDate) => "Erneuert am ${endDate}"; + static String m46(endDate) => "Erneuert am ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} Ergebnis gefunden', other: '${count} Ergebnisse gefunden')}"; - static String m47(count) => "${count} ausgewählt"; + static String m48(count) => "${count} ausgewählt"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} ausgewählt (${yourCount} von Ihnen)"; - static String m49(verificationID) => + static String m50(verificationID) => "Hier ist meine Verifizierungs-ID: ${verificationID} für ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hey, kannst du bestätigen, dass dies deine ente.io Verifizierungs-ID ist: ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Ente Weiterempfehlungs-Code: ${referralCode} \n\nEinlösen unter Einstellungen → Allgemein → Weiterempfehlungen, um ${referralStorageInGB} GB kostenlos zu erhalten, sobald Sie einen kostenpflichtigen Tarif abgeschlossen haben\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Teile mit bestimmten Personen', one: 'Teilen mit 1 Person', other: 'Teilen mit ${numberOfPeople} Personen')}"; - static String m53(emailIDs) => "Geteilt mit ${emailIDs}"; + static String m54(emailIDs) => "Geteilt mit ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Dieses ${fileType} wird von deinem Gerät gelöscht."; - static String m55(fileType) => + static String m56(fileType) => "Diese Datei ist sowohl in Ente als auch auf deinem Gerät."; - static String m56(fileType) => "Diese Datei wird von Ente gelöscht."; + static String m57(fileType) => "Diese Datei wird von Ente gelöscht."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} von ${totalAmount} ${totalStorageUnit} verwendet"; - static String m59(id) => + static String m60(id) => "Ihr ${id} ist bereits mit einem anderen Ente-Konto verknüpft.\nWenn Sie Ihre ${id} mit diesem Konto verwenden möchten, kontaktieren Sie bitte unseren Support"; - static String m60(endDate) => "Ihr Abo endet am ${endDate}"; + static String m61(endDate) => "Ihr Abo endet am ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} Erinnerungsstücke gesichert"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Diese erhalten auch ${storageAmountInGB} GB"; - static String m63(email) => "Dies ist ${email}s Verifizierungs-ID"; + static String m64(email) => "Dies ist ${email}s Verifizierungs-ID"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 Tag', other: '${count} Tage')}"; - static String m65(endDate) => "Gültig bis ${endDate}"; + static String m66(endDate) => "Gültig bis ${endDate}"; - static String m66(email) => "Verifiziere ${email}"; + static String m67(email) => "Verifiziere ${email}"; - static String m67(email) => + static String m68(email) => "Wir haben eine E-Mail an ${email} gesendet"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: 'vor einem Jahr', other: 'vor ${count} Jahren')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "Du hast ${storageSaved} erfolgreich freigegeben!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -309,7 +311,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage( "Authentifizierung erforderlich"), - "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLock": MessageLookupByLibrary.simpleMessage("App-Sperre"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Anwenden"), @@ -613,7 +615,7 @@ class MessageLookup extends MessageLookupByLibrary { "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Code eingeben"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Dateien, die zu diesem Album hinzugefügt werden, werden automatisch zu Ente hochgeladen."), - "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Gerätsperre"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Verhindern, dass der Bildschirm gesperrt wird, während die App im Vordergrund ist und eine Sicherung läuft. Das ist normalerweise nicht notwendig, kann aber dabei helfen, große Uploads wie einen Erstimport schneller abzuschließen."), "deviceNotFound": @@ -708,7 +710,7 @@ class MessageLookup extends MessageLookupByLibrary { "Gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Namen der Person eingeben"), - "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "enterPin": MessageLookupByLibrary.simpleMessage("PIN eingeben"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Gib den Weiterempfehlungs-Code ein"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -1015,7 +1017,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Neues Album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Neu bei Ente"), "newest": MessageLookupByLibrary.simpleMessage("Zuletzt"), - "next": MessageLookupByLibrary.simpleMessage("Next"), + "next": MessageLookupByLibrary.simpleMessage("Weiter"), "no": MessageLookupByLibrary.simpleMessage("Nein"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Noch keine Alben von dir geteilt"), @@ -1046,7 +1048,8 @@ class MessageLookup extends MessageLookupByLibrary { "noResultsFound": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse gefunden"), "noSystemLockFound": - MessageLookupByLibrary.simpleMessage("No system lock found"), + MessageLookupByLibrary.simpleMessage("Keine Systemsperre gefunden"), + "notPersonLabel": m37, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Noch nichts mit Dir geteilt"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1084,7 +1087,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Passwort erfolgreich geändert"), "passwordLock": MessageLookupByLibrary.simpleMessage("Passwort Sperre"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Wir speichern dieses Passwort nicht. Wenn du es vergisst, können wir deine Daten nicht entschlüsseln"), "paymentDetails": @@ -1093,7 +1096,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Zahlung fehlgeschlagen"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Leider ist deine Zahlung fehlgeschlagen. Wende dich an unseren Support und wir helfen dir weiter!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Ausstehende Elemente"), "pendingSync": @@ -1119,10 +1122,10 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Mittelpunkt auswählen"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Album anheften"), - "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN-Sperre"), "playOnTv": MessageLookupByLibrary.simpleMessage( "Album auf dem Fernseher wiedergeben"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore Abo"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1134,12 +1137,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Bitte wenden Sie sich an den Support, falls das Problem weiterhin besteht"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Bitte erteile die nötigen Berechtigungen"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Bitte logge dich erneut ein"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Bitte versuche es erneut"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1175,7 +1178,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Ticket erstellen"), "rateTheApp": MessageLookupByLibrary.simpleMessage("App bewerten"), "rateUs": MessageLookupByLibrary.simpleMessage("Bewerte uns"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Wiederherstellen"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Konto wiederherstellen"), @@ -1203,15 +1206,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Passwort wiederherstellen"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), "reenterPassword": - MessageLookupByLibrary.simpleMessage("Re-enter password"), - "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + MessageLookupByLibrary.simpleMessage("Passwort erneut eingeben"), + "reenterPin": + MessageLookupByLibrary.simpleMessage("PIN erneut eingeben"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Begeistere Freunde für uns und verdopple deinen Speicher"), "referralStep1": MessageLookupByLibrary.simpleMessage( "1. Gib diesen Code an deine Freunde"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Sie schließen ein bezahltes Abo ab"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Weiterempfehlungen"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Einlösungen sind derzeit pausiert"), @@ -1239,7 +1243,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Link entfernen"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Teilnehmer entfernen"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Personenetikett entfernen"), "removePublicLink": @@ -1255,7 +1259,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Datei umbenennen"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Abonnement erneuern"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Fehler melden"), "reportBug": MessageLookupByLibrary.simpleMessage("Fehler melden"), "resendEmail": @@ -1325,7 +1329,7 @@ class MessageLookup extends MessageLookupByLibrary { "Gruppiere Fotos, die innerhalb des Radius eines bestimmten Fotos aufgenommen wurden"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Laden Sie Personen ein, damit Sie geteilte Fotos hier einsehen können"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Sicherheit"), "selectALocation": MessageLookupByLibrary.simpleMessage("Standort auswählen"), @@ -1352,8 +1356,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Ausgewählte Elemente werden aus allen Alben gelöscht und in den Papierkorb verschoben."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Absenden"), "sendEmail": MessageLookupByLibrary.simpleMessage("E-Mail senden"), "sendInvite": MessageLookupByLibrary.simpleMessage("Einladung senden"), @@ -1367,8 +1371,8 @@ class MessageLookup extends MessageLookupByLibrary { "setCover": MessageLookupByLibrary.simpleMessage("Titelbild festlegen"), "setLabel": MessageLookupByLibrary.simpleMessage("Festlegen"), "setNewPassword": - MessageLookupByLibrary.simpleMessage("Set new password"), - "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + MessageLookupByLibrary.simpleMessage("Neues Passwort festlegen"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Neue PIN festlegen"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Passwort festlegen"), "setRadius": MessageLookupByLibrary.simpleMessage("Radius festlegen"), @@ -1381,16 +1385,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Teile jetzt ein Album"), "shareLink": MessageLookupByLibrary.simpleMessage("Link teilen"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Teile mit ausgewählten Personen"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Hol dir Ente, damit wir ganz einfach Fotos und Videos in Originalqualität teilen können\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Mit Nicht-Ente-Benutzern teilen"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Teile dein erstes Album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1401,7 +1405,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Neue geteilte Fotos"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Erhalte Benachrichtigungen, wenn jemand ein Foto zu einem gemeinsam genutzten Album hinzufügt, dem du angehörst"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Mit mir geteilt"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Mit dir geteilt"), @@ -1416,11 +1420,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Andere Geräte abmelden"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Ich stimme den Nutzungsbedingungen und der Datenschutzerklärung zu"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Es wird aus allen Alben gelöscht."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Überspringen"), "social": MessageLookupByLibrary.simpleMessage("Social Media"), "someItemsAreInBothEnteAndYourDevice": @@ -1466,13 +1470,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Speicherplatz"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Sie"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Speichergrenze überschritten"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Stark"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Abonnieren"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Sieht aus, als sei dein Abonnement abgelaufen. Bitte abonniere, um das Teilen zu aktivieren."), @@ -1489,7 +1493,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Verbesserung vorschlagen"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisierung angehalten"), "syncing": MessageLookupByLibrary.simpleMessage("Synchronisiere …"), @@ -1498,7 +1502,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("zum Kopieren antippen"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage( "Antippen, um den Code einzugeben"), - "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "tapToUnlock": + MessageLookupByLibrary.simpleMessage("Zum Entsperren antippen"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Etwas ist schiefgelaufen. Bitte versuche es später noch einmal. Sollte der Fehler weiter bestehen, kontaktiere unser Supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beenden"), @@ -1519,7 +1524,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Diese Elemente werden von deinem Gerät gelöscht."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Sie werden aus allen Alben gelöscht."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1535,7 +1540,7 @@ class MessageLookup extends MessageLookupByLibrary { "Diese E-Mail-Adresse wird bereits verwendet"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Dieses Bild hat keine Exif-Daten"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Dies ist deine Verifizierungs-ID"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1545,19 +1550,19 @@ class MessageLookup extends MessageLookupByLibrary { "Dadurch wirst du von diesem Gerät abgemeldet!"), "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( - "To enable app lock, please setup device passcode or screen lock in your system settings."), + "Um die App-Sperre zu aktivieren, konfigurieren Sie bitte den Gerätepasscode oder die Bildschirmsperre in Ihren Systemeinstellungen."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("Foto oder Video verstecken"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Um dein Passwort zurückzusetzen, verifiziere bitte zuerst deine E-Mail Adresse."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Heutiges Protokoll"), - "tooManyIncorrectAttempts": - MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( + "Zu viele fehlerhafte Versuche"), "total": MessageLookupByLibrary.simpleMessage("Gesamt"), "totalSize": MessageLookupByLibrary.simpleMessage("Gesamtgröße"), "trash": MessageLookupByLibrary.simpleMessage("Papierkorb"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("Schneiden"), "tryAgain": MessageLookupByLibrary.simpleMessage("Erneut versuchen"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1604,6 +1609,8 @@ class MessageLookup extends MessageLookupByLibrary { "Bis zu 50% Rabatt bis zum 4. Dezember."), "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( "Der verwendbare Speicherplatz ist von deinem aktuellen Abonnement eingeschränkt. Überschüssiger, beanspruchter Speicherplatz wird automatisch verwendbar werden, wenn du ein höheres Abonnement buchst."), + "useAsCover": + MessageLookupByLibrary.simpleMessage("Als Titelbild festlegen"), "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage( "Verwenden Sie öffentliche Links für Personen, die kein Ente-Konto haben"), "useRecoveryKey": MessageLookupByLibrary.simpleMessage( @@ -1612,7 +1619,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ausgewähltes Foto verwenden"), "usedSpace": MessageLookupByLibrary.simpleMessage("Belegter Speicherplatz"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Verifizierung fehlgeschlagen, bitte versuchen Sie es erneut"), @@ -1621,7 +1628,7 @@ class MessageLookup extends MessageLookupByLibrary { "verify": MessageLookupByLibrary.simpleMessage("Überprüfen"), "verifyEmail": MessageLookupByLibrary.simpleMessage("E-Mail-Adresse verifizieren"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Überprüfen"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Passkey verifizieren"), @@ -1657,13 +1664,13 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Wir unterstützen keine Bearbeitung von Fotos und Alben, die du noch nicht besitzt"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Schwach"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Willkommen zurück!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Neue Funktionen"), "yearly": MessageLookupByLibrary.simpleMessage("Jährlich"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, kündigen"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -1693,7 +1700,7 @@ class MessageLookup extends MessageLookupByLibrary { "Du kannst nicht mit dir selbst teilen"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Du hast keine archivierten Elemente."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Dein Benutzerkonto wurde gelöscht"), "yourMap": MessageLookupByLibrary.simpleMessage("Deine Karte"), diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index 8131326606..90a82c55c9 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -125,94 +125,94 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Moved successfully to ${albumName}"; - static String m70(name) => "Not ${name}?"; + static String m37(name) => "Not ${name}?"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Password strength: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Please talk to ${providerName} support if you were charged"; - static String m39(endDate) => + static String m40(endDate) => "Free trial valid till ${endDate}.\nYou can choose a paid plan afterwards."; - static String m40(toEmail) => "Please email us at ${toEmail}"; + static String m41(toEmail) => "Please email us at ${toEmail}"; - static String m41(toEmail) => "Please send the logs to \n${toEmail}"; + static String m42(toEmail) => "Please send the logs to \n${toEmail}"; - static String m42(storeName) => "Rate us on ${storeName}"; + static String m43(storeName) => "Rate us on ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Both of you get ${storageInGB} GB* free"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album"; - static String m45(endDate) => "Subscription renews on ${endDate}"; + static String m46(endDate) => "Subscription renews on ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} result found', other: '${count} results found')}"; - static String m47(count) => "${count} selected"; + static String m48(count) => "${count} selected"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} selected (${yourCount} yours)"; - static String m49(verificationID) => + static String m50(verificationID) => "Here\'s my verification ID: ${verificationID} for ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hey, can you confirm that this is your ente.io verification ID: ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}"; - static String m53(emailIDs) => "Shared with ${emailIDs}"; + static String m54(emailIDs) => "Shared with ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "This ${fileType} will be deleted from your device."; - static String m55(fileType) => + static String m56(fileType) => "This ${fileType} is in both Ente and your device."; - static String m56(fileType) => "This ${fileType} will be deleted from Ente."; + static String m57(fileType) => "This ${fileType} will be deleted from Ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} of ${totalAmount} ${totalStorageUnit} used"; - static String m59(id) => + static String m60(id) => "Your ${id} is already linked to another Ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'"; - static String m60(endDate) => + static String m61(endDate) => "Your subscription will be cancelled on ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} memories preserved"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "They also get ${storageAmountInGB} GB"; - static String m63(email) => "This is ${email}\'s Verification ID"; + static String m64(email) => "This is ${email}\'s Verification ID"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 day', other: '${count} days')}"; - static String m65(endDate) => "Valid till ${endDate}"; + static String m66(endDate) => "Valid till ${endDate}"; - static String m66(email) => "Verify ${email}"; + static String m67(email) => "Verify ${email}"; - static String m67(email) => "We have sent a mail to ${email}"; + static String m68(email) => "We have sent a mail to ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "You have successfully freed up ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -1007,7 +1007,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("No results found"), "noSystemLockFound": MessageLookupByLibrary.simpleMessage("No system lock found"), - "notPersonLabel": m70, + "notPersonLabel": m37, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Nothing shared with you yet"), "nothingToSeeHere": @@ -1043,7 +1043,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Password changed successfully"), "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "We don\'t store this password, so if you forget, we cannot decrypt your data"), "paymentDetails": @@ -1051,7 +1051,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("Payment failed"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Unfortunately your payment failed. Please contact support and we\'ll help you out!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Pending items"), "pendingSync": MessageLookupByLibrary.simpleMessage("Pending sync"), "people": MessageLookupByLibrary.simpleMessage("People"), @@ -1077,7 +1077,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinAlbum": MessageLookupByLibrary.simpleMessage("Pin album"), "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Play album on TV"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore subscription"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1089,12 +1089,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Please contact support if the problem persists"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Please grant permissions"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Please login again"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Please try again"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1129,7 +1129,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Raise ticket"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Rate the app"), "rateUs": MessageLookupByLibrary.simpleMessage("Rate us"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Recover"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Recover account"), @@ -1163,7 +1163,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Give this code to your friends"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. They sign up for a paid plan"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Referrals"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Referrals are currently paused"), @@ -1189,7 +1189,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Remove link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Remove participant"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "removePublicLink": @@ -1205,7 +1205,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Rename file"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renew subscription"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Report a bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Report bug"), "resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"), @@ -1271,7 +1271,7 @@ class MessageLookup extends MessageLookupByLibrary { "Group photos that are taken within some radius of a photo"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Invite people, and you\'ll see all photos shared by them here"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Security"), "selectALocation": MessageLookupByLibrary.simpleMessage("Select a location"), @@ -1298,8 +1298,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Selected items will be deleted from all albums and moved to trash."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Send"), "sendEmail": MessageLookupByLibrary.simpleMessage("Send email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"), @@ -1326,16 +1326,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Share an album now"), "shareLink": MessageLookupByLibrary.simpleMessage("Share link"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Share only with the people you want"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage("Share with non-Ente users"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Share your first album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1346,7 +1346,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("New shared photos"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Receive notifications when someone adds a photo to a shared album that you\'re a part of"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Shared with you"), @@ -1360,11 +1360,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sign out other devices"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "I agree to the terms of service and privacy policy"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "It will be deleted from all albums."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Skip"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1406,13 +1406,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Storage"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Family"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("You"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Storage limit exceeded"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Strong"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Looks like your subscription has expired. Please subscribe to enable sharing."), @@ -1429,7 +1429,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Suggest features"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"), "syncing": MessageLookupByLibrary.simpleMessage("Syncing..."), "systemTheme": MessageLookupByLibrary.simpleMessage("System"), @@ -1456,7 +1456,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "These items will be deleted from your device."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "They will be deleted from all albums."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1472,7 +1472,7 @@ class MessageLookup extends MessageLookupByLibrary { "This email is already in use"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage("This image has no exif data"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "This is your Verification ID"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1493,7 +1493,7 @@ class MessageLookup extends MessageLookupByLibrary { "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Total size"), "trash": MessageLookupByLibrary.simpleMessage("Trash"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("Trim"), "tryAgain": MessageLookupByLibrary.simpleMessage("Try again"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1547,7 +1547,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Use selected photo"), "usedSpace": MessageLookupByLibrary.simpleMessage("Used space"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Verification failed, please try again"), @@ -1555,7 +1555,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Verification ID"), "verify": MessageLookupByLibrary.simpleMessage("Verify"), "verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verify"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Verify passkey"), "verifyPassword": @@ -1589,12 +1589,12 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "We don\'t support editing photos and albums that you don\'t own yet"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Weak"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Welcome back!"), "whatsNew": MessageLookupByLibrary.simpleMessage("What\'s new"), "yearly": MessageLookupByLibrary.simpleMessage("Yearly"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Yes"), "yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"), "yesConvertToViewer": @@ -1624,7 +1624,7 @@ class MessageLookup extends MessageLookupByLibrary { "You cannot share with yourself"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "You don\'t have any archived items."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Your account has been deleted"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map"), diff --git a/mobile/lib/generated/intl/messages_es.dart b/mobile/lib/generated/intl/messages_es.dart index fc2186f45c..fc25d0b4dc 100644 --- a/mobile/lib/generated/intl/messages_es.dart +++ b/mobile/lib/generated/intl/messages_es.dart @@ -129,93 +129,93 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Movido exitosamente a ${albumName}"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Seguridad de la contraseña : ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Por favor, habla con el soporte de ${providerName} si se te cobró"; - static String m39(endDate) => + static String m40(endDate) => "Prueba gratuita válida hasta ${endDate}.\nPuedes elegir un plan de pago después."; - static String m40(toEmail) => + static String m41(toEmail) => "Por favor, envíanos un correo electrónico a ${toEmail}"; - static String m41(toEmail) => "Por favor, envía los registros a ${toEmail}"; + static String m42(toEmail) => "Por favor, envía los registros a ${toEmail}"; - static String m42(storeName) => "Califícanos en ${storeName}"; + static String m43(storeName) => "Califícanos en ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Ambos obtienen ${storageInGB} GB* gratis"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} será eliminado de este álbum compartido\n\nCualquier foto añadida por ellos también será eliminada del álbum"; - static String m45(endDate) => "La suscripción se renueva el ${endDate}"; + static String m46(endDate) => "La suscripción se renueva el ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}"; - static String m47(count) => "${count} seleccionados"; + static String m48(count) => "${count} seleccionados"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} seleccionados (${yourCount} tuyos)"; - static String m49(verificationID) => + static String m50(verificationID) => "Aquí está mi ID de verificación: ${verificationID} para ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hola, ¿puedes confirmar que esta es tu ID de verificación ente.io: ${verificationID}?"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Código de referido de Ente: ${referralCode} \n\nAñádelo en Ajustes → General → Referidos para obtener ${referralStorageInGB} GB gratis tras comprar un plan de pago.\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Compartir con personas específicas', one: 'Compartido con 1 persona', other: 'Compartido con ${numberOfPeople} personas')}"; - static String m53(emailIDs) => "Compartido con ${emailIDs}"; + static String m54(emailIDs) => "Compartido con ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Este ${fileType} se eliminará de tu dispositivo."; - static String m55(fileType) => + static String m56(fileType) => "Este ${fileType} está tanto en Ente como en tu dispositivo."; - static String m56(fileType) => "Este ${fileType} será eliminado de Ente."; + static String m57(fileType) => "Este ${fileType} será eliminado de Ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usados"; - static String m59(id) => + static String m60(id) => "Tu ${id} ya está vinculada a otra cuenta de Ente.\nSi deseas utilizar tu ${id} con esta cuenta, ponte en contacto con nuestro servicio de asistencia\'\'"; - static String m60(endDate) => "Tu suscripción se cancelará el ${endDate}"; + static String m61(endDate) => "Tu suscripción se cancelará el ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} recuerdos conservados"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "También obtienen ${storageAmountInGB} GB"; - static String m63(email) => "Este es el ID de verificación de ${email}"; + static String m64(email) => "Este es el ID de verificación de ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 día', other: '${count} días')}"; - static String m65(endDate) => "Válido hasta ${endDate}"; + static String m66(endDate) => "Válido hasta ${endDate}"; - static String m66(email) => "Verificar ${email}"; + static String m67(email) => "Verificar ${email}"; - static String m67(email) => + static String m68(email) => "Hemos enviado un correo a ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} año atrás', other: '${count} años atrás')}"; - static String m69(storageSaved) => "¡Has liberado ${storageSaved} con éxito!"; + static String m70(storageSaved) => "¡Has liberado ${storageSaved} con éxito!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -1094,7 +1094,7 @@ class MessageLookup extends MessageLookupByLibrary { "Contraseña cambiada correctamente"), "passwordLock": MessageLookupByLibrary.simpleMessage("Bloqueo por contraseña"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "No almacenamos esta contraseña, así que si la olvidas, no podemos descifrar tus datos"), "paymentDetails": @@ -1102,7 +1102,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("Pago fallido"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Lamentablemente tu pago falló. Por favor, ¡contacta con el soporte técnico y te ayudaremos!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Elementos pendientes"), "pendingSync": @@ -1131,7 +1131,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Reproducir álbum en TV"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Suscripción en la PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1143,12 +1143,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Por favor, contacta a soporte técnico si el problema persiste"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Por favor, concede permiso"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Por favor, vuelve a iniciar sesión"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Por favor, inténtalo nuevamente"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1185,7 +1185,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Evalúa la aplicación"), "rateUs": MessageLookupByLibrary.simpleMessage("Califícanos"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Recuperar cuenta"), @@ -1220,7 +1220,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Dale este código a tus amigos"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Se inscriben a un plan pagado"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Referidos"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Las referencias están actualmente en pausa"), @@ -1247,7 +1247,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Eliminar enlace"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Quitar participante"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage( "Eliminar etiqueta de persona"), "removePublicLink": @@ -1263,7 +1263,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Renombrar archivo"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renovar suscripción"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Reportar un error"), "reportBug": MessageLookupByLibrary.simpleMessage("Reportar error"), "resendEmail": @@ -1334,7 +1334,7 @@ class MessageLookup extends MessageLookupByLibrary { "Agrupar las fotos que se tomaron cerca de la localización de una foto"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Invita a gente y verás todas las fotos compartidas aquí"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Seguridad"), "selectALocation": MessageLookupByLibrary.simpleMessage("Seleccionar una ubicación"), @@ -1363,8 +1363,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Enviar"), "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar correo electrónico"), @@ -1395,16 +1395,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Compartir un álbum ahora"), "shareLink": MessageLookupByLibrary.simpleMessage("Compartir enlace"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Comparte sólo con la gente que quieres"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Descarga Ente para que podamos compartir fácilmente fotos y videos en calidad original.\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Compartir con usuarios fuera de Ente"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Comparte tu primer álbum"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1416,7 +1416,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nuevas fotos compartidas"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Recibir notificaciones cuando alguien agrega una foto a un álbum compartido contigo"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Compartido conmigo"), "sharedWithYou": @@ -1432,11 +1432,11 @@ class MessageLookup extends MessageLookupByLibrary { "Cerrar la sesión de otros dispositivos"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Estoy de acuerdo con los términos del servicio y la política de privacidad"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Se borrará de todos los álbumes."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Omitir"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1481,13 +1481,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Almacenamiento"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familia"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Usted"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Límite de datos excedido"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Segura"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Suscribirse"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Parece que tu suscripción ha caducado. Por favor, suscríbete para habilitar el compartir."), @@ -1504,7 +1504,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Sugerir una característica"), "support": MessageLookupByLibrary.simpleMessage("Soporte"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronización detenida"), "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), @@ -1533,7 +1533,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Estos elementos se eliminarán de tu dispositivo."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Se borrarán de todos los álbumes."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1549,7 +1549,7 @@ class MessageLookup extends MessageLookupByLibrary { "Este correo electrónico ya está en uso"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Esta imagen no tiene datos exif"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Esta es tu ID de verificación"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1570,7 +1570,7 @@ class MessageLookup extends MessageLookupByLibrary { "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Tamaño total"), "trash": MessageLookupByLibrary.simpleMessage("Papelera"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("Recortar"), "tryAgain": MessageLookupByLibrary.simpleMessage("Inténtalo de nuevo"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1625,7 +1625,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Usar foto seleccionada"), "usedSpace": MessageLookupByLibrary.simpleMessage("Espacio usado"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Verificación fallida, por favor inténtalo de nuevo"), @@ -1634,7 +1634,7 @@ class MessageLookup extends MessageLookupByLibrary { "verify": MessageLookupByLibrary.simpleMessage("Verificar"), "verifyEmail": MessageLookupByLibrary.simpleMessage( "Verificar correo electrónico"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Verificar clave de acceso"), @@ -1671,13 +1671,13 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "No admitimos la edición de fotos y álbumes que aún no son tuyos"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Poco segura"), "welcomeBack": MessageLookupByLibrary.simpleMessage("¡Bienvenido de nuevo!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Qué hay de nuevo"), "yearly": MessageLookupByLibrary.simpleMessage("Anualmente"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Sí"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sí, cancelar"), "yesConvertToViewer": @@ -1707,7 +1707,7 @@ class MessageLookup extends MessageLookupByLibrary { "No puedes compartir contigo mismo"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "No tienes ningún elemento archivado."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Tu cuenta ha sido eliminada"), "yourMap": MessageLookupByLibrary.simpleMessage("Tu mapa"), diff --git a/mobile/lib/generated/intl/messages_fr.dart b/mobile/lib/generated/intl/messages_fr.dart index fc95fa5408..5812e22671 100644 --- a/mobile/lib/generated/intl/messages_fr.dart +++ b/mobile/lib/generated/intl/messages_fr.dart @@ -120,92 +120,92 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Déplacé avec succès vers ${albumName}"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Sécurité du mot de passe : ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Veuillez contacter le support ${providerName} si vous avez été facturé"; - static String m39(endDate) => + static String m40(endDate) => "Essai gratuit valable jusqu\'à ${endDate}.\nVous pouvez choisir un plan payant par la suite."; - static String m40(toEmail) => "Merci de nous envoyer un e-mail à ${toEmail}"; + static String m41(toEmail) => "Merci de nous envoyer un e-mail à ${toEmail}"; - static String m41(toEmail) => "Envoyez les logs à ${toEmail}"; + static String m42(toEmail) => "Envoyez les logs à ${toEmail}"; - static String m42(storeName) => "Notez-nous sur ${storeName}"; + static String m43(storeName) => "Notez-nous sur ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Vous recevez tous les deux ${storageInGB} GB* gratuits"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} sera retiré de cet album partagé\n\nToutes les photos ajoutées par eux seront également retirées de l\'album"; - static String m45(endDate) => "Renouvellement le ${endDate}"; + static String m46(endDate) => "Renouvellement le ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} résultat trouvé', other: '${count} résultats trouvés')}"; - static String m47(count) => "${count} sélectionné(s)"; + static String m48(count) => "${count} sélectionné(s)"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} sélectionné(s) (${yourCount} à vous)"; - static String m49(verificationID) => + static String m50(verificationID) => "Voici mon ID de vérification : ${verificationID} pour ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hé, pouvez-vous confirmer qu\'il s\'agit de votre ID de vérification ente.io : ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "code de parrainage ente : ${referralCode} \n\nAppliquez le dans Paramètres → Général → Références pour obtenir ${referralStorageInGB} Go gratuitement après votre inscription à un plan payant\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Partagez avec des personnes spécifiques', one: 'Partagé avec 1 personne', other: 'Partagé avec ${numberOfPeople} des gens')}"; - static String m53(emailIDs) => "Partagé avec ${emailIDs}"; + static String m54(emailIDs) => "Partagé avec ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Elle ${fileType} sera supprimée de votre appareil."; - static String m55(fileType) => + static String m56(fileType) => "Cette ${fileType} est à la fois sur ente et sur votre appareil."; - static String m56(fileType) => "Ce ${fileType} sera supprimé de ente."; + static String m57(fileType) => "Ce ${fileType} sera supprimé de ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} Go"; + static String m58(storageAmountInGB) => "${storageAmountInGB} Go"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} sur ${totalAmount} ${totalStorageUnit} utilisé"; - static String m59(id) => + static String m60(id) => "Votre ${id} est déjà lié à un autre compte ente.\nSi vous souhaitez utiliser votre ${id} avec ce compte, veuillez contacter notre support"; - static String m60(endDate) => "Votre abonnement sera annulé le ${endDate}"; + static String m61(endDate) => "Votre abonnement sera annulé le ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} souvenirs préservés"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Ils obtiennent aussi ${storageAmountInGB} Go"; - static String m63(email) => "Ceci est l\'ID de vérification de ${email}"; + static String m64(email) => "Ceci est l\'ID de vérification de ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '0 jour', one: '1 jour', other: '${count} jours')}"; - static String m65(endDate) => "Valable jusqu\'au ${endDate}"; + static String m66(endDate) => "Valable jusqu\'au ${endDate}"; - static String m66(email) => "Vérifier ${email}"; + static String m67(email) => "Vérifier ${email}"; - static String m67(email) => + static String m68(email) => "Nous avons envoyé un e-mail à ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: 'il y a ${count} an', other: 'il y a ${count} ans')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "Vous avez libéré ${storageSaved} avec succès !"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -1004,14 +1004,14 @@ class MessageLookup extends MessageLookupByLibrary { "Le mot de passe a été modifié"), "passwordLock": MessageLookupByLibrary.simpleMessage("Mot de passe verrou"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Nous ne stockons pas ce mot de passe, donc si vous l\'oubliez, nous ne pouvons pas déchiffrer vos données"), "paymentDetails": MessageLookupByLibrary.simpleMessage("Détails de paiement"), "paymentFailed": MessageLookupByLibrary.simpleMessage("Échec du paiement"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingSync": MessageLookupByLibrary.simpleMessage("Synchronisation en attente"), "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( @@ -1035,7 +1035,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sélectionner le point central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Épingler l\'album"), "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abonnement au PlayStore"), "pleaseContactSupportAndWeWillBeHappyToHelp": @@ -1044,12 +1044,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Merci de contacter l\'assistance si cette erreur persiste"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Veuillez accorder la permission"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Veuillez vous reconnecter"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Veuillez réessayer"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1085,7 +1085,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Évaluer l\'application"), "rateUs": MessageLookupByLibrary.simpleMessage("Évaluez-nous"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Récupérer"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Récupérer un compte"), @@ -1119,7 +1119,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Donnez ce code à vos amis"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ils s\'inscrivent à une offre payante"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Parrainages"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Les recommandations sont actuellement en pause"), @@ -1145,7 +1145,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Supprimer le lien"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Supprimer le participant"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "removePublicLink": @@ -1163,7 +1163,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Renommer le fichier"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renouveler l’abonnement"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Signaler un bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Signaler un bug"), "resendEmail": @@ -1229,7 +1229,7 @@ class MessageLookup extends MessageLookupByLibrary { "Grouper les photos qui sont prises dans un certain angle d\'une photo"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Invitez des gens, et vous verrez ici toutes les photos qu\'ils partagent"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Sécurité"), "selectALocation": MessageLookupByLibrary.simpleMessage("Select a location"), @@ -1258,8 +1258,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Les éléments sélectionnés seront supprimés de tous les albums et déplacés dans la corbeille."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Envoyer"), "sendEmail": MessageLookupByLibrary.simpleMessage("Envoyer un e-mail"), "sendInvite": @@ -1288,16 +1288,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage( "Partagez un album maintenant"), "shareLink": MessageLookupByLibrary.simpleMessage("Partager le lien"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Partager uniquement avec les personnes que vous voulez"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Téléchargez ente pour que nous puissions facilement partager des photos et des vidéos de qualité originale\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Partager avec des utilisateurs non-ente"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Partagez votre premier album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1308,7 +1308,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nouvelles photos partagées"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Recevoir des notifications quand quelqu\'un ajoute une photo à un album partagé dont vous faites partie"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Partagés avec moi"), "sharedWithYou": @@ -1318,11 +1318,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Montrer les souvenirs"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "J\'accepte les conditions d\'utilisation et la politique de confidentialité"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Elle sera supprimée de tous les albums."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Ignorer"), "social": MessageLookupByLibrary.simpleMessage("Réseaux Sociaux"), "someItemsAreInBothEnteAndYourDevice": @@ -1362,14 +1362,14 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Stockage"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Famille"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Vous"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Limite de stockage atteinte"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Securité forte"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("S\'abonner"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Il semble que votre abonnement ait expiré. Veuillez vous abonner pour activer le partage."), @@ -1386,7 +1386,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage( "Suggérer des fonctionnalités"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisation arrêtée ?"), "syncing": MessageLookupByLibrary.simpleMessage( @@ -1416,7 +1416,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Ces éléments seront supprimés de votre appareil."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Ils seront supprimés de tous les albums."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1432,7 +1432,7 @@ class MessageLookup extends MessageLookupByLibrary { "Cette adresse mail est déjà utilisé"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Cette image n\'a pas de données exif"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Ceci est votre ID de vérification"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1453,7 +1453,7 @@ class MessageLookup extends MessageLookupByLibrary { "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Taille totale"), "trash": MessageLookupByLibrary.simpleMessage("Corbeille"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "tryAgain": MessageLookupByLibrary.simpleMessage("Réessayer"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( "Activez la sauvegarde pour télécharger automatiquement les fichiers ajoutés à ce dossier de l\'appareil sur ente."), @@ -1511,7 +1511,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage( "Utiliser la photo sélectionnée"), "usedSpace": MessageLookupByLibrary.simpleMessage("Mémoire utilisée"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "La vérification a échouée, veuillez réessayer"), @@ -1520,7 +1520,7 @@ class MessageLookup extends MessageLookupByLibrary { "verify": MessageLookupByLibrary.simpleMessage("Vérifier"), "verifyEmail": MessageLookupByLibrary.simpleMessage("Vérifier l\'email"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Vérifier"), "verifyPassword": MessageLookupByLibrary.simpleMessage("Vérifier le mot de passe"), @@ -1549,11 +1549,11 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Nous ne prenons pas en charge l\'édition des photos et des albums que vous ne possédez pas encore"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Securité Faible"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bienvenue !"), "yearly": MessageLookupByLibrary.simpleMessage("Annuel"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Oui"), "yesCancel": MessageLookupByLibrary.simpleMessage("Oui, annuler"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -1584,7 +1584,7 @@ class MessageLookup extends MessageLookupByLibrary { "Vous ne pouvez pas partager avec vous-même"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Vous n\'avez aucun élément archivé."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Votre compte a été supprimé"), "yourMap": MessageLookupByLibrary.simpleMessage("Votre carte"), diff --git a/mobile/lib/generated/intl/messages_it.dart b/mobile/lib/generated/intl/messages_it.dart index 8793aeac73..2acce1be64 100644 --- a/mobile/lib/generated/intl/messages_it.dart +++ b/mobile/lib/generated/intl/messages_it.dart @@ -118,89 +118,89 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Spostato con successo su ${albumName}"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Sicurezza password: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Si prega di parlare con il supporto di ${providerName} se ti è stato addebitato qualcosa"; - static String m39(endDate) => + static String m40(endDate) => "Prova gratuita valida fino al ${endDate}.\nPuoi scegliere un piano a pagamento in seguito."; - static String m40(toEmail) => "Per favore invia un\'email a ${toEmail}"; + static String m41(toEmail) => "Per favore invia un\'email a ${toEmail}"; - static String m41(toEmail) => "Invia i log a \n${toEmail}"; + static String m42(toEmail) => "Invia i log a \n${toEmail}"; - static String m42(storeName) => "Valutaci su ${storeName}"; + static String m43(storeName) => "Valutaci su ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Ottenete entrambi ${storageInGB} GB* gratis"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} verrà rimosso da questo album condiviso\n\nQualsiasi foto aggiunta dall\'utente verrà rimossa dall\'album"; - static String m45(endDate) => "Si rinnova il ${endDate}"; + static String m46(endDate) => "Si rinnova il ${endDate}"; - static String m47(count) => "${count} selezionati"; + static String m48(count) => "${count} selezionati"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} selezionato (${yourCount} tuoi)"; - static String m49(verificationID) => + static String m50(verificationID) => "Ecco il mio ID di verifica: ${verificationID} per ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hey, puoi confermare che questo è il tuo ID di verifica: ${verificationID} su ente.io"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "ente referral code: ${referralCode} \n\nApplicalo in Impostazioni → Generale → Referral per ottenere ${referralStorageInGB} GB gratis dopo la registrazione di un piano a pagamento\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Condividi con persone specifiche', one: 'Condividi con una persona', other: 'Condividi con ${numberOfPeople} persone')}"; - static String m53(emailIDs) => "Condiviso con ${emailIDs}"; + static String m54(emailIDs) => "Condiviso con ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Questo ${fileType} verrà eliminato dal tuo dispositivo."; - static String m55(fileType) => + static String m56(fileType) => "Questo ${fileType} è sia su ente che sul tuo dispositivo."; - static String m56(fileType) => "Questo ${fileType} verrà eliminato su ente."; + static String m57(fileType) => "Questo ${fileType} verrà eliminato su ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} di ${totalAmount} ${totalStorageUnit} utilizzati"; - static String m59(id) => + static String m60(id) => "Il tuo ${id} è già collegato ad un altro account ente.\nSe desideri utilizzare il tuo ${id} con questo account, contatta il nostro supporto\'\'"; - static String m60(endDate) => "L\'abbonamento verrà cancellato il ${endDate}"; + static String m61(endDate) => "L\'abbonamento verrà cancellato il ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} ricordi conservati"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Anche loro riceveranno ${storageAmountInGB} GB"; - static String m63(email) => "Questo è l\'ID di verifica di ${email}"; + static String m64(email) => "Questo è l\'ID di verifica di ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 giorno', other: '${count} giorni')}"; - static String m65(endDate) => "Valido fino al ${endDate}"; + static String m66(endDate) => "Valido fino al ${endDate}"; - static String m66(email) => "Verifica ${email}"; + static String m67(email) => "Verifica ${email}"; - static String m67(email) => + static String m68(email) => "Abbiamo inviato una mail a ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} anno fa', other: '${count} anni fa')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "Hai liberato con successo ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -971,14 +971,14 @@ class MessageLookup extends MessageLookupByLibrary { "Password modificata con successo"), "passwordLock": MessageLookupByLibrary.simpleMessage("Blocco con password"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Noi non memorizziamo la tua password, quindi se te la dimentichi, non possiamo decriptare i tuoi dati"), "paymentDetails": MessageLookupByLibrary.simpleMessage("Dettagli di Pagamento"), "paymentFailed": MessageLookupByLibrary.simpleMessage("Pagamento non riuscito"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingSync": MessageLookupByLibrary.simpleMessage("Sincronizzazione in sospeso"), "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( @@ -999,7 +999,7 @@ class MessageLookup extends MessageLookupByLibrary { "Selezionare il punto centrale"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fissa l\'album"), "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abbonamento su PlayStore"), "pleaseContactSupportAndWeWillBeHappyToHelp": @@ -1008,12 +1008,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Riprova. Se il problema persiste, ti invitiamo a contattare l\'assistenza"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Concedi i permessi"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Effettua nuovamente l\'accesso"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Riprova"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage( @@ -1047,7 +1047,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Invia ticket"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Valuta l\'app"), "rateUs": MessageLookupByLibrary.simpleMessage("Lascia una recensione"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Recupera"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Recupera account"), @@ -1082,7 +1082,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Condividi questo codice con i tuoi amici"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Si iscrivono per un piano a pagamento"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Invita un Amico"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "I referral code sono attualmente in pausa"), @@ -1106,7 +1106,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Elimina link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Rimuovi partecipante"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "removePublicLink": @@ -1122,7 +1122,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Rinomina file"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Rinnova abbonamento"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Segnala un bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Segnala un bug"), "resendEmail": MessageLookupByLibrary.simpleMessage("Rinvia email"), @@ -1188,8 +1188,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Gli elementi selezionati verranno eliminati da tutti gli album e spostati nel cestino."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Invia"), "sendEmail": MessageLookupByLibrary.simpleMessage("Invia email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Invita"), @@ -1216,16 +1216,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Condividi un album"), "shareLink": MessageLookupByLibrary.simpleMessage("Condividi link"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Condividi solo con le persone che vuoi"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Scarica ente in modo da poter facilmente condividere foto e video senza perdita di qualità\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Condividi con utenti che non hanno un account ente"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Condividi il tuo primo album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1236,7 +1236,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nuove foto condivise"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Ricevi notifiche quando qualcuno aggiunge una foto a un album condiviso, di cui fai parte"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Condivisi con me"), "sharedWithYou": @@ -1246,11 +1246,11 @@ class MessageLookup extends MessageLookupByLibrary { "showMemories": MessageLookupByLibrary.simpleMessage("Mostra ricordi"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Accetto i termini di servizio e la politica sulla privacy"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Verrà eliminato da tutti gli album."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Salta"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1291,13 +1291,13 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Famiglia"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Tu"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Limite d\'archiviazione superato"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Iscriviti"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Sembra che il tuo abbonamento sia scaduto. Iscriviti per abilitare la condivisione."), @@ -1314,7 +1314,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Suggerisci una funzionalità"), "support": MessageLookupByLibrary.simpleMessage("Assistenza"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronizzazione interrotta"), "syncing": MessageLookupByLibrary.simpleMessage( @@ -1344,7 +1344,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Questi file verranno eliminati dal tuo dispositivo."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Verranno eliminati da tutti gli album."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1361,7 +1361,7 @@ class MessageLookup extends MessageLookupByLibrary { "Questo indirizzo email è già registrato"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Questa immagine non ha dati EXIF"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Questo è il tuo ID di verifica"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1382,7 +1382,7 @@ class MessageLookup extends MessageLookupByLibrary { "total": MessageLookupByLibrary.simpleMessage("totale"), "totalSize": MessageLookupByLibrary.simpleMessage("Dimensioni totali"), "trash": MessageLookupByLibrary.simpleMessage("Cestino"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "tryAgain": MessageLookupByLibrary.simpleMessage("Riprova"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( "Attiva il backup per caricare automaticamente i file aggiunti in questa cartella del dispositivo su ente."), @@ -1439,7 +1439,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Usa la foto selezionata"), "usedSpace": MessageLookupByLibrary.simpleMessage("Spazio utilizzato"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Verifica fallita, per favore prova di nuovo"), @@ -1447,7 +1447,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("ID di verifica"), "verify": MessageLookupByLibrary.simpleMessage("Verifica"), "verifyEmail": MessageLookupByLibrary.simpleMessage("Verifica email"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verifica"), "verifyPassword": MessageLookupByLibrary.simpleMessage("Verifica password"), @@ -1474,11 +1474,11 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Non puoi modificare foto e album che non possiedi"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Debole"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bentornato/a!"), "yearly": MessageLookupByLibrary.simpleMessage("Annuale"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Si"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sì, cancella"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -1508,7 +1508,7 @@ class MessageLookup extends MessageLookupByLibrary { "Non puoi condividere con te stesso"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Non hai nulla di archiviato."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Il tuo account è stato eliminato"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map"), diff --git a/mobile/lib/generated/intl/messages_nl.dart b/mobile/lib/generated/intl/messages_nl.dart index 6b16b1bcc5..6ffb2b0eab 100644 --- a/mobile/lib/generated/intl/messages_nl.dart +++ b/mobile/lib/generated/intl/messages_nl.dart @@ -127,94 +127,96 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Succesvol verplaatst naar ${albumName}"; - static String m37(passwordStrengthValue) => + static String m37(name) => "Niet ${name}?"; + + static String m38(passwordStrengthValue) => "Wachtwoord sterkte: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Praat met ${providerName} klantenservice als u in rekening bent gebracht"; - static String m39(endDate) => + static String m40(endDate) => "Gratis proefperiode geldig tot ${endDate}.\nU kunt naderhand een betaald abonnement kiezen."; - static String m40(toEmail) => "Stuur ons een e-mail op ${toEmail}"; + static String m41(toEmail) => "Stuur ons een e-mail op ${toEmail}"; - static String m41(toEmail) => + static String m42(toEmail) => "Verstuur de logboeken alstublieft naar ${toEmail}"; - static String m42(storeName) => "Beoordeel ons op ${storeName}"; + static String m43(storeName) => "Beoordeel ons op ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "Jullie krijgen allebei ${storageInGB} GB* gratis"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} zal worden verwijderd uit dit gedeelde album\n\nAlle door hen toegevoegde foto\'s worden ook uit het album verwijderd"; - static String m45(endDate) => "Wordt verlengd op ${endDate}"; + static String m46(endDate) => "Wordt verlengd op ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} resultaat gevonden', other: '${count} resultaten gevonden')}"; - static String m47(count) => "${count} geselecteerd"; + static String m48(count) => "${count} geselecteerd"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} geselecteerd (${yourCount} van jou)"; - static String m49(verificationID) => + static String m50(verificationID) => "Hier is mijn verificatie-ID: ${verificationID} voor ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Hey, kunt u bevestigen dat dit uw ente.io verificatie-ID is: ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Ente verwijzingscode: ${referralCode} \n\nPas het toe bij Instellingen → Algemeen → Verwijzingen om ${referralStorageInGB} GB gratis te krijgen nadat je je hebt aangemeld voor een betaald abonnement\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Deel met specifieke mensen', one: 'Gedeeld met 1 persoon', other: 'Gedeeld met ${numberOfPeople} mensen')}"; - static String m53(emailIDs) => "Gedeeld met ${emailIDs}"; + static String m54(emailIDs) => "Gedeeld met ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Deze ${fileType} zal worden verwijderd van jouw apparaat."; - static String m55(fileType) => + static String m56(fileType) => "Deze ${fileType} staat zowel in Ente als op jouw apparaat."; - static String m56(fileType) => + static String m57(fileType) => "Deze ${fileType} zal worden verwijderd uit Ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} van ${totalAmount} ${totalStorageUnit} gebruikt"; - static String m59(id) => + static String m60(id) => "Jouw ${id} is al aan een ander Ente account gekoppeld.\nAls je jouw ${id} wilt gebruiken met dit account, neem dan contact op met onze klantenservice"; - static String m60(endDate) => "Uw abonnement loopt af op ${endDate}"; + static String m61(endDate) => "Uw abonnement loopt af op ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} herinneringen bewaard"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Zij krijgen ook ${storageAmountInGB} GB"; - static String m63(email) => "Dit is de verificatie-ID van ${email}"; + static String m64(email) => "Dit is de verificatie-ID van ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 dag', other: '${count} dagen')}"; - static String m65(endDate) => "Geldig tot ${endDate}"; + static String m66(endDate) => "Geldig tot ${endDate}"; - static String m66(email) => "Verifieer ${email}"; + static String m67(email) => "Verifieer ${email}"; - static String m67(email) => + static String m68(email) => "We hebben een e-mail gestuurd naar ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} jaar geleden', other: '${count} jaar geleden')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "Je hebt ${storageSaved} succesvol vrijgemaakt!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -229,6 +231,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ik begrijp dat als ik mijn wachtwoord verlies, ik mijn gegevens kan verliezen omdat mijn gegevens end-to-end versleuteld zijn."), "activeSessions": MessageLookupByLibrary.simpleMessage("Actieve sessies"), + "addAName": MessageLookupByLibrary.simpleMessage("Een naam toevoegen"), "addANewEmail": MessageLookupByLibrary.simpleMessage("Nieuw e-mailadres toevoegen"), "addCollaborator": @@ -307,7 +310,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Verificatie vereist"), - "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLock": MessageLookupByLibrary.simpleMessage("App-vergrendeling"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Toepassen"), @@ -373,6 +376,8 @@ class MessageLookup extends MessageLookupByLibrary { "Je zult de beschikbare Cast apparaten hier zien."), "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( "Zorg ervoor dat lokale netwerkrechten zijn ingeschakeld voor de Ente Photos app, in Instellingen."), + "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( + "Door een technische storing bent u uitgelogd. Onze excuses voor het ongemak."), "autoPair": MessageLookupByLibrary.simpleMessage("Automatisch koppelen"), "autoPairDesc": MessageLookupByLibrary.simpleMessage( @@ -429,6 +434,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Controleer op updates"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( "Controleer je inbox (en spam) om verificatie te voltooien"), + "checkStatus": + MessageLookupByLibrary.simpleMessage("Status controleren"), "checking": MessageLookupByLibrary.simpleMessage("Controleren..."), "claimFreeStorage": MessageLookupByLibrary.simpleMessage("Claim gratis opslag"), @@ -450,7 +457,7 @@ class MessageLookup extends MessageLookupByLibrary { "clubByFileName": MessageLookupByLibrary.simpleMessage("Samenvoegen op bestandsnaam"), "clusteringProgress": - MessageLookupByLibrary.simpleMessage("Clustering progress"), + MessageLookupByLibrary.simpleMessage("Voortgang clusteren"), "codeAppliedPageTitle": MessageLookupByLibrary.simpleMessage("Code toegepast"), "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -535,6 +542,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Link aanmaken..."), "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( "Belangrijke update beschikbaar"), + "crop": MessageLookupByLibrary.simpleMessage("Bijsnijden"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("Huidig gebruik is "), "custom": MessageLookupByLibrary.simpleMessage("Aangepast"), @@ -608,7 +616,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Voer de code in"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Bestanden toegevoegd aan dit album van dit apparaat zullen automatisch geüpload worden naar Ente."), - "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "deviceLock": + MessageLookupByLibrary.simpleMessage("Apparaat vergrendeld"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Schakel de schermvergrendeling van het apparaat uit wanneer Ente op de voorgrond is en er een back-up aan de gang is. Dit is normaal gesproken niet nodig, maar kan grote uploads en initiële imports van grote mappen sneller laten verlopen."), "deviceNotFound": @@ -702,7 +711,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Voer wachtwoord in"), "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( "Voer een wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen"), - "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Naam van persoon invoeren"), + "enterPin": MessageLookupByLibrary.simpleMessage("PIN invoeren"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("Voer verwijzingscode in"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -728,7 +739,7 @@ class MessageLookup extends MessageLookupByLibrary { "exportYourData": MessageLookupByLibrary.simpleMessage("Exporteer je gegevens"), "faceRecognition": - MessageLookupByLibrary.simpleMessage("Face recognition"), + MessageLookupByLibrary.simpleMessage("Gezichtsherkenning"), "faces": MessageLookupByLibrary.simpleMessage("Gezichten"), "failedToApplyCode": MessageLookupByLibrary.simpleMessage("Code toepassen mislukt"), @@ -772,12 +783,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bestanden verwijderd"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( "Bestand opgeslagen in galerij"), + "findPeopleByName": + MessageLookupByLibrary.simpleMessage("Mensen snel op naam zoeken"), "flip": MessageLookupByLibrary.simpleMessage("Omdraaien"), "forYourMemories": MessageLookupByLibrary.simpleMessage("voor uw herinneringen"), "forgotPassword": MessageLookupByLibrary.simpleMessage("Wachtwoord vergeten"), - "foundFaces": MessageLookupByLibrary.simpleMessage("Found faces"), + "foundFaces": + MessageLookupByLibrary.simpleMessage("Gezichten gevonden"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Gratis opslag geclaimd"), "freeStorageOnReferralSuccess": m26, @@ -789,6 +803,8 @@ class MessageLookup extends MessageLookupByLibrary { "freeUpAmount": m29, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Apparaatruimte vrijmaken"), + "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( + "Bespaar ruimte op je apparaat door bestanden die al geback-upt zijn te wissen."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Ruimte vrijmaken"), "freeUpSpaceSaving": m30, "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( @@ -840,7 +856,7 @@ class MessageLookup extends MessageLookupByLibrary { "indexedItems": MessageLookupByLibrary.simpleMessage("Geïndexeerde bestanden"), "indexingIsPaused": MessageLookupByLibrary.simpleMessage( - "Indexing is paused, will automatically resume when device is ready"), + "Indexeren is gepauzeerd. Het zal automatisch hervatten wanneer het apparaat klaar is."), "insecureDevice": MessageLookupByLibrary.simpleMessage("Onveilig apparaat"), "installManually": @@ -883,6 +899,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Familie abonnement verlaten"), "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage("Gedeeld album verlaten?"), + "left": MessageLookupByLibrary.simpleMessage("Links"), "light": MessageLookupByLibrary.simpleMessage("Licht"), "lightTheme": MessageLookupByLibrary.simpleMessage("Licht"), "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -935,6 +952,10 @@ class MessageLookup extends MessageLookupByLibrary { "lockscreen": MessageLookupByLibrary.simpleMessage("Vergrendelscherm"), "logInLabel": MessageLookupByLibrary.simpleMessage("Inloggen"), "loggingOut": MessageLookupByLibrary.simpleMessage("Uitloggen..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("Sessie verlopen"), + "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( + "Jouw sessie is verlopen. Log opnieuw in."), "loginTerms": MessageLookupByLibrary.simpleMessage( "Door op inloggen te klikken, ga ik akkoord met de gebruiksvoorwaarden en privacybeleid"), "logout": MessageLookupByLibrary.simpleMessage("Uitloggen"), @@ -968,6 +989,8 @@ class MessageLookup extends MessageLookupByLibrary { "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "memoryCount": m34, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), + "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( + "Houd er rekening mee dat dit zal resulteren in een hoger internet- en batterijverbruik totdat alle items zijn geïndexeerd."), "mobileWebDesktop": MessageLookupByLibrary.simpleMessage("Mobiel, Web, Desktop"), "moderateStrength": MessageLookupByLibrary.simpleMessage("Matig"), @@ -995,7 +1018,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nieuw album"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nieuw bij Ente"), "newest": MessageLookupByLibrary.simpleMessage("Nieuwste"), - "next": MessageLookupByLibrary.simpleMessage("Next"), + "next": MessageLookupByLibrary.simpleMessage("Volgende"), "no": MessageLookupByLibrary.simpleMessage("Nee"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Nog geen albums gedeeld door jou"), @@ -1026,8 +1049,9 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Geen resultaten"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Geen resultaten gevonden"), - "noSystemLockFound": - MessageLookupByLibrary.simpleMessage("No system lock found"), + "noSystemLockFound": MessageLookupByLibrary.simpleMessage( + "Geen systeemvergrendeling gevonden"), + "notPersonLabel": m37, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("Nog niets met je gedeeld"), "nothingToSeeHere": @@ -1055,6 +1079,8 @@ class MessageLookup extends MessageLookupByLibrary { "pairWithPin": MessageLookupByLibrary.simpleMessage("Koppelen met PIN"), "pairingComplete": MessageLookupByLibrary.simpleMessage("Koppeling voltooid"), + "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( + "Verificatie is nog in behandeling"), "passkey": MessageLookupByLibrary.simpleMessage("Passkey"), "passkeyAuthTitle": MessageLookupByLibrary.simpleMessage("Passkey verificatie"), @@ -1062,7 +1088,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Wachtwoord succesvol aangepast"), "passwordLock": MessageLookupByLibrary.simpleMessage("Wachtwoord slot"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Wij slaan dit wachtwoord niet op, dus als je het vergeet, kunnen we je gegevens niet ontsleutelen"), "paymentDetails": @@ -1071,11 +1097,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Betaling mislukt"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Helaas is je betaling mislukt. Neem contact op met support zodat we je kunnen helpen!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Bestanden in behandeling"), "pendingSync": MessageLookupByLibrary.simpleMessage( "Synchronisatie in behandeling"), + "people": MessageLookupByLibrary.simpleMessage("Personen"), "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( "Mensen die jouw code gebruiken"), "permDeleteWarning": MessageLookupByLibrary.simpleMessage( @@ -1097,10 +1124,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Kies middelpunt"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Album bovenaan vastzetten"), - "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN vergrendeling"), "playOnTv": MessageLookupByLibrary.simpleMessage("Album afspelen op TV"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore abonnement"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1112,12 +1139,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Neem contact op met klantenservice als het probleem aanhoudt"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Geef alstublieft toestemming"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Log opnieuw in"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Probeer het nog eens"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1152,7 +1179,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Meld probleem"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Beoordeel de app"), "rateUs": MessageLookupByLibrary.simpleMessage("Beoordeel ons"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Herstellen"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Account herstellen"), @@ -1178,15 +1205,16 @@ class MessageLookup extends MessageLookupByLibrary { "Wachtwoord opnieuw instellen"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), "reenterPassword": - MessageLookupByLibrary.simpleMessage("Re-enter password"), - "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + MessageLookupByLibrary.simpleMessage("Wachtwoord opnieuw invoeren"), + "reenterPin": + MessageLookupByLibrary.simpleMessage("PIN opnieuw invoeren"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Verwijs vrienden en 2x uw abonnement"), "referralStep1": MessageLookupByLibrary.simpleMessage( "1. Geef deze code aan je vrienden"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ze registreren voor een betaald plan"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Referenties"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Verwijzingen zijn momenteel gepauzeerd"), @@ -1203,6 +1231,8 @@ class MessageLookup extends MessageLookupByLibrary { "remove": MessageLookupByLibrary.simpleMessage("Verwijder"), "removeDuplicates": MessageLookupByLibrary.simpleMessage("Duplicaten verwijderen"), + "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( + "Controleer en verwijder bestanden die exacte kopieën zijn."), "removeFromAlbum": MessageLookupByLibrary.simpleMessage("Verwijder uit album"), "removeFromAlbumTitle": @@ -1212,7 +1242,9 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Verwijder link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Deelnemer verwijderen"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Verwijder persoonslabel"), "removePublicLink": MessageLookupByLibrary.simpleMessage("Verwijder publieke link"), "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( @@ -1228,7 +1260,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bestandsnaam wijzigen"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Abonnement verlengen"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Een fout melden"), "reportBug": MessageLookupByLibrary.simpleMessage("Fout melden"), "resendEmail": @@ -1247,6 +1279,10 @@ class MessageLookup extends MessageLookupByLibrary { "retry": MessageLookupByLibrary.simpleMessage("Opnieuw"), "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( "Controleer en verwijder de bestanden die u denkt dat dubbel zijn."), + "reviewSuggestions": + MessageLookupByLibrary.simpleMessage("Suggesties beoordelen"), + "right": MessageLookupByLibrary.simpleMessage("Rechts"), + "rotate": MessageLookupByLibrary.simpleMessage("Roteren"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Roteer links"), "rotateRight": MessageLookupByLibrary.simpleMessage("Rechtsom draaien"), "safelyStored": @@ -1259,6 +1295,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Sla je herstelsleutel op als je dat nog niet gedaan hebt"), "saving": MessageLookupByLibrary.simpleMessage("Opslaan..."), + "savingEdits": + MessageLookupByLibrary.simpleMessage("Bewerken opslaan..."), "scanCode": MessageLookupByLibrary.simpleMessage("Scan code"), "scanThisBarcodeWithnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( @@ -1275,7 +1313,7 @@ class MessageLookup extends MessageLookupByLibrary { "searchDatesEmptySection": MessageLookupByLibrary.simpleMessage( "Zoeken op een datum, maand of jaar"), "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( - "Vind alle foto\'s van een persoon"), + "Mensen worden hier getoond als het indexeren klaar is"), "searchFileTypesAndNamesEmptySection": MessageLookupByLibrary.simpleMessage("Bestandstypen en namen"), "searchHint1": @@ -1291,7 +1329,7 @@ class MessageLookup extends MessageLookupByLibrary { "Foto\'s groeperen die in een bepaalde straal van een foto worden genomen"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Nodig mensen uit, en je ziet alle foto\'s die door hen worden gedeeld hier"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Beveiliging"), "selectALocation": MessageLookupByLibrary.simpleMessage("Selecteer een locatie"), @@ -1318,8 +1356,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Verzenden"), "sendEmail": MessageLookupByLibrary.simpleMessage("E-mail versturen"), "sendInvite": @@ -1335,8 +1373,9 @@ class MessageLookup extends MessageLookupByLibrary { "setCover": MessageLookupByLibrary.simpleMessage("Omslag instellen"), "setLabel": MessageLookupByLibrary.simpleMessage("Instellen"), "setNewPassword": - MessageLookupByLibrary.simpleMessage("Set new password"), - "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + MessageLookupByLibrary.simpleMessage("Nieuw wachtwoord instellen"), + "setNewPin": + MessageLookupByLibrary.simpleMessage("Nieuwe PIN instellen"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Wachtwoord instellen"), "setRadius": MessageLookupByLibrary.simpleMessage("Radius instellen"), @@ -1348,16 +1387,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Deel nu een album"), "shareLink": MessageLookupByLibrary.simpleMessage("Link delen"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Deel alleen met de mensen die u wilt"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Download Ente zodat we gemakkelijk foto\'s en video\'s in originele kwaliteit kunnen delen\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Delen met niet-Ente gebruikers"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Deel jouw eerste album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1368,7 +1407,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nieuwe gedeelde foto\'s"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Ontvang meldingen wanneer iemand een foto toevoegt aan een gedeeld album waar je deel van uitmaakt"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Gedeeld met mij"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Gedeeld met jou"), @@ -1383,11 +1422,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Log uit op andere apparaten"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Ik ga akkoord met de gebruiksvoorwaarden en privacybeleid"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Het wordt uit alle albums verwijderd."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Overslaan"), "social": MessageLookupByLibrary.simpleMessage("Sociale media"), "someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage( @@ -1429,13 +1468,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Opslagruimte"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Jij"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Opslaglimiet overschreden"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Sterk"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Abonneer"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Het lijkt erop dat je abonnement is verlopen. Abonneer om delen mogelijk te maken."), @@ -1452,7 +1491,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Features voorstellen"), "support": MessageLookupByLibrary.simpleMessage("Ondersteuning"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisatie gestopt"), "syncing": MessageLookupByLibrary.simpleMessage("Synchroniseren..."), @@ -1460,7 +1499,8 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("tik om te kopiëren"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Tik om code in te voeren"), - "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "tapToUnlock": + MessageLookupByLibrary.simpleMessage("Tik om te ontgrendelen"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beëindigen"), @@ -1481,7 +1521,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Deze bestanden zullen worden verwijderd van uw apparaat."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Ze zullen uit alle albums worden verwijderd."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1497,7 +1537,7 @@ class MessageLookup extends MessageLookupByLibrary { "Dit e-mailadres is al in gebruik"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Deze foto heeft geen exif gegevens"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage("Dit is uw verificatie-ID"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1507,7 +1547,7 @@ class MessageLookup extends MessageLookupByLibrary { "Dit zal je uitloggen van dit apparaat!"), "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( - "To enable app lock, please setup device passcode or screen lock in your system settings."), + "Om vergrendelscherm in te schakelen, moet u een toegangscode of schermvergrendeling instellen in uw systeeminstellingen."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Om een foto of video te verbergen"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( @@ -1515,11 +1555,12 @@ class MessageLookup extends MessageLookupByLibrary { "todaysLogs": MessageLookupByLibrary.simpleMessage("Logboeken van vandaag"), "tooManyIncorrectAttempts": - MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + MessageLookupByLibrary.simpleMessage("Te veel onjuiste pogingen"), "total": MessageLookupByLibrary.simpleMessage("totaal"), "totalSize": MessageLookupByLibrary.simpleMessage("Totale grootte"), "trash": MessageLookupByLibrary.simpleMessage("Prullenbak"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, + "trim": MessageLookupByLibrary.simpleMessage("Knippen"), "tryAgain": MessageLookupByLibrary.simpleMessage("Probeer opnieuw"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( "Schakel back-up in om bestanden die toegevoegd zijn aan deze map op dit apparaat automatisch te uploaden."), @@ -1567,6 +1608,8 @@ class MessageLookup extends MessageLookupByLibrary { "Tot 50% korting, tot 4 december."), "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( "Bruikbare opslag is beperkt door je huidige abonnement. Buitensporige geclaimde opslag zal automatisch bruikbaar worden wanneer je je abonnement upgrade."), + "useAsCover": + MessageLookupByLibrary.simpleMessage("Als cover gebruiken"), "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage( "Gebruik publieke links voor mensen die geen Ente account hebben"), "useRecoveryKey": @@ -1574,7 +1617,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Gebruik geselecteerde foto"), "usedSpace": MessageLookupByLibrary.simpleMessage("Gebruikte ruimte"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Verificatie mislukt, probeer het opnieuw"), @@ -1582,7 +1625,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Verificatie ID"), "verify": MessageLookupByLibrary.simpleMessage("Verifiëren"), "verifyEmail": MessageLookupByLibrary.simpleMessage("Bevestig e-mail"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verifiëren"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Bevestig passkey"), @@ -1600,6 +1643,10 @@ class MessageLookup extends MessageLookupByLibrary { "viewAll": MessageLookupByLibrary.simpleMessage("Alles weergeven"), "viewAllExifData": MessageLookupByLibrary.simpleMessage("Bekijk alle EXIF gegevens"), + "viewLargeFiles": + MessageLookupByLibrary.simpleMessage("Grote bestanden"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "Bekijk bestanden die de meeste opslagruimte verbruiken"), "viewLogs": MessageLookupByLibrary.simpleMessage("Logboeken bekijken"), "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Toon herstelsleutel"), @@ -1615,11 +1662,12 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "We ondersteunen het bewerken van foto\'s en albums waar je niet de eigenaar van bent nog niet"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Zwak"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Welkom terug!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("Nieuw"), "yearly": MessageLookupByLibrary.simpleMessage("Jaarlijks"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, opzeggen"), "yesConvertToViewer": @@ -1649,7 +1697,7 @@ class MessageLookup extends MessageLookupByLibrary { "Je kunt niet met jezelf delen"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "U heeft geen gearchiveerde bestanden."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Je account is verwijderd"), "yourMap": MessageLookupByLibrary.simpleMessage("Jouw kaart"), diff --git a/mobile/lib/generated/intl/messages_pl.dart b/mobile/lib/generated/intl/messages_pl.dart index 093efa6bc1..0d26436a56 100644 --- a/mobile/lib/generated/intl/messages_pl.dart +++ b/mobile/lib/generated/intl/messages_pl.dart @@ -26,7 +26,7 @@ class MessageLookup extends MessageLookupByLibrary { static String m1(count) => "${Intl.plural(count, zero: 'Add viewer', one: 'Add viewer', other: 'Add viewers')}"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Siła hasła: ${passwordStrengthValue}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -163,7 +163,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Hasło zostało pomyślnie zmienione"), "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Nie przechowujemy tego hasła, więc jeśli go zapomnisz, nie będziemy w stanie odszyfrować Twoich danych"), "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), diff --git a/mobile/lib/generated/intl/messages_pt.dart b/mobile/lib/generated/intl/messages_pt.dart index 02d3d41889..1be5a827f9 100644 --- a/mobile/lib/generated/intl/messages_pt.dart +++ b/mobile/lib/generated/intl/messages_pt.dart @@ -21,7 +21,7 @@ class MessageLookup extends MessageLookupByLibrary { String get localeName => 'pt'; static String m0(count) => - "${Intl.plural(count, zero: 'Adicionar colaborador', one: 'Adicionar coloborador', other: 'Adicionar colaboradores')}"; + "${Intl.plural(count, zero: 'Adicionar colaborador', one: 'Adicionar colaborador', other: 'Adicionar colaboradores')}"; static String m2(count) => "${Intl.plural(count, one: 'Adicionar item', other: 'Adicionar itens')}"; @@ -126,92 +126,94 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Movido com sucesso para ${albumName}"; - static String m37(passwordStrengthValue) => + static String m37(name) => "Não é ${name}?"; + + static String m38(passwordStrengthValue) => "Segurança da senha: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Por favor, fale com o suporte ${providerName} se você foi cobrado"; - static String m39(endDate) => + static String m40(endDate) => "Teste gratuito válido até ${endDate}.\nVocê pode escolher um plano pago depois."; - static String m40(toEmail) => + static String m41(toEmail) => "Por favor, envie-nos um e-mail para ${toEmail}"; - static String m41(toEmail) => "Por favor, envie os logs para \n${toEmail}"; + static String m42(toEmail) => "Por favor, envie os logs para \n${toEmail}"; - static String m42(storeName) => "Avalie-nos em ${storeName}"; + static String m43(storeName) => "Avalie-nos em ${storeName}"; - static String m43(storageInGB) => "3. Ambos ganham ${storageInGB} GB* grátis"; + static String m44(storageInGB) => "3. Ambos ganham ${storageInGB} GB* grátis"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por eles também serão removidas do álbum"; - static String m45(endDate) => "Renovação de assinatura em ${endDate}"; + static String m46(endDate) => "Renovação de assinatura em ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultado encontrado')}"; - static String m47(count) => "${count} Selecionados"; + static String m48(count) => "${count} Selecionados"; - static String m48(count, yourCount) => + static String m49(count, yourCount) => "${count} Selecionado (${yourCount} seus)"; - static String m49(verificationID) => + static String m50(verificationID) => "Aqui está meu ID de verificação para o Ente.io: ${verificationID}"; - static String m50(verificationID) => + static String m51(verificationID) => "Ei, você pode confirmar que este é seu ID de verificação do Ente.io? ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Código de referência do ente: ${referralCode} \n\nAplique em Configurações → Geral → Indicações para obter ${referralStorageInGB} GB gratuitamente após a sua inscrição em um plano pago\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Compartilhe com pessoas específicas', one: 'Compartilhado com 1 pessoa', other: 'Compartilhado com ${numberOfPeople} pessoas')}"; - static String m53(emailIDs) => "Compartilhado com ${emailIDs}"; + static String m54(emailIDs) => "Compartilhado com ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Este(a) ${fileType} será excluído(a) do seu dispositivo."; - static String m55(fileType) => + static String m56(fileType) => "Este(a) ${fileType} está tanto no Ente quanto no seu dispositivo."; - static String m56(fileType) => + static String m57(fileType) => "Este(a) ${fileType} será excluído(a) do Ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usado"; - static String m59(id) => + static String m60(id) => "Seu ${id} já está vinculado a outra conta Ente.\nSe você gostaria de usar seu ${id} com esta conta, por favor contate nosso suporte\'\'"; - static String m60(endDate) => "Sua assinatura será cancelada em ${endDate}"; + static String m61(endDate) => "Sua assinatura será cancelada em ${endDate}"; - static String m61(completed, total) => + static String m62(completed, total) => "${completed}/${total} memórias preservadas"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Eles também recebem ${storageAmountInGB} GB"; - static String m63(email) => "Este é o ID de verificação de ${email}"; + static String m64(email) => "Este é o ID de verificação de ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 dia', other: '${count} dias')}"; - static String m65(endDate) => "Válido até ${endDate}"; + static String m66(endDate) => "Válido até ${endDate}"; - static String m66(email) => "Verificar ${email}"; + static String m67(email) => "Verificar ${email}"; - static String m67(email) => "Enviamos um e-mail à ${email}"; + static String m68(email) => "Enviamos um e-mail à ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} anos atrás', other: '${count} anos atrás')}"; - static String m69(storageSaved) => + static String m70(storageSaved) => "Você liberou ${storageSaved} com sucesso!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -228,7 +230,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sessões ativas"), "addAName": MessageLookupByLibrary.simpleMessage("Adicione um nome"), "addANewEmail": - MessageLookupByLibrary.simpleMessage("Adicionar um novo email"), + MessageLookupByLibrary.simpleMessage("Adicionar um novo e-mail"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Adicionar colaborador"), "addCollaborators": m0, @@ -306,7 +308,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Autenticação necessária"), - "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLock": MessageLookupByLibrary.simpleMessage("Bloqueio de app"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("ID da Apple"), "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), @@ -381,7 +383,7 @@ class MessageLookup extends MessageLookupByLibrary { "available": MessageLookupByLibrary.simpleMessage("Disponível"), "availableStorageSpace": m8, "backedUpFolders": - MessageLookupByLibrary.simpleMessage("Backup de pastas concluído"), + MessageLookupByLibrary.simpleMessage("Pastas com backup"), "backup": MessageLookupByLibrary.simpleMessage("Backup"), "backupFailed": MessageLookupByLibrary.simpleMessage("Erro ao efetuar o backup"), @@ -430,7 +432,7 @@ class MessageLookup extends MessageLookupByLibrary { "checkForUpdates": MessageLookupByLibrary.simpleMessage("Verificar por atualizações"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( - "Verifique sua caixa de entrada (e ‘spam’) para concluir a verificação"), + "Verifique sua caixa de entrada (e spam) para concluir a verificação"), "checkStatus": MessageLookupByLibrary.simpleMessage("Verificar status"), "checking": MessageLookupByLibrary.simpleMessage("Verificando..."), "claimFreeStorage": MessageLookupByLibrary.simpleMessage( @@ -607,7 +609,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Insira o código"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( "Arquivos adicionados a este álbum do dispositivo serão automaticamente enviados para o Ente."), - "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "deviceLock": + MessageLookupByLibrary.simpleMessage("Bloqueio de dispositivo"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "Desative o bloqueio de tela do dispositivo quando o Ente estiver em primeiro plano e houver um backup em andamento. Isso normalmente não é necessário, mas pode ajudar nos envios grandes e importações iniciais de grandes bibliotecas a serem concluídos mais rapidamente."), "deviceNotFound": @@ -662,7 +665,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Verificação de e-mail"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("Enviar por email seus logs"), - "empty": MessageLookupByLibrary.simpleMessage("Vazio"), + "empty": MessageLookupByLibrary.simpleMessage("Esvaziar"), "emptyTrash": MessageLookupByLibrary.simpleMessage("Esvaziar a lixeira?"), "enableMaps": MessageLookupByLibrary.simpleMessage("Habilitar mapa"), @@ -701,7 +704,7 @@ class MessageLookup extends MessageLookupByLibrary { "Insira a senha para criptografar seus dados"), "enterPersonName": MessageLookupByLibrary.simpleMessage("Inserir nome da pessoa"), - "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "enterPin": MessageLookupByLibrary.simpleMessage("Insira o PIN"), "enterReferralCode": MessageLookupByLibrary.simpleMessage( "Insira o código de referência"), "enterThe6digitCodeFromnyourAuthenticatorApp": @@ -738,7 +741,7 @@ class MessageLookup extends MessageLookupByLibrary { "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( "Falha ao obter original para edição"), "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( - "Não foi possível buscar informações do produto. Por favor, tente novamente mais tarde."), + "Não foi possível buscar os detalhes de referência. Por favor, tente novamente mais tarde."), "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage("Falha ao carregar álbuns"), "failedToRenew": @@ -1006,7 +1009,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Novo álbum"), "newToEnte": MessageLookupByLibrary.simpleMessage("Novo no Ente"), "newest": MessageLookupByLibrary.simpleMessage("Mais recente"), - "next": MessageLookupByLibrary.simpleMessage("Next"), + "next": MessageLookupByLibrary.simpleMessage("Próximo"), "no": MessageLookupByLibrary.simpleMessage("Não"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Nenhum álbum compartilhado por você ainda"), @@ -1036,8 +1039,9 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Nenhum resultado"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nenhum resultado encontrado"), - "noSystemLockFound": - MessageLookupByLibrary.simpleMessage("No system lock found"), + "noSystemLockFound": MessageLookupByLibrary.simpleMessage( + "Nenhum bloqueio de sistema encontrado"), + "notPersonLabel": m37, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Nada compartilhado com você ainda"), "nothingToSeeHere": @@ -1075,7 +1079,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Senha alterada com sucesso"), "passwordLock": MessageLookupByLibrary.simpleMessage("Bloqueio de senha"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Nós não salvamos essa senha, se você esquecer nós não poderemos descriptografar seus dados"), "paymentDetails": @@ -1084,7 +1088,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Falha no pagamento"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Infelizmente o seu pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Itens pendentes"), "pendingSync": MessageLookupByLibrary.simpleMessage("Sincronização pendente"), @@ -1109,10 +1113,10 @@ class MessageLookup extends MessageLookupByLibrary { "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Escolha o ponto central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fixar álbum"), - "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("Bloqueio PIN"), "playOnTv": MessageLookupByLibrary.simpleMessage("Reproduzir álbum na TV"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Assinatura da PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1124,12 +1128,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Por favor, contate o suporte se o problema persistir"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Por favor, conceda as permissões"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Por favor, faça login novamente"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Por favor, tente novamente"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1166,7 +1170,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Avalie o aplicativo"), "rateUs": MessageLookupByLibrary.simpleMessage("Avalie-nos"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Recuperar conta"), @@ -1193,15 +1197,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Redefinir senha"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), "reenterPassword": - MessageLookupByLibrary.simpleMessage("Re-enter password"), - "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + MessageLookupByLibrary.simpleMessage("Reinserir senha"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Reinserir PIN"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( "Indique amigos e 2x seu plano"), "referralStep1": MessageLookupByLibrary.simpleMessage( "Envie esse código aos seus amigos"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Eles se inscreveram para um plano pago"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Referências"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Referências estão atualmente pausadas"), @@ -1227,7 +1231,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Remover link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Remover participante"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remover etiqueta da pessoa"), "removePublicLink": @@ -1243,7 +1247,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Renomear arquivo"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renovar assinatura"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Reportar um problema"), "reportBug": @@ -1315,7 +1319,7 @@ class MessageLookup extends MessageLookupByLibrary { "Fotos de grupo que estão sendo tiradas em algum raio da foto"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Convide pessoas e você verá todas as fotos compartilhadas por elas aqui"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Segurança"), "selectALocation": MessageLookupByLibrary.simpleMessage("Selecionar um local"), @@ -1343,14 +1347,14 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Enviar"), "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar e-mail"), "sendInvite": MessageLookupByLibrary.simpleMessage("Enviar convite"), "sendLink": MessageLookupByLibrary.simpleMessage("Enviar link"), "serverEndpoint": - MessageLookupByLibrary.simpleMessage("Servidor endpoint"), + MessageLookupByLibrary.simpleMessage("Endpoint do servidor"), "sessionExpired": MessageLookupByLibrary.simpleMessage("Sessão expirada"), "setAPassword": @@ -1359,8 +1363,8 @@ class MessageLookup extends MessageLookupByLibrary { "setCover": MessageLookupByLibrary.simpleMessage("Definir capa"), "setLabel": MessageLookupByLibrary.simpleMessage("Aplicar"), "setNewPassword": - MessageLookupByLibrary.simpleMessage("Set new password"), - "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + MessageLookupByLibrary.simpleMessage("Defina nova senha"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Definir novo PIN"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Definir senha"), "setRadius": MessageLookupByLibrary.simpleMessage("Definir raio"), @@ -1373,16 +1377,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Compartilhar um álbum agora"), "shareLink": MessageLookupByLibrary.simpleMessage("Compartilhar link"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Compartilhar apenas com as pessoas que você quiser"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Baixe o Ente para que possamos compartilhar facilmente fotos e vídeos de qualidade original\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Compartilhar com usuários não-Ente"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Compartilhar seu primeiro álbum"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1395,7 +1399,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Novas fotos compartilhadas"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Receber notificações quando alguém adicionar uma foto em um álbum compartilhado que você faz parte"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Compartilhado comigo"), "sharedWithYou": @@ -1411,11 +1415,11 @@ class MessageLookup extends MessageLookupByLibrary { "Encerrar sessão em outros dispositivos"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Eu concordo com os termos de serviço e a política de privacidade"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Será excluído de todos os álbuns."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Pular"), "social": MessageLookupByLibrary.simpleMessage("Redes sociais"), "someItemsAreInBothEnteAndYourDevice": @@ -1460,13 +1464,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Armazenamento"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Família"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Você"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Limite de armazenamento excedido"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Assinar"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Parece que sua assinatura expirou. Por favor inscreva-se para ativar o compartilhamento."), @@ -1483,7 +1487,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Sugerir recurso"), "support": MessageLookupByLibrary.simpleMessage("Suporte"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronização interrompida"), "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), @@ -1491,7 +1495,8 @@ class MessageLookup extends MessageLookupByLibrary { "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Toque para inserir código"), - "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "tapToUnlock": + MessageLookupByLibrary.simpleMessage("Toque para desbloquear"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Parece que algo deu errado. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contato com nossa equipe de suporte."), "terminate": MessageLookupByLibrary.simpleMessage("Encerrar"), @@ -1511,7 +1516,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Estes itens serão excluídos do seu dispositivo."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Eles(a) serão excluídos(as) de todos os álbuns."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1527,7 +1532,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Este e-mail já está em uso"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Esta imagem não tem dados exif"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Este é o seu ID de verificação"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1537,18 +1542,18 @@ class MessageLookup extends MessageLookupByLibrary { "Isso fará com que você saia deste dispositivo!"), "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( - "To enable app lock, please setup device passcode or screen lock in your system settings."), + "Para ativar o bloqueio de app, por favor ative um método de autenticação nas configurações do sistema do seu dispositivo."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( "Para ocultar uma foto ou vídeo"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( - "Para redefinir a sua senha, por favor verifique o seu email primeiro."), + "Para redefinir a sua senha, por favor verifique o seu e-mail primeiro."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Logs de hoje"), - "tooManyIncorrectAttempts": - MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( + "Muitas tentativas incorretas"), "total": MessageLookupByLibrary.simpleMessage("total"), "totalSize": MessageLookupByLibrary.simpleMessage("Tamanho total"), "trash": MessageLookupByLibrary.simpleMessage("Lixeira"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("Cortar"), "tryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1594,6 +1599,7 @@ class MessageLookup extends MessageLookupByLibrary { "Até 50% de desconto, até 4 de dezembro."), "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( "Armazenamento utilizável é limitado pelo seu plano atual. O armazenamento reivindicado em excesso se tornará utilizável automaticamente quando você fizer a melhoria do seu plano."), + "useAsCover": MessageLookupByLibrary.simpleMessage("Usar como capa"), "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage( "Usar links públicos para pessoas que não estão no Ente"), @@ -1602,7 +1608,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Utilizar foto selecionada"), "usedSpace": MessageLookupByLibrary.simpleMessage("Espaço em uso"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Falha na verificação, por favor, tente novamente"), @@ -1610,7 +1616,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("ID de Verificação"), "verify": MessageLookupByLibrary.simpleMessage("Verificar"), "verifyEmail": MessageLookupByLibrary.simpleMessage("Verificar e-mail"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Verificar chave de acesso"), @@ -1647,13 +1653,13 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Não suportamos a edição de fotos e álbuns que você ainda não possui"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Fraca"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bem-vindo de volta!"), "whatsNew": MessageLookupByLibrary.simpleMessage("O que há de novo"), "yearly": MessageLookupByLibrary.simpleMessage("Anual"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Sim"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sim, cancelar"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -1684,7 +1690,7 @@ class MessageLookup extends MessageLookupByLibrary { "Você não pode compartilhar consigo mesmo"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Você não tem nenhum item arquivado."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Sua conta foi excluída"), "yourMap": MessageLookupByLibrary.simpleMessage("Seu mapa"), diff --git a/mobile/lib/generated/intl/messages_ru.dart b/mobile/lib/generated/intl/messages_ru.dart index 3514bfef6c..eff8e6d898 100644 --- a/mobile/lib/generated/intl/messages_ru.dart +++ b/mobile/lib/generated/intl/messages_ru.dart @@ -127,90 +127,90 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "Успешно перемещено в ${albumName}"; - static String m37(passwordStrengthValue) => + static String m38(passwordStrengthValue) => "Мощность пароля: ${passwordStrengthValue}"; - static String m38(providerName) => + static String m39(providerName) => "Если с вас сняли оплату, обратитесь в службу поддержки ${providerName}"; - static String m39(endDate) => + static String m40(endDate) => "Бесплатный пробный период до ${endDate}.\nПосле, вы сможете выбрать платный план."; - static String m40(toEmail) => "Пожалуйста, напишите нам на ${toEmail}"; + static String m41(toEmail) => "Пожалуйста, напишите нам на ${toEmail}"; - static String m41(toEmail) => "Пожалуйста, отправьте логи на \n${toEmail}"; + static String m42(toEmail) => "Пожалуйста, отправьте логи на \n${toEmail}"; - static String m42(storeName) => "Оцените нас в ${storeName}"; + static String m43(storeName) => "Оцените нас в ${storeName}"; - static String m43(storageInGB) => + static String m44(storageInGB) => "3. Вы оба получаете ${storageInGB} Гигабайт* бесплатно"; - static String m44(userEmail) => + static String m45(userEmail) => "${userEmail} будет удален из этого общего альбома\n\nВсе добавленные им фотографии также будут удалены из альбома"; - static String m45(endDate) => "Обновление подписки на ${endDate}"; + static String m46(endDate) => "Обновление подписки на ${endDate}"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, one: '${count} результат найден', other: '${count} результатов найдено')}"; - static String m47(count) => "${count} выбрано"; + static String m48(count) => "${count} выбрано"; - static String m48(count, yourCount) => "${count} выбрано (${yourCount} ваши)"; + static String m49(count, yourCount) => "${count} выбрано (${yourCount} ваши)"; - static String m49(verificationID) => + static String m50(verificationID) => "Вот мой проверочный ID: ${verificationID} для ente.io."; - static String m50(verificationID) => + static String m51(verificationID) => "Эй, вы можете подтвердить, что это ваш идентификатор подтверждения ente.io: ${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Реферальный код Ente: ${referralCode} \n\nПримените его в разделе «Настройки» → «Основные» → «Рефералы», чтобы получить ${referralStorageInGB} Гигабайт бесплатно после того как вы подпишетесь на платный план"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Поделится с конкретными людьми', one: 'Поделено с 1 человеком', other: 'Поделено с ${numberOfPeople} людьми')}"; - static String m53(emailIDs) => "Поделиться с ${emailIDs}"; + static String m54(emailIDs) => "Поделиться с ${emailIDs}"; - static String m54(fileType) => + static String m55(fileType) => "Это ${fileType} будет удалено с вашего устройства."; - static String m55(fileType) => + static String m56(fileType) => "Этот ${fileType} есть и в Ente, и на вашем устройстве."; - static String m56(fileType) => "Этот ${fileType} будет удалён из Ente."; + static String m57(fileType) => "Этот ${fileType} будет удалён из Ente."; - static String m57(storageAmountInGB) => "${storageAmountInGB} Гигабайт"; + static String m58(storageAmountInGB) => "${storageAmountInGB} Гигабайт"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} из ${totalAmount} ${totalStorageUnit} использовано"; - static String m59(id) => + static String m60(id) => "Ваш ${id} уже связан с другой учетной записью Ente.\nЕсли вы хотите использовать ${id} с этой учетной записью, пожалуйста, свяжитесь с нашей службой поддержки"; - static String m60(endDate) => "Ваша подписка будет отменена ${endDate}"; + static String m61(endDate) => "Ваша подписка будет отменена ${endDate}"; - static String m61(completed, total) => "${completed}/${total} сохранено"; + static String m62(completed, total) => "${completed}/${total} сохранено"; - static String m62(storageAmountInGB) => + static String m63(storageAmountInGB) => "Они тоже получат ${storageAmountInGB} Гигабайт"; - static String m63(email) => + static String m64(email) => "Этот идентификатор подтверждения пользователя ${email}"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1 день', other: '${count} дней')}"; - static String m65(endDate) => "Действителен по ${endDate}"; + static String m66(endDate) => "Действителен по ${endDate}"; - static String m66(email) => "Подтвердить ${email}"; + static String m67(email) => "Подтвердить ${email}"; - static String m67(email) => "Мы отправили письмо на ${email}"; + static String m68(email) => "Мы отправили письмо на ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} год назад', other: '${count} лет назад')}"; - static String m69(storageSaved) => "Вы успешно освободили ${storageSaved}!"; + static String m70(storageSaved) => "Вы успешно освободили ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -1079,7 +1079,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Пароль успешно изменён"), "passwordLock": MessageLookupByLibrary.simpleMessage("Блокировка паролем"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Мы не храним этот пароль, поэтому если вы забудете его, мы не сможем расшифровать ваши данные"), "paymentDetails": @@ -1087,7 +1087,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("Сбой платежа"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "К сожалению, ваш платеж не был выполнен. Пожалуйста, свяжитесь со службой поддержки, и мы вам поможем!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("Отложенные элементы"), "pendingSync": @@ -1116,7 +1116,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Воспроизвести альбом на ТВ"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Подписка на PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1128,12 +1128,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Если проблема не устранена, обратитесь в службу поддержки"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Предоставьте разрешение"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Пожалуйста, войдите снова"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Пожалуйста, попробуйте ещё раз"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1170,7 +1170,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Оценить приложение"), "rateUs": MessageLookupByLibrary.simpleMessage("Оцените нас"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("Восстановить"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Восстановить аккаунт"), @@ -1205,7 +1205,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Дайте этот код своим друзьям"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Они подписываются на платный план"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("Рефералы"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Рефералы в настоящее время приостановлены"), @@ -1232,7 +1232,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Удалить ссылку"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Исключить участника"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Удалить метку человека"), "removePublicLink": @@ -1250,7 +1250,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Переименовать файл"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Продлить подписку"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("Сообщить об ошибке"), "reportBug": MessageLookupByLibrary.simpleMessage("Сообщить об ошибке"), @@ -1318,7 +1318,7 @@ class MessageLookup extends MessageLookupByLibrary { "Групповые фотографии, сделанные в некотором радиусе от фотографии"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( "Пригласите людей, и вы увидите все фотографии, которыми они поделились здесь"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("Безопасность"), "selectALocation": MessageLookupByLibrary.simpleMessage("Выбрать место"), @@ -1344,8 +1344,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Выбранные элементы будут удалены из всех альбомов и перемещены в корзину."), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("Отправить"), "sendEmail": MessageLookupByLibrary.simpleMessage( "Отправить электронное письмо"), @@ -1377,16 +1377,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Поделиться альбомом сейчас"), "shareLink": MessageLookupByLibrary.simpleMessage("Поделиться ссылкой"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Поделитесь только с теми людьми, с которыми вы хотите"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Скачай Ente, чтобы мы могли легко поделиться фотографиями и видео без сжатия\n\nhttps://ente.io"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Поделится с пользователями без Ente"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Поделиться первым альбомом"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1397,7 +1397,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Новые общие фотографии"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Получать уведомления, когда кто-то добавляет фото в общий альбом, в котором вы состоите"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Поделиться со мной"), "sharedWithYou": @@ -1413,11 +1413,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Выйти из других устройств"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Я согласен с условиями предоставления услуг и политикой конфиденциальности"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Он будет удален из всех альбомов."), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), "social": MessageLookupByLibrary.simpleMessage("Соцсети"), "someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage( @@ -1461,13 +1461,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Хранилище"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Семья"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Вы"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Превышен предел хранения"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("Сильный"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("Подписаться"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Похоже, ваша подписка истекла. Пожалуйста, подпишитесь, чтобы включить функцию общего доступа."), @@ -1484,7 +1484,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Предложить идею"), "support": MessageLookupByLibrary.simpleMessage("Поддержка"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("Синхронизация остановлена"), "syncing": MessageLookupByLibrary.simpleMessage("Синхронизация..."), @@ -1514,7 +1514,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Эти элементы будут удалено с вашего устройства."), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Они будут удален из всех альбомов."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1530,7 +1530,7 @@ class MessageLookup extends MessageLookupByLibrary { "Этот адрес электронной почты уже используется"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( "Это изображение не имеет exif данных"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Это ваш идентификатор подтверждения"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1551,7 +1551,7 @@ class MessageLookup extends MessageLookupByLibrary { "total": MessageLookupByLibrary.simpleMessage("всего"), "totalSize": MessageLookupByLibrary.simpleMessage("Общий размер"), "trash": MessageLookupByLibrary.simpleMessage("Корзина"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("Сократить"), "tryAgain": MessageLookupByLibrary.simpleMessage("Попробовать снова"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1606,7 +1606,7 @@ class MessageLookup extends MessageLookupByLibrary { "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("Использовать выбранное фото"), "usedSpace": MessageLookupByLibrary.simpleMessage("Использовано места"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Проверка не удалась, попробуйте еще раз"), @@ -1615,7 +1615,7 @@ class MessageLookup extends MessageLookupByLibrary { "verify": MessageLookupByLibrary.simpleMessage("Подтвердить"), "verifyEmail": MessageLookupByLibrary.simpleMessage( "Подтвердить электронную почту"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Подтверждение"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("Подтвердить ключ"), @@ -1651,12 +1651,12 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Мы не можем поддержать редактирование фотографий и альбомов, которыми вы не владеете"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("Слабый"), "welcomeBack": MessageLookupByLibrary.simpleMessage("С возвращением!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Что нового"), "yearly": MessageLookupByLibrary.simpleMessage("Ежегодно"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Да"), "yesCancel": MessageLookupByLibrary.simpleMessage("Да, отменить"), "yesConvertToViewer": @@ -1686,7 +1686,7 @@ class MessageLookup extends MessageLookupByLibrary { "Вы не можете поделиться с самим собой"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "У вас нет архивных элементов."), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Ваша учетная запись была удалена"), "yourMap": MessageLookupByLibrary.simpleMessage("Ваша карта"), diff --git a/mobile/lib/generated/intl/messages_tr.dart b/mobile/lib/generated/intl/messages_tr.dart new file mode 100644 index 0000000000..061041d69e --- /dev/null +++ b/mobile/lib/generated/intl/messages_tr.dart @@ -0,0 +1,1710 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a tr locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'tr'; + + static String m0(count) => + "${Intl.plural(count, zero: 'Ortak çalışan ekle', one: 'Ortak çalışan ekle', other: 'Ortak çalışan ekle')}"; + + static String m2(count) => + "${Intl.plural(count, one: 'Öğeyi taşı', other: 'Öğeleri taşı')}"; + + static String m3(storageAmount, endDate) => + "${storageAmount} eklentiniz ${endDate} tarihine kadar geçerlidir"; + + static String m1(count) => + "${Intl.plural(count, zero: 'Görüntüleyen ekle', one: 'Görüntüleyen ekle', other: 'Görüntüleyen ekle')}"; + + static String m4(emailOrName) => "${emailOrName} tarafından eklendi"; + + static String m5(albumName) => "${albumName} albümüne başarıyla eklendi"; + + static String m6(count) => + "${Intl.plural(count, zero: 'Katılımcı Yok', one: '1 Katılımcı', other: '${count} Katılımcı')}"; + + static String m7(versionValue) => "Sürüm: ${versionValue}"; + + static String m8(freeAmount, storageUnit) => + "${freeAmount} ${storageUnit} free"; + + static String m9(paymentProvider) => + "Lütfen önce mevcut aboneliğinizi ${paymentProvider} adresinden iptal edin"; + + static String m10(user) => + "${user}, bu albüme daha fazla fotoğraf ekleyemeyecek.\n\nAncak, kendi eklediği mevcut fotoğrafları kaldırmaya devam edebilecektir"; + + static String m11(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': 'Şu ana kadar aileniz ${storageAmountInGb} GB aldı', + 'false': 'Şu ana kadar ${storageAmountInGb} GB aldınız', + 'other': 'Şu ana kadar ${storageAmountInGb} GB aldınız!', + })}"; + + static String m12(albumName) => + "${albumName} için ortak çalışma bağlantısı oluşturuldu"; + + static String m13(familyAdminEmail) => + "Aboneliğinizi yönetmek için lütfen ${familyAdminEmail} ile iletişime geçin"; + + static String m14(provider) => + "Lütfen ${provider} aboneliğinizi yönetmek için support@ente.io adresinden bizimle iletişime geçin."; + + static String m15(endpoint) => "${endpoint}\'e bağlanıldı"; + + static String m16(count) => + "${Intl.plural(count, one: 'Delete ${count} item', other: 'Delete ${count} items')}"; + + static String m17(currentlyDeleting, totalCount) => + "Siliniyor ${currentlyDeleting} / ${totalCount}"; + + static String m18(albumName) => + "Bu, \"${albumName}\"e erişim için olan genel bağlantıyı kaldıracaktır."; + + static String m19(supportEmail) => + "Lütfen kayıtlı e-posta adresinizden ${supportEmail} adresine bir e-posta gönderin"; + + static String m20(count, storageSaved) => + "You have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)"; + + static String m21(count, formattedSize) => + "${count} dosyalar, ${formattedSize} her biri"; + + static String m22(newEmail) => "E-posta ${newEmail} olarak değiştirildi"; + + static String m23(email) => + "${email} does not have an Ente account.\n\nSend them an invite to share photos."; + + static String m24(count, formattedNumber) => + "Bu cihazdaki ${Intl.plural(count, one: '1 file', other: '${formattedNumber} dosya')} güvenli bir şekilde yedeklendi"; + + static String m25(count, formattedNumber) => + "Bu albümdeki ${Intl.plural(count, one: '1 file', other: '${formattedNumber} dosya')} güvenli bir şekilde yedeklendi"; + + static String m26(storageAmountInGB) => + "Birisinin davet kodunuzu uygulayıp ücretli hesap açtığı her seferede ${storageAmountInGB} GB"; + + static String m27(endDate) => "Ücretsiz deneme ${endDate} sona erir"; + + static String m28(count) => + "You can still access ${Intl.plural(count, one: 'it', other: 'them')} on Ente as long as you have an active subscription"; + + static String m29(sizeInMBorGB) => "${sizeInMBorGB} yer açın"; + + static String m30(count, formattedSize) => + "${Intl.plural(count, one: 'Yer açmak için cihazdan silinebilir ${formattedSize}', other: 'Yer açmak için cihazdan silinebilir ${formattedSize}')}"; + + static String m31(currentlyProcessing, totalCount) => + "Siliniyor ${currentlyProcessing} / ${totalCount}"; + + static String m32(count) => + "${Intl.plural(count, one: '${count} öğe', other: '${count} öğeler')}"; + + static String m33(expiryTime) => + "Bu bağlantı ${expiryTime} dan sonra geçersiz olacaktır"; + + static String m34(count, formattedCount) => + "${Intl.plural(count, zero: 'anı yok', one: '${formattedCount} anı', other: '${formattedCount} anılar')}"; + + static String m35(count) => + "${Intl.plural(count, one: 'Öğeyi taşı', other: 'Öğeleri taşı')}"; + + static String m36(albumName) => "${albumName} adlı albüme başarıyla taşındı"; + + static String m37(name) => "Not ${name}?"; + + static String m38(passwordStrengthValue) => + "Şifrenin güçlülük seviyesi: ${passwordStrengthValue}"; + + static String m39(providerName) => + "Sizden ücret alındıysa lütfen ${providerName} destek ekibiyle görüşün"; + + static String m40(endDate) => + "Free trial valid till ${endDate}.\nYou can choose a paid plan afterwards."; + + static String m41(toEmail) => "Lütfen bize ${toEmail} adresinden ulaşın"; + + static String m42(toEmail) => + "Lütfen günlükleri şu adrese gönderin\n${toEmail}"; + + static String m43(storeName) => "Bizi ${storeName} üzerinden değerlendirin"; + + static String m44(storageInGB) => "3. Hepimiz ${storageInGB} GB* bedava alın"; + + static String m45(userEmail) => + "${userEmail} bu paylaşılan albümden kaldırılacaktır\n\nOnlar tarafından eklenen tüm fotoğraflar da albümden kaldırılacaktır"; + + static String m46(endDate) => "Abonelik ${endDate} tarihinde yenilenir"; + + static String m47(count) => + "${Intl.plural(count, one: '${count} yıl önce', other: '${count} yıl önce')}"; + + static String m48(count) => "${count} seçildi"; + + static String m49(count, yourCount) => + "Seçilenler: ${count} (${yourCount} sizin seçiminiz)"; + + static String m50(verificationID) => + "İşte ente.io için doğrulama kimliğim: ${verificationID}."; + + static String m51(verificationID) => + "Merhaba, bu ente.io doğrulama kimliğinizin doğruluğunu onaylayabilir misiniz: ${verificationID}"; + + static String m52(referralCode, referralStorageInGB) => + "Ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io"; + + static String m53(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Belirli kişilerle paylaş', one: '1 kişiyle paylaşıldı', other: '${numberOfPeople} kişiyle paylaşıldı')}"; + + static String m54(emailIDs) => "${emailIDs} ile paylaşıldı"; + + static String m55(fileType) => "Bu ${fileType}, cihazınızdan silinecek."; + + static String m56(fileType) => + "This ${fileType} is in both Ente and your device."; + + static String m57(fileType) => "This ${fileType} will be deleted from Ente."; + + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m59( + usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => + "${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit} kullanıldı"; + + static String m60(id) => + "Your ${id} is already linked to another Ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'"; + + static String m61(endDate) => + "Aboneliğiniz ${endDate} tarihinde iptal edilecektir"; + + static String m62(completed, total) => "${completed}/${total} anı korundu"; + + static String m63(storageAmountInGB) => + "Aynı zamanda ${storageAmountInGB} GB alıyorlar"; + + static String m64(email) => "Bu, ${email}\'in Doğrulama Kimliği"; + + static String m65(count) => + "${Intl.plural(count, zero: 'gün', one: '1 gün', other: '${count} gün')}"; + + static String m66(endDate) => "${endDate} tarihine kadar geçerli"; + + static String m67(email) => "${email} doğrula"; + + static String m68(email) => + "E-postayı ${email} adresine gönderdik"; + + static String m69(count) => + "${Intl.plural(count, one: '${count} yıl önce', other: '${count} yıl önce')}"; + + static String m70(storageSaved) => + "Başarılı bir şekilde ${storageSaved} alanını boşalttınız!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "A new version of Ente is available."), + "about": MessageLookupByLibrary.simpleMessage("Hakkında"), + "account": MessageLookupByLibrary.simpleMessage("Hesap"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Tekrar hoş geldiniz!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Şifremi kaybedersem, verilerim uçtan uca şifrelendiği için verilerimi kaybedebileceğimi farkındayım."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Aktif oturumlar"), + "addAName": MessageLookupByLibrary.simpleMessage("Add a name"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Yeni e-posta ekle"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Düzenleyici ekle"), + "addCollaborators": m0, + "addFromDevice": MessageLookupByLibrary.simpleMessage("Cihazdan ekle"), + "addItem": m2, + "addLocation": MessageLookupByLibrary.simpleMessage("Konum Ekle"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Ekle"), + "addMore": MessageLookupByLibrary.simpleMessage("Daha fazla ekle"), + "addNew": MessageLookupByLibrary.simpleMessage("Yeni ekle"), + "addOnPageSubtitle": + MessageLookupByLibrary.simpleMessage("Eklentilerin ayrıntıları"), + "addOnValidTill": m3, + "addOns": MessageLookupByLibrary.simpleMessage("Eklentiler"), + "addPhotos": MessageLookupByLibrary.simpleMessage("Fotoğraf ekle"), + "addSelected": MessageLookupByLibrary.simpleMessage("Seçileni ekle"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("Albüme ekle"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Add to Ente"), + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Gizli albüme ekle"), + "addViewer": MessageLookupByLibrary.simpleMessage("Görüntüleyici ekle"), + "addViewers": m1, + "addYourPhotosNow": MessageLookupByLibrary.simpleMessage( + "Fotoğraflarınızı şimdi ekleyin"), + "addedAs": MessageLookupByLibrary.simpleMessage("Eklendi"), + "addedBy": m4, + "addedSuccessfullyTo": m5, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Favorilere ekleniyor..."), + "advanced": MessageLookupByLibrary.simpleMessage("Gelişmiş"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Gelişmiş"), + "after1Day": MessageLookupByLibrary.simpleMessage("1 gün sonra"), + "after1Hour": MessageLookupByLibrary.simpleMessage("1 saat sonra"), + "after1Month": MessageLookupByLibrary.simpleMessage("1 ay sonra"), + "after1Week": MessageLookupByLibrary.simpleMessage("1 hafta sonra"), + "after1Year": MessageLookupByLibrary.simpleMessage("1 yıl sonra"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Sahip"), + "albumParticipantsCount": m6, + "albumTitle": MessageLookupByLibrary.simpleMessage("Albüm Başlığı"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Albüm güncellendi"), + "albums": MessageLookupByLibrary.simpleMessage("Albümler"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Tamamen temizle"), + "allMemoriesPreserved": + MessageLookupByLibrary.simpleMessage("Tüm anılar saklandı"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Bağlantıya sahip olan kişilere, paylaşılan albüme fotoğraf eklemelerine izin ver."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Fotoğraf eklemeye izin ver"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("İndirmeye izin ver"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Kullanıcıların fotoğraf eklemesine izin ver"), + "androidBiometricHint": + MessageLookupByLibrary.simpleMessage("Kimliği doğrula"), + "androidBiometricNotRecognized": + MessageLookupByLibrary.simpleMessage("Tanınmadı. Tekrar deneyin."), + "androidBiometricRequiredTitle": + MessageLookupByLibrary.simpleMessage("Biyometrik gerekli"), + "androidBiometricSuccess": + MessageLookupByLibrary.simpleMessage("Başarılı"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("İptal et"), + "androidDeviceCredentialsRequiredTitle": + MessageLookupByLibrary.simpleMessage( + "Cihaz kimlik bilgileri gerekli"), + "androidDeviceCredentialsSetupDescription": + MessageLookupByLibrary.simpleMessage( + "Cihaz kimlik bilgileri gerekmekte"), + "androidGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "Biyometrik kimlik doğrulama cihazınızda ayarlanmamış. Biyometrik kimlik doğrulama eklemek için \'Ayarlar > Güvenlik\' bölümüne gidin."), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Masaüstü"), + "androidSignInTitle": + MessageLookupByLibrary.simpleMessage("Kimlik doğrulaması gerekli"), + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appVersion": m7, + "appleId": MessageLookupByLibrary.simpleMessage("Apple kimliği"), + "apply": MessageLookupByLibrary.simpleMessage("Uygula"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Kodu girin"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore aboneliği"), + "archive": MessageLookupByLibrary.simpleMessage("Arşiv"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("Albümü arşivle"), + "archiving": MessageLookupByLibrary.simpleMessage("Arşivleniyor..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Aile planından ayrılmak istediğinize emin misiniz?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "İptal etmek istediğinize emin misiniz?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Planı değistirmek istediğinize emin misiniz?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Çıkmak istediğinden emin misin?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Çıkış yapmak istediğinize emin misiniz?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Yenilemek istediğinize emin misiniz?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Aboneliğiniz iptal edilmiştir. Bunun sebebini paylaşmak ister misiniz?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Hesabınızı neden silmek istiyorsunuz?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Sevdiklerinizden paylaşmalarını isteyin"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("serpinti sığınağında"), + "authToChangeEmailVerificationSetting": + MessageLookupByLibrary.simpleMessage( + "E-posta doğrulamasını değiştirmek için lütfen kimlik doğrulaması yapın"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Kilit ekranı ayarını değiştirmek için lütfen kimliğinizi doğrulayın"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "E-postanızı değiştirmek için lütfen kimlik doğrulaması yapın"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Şifrenizi değiştirmek için lütfen kimlik doğrulaması yapın"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "İki faktörlü kimlik doğrulamayı yapılandırmak için lütfen kimlik doğrulaması yapın"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Hesap silme işlemini başlatmak için lütfen kimlik doğrulaması yapın"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Aktif oturumlarınızı görüntülemek için lütfen kimliğinizi doğrulayın"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Gizli dosyalarınızı görüntülemek için kimlik doğrulama yapınız"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Kodlarınızı görmek için lütfen kimlik doğrulaması yapın"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Kurtarma anahtarınızı görmek için lütfen kimliğinizi doğrulayın"), + "authenticating": + MessageLookupByLibrary.simpleMessage("Kimlik doğrulanıyor..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Kimlik doğrulama başarısız oldu, lütfen tekrar deneyin"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("Kimlik doğrulama başarılı!"), + "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( + "You\'ll see available Cast devices here."), + "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( + "Make sure Local Network permissions are turned on for the Ente Photos app, in Settings."), + "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( + "Due to technical glitch, you have been logged out. Our apologies for the inconvenience."), + "autoPair": MessageLookupByLibrary.simpleMessage("Auto pair"), + "autoPairDesc": MessageLookupByLibrary.simpleMessage( + "Auto pair works only with devices that support Chromecast."), + "available": MessageLookupByLibrary.simpleMessage("Mevcut"), + "availableStorageSpace": m8, + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Yedeklenmiş klasörler"), + "backup": MessageLookupByLibrary.simpleMessage("Yedekle"), + "backupFailed": + MessageLookupByLibrary.simpleMessage("Yedekleme başarısız oldu"), + "backupOverMobileData": + MessageLookupByLibrary.simpleMessage("Mobil veri ile yedekle"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("Yedekleme seçenekleri"), + "backupVideos": + MessageLookupByLibrary.simpleMessage("Videolari yedekle"), + "blackFridaySale": + MessageLookupByLibrary.simpleMessage("Muhteşem Cuma kampanyası"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": + MessageLookupByLibrary.simpleMessage("Ön belleğe alınan veri"), + "calculating": MessageLookupByLibrary.simpleMessage("Hesaplanıyor..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "Başkalarına ait albümlere yüklenemez"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Yalnızca size ait dosyalar için bağlantı oluşturabilir"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Yalnızca size ait dosyaları kaldırabilir"), + "cancel": MessageLookupByLibrary.simpleMessage("İptal Et"), + "cancelOtherSubscription": m9, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Abonelik iptali"), + "cannotAddMorePhotosAfterBecomingViewer": m10, + "cannotDeleteSharedFiles": + MessageLookupByLibrary.simpleMessage("Dosyalar silinemiyor"), + "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( + "Please make sure you are on the same network as the TV."), + "castIPMismatchTitle": + MessageLookupByLibrary.simpleMessage("Failed to cast album"), + "castInstruction": MessageLookupByLibrary.simpleMessage( + "Eşleştirmek istediğiniz cihazda cast.ente.io adresini ziyaret edin.\n\nAlbümü TV\'nizde oynatmak için aşağıdaki kodu girin."), + "centerPoint": MessageLookupByLibrary.simpleMessage("Merkez noktası"), + "changeEmail": + MessageLookupByLibrary.simpleMessage("E-posta adresini değiştir"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Seçilen öğelerin konumu değiştirilsin mi?"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Sifrenizi değiştirin"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Parolanızı değiştirin"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("İzinleri değiştir?"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Güncellemeleri kontol et"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Lütfen doğrulama işlemini tamamlamak için gelen kutunuzu (ve spam klasörünüzü) kontrol edin"), + "checkStatus": MessageLookupByLibrary.simpleMessage("Check status"), + "checking": MessageLookupByLibrary.simpleMessage("Kontrol ediliyor..."), + "claimFreeStorage": + MessageLookupByLibrary.simpleMessage("Bedava alan talep edin"), + "claimMore": MessageLookupByLibrary.simpleMessage("Arttır!"), + "claimed": MessageLookupByLibrary.simpleMessage("Alındı"), + "claimedStorageSoFar": m11, + "cleanUncategorized": + MessageLookupByLibrary.simpleMessage("Temiz Genel"), + "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( + "Diğer albümlerde bulunan Kategorilenmemiş tüm dosyaları kaldırın"), + "clearCaches": + MessageLookupByLibrary.simpleMessage("Önbellekleri temizle"), + "clearIndexes": MessageLookupByLibrary.simpleMessage("Açık Dizin"), + "click": MessageLookupByLibrary.simpleMessage("• Tıklamak"), + "clickOnTheOverflowMenu": + MessageLookupByLibrary.simpleMessage("• Taşma menüsüne tıklayın"), + "close": MessageLookupByLibrary.simpleMessage("Kapat"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage( + "Yakalama zamanına göre kulüp"), + "clubByFileName": + MessageLookupByLibrary.simpleMessage("Dosya adına göre kulüp"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Clustering progress"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Kod kabul edildi"), + "codeCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("Kodunuz panoya kopyalandı"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Sizin kullandığınız kod"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Create a link to allow people to add and view photos in your shared album without needing an Ente app or account. Great for collecting event photos."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Organizasyon bağlantısı"), + "collaborativeLinkCreatedFor": m12, + "collaborator": MessageLookupByLibrary.simpleMessage("Düzenleyici"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Düzenleyiciler, paylaşılan albüme fotoğraf ve videolar ekleyebilir."), + "collageLayout": MessageLookupByLibrary.simpleMessage("Düzen"), + "collageSaved": MessageLookupByLibrary.simpleMessage( + "Kolajınız galeriye kaydedildi"), + "collectEventPhotos": MessageLookupByLibrary.simpleMessage( + "Etkinlik fotoğraflarını topla"), + "collectPhotos": + MessageLookupByLibrary.simpleMessage("Fotoğrafları topla"), + "color": MessageLookupByLibrary.simpleMessage("Renk"), + "confirm": MessageLookupByLibrary.simpleMessage("Onayla"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "İki adımlı kimlik doğrulamasını devre dışı bırakmak istediğinize emin misiniz?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Hesap silme işlemini onayla"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Evet, bu hesabı ve tüm verileri kalıcı olarak silmek istiyorum."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Şifrenizi onaylayın"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage( + "Plan değişikliğini onaylayın"), + "confirmRecoveryKey": + MessageLookupByLibrary.simpleMessage("Kurtarma anahtarını doğrula"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Kurtarma anahtarını doğrulayın"), + "connectToDevice": + MessageLookupByLibrary.simpleMessage("Connect to device"), + "contactFamilyAdmin": m13, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Destek ile iletişim"), + "contactToManageSubscription": m14, + "contacts": MessageLookupByLibrary.simpleMessage("Kişiler"), + "contents": MessageLookupByLibrary.simpleMessage("İçerikler"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Devam edin"), + "continueOnFreeTrial": + MessageLookupByLibrary.simpleMessage("Ücretsiz denemeye devam et"), + "convertToAlbum": MessageLookupByLibrary.simpleMessage("Albüme taşı"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("E-posta adresini kopyala"), + "copyLink": MessageLookupByLibrary.simpleMessage("Linki kopyala"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Bu kodu kopyalayın ve kimlik doğrulama uygulamanıza yapıştırın"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "Verilerinizi yedekleyemedik.\nDaha sonra tekrar deneyeceğiz."), + "couldNotFreeUpSpace": + MessageLookupByLibrary.simpleMessage("Yer boşaltılamadı"), + "couldNotUpdateSubscription": + MessageLookupByLibrary.simpleMessage("Abonelikler kaydedilemedi"), + "count": MessageLookupByLibrary.simpleMessage("Miktar"), + "crashReporting": + MessageLookupByLibrary.simpleMessage("Çökme raporlaması"), + "create": MessageLookupByLibrary.simpleMessage("Oluştur"), + "createAccount": + MessageLookupByLibrary.simpleMessage("Hesap oluşturun"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Fotoğrafları seçmek için uzun basın ve + düğmesine tıklayarak bir albüm oluşturun"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("Create collaborative link"), + "createCollage": MessageLookupByLibrary.simpleMessage("Kolaj oluştur"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Yeni bir hesap oluşturun"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Albüm oluştur veya seç"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Herkese açık link oluştur"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Bağlantı oluşturuluyor..."), + "criticalUpdateAvailable": + MessageLookupByLibrary.simpleMessage("Kritik güncelleme mevcut"), + "crop": MessageLookupByLibrary.simpleMessage("Crop"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("Güncel kullanımınız "), + "custom": MessageLookupByLibrary.simpleMessage("Kişisel"), + "customEndpoint": m15, + "darkTheme": MessageLookupByLibrary.simpleMessage("Karanlık"), + "dayToday": MessageLookupByLibrary.simpleMessage("Bugün"), + "dayYesterday": MessageLookupByLibrary.simpleMessage("Dün"), + "decrypting": + MessageLookupByLibrary.simpleMessage("Şifre çözülüyor..."), + "decryptingVideo": MessageLookupByLibrary.simpleMessage( + "Videonun şifresi çözülüyor..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Dosyaları Tekilleştirme"), + "delete": MessageLookupByLibrary.simpleMessage("Sil"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Hesabı sil"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Aramızdan ayrıldığınız için üzgünüz. Lütfen kendimizi geliştirmemize yardımcı olun. Neden ayrıldığınızı Açıklar mısınız."), + "deleteAccountPermanentlyButton": + MessageLookupByLibrary.simpleMessage("Hesabımı kalıcı olarak sil"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Albümü sil"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Ayrıca bu albümde bulunan fotoğrafları (ve videoları) parçası oldukları tüm diğer albümlerden silebilir miyim?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Bu, tüm boş albümleri silecektir. Bu, albüm listenizdeki dağınıklığı azaltmak istediğinizde kullanışlıdır."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Hepsini Sil"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "This account is linked to other Ente apps, if you use any. Your uploaded data, across all Ente apps, will be scheduled for deletion, and your account will be permanently deleted."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Lütfen kayıtlı e-posta adresinizden account-deletion@ente.io\'a e-posta gönderiniz."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Boş albümleri sil"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Boş albümleri sileyim mi?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Her ikisinden de sil"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Cihazınızdan silin"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Delete from Ente"), + "deleteItemCount": m16, + "deleteLocation": MessageLookupByLibrary.simpleMessage("Konumu sil"), + "deletePhotos": + MessageLookupByLibrary.simpleMessage("Fotoğrafları sil"), + "deleteProgress": m17, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "İhtiyacım olan önemli bir özellik eksik"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "Uygulama veya bir özellik olması gerektiğini düşündüğüm gibi çalışmıyor"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Daha çok sevdiğim başka bir hizmet buldum"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("Nedenim listede yok"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "İsteğiniz 72 saat içinde gerçekleştirilecek."), + "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Paylaşılan albüm silinsin mi?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "Albüm herkes için silinecek\n\nBu albümdeki başkalarına ait paylaşılan fotoğraflara erişiminizi kaybedeceksiniz"), + "descriptions": MessageLookupByLibrary.simpleMessage("Açıklama"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Tüm seçimi kaldır"), + "designedToOutlive": MessageLookupByLibrary.simpleMessage( + "Hayatta kalmak için tasarlandı"), + "details": MessageLookupByLibrary.simpleMessage("Ayrıntılar"), + "developerSettings": + MessageLookupByLibrary.simpleMessage("Geliştirici ayarları"), + "developerSettingsWarning": MessageLookupByLibrary.simpleMessage( + "Geliştirici ayarlarını değiştirmek istediğinizden emin misiniz?"), + "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Kodu girin"), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Files added to this device album will automatically get uploaded to Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Disable the device screen lock when Ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster."), + "deviceNotFound": + MessageLookupByLibrary.simpleMessage("Cihaz bulunamadı"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Biliyor musun?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Otomatik kilidi devre dışı bırak"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Görüntüleyiciler, hala harici araçlar kullanarak ekran görüntüsü alabilir veya fotoğraflarınızın bir kopyasını kaydedebilir. Lütfen bunu göz önünde bulundurunuz"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Lütfen dikkate alın"), + "disableLinkMessage": m18, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "İki Aşamalı Doğrulamayı Devre Dışı Bırak"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "İki aşamalı doğrulamayı devre dışı bırak..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("Reddet"), + "distanceInKMUnit": MessageLookupByLibrary.simpleMessage("km"), + "doNotSignOut": MessageLookupByLibrary.simpleMessage("Çıkış yapma"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Sonra yap"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Yaptığınız düzenlemeleri silmek istiyor musunuz?"), + "done": MessageLookupByLibrary.simpleMessage("Bitti"), + "doubleYourStorage": MessageLookupByLibrary.simpleMessage( + "Depolama alanınızı ikiye katlayın"), + "download": MessageLookupByLibrary.simpleMessage("İndir"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("İndirme başarısız"), + "downloading": MessageLookupByLibrary.simpleMessage("İndiriliyor..."), + "dropSupportEmail": m19, + "duplicateFileCountWithStorageSaved": m20, + "duplicateItemsGroup": m21, + "edit": MessageLookupByLibrary.simpleMessage("Düzenle"), + "editLocation": MessageLookupByLibrary.simpleMessage("Konumu düzenle"), + "editLocationTagTitle": + MessageLookupByLibrary.simpleMessage("Konumu düzenle"), + "editsSaved": + MessageLookupByLibrary.simpleMessage("Düzenleme kaydedildi"), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "Konumda yapılan düzenlemeler yalnızca Ente\'de görülecektir"), + "eligible": MessageLookupByLibrary.simpleMessage("uygun"), + "email": MessageLookupByLibrary.simpleMessage("E-Posta"), + "emailChangedTo": m22, + "emailNoEnteAccount": m23, + "emailVerificationToggle": + MessageLookupByLibrary.simpleMessage("E-posta doğrulama"), + "emailYourLogs": MessageLookupByLibrary.simpleMessage( + "Günlüklerinizi e-postayla gönderin"), + "empty": MessageLookupByLibrary.simpleMessage("Boşalt"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("Çöp kutusu boşaltılsın mı?"), + "enableMaps": + MessageLookupByLibrary.simpleMessage("Haritaları Etkinleştir"), + "enableMapsDesc": MessageLookupByLibrary.simpleMessage( + "Bu, fotoğraflarınızı bir dünya haritasında gösterecektir.\n\nBu harita Open Street Map tarafından barındırılmaktadır ve fotoğraflarınızın tam konumları hiçbir zaman paylaşılmaz.\n\nBu özelliği istediğiniz zaman Ayarlar\'dan devre dışı bırakabilirsiniz."), + "encryptingBackup": + MessageLookupByLibrary.simpleMessage("Yedekleme şifreleniyor..."), + "encryption": MessageLookupByLibrary.simpleMessage("Şifreleme"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Sifreleme anahtarı"), + "endpointUpdatedMessage": MessageLookupByLibrary.simpleMessage( + "Fatura başarıyla güncellendi"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Varsayılan olarak uçtan uca şifrelenmiş"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "Ente can encrypt and preserve files only if you grant access to them"), + "entePhotosPerm": MessageLookupByLibrary.simpleMessage( + "Ente needs permission to preserve your photos"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "Ente preserves your memories, so they\'re always available to you, even if you lose your device."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Aileniz de planınıza eklenebilir."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Bir albüm adı girin"), + "enterCode": MessageLookupByLibrary.simpleMessage("Kodu giriniz"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Arkadaşınız tarafından sağlanan kodu girerek hem sizin hem de arkadaşınızın ücretsiz depolamayı talep etmek için girin"), + "enterEmail": + MessageLookupByLibrary.simpleMessage("E-postanızı giriniz"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Dosya adını girin"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Verilerinizi şifrelemek için kullanabileceğimiz yeni bir şifre girin"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Şifrenizi girin"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Verilerinizi şifrelemek için kullanabileceğimiz bir şifre girin"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "enterReferralCode": + MessageLookupByLibrary.simpleMessage("Davet kodunuzu girin"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Doğrulama uygulamasındaki 6 basamaklı kodu giriniz"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Lütfen geçerli bir E-posta adresi girin."), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("E-posta adresinizi girin"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Lütfen şifrenizi giriniz"), + "enterYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("Kurtarma kodunuzu girin"), + "error": MessageLookupByLibrary.simpleMessage("Hata"), + "everywhere": MessageLookupByLibrary.simpleMessage("her yerde"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Mevcut kullanıcı"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Bu bağlantının süresi dolmuştur. Lütfen yeni bir süre belirleyin veya bağlantı süresini devre dışı bırakın."), + "exportLogs": + MessageLookupByLibrary.simpleMessage("Günlüğü dışa aktar"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Veriyi dışarı aktar"), + "faceRecognition": + MessageLookupByLibrary.simpleMessage("Face recognition"), + "faces": MessageLookupByLibrary.simpleMessage("Yüzler"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Uygulanırken hata oluştu"), + "failedToCancel": MessageLookupByLibrary.simpleMessage( + "İptal edilirken sorun oluştu"), + "failedToDownloadVideo": + MessageLookupByLibrary.simpleMessage("Video indirilemedi"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Düzenleme için orijinal getirilemedi"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Davet ayrıntıları çekilemedi. Iütfen daha sonra deneyin."), + "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage( + "Albüm yüklenirken hata oluştu"), + "failedToRenew": MessageLookupByLibrary.simpleMessage( + "Abonelik yenilenirken hata oluştu"), + "failedToVerifyPaymentStatus": + MessageLookupByLibrary.simpleMessage("Ödeme durumu doğrulanamadı"), + "familyPlanOverview": MessageLookupByLibrary.simpleMessage( + "Add 5 family members to your existing plan without paying extra.\n\nEach member gets their own private space, and cannot see each other\'s files unless they\'re shared.\n\nFamily plans are available to customers who have a paid Ente subscription.\n\nSubscribe now to get started!"), + "familyPlanPortalTitle": MessageLookupByLibrary.simpleMessage("Aile"), + "familyPlans": MessageLookupByLibrary.simpleMessage("Aile Planı"), + "faq": MessageLookupByLibrary.simpleMessage("Sıkça sorulan sorular"), + "faqs": MessageLookupByLibrary.simpleMessage("Sık sorulanlar"), + "favorite": MessageLookupByLibrary.simpleMessage("Favori"), + "feedback": MessageLookupByLibrary.simpleMessage("Geri Bildirim"), + "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( + "Dosya galeriye kaydedilemedi"), + "fileInfoAddDescHint": + MessageLookupByLibrary.simpleMessage("Bir açıklama ekle..."), + "fileSavedToGallery": + MessageLookupByLibrary.simpleMessage("Video galeriye kaydedildi"), + "fileTypes": MessageLookupByLibrary.simpleMessage("Dosya türü"), + "fileTypesAndNames": + MessageLookupByLibrary.simpleMessage("Dosya türleri ve adları"), + "filesBackedUpFromDevice": m24, + "filesBackedUpInAlbum": m25, + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Dosyalar silinmiş"), + "filesSavedToGallery": + MessageLookupByLibrary.simpleMessage("Files saved to gallery"), + "findPeopleByName": + MessageLookupByLibrary.simpleMessage("Find people quickly by name"), + "flip": MessageLookupByLibrary.simpleMessage("Çevir"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("anıların için"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Şifremi unuttum"), + "foundFaces": MessageLookupByLibrary.simpleMessage("Found faces"), + "freeStorageClaimed": + MessageLookupByLibrary.simpleMessage("Alınan bedava alan"), + "freeStorageOnReferralSuccess": m26, + "freeStorageUsable": + MessageLookupByLibrary.simpleMessage("Kullanılabilir bedava alan"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Ücretsiz deneme"), + "freeTrialValidTill": m27, + "freeUpAccessPostDelete": m28, + "freeUpAmount": m29, + "freeUpDeviceSpace": + MessageLookupByLibrary.simpleMessage("Cihaz alanını boşaltın"), + "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( + "Save space on your device by clearing files that have been already backed up."), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Boş alan"), + "freeUpSpaceSaving": m30, + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Galeride 1000\'e kadar anı gösterilir"), + "general": MessageLookupByLibrary.simpleMessage("Genel"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Şifreleme anahtarı oluşturuluyor..."), + "genericProgress": m31, + "goToSettings": MessageLookupByLibrary.simpleMessage("Ayarlara git"), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("Google play kimliği"), + "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( + "Lütfen Ayarlar uygulamasında tüm fotoğraflara erişime izin verin"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("İzinleri değiştir"), + "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage( + "Yakındaki fotoğrafları gruplandır"), + "hearUsExplanation": MessageLookupByLibrary.simpleMessage( + "Biz uygulama kurulumlarını takip etmiyoruz. Bizi nereden duyduğunuzdan bahsetmeniz bize çok yardımcı olacak!"), + "hearUsWhereTitle": MessageLookupByLibrary.simpleMessage( + "Ente\'yi nereden duydunuz? (opsiyonel)"), + "help": MessageLookupByLibrary.simpleMessage("Yardım"), + "hidden": MessageLookupByLibrary.simpleMessage("Gizle"), + "hide": MessageLookupByLibrary.simpleMessage("Gizle"), + "hiding": MessageLookupByLibrary.simpleMessage("Gizleniyor..."), + "hostedAtOsmFrance": + MessageLookupByLibrary.simpleMessage("OSM Fransa\'da ağırlandı"), + "howItWorks": MessageLookupByLibrary.simpleMessage("Nasıl çalışır"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Lütfen onlardan ayarlar ekranında e-posta adresine uzun süre basmalarını ve her iki cihazdaki kimliklerin eşleştiğini doğrulamalarını isteyin."), + "iOSGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "Cihazınızda biyometrik kimlik doğrulama ayarlanmamış. Lütfen telefonunuzda Touch ID veya Face ID\'yi etkinleştirin."), + "iOSLockOut": MessageLookupByLibrary.simpleMessage( + "Biyometrik kimlik doğrulama devre dışı. Etkinleştirmek için lütfen ekranınızı kilitleyin ve kilidini açın."), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("Tamam"), + "ignoreUpdate": MessageLookupByLibrary.simpleMessage("Yoksay"), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Some files in this album are ignored from upload because they had previously been deleted from Ente."), + "importing": + MessageLookupByLibrary.simpleMessage("İçeri aktarılıyor...."), + "incorrectCode": MessageLookupByLibrary.simpleMessage("Yanlış kod"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Yanlış şifre"), + "incorrectRecoveryKey": + MessageLookupByLibrary.simpleMessage("Yanlış kurtarma kodu"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "Girdiğiniz kurtarma kod yanlış"), + "incorrectRecoveryKeyTitle": + MessageLookupByLibrary.simpleMessage("Yanlış kurtarma kodu"), + "indexedItems": + MessageLookupByLibrary.simpleMessage("Yeni öğeleri indeksle"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "Indexing is paused. It will automatically resume when device is ready."), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Güvenilir olmayan cihaz"), + "installManually": + MessageLookupByLibrary.simpleMessage("Manuel kurulum"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Geçersiz e-posta adresi"), + "invalidEndpoint": + MessageLookupByLibrary.simpleMessage("Geçersiz uç nokta"), + "invalidEndpointMessage": MessageLookupByLibrary.simpleMessage( + "Üzgünüz, girdiğiniz uç nokta geçersiz. Lütfen geçerli bir uç nokta girin ve tekrar deneyin."), + "invalidKey": MessageLookupByLibrary.simpleMessage("Gecersiz anahtar"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Girdiğiniz kurtarma anahtarı geçerli değil. Lütfen anahtarın 24 kelime içerdiğinden ve her bir kelimenin doğru şekilde yazıldığından emin olun.\n\nEğer eski bir kurtarma kodu girdiyseniz, o zaman kodun 64 karakter uzunluğunda olduğunu kontrol edin."), + "invite": MessageLookupByLibrary.simpleMessage("Davet et"), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("Invite to Ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Arkadaşlarını davet et"), + "inviteYourFriendsToEnte": + MessageLookupByLibrary.simpleMessage("Invite your friends to Ente"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin."), + "itemCount": m32, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Öğeler, kalıcı olarak silinmeden önce kalan gün sayısını gösterir"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Seçilen öğeler bu albümden kaldırılacak"), + "joinDiscord": MessageLookupByLibrary.simpleMessage("Discord\'a Katıl"), + "keepPhotos": + MessageLookupByLibrary.simpleMessage("Fotoğrafları sakla"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Lütfen bu bilgilerle bize yardımcı olun"), + "language": MessageLookupByLibrary.simpleMessage("Dil"), + "lastUpdated": + MessageLookupByLibrary.simpleMessage("En son güncellenen"), + "leave": MessageLookupByLibrary.simpleMessage("Çıkış yap"), + "leaveAlbum": + MessageLookupByLibrary.simpleMessage("Albümü yeniden adlandır"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Aile planından ayrıl"), + "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Paylaşılan albüm silinsin mi?"), + "left": MessageLookupByLibrary.simpleMessage("Left"), + "light": MessageLookupByLibrary.simpleMessage("Aydınlık"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Aydınlık"), + "linkCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("Link panoya kopyalandı"), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Cihaz limiti"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Geçerli"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Süresi dolmuş"), + "linkExpiresOn": m33, + "linkExpiry": + MessageLookupByLibrary.simpleMessage("Linkin geçerliliği"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Bağlantının süresi dolmuş"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Asla"), + "livePhotos": MessageLookupByLibrary.simpleMessage("Canlı Fotoğraf"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "Aboneliğinizi ailenizle paylaşabilirsiniz"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "Şu ana kadar 30 milyondan fazla anıyı koruduk"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "Verilerinizin 3 kopyasını saklıyoruz, biri yer altı serpinti sığınağında"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "Tüm uygulamalarımız açık kaynaktır"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Kaynak kodumuz ve şifrelememiz harici olarak denetlenmiştir"), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "Albümlerinizin bağlantılarını sevdiklerinizle paylaşabilirsiniz"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Mobil uygulamalarımız, tıkladığınız yeni fotoğrafları şifrelemek ve yedeklemek için arka planda çalışır"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io\'nun mükemmel bir yükleyicisi var"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "Verilerinizi güvenli bir şekilde şifrelemek için Xchacha20Poly1305 kullanıyoruz"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("EXIF verileri yükleniyor..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Galeri yükleniyor..."), + "loadingMessage": MessageLookupByLibrary.simpleMessage( + "Fotoğraflarınız yükleniyor..."), + "loadingModel": + MessageLookupByLibrary.simpleMessage("Modeller indiriliyor..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Yerel galeri"), + "location": MessageLookupByLibrary.simpleMessage("Konum"), + "locationName": MessageLookupByLibrary.simpleMessage("Konum Adı"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Bir fotoğrafın belli bir yarıçapında çekilen fotoğrafları gruplandırın"), + "locations": MessageLookupByLibrary.simpleMessage("Konum"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Kilit"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Kilit ekranını aktif etmek için lütfen cihazın ayarlarından şifreyi ya da ekran kilidini ayarlayın."), + "lockscreen": MessageLookupByLibrary.simpleMessage("Kilit ekranı"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Giriş yap"), + "loggingOut": + MessageLookupByLibrary.simpleMessage("Çıkış yapılıyor..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("Session expired"), + "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( + "Your session has expired. Please login again."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "\"Giriş yap\" düğmesine tıklayarak, Hizmet Şartları\'nı ve Gizlilik Politikası\'nı kabul ediyorum"), + "logout": MessageLookupByLibrary.simpleMessage("Çıkış yap"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Bu, sorununuzu gidermemize yardımcı olmak için günlükleri gönderecektir. Belirli dosyalarla ilgili sorunların izlenmesine yardımcı olmak için dosya adlarının ekleneceğini lütfen unutmayın."), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "Uçtan uca şifrelemeyi doğrulamak için bir e-postaya uzun basın."), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage( + "Tam ekranda görüntülemek için bir öğeye uzun basın"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Cihazı kayıp mı ettiniz?"), + "machineLearning": + MessageLookupByLibrary.simpleMessage("Makine öğrenimi"), + "magicSearch": MessageLookupByLibrary.simpleMessage("Sihirli arama"), + "manage": MessageLookupByLibrary.simpleMessage("Yönet"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Cihaz depolamasını yönet"), + "manageFamily": MessageLookupByLibrary.simpleMessage("Aileyi yönet"), + "manageLink": MessageLookupByLibrary.simpleMessage("Linki yönet"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Yönet"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Abonelikleri yönet"), + "manualPairDesc": MessageLookupByLibrary.simpleMessage( + "Pair with PIN works with any screen you wish to view your album on."), + "map": MessageLookupByLibrary.simpleMessage("Harita"), + "maps": MessageLookupByLibrary.simpleMessage("Haritalar"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "memoryCount": m34, + "merchandise": MessageLookupByLibrary.simpleMessage("Ürünler"), + "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( + "Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed."), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Mobil, Web, Masaüstü"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Ilımlı"), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "Sorgunuzu değiştirin veya aramayı deneyin"), + "moments": MessageLookupByLibrary.simpleMessage("Anlar"), + "monthly": MessageLookupByLibrary.simpleMessage("Aylık"), + "moveItem": m35, + "moveToAlbum": MessageLookupByLibrary.simpleMessage("Albüme taşı"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Gizli albüme ekle"), + "movedSuccessfullyTo": m36, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Cöp kutusuna taşı"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Dosyalar albüme taşınıyor..."), + "name": MessageLookupByLibrary.simpleMessage("İsim"), + "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( + "Ente\'ye bağlanılamıyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse lütfen desteğe başvurun."), + "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( + "Ente\'ye bağlanılamıyor. Lütfen ağ ayarlarınızı kontrol edin ve hata devam ederse destek ekibiyle iletişime geçin."), + "never": MessageLookupByLibrary.simpleMessage("Asla"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Yeni albüm"), + "newToEnte": MessageLookupByLibrary.simpleMessage("New to Ente"), + "newest": MessageLookupByLibrary.simpleMessage("En yeni"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "no": MessageLookupByLibrary.simpleMessage("Hayır"), + "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( + "Henüz paylaştığınız albüm yok"), + "noDeviceFound": + MessageLookupByLibrary.simpleMessage("No device found"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Yok"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Bu cihazda silinebilecek hiçbir dosyanız yok"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("Yinelenenleri kaldır"), + "noExifData": MessageLookupByLibrary.simpleMessage("EXIF verisi yok"), + "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage( + "Gizli fotoğraf veya video yok"), + "noImagesWithLocation": + MessageLookupByLibrary.simpleMessage("Konum içeren resim yok"), + "noInternetConnection": + MessageLookupByLibrary.simpleMessage("İnternet bağlantısı yok"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "Şu anda hiçbir fotoğraf yedeklenmiyor"), + "noPhotosFoundHere": + MessageLookupByLibrary.simpleMessage("Burada fotoğraf bulunamadı"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Kurtarma kodunuz yok mu?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Uçtan uca şifreleme protokolümüzün doğası gereği, verileriniz şifreniz veya kurtarma anahtarınız olmadan çözülemez"), + "noResults": MessageLookupByLibrary.simpleMessage("Sonuç bulunamadı"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("Hiçbir sonuç bulunamadı"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "notPersonLabel": m37, + "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( + "Henüz sizinle paylaşılan bir şey yok"), + "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( + "Burada görülecek bir şey yok! 👀"), + "notifications": MessageLookupByLibrary.simpleMessage("Bildirimler"), + "ok": MessageLookupByLibrary.simpleMessage("Tamam"), + "onDevice": MessageLookupByLibrary.simpleMessage("Bu cihaz"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "ente üzerinde"), + "oops": MessageLookupByLibrary.simpleMessage("Hay aksi"), + "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( + "Hata! Düzenlemeler kaydedilemedi"), + "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage( + "Hoop, Birşeyler yanlış gitti"), + "openSettings": MessageLookupByLibrary.simpleMessage("Ayarları Açın"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• Öğeyi açın"), + "openstreetmapContributors": MessageLookupByLibrary.simpleMessage( + "© OpenStreetMap katkıda bululanlar"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "İsteğe bağlı, istediğiniz kadar kısa..."), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Veya mevcut birini seçiniz"), + "pair": MessageLookupByLibrary.simpleMessage("Eşleştir"), + "pairWithPin": MessageLookupByLibrary.simpleMessage("Pair with PIN"), + "pairingComplete": + MessageLookupByLibrary.simpleMessage("Pairing complete"), + "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( + "Verification is still pending"), + "passkey": MessageLookupByLibrary.simpleMessage("Parola Anahtarı"), + "passkeyAuthTitle": + MessageLookupByLibrary.simpleMessage("Geçiş anahtarı doğrulaması"), + "password": MessageLookupByLibrary.simpleMessage("Şifre"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Şifreniz başarılı bir şekilde değiştirildi"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Sifre kilidi"), + "passwordStrength": m38, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Şifrelerinizi saklamıyoruz, bu yüzden unutursanız, verilerinizi deşifre edemeyiz"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Ödeme detayları"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("Ödeme başarısız oldu"), + "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( + "Maalesef ödemeniz başarısız oldu. Lütfen destekle iletişime geçin, size yardımcı olacağız!"), + "paymentFailedTalkToProvider": m39, + "pendingItems": MessageLookupByLibrary.simpleMessage("Bekleyen Öğeler"), + "pendingSync": + MessageLookupByLibrary.simpleMessage("Senkronizasyon bekleniyor"), + "people": MessageLookupByLibrary.simpleMessage("People"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("Kodunuzu kullananlar"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Çöp kutusundaki tüm öğeler kalıcı olarak silinecek\n\nBu işlem geri alınamaz"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Kalıcı olarak sil"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Cihazdan kalıcı olarak silinsin mi?"), + "photoDescriptions": + MessageLookupByLibrary.simpleMessage("Fotoğraf Açıklaması"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Fotoğraf ızgara boyutu"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("fotoğraf"), + "photos": MessageLookupByLibrary.simpleMessage("Fotoğraflar"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Eklediğiniz fotoğraflar albümden kaldırılacak"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Merkez noktasını seçin"), + "pinAlbum": MessageLookupByLibrary.simpleMessage("Albümü sabitle"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "playOnTv": MessageLookupByLibrary.simpleMessage("Albümü TV\'de oynat"), + "playStoreFreeTrialValidTill": m40, + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore aboneliği"), + "pleaseCheckYourInternetConnectionAndTryAgain": + MessageLookupByLibrary.simpleMessage( + "Lütfen internet bağlantınızı kontrol edin ve yeniden deneyin."), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Lütfen support@ente.io ile iletişime geçin; size yardımcı olmaktan memnuniyet duyarız!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Bu hata devam ederse lütfen desteğe başvurun"), + "pleaseEmailUsAt": m41, + "pleaseGrantPermissions": + MessageLookupByLibrary.simpleMessage("Lütfen izin ver"), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("Lütfen tekrar giriş yapın"), + "pleaseSendTheLogsTo": m42, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Lütfen tekrar deneyiniz"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "Lütfen girdiğiniz kodu doğrulayın"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Lütfen bekleyiniz..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "Lütfen bekleyin, albüm siliniyor"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Tekrar denemeden önce lütfen bir süre bekleyin"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Günlük hazırlanıyor..."), + "preserveMore": + MessageLookupByLibrary.simpleMessage("Daha fazlasını koruyun"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Videoları yönetmek için basılı tutun"), + "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( + "Videoyu oynatmak için resmi basılı tutun"), + "privacy": MessageLookupByLibrary.simpleMessage("Gizlilik"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Mahremiyet Politikası"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Özel yedeklemeler"), + "privateSharing": MessageLookupByLibrary.simpleMessage("Özel paylaşım"), + "publicLinkCreated": MessageLookupByLibrary.simpleMessage( + "Herkese açık link oluşturuldu"), + "publicLinkEnabled": MessageLookupByLibrary.simpleMessage( + "Herkese açık bağlantı aktive edildi"), + "quickLinks": MessageLookupByLibrary.simpleMessage("Hızlı Erişim"), + "radius": MessageLookupByLibrary.simpleMessage("Yarıçap"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Bileti artır"), + "rateTheApp": + MessageLookupByLibrary.simpleMessage("Uygulamaya puan verin"), + "rateUs": MessageLookupByLibrary.simpleMessage("Bizi değerlendirin"), + "rateUsOnStore": m43, + "recover": MessageLookupByLibrary.simpleMessage("Kurtarma"), + "recoverAccount": MessageLookupByLibrary.simpleMessage("Hesabı kurtar"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Kurtar"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Kurtarma anahtarı"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Kurtarma anahtarınız panoya kopyalandı"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Şifrenizi unutursanız, verilerinizi kurtarmanın tek yolu bu anahtar olacaktır."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Bu anahtarı saklamıyoruz, lütfen bu 24 kelime anahtarı güvenli bir yerde saklayın."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Harika! Kurtarma anahtarınız geçerlidir. Doğrulama için teşekkür ederim.\n\nLütfen kurtarma anahtarınızı güvenli bir şekilde yedeklediğinizden emin olun."), + "recoveryKeyVerified": + MessageLookupByLibrary.simpleMessage("Kurtarma kodu doğrulandı"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Eğer şifrenizi unutursanız, fotoğraflarınızı kurtarmanın tek yolu kurtarma anahtarınızdır. Kurtarma anahtarınızı Ayarlar > Güvenlik bölümünde bulabilirsiniz.\n\nLütfen kurtarma anahtarınızı buraya girerek doğru bir şekilde kaydettiğinizi doğrulayın."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Kurtarma başarılı!"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "Cihazınız, şifrenizi doğrulamak için yeterli güce sahip değil, ancak tüm cihazlarda çalışacak şekilde yeniden oluşturabiliriz.\n\nLütfen kurtarma anahtarınızı kullanarak giriş yapın ve şifrenizi yeniden oluşturun (istediğiniz takdirde aynı şifreyi tekrar kullanabilirsiniz)."), + "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage( + "Sifrenizi tekrardan oluşturun"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Arkadaşlarınıza önerin ve planınızı 2 katına çıkarın"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Bu kodu arkadaşlarınıza verin"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Ücretli bir plan için kaydolsunlar"), + "referralStep3": m44, + "referrals": MessageLookupByLibrary.simpleMessage("Referanslar"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Davetler şu anda durmuş durumda"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Ayrıca boşalan alanı talep etmek için \"Ayarlar\" -> \"Depolama\" bölümünden \"Son Silinenler \"i boşaltın"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Ayrıca boşalan alana sahip olmak için \"Çöp Kutunuzu\" boşaltın"), + "remoteImages": + MessageLookupByLibrary.simpleMessage("Uzaktan Görüntüler"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Uzak Küçük Resim"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("Uzak videolar"), + "remove": MessageLookupByLibrary.simpleMessage("Kaldır"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Yinelenenleri kaldır"), + "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( + "Review and remove files that are exact duplicates."), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Albümden çıkar"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Albümden çıkarılsın mı?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Favorilerimden kaldır"), + "removeLink": MessageLookupByLibrary.simpleMessage("Linki kaldır"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Katılımcıyı kaldır"), + "removeParticipantBody": m45, + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remove person label"), + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Herkese açık link oluştur"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Kaldırdığınız öğelerden bazıları başkaları tarafından eklenmiştir ve bunlara erişiminizi kaybedeceksiniz"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Kaldır?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Favorilerimden kaldır..."), + "rename": MessageLookupByLibrary.simpleMessage("Yeniden adlandır"), + "renameAlbum": + MessageLookupByLibrary.simpleMessage("Albümü yeniden adlandır"), + "renameFile": + MessageLookupByLibrary.simpleMessage("Dosyayı yeniden adlandır"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Abonelik yenileme"), + "renewsOn": m46, + "reportABug": MessageLookupByLibrary.simpleMessage("Hatayı bildir"), + "reportBug": MessageLookupByLibrary.simpleMessage("Hata bildir"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("E-postayı yeniden gönder"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "Yok sayılan dosyaları sıfırla"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Parolanızı sıfırlayın"), + "resetToDefault": + MessageLookupByLibrary.simpleMessage("Varsayılana sıfırla"), + "restore": MessageLookupByLibrary.simpleMessage("Yenile"), + "restoreToAlbum": MessageLookupByLibrary.simpleMessage("Albümü yenile"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Dosyalar geri yükleniyor..."), + "retry": MessageLookupByLibrary.simpleMessage("Tekrar dene"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Lütfen kopya olduğunu düşündüğünüz öğeleri inceleyin ve silin."), + "reviewSuggestions": + MessageLookupByLibrary.simpleMessage("Review suggestions"), + "right": MessageLookupByLibrary.simpleMessage("Right"), + "rotate": MessageLookupByLibrary.simpleMessage("Rotate"), + "rotateLeft": MessageLookupByLibrary.simpleMessage("Sola döndür"), + "rotateRight": MessageLookupByLibrary.simpleMessage("Sağa döndür"), + "safelyStored": + MessageLookupByLibrary.simpleMessage("Güvenle saklanır"), + "save": MessageLookupByLibrary.simpleMessage("Kaydet"), + "saveCollage": MessageLookupByLibrary.simpleMessage("Kolajı kaydet"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Kopyasını kaydet"), + "saveKey": MessageLookupByLibrary.simpleMessage("Anahtarı kaydet"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Henüz yapmadıysanız kurtarma anahtarınızı kaydetmeyi unutmayın"), + "saving": MessageLookupByLibrary.simpleMessage("Kaydediliyor..."), + "savingEdits": MessageLookupByLibrary.simpleMessage("Saving edits..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Kodu tarayın"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Kimlik doğrulama uygulamanız ile kodu tarayın"), + "search": MessageLookupByLibrary.simpleMessage("Search"), + "searchAlbumsEmptySection": + MessageLookupByLibrary.simpleMessage("Albümler"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Albüm adı"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Albüm adları (ör. \"Kamera\")\n• Dosya türleri (ör. \"Videolar\", \".gif\")\n• Yıllar ve aylar (ör. \"2022\", \"Ocak\")\n• Tatiller (ör. \"Noel\")\n• Fotoğraf açıklamaları (ör. \"#eğlence\")"), + "searchCaptionEmptySection": MessageLookupByLibrary.simpleMessage( + "Fotoğraf bilgilerini burada hızlı bir şekilde bulmak için \"#trip\" gibi açıklamalar ekleyin"), + "searchDatesEmptySection": MessageLookupByLibrary.simpleMessage( + "Tarihe, aya veya yıla göre arama yapın"), + "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( + "People will be shown here once indexing is done"), + "searchFileTypesAndNamesEmptySection": + MessageLookupByLibrary.simpleMessage("Dosya türleri ve adları"), + "searchHint1": + MessageLookupByLibrary.simpleMessage("Hızlı, cihaz üzerinde arama"), + "searchHint2": MessageLookupByLibrary.simpleMessage( + "Fotoğraf tarihleri, açıklamalar"), + "searchHint3": MessageLookupByLibrary.simpleMessage( + "Albümler, dosya adları ve türleri"), + "searchHint4": MessageLookupByLibrary.simpleMessage("Konum"), + "searchHint5": MessageLookupByLibrary.simpleMessage( + "Çok yakında: Yüzler ve sihirli arama ✨"), + "searchLocationEmptySection": MessageLookupByLibrary.simpleMessage( + "Bir fotoğrafın belli bir yarıçapında çekilen fotoğrafları gruplandırın"), + "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( + "İnsanları davet ettiğinizde onların paylaştığı tüm fotoğrafları burada göreceksiniz"), + "searchResultCount": m47, + "security": MessageLookupByLibrary.simpleMessage("Güvenlik"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Bir konum seçin"), + "selectALocationFirst": + MessageLookupByLibrary.simpleMessage("Önce yeni yer seçin"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("Albüm seçin"), + "selectAll": MessageLookupByLibrary.simpleMessage("Hepsini seç"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Yedekleme için klasörleri seçin"), + "selectItemsToAdd": + MessageLookupByLibrary.simpleMessage("Eklenecek eşyaları seçin"), + "selectLanguage": MessageLookupByLibrary.simpleMessage("Dil Seçin"), + "selectMorePhotos": + MessageLookupByLibrary.simpleMessage("Daha Fazla Fotoğraf Seç"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Ayrılma nedeninizi seçin"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Planınızı seçin"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Selected files are not on Ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Seçilen klasörler şifrelenecek ve yedeklenecektir"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Seçilen öğeler tüm albümlerden silinecek ve çöp kutusuna taşınacak."), + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, + "send": MessageLookupByLibrary.simpleMessage("Gönder"), + "sendEmail": MessageLookupByLibrary.simpleMessage("E-posta gönder"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Davet kodu gönder"), + "sendLink": MessageLookupByLibrary.simpleMessage("Link gönder"), + "serverEndpoint": + MessageLookupByLibrary.simpleMessage("Sunucu uç noktası"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Oturum süresi doldu"), + "setAPassword": MessageLookupByLibrary.simpleMessage("Şifre ayarla"), + "setAs": MessageLookupByLibrary.simpleMessage("Şu şekilde ayarla"), + "setCover": MessageLookupByLibrary.simpleMessage("Kapak Belirle"), + "setLabel": MessageLookupByLibrary.simpleMessage("Ayarla"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Parola ayarlayın"), + "setRadius": MessageLookupByLibrary.simpleMessage("Yarıçapı ayarla"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Ayarlama işlemi başarılı"), + "share": MessageLookupByLibrary.simpleMessage("Paylaş"), + "shareALink": MessageLookupByLibrary.simpleMessage("Linki paylaş"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Bir albüm açın ve paylaşmak için sağ üstteki paylaş düğmesine dokunun."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Şimdi bir albüm paylaşın"), + "shareLink": MessageLookupByLibrary.simpleMessage("Linki paylaş"), + "shareMyVerificationID": m50, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Yalnızca istediğiniz kişilerle paylaşın"), + "shareTextConfirmOthersVerificationID": m51, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io"), + "shareTextReferralCode": m52, + "shareWithNonenteUsers": + MessageLookupByLibrary.simpleMessage("Share with non-Ente users"), + "shareWithPeopleSectionTitle": m53, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("İlk albümünüzü paylaşın"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Create shared and collaborative albums with other Ente users, including users on free plans."), + "sharedByMe": + MessageLookupByLibrary.simpleMessage("Benim paylaştıklarım"), + "sharedByYou": MessageLookupByLibrary.simpleMessage("Paylaştıklarınız"), + "sharedPhotoNotifications": MessageLookupByLibrary.simpleMessage( + "Paylaşılan fotoğrafları ekle"), + "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( + "Birisi sizin de parçası olduğunuz paylaşılan bir albüme fotoğraf eklediğinde bildirim alın"), + "sharedWith": m54, + "sharedWithMe": + MessageLookupByLibrary.simpleMessage("Benimle paylaşılan"), + "sharedWithYou": + MessageLookupByLibrary.simpleMessage("Sizinle paylaşıldı"), + "sharing": MessageLookupByLibrary.simpleMessage("Paylaşılıyor..."), + "showMemories": MessageLookupByLibrary.simpleMessage("Anıları göster"), + "signOutFromOtherDevices": + MessageLookupByLibrary.simpleMessage("Diğer cihazlardan çıkış yap"), + "signOutOtherBody": MessageLookupByLibrary.simpleMessage( + "Eğer başka birisinin parolanızı bildiğini düşünüyorsanız, diğer tüm cihazları hesabınızdan çıkışa zorlayabilirsiniz."), + "signOutOtherDevices": + MessageLookupByLibrary.simpleMessage("Diğer cihazlardan çıkış yap"), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Hizmet Şartları\'nı ve Gizlilik Politikası\'nı kabul ediyorum"), + "singleFileDeleteFromDevice": m55, + "singleFileDeleteHighlight": + MessageLookupByLibrary.simpleMessage("Tüm albümlerden silinecek."), + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, + "skip": MessageLookupByLibrary.simpleMessage("Geç"), + "social": MessageLookupByLibrary.simpleMessage("Sosyal Medya"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Some items are in both Ente and your device."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Silmeye çalıştığınız dosyalardan bazıları yalnızca cihazınızda mevcuttur ve silindiği takdirde kurtarılamaz"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Size albümleri paylaşan biri, kendi cihazında aynı kimliği görmelidir."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Bazı şeyler yanlış gitti"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Bir şeyler ters gitti, lütfen tekrar deneyin"), + "sorry": MessageLookupByLibrary.simpleMessage("Üzgünüz"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Üzgünüm, favorilere ekleyemedim!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Üzgünüm, favorilere ekleyemedim!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Üzgünüz, girdiğiniz kod yanlış"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Üzgünüm, bu cihazda güvenli anahtarlarını oluşturamadık.\n\nLütfen başka bir cihazdan giriş yapmayı deneyiniz."), + "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Sırala"), + "sortNewestFirst": + MessageLookupByLibrary.simpleMessage("Yeniden eskiye"), + "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Önce en eski"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Başarılı"), + "startBackup": + MessageLookupByLibrary.simpleMessage("Yedeklemeyi başlat"), + "status": MessageLookupByLibrary.simpleMessage("Durum"), + "stopCastingBody": MessageLookupByLibrary.simpleMessage( + "Do you want to stop casting?"), + "stopCastingTitle": + MessageLookupByLibrary.simpleMessage("Stop casting"), + "storage": MessageLookupByLibrary.simpleMessage("Depolama"), + "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Aile"), + "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Sen"), + "storageInGB": m58, + "storageLimitExceeded": + MessageLookupByLibrary.simpleMessage("Depolama sınırı aşıldı"), + "storageUsageInfo": m59, + "strongStrength": MessageLookupByLibrary.simpleMessage("Güçlü"), + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, + "subscribe": MessageLookupByLibrary.simpleMessage("Abone ol"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Aboneliğinizin süresi dolmuş gibi görünüyor. Paylaşımı etkinleştirmek için lütfen abone olun."), + "subscription": MessageLookupByLibrary.simpleMessage("Abonelik"), + "success": MessageLookupByLibrary.simpleMessage("Başarılı"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Başarıyla arşivlendi"), + "successfullyHid": + MessageLookupByLibrary.simpleMessage("Başarıyla saklandı"), + "successfullyUnarchived": MessageLookupByLibrary.simpleMessage( + "Başarıyla arşivden çıkarıldı"), + "successfullyUnhid": MessageLookupByLibrary.simpleMessage( + "Başarıyla arşivden çıkarıldı"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Özellik önerin"), + "support": MessageLookupByLibrary.simpleMessage("Destek"), + "syncProgress": m62, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Senkronizasyon durduruldu"), + "syncing": MessageLookupByLibrary.simpleMessage("Eşitleniyor..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Sistem"), + "tapToCopy": + MessageLookupByLibrary.simpleMessage("kopyalamak için dokunun"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Kodu girmek icin tıklayın"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( + "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin."), + "terminate": MessageLookupByLibrary.simpleMessage("Sonlandır"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Oturumu sonlandır?"), + "terms": MessageLookupByLibrary.simpleMessage("Şartlar"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Şartlar"), + "thankYou": MessageLookupByLibrary.simpleMessage("Teşekkürler"), + "thankYouForSubscribing": MessageLookupByLibrary.simpleMessage( + "Abone olduğunuz için teşekkürler!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "İndirme işlemi tamamlanamadı"), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Girdiğiniz kurtarma kodu yanlış"), + "theme": MessageLookupByLibrary.simpleMessage("Tema"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Bu öğeler cihazınızdan silinecektir."), + "theyAlsoGetXGb": m63, + "theyWillBeDeletedFromAllAlbums": + MessageLookupByLibrary.simpleMessage("Tüm albümlerden silinecek."), + "thisActionCannotBeUndone": + MessageLookupByLibrary.simpleMessage("Bu eylem geri alınamaz"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Bu albümde zaten bir ortak çalışma bağlantısı var"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Bu, iki faktörünüzü kaybederseniz hesabınızı kurtarmak için kullanılabilir"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Bu cihaz"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "Bu e-posta zaten kullanılıyor"), + "thisImageHasNoExifData": + MessageLookupByLibrary.simpleMessage("Bu görselde exif verisi yok"), + "thisIsPersonVerificationId": m64, + "thisIsYourVerificationId": + MessageLookupByLibrary.simpleMessage("Doğrulama kimliğiniz"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Bu, sizi aşağıdaki cihazdan çıkış yapacak:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Bu cihazdaki oturumunuz kapatılacak!"), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Bir fotoğrafı veya videoyu gizlemek için"), + "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( + "Şifrenizi sıfılamak için lütfen e-postanızı girin."), + "todaysLogs": + MessageLookupByLibrary.simpleMessage("Bugünün günlükleri"), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Toplam boyut"), + "trash": MessageLookupByLibrary.simpleMessage("Cöp kutusu"), + "trashDaysLeft": m65, + "trim": MessageLookupByLibrary.simpleMessage("Trim"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Tekrar deneyiniz"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Turn on backup to automatically upload files added to this device folder to Ente."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "Yıllık planlarda 2 ay ücretsiz"), + "twofactor": MessageLookupByLibrary.simpleMessage("İki faktör"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "İki faktörlü kimlik doğrulama devre dışı"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("İki faktörlü doğrulama"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "İki faktörlü kimlik doğrulama başarıyla sıfırlandı"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("Cift faktör ayarı"), + "unarchive": MessageLookupByLibrary.simpleMessage("Arşivden cıkar"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Arşivden Çıkar"), + "unarchiving": + MessageLookupByLibrary.simpleMessage("Arşivden çıkarılıyor..."), + "uncategorized": MessageLookupByLibrary.simpleMessage("Kategorisiz"), + "unhide": MessageLookupByLibrary.simpleMessage("Gizleme"), + "unhideToAlbum": MessageLookupByLibrary.simpleMessage("Albümü gizleme"), + "unhiding": MessageLookupByLibrary.simpleMessage("Gösteriliyor..."), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Albümdeki dosyalar gösteriliyor"), + "unlock": MessageLookupByLibrary.simpleMessage("Kilidi aç"), + "unpinAlbum": MessageLookupByLibrary.simpleMessage( + "Albümün sabitlemesini kaldır"), + "unselectAll": + MessageLookupByLibrary.simpleMessage("Tümünün seçimini kaldır"), + "update": MessageLookupByLibrary.simpleMessage("Güncelle"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Güncelleme mevcut"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Klasör seçimi güncelleniyor..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Yükselt"), + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Dosyalar albüme taşınıyor..."), + "upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage( + "4 Aralık\'a kadar %50\'ye varan indirim."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Kullanılabilir depolama alanı mevcut planınızla sınırlıdır. Talep edilen fazla depolama alanı, planınızı yükselttiğinizde otomatik olarak kullanılabilir hale gelecektir."), + "useAsCover": MessageLookupByLibrary.simpleMessage("Use as cover"), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Use public links for people not on Ente"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Kurtarma anahtarını kullan"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Seçilen fotoğrafı kullan"), + "usedSpace": MessageLookupByLibrary.simpleMessage("Kullanılan alan"), + "validTill": m66, + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Doğrulama başarısız oldu, lütfen tekrar deneyin"), + "verificationId": + MessageLookupByLibrary.simpleMessage("Doğrulama kimliği"), + "verify": MessageLookupByLibrary.simpleMessage("Doğrula"), + "verifyEmail": + MessageLookupByLibrary.simpleMessage("E-posta adresini doğrulayın"), + "verifyEmailID": m67, + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Doğrula"), + "verifyPasskey": + MessageLookupByLibrary.simpleMessage("Şifrenizi doğrulayın"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Şifrenizi doğrulayın"), + "verifying": MessageLookupByLibrary.simpleMessage("Doğrulanıyor..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Kurtarma kodu doğrulanıyor..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("video"), + "videos": MessageLookupByLibrary.simpleMessage("Videolar"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Aktif oturumları görüntüle"), + "viewAddOnButton": + MessageLookupByLibrary.simpleMessage("Eklentileri görüntüle"), + "viewAll": MessageLookupByLibrary.simpleMessage("Tümünü görüntüle"), + "viewAllExifData": MessageLookupByLibrary.simpleMessage( + "Tüm EXIF verilerini görüntüle"), + "viewLargeFiles": MessageLookupByLibrary.simpleMessage("Large files"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "View files that are consuming the most amount of storage"), + "viewLogs": MessageLookupByLibrary.simpleMessage("Günlükleri göster"), + "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Kurtarma anahtarını görüntüle"), + "viewer": MessageLookupByLibrary.simpleMessage("Görüntüleyici"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Aboneliğinizi yönetmek için lütfen web.ente.io adresini ziyaret edin"), + "waitingForVerification": + MessageLookupByLibrary.simpleMessage("Doğrulama bekleniyor..."), + "waitingForWifi": + MessageLookupByLibrary.simpleMessage("WiFi bekleniyor..."), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("Biz açık kaynağız!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "Henüz sahibi olmadığınız fotoğraf ve albümlerin düzenlenmesini desteklemiyoruz"), + "weHaveSendEmailTo": m68, + "weakStrength": MessageLookupByLibrary.simpleMessage("Zayıf"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Tekrardan hoşgeldin!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("What\'s new"), + "yearly": MessageLookupByLibrary.simpleMessage("Yıllık"), + "yearsAgo": m69, + "yes": MessageLookupByLibrary.simpleMessage("Evet"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Evet, iptal et"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Evet, görüntüleyici olarak dönüştür"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Evet, sil"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Evet, değişiklikleri sil"), + "yesLogout": + MessageLookupByLibrary.simpleMessage("Evet, oturumu kapat"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Evet, sil"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Evet, yenile"), + "you": MessageLookupByLibrary.simpleMessage("Sen"), + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("Aile planı kullanıyorsunuz!"), + "youAreOnTheLatestVersion": + MessageLookupByLibrary.simpleMessage("En son sürüme sahipsiniz"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Alanınızı en fazla ikiye katlayabilirsiniz"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "Bağlantılarınızı paylaşım sekmesinden yönetebilirsiniz."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "Farklı bir sorgu aramayı deneyebilirsiniz."), + "youCannotDowngradeToThisPlan": + MessageLookupByLibrary.simpleMessage("Bu plana geçemezsiniz"), + "youCannotShareWithYourself": + MessageLookupByLibrary.simpleMessage("Kendinizle paylaşamazsınız"), + "youDontHaveAnyArchivedItems": + MessageLookupByLibrary.simpleMessage("Arşivlenmiş öğeniz yok."), + "youHaveSuccessfullyFreedUp": m70, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Hesabınız silindi"), + "yourMap": MessageLookupByLibrary.simpleMessage("Haritalarınız"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Planınız başarıyla düşürüldü"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Planınız başarılı şekilde yükseltildi"), + "yourPurchaseWasSuccessful": + MessageLookupByLibrary.simpleMessage("Satın alım başarılı"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage("Depolama bilgisi alınamadı"), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("Aboneliğinizin süresi doldu"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Aboneliğiniz başarıyla güncellendi"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "Doğrulama kodunuzun süresi doldu"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Temizlenebilecek yinelenen dosyalarınız yok"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Bu cihazda silinebilecek hiçbir dosyanız yok"), + "zoomOutToSeePhotos": MessageLookupByLibrary.simpleMessage( + "Fotoğrafları görmek için uzaklaştırın") + }; +} diff --git a/mobile/lib/generated/intl/messages_zh.dart b/mobile/lib/generated/intl/messages_zh.dart index 83636426b0..1fdfafe677 100644 --- a/mobile/lib/generated/intl/messages_zh.dart +++ b/mobile/lib/generated/intl/messages_zh.dart @@ -120,81 +120,83 @@ class MessageLookup extends MessageLookupByLibrary { static String m36(albumName) => "成功移动到 ${albumName}"; - static String m37(passwordStrengthValue) => "密码强度: ${passwordStrengthValue}"; + static String m37(name) => "不是 ${name}?"; - static String m38(providerName) => "如果您被收取费用,请用英语与 ${providerName} 的客服聊天"; + static String m38(passwordStrengthValue) => "密码强度: ${passwordStrengthValue}"; - static String m39(endDate) => "免费试用有效期至 ${endDate}。\n在此之后您可以选择付费计划。"; + static String m39(providerName) => "如果您被收取费用,请用英语与 ${providerName} 的客服聊天"; - static String m40(toEmail) => "请给我们发送电子邮件至 ${toEmail}"; + static String m40(endDate) => "免费试用有效期至 ${endDate}。\n在此之后您可以选择付费计划。"; - static String m41(toEmail) => "请将日志发送至 \n${toEmail}"; + static String m41(toEmail) => "请给我们发送电子邮件至 ${toEmail}"; - static String m42(storeName) => "在 ${storeName} 上给我们评分"; + static String m42(toEmail) => "请将日志发送至 \n${toEmail}"; - static String m43(storageInGB) => "3. 你和朋友都将免费获得 ${storageInGB} GB*"; + static String m43(storeName) => "在 ${storeName} 上给我们评分"; - static String m44(userEmail) => + static String m44(storageInGB) => "3. 你和朋友都将免费获得 ${storageInGB} GB*"; + + static String m45(userEmail) => "${userEmail} 将从这个共享相册中删除\n\nTA们添加的任何照片也将从相册中删除"; - static String m45(endDate) => "在 ${endDate} 前续费"; + static String m46(endDate) => "在 ${endDate} 前续费"; - static String m46(count) => + static String m47(count) => "${Intl.plural(count, other: '已找到 ${count} 个结果')}"; - static String m47(count) => "已选择 ${count} 个"; + static String m48(count) => "已选择 ${count} 个"; - static String m48(count, yourCount) => "选择了 ${count} 个 (您的 ${yourCount} 个)"; + static String m49(count, yourCount) => "选择了 ${count} 个 (您的 ${yourCount} 个)"; - static String m49(verificationID) => "这是我的ente.io 的验证 ID: ${verificationID}。"; + static String m50(verificationID) => "这是我的ente.io 的验证 ID: ${verificationID}。"; - static String m50(verificationID) => + static String m51(verificationID) => "嘿,你能确认这是你的 ente.io 验证 ID吗:${verificationID}"; - static String m51(referralCode, referralStorageInGB) => + static String m52(referralCode, referralStorageInGB) => "Ente 推荐代码:${referralCode}\n\n在 \"设置\"→\"通用\"→\"推荐 \"中应用它,即可在注册付费计划后免费获得 ${referralStorageInGB} GB 存储空间\n\nhttps://ente.io"; - static String m52(numberOfPeople) => + static String m53(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: '与特定人员共享', one: '与 1 人共享', other: '与 ${numberOfPeople} 人共享')}"; - static String m53(emailIDs) => "与 ${emailIDs} 共享"; + static String m54(emailIDs) => "与 ${emailIDs} 共享"; - static String m54(fileType) => "此 ${fileType} 将从您的设备中删除。"; + static String m55(fileType) => "此 ${fileType} 将从您的设备中删除。"; - static String m55(fileType) => "${fileType} 已同时存在于 Ente 和您的设备中。"; + static String m56(fileType) => "${fileType} 已同时存在于 Ente 和您的设备中。"; - static String m56(fileType) => "${fileType} 将从 Ente 中删除。"; + static String m57(fileType) => "${fileType} 将从 Ente 中删除。"; - static String m57(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m58(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m58( + static String m59( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "已使用 ${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit}"; - static String m59(id) => + static String m60(id) => "您的 ${id} 已链接到另一个 Ente 账户。\n如果您想在此账户中使用您的 ${id} ,请联系我们的支持人员"; - static String m60(endDate) => "您的订阅将于 ${endDate} 取消"; + static String m61(endDate) => "您的订阅将于 ${endDate} 取消"; - static String m61(completed, total) => "已保存的回忆 ${completed}/共 ${total}"; + static String m62(completed, total) => "已保存的回忆 ${completed}/共 ${total}"; - static String m62(storageAmountInGB) => "他们也会获得 ${storageAmountInGB} GB"; + static String m63(storageAmountInGB) => "他们也会获得 ${storageAmountInGB} GB"; - static String m63(email) => "这是 ${email} 的验证ID"; + static String m64(email) => "这是 ${email} 的验证ID"; - static String m64(count) => + static String m65(count) => "${Intl.plural(count, zero: '', one: '1天', other: '${count} 天')}"; - static String m65(endDate) => "有效期至 ${endDate}"; + static String m66(endDate) => "有效期至 ${endDate}"; - static String m66(email) => "验证 ${email}"; + static String m67(email) => "验证 ${email}"; - static String m67(email) => "我们已经发送邮件到 ${email}"; + static String m68(email) => "我们已经发送邮件到 ${email}"; - static String m68(count) => + static String m69(count) => "${Intl.plural(count, one: '${count} 年前', other: '${count} 年前')}"; - static String m69(storageSaved) => "您已成功释放了 ${storageSaved}!"; + static String m70(storageSaved) => "您已成功释放了 ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -268,7 +270,7 @@ class MessageLookup extends MessageLookupByLibrary { "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage("安卓, iOS, 网页端, 桌面端"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("需要身份验证"), - "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLock": MessageLookupByLibrary.simpleMessage("应用锁"), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("应用"), @@ -507,7 +509,7 @@ class MessageLookup extends MessageLookupByLibrary { "deviceCodeHint": MessageLookupByLibrary.simpleMessage("输入代码"), "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage("添加到此设备相册的文件将自动上传到 Ente。"), - "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "deviceLock": MessageLookupByLibrary.simpleMessage("设备锁"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( "当 Ente 置于前台且正在进行备份时将禁用设备屏幕锁定。这通常是不需要的,但可能有助于更快地完成大型上传和大型库的初始导入。"), "deviceNotFound": MessageLookupByLibrary.simpleMessage("未发现设备"), @@ -582,7 +584,7 @@ class MessageLookup extends MessageLookupByLibrary { "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage("输入我们可以用来加密您的数据的密码"), "enterPersonName": MessageLookupByLibrary.simpleMessage("输入人物名称"), - "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "enterPin": MessageLookupByLibrary.simpleMessage("输入 PIN 码"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("输入推荐代码"), "enterThe6digitCodeFromnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage("从你的身份验证器应用中\n输入6位数字代码"), @@ -828,7 +830,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("新建相册"), "newToEnte": MessageLookupByLibrary.simpleMessage("初来 Ente"), "newest": MessageLookupByLibrary.simpleMessage("最新"), - "next": MessageLookupByLibrary.simpleMessage("Next"), + "next": MessageLookupByLibrary.simpleMessage("下一步"), "no": MessageLookupByLibrary.simpleMessage("否"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage("您尚未共享任何相册"), @@ -851,8 +853,8 @@ class MessageLookup extends MessageLookupByLibrary { "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密"), "noResults": MessageLookupByLibrary.simpleMessage("无结果"), "noResultsFound": MessageLookupByLibrary.simpleMessage("未找到任何结果"), - "noSystemLockFound": - MessageLookupByLibrary.simpleMessage("No system lock found"), + "noSystemLockFound": MessageLookupByLibrary.simpleMessage("未找到系统锁"), + "notPersonLabel": m37, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("尚未与您共享任何内容"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage("这里空空如也! 👀"), @@ -885,14 +887,14 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("密码修改成功"), "passwordLock": MessageLookupByLibrary.simpleMessage("密码锁"), - "passwordStrength": m37, + "passwordStrength": m38, "passwordWarning": MessageLookupByLibrary.simpleMessage( "我们不储存这个密码,所以如果忘记, 我们将无法解密您的数据"), "paymentDetails": MessageLookupByLibrary.simpleMessage("付款明细"), "paymentFailed": MessageLookupByLibrary.simpleMessage("支付失败"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "不幸的是,您的付款失败。请联系支持人员,我们将为您提供帮助!"), - "paymentFailedTalkToProvider": m38, + "paymentFailedTalkToProvider": m39, "pendingItems": MessageLookupByLibrary.simpleMessage("待处理项目"), "pendingSync": MessageLookupByLibrary.simpleMessage("正在等待同步"), "people": MessageLookupByLibrary.simpleMessage("人物"), @@ -910,9 +912,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("您添加的照片将从相册中移除"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage("选择中心点"), "pinAlbum": MessageLookupByLibrary.simpleMessage("置顶相册"), - "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN 锁定"), "playOnTv": MessageLookupByLibrary.simpleMessage("在电视上播放相册"), - "playStoreFreeTrialValidTill": m39, + "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore 订阅"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -922,10 +924,10 @@ class MessageLookup extends MessageLookupByLibrary { "请用英语联系 support@ente.io ,我们将乐意提供帮助!"), "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage("如果问题仍然存在,请联系支持"), - "pleaseEmailUsAt": m40, + "pleaseEmailUsAt": m41, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("请授予权限"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("请重新登录"), - "pleaseSendTheLogsTo": m41, + "pleaseSendTheLogsTo": m42, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("请重试"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage("请验证您输入的代码"), @@ -951,7 +953,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("提升工单"), "rateTheApp": MessageLookupByLibrary.simpleMessage("为此应用评分"), "rateUs": MessageLookupByLibrary.simpleMessage("给我们评分"), - "rateUsOnStore": m42, + "rateUsOnStore": m43, "recover": MessageLookupByLibrary.simpleMessage("恢复"), "recoverAccount": MessageLookupByLibrary.simpleMessage("恢复账户"), "recoverButton": MessageLookupByLibrary.simpleMessage("恢复"), @@ -972,14 +974,13 @@ class MessageLookup extends MessageLookupByLibrary { "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码(如果您希望,可以再次使用相同的密码)。"), "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("重新创建密码"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), - "reenterPassword": - MessageLookupByLibrary.simpleMessage("Re-enter password"), - "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + "reenterPassword": MessageLookupByLibrary.simpleMessage("再次输入密码"), + "reenterPin": MessageLookupByLibrary.simpleMessage("再次输入 PIN 码"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage("把我们推荐给你的朋友然后获得延长一倍的订阅计划"), "referralStep1": MessageLookupByLibrary.simpleMessage("1. 将此代码提供给您的朋友"), "referralStep2": MessageLookupByLibrary.simpleMessage("2. 他们注册一个付费计划"), - "referralStep3": m43, + "referralStep3": m44, "referrals": MessageLookupByLibrary.simpleMessage("推荐"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("推荐已暂停"), @@ -1000,7 +1001,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeFromFavorite": MessageLookupByLibrary.simpleMessage("从收藏中移除"), "removeLink": MessageLookupByLibrary.simpleMessage("移除链接"), "removeParticipant": MessageLookupByLibrary.simpleMessage("移除参与者"), - "removeParticipantBody": m44, + "removeParticipantBody": m45, "removePersonLabel": MessageLookupByLibrary.simpleMessage("移除人物标签"), "removePublicLink": MessageLookupByLibrary.simpleMessage("删除公开链接"), "removeShareItemsWarning": @@ -1012,7 +1013,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameAlbum": MessageLookupByLibrary.simpleMessage("重命名相册"), "renameFile": MessageLookupByLibrary.simpleMessage("重命名文件"), "renewSubscription": MessageLookupByLibrary.simpleMessage("续费订阅"), - "renewsOn": m45, + "renewsOn": m46, "reportABug": MessageLookupByLibrary.simpleMessage("报告错误"), "reportBug": MessageLookupByLibrary.simpleMessage("报告错误"), "resendEmail": MessageLookupByLibrary.simpleMessage("重新发送电子邮件"), @@ -1064,7 +1065,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("在照片的一定半径内拍摄的几组照片"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage("邀请他人,您将在此看到他们分享的所有照片"), - "searchResultCount": m46, + "searchResultCount": m47, "security": MessageLookupByLibrary.simpleMessage("安全"), "selectALocation": MessageLookupByLibrary.simpleMessage("选择一个位置"), "selectALocationFirst": @@ -1084,8 +1085,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("所选文件夹将被加密并备份"), "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage("所选项目将从所有相册中删除并移动到回收站。"), - "selectedPhotos": m47, - "selectedPhotosWithYours": m48, + "selectedPhotos": m48, + "selectedPhotosWithYours": m49, "send": MessageLookupByLibrary.simpleMessage("发送"), "sendEmail": MessageLookupByLibrary.simpleMessage("发送电子邮件"), "sendInvite": MessageLookupByLibrary.simpleMessage("发送邀请"), @@ -1096,9 +1097,8 @@ class MessageLookup extends MessageLookupByLibrary { "setAs": MessageLookupByLibrary.simpleMessage("设置为"), "setCover": MessageLookupByLibrary.simpleMessage("设置封面"), "setLabel": MessageLookupByLibrary.simpleMessage("设置"), - "setNewPassword": - MessageLookupByLibrary.simpleMessage("Set new password"), - "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "setNewPassword": MessageLookupByLibrary.simpleMessage("设置新密码"), + "setNewPin": MessageLookupByLibrary.simpleMessage("设置新 PIN 码"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("设置密码"), "setRadius": MessageLookupByLibrary.simpleMessage("设定半径"), "setupComplete": MessageLookupByLibrary.simpleMessage("设置完成"), @@ -1108,16 +1108,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("打开相册并点击右上角的分享按钮进行分享"), "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("立即分享相册"), "shareLink": MessageLookupByLibrary.simpleMessage("分享链接"), - "shareMyVerificationID": m49, + "shareMyVerificationID": m50, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage("仅与您想要的人分享"), - "shareTextConfirmOthersVerificationID": m50, + "shareTextConfirmOthersVerificationID": m51, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage("下载 Ente,让我们轻松共享高质量的原始照片和视频"), - "shareTextReferralCode": m51, + "shareTextReferralCode": m52, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage("与非 Ente 用户共享"), - "shareWithPeopleSectionTitle": m52, + "shareWithPeopleSectionTitle": m53, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("分享您的第一个相册"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1128,7 +1128,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("新共享的照片"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage("当有人将照片添加到您所属的共享相册时收到通知"), - "sharedWith": m53, + "sharedWith": m54, "sharedWithMe": MessageLookupByLibrary.simpleMessage("与我共享"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("已与您共享"), "sharing": MessageLookupByLibrary.simpleMessage("正在分享..."), @@ -1140,11 +1140,11 @@ class MessageLookup extends MessageLookupByLibrary { "signOutOtherDevices": MessageLookupByLibrary.simpleMessage("登出其他设备"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "我同意 服务条款隐私政策"), - "singleFileDeleteFromDevice": m54, + "singleFileDeleteFromDevice": m55, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage("它将从所有相册中删除。"), - "singleFileInBothLocalAndRemote": m55, - "singleFileInRemoteOnly": m56, + "singleFileInBothLocalAndRemote": m56, + "singleFileInRemoteOnly": m57, "skip": MessageLookupByLibrary.simpleMessage("跳过"), "social": MessageLookupByLibrary.simpleMessage("社交"), "someItemsAreInBothEnteAndYourDevice": @@ -1177,12 +1177,12 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("存储空间"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("家庭"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("您"), - "storageInGB": m57, + "storageInGB": m58, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("已超出存储限制"), - "storageUsageInfo": m58, + "storageUsageInfo": m59, "strongStrength": MessageLookupByLibrary.simpleMessage("强"), - "subAlreadyLinkedErrMessage": m59, - "subWillBeCancelledOn": m60, + "subAlreadyLinkedErrMessage": m60, + "subWillBeCancelledOn": m61, "subscribe": MessageLookupByLibrary.simpleMessage("订阅"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage("您的订阅似乎已过期。请订阅以启用分享。"), @@ -1195,13 +1195,13 @@ class MessageLookup extends MessageLookupByLibrary { "successfullyUnhid": MessageLookupByLibrary.simpleMessage("已成功取消隐藏"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("建议新功能"), "support": MessageLookupByLibrary.simpleMessage("支持"), - "syncProgress": m61, + "syncProgress": m62, "syncStopped": MessageLookupByLibrary.simpleMessage("同步已停止"), "syncing": MessageLookupByLibrary.simpleMessage("正在同步···"), "systemTheme": MessageLookupByLibrary.simpleMessage("适应系统"), "tapToCopy": MessageLookupByLibrary.simpleMessage("点击以复制"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("点击以输入代码"), - "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("点击解锁"), "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), @@ -1219,7 +1219,7 @@ class MessageLookup extends MessageLookupByLibrary { "theme": MessageLookupByLibrary.simpleMessage("主题"), "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage("这些项目将从您的设备中删除。"), - "theyAlsoGetXGb": m62, + "theyAlsoGetXGb": m63, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage("他们将从所有相册中删除。"), "thisActionCannotBeUndone": @@ -1233,7 +1233,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("这个邮箱地址已经被使用"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage("此图像没有Exif 数据"), - "thisIsPersonVerificationId": m63, + "thisIsPersonVerificationId": m64, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage("这是您的验证 ID"), "thisWillLogYouOutOfTheFollowingDevice": @@ -1241,18 +1241,17 @@ class MessageLookup extends MessageLookupByLibrary { "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage("这将使您在此设备上退出登录!"), "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": - MessageLookupByLibrary.simpleMessage( - "To enable app lock, please setup device passcode or screen lock in your system settings."), + MessageLookupByLibrary.simpleMessage("要启用应用锁,请在系统设置中设置设备密码或屏幕锁定。"), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("隐藏照片或视频"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage("要重置您的密码,请先验证您的电子邮件。"), "todaysLogs": MessageLookupByLibrary.simpleMessage("当天日志"), "tooManyIncorrectAttempts": - MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + MessageLookupByLibrary.simpleMessage("错误尝试次数过多"), "total": MessageLookupByLibrary.simpleMessage("总计"), "totalSize": MessageLookupByLibrary.simpleMessage("总大小"), "trash": MessageLookupByLibrary.simpleMessage("回收站"), - "trashDaysLeft": m64, + "trashDaysLeft": m65, "trim": MessageLookupByLibrary.simpleMessage("修剪"), "tryAgain": MessageLookupByLibrary.simpleMessage("请再试一次"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( @@ -1291,18 +1290,19 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("最高五折优惠,直至12月4日。"), "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( "可用存储空间受您当前计划的限制。 当您升级您的计划时,超出要求的存储空间将自动变为可用。"), + "useAsCover": MessageLookupByLibrary.simpleMessage("用作封面"), "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage("对不在 Ente 上的人使用公开链接"), "useRecoveryKey": MessageLookupByLibrary.simpleMessage("使用恢复密钥"), "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("使用所选照片"), "usedSpace": MessageLookupByLibrary.simpleMessage("已用空间"), - "validTill": m65, + "validTill": m66, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage("验证失败,请重试"), "verificationId": MessageLookupByLibrary.simpleMessage("验证 ID"), "verify": MessageLookupByLibrary.simpleMessage("验证"), "verifyEmail": MessageLookupByLibrary.simpleMessage("验证电子邮件"), - "verifyEmailID": m66, + "verifyEmailID": m67, "verifyIDLabel": MessageLookupByLibrary.simpleMessage("验证"), "verifyPasskey": MessageLookupByLibrary.simpleMessage("验证通行密钥"), "verifyPassword": MessageLookupByLibrary.simpleMessage("验证密码"), @@ -1329,12 +1329,12 @@ class MessageLookup extends MessageLookupByLibrary { "weAreOpenSource": MessageLookupByLibrary.simpleMessage("我们是开源的 !"), "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage("我们不支持编辑您尚未拥有的照片和相册"), - "weHaveSendEmailTo": m67, + "weHaveSendEmailTo": m68, "weakStrength": MessageLookupByLibrary.simpleMessage("弱"), "welcomeBack": MessageLookupByLibrary.simpleMessage("欢迎回来!"), "whatsNew": MessageLookupByLibrary.simpleMessage("更新日志"), "yearly": MessageLookupByLibrary.simpleMessage("每年"), - "yearsAgo": m68, + "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("是"), "yesCancel": MessageLookupByLibrary.simpleMessage("是的,取消"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage("是的,转换为查看者"), @@ -1360,7 +1360,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("莫开玩笑,您不能与自己分享"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage("您没有任何存档的项目。"), - "youHaveSuccessfullyFreedUp": m69, + "youHaveSuccessfullyFreedUp": m70, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("您的账户已删除"), "yourMap": MessageLookupByLibrary.simpleMessage("您的地图"), diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 017e4378fd..3ae7fb3ded 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -9123,6 +9123,7 @@ class AppLocalizationDelegate extends LocalizationsDelegate { Locale.fromSubtags(languageCode: 'pl'), Locale.fromSubtags(languageCode: 'pt'), Locale.fromSubtags(languageCode: 'ru'), + Locale.fromSubtags(languageCode: 'tr'), Locale.fromSubtags(languageCode: 'zh'), ]; } diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index fdbada3b8e..1b93430eb8 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1,4 +1,5 @@ { + "@@locale ": "en", "enterYourEmailAddress": "Enter your email address", "accountWelcomeBack": "Welcome back!", "email": "Email", diff --git a/mobile/lib/l10n/intl_tr.arb b/mobile/lib/l10n/intl_tr.arb new file mode 100644 index 0000000000..fab7542695 --- /dev/null +++ b/mobile/lib/l10n/intl_tr.arb @@ -0,0 +1,1279 @@ +{ + "enterYourEmailAddress": "E-posta adresinizi girin", + "accountWelcomeBack": "Tekrar hoş geldiniz!", + "email": "E-Posta", + "cancel": "İptal Et", + "verify": "Doğrula", + "invalidEmailAddress": "Geçersiz e-posta adresi", + "enterValidEmail": "Lütfen geçerli bir E-posta adresi girin.", + "deleteAccount": "Hesabı sil", + "askDeleteReason": "Hesabınızı neden silmek istiyorsunuz?", + "deleteAccountFeedbackPrompt": "Aramızdan ayrıldığınız için üzgünüz. Lütfen kendimizi geliştirmemize yardımcı olun. Neden ayrıldığınızı Açıklar mısınız.", + "feedback": "Geri Bildirim", + "kindlyHelpUsWithThisInformation": "Lütfen bu bilgilerle bize yardımcı olun", + "confirmDeletePrompt": "Evet, bu hesabı ve tüm verileri kalıcı olarak silmek istiyorum.", + "confirmAccountDeletion": "Hesap silme işlemini onayla", + "deleteAccountPermanentlyButton": "Hesabımı kalıcı olarak sil", + "yourAccountHasBeenDeleted": "Hesabınız silindi", + "selectReason": "Ayrılma nedeninizi seçin", + "deleteReason1": "İhtiyacım olan önemli bir özellik eksik", + "deleteReason2": "Uygulama veya bir özellik olması gerektiğini düşündüğüm gibi çalışmıyor", + "deleteReason3": "Daha çok sevdiğim başka bir hizmet buldum", + "deleteReason4": "Nedenim listede yok", + "sendEmail": "E-posta gönder", + "deleteRequestSLAText": "İsteğiniz 72 saat içinde gerçekleştirilecek.", + "deleteEmailRequest": "Lütfen kayıtlı e-posta adresinizden account-deletion@ente.io'a e-posta gönderiniz.", + "entePhotosPerm": "Ente needs permission to preserve your photos", + "ok": "Tamam", + "createAccount": "Hesap oluşturun", + "createNewAccount": "Yeni bir hesap oluşturun", + "password": "Şifre", + "confirmPassword": "Şifrenizi onaylayın", + "activeSessions": "Aktif oturumlar", + "oops": "Hay aksi", + "somethingWentWrongPleaseTryAgain": "Bir şeyler ters gitti, lütfen tekrar deneyin", + "thisWillLogYouOutOfThisDevice": "Bu cihazdaki oturumunuz kapatılacak!", + "thisWillLogYouOutOfTheFollowingDevice": "Bu, sizi aşağıdaki cihazdan çıkış yapacak:", + "terminateSession": "Oturumu sonlandır?", + "terminate": "Sonlandır", + "thisDevice": "Bu cihaz", + "recoverButton": "Kurtar", + "recoverySuccessful": "Kurtarma başarılı!", + "decrypting": "Şifre çözülüyor...", + "incorrectRecoveryKeyTitle": "Yanlış kurtarma kodu", + "incorrectRecoveryKeyBody": "Girdiğiniz kurtarma kod yanlış", + "forgotPassword": "Şifremi unuttum", + "enterYourRecoveryKey": "Kurtarma kodunuzu girin", + "noRecoveryKey": "Kurtarma kodunuz yok mu?", + "sorry": "Üzgünüz", + "noRecoveryKeyNoDecryption": "Uçtan uca şifreleme protokolümüzün doğası gereği, verileriniz şifreniz veya kurtarma anahtarınız olmadan çözülemez", + "verifyEmail": "E-posta adresini doğrulayın", + "toResetVerifyEmail": "Şifrenizi sıfılamak için lütfen e-postanızı girin.", + "checkInboxAndSpamFolder": "Lütfen doğrulama işlemini tamamlamak için gelen kutunuzu (ve spam klasörünüzü) kontrol edin", + "tapToEnterCode": "Kodu girmek icin tıklayın", + "resendEmail": "E-postayı yeniden gönder", + "weHaveSendEmailTo": "E-postayı {email} adresine gönderdik", + "@weHaveSendEmailTo": { + "description": "Text to indicate that we have sent a mail to the user", + "placeholders": { + "email": { + "description": "The email address of the user", + "type": "String", + "example": "example@ente.io" + } + } + }, + "setPasswordTitle": "Parola ayarlayın", + "changePasswordTitle": "Parolanızı değiştirin", + "resetPasswordTitle": "Parolanızı sıfırlayın", + "encryptionKeys": "Sifreleme anahtarı", + "passwordWarning": "Şifrelerinizi saklamıyoruz, bu yüzden unutursanız, verilerinizi deşifre edemeyiz", + "enterPasswordToEncrypt": "Verilerinizi şifrelemek için kullanabileceğimiz bir şifre girin", + "enterNewPasswordToEncrypt": "Verilerinizi şifrelemek için kullanabileceğimiz yeni bir şifre girin", + "weakStrength": "Zayıf", + "strongStrength": "Güçlü", + "moderateStrength": "Ilımlı", + "passwordStrength": "Şifrenin güçlülük seviyesi: {passwordStrengthValue}", + "@passwordStrength": { + "description": "Text to indicate the password strength", + "placeholders": { + "passwordStrengthValue": { + "description": "The strength of the password as a string", + "type": "String", + "example": "Weak or Moderate or Strong" + } + }, + "message": "Password Strength: {passwordStrengthText}" + }, + "passwordChangedSuccessfully": "Şifreniz başarılı bir şekilde değiştirildi", + "generatingEncryptionKeys": "Şifreleme anahtarı oluşturuluyor...", + "pleaseWait": "Lütfen bekleyiniz...", + "continueLabel": "Devam edin", + "insecureDevice": "Güvenilir olmayan cihaz", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Üzgünüm, bu cihazda güvenli anahtarlarını oluşturamadık.\n\nLütfen başka bir cihazdan giriş yapmayı deneyiniz.", + "howItWorks": "Nasıl çalışır", + "encryption": "Şifreleme", + "ackPasswordLostWarning": "Şifremi kaybedersem, verilerim uçtan uca şifrelendiği için verilerimi kaybedebileceğimi farkındayım.", + "privacyPolicyTitle": "Mahremiyet Politikası", + "termsOfServicesTitle": "Şartlar", + "signUpTerms": "Hizmet Şartları'nı ve Gizlilik Politikası'nı kabul ediyorum", + "logInLabel": "Giriş yap", + "loginTerms": "\"Giriş yap\" düğmesine tıklayarak, Hizmet Şartları'nı ve Gizlilik Politikası'nı kabul ediyorum", + "changeEmail": "E-posta adresini değiştir", + "enterYourPassword": "Lütfen şifrenizi giriniz", + "welcomeBack": "Tekrardan hoşgeldin!", + "contactSupport": "Destek ile iletişim", + "incorrectPasswordTitle": "Yanlış şifre", + "pleaseTryAgain": "Lütfen tekrar deneyiniz", + "recreatePasswordTitle": "Sifrenizi tekrardan oluşturun", + "useRecoveryKey": "Kurtarma anahtarını kullan", + "recreatePasswordBody": "Cihazınız, şifrenizi doğrulamak için yeterli güce sahip değil, ancak tüm cihazlarda çalışacak şekilde yeniden oluşturabiliriz.\n\nLütfen kurtarma anahtarınızı kullanarak giriş yapın ve şifrenizi yeniden oluşturun (istediğiniz takdirde aynı şifreyi tekrar kullanabilirsiniz).", + "verifyPassword": "Şifrenizi doğrulayın", + "recoveryKey": "Kurtarma anahtarı", + "recoveryKeyOnForgotPassword": "Şifrenizi unutursanız, verilerinizi kurtarmanın tek yolu bu anahtar olacaktır.", + "recoveryKeySaveDescription": "Bu anahtarı saklamıyoruz, lütfen bu 24 kelime anahtarı güvenli bir yerde saklayın.", + "doThisLater": "Sonra yap", + "saveKey": "Anahtarı kaydet", + "recoveryKeyCopiedToClipboard": "Kurtarma anahtarınız panoya kopyalandı", + "recoverAccount": "Hesabı kurtar", + "recover": "Kurtarma", + "dropSupportEmail": "Lütfen kayıtlı e-posta adresinizden {supportEmail} adresine bir e-posta gönderin", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Cift faktör ayarı", + "enterCode": "Kodu giriniz", + "scanCode": "Kodu tarayın", + "codeCopiedToClipboard": "Kodunuz panoya kopyalandı", + "copypasteThisCodentoYourAuthenticatorApp": "Bu kodu kopyalayın ve kimlik doğrulama uygulamanıza yapıştırın", + "tapToCopy": "kopyalamak için dokunun", + "scanThisBarcodeWithnyourAuthenticatorApp": "Kimlik doğrulama uygulamanız ile kodu tarayın", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Doğrulama uygulamasındaki 6 basamaklı kodu giriniz", + "confirm": "Onayla", + "setupComplete": "Ayarlama işlemi başarılı", + "saveYourRecoveryKeyIfYouHaventAlready": "Henüz yapmadıysanız kurtarma anahtarınızı kaydetmeyi unutmayın", + "thisCanBeUsedToRecoverYourAccountIfYou": "Bu, iki faktörünüzü kaybederseniz hesabınızı kurtarmak için kullanılabilir", + "twofactorAuthenticationPageTitle": "İki faktörlü doğrulama", + "lostDevice": "Cihazı kayıp mı ettiniz?", + "verifyingRecoveryKey": "Kurtarma kodu doğrulanıyor...", + "recoveryKeyVerified": "Kurtarma kodu doğrulandı", + "recoveryKeySuccessBody": "Harika! Kurtarma anahtarınız geçerlidir. Doğrulama için teşekkür ederim.\n\nLütfen kurtarma anahtarınızı güvenli bir şekilde yedeklediğinizden emin olun.", + "invalidRecoveryKey": "Girdiğiniz kurtarma anahtarı geçerli değil. Lütfen anahtarın 24 kelime içerdiğinden ve her bir kelimenin doğru şekilde yazıldığından emin olun.\n\nEğer eski bir kurtarma kodu girdiyseniz, o zaman kodun 64 karakter uzunluğunda olduğunu kontrol edin.", + "invalidKey": "Gecersiz anahtar", + "tryAgain": "Tekrar deneyiniz", + "viewRecoveryKey": "Kurtarma anahtarını görüntüle", + "confirmRecoveryKey": "Kurtarma anahtarını doğrula", + "recoveryKeyVerifyReason": "Eğer şifrenizi unutursanız, fotoğraflarınızı kurtarmanın tek yolu kurtarma anahtarınızdır. Kurtarma anahtarınızı Ayarlar > Güvenlik bölümünde bulabilirsiniz.\n\nLütfen kurtarma anahtarınızı buraya girerek doğru bir şekilde kaydettiğinizi doğrulayın.", + "confirmYourRecoveryKey": "Kurtarma anahtarını doğrulayın", + "addViewer": "Görüntüleyici ekle", + "addCollaborator": "Düzenleyici ekle", + "addANewEmail": "Yeni e-posta ekle", + "orPickAnExistingOne": "Veya mevcut birini seçiniz", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Düzenleyiciler, paylaşılan albüme fotoğraf ve videolar ekleyebilir.", + "enterEmail": "E-postanızı giriniz", + "albumOwner": "Sahip", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Sen", + "collaborator": "Düzenleyici", + "addMore": "Daha fazla ekle", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Görüntüleyici", + "remove": "Kaldır", + "removeParticipant": "Katılımcıyı kaldır", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Yönet", + "addedAs": "Eklendi", + "changePermissions": "İzinleri değiştir?", + "yesConvertToViewer": "Evet, görüntüleyici olarak dönüştür", + "cannotAddMorePhotosAfterBecomingViewer": "{user}, bu albüme daha fazla fotoğraf ekleyemeyecek.\n\nAncak, kendi eklediği mevcut fotoğrafları kaldırmaya devam edebilecektir", + "allowAddingPhotos": "Fotoğraf eklemeye izin ver", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Bağlantıya sahip olan kişilere, paylaşılan albüme fotoğraf eklemelerine izin ver.", + "passwordLock": "Sifre kilidi", + "disableDownloadWarningTitle": "Lütfen dikkate alın", + "disableDownloadWarningBody": "Görüntüleyiciler, hala harici araçlar kullanarak ekran görüntüsü alabilir veya fotoğraflarınızın bir kopyasını kaydedebilir. Lütfen bunu göz önünde bulundurunuz", + "allowDownloads": "İndirmeye izin ver", + "linkDeviceLimit": "Cihaz limiti", + "noDeviceLimit": "Yok", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "Linkin geçerliliği", + "linkExpired": "Süresi dolmuş", + "linkEnabled": "Geçerli", + "linkNeverExpires": "Asla", + "expiredLinkInfo": "Bu bağlantının süresi dolmuştur. Lütfen yeni bir süre belirleyin veya bağlantı süresini devre dışı bırakın.", + "setAPassword": "Şifre ayarla", + "lockButtonLabel": "Kilit", + "enterPassword": "Şifrenizi girin", + "removeLink": "Linki kaldır", + "manageLink": "Linki yönet", + "linkExpiresOn": "Bu bağlantı {expiryTime} dan sonra geçersiz olacaktır", + "albumUpdated": "Albüm güncellendi", + "never": "Asla", + "custom": "Kişisel", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "1 saat sonra", + "after1Day": "1 gün sonra", + "after1Week": "1 hafta sonra", + "after1Month": "1 ay sonra", + "after1Year": "1 yıl sonra", + "manageParticipants": "Yönet", + "albumParticipantsCount": "{count, plural, =0 {Katılımcı Yok} =1 {1 Katılımcı} other {{count} Katılımcı}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "Create a link to allow people to add and view photos in your shared album without needing an Ente app or account. Great for collecting event photos.", + "collectPhotos": "Fotoğrafları topla", + "collaborativeLink": "Organizasyon bağlantısı", + "shareWithNonenteUsers": "Share with non-Ente users", + "createPublicLink": "Herkese açık link oluştur", + "sendLink": "Link gönder", + "copyLink": "Linki kopyala", + "linkHasExpired": "Bağlantının süresi dolmuş", + "publicLinkEnabled": "Herkese açık bağlantı aktive edildi", + "shareALink": "Linki paylaş", + "sharedAlbumSectionDescription": "Create shared and collaborative albums with other Ente users, including users on free plans.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Belirli kişilerle paylaş} =1 {1 kişiyle paylaşıldı} other {{numberOfPeople} kişiyle paylaşıldı}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Doğrulama kimliğiniz", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Size albümleri paylaşan biri, kendi cihazında aynı kimliği görmelidir.", + "howToViewShareeVerificationID": "Lütfen onlardan ayarlar ekranında e-posta adresine uzun süre basmalarını ve her iki cihazdaki kimliklerin eşleştiğini doğrulamalarını isteyin.", + "thisIsPersonVerificationId": "Bu, {email}'in Doğrulama Kimliği", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "Doğrulama kimliği", + "verifyEmailID": "{email} doğrula", + "emailNoEnteAccount": "{email} does not have an Ente account.\n\nSend them an invite to share photos.", + "shareMyVerificationID": "İşte ente.io için doğrulama kimliğim: {verificationID}.", + "shareTextConfirmOthersVerificationID": "Merhaba, bu ente.io doğrulama kimliğinizin doğruluğunu onaylayabilir misiniz: {verificationID}", + "somethingWentWrong": "Bazı şeyler yanlış gitti", + "sendInvite": "Davet kodu gönder", + "shareTextRecommendUsingEnte": "Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io", + "done": "Bitti", + "applyCodeTitle": "Kodu girin", + "enterCodeDescription": "Arkadaşınız tarafından sağlanan kodu girerek hem sizin hem de arkadaşınızın ücretsiz depolamayı talep etmek için girin", + "apply": "Uygula", + "failedToApplyCode": "Uygulanırken hata oluştu", + "enterReferralCode": "Davet kodunuzu girin", + "codeAppliedPageTitle": "Kod kabul edildi", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Alındı", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Ayrıntılar", + "claimMore": "Arttır!", + "theyAlsoGetXGb": "Aynı zamanda {storageAmountInGB} GB alıyorlar", + "freeStorageOnReferralSuccess": "Birisinin davet kodunuzu uygulayıp ücretli hesap açtığı her seferede {storageAmountInGB} GB", + "shareTextReferralCode": "Ente referral code: {referralCode} \n\nApply it in Settings → General → Referrals to get {referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io", + "claimFreeStorage": "Bedava alan talep edin", + "inviteYourFriends": "Arkadaşlarını davet et", + "failedToFetchReferralDetails": "Davet ayrıntıları çekilemedi. Iütfen daha sonra deneyin.", + "referralStep1": "1. Bu kodu arkadaşlarınıza verin", + "referralStep2": "2. Ücretli bir plan için kaydolsunlar", + "referralStep3": "3. Hepimiz {storageInGB} GB* bedava alın", + "referralsAreCurrentlyPaused": "Davetler şu anda durmuş durumda", + "youCanAtMaxDoubleYourStorage": "* Alanınızı en fazla ikiye katlayabilirsiniz", + "claimedStorageSoFar": "{isFamilyMember, select, true {Şu ana kadar aileniz {storageAmountInGb} GB aldı} false {Şu ana kadar {storageAmountInGb} GB aldınız} other {Şu ana kadar {storageAmountInGb} GB aldınız!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Sıkça sorulan sorular", + "help": "Yardım", + "oopsSomethingWentWrong": "Hoop, Birşeyler yanlış gitti", + "peopleUsingYourCode": "Kodunuzu kullananlar", + "eligible": "uygun", + "total": "total", + "codeUsedByYou": "Sizin kullandığınız kod", + "freeStorageClaimed": "Alınan bedava alan", + "freeStorageUsable": "Kullanılabilir bedava alan", + "usableReferralStorageInfo": "Kullanılabilir depolama alanı mevcut planınızla sınırlıdır. Talep edilen fazla depolama alanı, planınızı yükselttiğinizde otomatik olarak kullanılabilir hale gelecektir.", + "removeFromAlbumTitle": "Albümden çıkarılsın mı?", + "removeFromAlbum": "Albümden çıkar", + "itemsWillBeRemovedFromAlbum": "Seçilen öğeler bu albümden kaldırılacak", + "removeShareItemsWarning": "Kaldırdığınız öğelerden bazıları başkaları tarafından eklenmiştir ve bunlara erişiminizi kaybedeceksiniz", + "addingToFavorites": "Favorilere ekleniyor...", + "removingFromFavorites": "Favorilerimden kaldır...", + "sorryCouldNotAddToFavorites": "Üzgünüm, favorilere ekleyemedim!", + "sorryCouldNotRemoveFromFavorites": "Üzgünüm, favorilere ekleyemedim!", + "subscribeToEnableSharing": "Aboneliğinizin süresi dolmuş gibi görünüyor. Paylaşımı etkinleştirmek için lütfen abone olun.", + "subscribe": "Abone ol", + "canOnlyRemoveFilesOwnedByYou": "Yalnızca size ait dosyaları kaldırabilir", + "deleteSharedAlbum": "Paylaşılan albüm silinsin mi?", + "deleteAlbum": "Albümü sil", + "deleteAlbumDialog": "Ayrıca bu albümde bulunan fotoğrafları (ve videoları) parçası oldukları tüm diğer albümlerden silebilir miyim?", + "deleteSharedAlbumDialogBody": "Albüm herkes için silinecek\n\nBu albümdeki başkalarına ait paylaşılan fotoğraflara erişiminizi kaybedeceksiniz", + "yesRemove": "Evet, sil", + "creatingLink": "Bağlantı oluşturuluyor...", + "removeWithQuestionMark": "Kaldır?", + "removeParticipantBody": "{userEmail} bu paylaşılan albümden kaldırılacaktır\n\nOnlar tarafından eklenen tüm fotoğraflar da albümden kaldırılacaktır", + "keepPhotos": "Fotoğrafları sakla", + "deletePhotos": "Fotoğrafları sil", + "inviteToEnte": "Invite to Ente", + "removePublicLink": "Herkese açık link oluştur", + "disableLinkMessage": "Bu, \"{albumName}\"e erişim için olan genel bağlantıyı kaldıracaktır.", + "sharing": "Paylaşılıyor...", + "youCannotShareWithYourself": "Kendinizle paylaşamazsınız", + "archive": "Arşiv", + "createAlbumActionHint": "Fotoğrafları seçmek için uzun basın ve + düğmesine tıklayarak bir albüm oluşturun", + "importing": "İçeri aktarılıyor....", + "failedToLoadAlbums": "Albüm yüklenirken hata oluştu", + "hidden": "Gizle", + "authToViewYourHiddenFiles": "Gizli dosyalarınızı görüntülemek için kimlik doğrulama yapınız", + "trash": "Cöp kutusu", + "uncategorized": "Kategorisiz", + "videoSmallCase": "video", + "photoSmallCase": "fotoğraf", + "singleFileDeleteHighlight": "Tüm albümlerden silinecek.", + "singleFileInBothLocalAndRemote": "This {fileType} is in both Ente and your device.", + "singleFileInRemoteOnly": "This {fileType} will be deleted from Ente.", + "singleFileDeleteFromDevice": "Bu {fileType}, cihazınızdan silinecek.", + "deleteFromEnte": "Delete from Ente", + "yesDelete": "Evet, sil", + "movedToTrash": "Cöp kutusuna taşı", + "deleteFromDevice": "Cihazınızdan silin", + "deleteFromBoth": "Her ikisinden de sil", + "newAlbum": "Yeni albüm", + "albums": "Albümler", + "memoryCount": "{count, plural, zero{anı yok} \none{{formattedCount} anı} \nother{{formattedCount} anılar}}", + "@memoryCount": { + "description": "The text to display the number of memories", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "formattedCount": { + "type": "String", + "example": "11.513, 11,511" + } + } + }, + "selectedPhotos": "{count} seçildi", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "Seçilenler: {count} ({yourCount} sizin seçiminiz)", + "@selectedPhotosWithYours": { + "description": "Display the number of selected photos, including the number of selected photos owned by the user", + "type": "text", + "placeholders": { + "count": { + "example": "12", + "type": "int" + }, + "yourCount": { + "example": "2", + "type": "int" + } + } + }, + "advancedSettings": "Gelişmiş", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Fotoğraf ızgara boyutu", + "manageDeviceStorage": "Cihaz depolamasını yönet", + "machineLearning": "Makine öğrenimi", + "magicSearch": "Sihirli arama", + "mlIndexingDescription": "Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed.", + "loadingModel": "Modeller indiriliyor...", + "waitingForWifi": "WiFi bekleniyor...", + "status": "Durum", + "indexedItems": "Yeni öğeleri indeksle", + "pendingItems": "Bekleyen Öğeler", + "clearIndexes": "Açık Dizin", + "selectFoldersForBackup": "Yedekleme için klasörleri seçin", + "selectedFoldersWillBeEncryptedAndBackedUp": "Seçilen klasörler şifrelenecek ve yedeklenecektir", + "unselectAll": "Tümünün seçimini kaldır", + "selectAll": "Hepsini seç", + "skip": "Geç", + "updatingFolderSelection": "Klasör seçimi güncelleniyor...", + "itemCount": "{count,plural, one{{count} öğe} other{{count} öğeler}}", + "deleteItemCount": "{count, plural, =1 {Delete {count} item} other {Delete {count} items}}", + "duplicateItemsGroup": "{count} dosyalar, {formattedSize} her biri", + "@duplicateItemsGroup": { + "description": "Display the number of duplicate files and their size", + "type": "text", + "placeholders": { + "count": { + "example": "12", + "type": "int" + }, + "formattedSize": { + "example": "2.3 MB", + "type": "String" + } + } + }, + "showMemories": "Anıları göster", + "yearsAgo": "{count, plural, one{{count} yıl önce} other{{count} yıl önce}}", + "backupSettings": "Yedekleme seçenekleri", + "backupOverMobileData": "Mobil veri ile yedekle", + "backupVideos": "Videolari yedekle", + "disableAutoLock": "Otomatik kilidi devre dışı bırak", + "deviceLockExplanation": "Disable the device screen lock when Ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster.", + "about": "Hakkında", + "weAreOpenSource": "Biz açık kaynağız!", + "privacy": "Gizlilik", + "terms": "Şartlar", + "checkForUpdates": "Güncellemeleri kontol et", + "checkStatus": "Check status", + "checking": "Kontrol ediliyor...", + "youAreOnTheLatestVersion": "En son sürüme sahipsiniz", + "account": "Hesap", + "manageSubscription": "Abonelikleri yönet", + "authToChangeYourEmail": "E-postanızı değiştirmek için lütfen kimlik doğrulaması yapın", + "changePassword": "Sifrenizi değiştirin", + "authToChangeYourPassword": "Şifrenizi değiştirmek için lütfen kimlik doğrulaması yapın", + "emailVerificationToggle": "E-posta doğrulama", + "authToChangeEmailVerificationSetting": "E-posta doğrulamasını değiştirmek için lütfen kimlik doğrulaması yapın", + "exportYourData": "Veriyi dışarı aktar", + "logout": "Çıkış yap", + "authToInitiateAccountDeletion": "Hesap silme işlemini başlatmak için lütfen kimlik doğrulaması yapın", + "areYouSureYouWantToLogout": "Çıkış yapmak istediğinize emin misiniz?", + "yesLogout": "Evet, oturumu kapat", + "aNewVersionOfEnteIsAvailable": "A new version of Ente is available.", + "update": "Güncelle", + "installManually": "Manuel kurulum", + "criticalUpdateAvailable": "Kritik güncelleme mevcut", + "updateAvailable": "Güncelleme mevcut", + "ignoreUpdate": "Yoksay", + "downloading": "İndiriliyor...", + "cannotDeleteSharedFiles": "Dosyalar silinemiyor", + "theDownloadCouldNotBeCompleted": "İndirme işlemi tamamlanamadı", + "retry": "Tekrar dene", + "backedUpFolders": "Yedeklenmiş klasörler", + "backup": "Yedekle", + "freeUpDeviceSpace": "Cihaz alanını boşaltın", + "freeUpDeviceSpaceDesc": "Save space on your device by clearing files that have been already backed up.", + "allClear": "✨ Tamamen temizle", + "noDeviceThatCanBeDeleted": "Bu cihazda silinebilecek hiçbir dosyanız yok", + "removeDuplicates": "Yinelenenleri kaldır", + "removeDuplicatesDesc": "Review and remove files that are exact duplicates.", + "viewLargeFiles": "Large files", + "viewLargeFilesDesc": "View files that are consuming the most amount of storage", + "noDuplicates": "Yinelenenleri kaldır", + "youveNoDuplicateFilesThatCanBeCleared": "Temizlenebilecek yinelenen dosyalarınız yok", + "success": "Başarılı", + "rateUs": "Bizi değerlendirin", + "remindToEmptyDeviceTrash": "Ayrıca boşalan alanı talep etmek için \"Ayarlar\" -> \"Depolama\" bölümünden \"Son Silinenler \"i boşaltın", + "youHaveSuccessfullyFreedUp": "Başarılı bir şekilde {storageSaved} alanını boşalttınız!", + "@youHaveSuccessfullyFreedUp": { + "description": "The text to display when the user has successfully freed up storage", + "type": "text", + "placeholders": { + "storageSaved": { + "example": "1.2 GB", + "type": "String" + } + } + }, + "remindToEmptyEnteTrash": "Ayrıca boşalan alana sahip olmak için \"Çöp Kutunuzu\" boşaltın", + "sparkleSuccess": "✨ Başarılı", + "duplicateFileCountWithStorageSaved": "You have cleaned up {count, plural, one{{count} duplicate file} other{{count} duplicate files}}, saving ({storageSaved}!)", + "@duplicateFileCountWithStorageSaved": { + "description": "The text to display when the user has successfully cleaned up duplicate files", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "storageSaved": { + "example": "1.2 GB", + "type": "String" + } + } + }, + "familyPlans": "Aile Planı", + "referrals": "Referanslar", + "notifications": "Bildirimler", + "sharedPhotoNotifications": "Paylaşılan fotoğrafları ekle", + "sharedPhotoNotificationsExplanation": "Birisi sizin de parçası olduğunuz paylaşılan bir albüme fotoğraf eklediğinde bildirim alın", + "advanced": "Gelişmiş", + "general": "Genel", + "security": "Güvenlik", + "authToViewYourRecoveryKey": "Kurtarma anahtarınızı görmek için lütfen kimliğinizi doğrulayın", + "twofactor": "İki faktör", + "authToConfigureTwofactorAuthentication": "İki faktörlü kimlik doğrulamayı yapılandırmak için lütfen kimlik doğrulaması yapın", + "lockscreen": "Kilit ekranı", + "authToChangeLockscreenSetting": "Kilit ekranı ayarını değiştirmek için lütfen kimliğinizi doğrulayın", + "lockScreenEnablePreSteps": "Kilit ekranını aktif etmek için lütfen cihazın ayarlarından şifreyi ya da ekran kilidini ayarlayın.", + "viewActiveSessions": "Aktif oturumları görüntüle", + "authToViewYourActiveSessions": "Aktif oturumlarınızı görüntülemek için lütfen kimliğinizi doğrulayın", + "disableTwofactor": "İki Aşamalı Doğrulamayı Devre Dışı Bırak", + "confirm2FADisable": "İki adımlı kimlik doğrulamasını devre dışı bırakmak istediğinize emin misiniz?", + "no": "Hayır", + "yes": "Evet", + "social": "Sosyal Medya", + "rateUsOnStore": "Bizi {storeName} üzerinden değerlendirin", + "blog": "Blog", + "merchandise": "Ürünler", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Depolama bilgisi alınamadı", + "reportABug": "Hatayı bildir", + "reportBug": "Hata bildir", + "suggestFeatures": "Özellik önerin", + "support": "Destek", + "theme": "Tema", + "lightTheme": "Aydınlık", + "darkTheme": "Karanlık", + "systemTheme": "Sistem", + "freeTrial": "Ücretsiz deneme", + "selectYourPlan": "Planınızı seçin", + "enteSubscriptionPitch": "Ente preserves your memories, so they're always available to you, even if you lose your device.", + "enteSubscriptionShareWithFamily": "Aileniz de planınıza eklenebilir.", + "currentUsageIs": "Güncel kullanımınız ", + "@currentUsageIs": { + "description": "This text is followed by storage usage", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "Sık sorulanlar", + "renewsOn": "Abonelik {endDate} tarihinde yenilenir", + "freeTrialValidTill": "Ücretsiz deneme {endDate} sona erir", + "validTill": "{endDate} tarihine kadar geçerli", + "addOnValidTill": "{storageAmount} eklentiniz {endDate} tarihine kadar geçerlidir", + "playStoreFreeTrialValidTill": "Free trial valid till {endDate}.\nYou can choose a paid plan afterwards.", + "subWillBeCancelledOn": "Aboneliğiniz {endDate} tarihinde iptal edilecektir", + "subscription": "Abonelik", + "paymentDetails": "Ödeme detayları", + "manageFamily": "Aileyi yönet", + "contactToManageSubscription": "Lütfen {provider} aboneliğinizi yönetmek için support@ente.io adresinden bizimle iletişime geçin.", + "renewSubscription": "Abonelik yenileme", + "cancelSubscription": "Abonelik iptali", + "areYouSureYouWantToRenew": "Yenilemek istediğinize emin misiniz?", + "yesRenew": "Evet, yenile", + "areYouSureYouWantToCancel": "İptal etmek istediğinize emin misiniz?", + "yesCancel": "Evet, iptal et", + "failedToRenew": "Abonelik yenilenirken hata oluştu", + "failedToCancel": "İptal edilirken sorun oluştu", + "twoMonthsFreeOnYearlyPlans": "Yıllık planlarda 2 ay ücretsiz", + "monthly": "Aylık", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Yıllık", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Plan değişikliğini onaylayın", + "areYouSureYouWantToChangeYourPlan": "Planı değistirmek istediğinize emin misiniz?", + "youCannotDowngradeToThisPlan": "Bu plana geçemezsiniz", + "cancelOtherSubscription": "Lütfen önce mevcut aboneliğinizi {paymentProvider} adresinden iptal edin", + "@cancelOtherSubscription": { + "description": "The text to display when the user has an existing subscription from a different payment provider", + "type": "text", + "placeholders": { + "paymentProvider": { + "example": "Apple", + "type": "String" + } + } + }, + "optionalAsShortAsYouLike": "İsteğe bağlı, istediğiniz kadar kısa...", + "send": "Gönder", + "askCancelReason": "Aboneliğiniz iptal edilmiştir. Bunun sebebini paylaşmak ister misiniz?", + "thankYouForSubscribing": "Abone olduğunuz için teşekkürler!", + "yourPurchaseWasSuccessful": "Satın alım başarılı", + "yourPlanWasSuccessfullyUpgraded": "Planınız başarılı şekilde yükseltildi", + "yourPlanWasSuccessfullyDowngraded": "Planınız başarıyla düşürüldü", + "yourSubscriptionWasUpdatedSuccessfully": "Aboneliğiniz başarıyla güncellendi", + "googlePlayId": "Google play kimliği", + "appleId": "Apple kimliği", + "playstoreSubscription": "PlayStore aboneliği", + "appstoreSubscription": "PlayStore aboneliği", + "subAlreadyLinkedErrMessage": "Your {id} is already linked to another Ente account.\nIf you would like to use your {id} with this account, please contact our support''", + "visitWebToManage": "Aboneliğinizi yönetmek için lütfen web.ente.io adresini ziyaret edin", + "couldNotUpdateSubscription": "Abonelikler kaydedilemedi", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Lütfen support@ente.io ile iletişime geçin; size yardımcı olmaktan memnuniyet duyarız!", + "paymentFailed": "Ödeme başarısız oldu", + "paymentFailedTalkToProvider": "Sizden ücret alındıysa lütfen {providerName} destek ekibiyle görüşün", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Ücretsiz denemeye devam et", + "areYouSureYouWantToExit": "Çıkmak istediğinden emin misin?", + "thankYou": "Teşekkürler", + "failedToVerifyPaymentStatus": "Ödeme durumu doğrulanamadı", + "pleaseWaitForSometimeBeforeRetrying": "Tekrar denemeden önce lütfen bir süre bekleyin", + "paymentFailedMessage": "Maalesef ödemeniz başarısız oldu. Lütfen destekle iletişime geçin, size yardımcı olacağız!", + "youAreOnAFamilyPlan": "Aile planı kullanıyorsunuz!", + "contactFamilyAdmin": "Aboneliğinizi yönetmek için lütfen {familyAdminEmail} ile iletişime geçin", + "leaveFamily": "Aile planından ayrıl", + "areYouSureThatYouWantToLeaveTheFamily": "Aile planından ayrılmak istediğinize emin misiniz?", + "leave": "Çıkış yap", + "rateTheApp": "Uygulamaya puan verin", + "startBackup": "Yedeklemeyi başlat", + "noPhotosAreBeingBackedUpRightNow": "Şu anda hiçbir fotoğraf yedeklenmiyor", + "preserveMore": "Daha fazlasını koruyun", + "grantFullAccessPrompt": "Lütfen Ayarlar uygulamasında tüm fotoğraflara erişime izin verin", + "openSettings": "Ayarları Açın", + "selectMorePhotos": "Daha Fazla Fotoğraf Seç", + "existingUser": "Mevcut kullanıcı", + "privateBackups": "Özel yedeklemeler", + "forYourMemories": "anıların için", + "endtoendEncryptedByDefault": "Varsayılan olarak uçtan uca şifrelenmiş", + "safelyStored": "Güvenle saklanır", + "atAFalloutShelter": "serpinti sığınağında", + "designedToOutlive": "Hayatta kalmak için tasarlandı", + "available": "Mevcut", + "everywhere": "her yerde", + "androidIosWebDesktop": "Android, iOS, Web, Masaüstü", + "mobileWebDesktop": "Mobil, Web, Masaüstü", + "newToEnte": "New to Ente", + "pleaseLoginAgain": "Lütfen tekrar giriş yapın", + "autoLogoutMessage": "Due to technical glitch, you have been logged out. Our apologies for the inconvenience.", + "yourSubscriptionHasExpired": "Aboneliğinizin süresi doldu", + "storageLimitExceeded": "Depolama sınırı aşıldı", + "upgrade": "Yükselt", + "raiseTicket": "Bileti artır", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "Yedekleme başarısız oldu", + "couldNotBackUpTryLater": "Verilerinizi yedekleyemedik.\nDaha sonra tekrar deneyeceğiz.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente can encrypt and preserve files only if you grant access to them", + "pleaseGrantPermissions": "Lütfen izin ver", + "grantPermission": "İzinleri değiştir", + "privateSharing": "Özel paylaşım", + "shareOnlyWithThePeopleYouWant": "Yalnızca istediğiniz kişilerle paylaşın", + "usePublicLinksForPeopleNotOnEnte": "Use public links for people not on Ente", + "allowPeopleToAddPhotos": "Kullanıcıların fotoğraf eklemesine izin ver", + "shareAnAlbumNow": "Şimdi bir albüm paylaşın", + "collectEventPhotos": "Etkinlik fotoğraflarını topla", + "sessionExpired": "Oturum süresi doldu", + "loggingOut": "Çıkış yapılıyor...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "Bu cihaz", + "@onEnte": { + "description": "The text displayed above albums backed up to Ente", + "type": "text" + }, + "onEnte": "ente üzerinde", + "name": "İsim", + "newest": "En yeni", + "lastUpdated": "En son güncellenen", + "deleteEmptyAlbums": "Boş albümleri sil", + "deleteEmptyAlbumsWithQuestionMark": "Boş albümleri sileyim mi?", + "deleteAlbumsDialogBody": "Bu, tüm boş albümleri silecektir. Bu, albüm listenizdeki dağınıklığı azaltmak istediğinizde kullanışlıdır.", + "deleteProgress": "Siliniyor {currentlyDeleting} / {totalCount}", + "genericProgress": "Siliniyor {currentlyProcessing} / {totalCount}", + "@genericProgress": { + "description": "Generic progress text to display when processing multiple items", + "type": "text", + "placeholders": { + "currentlyProcessing": { + "example": "1", + "type": "int" + }, + "totalCount": { + "example": "10", + "type": "int" + } + } + }, + "permanentlyDelete": "Kalıcı olarak sil", + "canOnlyCreateLinkForFilesOwnedByYou": "Yalnızca size ait dosyalar için bağlantı oluşturabilir", + "publicLinkCreated": "Herkese açık link oluşturuldu", + "youCanManageYourLinksInTheShareTab": "Bağlantılarınızı paylaşım sekmesinden yönetebilirsiniz.", + "linkCopiedToClipboard": "Link panoya kopyalandı", + "restore": "Yenile", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Albüme taşı", + "unhide": "Gizleme", + "unarchive": "Arşivden cıkar", + "favorite": "Favori", + "removeFromFavorite": "Favorilerimden kaldır", + "shareLink": "Linki paylaş", + "createCollage": "Kolaj oluştur", + "saveCollage": "Kolajı kaydet", + "collageSaved": "Kolajınız galeriye kaydedildi", + "collageLayout": "Düzen", + "addToEnte": "Add to Ente", + "addToAlbum": "Albüme ekle", + "delete": "Sil", + "hide": "Gizle", + "share": "Paylaş", + "unhideToAlbum": "Albümü gizleme", + "restoreToAlbum": "Albümü yenile", + "moveItem": "{count, plural, one {Öğeyi taşı} other {Öğeleri taşı}}", + "@moveItem": { + "description": "Page title while moving one or more items to an album" + }, + "addItem": "{count, plural, one {Öğeyi taşı} other {Öğeleri taşı}}", + "@addItem": { + "description": "Page title while adding one or more items to album" + }, + "createOrSelectAlbum": "Albüm oluştur veya seç", + "selectAlbum": "Albüm seçin", + "searchByAlbumNameHint": "Albüm adı", + "albumTitle": "Albüm Başlığı", + "enterAlbumName": "Bir albüm adı girin", + "restoringFiles": "Dosyalar geri yükleniyor...", + "movingFilesToAlbum": "Dosyalar albüme taşınıyor...", + "unhidingFilesToAlbum": "Albümdeki dosyalar gösteriliyor", + "canNotUploadToAlbumsOwnedByOthers": "Başkalarına ait albümlere yüklenemez", + "uploadingFilesToAlbum": "Dosyalar albüme taşınıyor...", + "addedSuccessfullyTo": "{albumName} albümüne başarıyla eklendi", + "movedSuccessfullyTo": "{albumName} adlı albüme başarıyla taşındı", + "thisAlbumAlreadyHDACollaborativeLink": "Bu albümde zaten bir ortak çalışma bağlantısı var", + "collaborativeLinkCreatedFor": "{albumName} için ortak çalışma bağlantısı oluşturuldu", + "askYourLovedOnesToShare": "Sevdiklerinizden paylaşmalarını isteyin", + "invite": "Davet et", + "shareYourFirstAlbum": "İlk albümünüzü paylaşın", + "sharedWith": "{emailIDs} ile paylaşıldı", + "sharedWithMe": "Benimle paylaşılan", + "sharedByMe": "Benim paylaştıklarım", + "doubleYourStorage": "Depolama alanınızı ikiye katlayın", + "referFriendsAnd2xYourPlan": "Arkadaşlarınıza önerin ve planınızı 2 katına çıkarın", + "shareAlbumHint": "Bir albüm açın ve paylaşmak için sağ üstteki paylaş düğmesine dokunun.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Öğeler, kalıcı olarak silinmeden önce kalan gün sayısını gösterir", + "trashDaysLeft": "{count, plural, =0{gün} =1{1 gün} other{{count} gün}}", + "@trashDaysLeft": { + "description": "Text to indicate number of days remaining before permanent deletion", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "deleteAll": "Hepsini Sil", + "renameAlbum": "Albümü yeniden adlandır", + "convertToAlbum": "Albüme taşı", + "setCover": "Kapak Belirle", + "@setCover": { + "description": "Text to set cover photo for an album" + }, + "sortAlbumsBy": "Sırala", + "sortNewestFirst": "Yeniden eskiye", + "sortOldestFirst": "Önce en eski", + "rename": "Yeniden adlandır", + "leaveSharedAlbum": "Paylaşılan albüm silinsin mi?", + "leaveAlbum": "Albümü yeniden adlandır", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Eklediğiniz fotoğraflar albümden kaldırılacak", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Bu cihazda silinebilecek hiçbir dosyanız yok", + "youDontHaveAnyArchivedItems": "Arşivlenmiş öğeniz yok.", + "ignoredFolderUploadReason": "Some files in this album are ignored from upload because they had previously been deleted from Ente.", + "resetIgnoredFiles": "Yok sayılan dosyaları sıfırla", + "deviceFilesAutoUploading": "Files added to this device album will automatically get uploaded to Ente.", + "turnOnBackupForAutoUpload": "Turn on backup to automatically upload files added to this device folder to Ente.", + "noHiddenPhotosOrVideos": "Gizli fotoğraf veya video yok", + "toHideAPhotoOrVideo": "Bir fotoğrafı veya videoyu gizlemek için", + "openTheItem": "• Öğeyi açın", + "clickOnTheOverflowMenu": "• Taşma menüsüne tıklayın", + "click": "• Tıklamak", + "nothingToSeeHere": "Burada görülecek bir şey yok! 👀", + "unarchiveAlbum": "Arşivden Çıkar", + "archiveAlbum": "Albümü arşivle", + "calculating": "Hesaplanıyor...", + "pleaseWaitDeletingAlbum": "Lütfen bekleyin, albüm siliniyor", + "searchByExamples": "• Albüm adları (ör. \"Kamera\")\n• Dosya türleri (ör. \"Videolar\", \".gif\")\n• Yıllar ve aylar (ör. \"2022\", \"Ocak\")\n• Tatiller (ör. \"Noel\")\n• Fotoğraf açıklamaları (ör. \"#eğlence\")", + "youCanTrySearchingForADifferentQuery": "Farklı bir sorgu aramayı deneyebilirsiniz.", + "noResultsFound": "Hiçbir sonuç bulunamadı", + "addedBy": "{emailOrName} tarafından eklendi", + "loadingExifData": "EXIF verileri yükleniyor...", + "viewAllExifData": "Tüm EXIF verilerini görüntüle", + "noExifData": "EXIF verisi yok", + "thisImageHasNoExifData": "Bu görselde exif verisi yok", + "exif": "EXIF", + "noResults": "Sonuç bulunamadı", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Henüz sahibi olmadığınız fotoğraf ve albümlerin düzenlenmesini desteklemiyoruz", + "failedToFetchOriginalForEdit": "Düzenleme için orijinal getirilemedi", + "close": "Kapat", + "setAs": "Şu şekilde ayarla", + "fileSavedToGallery": "Video galeriye kaydedildi", + "filesSavedToGallery": "Files saved to gallery", + "fileFailedToSaveToGallery": "Dosya galeriye kaydedilemedi", + "download": "İndir", + "pressAndHoldToPlayVideo": "Videoları yönetmek için basılı tutun", + "pressAndHoldToPlayVideoDetailed": "Videoyu oynatmak için resmi basılı tutun", + "downloadFailed": "İndirme başarısız", + "deduplicateFiles": "Dosyaları Tekilleştirme", + "deselectAll": "Tüm seçimi kaldır", + "reviewDeduplicateItems": "Lütfen kopya olduğunu düşündüğünüz öğeleri inceleyin ve silin.", + "clubByCaptureTime": "Yakalama zamanına göre kulüp", + "clubByFileName": "Dosya adına göre kulüp", + "count": "Miktar", + "totalSize": "Toplam boyut", + "longpressOnAnItemToViewInFullscreen": "Tam ekranda görüntülemek için bir öğeye uzun basın", + "decryptingVideo": "Videonun şifresi çözülüyor...", + "authToViewYourMemories": "Kodlarınızı görmek için lütfen kimlik doğrulaması yapın", + "unlock": "Kilidi aç", + "freeUpSpace": "Boş alan", + "freeUpSpaceSaving": "{count, plural, one {Yer açmak için cihazdan silinebilir {formattedSize}} other {Yer açmak için cihazdan silinebilir {formattedSize}}}", + "filesBackedUpInAlbum": "Bu albümdeki {count, plural, one {1 file} other {{formattedNumber} dosya}} güvenli bir şekilde yedeklendi", + "@filesBackedUpInAlbum": { + "description": "Text to tell user how many files have been backed up in the album", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "formattedNumber": { + "content": "{formattedNumber}", + "example": "1,000", + "type": "String" + } + } + }, + "filesBackedUpFromDevice": "Bu cihazdaki {count, plural, one {1 file} other {{formattedNumber} dosya}} güvenli bir şekilde yedeklendi", + "@filesBackedUpFromDevice": { + "description": "Text to tell user how many files have been backed up from this device", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "formattedNumber": { + "content": "{formattedNumber}", + "example": "1,000", + "type": "String" + } + } + }, + "@freeUpSpaceSaving": { + "description": "Text to tell user how much space they can free up by deleting items from the device" + }, + "freeUpAccessPostDelete": "You can still access {count, plural, one {it} other {them}} on Ente as long as you have an active subscription", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "freeUpAmount": "{sizeInMBorGB} yer açın", + "thisEmailIsAlreadyInUse": "Bu e-posta zaten kullanılıyor", + "incorrectCode": "Yanlış kod", + "authenticationFailedPleaseTryAgain": "Kimlik doğrulama başarısız oldu, lütfen tekrar deneyin", + "verificationFailedPleaseTryAgain": "Doğrulama başarısız oldu, lütfen tekrar deneyin", + "authenticating": "Kimlik doğrulanıyor...", + "authenticationSuccessful": "Kimlik doğrulama başarılı!", + "incorrectRecoveryKey": "Yanlış kurtarma kodu", + "theRecoveryKeyYouEnteredIsIncorrect": "Girdiğiniz kurtarma kodu yanlış", + "twofactorAuthenticationSuccessfullyReset": "İki faktörlü kimlik doğrulama başarıyla sıfırlandı", + "pleaseVerifyTheCodeYouHaveEntered": "Lütfen girdiğiniz kodu doğrulayın", + "pleaseContactSupportIfTheProblemPersists": "Bu hata devam ederse lütfen desteğe başvurun", + "twofactorAuthenticationHasBeenDisabled": "İki faktörlü kimlik doğrulama devre dışı", + "sorryTheCodeYouveEnteredIsIncorrect": "Üzgünüz, girdiğiniz kod yanlış", + "yourVerificationCodeHasExpired": "Doğrulama kodunuzun süresi doldu", + "emailChangedTo": "E-posta {newEmail} olarak değiştirildi", + "verifying": "Doğrulanıyor...", + "disablingTwofactorAuthentication": "İki aşamalı doğrulamayı devre dışı bırak...", + "allMemoriesPreserved": "Tüm anılar saklandı", + "loadingGallery": "Galeri yükleniyor...", + "syncing": "Eşitleniyor...", + "encryptingBackup": "Yedekleme şifreleniyor...", + "syncStopped": "Senkronizasyon durduruldu", + "syncProgress": "{completed}/{total} anı korundu", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "String" + }, + "total": { + "type": "String" + } + } + }, + "archiving": "Arşivleniyor...", + "unarchiving": "Arşivden çıkarılıyor...", + "successfullyArchived": "Başarıyla arşivlendi", + "successfullyUnarchived": "Başarıyla arşivden çıkarıldı", + "renameFile": "Dosyayı yeniden adlandır", + "enterFileName": "Dosya adını girin", + "filesDeleted": "Dosyalar silinmiş", + "selectedFilesAreNotOnEnte": "Selected files are not on Ente", + "thisActionCannotBeUndone": "Bu eylem geri alınamaz", + "emptyTrash": "Çöp kutusu boşaltılsın mı?", + "permDeleteWarning": "Çöp kutusundaki tüm öğeler kalıcı olarak silinecek\n\nBu işlem geri alınamaz", + "empty": "Boşalt", + "couldNotFreeUpSpace": "Yer boşaltılamadı", + "permanentlyDeleteFromDevice": "Cihazdan kalıcı olarak silinsin mi?", + "someOfTheFilesYouAreTryingToDeleteAre": "Silmeye çalıştığınız dosyalardan bazıları yalnızca cihazınızda mevcuttur ve silindiği takdirde kurtarılamaz", + "theyWillBeDeletedFromAllAlbums": "Tüm albümlerden silinecek.", + "someItemsAreInBothEnteAndYourDevice": "Some items are in both Ente and your device.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Seçilen öğeler tüm albümlerden silinecek ve çöp kutusuna taşınacak.", + "theseItemsWillBeDeletedFromYourDevice": "Bu öğeler cihazınızdan silinecektir.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin.", + "error": "Hata", + "tempErrorContactSupportIfPersists": "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin.", + "networkHostLookUpErr": "Ente'ye bağlanılamıyor. Lütfen ağ ayarlarınızı kontrol edin ve hata devam ederse destek ekibiyle iletişime geçin.", + "networkConnectionRefusedErr": "Ente'ye bağlanılamıyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse lütfen desteğe başvurun.", + "cachedData": "Ön belleğe alınan veri", + "clearCaches": "Önbellekleri temizle", + "remoteImages": "Uzaktan Görüntüler", + "remoteVideos": "Uzak videolar", + "remoteThumbnails": "Uzak Küçük Resim", + "pendingSync": "Senkronizasyon bekleniyor", + "localGallery": "Yerel galeri", + "todaysLogs": "Bugünün günlükleri", + "viewLogs": "Günlükleri göster", + "logsDialogBody": "Bu, sorununuzu gidermemize yardımcı olmak için günlükleri gönderecektir. Belirli dosyalarla ilgili sorunların izlenmesine yardımcı olmak için dosya adlarının ekleneceğini lütfen unutmayın.", + "preparingLogs": "Günlük hazırlanıyor...", + "emailYourLogs": "Günlüklerinizi e-postayla gönderin", + "pleaseSendTheLogsTo": "Lütfen günlükleri şu adrese gönderin\n{toEmail}", + "copyEmailAddress": "E-posta adresini kopyala", + "exportLogs": "Günlüğü dışa aktar", + "pleaseEmailUsAt": "Lütfen bize {toEmail} adresinden ulaşın", + "dismiss": "Reddet", + "didYouKnow": "Biliyor musun?", + "loadingMessage": "Fotoğraflarınız yükleniyor...", + "loadMessage1": "Aboneliğinizi ailenizle paylaşabilirsiniz", + "loadMessage2": "Şu ana kadar 30 milyondan fazla anıyı koruduk", + "loadMessage3": "Verilerinizin 3 kopyasını saklıyoruz, biri yer altı serpinti sığınağında", + "loadMessage4": "Tüm uygulamalarımız açık kaynaktır", + "loadMessage5": "Kaynak kodumuz ve şifrelememiz harici olarak denetlenmiştir", + "loadMessage6": "Albümlerinizin bağlantılarını sevdiklerinizle paylaşabilirsiniz", + "loadMessage7": "Mobil uygulamalarımız, tıkladığınız yeni fotoğrafları şifrelemek ve yedeklemek için arka planda çalışır", + "loadMessage8": "web.ente.io'nun mükemmel bir yükleyicisi var", + "loadMessage9": "Verilerinizi güvenli bir şekilde şifrelemek için Xchacha20Poly1305 kullanıyoruz", + "photoDescriptions": "Fotoğraf Açıklaması", + "fileTypesAndNames": "Dosya türleri ve adları", + "location": "Konum", + "moments": "Anlar", + "searchFaceEmptySection": "People will be shown here once indexing is done", + "searchDatesEmptySection": "Tarihe, aya veya yıla göre arama yapın", + "searchLocationEmptySection": "Bir fotoğrafın belli bir yarıçapında çekilen fotoğrafları gruplandırın", + "searchPeopleEmptySection": "İnsanları davet ettiğinizde onların paylaştığı tüm fotoğrafları burada göreceksiniz", + "searchAlbumsEmptySection": "Albümler", + "searchFileTypesAndNamesEmptySection": "Dosya türleri ve adları", + "searchCaptionEmptySection": "Fotoğraf bilgilerini burada hızlı bir şekilde bulmak için \"#trip\" gibi açıklamalar ekleyin", + "language": "Dil", + "selectLanguage": "Dil Seçin", + "locationName": "Konum Adı", + "addLocation": "Konum Ekle", + "groupNearbyPhotos": "Yakındaki fotoğrafları gruplandır", + "kiloMeterUnit": "km", + "addLocationButton": "Ekle", + "radius": "Yarıçap", + "locationTagFeatureDescription": "Bir fotoğrafın belli bir yarıçapında çekilen fotoğrafları gruplandırın", + "galleryMemoryLimitInfo": "Galeride 1000'e kadar anı gösterilir", + "save": "Kaydet", + "centerPoint": "Merkez noktası", + "pickCenterPoint": "Merkez noktasını seçin", + "useSelectedPhoto": "Seçilen fotoğrafı kullan", + "resetToDefault": "Varsayılana sıfırla", + "@resetToDefault": { + "description": "Button text to reset cover photo to default" + }, + "edit": "Düzenle", + "deleteLocation": "Konumu sil", + "rotateLeft": "Sola döndür", + "flip": "Çevir", + "rotateRight": "Sağa döndür", + "saveCopy": "Kopyasını kaydet", + "light": "Aydınlık", + "color": "Renk", + "yesDiscardChanges": "Evet, değişiklikleri sil", + "doYouWantToDiscardTheEditsYouHaveMade": "Yaptığınız düzenlemeleri silmek istiyor musunuz?", + "saving": "Kaydediliyor...", + "editsSaved": "Düzenleme kaydedildi", + "oopsCouldNotSaveEdits": "Hata! Düzenlemeler kaydedilemedi", + "distanceInKMUnit": "km", + "@distanceInKMUnit": { + "description": "Unit for distance in km" + }, + "dayToday": "Bugün", + "dayYesterday": "Dün", + "storage": "Depolama", + "usedSpace": "Kullanılan alan", + "storageBreakupFamily": "Aile", + "storageBreakupYou": "Sen", + "@storageBreakupYou": { + "description": "Label to indicate how much storage you are using when you are part of a family plan" + }, + "storageUsageInfo": "{usedAmount} {usedStorageUnit} / {totalAmount} {totalStorageUnit} kullanıldı", + "@storageUsageInfo": { + "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" + }, + "availableStorageSpace": "{freeAmount} {storageUnit} free", + "appVersion": "Sürüm: {versionValue}", + "verifyIDLabel": "Doğrula", + "fileInfoAddDescHint": "Bir açıklama ekle...", + "editLocationTagTitle": "Konumu düzenle", + "setLabel": "Ayarla", + "@setLabel": { + "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" + }, + "setRadius": "Yarıçapı ayarla", + "familyPlanPortalTitle": "Aile", + "familyPlanOverview": "Add 5 family members to your existing plan without paying extra.\n\nEach member gets their own private space, and cannot see each other's files unless they're shared.\n\nFamily plans are available to customers who have a paid Ente subscription.\n\nSubscribe now to get started!", + "androidBiometricHint": "Kimliği doğrula", + "@androidBiometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricNotRecognized": "Tanınmadı. Tekrar deneyin.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricSuccess": "Başarılı", + "@androidBiometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "androidCancelButton": "İptal et", + "@androidCancelButton": { + "description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters." + }, + "androidSignInTitle": "Kimlik doğrulaması gerekli", + "@androidSignInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricRequiredTitle": "Biyometrik gerekli", + "@androidBiometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + }, + "androidDeviceCredentialsRequiredTitle": "Cihaz kimlik bilgileri gerekli", + "@androidDeviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + }, + "androidDeviceCredentialsSetupDescription": "Cihaz kimlik bilgileri gerekmekte", + "@androidDeviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + }, + "goToSettings": "Ayarlara git", + "@goToSettings": { + "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." + }, + "androidGoToSettingsDescription": "Biyometrik kimlik doğrulama cihazınızda ayarlanmamış. Biyometrik kimlik doğrulama eklemek için 'Ayarlar > Güvenlik' bölümüne gidin.", + "@androidGoToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side." + }, + "iOSLockOut": "Biyometrik kimlik doğrulama devre dışı. Etkinleştirmek için lütfen ekranınızı kilitleyin ve kilidini açın.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + }, + "iOSGoToSettingsDescription": "Cihazınızda biyometrik kimlik doğrulama ayarlanmamış. Lütfen telefonunuzda Touch ID veya Face ID'yi etkinleştirin.", + "@iOSGoToSettingsDescription": { + "description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side." + }, + "iOSOkButton": "Tamam", + "@iOSOkButton": { + "description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters." + }, + "openstreetmapContributors": "© OpenStreetMap katkıda bululanlar", + "hostedAtOsmFrance": "OSM Fransa'da ağırlandı", + "map": "Harita", + "@map": { + "description": "Label for the map view" + }, + "maps": "Haritalar", + "enableMaps": "Haritaları Etkinleştir", + "enableMapsDesc": "Bu, fotoğraflarınızı bir dünya haritasında gösterecektir.\n\nBu harita Open Street Map tarafından barındırılmaktadır ve fotoğraflarınızın tam konumları hiçbir zaman paylaşılmaz.\n\nBu özelliği istediğiniz zaman Ayarlar'dan devre dışı bırakabilirsiniz.", + "quickLinks": "Hızlı Erişim", + "selectItemsToAdd": "Eklenecek eşyaları seçin", + "addSelected": "Seçileni ekle", + "addFromDevice": "Cihazdan ekle", + "addPhotos": "Fotoğraf ekle", + "noPhotosFoundHere": "Burada fotoğraf bulunamadı", + "zoomOutToSeePhotos": "Fotoğrafları görmek için uzaklaştırın", + "noImagesWithLocation": "Konum içeren resim yok", + "unpinAlbum": "Albümün sabitlemesini kaldır", + "pinAlbum": "Albümü sabitle", + "create": "Oluştur", + "viewAll": "Tümünü görüntüle", + "nothingSharedWithYouYet": "Henüz sizinle paylaşılan bir şey yok", + "noAlbumsSharedByYouYet": "Henüz paylaştığınız albüm yok", + "sharedWithYou": "Sizinle paylaşıldı", + "sharedByYou": "Paylaştıklarınız", + "inviteYourFriendsToEnte": "Invite your friends to Ente", + "failedToDownloadVideo": "Video indirilemedi", + "hiding": "Gizleniyor...", + "unhiding": "Gösteriliyor...", + "successfullyHid": "Başarıyla saklandı", + "successfullyUnhid": "Başarıyla arşivden çıkarıldı", + "crashReporting": "Çökme raporlaması", + "addToHiddenAlbum": "Gizli albüme ekle", + "moveToHiddenAlbum": "Gizli albüme ekle", + "fileTypes": "Dosya türü", + "deleteConfirmDialogBody": "This account is linked to other Ente apps, if you use any. Your uploaded data, across all Ente apps, will be scheduled for deletion, and your account will be permanently deleted.", + "hearUsWhereTitle": "Ente'yi nereden duydunuz? (opsiyonel)", + "hearUsExplanation": "Biz uygulama kurulumlarını takip etmiyoruz. Bizi nereden duyduğunuzdan bahsetmeniz bize çok yardımcı olacak!", + "viewAddOnButton": "Eklentileri görüntüle", + "addOns": "Eklentiler", + "addOnPageSubtitle": "Eklentilerin ayrıntıları", + "yourMap": "Haritalarınız", + "modifyYourQueryOrTrySearchingFor": "Sorgunuzu değiştirin veya aramayı deneyin", + "blackFridaySale": "Muhteşem Cuma kampanyası", + "upto50OffUntil4thDec": "4 Aralık'a kadar %50'ye varan indirim.", + "photos": "Fotoğraflar", + "videos": "Videolar", + "livePhotos": "Canlı Fotoğraf", + "searchHint1": "Hızlı, cihaz üzerinde arama", + "searchHint2": "Fotoğraf tarihleri, açıklamalar", + "searchHint3": "Albümler, dosya adları ve türleri", + "searchHint4": "Konum", + "searchHint5": "Çok yakında: Yüzler ve sihirli arama ✨", + "addYourPhotosNow": "Fotoğraflarınızı şimdi ekleyin", + "searchResultCount": "{count, plural, one{{count} yıl önce} other{{count} yıl önce}}", + "@searchResultCount": { + "description": "Text to tell user how many results were found for their search query", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "faces": "Yüzler", + "people": "People", + "contents": "İçerikler", + "addNew": "Yeni ekle", + "@addNew": { + "description": "Text to add a new item (location tag, album, caption etc)" + }, + "contacts": "Kişiler", + "noInternetConnection": "İnternet bağlantısı yok", + "pleaseCheckYourInternetConnectionAndTryAgain": "Lütfen internet bağlantınızı kontrol edin ve yeniden deneyin.", + "signOutFromOtherDevices": "Diğer cihazlardan çıkış yap", + "signOutOtherBody": "Eğer başka birisinin parolanızı bildiğini düşünüyorsanız, diğer tüm cihazları hesabınızdan çıkışa zorlayabilirsiniz.", + "signOutOtherDevices": "Diğer cihazlardan çıkış yap", + "doNotSignOut": "Çıkış yapma", + "editLocation": "Konumu düzenle", + "selectALocation": "Bir konum seçin", + "selectALocationFirst": "Önce yeni yer seçin", + "changeLocationOfSelectedItems": "Seçilen öğelerin konumu değiştirilsin mi?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Konumda yapılan düzenlemeler yalnızca Ente'de görülecektir", + "cleanUncategorized": "Temiz Genel", + "cleanUncategorizedDescription": "Diğer albümlerde bulunan Kategorilenmemiş tüm dosyaları kaldırın", + "waitingForVerification": "Doğrulama bekleniyor...", + "passkey": "Parola Anahtarı", + "passkeyAuthTitle": "Geçiş anahtarı doğrulaması", + "passKeyPendingVerification": "Verification is still pending", + "loginSessionExpired": "Session expired", + "loginSessionExpiredDetails": "Your session has expired. Please login again.", + "verifyPasskey": "Şifrenizi doğrulayın", + "playOnTv": "Albümü TV'de oynat", + "pair": "Eşleştir", + "deviceNotFound": "Cihaz bulunamadı", + "castInstruction": "Eşleştirmek istediğiniz cihazda cast.ente.io adresini ziyaret edin.\n\nAlbümü TV'nizde oynatmak için aşağıdaki kodu girin.", + "deviceCodeHint": "Kodu girin", + "joinDiscord": "Discord'a Katıl", + "locations": "Konum", + "descriptions": "Açıklama", + "addAName": "Add a name", + "findPeopleByName": "Find people quickly by name", + "addViewers": "{count, plural, zero {Görüntüleyen ekle} one {Görüntüleyen ekle} other {Görüntüleyen ekle}}", + "addCollaborators": "{count, plural, zero {Ortak çalışan ekle} one {Ortak çalışan ekle} other {Ortak çalışan ekle}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Uçtan uca şifrelemeyi doğrulamak için bir e-postaya uzun basın.", + "developerSettingsWarning": "Geliştirici ayarlarını değiştirmek istediğinizden emin misiniz?", + "developerSettings": "Geliştirici ayarları", + "serverEndpoint": "Sunucu uç noktası", + "invalidEndpoint": "Geçersiz uç nokta", + "invalidEndpointMessage": "Üzgünüz, girdiğiniz uç nokta geçersiz. Lütfen geçerli bir uç nokta girin ve tekrar deneyin.", + "endpointUpdatedMessage": "Fatura başarıyla güncellendi", + "customEndpoint": "{endpoint}'e bağlanıldı", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "autoPairDesc": "Auto pair works only with devices that support Chromecast.", + "manualPairDesc": "Pair with PIN works with any screen you wish to view your album on.", + "connectToDevice": "Connect to device", + "autoCastDialogBody": "You'll see available Cast devices here.", + "autoCastiOSPermission": "Make sure Local Network permissions are turned on for the Ente Photos app, in Settings.", + "noDeviceFound": "No device found", + "stopCastingTitle": "Stop casting", + "stopCastingBody": "Do you want to stop casting?", + "castIPMismatchTitle": "Failed to cast album", + "castIPMismatchBody": "Please make sure you are on the same network as the TV.", + "pairingComplete": "Pairing complete", + "savingEdits": "Saving edits...", + "autoPair": "Auto pair", + "pairWithPin": "Pair with PIN", + "faceRecognition": "Face recognition", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready.", + "trim": "Trim", + "crop": "Crop", + "rotate": "Rotate", + "left": "Left", + "right": "Right", + "whatsNew": "What's new", + "reviewSuggestions": "Review suggestions", + "useAsCover": "Use as cover", + "notPersonLabel": "Not {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts" +} \ No newline at end of file diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 15a0ac68b3..01969b46d7 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "67.0.0" _flutterfire_internals: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.4.1" animate_do: dependency: "direct main" description: @@ -1236,6 +1236,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.18.1" + intl_utils: + dependency: "direct dev" + description: + name: intl_utils + sha256: c2b1f5c72c25512cbeef5ab015c008fc50fe7e04813ba5541c25272300484bf4 + url: "https://pub.dev" + source: hosted + version: "2.8.7" io: dependency: transitive description: diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 8b2cbcfe43..8608b20fb8 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -198,6 +198,7 @@ flutter_intl: dev_dependencies: build_runner: ^2.4.7 + intl_utils: ^2.8.7 flutter_lints: ^2.0.1 flutter_test: sdk: flutter From 7640789f0845c2dc67bab4a464e66968f998a1d4 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:04:19 +0530 Subject: [PATCH 441/466] [mob] Fix dependencies order --- mobile/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 8608b20fb8..b187f3c09a 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -198,13 +198,13 @@ flutter_intl: dev_dependencies: build_runner: ^2.4.7 - intl_utils: ^2.8.7 flutter_lints: ^2.0.1 flutter_test: sdk: flutter freezed: ^2.5.2 integration_test: sdk: flutter + intl_utils: ^2.8.7 json_serializable: ^6.6.1 test: ^1.22.0 From f115ce4a0de14b59018822633ea4ad72cf651fec Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:27:53 +0530 Subject: [PATCH 442/466] [mob] Fix lint --- mobile/lib/ui/viewer/file/file_details_widget.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/lib/ui/viewer/file/file_details_widget.dart b/mobile/lib/ui/viewer/file/file_details_widget.dart index b28951431d..fb15a3148d 100644 --- a/mobile/lib/ui/viewer/file/file_details_widget.dart +++ b/mobile/lib/ui/viewer/file/file_details_widget.dart @@ -120,8 +120,8 @@ class _FileDetailsWidgetState extends State { ); return; } - final properties = await FFProbeUtil.getProperties(mediaInfo); - + //todo:(neeraj) Use probe data for back filling location + final _ = await FFProbeUtil.getProperties(mediaInfo); setState(() {}); } From c16b6a7d43d8659154b11aed07d260c8239eae75 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 15:44:47 +0530 Subject: [PATCH 443/466] -rc => -beta to be clearer --- desktop/.github/workflows/desktop-release.yml | 4 +- desktop/docs/release.md | 44 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/desktop/.github/workflows/desktop-release.yml b/desktop/.github/workflows/desktop-release.yml index e61bb6a7f0..c8fccdaf7f 100644 --- a/desktop/.github/workflows/desktop-release.yml +++ b/desktop/.github/workflows/desktop-release.yml @@ -17,8 +17,8 @@ on: # - cron: "45 2 * * 1-6" push: - # Run when a tag matching the pattern "vd.d.d"" is pushed. Crucially for - # us, this excludes the "-rc" tags. + # Run when a tag matching the pattern "vd.d.d" is pushed. In particular, + # this excludes the "-beta" tags. tags: - "v[0-9]+.[0-9]+.[0-9]+" diff --git a/desktop/docs/release.md b/desktop/docs/release.md index 83d0120551..07fc68ae10 100644 --- a/desktop/docs/release.md +++ b/desktop/docs/release.md @@ -18,20 +18,19 @@ to keep a separate repository just for holding the releases. - Releases are done from [ente-io/photos-desktop](https://github.com/ente-io/photos-desktop). -## Workflow - Release candidates +## Nightly builds -Nightly RC builds of `main` are published by a scheduled workflow automatically. -If needed, these builds can also be manually updated, and the branch of the -source repository to build (default "main") also specified: +Nightly builds of `main` are published by a scheduled workflow automatically. +Each such workflow run will update the artifacts attached to the same +(pre-existing) pre-release. + +If needed, this workflow can also be manually triggered: ```sh gh workflow run desktop-release.yml --source= ``` -Each such workflow run will update the artifacts attached to the same -(pre-existing) pre-release. - -## Workflow - Release +## Release checklist 1. Update source repo to set version `1.x.x` in `package.json` and finalize the CHANGELOG. @@ -50,37 +49,38 @@ Each such workflow run will update the artifacts attached to the same ``` This'll trigger the workflow and create a new pre-release. We can edit this to -add the release notes, convert it to a release. Once it is marked as latest, the -release goes live. +add the release notes, and convert it to a release. + +Once it is marked as latest, the release goes live. -We are done at this point, and can now update the other pre-release that hosts +We are done at this point, and can now update the other pre-release that'll hold subsequent nightly builds. -1. Update `package.json` in the source repo to use version `1.x.x-rc`, and +1. Update `package.json` in the source repo to use version `1.x.x-beta`, and merge these changes into `main`. 2. In the release repo, delete the existing _nightly_ pre-release, then: ```sh - git tag 1.x.x-rc - git push origin 1.x.x-rc + git tag 1.x.x-beta + git push origin 1.x.x-beta ``` 3. Start a new run of the workflow (`gh workflow run desktop-release.yml`). -Once the workflow finishes and the 1.x.x-rc pre-release is created, edit its -description to "Nightly builds". Subsequent scheduled nightly builds will update -this pre-release. +Once the workflow finishes and the 1.x.x-beta pre-release is created, edit its +description to "Nightly beta builds". Subsequent scheduled nightly workflows +will keep updating this pre-release. -## Workflow - Extra pre-releases +## Ad-hoc builds -To create extra one off pre-releases in addition to the nightly `1.x.x-rc` ones, +To create extra one-off pre-releases in addition to the nightly `1.x.x-beta`s, 1. In your branch in the source repository, set the version in `package.json` - to something different, say `1.x.x-my-test`. + to something different, say `1.x.x-foo`. -2. Create a new pre-release in the release repo with title `1.x.x-test`. In the - tag input enter `v1.x.x-test` and select the option to "create a new tag on +2. Create a new pre-release in the release repo with title `1.x.x-foo`. In the + tag input enter `v1.x.x-foo` and select the option to "Create a new tag on publish". 3. Trigger the workflow in the release repo: From d9ec95b8ab75ae571b2a1db66d17c3104668776f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 15:52:35 +0530 Subject: [PATCH 444/466] photosd-v1.7.2 --- desktop/CHANGELOG.md | 3 +-- desktop/package.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 42b6469449..b6ba5501bf 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG -## v1.7.2 (Unreleased) +## v1.7.2 - Significantly improve the speed of the metadata parsing step during imports of Google takeouts. @@ -8,7 +8,6 @@ - Fix an issue preventing subscription purchases and renewals. - Clear cached password after changing it on a different device. - Reconcile exported files with disk on app start and resync. -- . ## v1.7.1 diff --git a/desktop/package.json b/desktop/package.json index 99a4d0da3e..9ff729eb21 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "ente", - "version": "1.7.2-rc", + "version": "1.7.2", "private": true, "description": "Desktop client for Ente Photos", "repository": "github:ente-io/photos-desktop", From b0677049cb54562f22e6b4d54ba1e59b4bcd7878 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 20:47:05 +0530 Subject: [PATCH 445/466] [desktop] Start the next release sequence for 1.7.3 --- desktop/CHANGELOG.md | 4 ++++ desktop/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index b6ba5501bf..0e6994feaa 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v1.7.3 (Unreleased) + +- . + ## v1.7.2 - Significantly improve the speed of the metadata parsing step during imports diff --git a/desktop/package.json b/desktop/package.json index 9ff729eb21..3c47de5df5 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "ente", - "version": "1.7.2", + "version": "1.7.3-beta", "private": true, "description": "Desktop client for Ente Photos", "repository": "github:ente-io/photos-desktop", From a6dda741cb3a1970b5eb329fb78fdeb968484451 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 20:52:39 +0530 Subject: [PATCH 446/466] [desktop] Fix post release checklist instructions --- desktop/docs/release.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/desktop/docs/release.md b/desktop/docs/release.md index 07fc68ae10..3ddbe55320 100644 --- a/desktop/docs/release.md +++ b/desktop/docs/release.md @@ -62,15 +62,16 @@ subsequent nightly builds. 2. In the release repo, delete the existing _nightly_ pre-release, then: ```sh - git tag 1.x.x-beta - git push origin 1.x.x-beta + git tag v1.x.x-beta + git push origin v1.x.x-beta ``` 3. Start a new run of the workflow (`gh workflow run desktop-release.yml`). -Once the workflow finishes and the 1.x.x-beta pre-release is created, edit its -description to "Nightly beta builds". Subsequent scheduled nightly workflows -will keep updating this pre-release. +4. Once the workflow creates the new 1.x.x-beta pre-release, edit its + description to "Nightly builds". + +Subsequent scheduled nightly workflows will keep updating this pre-release. ## Ad-hoc builds From 653761137a312e6a1f3347252739f550eb822b9d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 21:40:07 +0530 Subject: [PATCH 447/466] [docs] Mark the desktop custom server option as released --- docs/docs/self-hosting/guides/custom-server/index.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/docs/self-hosting/guides/custom-server/index.md b/docs/docs/self-hosting/guides/custom-server/index.md index 8d398ef40a..42577e7eae 100644 --- a/docs/docs/self-hosting/guides/custom-server/index.md +++ b/docs/docs/self-hosting/guides/custom-server/index.md @@ -32,11 +32,6 @@ apps](web-dev-settings.png){width=400px} This works on both the desktop app and web app (if you deploy on your own). -> [!CAUTION] -> -> This setting is currently available in the nightly builds of the desktop app. -> It'll be available in the regular builds with the upcoming release (1.7.2). - To make it easier to identify when a custom server is being used, app will thereafter show the endpoint in use (if not Ente's production server) at the bottom of the login prompt: From 392ed6e212b0cc3e84353072f25f3d85fe37ab70 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 12 Jul 2024 21:40:49 +0530 Subject: [PATCH 448/466] yarn pretty --- docs/docs/photos/faq/security-and-privacy.md | 40 +++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/docs/docs/photos/faq/security-and-privacy.md b/docs/docs/photos/faq/security-and-privacy.md index 3990e2b623..51839e0325 100644 --- a/docs/docs/photos/faq/security-and-privacy.md +++ b/docs/docs/photos/faq/security-and-privacy.md @@ -1,6 +1,7 @@ --- title: Security and Privacy FAQ -description: Comprehensive information about security and privacy measures in Ente Photos +description: + Comprehensive information about security and privacy measures in Ente Photos --- # Security and Privacy FAQ @@ -13,17 +14,20 @@ protection and transparency. ## Data Encryption and Storage ### Can Ente see my photos and videos? + No. Your files are encrypted on your device before being uploaded to our servers. The encryption keys are derived from your password using advanced key derivation functions. Since only you know your password, only you can decrypt -your files. For technical details, please see our [architecture -document](https://ente.io/architecture). +your files. For technical details, please see our +[architecture document](https://ente.io/architecture). ### How is my data encrypted? + We use the following encryption algorithms: -- Encryption: `XChaCha20` and `XSalsa20` -- Authentication: Poly1305 message authentication code (MAC) -- Key derivation: Argon2id with high memory and computation parameters + +- Encryption: `XChaCha20` and `XSalsa20` +- Authentication: Poly1305 message authentication code (MAC) +- Key derivation: Argon2id with high memory and computation parameters These algorithms are implemented using [libsodium](https://libsodium.gitbook.io/doc/), a externally audited @@ -31,17 +35,20 @@ cryptographic library. Our [architecture document](https://ente.io/architecture) provides full technical specifications. ### Where is my data stored? + Your encrypted data is stored redundantly across multiple providers in the EU: -- Amsterdam, Netherlands -- Paris, France -- Frankfurt, Germany + +- Amsterdam, Netherlands +- Paris, France +- Frankfurt, Germany We use a combination of object storage and distributed databases to ensure high -availability and durability. Our [reliability -document](https://ente.io/reliability) provides in-depth information about our -storage infrastructure and data replication strategies. +availability and durability. Our +[reliability document](https://ente.io/reliability) provides in-depth +information about our storage infrastructure and data replication strategies. ### How does Ente's encryption compare to industry standards? + Our encryption model goes beyond industry standards. While many services use server-side encryption, we implement end-to-end encryption. This means that even in the unlikely event of a server breach, your data remains protected. @@ -49,6 +56,7 @@ in the unlikely event of a server breach, your data remains protected. ## Account Security ### What happens if I forget my password? + You can reset your password using your recovery key. This key is a randomly generated string provided to you during account creation. Store it securely, as it's your lifeline if you forget your password. If you lose both your password @@ -56,6 +64,7 @@ and recovery key, we cannot recover your account or data due to our zero-knowledge architecture. ### Can I change my password? + Yes, you can change your password at any time from our apps. Our architecture allows password changes without re-encrypting your entire library. @@ -63,9 +72,11 @@ The privacy of your account is a function of the strength of your password, please choose a strong one. ### Do you support two-factor authentication (2FA)? + Yes, we recommend enabling 2FA for an additional layer of security. We support: -- Time-based One-Time Passwords (TOTP) -- WebAuthn/FIDO2 for hardware security keys + +- Time-based One-Time Passwords (TOTP) +- WebAuthn/FIDO2 for hardware security keys You can set up 2FA in the settings of our mobile or desktop apps. @@ -88,6 +99,7 @@ receiver just needs a free Ente account. ## Security Audits ## Has the Ente Photos app been audited by a credible source? + Yes, Ente Photos has undergone a thorough security audit conducted by Cure53, in collaboration with Symbolic Software. Cure53 is a prominent German cybersecurity firm, while Symbolic Software specializes in applied cryptography. Please find From 33dcf481272e719f43203ce9e5d1eb25ee8a13ec Mon Sep 17 00:00:00 2001 From: Nicholas DiMucci Date: Fri, 12 Jul 2024 21:05:38 -0400 Subject: [PATCH 449/466] Fix typo with ente account url in cli. --- cli/utils/constants/constants.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/utils/constants/constants.go b/cli/utils/constants/constants.go index ee1110e058..65f9d39cb1 100644 --- a/cli/utils/constants/constants.go +++ b/cli/utils/constants/constants.go @@ -3,4 +3,4 @@ package constants const CliDataPath = "/cli-data/" const EnteApiUrl = "https://api.ente.io" -const EnteAccountUrl = "https://account.ente.io" +const EnteAccountUrl = "https://accounts.ente.io" From 6e9dd8d4c8bfb439ae30365ca48c489b0ca263d5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 08:56:32 +0530 Subject: [PATCH 450/466] [desktop] Don't show what's new on fresh installs --- web/apps/photos/src/pages/gallery/index.tsx | 2 +- .../new/photos/components/WhatsNew.tsx | 3 +- web/packages/new/photos/services/changelog.ts | 50 ++++++++++++------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx index d419146379..bc5994ada1 100644 --- a/web/apps/photos/src/pages/gallery/index.tsx +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -390,7 +390,7 @@ export default function Gallery() { }, SYNC_INTERVAL_IN_MICROSECONDS); if (electron) { electron.onMainWindowFocus(() => syncWithRemote(false, true)); - if (await shouldShowWhatsNew()) setOpenWhatsNew(true); + if (await shouldShowWhatsNew(electron)) setOpenWhatsNew(true); } }; main(); diff --git a/web/packages/new/photos/components/WhatsNew.tsx b/web/packages/new/photos/components/WhatsNew.tsx index f6b02b1f3a..06d8ec7d67 100644 --- a/web/packages/new/photos/components/WhatsNew.tsx +++ b/web/packages/new/photos/components/WhatsNew.tsx @@ -1,3 +1,4 @@ +import { ensureElectron } from "@/next/electron"; import { ut } from "@/next/i18n"; import ArrowForward from "@mui/icons-material/ArrowForward"; import { @@ -30,7 +31,7 @@ export const WhatsNew: React.FC = ({ open, onClose }) => { const fullScreen = useMediaQuery("(max-width: 428px)"); useEffect(() => { - if (open) void didShowWhatsNew(); + if (open) void didShowWhatsNew(ensureElectron()); }, [open]); return ( diff --git a/web/packages/new/photos/services/changelog.ts b/web/packages/new/photos/services/changelog.ts index 9fa1ed942a..8382c13513 100644 --- a/web/packages/new/photos/services/changelog.ts +++ b/web/packages/new/photos/services/changelog.ts @@ -1,4 +1,4 @@ -import { ensureElectron } from "@/next/electron"; +import type { Electron } from "@/next/types/ipc"; /** * The current changelog version. @@ -9,31 +9,45 @@ import { ensureElectron } from "@/next/electron"; * integer, we increment it whenever we want to show this dialog again. Usually * we'd do this for each app update, but not necessarily. * - * The "What's new" dialog is shown when either we do not have a previously - * saved changelog version, or if the saved changelog version is less than the - * current {@link changelogVersion}. + * The "What's new" dialog is shown when the saved changelog version is less + * than the current {@link changelogVersion}. * - * The shown changelog version is persisted on the Node.js layer since there we - * can store it in the user preferences store, which is not cleared on logout. + * The shown changelog version is saved on the Node.js layer since there we can + * store it in the user preferences store, which is not cleared on logout. * - * On app start, the Node.js layer waits for the {@link onShowWhatsNew} callback - * to get attached. When a callback is attached, it checks the above conditions - * and if they are satisfied, it invokes the callback. The callback should - * return the current {@link changelogVersion} to allow the Node.js layer to - * update the persisted state. + * On app start, we read the last saved version: + * + * - If it is not present, we set it to the current version _without_ showing + * the what's new dialog. This is to handle fresh installs. + * + * - If it is present and less than the current version, we show the what's + * new dialog. Otherwise do nothing. + * + * The what's new dialog sets the saved version to the current one whenever it + * is shown. */ const changelogVersion = 1; /** * Return true if we should show the {@link WhatsNew} dialog. + * + * It has the side affect of updating the persisted version (whilst returning + * false) if there was no previous persisted changelog version version present. */ -export const shouldShowWhatsNew = async () => { - const electron = globalThis.electron; - if (!electron) return false; - const lastShownVersion = (await electron.lastShownChangelogVersion()) ?? 0; +export const shouldShowWhatsNew = async (electron: Electron) => { + const lastShownVersion = await electron.lastShownChangelogVersion(); + if (!lastShownVersion) { + // On a fresh install, save the current version but don't show the + // what's new dialog. + await electron.setLastShownChangelogVersion(changelogVersion); + return false; + } + // Show what's new if the saved version is older than the current one. return lastShownVersion < changelogVersion; }; -export const didShowWhatsNew = async () => - // We should only have been called if we're in electron. - ensureElectron().setLastShownChangelogVersion(changelogVersion); +/** + * Set the saved changelog version to the current changelog version. + */ +export const didShowWhatsNew = async (electron: Electron) => + electron.setLastShownChangelogVersion(changelogVersion); From d72813dd078f06218d80a50f862ba7ab12a6298b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 09:24:35 +0530 Subject: [PATCH 451/466] Stylistic tweaks --- .../new/photos/components/WhatsNew.tsx | 41 +++++++++++-------- web/packages/shared/themes/mui-theme.d.ts | 2 +- web/packages/shared/themes/typography.ts | 4 ++ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/web/packages/new/photos/components/WhatsNew.tsx b/web/packages/new/photos/components/WhatsNew.tsx index 06d8ec7d67..e0840ce9ab 100644 --- a/web/packages/new/photos/components/WhatsNew.tsx +++ b/web/packages/new/photos/components/WhatsNew.tsx @@ -2,6 +2,7 @@ import { ensureElectron } from "@/next/electron"; import { ut } from "@/next/i18n"; import ArrowForward from "@mui/icons-material/ArrowForward"; import { + Box, Dialog, DialogActions, DialogContent, @@ -40,23 +41,29 @@ export const WhatsNew: React.FC = ({ open, onClose }) => { TransitionComponent={SlideTransition} maxWidth="xs" > - {ut("What's new")} - - - - - - - } - > - {ut("Continue")} - - + + + + {ut("What's new")} + + + + + + + + + } + > + {ut("Continue")} + + + ); }; diff --git a/web/packages/shared/themes/mui-theme.d.ts b/web/packages/shared/themes/mui-theme.d.ts index 6307cfbcdf..e1c5ef46b7 100644 --- a/web/packages/shared/themes/mui-theme.d.ts +++ b/web/packages/shared/themes/mui-theme.d.ts @@ -49,7 +49,7 @@ declare module "@mui/material/Typography" { small: true; mini: true; tiny: true; - h4: false; + h4: true; h5: false; h6: false; subtitle1: false; diff --git a/web/packages/shared/themes/typography.ts b/web/packages/shared/themes/typography.ts index 5f528ba43c..45b4bc6447 100644 --- a/web/packages/shared/themes/typography.ts +++ b/web/packages/shared/themes/typography.ts @@ -13,6 +13,10 @@ export const typography: TypographyOptions = { fontSize: "24px", lineHeight: "29px", }, + h4: { + fontSize: "22px", + lineHeight: "27px", + }, large: { fontSize: "18px", lineHeight: "22px", From 4528dc2d2aacb4a4fb2be6a0fc96d5133fddfa2f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 10:10:06 +0530 Subject: [PATCH 452/466] [desktop] Update deps - Electron 30.2.0 https://github.com/electron/electron/releases --- desktop/package.json | 2 +- desktop/yarn.lock | 182 ++++++++++++++++++++++--------------------- 2 files changed, 93 insertions(+), 91 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 3c47de5df5..dbcdadb859 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -33,7 +33,7 @@ "electron-store": "^8.2", "electron-updater": "^6.2", "ffmpeg-static": "^5.2", - "lru-cache": "^10.2", + "lru-cache": "^10", "next-electron-server": "^1", "node-stream-zip": "^1.15", "onnxruntime-node": "^1.18" diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 368a93bd90..8538c03184 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -117,12 +117,7 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": version "4.11.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== @@ -151,10 +146,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.6.0", "@eslint/js@^9": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.6.0.tgz#5b0cb058cc13d9c92d4e561d3538807fa5127c95" - integrity sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A== +"@eslint/js@9.7.0", "@eslint/js@^9": + version "9.7.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.7.0.tgz#b712d802582f02b11cfdf83a85040a296afec3f0" + integrity sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -346,9 +341,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.9.0": - version "20.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" - integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== + version "20.14.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" + integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== dependencies: undici-types "~5.26.4" @@ -384,62 +379,62 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.39.tgz#1cfd6fe38752ed56d37170d307c48a34c15f65de" - integrity sha512-ILv1vDA8M9ah1vzYpnOs4UOLRdB63Ki/rsxedVikjMLq68hFfpsDR25bdMZ4RyUkzLJwOhcg3Jujm/C1nupXKA== +"@typescript-eslint/eslint-plugin@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.41.tgz#8dfb0416c802cf53d9b8ba2688bb5d87c3b5a5ba" + integrity sha512-WePtbzWMaQO4qtGAXp3zzEN8yYZCEuAHVCERCUXgoSUTQ80F5UB7T5lYyA9ySpFDB7rqJ2ev98DtnbS4U3Ms+w== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.0.0-alpha.39" - "@typescript-eslint/type-utils" "8.0.0-alpha.39" - "@typescript-eslint/utils" "8.0.0-alpha.39" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" + "@typescript-eslint/scope-manager" "8.0.0-alpha.41" + "@typescript-eslint/type-utils" "8.0.0-alpha.41" + "@typescript-eslint/utils" "8.0.0-alpha.41" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.41" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.39.tgz#33fbd1e3767b4477def582ce597b6cd09bb5ef11" - integrity sha512-5k+pwV91plJojHgZkWlq4/TQdOrnEaeSvt48V0m8iEwdMJqX/63BXYxy8BUOSghWcjp05s73vy9HJjovAKmHkQ== +"@typescript-eslint/parser@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.41.tgz#d6b5f3a869a78d490c94628bc119a9a38c5842a8" + integrity sha512-7HMXwy/q/59ZASBXz2FtdIsR7LgABrR8j2dTKq9GMR8OkjjdO4klxWSY/uOBozVt4UxlMRYsBdBDhEq4/tHRiw== dependencies: - "@typescript-eslint/scope-manager" "8.0.0-alpha.39" - "@typescript-eslint/types" "8.0.0-alpha.39" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" + "@typescript-eslint/scope-manager" "8.0.0-alpha.41" + "@typescript-eslint/types" "8.0.0-alpha.41" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.41" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.41" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.39.tgz#1778198dcf95175b76631f7ffd84917bf925a1a9" - integrity sha512-HCBlKQROY+JIgWolucdFMj1W3VUnnIQTdxAhxJTAj3ix2nASmvKIFgrdo5KQMrXxQj6tC4l3zva10L+s0dUIIw== +"@typescript-eslint/scope-manager@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.41.tgz#7729d129d966cc34a3b37c12cf08ba1b0467d516" + integrity sha512-iNxuQ0TMVfFiMJ2al4bGd/mY9+aLtBxnHfo7B2xoVzR6cRFgUdBLlMa//MSIjSmVRpCEqNLQnkxpJb96tFG+xw== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.39" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" + "@typescript-eslint/types" "8.0.0-alpha.41" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.41" -"@typescript-eslint/type-utils@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.39.tgz#48bcc5dc978173e02c44d7137d16edb97042c02d" - integrity sha512-alO13fRU6yVeJbwl9ESI3AYhq5dQdz3Dpd0I5B4uezs2lvgYp44dZsj5hWyPz/kL7JFEsjbn+4b/CZA0OQJzjA== +"@typescript-eslint/type-utils@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.41.tgz#6da1e44d9ce1e060e66feaa45f73a792965a0e69" + integrity sha512-+QIA1z/jrox6bbvqlyqBQjotpevieLTycfiuoKuqGcKoskFZV5Rma51BV8LCJacnOafwJtSi+7b8zDo8OsXUvA== dependencies: - "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" - "@typescript-eslint/utils" "8.0.0-alpha.39" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.41" + "@typescript-eslint/utils" "8.0.0-alpha.41" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.39.tgz#e0f7618c17f03fc23803269807c77ce1bac276f2" - integrity sha512-yINN7j0/+S1VGSp0IgH52oQvUx49vkOug6xbrDA/9o+U55yCAQKSvYWvzYjNa+SZE3hXI0zwvYtMVsIAAMmKIQ== +"@typescript-eslint/types@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.41.tgz#c1f8dacfb118e4d9febdff2f065802c4db69beae" + integrity sha512-n0P2FP3YC3pD3yoiCf4lHqbUP45xlnOk8HkjB+LtKSUZZWLLJ8k1ZXZtQj7MEX22tytCMj//Bmq403xFuCwfIg== -"@typescript-eslint/typescript-estree@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.39.tgz#460b2303e3c919cb3baf4ff5a13b6fb148da70b3" - integrity sha512-S8gREuP8r8PCxGegeojeXntx0P50ul9YH7c7JYpbLIIsEPNr5f7UHlm+I1NUbL04CBin4kvZ60TG4eWr/KKN9A== +"@typescript-eslint/typescript-estree@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.41.tgz#c78c96d6b3f39355aac2bdf2f999abfd9333121f" + integrity sha512-adCr+vbLYTFhwhIwjIjjMxTdUYiPA2Jlyuhnbj092IzgLHtT79bvuwcgPWeTyLbFb/13SMKmOEka00xHiqLpig== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.39" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.39" + "@typescript-eslint/types" "8.0.0-alpha.41" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.41" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -447,22 +442,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.39.tgz#fb27dc504d7fe47fd7e1162b5012e4ce883b40b9" - integrity sha512-Nr2PrlfNhrNQTlFHlD7XJdTGw/Vt8qY44irk6bfjn9LxGdSG5e4c1R2UN6kvGMhhx20DBPbM7q3Z3r+huzmL1w== +"@typescript-eslint/utils@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.41.tgz#de7d1fb1856773c7343028352cf326a668aa43b9" + integrity sha512-DTxc9VdERS6iloiw1P5tgRDqRArmp/sIuvgdHBvGh2SiltEFc3VjLGnHHGSTr6GfH7tjFWvcCnCtxx+pjWfp5Q== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.0.0-alpha.39" - "@typescript-eslint/types" "8.0.0-alpha.39" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.39" + "@typescript-eslint/scope-manager" "8.0.0-alpha.41" + "@typescript-eslint/types" "8.0.0-alpha.41" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.41" -"@typescript-eslint/visitor-keys@8.0.0-alpha.39": - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.39.tgz#8bf3938fddad4a00eb354880880237abfb55bda5" - integrity sha512-DVJ0UdhucZy+/1GlIy7FX2+CFhCeNAi4VwaEAe7u2UDenQr9/kGqvzx00UlpWibmEVDw4KsPOI7Aqa1+2Vqfmw== +"@typescript-eslint/visitor-keys@8.0.0-alpha.41": + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.41.tgz#6ddefe0a08a36683e2e8db4b161d6b67374b7757" + integrity sha512-uetCAUBVC+YarBdZnWzDDgX11PpAEGV8Cw31I3d1xNrhx6/bJGThKX+holEmd3amMdnr4w/XUKH/4YuQOgtjDA== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.39" + "@typescript-eslint/types" "8.0.0-alpha.41" eslint-visitor-keys "^3.4.3" "@xmldom/xmldom@^0.8.8": @@ -1320,9 +1315,9 @@ electron-updater@^6.2: tiny-typed-emitter "^2.1.0" electron@^30: - version "30.1.2" - resolved "https://registry.yarnpkg.com/electron/-/electron-30.1.2.tgz#9c8b9b0d0e3f07783d8c5dbd9519b3ffd11f1551" - integrity sha512-A5CFGwbA+HSXnzwjc8fP2GIezBcAb0uN/VbNGLOW8DHOYn07rvJ/1bAJECHUUzt5zbfohveG3hpMQiYpbktuDw== + version "30.2.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-30.2.0.tgz#a309deba0289d24c3059fa349729f1eab7a7b720" + integrity sha512-x4/pUsOyWReAAo3/ZfvL7AvNbfS5dE8HqMC1mjFM/mL847KE/LpRFfOe5DjKqI2OQMTNvSth1mH0LJageHB0Zg== dependencies: "@electron/get" "^2.0.0" "@types/node" "^20.9.0" @@ -1384,10 +1379,10 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc" - integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og== +eslint-scope@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94" + integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1403,15 +1398,15 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9: - version "9.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.6.0.tgz#9f54373afa15e1ba356656a8d96233182027fb49" - integrity sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w== + version "9.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.7.0.tgz#bedb48e1cdc2362a0caaa106a4c6ed943e8b09e4" + integrity sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" + "@eslint-community/regexpp" "^4.11.0" "@eslint/config-array" "^0.17.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.6.0" + "@eslint/js" "9.7.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -1420,7 +1415,7 @@ eslint@^9: cross-spawn "^7.0.2" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.0.1" + eslint-scope "^8.0.2" eslint-visitor-keys "^4.0.0" espree "^10.1.0" esquery "^1.5.0" @@ -1452,9 +1447,9 @@ espree@^10.0.1, espree@^10.1.0: eslint-visitor-keys "^4.0.0" esquery@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -2256,10 +2251,10 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^10.2: - version "10.3.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" - integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== +lru-cache@^10: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^10.2.0: version "10.2.2" @@ -2371,13 +2366,20 @@ minimatch@^5.0.1, minimatch@^5.1.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4: +minimatch@^9.0.1, minimatch@^9.0.3: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -3332,13 +3334,13 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript-eslint@^8.0.0-alpha.39: - version "8.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.39.tgz#6b5eac89a47b2f6fed449cf45502d2c5e4909745" - integrity sha512-bsuR1BVJfHr7sBh7Cca962VPIcP+5UWaIa/+6PpnFZ+qtASjGTxKWIF5dG2o73BX9NsyqQfvRWujb3M9CIoRXA== + version "8.0.0-alpha.41" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.41.tgz#b88af15dfbfa08051f4697698193fcae04ee147f" + integrity sha512-+e7D2XDZeHLe9D3bP7S0Va8YdLHzn3YcesoxMS9SjMWhtaSb5ylxk2txqT84sUS0WIDQetZlvDg2/UmY5B/ycg== dependencies: - "@typescript-eslint/eslint-plugin" "8.0.0-alpha.39" - "@typescript-eslint/parser" "8.0.0-alpha.39" - "@typescript-eslint/utils" "8.0.0-alpha.39" + "@typescript-eslint/eslint-plugin" "8.0.0-alpha.41" + "@typescript-eslint/parser" "8.0.0-alpha.41" + "@typescript-eslint/utils" "8.0.0-alpha.41" typescript@^5: version "5.5.3" From 2c506c9cc2ff7fbbdb617e7d2029ee647a90b7e7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 10:16:54 +0530 Subject: [PATCH 453/466] npx npm-check-updates --interactive --target greatest --- desktop/package.json | 6 +++--- desktop/yarn.lock | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index dbcdadb859..453bb931fa 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -33,7 +33,7 @@ "electron-store": "^8.2", "electron-updater": "^6.2", "ffmpeg-static": "^5.2", - "lru-cache": "^10", + "lru-cache": "^11", "next-electron-server": "^1", "node-stream-zip": "^1.15", "onnxruntime-node": "^1.18" @@ -50,11 +50,11 @@ "electron-builder": "25.0.0-alpha.8", "eslint": "^9", "prettier": "^3", - "prettier-plugin-organize-imports": "^3", + "prettier-plugin-organize-imports": "^4", "prettier-plugin-packagejson": "^2", "shx": "^0.3", "typescript": "^5", - "typescript-eslint": "^8.0.0-alpha.39" + "typescript-eslint": "^8.0.0-alpha.41" }, "packageManager": "yarn@1.22.22", "productName": "ente" diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 8538c03184..5feaf65f6f 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2251,16 +2251,16 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^10: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - lru-cache@^10.2.0: version "10.2.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== +lru-cache@^11: + version "11.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" + integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2752,10 +2752,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-plugin-organize-imports@^3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz#77967f69d335e9c8e6e5d224074609309c62845e" - integrity sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog== +prettier-plugin-organize-imports@^4: + version "4.0.0" + resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.0.0.tgz#a69acf024ea3c8eb650c81f664693826ca853534" + integrity sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA== prettier-plugin-packagejson@^2: version "2.5.0" @@ -3333,7 +3333,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^8.0.0-alpha.39: +typescript-eslint@^8.0.0-alpha.41: version "8.0.0-alpha.41" resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.41.tgz#b88af15dfbfa08051f4697698193fcae04ee147f" integrity sha512-+e7D2XDZeHLe9D3bP7S0Va8YdLHzn3YcesoxMS9SjMWhtaSb5ylxk2txqT84sUS0WIDQetZlvDg2/UmY5B/ycg== From 86f79575aa512d23e3730958c20e0645d92abef3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 10:51:02 +0530 Subject: [PATCH 454/466] [desktop] Graceful shutdown in dev mode --- desktop/src/main.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index 2622d09a6e..20d91ffd9a 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -109,6 +109,8 @@ const main = () => { // // Note that some Electron APIs can only be used after this event occurs. void app.whenReady().then(() => { + attachProcessHandlers(); + void (async () => { // Create window and prepare for the renderer. mainWindow = createMainWindow(); @@ -260,6 +262,23 @@ const handleEnteLinks = (mainWindow: BrowserWindow, url: string) => { mainWindow.webContents.send("openURL", url); }; +/** Attach handlers to the (node) process. */ +const attachProcessHandlers = () => { + // Gracefully quit the app if we get a SIGINT. + // + // This is meant to allow graceful shutdowns during development, when the + // app is launched using `yarn dev`. In such cases, pressing CTRL-C sends a + // SIGINT to the process. The default handling of SIGINT is not graceful + // enough (apparently), since I can observe that sometimes recent writes to + // local storage are lost. This has also been reported by other people: + // https://github.com/electron/electron/issues/22048 + // + // Hopefully handling SIGINT prevents that issue. But beyond that, it allows + // us to also write out `userPreferences.json` (as would happen during a + // normal quit sequence), so this is an improvement either ways. + process.on("SIGINT", () => app.quit()); +}; + /** * Create an return the {@link BrowserWindow} that will form our app's UI. * From a10ca66e57c56429900366c189923e6e3f5bd64b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 14:56:09 +0530 Subject: [PATCH 455/466] [desktop] Fix yarn dev flakiness when renderer is not ready ...by the time the main window is ready to open it. --- desktop/src/main.ts | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index 20d91ffd9a..eed889c236 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -11,7 +11,7 @@ import { nativeImage, shell } from "electron/common"; import type { WebContents } from "electron/main"; -import { BrowserWindow, Menu, Tray, app, protocol } from "electron/main"; +import { BrowserWindow, Menu, Tray, app, net, protocol } from "electron/main"; import serveNextAt from "next-electron-server"; import { existsSync } from "node:fs"; import fs from "node:fs/promises"; @@ -30,6 +30,7 @@ import { createWatcher } from "./main/services/watch"; import { userPreferences } from "./main/stores/user-preferences"; import { migrateLegacyWatchStoreIfNeeded } from "./main/stores/watch"; import { registerStreamProtocol } from "./main/stream"; +import { wait } from "./main/utils/common"; import { isDev } from "./main/utils/electron"; /** @@ -112,6 +113,8 @@ const main = () => { attachProcessHandlers(); void (async () => { + if (isDev) await waitForRendererDevServer(); + // Create window and prepare for the renderer. mainWindow = createMainWindow(); @@ -279,6 +282,42 @@ const attachProcessHandlers = () => { process.on("SIGINT", () => app.quit()); }; +/** + * Wait for the renderer process' dev server to be ready. + * + * After creating the main window, we load the web app into it using `loadURL`. + * In production, these are served directly from the SSR-ed static files bundled + * with the app, and so can be served instantly. However, during development, we + * start a dev server for serving the HMR-ed files. + * + * This Next.js HMR server takes time to startup and is sometimes not ready to + * handle incoming requests when the main window tries to load it. In such + * cases, Electron just hangs with this: + * + * > [main] Error: net::ERR_CONNECTION_REFUSED + * [main] at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:114482) + * [main] at SimpleURLLoaderWrapper.emit (node:events:519:28) + * + * As a workaround, poll the URL we'll subsequently be loading, and only proceed + * if it is responsive. + * + * This workaround can likely be removed when we migrate to Vite. + */ +const waitForRendererDevServer = async () => { + // TODO: eslint has fixed this spurious warning, but we're not on the latest + // version yet, so add a disable. + // https://github.com/eslint/eslint/pull/18286 + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + while (true) { + const res = await net.fetch(rendererURL, { + method: "HEAD", + }); + if (res.ok) break; + log.info("waiting for renderer to be ready..."); + await wait(1000); + } +}; + /** * Create an return the {@link BrowserWindow} that will form our app's UI. * From 5b23e32c7ddfd7e64887fca6bef1568981897b24 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 15:14:47 +0530 Subject: [PATCH 456/466] Meh --- desktop/src/main.ts | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index eed889c236..b35fa13349 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -11,7 +11,7 @@ import { nativeImage, shell } from "electron/common"; import type { WebContents } from "electron/main"; -import { BrowserWindow, Menu, Tray, app, net, protocol } from "electron/main"; +import { BrowserWindow, Menu, Tray, app, protocol } from "electron/main"; import serveNextAt from "next-electron-server"; import { existsSync } from "node:fs"; import fs from "node:fs/promises"; @@ -294,29 +294,20 @@ const attachProcessHandlers = () => { * handle incoming requests when the main window tries to load it. In such * cases, Electron just hangs with this: * - * > [main] Error: net::ERR_CONNECTION_REFUSED - * [main] at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:114482) - * [main] at SimpleURLLoaderWrapper.emit (node:events:519:28) + * [main] Error: net::ERR_CONNECTION_REFUSED + * [main] at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:114482) + * [main] at SimpleURLLoaderWrapper.emit (node:events:519:28) * - * As a workaround, poll the URL we'll subsequently be loading, and only proceed - * if it is responsive. + * As a workaround, we wait for 1 second. + * + * I'd also tried fancier workaround - polling the URL - but waits until the dev + * server has the response ready, delaying everything many seconds (we just want + * to see if the dev server can accept connections). The 1 second delay seems to + * get the job done for now. * * This workaround can likely be removed when we migrate to Vite. */ -const waitForRendererDevServer = async () => { - // TODO: eslint has fixed this spurious warning, but we're not on the latest - // version yet, so add a disable. - // https://github.com/eslint/eslint/pull/18286 - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - while (true) { - const res = await net.fetch(rendererURL, { - method: "HEAD", - }); - if (res.ok) break; - log.info("waiting for renderer to be ready..."); - await wait(1000); - } -}; +const waitForRendererDevServer = () => wait(1000); /** * Create an return the {@link BrowserWindow} that will form our app's UI. From 166474a1b5c99bdeb69eb1f6420fd30247bf4c75 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 17:58:43 +0530 Subject: [PATCH 457/466] Add a throttle --- web/docs/dependencies.md | 12 ++-- web/packages/new/photos/services/ml/index.ts | 3 +- web/packages/utils/promise.ts | 76 ++++++++++++++++++++ 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/web/docs/dependencies.md b/web/docs/dependencies.md index 280da4aea8..5638facfd4 100644 --- a/web/docs/dependencies.md +++ b/web/docs/dependencies.md @@ -46,7 +46,7 @@ The root `package.json` also has a convenience dev dependency: - [concurrently](https://github.com/open-cli-tools/concurrently) for spawning parallel tasks when we invoke various yarn scripts. -## Crypto +## Cryptography We use [libsodium](https://libsodium.gitbook.io/doc/) for encryption, key generation etc. Specifically, we use its WebAssembly and JS wrappers made using @@ -85,9 +85,8 @@ our apps are regular React SPAs, and are not particularly tied to Next. ### Vite For some of our newer code, we have started to use [Vite](https://vitejs.dev). -It is more lower level than Next, but the bells and whistles it doesn't have are -the bells and whistles (and the accompanying complexity) that we don't need in -some cases. +It is likely the future (both generally, and for our code) since Next is +becoming less suitable for SSR and SPAs with their push towards SSG. ## UI @@ -179,6 +178,11 @@ For more details, see [translations.md](translations.md). - [zod](https://github.com/colinhacks/zod) is used for runtime typechecking (e.g. verifying that API responses match the expected TypeScript shape). +- [debounce](https://github.com/sindresorhus/debounce) and its + promise-supporting sibling + [pDebounce](https://github.com/sindresorhus/p-debounce) are used for + debouncing operations (See also: `[Note: Throttle and debounce]`). + ## Media - [jszip](https://github.com/Stuk/jszip) is used for reading zip files in diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 64571f1de0..6115e294d8 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -9,6 +9,7 @@ import { blobCache } from "@/next/blob-cache"; import { ensureElectron } from "@/next/electron"; import log from "@/next/log"; import { ComlinkWorker } from "@/next/worker/comlink-worker"; +import { throttled } from "@/utils/promise"; import { proxy } from "comlink"; import { isBetaUser, isInternalUser } from "../feature-flags"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; @@ -421,7 +422,7 @@ const setInterimScheduledStatus = () => { setMLStatusSnapshot({ phase: "scheduled", nSyncedFiles, nTotalFiles }); }; -const workerDidProcessFile = triggerStatusUpdate; +const workerDidProcessFile = throttled(updateMLStatusSnapshot, 2000); /** * Return the IDs of all the faces in the given {@link enteFile} that are not diff --git a/web/packages/utils/promise.ts b/web/packages/utils/promise.ts index 34f821b6dd..9dfdc2bb5f 100644 --- a/web/packages/utils/promise.ts +++ b/web/packages/utils/promise.ts @@ -7,6 +7,82 @@ export const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +/** + * Throttle invocations of an underlying function, coalescing pending calls. + * + * Take a function that returns a promise, and return a new function that can be + * called an any number of times while still ensuring that the underlying + * function is only called a maximum of once per the specified period. + * + * The underlying function is immediately called if there were no calls to the + * throttled function in the last period. + * + * Otherwise we start waiting. Multiple calls to the throttled function while + * we're waiting (either for the original promise to resolve, or after that, for + * the specified cooldown period to elapse) will all be coalesced into a single + * call to the underlying function when we're done waiting. + * + * --- + * + * [Note: Throttle and debounce] + * + * There are many throttle/debounce libraries, and ideally I'd have liked to + * just use one of them instead of reinventing such a basic and finicky wheel. + * Then why write a bespoke one? + * + * - "debounce" means that the underlying function will only be called when a + * particular wait time has elapsed since the last call to the _debounced_ + * function. + * + * - This behaviour, while useful sometimes, is not what we want always. If + * the debounced function is continuously being called, then the underlying + * function might never get called (since the wait time does not elapse). + * + * - To avoid this starvation, some debounce implementations like lodash + * provide a "maxWait" option, which tells the debounced function to always + * call the underlying function if maxWait has elapsed. + * + * - The debounced functions can trigger the underlying in two ways: leading + * (aka immediate) and trailing which control if the underlying should be + * called at the leading or the trailing edge of the time period. + * + * - "throttle" can be conceptually thought of as just maxWait + leading. In + * fact, this is how lodash actually implements it too. So we could've used + * lodash, except that is a big dependency to pull for a small function. + * + * - Alternatively, pThrottle is a micro-library that provide such a + * "throttle" primitive. However, its implementation enqueues all incoming + * requests to the throttled function: it still calls the underlying once + * per period, but eventually underlying will get called once for each call + * to the throttled function. + * + * - There are circumstances where that would be the appropriate behaviour, + * but that's not what we want. We wish to trigger an async action, + * coalescing multiple triggers into a single one, one per period. + * + * - Perhaps there are other focused and standard library that'd have what we + * want, but instead of spending more time searching I just wrote it from + * scratch for now. Indeed, I've spent more time writing about the function + * than the function itself. + */ +export const throttled = (underlying: () => Promise, period: number) => { + let pending = 0; + + const f = () => { + pending += 1; + if (pending > 1) return; + void underlying() + .then(() => wait(period)) + .then(() => { + const retrigger = pending > 1; + pending = 0; + if (retrigger) f(); + }); + }; + + return f; +}; + /** * Await the given {@link promise} for {@link timeoutMS} milliseconds. If it * does not resolve within {@link timeoutMS}, then reject with a timeout error. From 86b70ec325c836d74708407943d5f9fedd615809 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 13 Jul 2024 18:12:56 +0530 Subject: [PATCH 458/466] Commentary --- web/docs/dependencies.md | 67 +++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/web/docs/dependencies.md b/web/docs/dependencies.md index 5638facfd4..8df2ce387b 100644 --- a/web/docs/dependencies.md +++ b/web/docs/dependencies.md @@ -72,28 +72,31 @@ bit more exhaustively when changing the crypto layer. ### Next.js -[Next.js](https://nextjs.org) ("next") provides the meta framework for both the -Photos and the Auth app, and also for some of the sidecar apps like accounts and -cast. +[Next.js](https://nextjs.org) (package: +[next](https://github.com/vercel/next.js)) provides the meta framework for both +the photos and the auth app, and also for some of the sidecar apps like accounts +and cast. -We use a limited subset of Next. The main thing we get out of it is a reasonable -set of defaults for bundling our app into a static export which we can then -deploy to our webserver. In addition, the Next.js page router is convenient. -Apart from this, while we use a few tidbits from Next.js here and there, overall -our apps are regular React SPAs, and are not particularly tied to Next. +We use a limited subset of Next.js. The main thing we get out of it is a +reasonable set of defaults for bundling our app into a static export which we +can then deploy to our webserver. In addition, the Next.js page router is +convenient. Overall our apps can be described as regular React SPAs, and are not +particularly tied to Next.js. ### Vite For some of our newer code, we have started to use [Vite](https://vitejs.dev). -It is likely the future (both generally, and for our code) since Next is -becoming less suitable for SSR and SPAs with their push towards SSG. +It is likely the future (both generally, and for our code) since Next.js is +becoming less suitable for SSR and SPAs with their push towards RSC/SSG. ## UI ### React -[React](https://react.dev) ("react") is our core framework. It also has a -sibling "react-dom" package that renders JSX to the DOM. +[React](https://react.dev) (package: [react](https://github.com/facebook/react)) +is our core framework. We also import its a sibling +[react-dom](https://github.com/facebook/react) package that renders JSX to the +DOM. ### MUI and Material Icons @@ -108,18 +111,19 @@ We use [MUI](https://mui.com)'s ### Emotion MUI uses [Emotion](https://emotion.sh/) (a styled-component variant) as its -preferred CSS-in-JS library, and we use the same in our code too to reduce -moving parts. +preferred CSS-in-JS library, so we use the same in our code too to reduce moving +parts. Emotion itself comes in many parts, of which we need the following: -- "@emotion/react" - React interface to Emotion. In particular, we set this as - the package that handles the transformation of JSX into JS (via the - `jsxImportSource` property in `tsconfig.json`). +- [@emotion/react](https://github.com/emotion-js/emotion) - React interface to + Emotion. In particular, we set this as the package that handles the + transformation of JSX into JS (via the `jsxImportSource` property in + `tsconfig.json`). -- "@emotion/styled" - Provides the `styled` utility, a la styled-components. - We don't use it directly, instead we import it from `@mui/material`. - However, MUI docs +- [@emotion/styled](https://github.com/emotion-js/emotion) - Provides the + `styled` utility, a la styled-components. We don't use it directly, instead + we import it from `@mui/material`. However, MUI docs [mention](https://mui.com/material-ui/integrations/interoperability/#styled-components) that @@ -145,14 +149,15 @@ infelicity for now. ### Translations -For showing the app's UI in multiple languages, we use the i18next library, -specifically its three components +For showing the app's UI in multiple languages, we use the +[i18next](https://www.i18next.com), specifically its three components -- "i18next": The core `i18next` library. -- "i18next-http-backend": Adds support for initializing `i18next` with JSON - file containing the translation in a particular language, fetched at - runtime. -- "react-i18next": React specific support in `i18next`. +- [i18next](https://github.com/i18next/i18next): The core `i18next` library. +- [react-i18next](https://github.com/i18next/react-i18next): React specific + support in `i18next`. +- [i18next-http-backend](https://github.com/i18next/i18next-http-backend): + Adds support for initializing `i18next` with JSON file containing the + translation in a particular language, fetched at runtime. Note that inspite of the "next" in the name of the library, it has nothing to do with Next.js. @@ -165,7 +170,7 @@ For more details, see [translations.md](translations.md). abstraction for dealing with form state, validation and submission states when using React. -## Infrastructure +## Utilities - [comlink](https://github.com/GoogleChromeLabs/comlink) provides a minimal layer on top of web workers to make them more easier to use. @@ -191,7 +196,7 @@ For more details, see [translations.md](translations.md). - [file-type](https://github.com/sindresorhus/file-type) is used for MIME type detection. We are at an old version 16.5.4 because v17 onwards the package became ESM only - for our limited use case, the custom Webpack configuration - that entails is not worth the upgrade. + that it'd entail is not worth the upgrade. - [heic-convert](https://github.com/catdad-experiments/heic-convert) is used for converting HEIC files (which browsers don't natively support) into JPEG. @@ -232,5 +237,5 @@ For more details, see [translations.md](translations.md). the actual OTP from the user's TOTP/HOTP secret. - However, otpauth doesn't support steam OTPs. For these, we need to compute - the SHA-1, and we use the same library, `jssha` that `otpauth` uses (since - it is already part of our bundle). + the SHA-1, and we use the same library, `jssha` that `otpauth` uses since it + is already part of our bundle (transitively). From c843656fa3570b9fd6135d155462f3659ea4ad16 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 15 Jul 2024 00:31:52 +0000 Subject: [PATCH 459/466] New Crowdin translations by GitHub Action --- .../next/locales/fa-IR/translation.json | 22 +- .../next/locales/fr-FR/translation.json | 10 +- .../next/locales/ja-JP/translation.json | 653 ++++++++++++++++++ .../next/locales/pl-PL/translation.json | 653 ++++++++++++++++++ .../next/locales/sv-SE/translation.json | 18 +- .../next/locales/zh-CN/translation.json | 10 +- 6 files changed, 1336 insertions(+), 30 deletions(-) create mode 100644 web/packages/next/locales/ja-JP/translation.json create mode 100644 web/packages/next/locales/pl-PL/translation.json diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index b1203de644..76a686f392 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -202,18 +202,18 @@ "DOWNLOAD_COLLECTION": "", "CREATE_ALBUM_FAILED": "", "SEARCH": "", - "SEARCH_RESULTS": "", - "NO_RESULTS": "", - "SEARCH_HINT": "", + "SEARCH_RESULTS": "نتایج جستجو", + "NO_RESULTS": "هیچ نتیجه‌ای پیدا نشد", + "SEARCH_HINT": "جستجو برای آلبوم‌ها، تاریخ‌ها، توضیحات و...", "SEARCH_TYPE": { - "COLLECTION": "", - "LOCATION": "", - "CITY": "", - "DATE": "", - "FILE_NAME": "", - "THING": "", - "FILE_CAPTION": "", - "FILE_TYPE": "", + "COLLECTION": "آلبوم", + "LOCATION": "مکان", + "CITY": "مکان", + "DATE": "تاریخ", + "FILE_NAME": "نام پرونده", + "THING": "محتوا", + "FILE_CAPTION": "توضیحات", + "FILE_TYPE": "نوع پرونده", "CLIP": "" }, "photos_count_zero": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 08fc02c5fb..f9d8456c74 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -272,9 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "Échec de désactivation de la double-authentification, veuillez réessayer", "EXPORT_DATA": "Exporter les données", "select_folder": "Sélectionner un dossier", - "select_zips": "", - "faq": "", - "takeout_hint": "", + "select_zips": "Sélectionner les zips", + "faq": "FAQ", + "takeout_hint": "Décompresser tous les zips dans le même dossier et les charger. Ou bien télécharger les zips directement. Consulter la FAQ pour plus de détails.", "DESTINATION": "Destination", "START": "Démarrer", "LAST_EXPORT_TIME": "Horaire du dernier export", @@ -287,7 +287,7 @@ "LIVE_PHOTOS_DETECTED": "Les fichiers photos et vidéos depuis votre espace Live Photos ont été fusionnés en un seul fichier", "RETRY_FAILED": "Réessayer les chargements ayant échoués", "FAILED_UPLOADS": "Chargements échoués ", - "failed_uploads_hint": "", + "failed_uploads_hint": "Il y aura une option pour retenter lorsque le chargement sera terminé", "SKIPPED_FILES": "Chargements ignorés", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Échec de création d'une miniature", "UNSUPPORTED_FILES": "Fichiers non supportés", @@ -405,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", "file": "Fichier", "folder": "Dossier", - "google_takeout": "", + "google_takeout": "Google Takeout", "DEDUPLICATE_FILES": "Déduplication de fichiers", "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", "FILES": "fichiers", diff --git a/web/packages/next/locales/ja-JP/translation.json b/web/packages/next/locales/ja-JP/translation.json new file mode 100644 index 0000000000..c3addf65f2 --- /dev/null +++ b/web/packages/next/locales/ja-JP/translation.json @@ -0,0 +1,653 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "password": "", + "link_password_description": "", + "unlock": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "upload": "", + "import": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "select_photos": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "title_photos": "", + "title_auth": "", + "title_accounts": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "password_changed_elsewhere": "", + "password_changed_elsewhere_message": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "delete_account": "", + "delete_account_manually_message": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "update_subscription_title": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE_COLLECTION": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "failed_uploads_hint": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "link_password_lock": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "SHARED_USING": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "file": "", + "folder": "", + "google_takeout": "", + "DEDUPLICATE_FILES": "", + "NO_DUPLICATES_FOUND": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "free_plan_description": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "drag_and_drop_hint": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "storage_unit": { + "b": "", + "kb": "", + "mb": "", + "gb": "", + "tb": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "CONTINUOUS_EXPORT": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "delete_account_reason_label": "", + "delete_account_reason_placeholder": "", + "delete_reason": { + "missing_feature": "", + "behaviour": "", + "found_another_service": "", + "not_listed": "" + }, + "delete_account_feedback_label": "", + "delete_account_feedback_placeholder": "", + "delete_account_confirm_checkbox_label": "", + "delete_account_confirm": "", + "delete_account_confirm_message": "", + "feedback_required": "", + "feedback_required_found_another_service": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "editor": { + "crop": "" + }, + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_DESC": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_DESC": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "", + "passkeys": "", + "passkey_fetch_failed": "", + "manage_passkey": "", + "delete_passkey": "", + "delete_passkey_confirmation": "", + "rename_passkey": "", + "add_passkey": "", + "enter_passkey_name": "", + "passkeys_description": "", + "CREATED_AT": "", + "passkey_add_failed": "", + "passkey_login_failed": "", + "passkey_login_invalid_url": "", + "passkey_login_already_claimed_session": "", + "passkey_login_generic_error": "", + "passkey_login_credential_hint": "", + "passkeys_not_supported": "", + "try_again": "", + "check_status": "", + "passkey_login_instructions": "", + "passkey_login": "", + "passkey": "", + "passkey_verify_description": "", + "waiting_for_verification": "", + "verification_still_pending": "", + "passkey_verified": "", + "redirecting_back_to_app": "", + "redirect_close_instructions": "", + "redirect_again": "", + "autogenerated_first_album_name": "", + "autogenerated_default_album_name": "", + "developer_settings": "", + "server_endpoint": "", + "more_information": "", + "save": "" +} diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json new file mode 100644 index 0000000000..7c590ef6ab --- /dev/null +++ b/web/packages/next/locales/pl-PL/translation.json @@ -0,0 +1,653 @@ +{ + "HERO_SLIDE_1_TITLE": "
Prywatne kopie zapasowe
dla Twoich wspomnień
", + "HERO_SLIDE_1": "Domyślnie zaszyfrowane metodą end-to-end", + "HERO_SLIDE_2_TITLE": "
Bezpiecznie przechowywane
w awaryjnym schronieniu
", + "HERO_SLIDE_2": "Zaprojektowane do przetrwania", + "HERO_SLIDE_3_TITLE": "
Dostępne
wszędzie
", + "HERO_SLIDE_3": "Android, iOS, Strona Internetowa, Komputer", + "LOGIN": "Zaloguj się", + "SIGN_UP": "Zarejestruj się", + "NEW_USER": "Nowy/a do Ente", + "EXISTING_USER": "Istniejący użytkownik", + "ENTER_NAME": "Wprowadź nazwę", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Dodaj imię, aby Twoi znajomi wiedzieli, kto będzie mógł podziękować za te wspaniałe zdjęcia!", + "ENTER_EMAIL": "Wprowadź adres e-mail", + "EMAIL_ERROR": "Wprowadź prawidłowy adres e-mail", + "REQUIRED": "Wymagane", + "EMAIL_SENT": "Kod weryfikacyjny wysłany do {{email}}", + "CHECK_INBOX": "Sprawdź swoją skrzynkę odbiorczą (i spam), aby zakończyć weryfikację", + "ENTER_OTT": "Kod weryfikacyjny", + "RESEND_MAIL": "Wyślij ponownie kod", + "VERIFY": "Zweryfikuj", + "UNKNOWN_ERROR": "Coś poszło nie tak, spróbuj ponownie", + "INVALID_CODE": "Nieprawidłowy kod weryfikacyjny", + "EXPIRED_CODE": "Twój kod weryfikacyjny wygasł", + "SENDING": "Wysyłanie...", + "SENT": "Wysłano!", + "password": "Hasło", + "link_password_description": "Wprowadź hasło, aby odblokować album", + "unlock": "Odblokuj", + "SET_PASSPHRASE": "Ustaw hasło", + "VERIFY_PASSPHRASE": "Zaloguj się", + "INCORRECT_PASSPHRASE": "Nieprawidłowe hasło", + "ENTER_ENC_PASSPHRASE": "Wprowadź hasło, którego możemy użyć do zaszyfrowania Twoich danych", + "PASSPHRASE_DISCLAIMER": "Nie przechowujemy Twojego hasła, więc jeśli je zapomnisz, nie będziemy w stanie Ci pomóc odzyskać Twoich danych bez klucza odzyskiwania.", + "WELCOME_TO_ENTE_HEADING": "Witamy w ", + "WELCOME_TO_ENTE_SUBHEADING": "Zaszyfrowana metodą end-to-end pamięć na zdjęcia i udostępnianie", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Gdzie żyją Twoje najlepsze zdjęcia", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generowanie kluczy szyfrujących...", + "PASSPHRASE_HINT": "Hasło", + "CONFIRM_PASSPHRASE": "Potwierdź hasło", + "REFERRAL_CODE_HINT": "Jak usłyszałeś/aś o Ente? (opcjonalnie)", + "REFERRAL_INFO": "Nie śledzimy instalacji aplikacji. Pomogłyby nam, gdybyś powiedział/a nam, gdzie nas znalazłeś/aś!", + "PASSPHRASE_MATCH_ERROR": "Hasła nie pasują do siebie", + "CREATE_COLLECTION": "Nowy album", + "ENTER_ALBUM_NAME": "Nazwa albumu", + "CLOSE_OPTION": "Zamknij (Esc)", + "ENTER_FILE_NAME": "Nazwa pliku", + "CLOSE": "Zamknij", + "NO": "Nie", + "NOTHING_HERE": "Nie ma tutaj jeszcze nic do zobaczenia! 👀", + "upload": "Prześlij", + "import": "Importuj", + "ADD_PHOTOS": "Dodaj zdjęcia", + "ADD_MORE_PHOTOS": "Dodaj więcej zdjęć", + "add_photos_one": "Dodaj 1 element", + "add_photos_other": "Dodaj {{count, number}} elementów", + "select_photos": "Wybierz zdjęcia", + "FILE_UPLOAD": "Przesył plików", + "UPLOAD_STAGE_MESSAGE": { + "0": "Przygotowywanie do przesłania", + "1": "Czytanie plików metadanych google", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} plików metadanych wypakowanych", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} plików przetworzonych", + "4": "Anulowanie pozostałych przesłań", + "5": "Kopia zapasowa zakończona" + }, + "FILE_NOT_UPLOADED_LIST": "Następujące pliki nie zostały przesłane", + "SUBSCRIPTION_EXPIRED": "Subskrypcja wygasła", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Twoja subskrypcja wygasła, prosimy o odnowienie", + "STORAGE_QUOTA_EXCEEDED": "Przekroczono limit pamięci", + "INITIAL_LOAD_DELAY_WARNING": "Pierwsze ładowanie może zająć trochę czasu", + "USER_DOES_NOT_EXIST": "Przepraszamy, nie można znaleźć użytkownika z tym adresem e-mail", + "NO_ACCOUNT": "Nie masz konta", + "ACCOUNT_EXISTS": "Posiadam już konto", + "CREATE": "Utwórz", + "DOWNLOAD": "Pobierz", + "DOWNLOAD_OPTION": "Pobierz (D)", + "DOWNLOAD_FAVORITES": "Pobierz ulubione", + "DOWNLOAD_UNCATEGORIZED": "Pobierz nieskategoryzowane", + "DOWNLOAD_HIDDEN_ITEMS": "Pobierz ukryte elementy", + "COPY_OPTION": "Kopiuj jako PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Przełącz tryb pełnoekranowy (F)", + "ZOOM_IN_OUT": "Powiększ/Zmniejsz", + "PREVIOUS": "Poprzedni (←)", + "NEXT": "Następny (→)", + "title_photos": "Ente Zdjęcia", + "title_auth": "Ente Auth", + "title_accounts": "Konta Ente", + "UPLOAD_FIRST_PHOTO": "Prześlij swoje pierwsze zdjęcie", + "IMPORT_YOUR_FOLDERS": "Importuj swoje foldery", + "UPLOAD_DROPZONE_MESSAGE": "Upuść, aby wykonać kopię zapasową swoich plików", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Upuść, aby dodać obserwowany folder", + "TRASH_FILES_TITLE": "Usunąć pliki?", + "TRASH_FILE_TITLE": "Usunąć plik?", + "DELETE_FILES_TITLE": "Usunąć natychmiast?", + "DELETE_FILES_MESSAGE": "Wybrane pliki zostaną trwale usunięte z Twojego konta Ente.", + "DELETE": "Usuń", + "DELETE_OPTION": "Usuń (DEL)", + "FAVORITE_OPTION": "Dodaj do ulubionych (L)", + "UNFAVORITE_OPTION": "Usuń z ulubionych (L)", + "MULTI_FOLDER_UPLOAD": "Wykryto wiele folderów", + "UPLOAD_STRATEGY_CHOICE": "Czy chcesz przesłać je do", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Pojedynczy album", + "OR": "lub", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Oddziel albumy", + "SESSION_EXPIRED_MESSAGE": "Twoja sesja wygasła, prosimy zalogować się ponownie, aby kontynuować", + "SESSION_EXPIRED": "Sesja wygasła", + "PASSWORD_GENERATION_FAILED": "Twoja przeglądarka nie była w stanie wygenerować silnego klucza, który spełnia standardy szyfrowania Ente, spróbuj użyć aplikacji mobilnej lub innej przeglądarki", + "CHANGE_PASSWORD": "Zmień hasło", + "password_changed_elsewhere": "Hasło zostało zmienione gdzie indziej", + "password_changed_elsewhere_message": "Zaloguj się ponownie na tym urządzeniu, aby użyć nowego hasła do uwierzytelnienia.", + "GO_BACK": "Cofnij się", + "RECOVERY_KEY": "Klucz odzyskiwania", + "SAVE_LATER": "Zrób to później", + "SAVE": "Zapisz Klucz", + "RECOVERY_KEY_DESCRIPTION": "Jeśli zapomnisz swojego hasła, jedynym sposobem na odzyskanie Twoich danych jest ten klucz.", + "RECOVER_KEY_GENERATION_FAILED": "Nie można wygenerować kodu odzyskiwania, spróbuj ponownie", + "KEY_NOT_STORED_DISCLAIMER": "Nie przechowujemy tego klucza, prosimy zapisać to w bezpiecznym miejscu", + "FORGOT_PASSWORD": "Zapomniałem/am hasła", + "RECOVER_ACCOUNT": "Odzyskaj konto", + "RECOVERY_KEY_HINT": "Klucz odzyskiwania", + "RECOVER": "Odzyskaj", + "NO_RECOVERY_KEY": "Brak klucza odzyskiwania?", + "INCORRECT_RECOVERY_KEY": "Nieprawidłowy klucz odzyskiwania", + "SORRY": "Przepraszamy", + "NO_RECOVERY_KEY_MESSAGE": "Ze względu na charakter naszego protokołu szyfrowania end-to-end, Twoje dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Wyślij wiadomość e-mail na {{emailID}} z zarejestrowanego adresu e-mail", + "CONTACT_SUPPORT": "Skontaktuj się z pomocą techniczną", + "REQUEST_FEATURE": "Zaproponuj Funkcję", + "SUPPORT": "Wsparcie techniczne", + "CONFIRM": "Potwierdź", + "CANCEL": "Anuluj", + "LOGOUT": "Wyloguj się", + "delete_account": "Usuń konto", + "delete_account_manually_message": "

Prosimy wysłać wiadomość e-mail na {{emailID}} z Twojego zarejestrowanego adresu e-mail.

Twoja prośba zostanie przetworzona w ciągu 72 godzin.

", + "LOGOUT_MESSAGE": "Czy na pewno chcesz się wylogować?", + "CHANGE_EMAIL": "Zmień adres e-mail", + "OK": "OK", + "SUCCESS": "Sukces", + "ERROR": "Błąd", + "MESSAGE": "Wiadomość", + "INSTALL_MOBILE_APP": "Zainstaluj naszą aplikację na system Android lub iOS, aby automatycznie wykonać kopię zapasową wszystkich zdjęć", + "DOWNLOAD_APP_MESSAGE": "Przepraszamy, ta operacja jest obecnie obsługiwana tylko w naszej aplikacji komputerowej", + "DOWNLOAD_APP": "Pobierz aplikację komputerową", + "EXPORT": "Eksportuj Dane", + "SUBSCRIPTION": "Subskrypcja", + "SUBSCRIBE": "Subskrybuj", + "MANAGEMENT_PORTAL": "Zarządzaj metodą płatności", + "MANAGE_FAMILY_PORTAL": "Zarządzaj rodziną", + "LEAVE_FAMILY_PLAN": "Opuść plan rodzinny", + "LEAVE": "Wyjdź", + "LEAVE_FAMILY_CONFIRM": "Czy na pewno chcesz opuścić plan rodzinny?", + "CHOOSE_PLAN": "Wybierz swój plan", + "MANAGE_PLAN": "Zarządzaj swoją subskrypcją", + "ACTIVE": "Aktywne", + "OFFLINE_MSG": "Jesteś offline, wyświetlane są wspomnienia z pamięci podręcznej", + "FREE_SUBSCRIPTION_INFO": "Jesteś na bezpłatnym planie, który wygasa {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Jesteś na planie rodzinnym zarządzanym przez", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Odnawia się dnia {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Kończy się dnia {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Twoja subskrypcja zostanie anulowana dnia {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Twój dodatek {{storage, string}} jest ważny do {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Przekroczono limit pamięci, prosimy ulepszyć", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Otrzymaliśmy Twoją płatność

Twoja subskrypcja jest ważna do {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Zakup został anulowany, spróbuj ponownie, jeśli chcesz subskrybować", + "SUBSCRIPTION_PURCHASE_FAILED": "Zakup subskrypcji nie powiódł się, spróbuj ponownie", + "SUBSCRIPTION_UPDATE_FAILED": "Aktualizacja subskrypcji nie powiodła się, spróbuj ponownie", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Przepraszamy, płatność nie powiodła się, gdy próbowaliśmy obciążyć Twoją kartę, zaktualizuj metodę płatności i spróbuj ponownie", + "STRIPE_AUTHENTICATION_FAILED": "Nie możemy uwierzytelnić Twojej metody płatności. Prosimy wybrać inną metodę płatności i spróbuj ponownie", + "UPDATE_PAYMENT_METHOD": "Zaktualizuj metodę płatności", + "MONTHLY": "Miesięcznie", + "YEARLY": "Rocznie", + "update_subscription_title": "Potwierdź zmianę planu", + "UPDATE_SUBSCRIPTION_MESSAGE": "Czy na pewno chcesz zmienić swój plan?", + "UPDATE_SUBSCRIPTION": "Zmień plan", + "CANCEL_SUBSCRIPTION": "Anuluj subskrypcję", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Wszystkie Twoje dane zostaną usunięte z naszych serwerów pod koniec tego okresu rozliczeniowego.

Czy na pewno chcesz anulować swoją subskrypcję?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Czy na pewno chcesz anulować swoją subskrypcję?

", + "SUBSCRIPTION_CANCEL_FAILED": "Nie udało się anulować subskrypcji", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subskrypcja anulowana pomyślnie", + "REACTIVATE_SUBSCRIPTION": "Aktywuj ponownie subskrypcję", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Po ponownej aktywacji zostaniesz rozliczony dnia {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subskrypcja aktywowana pomyślnie ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Nie udało się ponownie aktywować odnowienia subskrypcji", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Dziękujemy", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Anuluj subskrypcję mobilną", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Anuluj subskrypcję z aplikacji mobilnej, aby aktywować subskrypcję tutaj", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Skontaktuj się z nami pod adresem {{emailID}}, aby zarządzać swoją subskrypcją", + "RENAME": "Zmień nazwę", + "RENAME_FILE": "Zmień nazwę pliku", + "RENAME_COLLECTION": "Zmień nazwę albumu", + "DELETE_COLLECTION_TITLE": "Usunąć album?", + "DELETE_COLLECTION": "Usuń album", + "DELETE_COLLECTION_MESSAGE": "Usunąć również zdjęcia (i wideo) znajdujące się w tym albumie ze wszystkich innych albumów, których są częścią?", + "DELETE_PHOTOS": "Usuń zdjęcia", + "KEEP_PHOTOS": "Zachowaj zdjęcia", + "SHARE_COLLECTION": "Udostępnij album", + "SHARE_WITH_SELF": "Ups, nie możesz udostępnić samemu/samej sobie", + "ALREADY_SHARED": "Ups, już to udostępniasz z {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Udostępnianie albumu nie jest dozwolone", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Udostępnianie jest wyłączone dla darmowych kont", + "DOWNLOAD_COLLECTION": "Pobierz album", + "CREATE_ALBUM_FAILED": "Nie udało się utworzyć albumu, spróbuj ponownie", + "SEARCH": "Szukaj", + "SEARCH_RESULTS": "Wyniki wyszukiwania", + "NO_RESULTS": "Nie znaleziono wyników", + "SEARCH_HINT": "Szukaj albumów, dat, opisów, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Lokalizacja", + "CITY": "Lokalizacja", + "DATE": "Data", + "FILE_NAME": "Nazwa pliku", + "THING": "Zawartość", + "FILE_CAPTION": "Opis", + "FILE_TYPE": "Rodzaj pliku", + "CLIP": "Magia" + }, + "photos_count_zero": "Brak wspomnień", + "photos_count_one": "1 wspomnienie", + "photos_count_other": "{{count, number}} wspomnień", + "TERMS_AND_CONDITIONS": "Akceptuję warunki korzystania z usługi i politykę prywatności", + "ADD_TO_COLLECTION": "Dodaj do albumu", + "SELECTED": "wybrane", + "PEOPLE": "Ludzie", + "INDEXING_SCHEDULED": "Indeksowanie jest zaplanowane...", + "ANALYZING_PHOTOS": "Indeksowanie zdjęć ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indeksowanie ludzi w {{indexStatus.nSyncedFiles,number}} zdjęć...", + "INDEXING_DONE": "Zindeksowano {{indexStatus.nSyncedFiles,number}} zdjęć", + "UNIDENTIFIED_FACES": "niezidentyfikowane twarze", + "OBJECTS": "obiekty", + "TEXT": "tekst", + "INFO": "Informacje ", + "INFO_OPTION": "Informacje (I)", + "FILE_NAME": "Nazwa pliku", + "CAPTION_PLACEHOLDER": "Dodaj opis", + "LOCATION": "Lokalizacja", + "SHOW_ON_MAP": "Pokaż na OpenStreetMap", + "MAP": "Mapa", + "MAP_SETTINGS": "Ustawienia Mapy", + "ENABLE_MAPS": "Włączyć Mapy?", + "ENABLE_MAP": "Włącz mapę", + "DISABLE_MAPS": "Wyłączyć Mapy?", + "ENABLE_MAP_DESCRIPTION": "

To pokaże Twoje zdjęcia na mapie świata.

Mapa jest hostowana przez OpenStreetMap, a dokładne lokalizacje Twoich zdjęć nigdy nie są udostępniane.

Możesz wyłączyć tę funkcję w dowolnym momencie w Ustawieniach.

", + "DISABLE_MAP_DESCRIPTION": "

To wyłączy wyświetlanie zdjęć na mapie świata.

Możesz włączyć tę funkcję w dowolnym momencie w Ustawieniach.

", + "DISABLE_MAP": "Wyłącz mapę", + "DETAILS": "Szczegóły", + "VIEW_EXIF": "Wyświetl wszystkie dane EXIF", + "NO_EXIF": "Brak danych EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Dwuskładnikowe", + "TWO_FACTOR_AUTHENTICATION": "Uwierzytelnianie dwuskładnikowe", + "TWO_FACTOR_QR_INSTRUCTION": "Zeskanuj poniższy kod QR za pomocą swojej ulubionej aplikacji uwierzytelniającej", + "ENTER_CODE_MANUALLY": "Wprowadź kod ręcznie", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Wprowadź ten kod w swojej ulubionej aplikacji uwierzytelniającej", + "SCAN_QR_CODE": "Zamiast tego zeskanuj kod QR", + "ENABLE_TWO_FACTOR": "Włącz dwuskładnikowe", + "ENABLE": "Włącz", + "LOST_DEVICE": "Utracono urządzenie dwuskładnikowe", + "INCORRECT_CODE": "Nieprawidłowy kod", + "TWO_FACTOR_INFO": "Dodaj dodatkową warstwę bezpieczeństwa, wymagając więcej niż Twojego adresu e-mail i hasła, aby zalogować się na swoje konto", + "DISABLE_TWO_FACTOR_LABEL": "Wyłącz uwierzytelnianie dwuskładnikowe", + "UPDATE_TWO_FACTOR_LABEL": "Zaktualizuj swoje urządzenie uwierzytelniające", + "DISABLE": "Wyłącz", + "RECONFIGURE": "Konfiguruj ponownie", + "UPDATE_TWO_FACTOR": "Aktualizuj dwuskładnikowe", + "UPDATE_TWO_FACTOR_MESSAGE": "Kontynuowanie spowoduje unieważnienie wszystkich poprzednio skonfigurowanych uwierzytelniaczy", + "UPDATE": "Aktualizuj", + "DISABLE_TWO_FACTOR": "Wyłącz dwuetapowe", + "DISABLE_TWO_FACTOR_MESSAGE": "Czy na pewno chcesz wyłączyć uwierzytelnianie dwuetapowe", + "TWO_FACTOR_DISABLE_FAILED": "Nie udało się wyłączyć dwustopniowego czynnika, spróbuj ponownie", + "EXPORT_DATA": "Eksportuj dane", + "select_folder": "Wybierz folder", + "select_zips": "Wybierz zipy", + "faq": "Najczęściej zadawane pytania (FAQ)", + "takeout_hint": "Rozpakuj wszystkie zipy do tego samego folderu i prześlij to. Lub wgraj je bezpośrednio. Zobacz Najczęściej Zadawane Pytania, aby uzyskać więcej informacji.", + "DESTINATION": "Miejsce docelowe", + "START": "Rozpocznij", + "LAST_EXPORT_TIME": "Czas ostatniego eksportu", + "EXPORT_AGAIN": "Synchronizuj ponownie", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Pamięć lokalna niedostępna", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Twoja przeglądarka lub dodatek blokuje Ente przed zapisywaniem danych w pamięci lokalnej. Spróbuj załadować tę stronę po przełączeniu trybu przeglądania.", + "SEND_OTT": "Wyślij OTP", + "EMAIl_ALREADY_OWNED": "E-mail jest już zajęty", + "ETAGS_BLOCKED": "

Nie mogliśmy przesłać następujących plików ze względu na konfigurację przeglądarki.

Prosimy wyłączyć wszelkie dodatki, które mogą uniemożliwiać Ente od użycia eTags do przesyłania dużych plików, lub użyj naszej aplikacji komputerowej, aby uzyskać bardziej wiarygodny import.

", + "LIVE_PHOTOS_DETECTED": "Zdjęcia i pliki wideo ze zdjęć na żywo zostały scalone w jeden plik", + "RETRY_FAILED": "Ponów nieudane przesłania", + "FAILED_UPLOADS": "Nieudane przesłania ", + "failed_uploads_hint": "Po zakończeniu przesyłania będzie dostępna opcja do powtórzenia", + "SKIPPED_FILES": "Zignorowane przesłania", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Generowanie miniatur nie powiodło się", + "UNSUPPORTED_FILES": "Nieobsługiwane pliki", + "SUCCESSFUL_UPLOADS": "Pomyślne przesłania", + "SKIPPED_INFO": "Pominięto te pliki, ponieważ są pliki z pasującymi nazwami w tym samym albumie", + "UNSUPPORTED_INFO": "Ente nie obsługuje jeszcze tych formatów plików", + "BLOCKED_UPLOADS": "Zablokowane przesłania", + "INPROGRESS_METADATA_EXTRACTION": "W toku", + "INPROGRESS_UPLOADS": "Przesyłanie w toku", + "TOO_LARGE_UPLOADS": "Duże pliki", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Niewystarczająca ilość miejsca", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Te pliki nie zostały przesłane, ponieważ przekraczają maksymalny limit rozmiaru dla Twojego planu pojemności", + "TOO_LARGE_INFO": "Te pliki nie zostały przesłane, ponieważ przekraczają maksymalny limit rozmiaru pliku", + "THUMBNAIL_GENERATION_FAILED_INFO": "Te pliki zostały przesłane, ale niestety nie mogliśmy dla nich wygenerować miniatur.", + "UPLOAD_TO_COLLECTION": "Prześlij do albumu", + "UNCATEGORIZED": "Nieskategoryzowane", + "ARCHIVE": "Archiwum", + "FAVORITES": "Ulubione", + "ARCHIVE_COLLECTION": "Archiwizuj album", + "ARCHIVE_SECTION_NAME": "Archiwum", + "ALL_SECTION_NAME": "Wszystko", + "MOVE_TO_COLLECTION": "Przenieś do albumu", + "UNARCHIVE": "Usuń z archiwum", + "UNARCHIVE_COLLECTION": "Usuń z archiwum album", + "HIDE_COLLECTION": "Ukryj album", + "UNHIDE_COLLECTION": "Odkryj album", + "MOVE": "Przenieś", + "ADD": "Dodaj", + "REMOVE": "Usuń", + "YES_REMOVE": "Tak, usuń", + "REMOVE_FROM_COLLECTION": "Usuń z albumu", + "TRASH": "Kosz", + "MOVE_TO_TRASH": "Przenieś do kosza", + "TRASH_FILES_MESSAGE": "Wybrane elementy zostaną usunięte ze wszystkich albumów i przeniesione do kosza.", + "TRASH_FILE_MESSAGE": "Plik zostanie usunięty ze wszystkich albumów i przeniesiony do kosza.", + "DELETE_PERMANENTLY": "Usuń na stałe", + "RESTORE": "Przywróć", + "RESTORE_TO_COLLECTION": "Przywróć do albumu", + "EMPTY_TRASH": "Opróżnij Kosz", + "EMPTY_TRASH_TITLE": "Opróżnić kosz?", + "EMPTY_TRASH_MESSAGE": "Te pliki zostaną trwale usunięte z Twojego konta Ente.", + "LEAVE_SHARED_ALBUM": "Tak, opuść", + "LEAVE_ALBUM": "Opuść album", + "LEAVE_SHARED_ALBUM_TITLE": "Opuścić udostępniony album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Opuścisz album i przestanie on być dla Ciebie widoczny.", + "NOT_FILE_OWNER": "Nie można usunąć plików w udostępnionym albumie", + "CONFIRM_SELF_REMOVE_MESSAGE": "Wybrane elementy zostaną usunięte z tego albumu. Elementy, które są tylko w tym albumie, zostaną przeniesione do Nieskategoryzowanych.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Niektóre z usuwanych elementów zostały dodane przez inne osoby i utracisz do nich dostęp.", + "SORT_BY_CREATION_TIME_ASCENDING": "Najstarsze", + "SORT_BY_UPDATION_TIME_DESCENDING": "Ostatnia aktualizacja", + "SORT_BY_NAME": "Nazwa", + "FIX_CREATION_TIME": "Napraw czas", + "FIX_CREATION_TIME_IN_PROGRESS": "Naprawianie czasu", + "CREATION_TIME_UPDATED": "Czas pliku zaktualizowany", + "UPDATE_CREATION_TIME_NOT_STARTED": "Wybierz opcję, którą chcesz użyć", + "UPDATE_CREATION_TIME_COMPLETED": "Wszystkie pliki zostały pomyślnie zaktualizowane", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Aktualizacja czasu pliku nie powiodła się dla niektórych plików, spróbuj ponownie", + "CAPTION_CHARACTER_LIMIT": "Maksymalnie 5000 znaków", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "Niestandardowy czas", + "REOPEN_PLAN_SELECTOR_MODAL": "Otwórz ponownie plany", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Nie udało się otworzyć planów", + "INSTALL": "Zainstaluj", + "SHARING_DETAILS": "Udostępnianie szczegółów", + "MODIFY_SHARING": "Modyfikuj udostępnianie", + "ADD_COLLABORATORS": "Dodaj współuczestników", + "ADD_NEW_EMAIL": "Dodaj nowy adres e-mail", + "shared_with_people_zero": "Podziel się z określonymi osobami", + "shared_with_people_one": "Udostępnione z jedną osobą", + "shared_with_people_other": "Udostępnione z {{count, number}} osobami", + "participants_zero": "Brak uczestników", + "participants_one": "1 uczestnik", + "participants_other": "{{count, number}} uczestników", + "ADD_VIEWERS": "Dodaj widzów", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} nie będzie mógł dodać więcej zdjęć do tego albumu.

Nadal będą mogli usuwać istniejące zdjęcia, które dodali

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} będzie mógł dodawać zdjęcia do albumu", + "CONVERT_TO_VIEWER": "Tak, konwertuj na widza", + "CONVERT_TO_COLLABORATOR": "Tak, konwertuj na współuczestnika", + "CHANGE_PERMISSION": "Zmienić uprawnienie?", + "REMOVE_PARTICIPANT": "Usunąć?", + "CONFIRM_REMOVE": "Tak, usuń", + "MANAGE": "Zarządzaj", + "ADDED_AS": "Dodano jako", + "COLLABORATOR_RIGHTS": "Współuczestnicy mogą dodawać zdjęcia i wideo do udostępnionego albumu", + "REMOVE_PARTICIPANT_HEAD": "Usuń uczestnika", + "OWNER": "Właściciel", + "COLLABORATORS": "Współuczestnicy", + "ADD_MORE": "Dodaj więcej", + "VIEWERS": "Widzowie", + "OR_ADD_EXISTING": "Lub wybierz istniejący", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} zostanie usunięty z albumu

Wszelkie dodane przez nich zdjęcia zostaną usunięte z albumu

", + "NOT_FOUND": "404 - nie znaleziono", + "LINK_EXPIRED": "Link wygasł", + "LINK_EXPIRED_MESSAGE": "Ten link wygasł lub został wyłączony!", + "MANAGE_LINK": "Zarządzaj linkiem", + "LINK_TOO_MANY_REQUESTS": "Przepraszamy, ten album został wyświetlony na zbyt wielu urządzeniach!", + "FILE_DOWNLOAD": "Zezwól na pobieranie", + "link_password_lock": "Blokada hasłem", + "PUBLIC_COLLECT": "Pozwól na dodawanie zdjęć", + "LINK_DEVICE_LIMIT": "Limit urządzeń", + "NO_DEVICE_LIMIT": "Brak", + "LINK_EXPIRY": "Wygaśnięcie linku", + "NEVER": "Nigdy", + "DISABLE_FILE_DOWNLOAD": "Wyłącz pobieranie", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Czy na pewno chcesz wyłączyć przycisk pobierania plików?

Widzowie nadal mogą robić zrzuty ekranu lub zapisać kopię zdjęć za pomocą narzędzi zewnętrznych.

", + "SHARED_USING": "Udostępnione za pomocą ", + "SHARING_REFERRAL_CODE": "Użyj kodu {{referralCode}}, aby otrzymać 10 GB za darmo", + "LIVE": "NA ŻYWO", + "DISABLE_PASSWORD": "Wyłącz blokadę hasłem", + "DISABLE_PASSWORD_MESSAGE": "Czy na pewno chcesz wyłączyć blokadę hasłem?", + "PASSWORD_LOCK": "Blokada hasłem", + "LOCK": "Zablokuj", + "DOWNLOAD_UPLOAD_LOGS": "Logi debugowania", + "file": "Plik", + "folder": "Folder", + "google_takeout": "Paczka danych Google", + "DEDUPLICATE_FILES": "Odduplikuj pliki", + "NO_DUPLICATES_FOUND": "Nie masz zduplikowanych plików, które można wyczyścić", + "FILES": "pliki", + "EACH": "każde", + "DEDUPLICATE_BASED_ON_SIZE": "Następujące pliki zostały zgrupowane na podstawie ich rozmiarów, sprawdź i usuń elementy, które uważasz, że są duplikatami", + "STOP_ALL_UPLOADS_MESSAGE": "Czy na pewno chcesz zatrzymać wszystkie przesłania w toku?", + "STOP_UPLOADS_HEADER": "Zatrzymać przesyłanie?", + "YES_STOP_UPLOADS": "Tak, zatrzymaj przesyłanie", + "STOP_DOWNLOADS_HEADER": "Zatrzymać pobieranie?", + "YES_STOP_DOWNLOADS": "Tak, zatrzymaj pobieranie", + "STOP_ALL_DOWNLOADS_MESSAGE": "Czy na pewno chcesz zatrzymać wszystkie pobierane w toku?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albumów", + "ALL_ALBUMS": "Wszystkie Albumy", + "ALBUMS": "Albumy", + "ALL_HIDDEN_ALBUMS": "Wszystkie ukryte albumy", + "HIDDEN_ALBUMS": "Ukryte albumy", + "HIDDEN_ITEMS": "Ukryte elementy", + "ENTER_TWO_FACTOR_OTP": "Wprowadź 6-cyfrowy kod z\ntwojej aplikacji uwierzytelniającej.", + "CREATE_ACCOUNT": "Utwórz konto", + "COPIED": "Skopiowano", + "WATCH_FOLDERS": "Obserwuj foldery", + "UPGRADE_NOW": "Ulepsz teraz", + "RENEW_NOW": "Odnów teraz", + "STORAGE": "Pamięć", + "USED": "użyte", + "YOU": "Ty", + "FAMILY": "Rodzina", + "FREE": "darmowe", + "OF": "z", + "WATCHED_FOLDERS": "Obserwowane foldery", + "NO_FOLDERS_ADDED": "Nie dodano jeszcze folderów!", + "FOLDERS_AUTOMATICALLY_MONITORED": "Foldery, które tutaj dodasz, będą monitorowane automatycznie", + "UPLOAD_NEW_FILES_TO_ENTE": "Prześlij nowe pliki do Ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Usuń usunięte pliki z Ente", + "ADD_FOLDER": "Dodaj folder", + "STOP_WATCHING": "Przestań obserwować", + "STOP_WATCHING_FOLDER": "Przestać obserwować folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Twoje istniejące pliki nie zostaną usunięte, ale Ente przestanie automatycznie aktualizować połączony album Ente przy zmianach w tym folderze.", + "YES_STOP": "Tak, zatrzymaj", + "MONTH_SHORT": "m-c", + "YEAR": "rok", + "FAMILY_PLAN": "Plan rodzinny", + "DOWNLOAD_LOGS": "Pobierz logi", + "DOWNLOAD_LOGS_MESSAGE": "

Spowoduje to pobranie dzienników debugowania, które możesz wysłać do nas na e-mail, aby pomóc w debugowaniu problemu.

Należy pamiętać, że nazwy plików będą dołączone, aby pomóc w śledzeniu problemów z konkretnymi plikami.

", + "CHANGE_FOLDER": "Zmień Folder", + "TWO_MONTHS_FREE": "Otrzymaj 2 miesiące za darmo na rocznych planach", + "POPULAR": "Popularne", + "FREE_PLAN_OPTION_LABEL": "Kontynuuj bezpłatny okres próbny", + "free_plan_description": "{{storage}} na 1 rok", + "CURRENT_USAGE": "Bieżące użycie to {{usage}}", + "WEAK_DEVICE": "Przeglądarka, której używasz nie jest wystarczająco silna, aby zaszyfrować Twoje zdjęcia. Prosimy zalogować się do Ente na Twoim komputerze lub pobierz aplikacje mobilną/komputerową Ente.", + "drag_and_drop_hint": "Lub przeciągnij i upuść do okna Ente", + "AUTHENTICATE": "Uwierzytelnij", + "UPLOADED_TO_SINGLE_COLLECTION": "Przesłano do pojedynczej kolekcji", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Przesłano do oddzielnych kolekcji", + "NEVERMIND": "Nieważne", + "UPDATE_AVAILABLE": "Dostępna jest aktualizacja", + "UPDATE_INSTALLABLE_MESSAGE": "Nowa wersja Ente jest gotowa do zainstalowania.", + "INSTALL_NOW": "Zainstaluj teraz", + "INSTALL_ON_NEXT_LAUNCH": "Zainstaluj przy następnym uruchomieniu", + "UPDATE_AVAILABLE_MESSAGE": "Nowa wersja Ente została wydana, ale nie może być automatycznie pobrana i zainstalowana.", + "DOWNLOAD_AND_INSTALL": "Pobierz i zainstaluj", + "IGNORE_THIS_VERSION": "Ignoruj tę wersję", + "TODAY": "Dzisiaj", + "YESTERDAY": "Wczoraj", + "NAME_PLACEHOLDER": "Nazwa...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Nie można utworzyć albumów z mieszanki plików/folderów", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Przeciągnąłeś i upuściłeś mieszankę plików i folderów.

Prosimy podać tylko pliki lub tylko foldery podczas wybierania opcji tworzenia oddzielnych albumów

", + "CHOSE_THEME": "Wybierz motyw", + "ML_SEARCH": "Rozpoznawanie twarzy", + "ENABLE_ML_SEARCH_DESCRIPTION": "

To włączy nauczanie maszynowe na urządzeniu i wyszukiwanie twarz, które zacznie lokalną analizę przesłanych zdjęć.

Przy pierwszym uruchomieniu po zalogowaniu się lub włączeniu tej funkcji wszystkie zdjęcia zostaną pobrane na lokalnym urządzeniu do analizy. Włącz tę opcję tylko wtedy, gdy nie przeszkadza Ci przepustowość i lokalne przetwarzanie wszystkich Twoich zdjęć w Twojej bibliotece zdjęć.

Jeśli włączasz tę opcję po raz pierwszy, poprosimy Cię również o pozwolenie na przetwarzanie danych twarzy.

", + "ML_MORE_DETAILS": "Więcej szczegółów", + "ENABLE_FACE_SEARCH": "Włącz rozpoznawanie twarzy", + "ENABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Jeśli włączysz rozpoznawanie twarzy, Ente wyodrębni geometrię twarzy ze zdjęć. Będzie to miało miejsce na Twoim urządzeniu, a wszystkie wygenerowane dane biometryczne będą zaszyfrowane metodą end-to-end.

Kliknij tutaj, aby uzyskać więcej informacji na temat tej funkcji w naszej polityce prywatności

", + "DISABLE_BETA": "Wstrzymaj rozpoznawanie", + "DISABLE_FACE_SEARCH": "Wyłącz rozpoznawanie twarzy", + "DISABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente zatrzyma przetwarzanie geometrii twarzy.

Możesz ponownie włączyć rozpoznawanie twarzy, jeśli chcesz, więc ta operacja jest bezpieczna.

", + "ADVANCED": "Zaawansowane", + "FACE_SEARCH_CONFIRMATION": "Rozumiem i chcę pozwolić Ente na przetwarzanie geometrii twarzy", + "LABS": "Laboratoria", + "YOURS": "twoje", + "passphrase_strength_weak": "Siła hasła: Słabe", + "passphrase_strength_moderate": "Siła hasła: Umiarkowane", + "passphrase_strength_strong": "Siła hasła: Silne", + "PREFERENCES": "Preferencje", + "LANGUAGE": "Język", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Nieprawidłowy katalog eksportu", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

Wybrany katalog eksportu nie istnieje.

Proszę wybrać prawidłowy katalog.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Weryfikacja subskrypcji nie powiodła się", + "storage_unit": { + "b": "B", + "kb": "kB", + "mb": "MB", + "gb": "GB", + "tb": "TB" + }, + "AFTER_TIME": { + "HOUR": "po godzinie", + "DAY": "po 1 dniu", + "WEEK": "po 1 tygodniu", + "MONTH": "po 1 miesiącu", + "YEAR": "po 1 roku" + }, + "COPY_LINK": "Skopiuj link", + "DONE": "Gotowe", + "LINK_SHARE_TITLE": "Lub udostępnij link", + "REMOVE_LINK": "Usuń link", + "CREATE_PUBLIC_SHARING": "Utwórz publiczny link", + "PUBLIC_LINK_CREATED": "Publiczny link utworzony", + "PUBLIC_LINK_ENABLED": "Publiczny link włączony", + "COLLECT_PHOTOS": "Zbierz zdjęcia", + "PUBLIC_COLLECT_SUBTEXT": "Pozwól osobom z linkiem na dodawanie zdjęć do udostępnionego albumu.", + "STOP_EXPORT": "Zatrzymaj", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} elementy zsynchronizowane", + "MIGRATING_EXPORT": "Przygotowywanie...", + "RENAMING_COLLECTION_FOLDERS": "Zmienianie nazwy folderów albumów...", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "CONTINUOUS_EXPORT": "Synchronizuj ciągle", + "PENDING_ITEMS": "Oczekujące elementy", + "EXPORT_STARTING": "Rozpoczynanie eksportu...", + "delete_account_reason_label": "Jaka jest główna przyczyna usunięcia Twojego konta?", + "delete_account_reason_placeholder": "Wybierz powód", + "delete_reason": { + "missing_feature": "Brakuje kluczowej funkcji, której potrzebuję", + "behaviour": "Aplikacja lub określona funkcja nie zachowuje się tak, jak sądzę, że powinna", + "found_another_service": "Znalazłem/am inną, lepszą usługę", + "not_listed": "Moja przyczyna nie jest wymieniona" + }, + "delete_account_feedback_label": "Przykro nam, że odchodzisz. Wyjaśnij nam, dlaczego nas opuszczasz, aby pomóc ulepszyć nasze usługi.", + "delete_account_feedback_placeholder": "Opinia", + "delete_account_confirm_checkbox_label": "Tak, chcę trwale usunąć konto i wszystkie dane z nim powiązane", + "delete_account_confirm": "Potwierdź Usunięcie Konta", + "delete_account_confirm_message": "

To konto jest połączone z innymi aplikacjami Ente, jeśli ich używasz.

Twoje przesłane dane, we wszystkich aplikacjach Ente, zostaną zaplanowane do usunięcia, a Twoje konto zostanie usunięte na zawsze.

", + "feedback_required": "Pomóż nam z tą informacją", + "feedback_required_found_another_service": "Co lepiej robi ta inna usługa?", + "RECOVER_TWO_FACTOR": "Odzyskaj dwustopniowe", + "at": "", + "AUTH_NEXT": "następny", + "AUTH_DOWNLOAD_MOBILE_APP": "Pobierz naszą aplikację mobilną, aby zarządzać swoimi sekretami", + "HIDDEN": "Ukryte", + "HIDE": "Ukryj", + "UNHIDE": "Odkryj", + "UNHIDE_TO_COLLECTION": "Odkryj do albumu", + "SORT_BY": "Sortuj według", + "NEWEST_FIRST": "Od najnowszych", + "OLDEST_FIRST": "Od najstarszych", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Ten plik nie mógł zostać podglądnięty. Kliknij tutaj, aby pobrać oryginał.", + "SELECT_COLLECTION": "Wybierz album", + "PIN_ALBUM": "Przypnij album", + "UNPIN_ALBUM": "Odepnij album", + "DOWNLOAD_COMPLETE": "Pobieranie zakończone", + "DOWNLOADING_COLLECTION": "Pobieranie {{name}}", + "DOWNLOAD_FAILED": "Pobieranie nie powiodło się", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} plików", + "CHRISTMAS": "Boże Narodzenie", + "CHRISTMAS_EVE": "Wigilia", + "NEW_YEAR": "Nowy Rok", + "NEW_YEAR_EVE": "Sylwester", + "IMAGE": "Zdjęcie", + "VIDEO": "Wideo", + "LIVE_PHOTO": "Zdjęcia Live", + "editor": { + "crop": "Przytnij" + }, + "CONVERT": "Konwertuj", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Czy na pewno chcesz zamknąć edytor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Pobierz edytowany obraz lub zapisz kopię do Ente, aby utrzymać zmiany.", + "BRIGHTNESS": "Jasność", + "CONTRAST": "Kontrast", + "SATURATION": "Nasycenie", + "BLUR": "Rozmycie", + "INVERT_COLORS": "Odwróć kolory", + "ASPECT_RATIO": "Współczynnik Proporcji", + "SQUARE": "Kwadratowe", + "ROTATE_LEFT": "Obróć w Lewo", + "ROTATE_RIGHT": "Obróć w Prawo", + "FLIP_VERTICALLY": "Odwróć Pionowo", + "FLIP_HORIZONTALLY": "Odwróć Poziomo", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "Zapisz kopię do Ente", + "RESTORE_ORIGINAL": "Przywróć oryginał", + "TRANSFORM": "Przekształć", + "COLORS": "Kolory", + "FLIP": "Obróć", + "ROTATION": "Rotacja", + "RESET": "Zresetuj", + "PHOTO_EDITOR": "Edytor Zdjęć", + "FASTER_UPLOAD": "Szybsze przesłania", + "FASTER_UPLOAD_DESCRIPTION": "Kieruj przesłania przez pobliskie serwery", + "MAGIC_SEARCH_STATUS": "Stan Wyszukiwania Magicznego", + "INDEXED_ITEMS": "Indeksowane elementy", + "CAST_ALBUM_TO_TV": "Odtwórz album na telewizorze", + "ENTER_CAST_PIN_CODE": "Wprowadź kod, który widzisz na telewizorze poniżej, aby sparować to urządzenie.", + "PAIR_DEVICE_TO_TV": "Sparuj urządzenia", + "TV_NOT_FOUND": "Nie znaleziono telewizora. Czy poprawnie wprowadziłeś/aś PIN?", + "AUTO_CAST_PAIR": "Automatyczne parowanie", + "AUTO_CAST_PAIR_DESC": "Automatyczne parowanie działa tylko z urządzeniami obsługującymi Chromecast.", + "PAIR_WITH_PIN": "Sparuj kodem PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "W wyskakującym okienku przeglądarki wybierz urządzenie kompatybilne z Cast.", + "PAIR_WITH_PIN_DESC": "Parowanie PIN-em działa z każdym ekranem, na którym chcesz wyświetlić swój album.", + "VISIT_CAST_ENTE_IO": "Odwiedź {{url}} na urządzeniu, które chcesz sparować.", + "CAST_AUTO_PAIR_FAILED": "Automatyczna synchronizacja Chromecast nie powiodła się. Spróbuj ponownie.", + "FREEHAND": "Odręcznie", + "APPLY_CROP": "Zastosuj Przycięcie", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "Przed zapisaniem należy wykonać co najmniej jedno przekształcenie lub dostosowanie koloru.", + "passkeys": "Klucze dostępu", + "passkey_fetch_failed": "Nie można uzyskać Twoich kluczy dostępu.", + "manage_passkey": "Zarządzaj kluczem dostępu", + "delete_passkey": "Usuń klucz dostępu", + "delete_passkey_confirmation": "Czy na pewno chcesz usunąć ten klucz dostępu? Ta akcja jest nieodwracalna.", + "rename_passkey": "Zmień nazwę kluczu dostępu", + "add_passkey": "Dodaj klucz dostępu", + "enter_passkey_name": "Wprowadź nazwę kluczu dostępu", + "passkeys_description": "Klucze dostępu są nowoczesnymi i bezpiecznymi drugimi czynnikami dla Twojego konta Ente. Używają one uwierzytelniania biometrycznego na urządzeniu dla wygody i bezpieczeństwa.", + "CREATED_AT": "", + "passkey_add_failed": "Nie można dodać klucza dostępu", + "passkey_login_failed": "Logowanie kluczem dostępu nie powiodło się", + "passkey_login_invalid_url": "Adres URL logowania jest nieprawidłowy.", + "passkey_login_already_claimed_session": "Ta sesja została już zweryfikowana.", + "passkey_login_generic_error": "Wystąpił błąd podczas logowania kluczem dostępu.", + "passkey_login_credential_hint": "Jeśli Twoje klucze dostępu są na innym urządzeniu, możesz otworzyć tę stronę na tym urządzeniu, aby zweryfikować.", + "passkeys_not_supported": "Klucze dostępu nie są obsługiwane w tej przeglądarce", + "try_again": "Spróbuj ponownie", + "check_status": "Sprawdź stan", + "passkey_login_instructions": "Wykonaj kroki z przeglądarki, aby kontynuować logowanie.", + "passkey_login": "Zaloguj się kluczem dostępu", + "passkey": "Klucz dostępu", + "passkey_verify_description": "Zweryfikuj swój klucz dostępu, aby zalogować się na swoje konto.", + "waiting_for_verification": "Oczekiwanie na weryfikację...", + "verification_still_pending": "Weryfikacja jest nadal w toku", + "passkey_verified": "Klucz dostępu zweryfikowany", + "redirecting_back_to_app": "Przekierowywanie Cię z powrotem do aplikacji...", + "redirect_close_instructions": "Możesz zamknąć to okno po otwarciu aplikacji.", + "redirect_again": "Przekieruj ponownie", + "autogenerated_first_album_name": "Mój Pierwszy Album", + "autogenerated_default_album_name": "Nowy Album", + "developer_settings": "Ustawienia dla programistów", + "server_endpoint": "Punkt końcowy serwera", + "more_information": "Więcej informacji", + "save": "Zapisz" +} diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index b069f7b7bd..85e1ed797b 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -81,8 +81,8 @@ "COPY_OPTION": "", "TOGGLE_FULLSCREEN": "", "ZOOM_IN_OUT": "Zooma in/ut", - "PREVIOUS": "", - "NEXT": "", + "PREVIOUS": "Föregående (←)", + "NEXT": "Nästa (→)", "title_photos": "", "title_auth": "", "title_accounts": "", @@ -167,7 +167,7 @@ "SUBSCRIPTION_UPDATE_FAILED": "", "UPDATE_PAYMENT_METHOD_MESSAGE": "", "STRIPE_AUTHENTICATION_FAILED": "", - "UPDATE_PAYMENT_METHOD": "", + "UPDATE_PAYMENT_METHOD": "Uppdatera betalningsmetod", "MONTHLY": "", "YEARLY": "", "update_subscription_title": "", @@ -308,13 +308,13 @@ "FAVORITES": "Favoriter", "ARCHIVE_COLLECTION": "", "ARCHIVE_SECTION_NAME": "", - "ALL_SECTION_NAME": "", + "ALL_SECTION_NAME": "Alla", "MOVE_TO_COLLECTION": "", "UNARCHIVE": "", "UNARCHIVE_COLLECTION": "", "HIDE_COLLECTION": "", "UNHIDE_COLLECTION": "", - "MOVE": "", + "MOVE": "Flytta", "ADD": "Lägg till", "REMOVE": "", "YES_REMOVE": "", @@ -389,7 +389,7 @@ "FILE_DOWNLOAD": "", "link_password_lock": "", "PUBLIC_COLLECT": "", - "LINK_DEVICE_LIMIT": "", + "LINK_DEVICE_LIMIT": "Enhetsgräns", "NO_DEVICE_LIMIT": "", "LINK_EXPIRY": "", "NEVER": "Aldrig", @@ -419,8 +419,8 @@ "STOP_ALL_DOWNLOADS_MESSAGE": "", "albums_one": "1 album", "albums_other": "{{count, number}} album", - "ALL_ALBUMS": "", - "ALBUMS": "", + "ALL_ALBUMS": "Alla album", + "ALBUMS": "Album", "ALL_HIDDEN_ALBUMS": "", "HIDDEN_ALBUMS": "", "HIDDEN_ITEMS": "", @@ -430,7 +430,7 @@ "WATCH_FOLDERS": "", "UPGRADE_NOW": "Uppgradera nu", "RENEW_NOW": "Förnya nu", - "STORAGE": "", + "STORAGE": "Lagring", "USED": "", "YOU": "Du", "FAMILY": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 50db32b672..a250406156 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -272,9 +272,9 @@ "TWO_FACTOR_DISABLE_FAILED": "禁用双重认证失败,请再试一次", "EXPORT_DATA": "导出数据", "select_folder": "选择文件夹", - "select_zips": "", - "faq": "", - "takeout_hint": "", + "select_zips": "选择压缩文件", + "faq": "常见问题", + "takeout_hint": "将所有压缩文件解压到同一个文件夹并上传。或者直接上传压缩文件。详情请参阅常见问题。", "DESTINATION": "目标位置", "START": "开始", "LAST_EXPORT_TIME": "最后一次导出时间", @@ -287,7 +287,7 @@ "LIVE_PHOTOS_DETECTED": "实况照片中的照片和视频文件已合并为一个文件", "RETRY_FAILED": "重试上传失败的文件", "FAILED_UPLOADS": "上传失败 ", - "failed_uploads_hint": "", + "failed_uploads_hint": "上传完成后将有一个重试选项", "SKIPPED_FILES": "已忽略的上传内容", "THUMBNAIL_GENERATION_FAILED_UPLOADS": "缩略图生成失败", "UNSUPPORTED_FILES": "不支持的文件", @@ -405,7 +405,7 @@ "DOWNLOAD_UPLOAD_LOGS": "调试日志", "file": "文件", "folder": "文件夹", - "google_takeout": "", + "google_takeout": "Google takeout", "DEDUPLICATE_FILES": "删除重复文件", "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", "FILES": "文件", From 8c8cff5f8051d4f3c71caadc8d4c5b162fae3671 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 09:51:46 +0530 Subject: [PATCH 460/466] [web] Prune unused translations Reduce work for translators in new languages --- web/packages/next/locales/en-US/translation.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index db6cf98c27..7f9f907cef 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", "CHOSE_THEME": "Choose theme", - "ML_SEARCH": "Face recognition", - "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", "ML_MORE_DETAILS": "More details", "ENABLE_FACE_SEARCH": "Enable face recognition", "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", - "DISABLE_BETA": "Pause recognition", - "DISABLE_FACE_SEARCH": "Disable face recognition", - "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", "ADVANCED": "Advanced", "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow Ente to process face geometry", "LABS": "Labs", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Photo Editor", "FASTER_UPLOAD": "Faster uploads", "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", - "MAGIC_SEARCH_STATUS": "Magic Search Status", - "INDEXED_ITEMS": "Indexed items", "CAST_ALBUM_TO_TV": "Play album on TV", "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", "PAIR_DEVICE_TO_TV": "Pair devices", From 34db62cefa1130b30530375fa4654a76c5ed31d7 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 15 Jul 2024 04:23:15 +0000 Subject: [PATCH 461/466] New Crowdin translations by GitHub Action --- web/packages/next/locales/ar-SA/translation.json | 8 -------- web/packages/next/locales/bg-BG/translation.json | 8 -------- web/packages/next/locales/ca-ES/translation.json | 8 -------- web/packages/next/locales/de-DE/translation.json | 8 -------- web/packages/next/locales/es-ES/translation.json | 8 -------- web/packages/next/locales/fa-IR/translation.json | 8 -------- web/packages/next/locales/fi-FI/translation.json | 8 -------- web/packages/next/locales/fr-FR/translation.json | 8 -------- web/packages/next/locales/gu-IN/translation.json | 8 -------- web/packages/next/locales/hi-IN/translation.json | 8 -------- web/packages/next/locales/id-ID/translation.json | 8 -------- web/packages/next/locales/is-IS/translation.json | 8 -------- web/packages/next/locales/it-IT/translation.json | 8 -------- web/packages/next/locales/ja-JP/translation.json | 8 -------- web/packages/next/locales/ko-KR/translation.json | 8 -------- web/packages/next/locales/nl-NL/translation.json | 8 -------- web/packages/next/locales/pl-PL/translation.json | 8 -------- web/packages/next/locales/pt-BR/translation.json | 8 -------- web/packages/next/locales/pt-PT/translation.json | 8 -------- web/packages/next/locales/ru-RU/translation.json | 8 -------- web/packages/next/locales/sv-SE/translation.json | 8 -------- web/packages/next/locales/te-IN/translation.json | 8 -------- web/packages/next/locales/th-TH/translation.json | 8 -------- web/packages/next/locales/ti-ER/translation.json | 8 -------- web/packages/next/locales/tr-TR/translation.json | 8 -------- web/packages/next/locales/zh-CN/translation.json | 8 -------- 26 files changed, 208 deletions(-) diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index 3cda9c957f..ec2e8fa377 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 6a5521173f..bac1a657d1 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Alben können nicht aus Datei/Ordnermix erstellt werden", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Du hast sowohl Dateien als auch Ordner in das Ente-Fenster gezogen.

Bitte wähle entweder nur Dateien oder nur Ordner aus, wenn separate Alben erstellt werden sollen

", "CHOSE_THEME": "Design auswählen", - "ML_SEARCH": "Gesichtserkennung", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Hiermit wird on-device machine learning aktiviert, und die Gesichtserkennung beginnt damit, die Fotos auf deinem Gerät zu analysieren.

Beim ersten Durchlauf nach der Anmeldung oder Aktivierung der Funktion werden alle Bilder auf dein Gerät heruntergeladen, um analysiert zu werden. Bitte aktiviere diese Funktion nur, wenn du einverstanden bist, dass dein Gerät die dafür benötigte Bandbreite und Rechenleistung aufbringt.

Falls dies das erste Mal ist, dass du diese Funktion aktivierst, werden wir deine Erlaubnis zur Verarbeitung von Gesichtsdaten einholen.

", "ML_MORE_DETAILS": "Weitere Details", "ENABLE_FACE_SEARCH": "Gesichtserkennung aktivieren", "ENABLE_FACE_SEARCH_TITLE": "Gesichtserkennung aktivieren?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Wenn du die Gesichtserkennung aktivierst, wird Ente Gesichtsgeometrie aus deinen Fotos extrahieren. Dies wird auf deinem Gerät geschehen, und alle erzeugten biometrischen Daten werden Ende-zu-verschlüsselt.

Bitte klicke hier für weitere Informationen über diese Funktion in unserer Datenschutzerklärung

", - "DISABLE_BETA": "Beta deaktivieren", - "DISABLE_FACE_SEARCH": "Gesichtserkennung deaktivieren", - "DISABLE_FACE_SEARCH_TITLE": "Gesichtserkennung deaktivieren?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente wird aufhören, Gesichtsdaten zu verarbeiten.

Du kannst die Gesichtserkennung jederzeit wieder aktivieren, wenn du möchtest, daher ist dieser Vorgang risikofrei.

", "ADVANCED": "Erweitert", "FACE_SEARCH_CONFIRMATION": "Ich verstehe und möchte Ente erlauben, Gesichtsgeometrie zu verarbeiten", "LABS": "Experimente", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Foto-Editor", "FASTER_UPLOAD": "Schnelleres Hochladen", "FASTER_UPLOAD_DESCRIPTION": "Uploads über nahegelegene Server leiten", - "MAGIC_SEARCH_STATUS": "Status der magischen Suche", - "INDEXED_ITEMS": "Indizierte Elemente", "CAST_ALBUM_TO_TV": "Album auf Fernseher wiedergeben", "ENTER_CAST_PIN_CODE": "Gib den Code auf dem Fernseher unten ein, um dieses Gerät zu koppeln.", "PAIR_DEVICE_TO_TV": "Geräte koppeln", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index cb2735c3c3..06a8b36dfa 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "No se puede crear álbumes de mezcla de archivos/carpetas", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Has arrastrado y soltado una mezcla de archivos y carpetas.

Por favor proporcione sólo archivos o carpetas cuando seleccione la opción de crear álbumes separados

", "CHOSE_THEME": "Elegir tema", - "ML_SEARCH": "Buscar ML (beta)", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Esto permitirá el aprendizaje automático en el dispositivo y la búsqueda facial que comenzará a analizar las fotos subidas localmente.

Para la primera ejecución después de iniciar sesión o habilitar esta función, se descargarán todas las imágenes en el dispositivo local para analizarlas. Así que por favor actívalo sólo si dispones ancho de banda y el almacenamiento suficiente para el procesamiento local de todas las imágenes en tu biblioteca de fotos.

Si esta es la primera vez que está habilitando, también le pediremos su permiso para procesar los datos faciales.

", "ML_MORE_DETAILS": "Más detalles", "ENABLE_FACE_SEARCH": "Activar búsqueda facial", "ENABLE_FACE_SEARCH_TITLE": "Activar búsqueda facial?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", - "DISABLE_BETA": "Desactivar beta", - "DISABLE_FACE_SEARCH": "Desactivar búsqueda facial", - "DISABLE_FACE_SEARCH_TITLE": "Desactivar búsqueda facial?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente dejará de procesar la geometría facial, y también desactivará la búsqueda ML (beta)

Puede volver a activar la búsqueda facial si lo desea, ya que esta operación es segura.

", "ADVANCED": "Avanzado", "FACE_SEARCH_CONFIRMATION": "Comprendo y deseo permitir que ente procese la geometría de la cara", "LABS": "Labs", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 76a686f392..1da1aa7d96 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index f9d8456c74..0b5e9d1535 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Impossible de créer des albums depuis un mix fichier/dossier", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Vous avez glissé déposé un mélange de fichiers et dossiers.

Veuillez sélectionner soit uniquement des fichiers, ou des dossiers lors du choix d'options pour créer des albums séparés

", "CHOSE_THEME": "Choisir un thème", - "ML_SEARCH": "ML search (beta)", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Ceci activera l'apprentissage automatique sur l'appareil et la recherche faciale qui commencera à analyser vos photos chargées.

Pour la première exécution après la connexion ou l'activation de cette fonctionnalité, cela téléchargera toutes les images sur l'appareil local pour les analyser. Veuillez donc activer ceci uniquement si vous avez de la bande passante et le traitement local de toutes les images dans votre photothèque.

Si c'est la première fois que vous activez ceci, nous vous demanderons également la permission de traiter les données faciales.

", "ML_MORE_DETAILS": "Plus de détails", "ENABLE_FACE_SEARCH": "Activer la recherche faciale", "ENABLE_FACE_SEARCH_TITLE": "Activer la recherche faciale ?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face search, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", - "DISABLE_BETA": "Désactiver la bêta", - "DISABLE_FACE_SEARCH": "Désactiver la recherche faciale", - "DISABLE_FACE_SEARCH_TITLE": "Désactiver la recherche faciale ?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry, and will also disable ML search (beta)

You can reenable face search again if you wish, so this operation is safe

", "ADVANCED": "Avancé", "FACE_SEARCH_CONFIRMATION": "Je comprends, et je souhaite permettre à Ente de traiter la géométrie faciale", "LABS": "Labs", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Éditeur de photos", "FASTER_UPLOAD": "Chargements plus rapides", "FASTER_UPLOAD_DESCRIPTION": "Router les chargements vers les serveurs à proximité", - "MAGIC_SEARCH_STATUS": "Statut de la recherche magique", - "INDEXED_ITEMS": "Éléments indexés", "CAST_ALBUM_TO_TV": "Jouer l'album sur la TV", "ENTER_CAST_PIN_CODE": "Entrez le code que vous voyez sur la TV ci-dessous pour appairer cet appareil.", "PAIR_DEVICE_TO_TV": "Associer les appareils", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 903df88970..7ed3c4479c 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "Pilih tema", - "ML_SEARCH": "Pengenalan wajah", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "Aktifkan pengenalan wajah", "ENABLE_FACE_SEARCH_TITLE": "Aktifkan pengenalan wajah?", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "Lanjutan", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Editor Foto", "FASTER_UPLOAD": "Pengunggahan lebih cepat", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "Status Penelusuran Ajaib", - "INDEXED_ITEMS": "Item terindeks", "CAST_ALBUM_TO_TV": "Putar album di TV", "ENTER_CAST_PIN_CODE": "Masukkan kode yang ditampilkan TV di bawah untuk menautkan perangkat ini.", "PAIR_DEVICE_TO_TV": "Tautkan perangkat", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index acea36e699..13c39749ba 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index b9f2b8a3e6..846b5101dd 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "Seleziona tema", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "Più dettagli", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "Avanzate", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/ja-JP/translation.json b/web/packages/next/locales/ja-JP/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/ja-JP/translation.json +++ b/web/packages/next/locales/ja-JP/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 63cce63e1a..abdc167ef8 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index f77791f2b2..9fb32c890d 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Kan geen albums maken uit bestand/map mix", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Je hebt een mix van bestanden en mappen gesleept en laten vallen.

Geef ofwel alleen bestanden aan, of alleen mappen bij het selecteren van de optie om afzonderlijke albums te maken

", "CHOSE_THEME": "Kies thema", - "ML_SEARCH": "ML zoeken (bèta)", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Dit zal algoritmes op het apparaat inschakelen die zullen beginnen met het lokaal analyseren van uw geüploade foto's.

Voor het eerst na inloggen of het inschakelen van deze functie zal het alle afbeeldingen op het lokale apparaat downloaden om ze te analyseren. Schakel dit dus alleen in als je akkoord bent met gegevensverbruik en lokale verwerking van alle afbeeldingen in uw fotobibliotheek.

Als dit de eerste keer is dat uw dit inschakelt, vragen we u ook om toestemming om gegevens te verwerken.

", "ML_MORE_DETAILS": "Meer details", "ENABLE_FACE_SEARCH": "Zoeken op gezichten inschakelen", "ENABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten inschakelen?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert Ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", - "DISABLE_BETA": "Bèta uitschakelen", - "DISABLE_FACE_SEARCH": "Zoeken op gezichten uitschakelen", - "DISABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten uitschakelen?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente zal stoppen met het analyseren van de gezichtsgeometrie, en zal ML zoeken (beta) uitschakelen

U kan zoeken op gezichten opnieuw inschakelen wanneer u wilt, dus deze handeling is veilig.

", "ADVANCED": "Geavanceerd", "FACE_SEARCH_CONFIRMATION": "Ik begrijp het, en wil Ente toestaan om gezichten te analyseren", "LABS": "Lab's", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Fotobewerker", "FASTER_UPLOAD": "Snellere uploads", "FASTER_UPLOAD_DESCRIPTION": "Uploaden door nabije servers", - "MAGIC_SEARCH_STATUS": "Magische Zoekfunctie Status", - "INDEXED_ITEMS": "Geïndexeerde bestanden", "CAST_ALBUM_TO_TV": "Album afspelen op TV", "ENTER_CAST_PIN_CODE": "Voer de code in die u op de TV ziet om dit apparaat te koppelen.", "PAIR_DEVICE_TO_TV": "Koppel apparaten", diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json index 7c590ef6ab..1a4eba6e41 100644 --- a/web/packages/next/locales/pl-PL/translation.json +++ b/web/packages/next/locales/pl-PL/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Nie można utworzyć albumów z mieszanki plików/folderów", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Przeciągnąłeś i upuściłeś mieszankę plików i folderów.

Prosimy podać tylko pliki lub tylko foldery podczas wybierania opcji tworzenia oddzielnych albumów

", "CHOSE_THEME": "Wybierz motyw", - "ML_SEARCH": "Rozpoznawanie twarzy", - "ENABLE_ML_SEARCH_DESCRIPTION": "

To włączy nauczanie maszynowe na urządzeniu i wyszukiwanie twarz, które zacznie lokalną analizę przesłanych zdjęć.

Przy pierwszym uruchomieniu po zalogowaniu się lub włączeniu tej funkcji wszystkie zdjęcia zostaną pobrane na lokalnym urządzeniu do analizy. Włącz tę opcję tylko wtedy, gdy nie przeszkadza Ci przepustowość i lokalne przetwarzanie wszystkich Twoich zdjęć w Twojej bibliotece zdjęć.

Jeśli włączasz tę opcję po raz pierwszy, poprosimy Cię również o pozwolenie na przetwarzanie danych twarzy.

", "ML_MORE_DETAILS": "Więcej szczegółów", "ENABLE_FACE_SEARCH": "Włącz rozpoznawanie twarzy", "ENABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Jeśli włączysz rozpoznawanie twarzy, Ente wyodrębni geometrię twarzy ze zdjęć. Będzie to miało miejsce na Twoim urządzeniu, a wszystkie wygenerowane dane biometryczne będą zaszyfrowane metodą end-to-end.

Kliknij tutaj, aby uzyskać więcej informacji na temat tej funkcji w naszej polityce prywatności

", - "DISABLE_BETA": "Wstrzymaj rozpoznawanie", - "DISABLE_FACE_SEARCH": "Wyłącz rozpoznawanie twarzy", - "DISABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente zatrzyma przetwarzanie geometrii twarzy.

Możesz ponownie włączyć rozpoznawanie twarzy, jeśli chcesz, więc ta operacja jest bezpieczna.

", "ADVANCED": "Zaawansowane", "FACE_SEARCH_CONFIRMATION": "Rozumiem i chcę pozwolić Ente na przetwarzanie geometrii twarzy", "LABS": "Laboratoria", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Edytor Zdjęć", "FASTER_UPLOAD": "Szybsze przesłania", "FASTER_UPLOAD_DESCRIPTION": "Kieruj przesłania przez pobliskie serwery", - "MAGIC_SEARCH_STATUS": "Stan Wyszukiwania Magicznego", - "INDEXED_ITEMS": "Indeksowane elementy", "CAST_ALBUM_TO_TV": "Odtwórz album na telewizorze", "ENTER_CAST_PIN_CODE": "Wprowadź kod, który widzisz na telewizorze poniżej, aby sparować to urządzenie.", "PAIR_DEVICE_TO_TV": "Sparuj urządzenia", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index 14a8aeb6fb..10e3577a1b 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Não foi possível criar álbuns a partir da mistura de arquivos/pastas", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Você arrastou e deixou uma mistura de arquivos e pastas.

Por favor, forneça apenas arquivos ou apenas pastas ao selecionar a opção para criar álbuns separados

", "CHOSE_THEME": "Escolher tema", - "ML_SEARCH": "Reconhecimento facial", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Isso permitirá aprendizado de máquina no dispositivo e busca facial, iniciando a análise de suas fotos enviadas localmente.

Na primeira execução após o login ou habilitação desta funcionalidade, será feito o download de todas as imagens no dispositivo local para análise. Portanto, ative isso apenas se estiver confortável com o consumo de largura de banda e processamento local de todas as imagens em sua biblioteca de fotos.

Se esta for a primeira vez que você está habilitando isso, também solicitaremos sua permissão para processar dados faciais.

", "ML_MORE_DETAILS": "Mais detalhes", "ENABLE_FACE_SEARCH": "Habilitar reconhecimento facial", "ENABLE_FACE_SEARCH_TITLE": "Habilitar reconhecimento facial?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", - "DISABLE_BETA": "Pausar reconhecimento", - "DISABLE_FACE_SEARCH": "Desativar reconhecimento facial", - "DISABLE_FACE_SEARCH_TITLE": "Desativar reconhecimento facial?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente irá parar de processar geometria facial.

Você pode reativar o reconhecimento facial novamente, se desejar, então esta operação está segura.

", "ADVANCED": "Avançado", "FACE_SEARCH_CONFIRMATION": "Eu entendo, e desejo permitir que o ente processe a geometria do rosto", "LABS": "Laboratórios", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Editor de Fotos", "FASTER_UPLOAD": "Envios mais rápidos", "FASTER_UPLOAD_DESCRIPTION": "Rotas enviam em servidores próximos", - "MAGIC_SEARCH_STATUS": "Estado da busca mágica", - "INDEXED_ITEMS": "Itens indexados", "CAST_ALBUM_TO_TV": "Reproduzir álbum na TV", "ENTER_CAST_PIN_CODE": "Digite o código que você vê na TV abaixo para parear este dispositivo.", "PAIR_DEVICE_TO_TV": "Parear dispositivos", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index 2713fc8f2e..c936f13639 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 1b7db1d03d..c234c27282 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Не удается создать альбомы из сочетания файлов и папок", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Вы перетащили несколько файлов и папок.

Пожалуйста, указывайте либо только файлы, либо только папки при выборе опции создания отдельных альбомов

", "CHOSE_THEME": "Выберите тему", - "ML_SEARCH": "Распознавание лиц", - "ENABLE_ML_SEARCH_DESCRIPTION": "

Это включит машинное обучение на устройстве и поиск по лицу, которые начнут анализировать ваши загруженные фотографии локально.

При первом запуске после входа в систему или включения этой функции программа загрузит все изображения на локальное устройство для их анализа. Поэтому, пожалуйста, включите это, только если у вас все в порядке с пропускной способностью и локальной обработкой всех изображений в вашей фотобиблиотеке.

Если вы включаете это в первый раз, мы также попросим вашего разрешения на обработку данных о лице.

", "ML_MORE_DETAILS": "Более подробная информация", "ENABLE_FACE_SEARCH": "Включить распознавание лиц", "ENABLE_FACE_SEARCH_TITLE": "Включить распознавание лиц?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Если вы включите функцию распознавания лиц, Ente извлечет геометрию лица из ваших фотографий. Это произойдет на вашем устройстве, и все сгенерированные биометрические данные будут зашифрованы полностью.

Пожалуйста, нажмите здесь для получения более подробной информации об этой функции в нашей политике конфиденциальности

", - "DISABLE_BETA": "Приостановить распознавание", - "DISABLE_FACE_SEARCH": "Отключить распознавание лиц", - "DISABLE_FACE_SEARCH_TITLE": "Отключить распознавание лиц?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Программа Ente прекратит обработку геометрии лица.

При желании вы можете снова включить функцию распознавания лиц, так что эта операция безопасна.

", "ADVANCED": "Передовой", "FACE_SEARCH_CONFIRMATION": "Я понимаю и хочу позволить Ente обрабатывать геометрию грани", "LABS": "Лаборатории", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "Редактор фото", "FASTER_UPLOAD": "Более быстрая загрузка данных", "FASTER_UPLOAD_DESCRIPTION": "Загрузка маршрута через близлежащие серверы", - "MAGIC_SEARCH_STATUS": "Статус волшебного поиска", - "INDEXED_ITEMS": "Индексированные элементы", "CAST_ALBUM_TO_TV": "Воспроизвести альбом на ТВ", "ENTER_CAST_PIN_CODE": "Введите код, который вы видите на экране телевизора ниже, чтобы выполнить сопряжение с этим устройством.", "PAIR_DEVICE_TO_TV": "Сопряжение устройств", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 85e1ed797b..cd674080da 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index c3addf65f2..8aa88c25a6 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_SEARCH": "", - "ENABLE_ML_SEARCH_DESCRIPTION": "", "ML_MORE_DETAILS": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", - "DISABLE_BETA": "", - "DISABLE_FACE_SEARCH": "", - "DISABLE_FACE_SEARCH_TITLE": "", - "DISABLE_FACE_SEARCH_DESCRIPTION": "", "ADVANCED": "", "FACE_SEARCH_CONFIRMATION": "", "LABS": "", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "", "FASTER_UPLOAD": "", "FASTER_UPLOAD_DESCRIPTION": "", - "MAGIC_SEARCH_STATUS": "", - "INDEXED_ITEMS": "", "CAST_ALBUM_TO_TV": "", "ENTER_CAST_PIN_CODE": "", "PAIR_DEVICE_TO_TV": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index a250406156..f220e8844f 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -476,16 +476,10 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "无法从文件/文件夹组合中创建相册", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

你已拖放了文件和文件夹的组合。

选择创建单独相册的选项时,请只提供文件或只提供文件夹

", "CHOSE_THEME": "选择主题", - "ML_SEARCH": "人脸识别", - "ENABLE_ML_SEARCH_DESCRIPTION": "

这将启用设备上的机器学习和面部搜索,这将开始分析您上传的本地照片。

在登录或启用此功能后第一次运行时,它将下载本地设备上的所有图像来分析。 所以请只在您可以使用带宽和本地处理您的照片库中的所有图像时启用此功能。

如果这是您首次启用此功能,我们也会请求您处理面部数据的许可。

", "ML_MORE_DETAILS": "更多详情", "ENABLE_FACE_SEARCH": "启用面部搜索", "ENABLE_FACE_SEARCH_TITLE": "要启用面部搜索吗?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,Ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", - "DISABLE_BETA": "暂停识别", - "DISABLE_FACE_SEARCH": "禁用面部搜索", - "DISABLE_FACE_SEARCH_TITLE": "要禁用面部搜索吗?", - "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente 将停止处理面部的几何形状, 并将禁用 ML 搜索 (测试版)

如果您愿意,您可以重新启用面部搜索,因此该操作是安全的。

", "ADVANCED": "高级设置", "FACE_SEARCH_CONFIRMATION": "我理解,并希望允许Ente处理面部几何形状", "LABS": "实验室", @@ -599,8 +593,6 @@ "PHOTO_EDITOR": "照片编辑器", "FASTER_UPLOAD": "更快上传", "FASTER_UPLOAD_DESCRIPTION": "通过附近的服务器路由上传", - "MAGIC_SEARCH_STATUS": "魔法搜索状态", - "INDEXED_ITEMS": "已索引项目", "CAST_ALBUM_TO_TV": "在电视上播放相册", "ENTER_CAST_PIN_CODE": "输入您在下面的电视上看到的代码来配对此设备。", "PAIR_DEVICE_TO_TV": "配对设备", From e254cfd7529818e17976dc2f6944c8b18f6a4a81 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 09:55:44 +0530 Subject: [PATCH 462/466] Rename --- web/packages/new/photos/components/MLSettings.tsx | 2 +- web/packages/next/locales/ar-SA/translation.json | 2 +- web/packages/next/locales/bg-BG/translation.json | 2 +- web/packages/next/locales/ca-ES/translation.json | 2 +- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/en-US/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/fa-IR/translation.json | 2 +- web/packages/next/locales/fi-FI/translation.json | 2 +- web/packages/next/locales/fr-FR/translation.json | 2 +- web/packages/next/locales/gu-IN/translation.json | 2 +- web/packages/next/locales/hi-IN/translation.json | 2 +- web/packages/next/locales/id-ID/translation.json | 2 +- web/packages/next/locales/is-IS/translation.json | 2 +- web/packages/next/locales/it-IT/translation.json | 2 +- web/packages/next/locales/ja-JP/translation.json | 2 +- web/packages/next/locales/ko-KR/translation.json | 2 +- web/packages/next/locales/nl-NL/translation.json | 2 +- web/packages/next/locales/pl-PL/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/pt-PT/translation.json | 2 +- web/packages/next/locales/ru-RU/translation.json | 2 +- web/packages/next/locales/sv-SE/translation.json | 2 +- web/packages/next/locales/te-IN/translation.json | 2 +- web/packages/next/locales/th-TH/translation.json | 2 +- web/packages/next/locales/ti-ER/translation.json | 2 +- web/packages/next/locales/tr-TR/translation.json | 2 +- web/packages/next/locales/zh-CN/translation.json | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/web/packages/new/photos/components/MLSettings.tsx b/web/packages/new/photos/components/MLSettings.tsx index 3adb4b6a0b..84143102c2 100644 --- a/web/packages/new/photos/components/MLSettings.tsx +++ b/web/packages/new/photos/components/MLSettings.tsx @@ -189,7 +189,7 @@ const EnableML: React.FC = ({ onEnable }) => { diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index ec2e8fa377..afeecab843 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index bac1a657d1..94e8b5c096 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Alben können nicht aus Datei/Ordnermix erstellt werden", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Du hast sowohl Dateien als auch Ordner in das Ente-Fenster gezogen.

Bitte wähle entweder nur Dateien oder nur Ordner aus, wenn separate Alben erstellt werden sollen

", "CHOSE_THEME": "Design auswählen", - "ML_MORE_DETAILS": "Weitere Details", + "more_details": "Weitere Details", "ENABLE_FACE_SEARCH": "Gesichtserkennung aktivieren", "ENABLE_FACE_SEARCH_TITLE": "Gesichtserkennung aktivieren?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Wenn du die Gesichtserkennung aktivierst, wird Ente Gesichtsgeometrie aus deinen Fotos extrahieren. Dies wird auf deinem Gerät geschehen, und alle erzeugten biometrischen Daten werden Ende-zu-verschlüsselt.

Bitte klicke hier für weitere Informationen über diese Funktion in unserer Datenschutzerklärung

", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 7f9f907cef..fcf4f4a6c4 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", "CHOSE_THEME": "Choose theme", - "ML_MORE_DETAILS": "More details", + "more_details": "More details", "ENABLE_FACE_SEARCH": "Enable face recognition", "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index 06a8b36dfa..d9f791423e 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "No se puede crear álbumes de mezcla de archivos/carpetas", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Has arrastrado y soltado una mezcla de archivos y carpetas.

Por favor proporcione sólo archivos o carpetas cuando seleccione la opción de crear álbumes separados

", "CHOSE_THEME": "Elegir tema", - "ML_MORE_DETAILS": "Más detalles", + "more_details": "Más detalles", "ENABLE_FACE_SEARCH": "Activar búsqueda facial", "ENABLE_FACE_SEARCH_TITLE": "Activar búsqueda facial?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 1da1aa7d96..888024d2d3 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 0b5e9d1535..96a7ddcb07 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Impossible de créer des albums depuis un mix fichier/dossier", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Vous avez glissé déposé un mélange de fichiers et dossiers.

Veuillez sélectionner soit uniquement des fichiers, ou des dossiers lors du choix d'options pour créer des albums séparés

", "CHOSE_THEME": "Choisir un thème", - "ML_MORE_DETAILS": "Plus de détails", + "more_details": "Plus de détails", "ENABLE_FACE_SEARCH": "Activer la recherche faciale", "ENABLE_FACE_SEARCH_TITLE": "Activer la recherche faciale ?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face search, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 7ed3c4479c..46c55c9aa6 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "Pilih tema", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "Aktifkan pengenalan wajah", "ENABLE_FACE_SEARCH_TITLE": "Aktifkan pengenalan wajah?", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 13c39749ba..8e70f2709f 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index 846b5101dd..da422e97b4 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "Seleziona tema", - "ML_MORE_DETAILS": "Più dettagli", + "more_details": "Più dettagli", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/ja-JP/translation.json b/web/packages/next/locales/ja-JP/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/ja-JP/translation.json +++ b/web/packages/next/locales/ja-JP/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index abdc167ef8..65961416e8 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 9fb32c890d..5405916ab6 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Kan geen albums maken uit bestand/map mix", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Je hebt een mix van bestanden en mappen gesleept en laten vallen.

Geef ofwel alleen bestanden aan, of alleen mappen bij het selecteren van de optie om afzonderlijke albums te maken

", "CHOSE_THEME": "Kies thema", - "ML_MORE_DETAILS": "Meer details", + "more_details": "Meer details", "ENABLE_FACE_SEARCH": "Zoeken op gezichten inschakelen", "ENABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten inschakelen?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert Ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json index 1a4eba6e41..956c70aa75 100644 --- a/web/packages/next/locales/pl-PL/translation.json +++ b/web/packages/next/locales/pl-PL/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Nie można utworzyć albumów z mieszanki plików/folderów", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Przeciągnąłeś i upuściłeś mieszankę plików i folderów.

Prosimy podać tylko pliki lub tylko foldery podczas wybierania opcji tworzenia oddzielnych albumów

", "CHOSE_THEME": "Wybierz motyw", - "ML_MORE_DETAILS": "Więcej szczegółów", + "more_details": "Więcej szczegółów", "ENABLE_FACE_SEARCH": "Włącz rozpoznawanie twarzy", "ENABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Jeśli włączysz rozpoznawanie twarzy, Ente wyodrębni geometrię twarzy ze zdjęć. Będzie to miało miejsce na Twoim urządzeniu, a wszystkie wygenerowane dane biometryczne będą zaszyfrowane metodą end-to-end.

Kliknij tutaj, aby uzyskać więcej informacji na temat tej funkcji w naszej polityce prywatności

", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index 10e3577a1b..ab389c2bd0 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Não foi possível criar álbuns a partir da mistura de arquivos/pastas", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Você arrastou e deixou uma mistura de arquivos e pastas.

Por favor, forneça apenas arquivos ou apenas pastas ao selecionar a opção para criar álbuns separados

", "CHOSE_THEME": "Escolher tema", - "ML_MORE_DETAILS": "Mais detalhes", + "more_details": "Mais detalhes", "ENABLE_FACE_SEARCH": "Habilitar reconhecimento facial", "ENABLE_FACE_SEARCH_TITLE": "Habilitar reconhecimento facial?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index c936f13639..b13933e899 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index c234c27282..d4ecf2dbc8 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Не удается создать альбомы из сочетания файлов и папок", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Вы перетащили несколько файлов и папок.

Пожалуйста, указывайте либо только файлы, либо только папки при выборе опции создания отдельных альбомов

", "CHOSE_THEME": "Выберите тему", - "ML_MORE_DETAILS": "Более подробная информация", + "more_details": "Более подробная информация", "ENABLE_FACE_SEARCH": "Включить распознавание лиц", "ENABLE_FACE_SEARCH_TITLE": "Включить распознавание лиц?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

Если вы включите функцию распознавания лиц, Ente извлечет геометрию лица из ваших фотографий. Это произойдет на вашем устройстве, и все сгенерированные биометрические данные будут зашифрованы полностью.

Пожалуйста, нажмите здесь для получения более подробной информации об этой функции в нашей политике конфиденциальности

", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index cd674080da..838cf2641b 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index 8aa88c25a6..3059f74744 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", "CHOSE_THEME": "", - "ML_MORE_DETAILS": "", + "more_details": "", "ENABLE_FACE_SEARCH": "", "ENABLE_FACE_SEARCH_TITLE": "", "ENABLE_FACE_SEARCH_DESCRIPTION": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index f220e8844f..89e8fef5e9 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -476,7 +476,7 @@ "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "无法从文件/文件夹组合中创建相册", "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

你已拖放了文件和文件夹的组合。

选择创建单独相册的选项时,请只提供文件或只提供文件夹

", "CHOSE_THEME": "选择主题", - "ML_MORE_DETAILS": "更多详情", + "more_details": "更多详情", "ENABLE_FACE_SEARCH": "启用面部搜索", "ENABLE_FACE_SEARCH_TITLE": "要启用面部搜索吗?", "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,Ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", From 428288338f035d012eb4f3cea66a9bdaa56ed735 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 09:59:30 +0530 Subject: [PATCH 463/466] Fix casing --- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/en-US/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/fr-FR/translation.json | 2 +- web/packages/next/locales/it-IT/translation.json | 2 +- web/packages/next/locales/nl-NL/translation.json | 2 +- web/packages/next/locales/pl-PL/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/ru-RU/translation.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 94e8b5c096..84d3fa441f 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "Indiziere Fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", "INDEXING_PEOPLE": "Indiziere Personen in {{indexStatus.nSyncedFiles,number}} Fotos...", "INDEXING_DONE": "{{indexStatus.nSyncedFiles,number}} Fotos wurden indiziert", - "UNIDENTIFIED_FACES": "unidentifizierte Gesichter", + "UNIDENTIFIED_FACES": "Unidentifizierte Gesichter", "OBJECTS": "Objekte", "TEXT": "Text", "INFO": "Info ", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index fcf4f4a6c4..5d648fc9b5 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", - "UNIDENTIFIED_FACES": "unidentified faces", + "UNIDENTIFIED_FACES": "Unidentified faces", "OBJECTS": "objects", "TEXT": "text", "INFO": "Info ", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index d9f791423e..afffec34fa 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", "INDEXING_PEOPLE": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", "INDEXING_DONE": "fotos {{indexStatus.nSyncedFiles}} indexadas", - "UNIDENTIFIED_FACES": "caras no identificadas", + "UNIDENTIFIED_FACES": "Caras no identificadas", "OBJECTS": "objetos", "TEXT": "texto", "INFO": "Info ", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 96a7ddcb07..4dd428c9dc 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", "INDEXING_PEOPLE": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} photos indexées", - "UNIDENTIFIED_FACES": "visages non-identifiés", + "UNIDENTIFIED_FACES": "Visages non-identifiés", "OBJECTS": "objets", "TEXT": "texte", "INFO": "Info ", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index da422e97b4..bb55ef94b2 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "", "INDEXING_PEOPLE": "", "INDEXING_DONE": "", - "UNIDENTIFIED_FACES": "volti non identificati", + "UNIDENTIFIED_FACES": "Volti non identificati", "OBJECTS": "", "TEXT": "testo", "INFO": "Info ", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 5405916ab6..9b317e1760 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", "INDEXING_PEOPLE": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", - "UNIDENTIFIED_FACES": "ongeïdentificeerde gezichten", + "UNIDENTIFIED_FACES": "Ongeïdentificeerde gezichten", "OBJECTS": "objecten", "TEXT": "tekst", "INFO": "Info ", diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json index 956c70aa75..49cdc9abd6 100644 --- a/web/packages/next/locales/pl-PL/translation.json +++ b/web/packages/next/locales/pl-PL/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "Indeksowanie zdjęć ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", "INDEXING_PEOPLE": "Indeksowanie ludzi w {{indexStatus.nSyncedFiles,number}} zdjęć...", "INDEXING_DONE": "Zindeksowano {{indexStatus.nSyncedFiles,number}} zdjęć", - "UNIDENTIFIED_FACES": "niezidentyfikowane twarze", + "UNIDENTIFIED_FACES": "Niezidentyfikowane twarze", "OBJECTS": "obiekty", "TEXT": "tekst", "INFO": "Informacje ", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index ab389c2bd0..bbb28290ee 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "Indexando fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", "INDEXING_PEOPLE": "Indexando pessoas em {{indexStatus.nSyncedFiles,number}} fotos...", "INDEXING_DONE": "Foram indexadas {{indexStatus.nSyncedFiles,number}} fotos", - "UNIDENTIFIED_FACES": "rostos não identificados", + "UNIDENTIFIED_FACES": "Rostos não identificados", "OBJECTS": "objetos", "TEXT": "texto", "INFO": "Informações ", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index d4ecf2dbc8..d1f674fdfb 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -227,7 +227,7 @@ "ANALYZING_PHOTOS": "Индексирование фотографий ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", "INDEXING_PEOPLE": "Индексирование людей на {{indexStatus.nSyncedFiles,number}} фотографиях...", "INDEXING_DONE": "Проиндексировано {{indexStatus.nSyncedFiles,number}} фотографий", - "UNIDENTIFIED_FACES": "нераспознанные лица", + "UNIDENTIFIED_FACES": "Нераспознанные лица", "OBJECTS": "объекты", "TEXT": "текст", "INFO": "Информация ", From 6226f43b5a1a475666c4cbde3c6bc92d20bd2c3a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 10:25:41 +0530 Subject: [PATCH 464/466] Update --- web/apps/photos/src/services/searchService.ts | 8 ++++---- web/packages/next/locales/ar-SA/translation.json | 8 ++++---- web/packages/next/locales/bg-BG/translation.json | 8 ++++---- web/packages/next/locales/ca-ES/translation.json | 8 ++++---- web/packages/next/locales/de-DE/translation.json | 8 ++++---- web/packages/next/locales/en-US/translation.json | 8 ++++---- web/packages/next/locales/es-ES/translation.json | 8 ++++---- web/packages/next/locales/fa-IR/translation.json | 8 ++++---- web/packages/next/locales/fi-FI/translation.json | 8 ++++---- web/packages/next/locales/fr-FR/translation.json | 8 ++++---- web/packages/next/locales/gu-IN/translation.json | 8 ++++---- web/packages/next/locales/hi-IN/translation.json | 8 ++++---- web/packages/next/locales/id-ID/translation.json | 8 ++++---- web/packages/next/locales/is-IS/translation.json | 8 ++++---- web/packages/next/locales/it-IT/translation.json | 8 ++++---- web/packages/next/locales/ja-JP/translation.json | 8 ++++---- web/packages/next/locales/ko-KR/translation.json | 8 ++++---- web/packages/next/locales/nl-NL/translation.json | 8 ++++---- web/packages/next/locales/pl-PL/translation.json | 8 ++++---- web/packages/next/locales/pt-BR/translation.json | 8 ++++---- web/packages/next/locales/pt-PT/translation.json | 8 ++++---- web/packages/next/locales/ru-RU/translation.json | 8 ++++---- web/packages/next/locales/sv-SE/translation.json | 8 ++++---- web/packages/next/locales/te-IN/translation.json | 8 ++++---- web/packages/next/locales/th-TH/translation.json | 8 ++++---- web/packages/next/locales/ti-ER/translation.json | 8 ++++---- web/packages/next/locales/tr-TR/translation.json | 8 ++++---- web/packages/next/locales/zh-CN/translation.json | 8 ++++---- 28 files changed, 112 insertions(+), 112 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index acf12a1e94..2debe3311b 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -180,16 +180,16 @@ export async function getMLStatusSuggestion(): Promise { let label: string; switch (status.phase) { case "scheduled": - label = t("INDEXING_SCHEDULED"); + label = t("indexing_scheduled"); break; case "indexing": - label = t("ANALYZING_PHOTOS", { indexStatus: status }); + label = t("indexing_photos", status); break; case "clustering": - label = t("INDEXING_PEOPLE", { indexStatus: status }); + label = t("indexing_people", status); break; case "done": - label = t("INDEXING_DONE", { indexStatus: status }); + label = t("indexing_done", status); break; } diff --git a/web/packages/next/locales/ar-SA/translation.json b/web/packages/next/locales/ar-SA/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/ar-SA/translation.json +++ b/web/packages/next/locales/ar-SA/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/bg-BG/translation.json b/web/packages/next/locales/bg-BG/translation.json index afeecab843..3c40570a0e 100644 --- a/web/packages/next/locales/bg-BG/translation.json +++ b/web/packages/next/locales/bg-BG/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/ca-ES/translation.json b/web/packages/next/locales/ca-ES/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/ca-ES/translation.json +++ b/web/packages/next/locales/ca-ES/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index 84d3fa441f..ce8b71108c 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Zum Album hinzufügen", "SELECTED": "ausgewählt", "PEOPLE": "Personen", - "INDEXING_SCHEDULED": "Indizierung ist geplant...", - "ANALYZING_PHOTOS": "Indiziere Fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "Indiziere Personen in {{indexStatus.nSyncedFiles,number}} Fotos...", - "INDEXING_DONE": "{{indexStatus.nSyncedFiles,number}} Fotos wurden indiziert", + "indexing_scheduled": "Indizierung ist geplant...", + "indexing_photos": "Indiziere Fotos ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "Indiziere Personen in {{nSyncedFiles, number}} Fotos...", + "indexing_done": "{{nSyncedFiles, number}} Fotos wurden indiziert", "UNIDENTIFIED_FACES": "Unidentifizierte Gesichter", "OBJECTS": "Objekte", "TEXT": "Text", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index 5d648fc9b5..afb7257657 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Add to album", "SELECTED": "selected", "PEOPLE": "People", - "INDEXING_SCHEDULED": "Indexing is scheduled...", - "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", - "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "indexing_scheduled": "Indexing is scheduled...", + "indexing_photos": "Indexing photos ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "Indexing people in {{nSyncedFiles, number}} photos...", + "indexing_done": "Indexed {{nSyncedFiles, number}} photos", "UNIDENTIFIED_FACES": "Unidentified faces", "OBJECTS": "objects", "TEXT": "text", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index afffec34fa..db3d7789ff 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Añadir al álbum", "SELECTED": "seleccionado", "PEOPLE": "Personajes", - "INDEXING_SCHEDULED": "el indexado está programado...", - "ANALYZING_PHOTOS": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", - "INDEXING_PEOPLE": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", - "INDEXING_DONE": "fotos {{indexStatus.nSyncedFiles}} indexadas", + "indexing_scheduled": "El indexado está programado...", + "indexing_photos": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", + "indexing_people": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", + "indexing_done": "fotos {{indexStatus.nSyncedFiles}} indexadas", "UNIDENTIFIED_FACES": "Caras no identificadas", "OBJECTS": "objetos", "TEXT": "texto", diff --git a/web/packages/next/locales/fa-IR/translation.json b/web/packages/next/locales/fa-IR/translation.json index 888024d2d3..18e6b93123 100644 --- a/web/packages/next/locales/fa-IR/translation.json +++ b/web/packages/next/locales/fa-IR/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/fi-FI/translation.json b/web/packages/next/locales/fi-FI/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/fi-FI/translation.json +++ b/web/packages/next/locales/fi-FI/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 4dd428c9dc..84040a7748 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Ajouter à l'album", "SELECTED": "Sélectionné", "PEOPLE": "Visages", - "INDEXING_SCHEDULED": "L'indexation est planifiée...", - "ANALYZING_PHOTOS": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", - "INDEXING_PEOPLE": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", - "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} photos indexées", + "indexing_scheduled": "L'indexation est planifiée...", + "indexing_photos": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", + "indexing_people": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", + "indexing_done": "{{indexStatus.nSyncedFiles}} photos indexées", "UNIDENTIFIED_FACES": "Visages non-identifiés", "OBJECTS": "objets", "TEXT": "texte", diff --git a/web/packages/next/locales/gu-IN/translation.json b/web/packages/next/locales/gu-IN/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/gu-IN/translation.json +++ b/web/packages/next/locales/gu-IN/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/hi-IN/translation.json b/web/packages/next/locales/hi-IN/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/hi-IN/translation.json +++ b/web/packages/next/locales/hi-IN/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/id-ID/translation.json b/web/packages/next/locales/id-ID/translation.json index 46c55c9aa6..fe0f85b384 100644 --- a/web/packages/next/locales/id-ID/translation.json +++ b/web/packages/next/locales/id-ID/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "Mengindeks foto ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "Mengindeks foto ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/is-IS/translation.json b/web/packages/next/locales/is-IS/translation.json index 8e70f2709f..d2cfa9b872 100644 --- a/web/packages/next/locales/is-IS/translation.json +++ b/web/packages/next/locales/is-IS/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/it-IT/translation.json b/web/packages/next/locales/it-IT/translation.json index bb55ef94b2..4b74361e9d 100644 --- a/web/packages/next/locales/it-IT/translation.json +++ b/web/packages/next/locales/it-IT/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Aggiungi all'album", "SELECTED": "selezionato", "PEOPLE": "Persone", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "Volti non identificati", "OBJECTS": "", "TEXT": "testo", diff --git a/web/packages/next/locales/ja-JP/translation.json b/web/packages/next/locales/ja-JP/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/ja-JP/translation.json +++ b/web/packages/next/locales/ja-JP/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/ko-KR/translation.json b/web/packages/next/locales/ko-KR/translation.json index 65961416e8..01e6a61851 100644 --- a/web/packages/next/locales/ko-KR/translation.json +++ b/web/packages/next/locales/ko-KR/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 9b317e1760..42927636c3 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Toevoegen aan album", "SELECTED": "geselecteerd", "PEOPLE": "Personen", - "INDEXING_SCHEDULED": "indexering is gepland...", - "ANALYZING_PHOTOS": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", - "INDEXING_PEOPLE": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", - "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", + "indexing_scheduled": "Indexering is gepland...", + "indexing_photos": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", + "indexing_people": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", + "indexing_done": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", "UNIDENTIFIED_FACES": "Ongeïdentificeerde gezichten", "OBJECTS": "objecten", "TEXT": "tekst", diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json index 49cdc9abd6..6c83e52127 100644 --- a/web/packages/next/locales/pl-PL/translation.json +++ b/web/packages/next/locales/pl-PL/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Dodaj do albumu", "SELECTED": "wybrane", "PEOPLE": "Ludzie", - "INDEXING_SCHEDULED": "Indeksowanie jest zaplanowane...", - "ANALYZING_PHOTOS": "Indeksowanie zdjęć ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "Indeksowanie ludzi w {{indexStatus.nSyncedFiles,number}} zdjęć...", - "INDEXING_DONE": "Zindeksowano {{indexStatus.nSyncedFiles,number}} zdjęć", + "indexing_scheduled": "Indeksowanie jest zaplanowane...", + "indexing_photos": "Indeksowanie zdjęć ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "Indeksowanie ludzi w {{nSyncedFiles, number}} zdjęć...", + "indexing_done": "Zindeksowano {{nSyncedFiles, number}} zdjęć", "UNIDENTIFIED_FACES": "Niezidentyfikowane twarze", "OBJECTS": "obiekty", "TEXT": "tekst", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index bbb28290ee..f0b3ad5141 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Adicionar ao álbum", "SELECTED": "selecionado", "PEOPLE": "Pessoas", - "INDEXING_SCHEDULED": "Indexação está programada...", - "ANALYZING_PHOTOS": "Indexando fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "Indexando pessoas em {{indexStatus.nSyncedFiles,number}} fotos...", - "INDEXING_DONE": "Foram indexadas {{indexStatus.nSyncedFiles,number}} fotos", + "indexing_scheduled": "Indexação está programada...", + "indexing_photos": "Indexando fotos ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "Indexando pessoas em {{nSyncedFiles, number}} fotos...", + "indexing_done": "Foram indexadas {{nSyncedFiles, number}} fotos", "UNIDENTIFIED_FACES": "Rostos não identificados", "OBJECTS": "objetos", "TEXT": "texto", diff --git a/web/packages/next/locales/pt-PT/translation.json b/web/packages/next/locales/pt-PT/translation.json index b13933e899..8961e2fcb9 100644 --- a/web/packages/next/locales/pt-PT/translation.json +++ b/web/packages/next/locales/pt-PT/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index d1f674fdfb..954ed0a041 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "Добавить в альбом", "SELECTED": "выбрано", "PEOPLE": "Люди", - "INDEXING_SCHEDULED": "Индексация запланирована...", - "ANALYZING_PHOTOS": "Индексирование фотографий ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "Индексирование людей на {{indexStatus.nSyncedFiles,number}} фотографиях...", - "INDEXING_DONE": "Проиндексировано {{indexStatus.nSyncedFiles,number}} фотографий", + "indexing_scheduled": "Индексация запланирована...", + "indexing_photos": "Индексирование фотографий ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "Индексирование людей на {{nSyncedFiles, number}} фотографиях...", + "indexing_done": "Проиндексировано {{nSyncedFiles, number}} фотографий", "UNIDENTIFIED_FACES": "Нераспознанные лица", "OBJECTS": "объекты", "TEXT": "текст", diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json index 838cf2641b..a70c1aa253 100644 --- a/web/packages/next/locales/sv-SE/translation.json +++ b/web/packages/next/locales/sv-SE/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/te-IN/translation.json b/web/packages/next/locales/te-IN/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/te-IN/translation.json +++ b/web/packages/next/locales/te-IN/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/th-TH/translation.json b/web/packages/next/locales/th-TH/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/th-TH/translation.json +++ b/web/packages/next/locales/th-TH/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/ti-ER/translation.json b/web/packages/next/locales/ti-ER/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/ti-ER/translation.json +++ b/web/packages/next/locales/ti-ER/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/tr-TR/translation.json b/web/packages/next/locales/tr-TR/translation.json index 3059f74744..0f5bf0a6fe 100644 --- a/web/packages/next/locales/tr-TR/translation.json +++ b/web/packages/next/locales/tr-TR/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "", "SELECTED": "", "PEOPLE": "", - "INDEXING_SCHEDULED": "", - "ANALYZING_PHOTOS": "", - "INDEXING_PEOPLE": "", - "INDEXING_DONE": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "", "OBJECTS": "", "TEXT": "", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index 89e8fef5e9..ce35953eed 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -223,10 +223,10 @@ "ADD_TO_COLLECTION": "添加到相册", "SELECTED": "已选", "PEOPLE": "人物", - "INDEXING_SCHEDULED": "索引已安排...", - "ANALYZING_PHOTOS": "正在索引照片 ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", - "INDEXING_PEOPLE": "正在为{{indexStatus.nSyncedFiles,number}}张照片中的人物建立索引...", - "INDEXING_DONE": "已索引 {{indexStatus.nSyncedFiles,number}} 张照片", + "indexing_scheduled": "索引已安排...", + "indexing_photos": "正在索引照片 ({{nSyncedFiles, number}} / {{nTotalFiles, number}})", + "indexing_people": "正在为{{nSyncedFiles, number}}张照片中的人物建立索引...", + "indexing_done": "已索引 {{nSyncedFiles, number}} 张照片", "UNIDENTIFIED_FACES": "身份不明的面孔", "OBJECTS": "对象", "TEXT": "文本", From 39c600de462a9b1c6399fbfb5be81403a632226a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 10:29:35 +0530 Subject: [PATCH 465/466] Remove out of date translations that don't reflect source string --- web/packages/next/locales/es-ES/translation.json | 6 +++--- web/packages/next/locales/fr-FR/translation.json | 6 +++--- web/packages/next/locales/nl-NL/translation.json | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index db3d7789ff..3acbd01570 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -224,9 +224,9 @@ "SELECTED": "seleccionado", "PEOPLE": "Personajes", "indexing_scheduled": "El indexado está programado...", - "indexing_photos": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", - "indexing_people": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", - "indexing_done": "fotos {{indexStatus.nSyncedFiles}} indexadas", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "Caras no identificadas", "OBJECTS": "objetos", "TEXT": "texto", diff --git a/web/packages/next/locales/fr-FR/translation.json b/web/packages/next/locales/fr-FR/translation.json index 84040a7748..e28e9f2c1d 100644 --- a/web/packages/next/locales/fr-FR/translation.json +++ b/web/packages/next/locales/fr-FR/translation.json @@ -224,9 +224,9 @@ "SELECTED": "Sélectionné", "PEOPLE": "Visages", "indexing_scheduled": "L'indexation est planifiée...", - "indexing_photos": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", - "indexing_people": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", - "indexing_done": "{{indexStatus.nSyncedFiles}} photos indexées", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "Visages non-identifiés", "OBJECTS": "objets", "TEXT": "texte", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 42927636c3..28a7439dc5 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -224,9 +224,9 @@ "SELECTED": "geselecteerd", "PEOPLE": "Personen", "indexing_scheduled": "Indexering is gepland...", - "indexing_photos": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", - "indexing_people": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", - "indexing_done": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", + "indexing_photos": "", + "indexing_people": "", + "indexing_done": "", "UNIDENTIFIED_FACES": "Ongeïdentificeerde gezichten", "OBJECTS": "objecten", "TEXT": "tekst", From 839a94fcefdcabc03c425eb2fbb1c890f0c0cf2f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 15 Jul 2024 10:30:54 +0530 Subject: [PATCH 466/466] Fix markup in translations --- web/packages/next/locales/de-DE/translation.json | 2 +- web/packages/next/locales/en-US/translation.json | 2 +- web/packages/next/locales/es-ES/translation.json | 2 +- web/packages/next/locales/nl-NL/translation.json | 2 +- web/packages/next/locales/pl-PL/translation.json | 2 +- web/packages/next/locales/pt-BR/translation.json | 2 +- web/packages/next/locales/ru-RU/translation.json | 2 +- web/packages/next/locales/zh-CN/translation.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/packages/next/locales/de-DE/translation.json b/web/packages/next/locales/de-DE/translation.json index ce8b71108c..f6b2814d6b 100644 --- a/web/packages/next/locales/de-DE/translation.json +++ b/web/packages/next/locales/de-DE/translation.json @@ -479,7 +479,7 @@ "more_details": "Weitere Details", "ENABLE_FACE_SEARCH": "Gesichtserkennung aktivieren", "ENABLE_FACE_SEARCH_TITLE": "Gesichtserkennung aktivieren?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Wenn du die Gesichtserkennung aktivierst, wird Ente Gesichtsgeometrie aus deinen Fotos extrahieren. Dies wird auf deinem Gerät geschehen, und alle erzeugten biometrischen Daten werden Ende-zu-verschlüsselt.

Bitte klicke hier für weitere Informationen über diese Funktion in unserer Datenschutzerklärung

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Wenn du die Gesichtserkennung aktivierst, wird Ente Gesichtsgeometrie aus deinen Fotos extrahieren. Dies wird auf deinem Gerät geschehen, und alle erzeugten biometrischen Daten werden Ende-zu-verschlüsselt.

Bitte klicke hier für weitere Informationen über diese Funktion in unserer Datenschutzerklärung

", "ADVANCED": "Erweitert", "FACE_SEARCH_CONFIRMATION": "Ich verstehe und möchte Ente erlauben, Gesichtsgeometrie zu verarbeiten", "LABS": "Experimente", diff --git a/web/packages/next/locales/en-US/translation.json b/web/packages/next/locales/en-US/translation.json index afb7257657..282df9bb7c 100644 --- a/web/packages/next/locales/en-US/translation.json +++ b/web/packages/next/locales/en-US/translation.json @@ -479,7 +479,7 @@ "more_details": "More details", "ENABLE_FACE_SEARCH": "Enable face recognition", "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, Ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", "ADVANCED": "Advanced", "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow Ente to process face geometry", "LABS": "Labs", diff --git a/web/packages/next/locales/es-ES/translation.json b/web/packages/next/locales/es-ES/translation.json index 3acbd01570..94934ef4bb 100644 --- a/web/packages/next/locales/es-ES/translation.json +++ b/web/packages/next/locales/es-ES/translation.json @@ -479,7 +479,7 @@ "more_details": "Más detalles", "ENABLE_FACE_SEARCH": "Activar búsqueda facial", "ENABLE_FACE_SEARCH_TITLE": "Activar búsqueda facial?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", "ADVANCED": "Avanzado", "FACE_SEARCH_CONFIRMATION": "Comprendo y deseo permitir que ente procese la geometría de la cara", "LABS": "Labs", diff --git a/web/packages/next/locales/nl-NL/translation.json b/web/packages/next/locales/nl-NL/translation.json index 28a7439dc5..5dd11ece27 100644 --- a/web/packages/next/locales/nl-NL/translation.json +++ b/web/packages/next/locales/nl-NL/translation.json @@ -479,7 +479,7 @@ "more_details": "Meer details", "ENABLE_FACE_SEARCH": "Zoeken op gezichten inschakelen", "ENABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten inschakelen?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert Ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert Ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", "ADVANCED": "Geavanceerd", "FACE_SEARCH_CONFIRMATION": "Ik begrijp het, en wil Ente toestaan om gezichten te analyseren", "LABS": "Lab's", diff --git a/web/packages/next/locales/pl-PL/translation.json b/web/packages/next/locales/pl-PL/translation.json index 6c83e52127..3ab670a7b1 100644 --- a/web/packages/next/locales/pl-PL/translation.json +++ b/web/packages/next/locales/pl-PL/translation.json @@ -479,7 +479,7 @@ "more_details": "Więcej szczegółów", "ENABLE_FACE_SEARCH": "Włącz rozpoznawanie twarzy", "ENABLE_FACE_SEARCH_TITLE": "Włączyć rozpoznawanie twarzy?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Jeśli włączysz rozpoznawanie twarzy, Ente wyodrębni geometrię twarzy ze zdjęć. Będzie to miało miejsce na Twoim urządzeniu, a wszystkie wygenerowane dane biometryczne będą zaszyfrowane metodą end-to-end.

Kliknij tutaj, aby uzyskać więcej informacji na temat tej funkcji w naszej polityce prywatności

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Jeśli włączysz rozpoznawanie twarzy, Ente wyodrębni geometrię twarzy ze zdjęć. Będzie to miało miejsce na Twoim urządzeniu, a wszystkie wygenerowane dane biometryczne będą zaszyfrowane metodą end-to-end.

Kliknij tutaj, aby uzyskać więcej informacji na temat tej funkcji w naszej polityce prywatności

", "ADVANCED": "Zaawansowane", "FACE_SEARCH_CONFIRMATION": "Rozumiem i chcę pozwolić Ente na przetwarzanie geometrii twarzy", "LABS": "Laboratoria", diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json index f0b3ad5141..2525b7de1c 100644 --- a/web/packages/next/locales/pt-BR/translation.json +++ b/web/packages/next/locales/pt-BR/translation.json @@ -479,7 +479,7 @@ "more_details": "Mais detalhes", "ENABLE_FACE_SEARCH": "Habilitar reconhecimento facial", "ENABLE_FACE_SEARCH_TITLE": "Habilitar reconhecimento facial?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", "ADVANCED": "Avançado", "FACE_SEARCH_CONFIRMATION": "Eu entendo, e desejo permitir que o ente processe a geometria do rosto", "LABS": "Laboratórios", diff --git a/web/packages/next/locales/ru-RU/translation.json b/web/packages/next/locales/ru-RU/translation.json index 954ed0a041..f6f75d0562 100644 --- a/web/packages/next/locales/ru-RU/translation.json +++ b/web/packages/next/locales/ru-RU/translation.json @@ -479,7 +479,7 @@ "more_details": "Более подробная информация", "ENABLE_FACE_SEARCH": "Включить распознавание лиц", "ENABLE_FACE_SEARCH_TITLE": "Включить распознавание лиц?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

Если вы включите функцию распознавания лиц, Ente извлечет геометрию лица из ваших фотографий. Это произойдет на вашем устройстве, и все сгенерированные биометрические данные будут зашифрованы полностью.

Пожалуйста, нажмите здесь для получения более подробной информации об этой функции в нашей политике конфиденциальности

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Если вы включите функцию распознавания лиц, Ente извлечет геометрию лица из ваших фотографий. Это произойдет на вашем устройстве, и все сгенерированные биометрические данные будут зашифрованы полностью.

Пожалуйста, нажмите здесь для получения более подробной информации об этой функции в нашей политике конфиденциальности

", "ADVANCED": "Передовой", "FACE_SEARCH_CONFIRMATION": "Я понимаю и хочу позволить Ente обрабатывать геометрию грани", "LABS": "Лаборатории", diff --git a/web/packages/next/locales/zh-CN/translation.json b/web/packages/next/locales/zh-CN/translation.json index ce35953eed..c344122b68 100644 --- a/web/packages/next/locales/zh-CN/translation.json +++ b/web/packages/next/locales/zh-CN/translation.json @@ -479,7 +479,7 @@ "more_details": "更多详情", "ENABLE_FACE_SEARCH": "启用面部搜索", "ENABLE_FACE_SEARCH_TITLE": "要启用面部搜索吗?", - "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,Ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,Ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", "ADVANCED": "高级设置", "FACE_SEARCH_CONFIRMATION": "我理解,并希望允许Ente处理面部几何形状", "LABS": "实验室",