text:
using System;
using System.Collections;
using Assets.Scripts.Common;
using Assets.Sources.Scripts.UI.Common;
using Memoria.Data;
using Memoria.Assets;
using SiliconStudio;
using UnityEngine;

public class CloudUI : UIScene
{
	public override void Show(UIScene.SceneVoidDelegate afterFinished = null)
	{
		SiliconStudio.Social.InitializeSocialPlatform();
		SiliconStudio.Social.Authenticate(false);
		UIScene.SceneVoidDelegate sceneVoidDelegate = delegate
		{
			base.Loading = true;
			this.timeCounter = Time.time;
			this.currentState = CloudUI.State.LoadPreview;
			FF9StateSystem.Serializer.LoadCloudSyncPreview((ISharedDataSerializer.OnSyncCloudSlotStart)null, new ISharedDataSerializer.OnSyncCloudSlotFinish(this.OnFinishedLoadPreview));
			this.LoadingPreviewDialog.SetActive(true);
			this.helpTitleLabel.text = Localization.Get("ConnectingHelpInfo");
			ButtonGroupState.SetPointerOffsetToGroup(new Vector2(26f, 134f), CloudUI.LocalFileGroupButton);
			ButtonGroupState.SetPointerOffsetToGroup(new Vector2(26f, 134f), CloudUI.CloudFileGroupButton);
			ButtonGroupState.SetPointerOffsetToGroup(new Vector2(220f, 10f), CloudUI.ConfirmDialogGroupButton);
		};
		if (afterFinished != null)
		{
			sceneVoidDelegate = (UIScene.SceneVoidDelegate)Delegate.Combine(sceneVoidDelegate, afterFinished);
		}
		SceneDirector.FadeEventSetColor(FadeMode.Sub, Color.black);
		base.Show(sceneVoidDelegate);
		this.FileListPanel.SetActive(false);
		this.DisplayInfo();
	}

	public override void Hide(UIScene.SceneVoidDelegate afterFinished = null)
	{
		base.Hide(afterFinished);
		if (this.isLocalFileExist)
		{
			PersistenSingleton<UIManager>.Instance.TitleScene.ForceCheckingAutoSave = true;
		}
	}

	public override Boolean OnKeyConfirm(GameObject go)
	{
		if (base.OnKeyConfirm(go))
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				FF9Sfx.FF9SFX_Play(103);
				if (go == this.UploadButton)
				{
					this.syncState = CloudUI.Sync.Upload;
					ButtonGroupState.ActiveGroup = CloudUI.CloudFileGroupButton;
					ButtonGroupState.SetSecondaryOnGroup(CloudUI.SubMenuGroupButton);
					ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
				}
				else if (go == this.DownloadButton)
				{
					this.syncState = CloudUI.Sync.Download;
					ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
					ButtonGroupState.SetSecondaryOnGroup(CloudUI.SubMenuGroupButton);
					ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
				}
			}
			else if (ButtonGroupState.ActiveGroup == CloudUI.CloudFileGroupButton)
			{
				if (ButtonGroupState.ContainButtonInGroup(go, CloudUI.CloudFileGroupButton))
				{
					FF9Sfx.FF9SFX_Play(103);
					if (this.isCloudFileExist)
					{
						this.overWriteDialogDespLabel.text = Localization.Get("UploadOverwrite");
						this.DisplayOverWriteDialog();
						ButtonGroupState.ActiveGroup = CloudUI.ConfirmDialogGroupButton;
						ButtonGroupState.HoldActiveStateOnGroup(CloudUI.CloudFileGroupButton);
					}
					else
					{
						this.SyncFileToCloud();
					}
				}
				else
				{
					this.OnSecondaryGroupClick(go);
				}
			}
			else if (ButtonGroupState.ActiveGroup == CloudUI.LocalFileGroupButton)
			{
				if (ButtonGroupState.ContainButtonInGroup(go, CloudUI.LocalFileGroupButton))
				{
					FF9Sfx.FF9SFX_Play(103);
					if (this.isLocalFileExist)
					{
						this.overWriteDialogDespLabel.text = Localization.Get("DownloadOverwrite");
						this.DisplayOverWriteDialog();
						ButtonGroupState.ActiveGroup = CloudUI.ConfirmDialogGroupButton;
						ButtonGroupState.HoldActiveStateOnGroup(CloudUI.LocalFileGroupButton);
					}
					else
					{
						this.SyncFileToCloud();
					}
				}
				else
				{
					this.OnSecondaryGroupClick(go);
				}
			}
			else if (ButtonGroupState.ActiveGroup == CloudUI.ConfirmDialogGroupButton && ButtonGroupState.ContainButtonInGroup(go, CloudUI.ConfirmDialogGroupButton))
			{
				this.OverWriteDialog.SetActive(false);
				if (go.transform.GetSiblingIndex() == 1)
				{
					FF9Sfx.FF9SFX_Play(103);
					this.SyncFileToCloud();
				}
				else
				{
					FF9Sfx.FF9SFX_Play(101);
					if (this.syncState == CloudUI.Sync.Upload)
					{
						ButtonGroupState.ActiveGroup = CloudUI.CloudFileGroupButton;
					}
					else
					{
						ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
					}
				}
			}
		}
		return true;
	}

	public override Boolean OnKeyCancel(GameObject go)
	{
		if (base.OnKeyCancel(go))
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				FF9Sfx.FF9SFX_Play(101);
				this.Hide(delegate
				{
					PersistenSingleton<UIManager>.Instance.ChangeUIState(PersistenSingleton<UIManager>.Instance.HUDState);
				});
			}
			else if (ButtonGroupState.ActiveGroup == CloudUI.CloudFileGroupButton || ButtonGroupState.ActiveGroup == CloudUI.LocalFileGroupButton)
			{
				FF9Sfx.FF9SFX_Play(101);
				ButtonGroupState.ActiveGroup = CloudUI.SubMenuGroupButton;
				this.CheckData();
			}
			else if (ButtonGroupState.ActiveGroup == CloudUI.ConfirmDialogGroupButton)
			{
				FF9Sfx.FF9SFX_Play(101);
				this.OverWriteDialog.SetActive(false);
				if (this.syncState == CloudUI.Sync.Upload)
				{
					ButtonGroupState.ActiveGroup = CloudUI.CloudFileGroupButton;
				}
				else
				{
					ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
				}
			}
		}
		return true;
	}

	public override Boolean OnKeySelect(GameObject go)
	{
		return false;
	}

	public override Boolean OnItemSelect(GameObject go)
	{
		if (base.OnItemSelect(go) && ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
		{
			if (go == this.InfoButton)
			{
				this.FileListPanel.SetActive(false);
				this.DisplayInfo();
			}
			else
			{
				if (go == this.UploadButton)
				{
					this.syncState = CloudUI.Sync.Upload;
				}
				else if (go == this.DownloadButton)
				{
					this.syncState = CloudUI.Sync.Download;
				}
				this.InfoPanel.SetActive(false);
				this.DisplayFile();
			}
		}
		return true;
	}

	private void OnSecondaryGroupClick(GameObject go)
	{
		ButtonGroupState.HoldActiveStateOnGroup(go, CloudUI.SubMenuGroupButton);
		if (ButtonGroupState.ActiveGroup == CloudUI.CloudFileGroupButton)
		{
			FF9Sfx.muteSfx = true;
			this.OnKeyCancel(this.FileListPanel.GetChild(0));
			FF9Sfx.muteSfx = false;
			this.OnKeyConfirm(go);
		}
		else if (ButtonGroupState.ActiveGroup == CloudUI.LocalFileGroupButton)
		{
			FF9Sfx.muteSfx = true;
			this.OnKeyCancel(this.FileListPanel.GetChild(2));
			FF9Sfx.muteSfx = false;
			this.OnKeyConfirm(go);
		}
	}

	private void DisplayInfo()
	{
		this.InfoPanel.SetActive(true);
		this.slotGameObject.SetActive(false);
		this.helpTitleLabel.text = Localization.Get("SelectSyncHelpInfo");
		String text = String.Empty;
		if (FF9StateSystem.MobilePlatform)
		{
			text += Localization.Get("MobileCloudInfoPart1");
			text += Localization.Get("MobileNoticeConnectDesc");
			text += Localization.Get("MobileCloudInfoPart2");
		}
		else if (FF9StateSystem.PCPlatform)
		{
			text += Localization.Get("PCCloudInfoPart1");
			text += Localization.Get("PCNoticeConnectDesc");
			text += Localization.Get("PCCloudInfoPart2");
		}
		this.infoLabel.text = text;
	}

	private void DisplayFile()
	{
		this.FileListPanel.SetActive(true);
		this.slotGameObject.SetActive(true);
		this.helpTitleLabel.text = Localization.Get("SelectDataHelpInfo");
		if (this.syncState == CloudUI.Sync.Upload)
		{
			this.syncStatusLabel.text = Localization.Get("UploadCaption");
			this.syncStatusLabel.color = FF9TextTool.Cyan;
			this.helpSlotLabel.text = Localization.Get("Upload");
			UISprite[] array = this.arrowSprites;
			for (Int32 i = 0; i < (Int32)array.Length; i++)
			{
				UISprite uisprite = array[i];
				uisprite.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 0f));
			}
		}
		else
		{
			this.syncStatusLabel.text = Localization.Get("DownloadCaption");
			this.syncStatusLabel.color = FF9TextTool.Green;
			this.helpSlotLabel.text = Localization.Get("Download");
			UISprite[] array2 = this.arrowSprites;
			for (Int32 j = 0; j < (Int32)array2.Length; j++)
			{
				UISprite uisprite2 = array2[j];
				uisprite2.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 180f));
			}
		}
	}

	private void DisplayFileInfo(CloudUI.FileCloudInfoHUD fileHud, SharedDataPreviewSlot file, Boolean isCorrupt, DataSerializerErrorCode status)
	{
		fileHud.Self.SetActive(true);
		if (file != null)
		{
			fileHud.Container.SetActive(true);
			fileHud.EmptySlotTextGameObject.SetActive(false);
			Int32 num = 1;
			String text = String.Empty;
			String empty = String.Empty;
			Boolean flag = false;
			Int32 num2 = 0;
			foreach (SharedDataPreviewCharacterInfo sharedDataPreviewCharacterInfo in file.CharacterInfoList)
			{
				fileHud.CharacterAvatarList[num2].alpha = 0f;
				fileHud.CharacterAvatarList[num2].spriteName = String.Empty;
				if (sharedDataPreviewCharacterInfo != null)
				{
					if (!flag)
					{
						num = sharedDataPreviewCharacterInfo.Level;
						text = sharedDataPreviewCharacterInfo.Name;
						flag = true;
					}
					fileHud.CharacterAvatarList[num2].alpha = 1f;
					FF9UIDataTool.DisplayCharacterAvatar((CharacterSerialNumber)sharedDataPreviewCharacterInfo.SerialID, new Vector3(0f, 0f, 0f), new Vector3(0f, 0f, 0f), fileHud.CharacterAvatarList[num2], false);
				}
				num2++;
			}
			fileHud.LeaderNameLabel.text = text;
			fileHud.LeaderLvLabel.text = num.ToString();
			fileHud.GilLabel.text = file.Gil.ToString() + "[YSUB=1.3][sub]G";
			fileHud.LocationNameLabel.text = file.Location;
			Color color = FF9TextTool.White;
			Double num3 = (Double)(file.PlayDuration % 360000f);
			switch ((Int32)(file.PlayDuration / 360000f))
			{
			case 0:
				color = FF9TextTool.White;
				break;
			case 1:
				color = FF9TextTool.Red;
				break;
			case 2:
				color = FF9TextTool.Yellow;
				break;
			case 3:
				color = FF9TextTool.Cyan;
				break;
			case 4:
				color = FF9TextTool.Magenta;
				break;
			case 5:
				color = FF9TextTool.Green;
				break;
			default:
				num3 = 359999.0;
				color = FF9TextTool.Green;
				break;
			}
			String text2 = ((Int32)(num3 / 3600.0)).ToString("0#");
			String text3 = ((Int32)(num3 / 60.0) % 60).ToString("0#");
			String text4 = ((Int32)num3 % 60).ToString("0#");
			fileHud.TimeLabel.color = color;
			fileHud.TimeLabel.text = String.Concat(new String[]
			{
				text2,
				" : ",
				text3,
				" : ",
				text4
			});
			this.DisplayWindowBackground(fileHud.Self, (file.win_type != 0UL) ? FF9UIDataTool.BlueAtlas : FF9UIDataTool.GrayAtlas);
		}
		else
		{
			fileHud.Container.SetActive(false);
			fileHud.EmptySlotTextGameObject.SetActive(true);
			fileHud.EmptySlotTextLabel.color = FF9TextTool.White;
			if (isCorrupt)
			{
				switch (status)
				{
				case DataSerializerErrorCode.FileCorruption:
				case DataSerializerErrorCode.DataCorruption:
					fileHud.EmptySlotTextLabel.text = Localization.Get("LocalDecryptFailed");
					fileHud.EmptySlotTextLabel.color = FF9TextTool.Red;
					goto IL_3E7;
				case DataSerializerErrorCode.CloudDataCorruption:
					fileHud.EmptySlotTextLabel.text = Localization.Get("CloudDataCorrupt");
					fileHud.EmptySlotTextLabel.color = FF9TextTool.Red;
					goto IL_3E7;
				case DataSerializerErrorCode.CloudConnectionTimeout:
					fileHud.EmptySlotTextLabel.text = Localization.Get("CloudConnectionTimeout");
					goto IL_3E7;
				case DataSerializerErrorCode.CloudDataUnknownError:
					fileHud.EmptySlotTextLabel.text = Localization.Get("CloudDataUnknownError");
					goto IL_3E7;
				}
				fileHud.EmptySlotTextLabel.text = Localization.Get("EmptyFile");
				IL_3E7:;
			}
			else
			{
				fileHud.EmptySlotTextLabel.text = Localization.Get("EmptyFile");
			}
			this.UpdateEmptySlotLabelSize(fileHud.EmptySlotTextLabel);
		}
	}

	private void UpdateEmptySlotLabelSize(UILabel emptySlotLabel)
	{
		emptySlotLabel.SetAnchor((Transform)null);
		emptySlotLabel.updateAnchors = UIRect.AnchorUpdate.OnStart;
		Int32 width = emptySlotLabel.width;
		Int32 height = emptySlotLabel.height;
		emptySlotLabel.width = (Int32)UIManager.UIContentSize.x;
		emptySlotLabel.height = (Int32)UIManager.UIContentSize.y;
		emptySlotLabel.ProcessText();
		emptySlotLabel.UpdateNGUIText();
		Int32 num = (Int32)NGUIText.CalculatePrintedSize(emptySlotLabel.text).x + 3;
		emptySlotLabel.width = (Int32)((width >= num) ? width : num);
		emptySlotLabel.height = height;
	}

	private void DisplayTimeStamp()
	{
		String format = String.Empty;
		String language = Localization.CurrentLanguage;
		switch (language)
		{
		case "English(US)":
			format = "MM/dd/yyyy";
			break;
		case "English(UK)":
		case "Spanish":
		case "French":
		case "German":
		case "Italian":
			format = "dd/MM/yyyy";
			break;
		case "Japanese":
			format = "yyyy/MM/dd";
			break;
		}
		if (this.localFileHud.Self.activeSelf)
		{
			if (this.latestLocalTime > 0.0)
			{
				DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
				String str = dateTime.AddSeconds(Math.Round(this.latestLocalTime)).ToString(format);
				this.localFileHud.LatestTimeLabel.text = Localization.Get("LatestSave") + str;
			}
			else
			{
				this.localFileHud.LatestTimeLabel.text = Localization.Get("LatestSave") + "------------";
			}
		}
		if (this.cloudFileHud.Self.activeSelf)
		{
			if (this.latestCloudTime > 0.0)
			{
				DateTime dateTime2 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
				String str2 = dateTime2.AddSeconds(Math.Round(this.latestCloudTime)).ToString(format);
				this.cloudFileHud.LatestTimeLabel.text = Localization.Get("LatestSave") + str2;
			}
			else
			{
				this.cloudFileHud.LatestTimeLabel.text = Localization.Get("LatestSave") + "------------";
			}
		}
	}

	private void DisplayOverWriteDialog()
	{
		this.OverWriteDialog.SetActive(true);
	}

	private void DisplaySuccessfulAccessDialog(Boolean isSuccess)
	{
		if (isSuccess)
		{
			if (this.syncState == CloudUI.Sync.Upload)
			{
				this.successfulAccessLabel.text = Localization.Get("SuccessUploadDesc");
			}
			else
			{
				this.successfulAccessLabel.text = Localization.Get("SuccessDownloadDesc");
			}
		}
		else
		{
			this.successfulAccessLabel.text = Localization.Get("FailedConnectDesc");
		}
		this.SuccessfulAccessPanel.SetActive(true);
		base.StartCoroutine(this.HideSuccessfulAccessDialog());
	}

	private void DisplayCorruptAccessDialog(Action callback)
	{
		String key;
		switch (ISharedDataSerializer.LastErrno)
		{
		case DataSerializerErrorCode.FileCorruption:
		case DataSerializerErrorCode.DataCorruption:
			key = "LocalDecryptFailed";
			goto IL_66;
		case DataSerializerErrorCode.CloudDataCorruption:
			key = "CloudDataCorrupt";
			goto IL_66;
		case DataSerializerErrorCode.CloudConnectionTimeout:
			key = "CloudConnectionTimeout";
			goto IL_66;
		case DataSerializerErrorCode.CloudFileNotFound:
			key = "CloudFileNotFound";
			goto IL_66;
		}
		key = "CloudDataUnknownError";
		IL_66:
		this.saveCorruptDialog = Singleton<DialogManager>.Instance.AttachDialog(Localization.Get(key), 0, 0, Dialog.TailPosition.Center, Dialog.WindowStyle.WindowStylePlain, Vector2.zero, Dialog.CaptionType.Notice);
		ButtonGroupState.DisableAllGroup(true);
		base.StartCoroutine(this.HideCorruptAccessDialog(callback));
	}

	private void UpdateLabelLanguage()
	{
		this.helpSlotLabel.text = Localization.Get("Download");
		this.helpTitleLabel.text = Localization.Get("SelectDataHelpInfo");
		this.syncStatusLabel.text = Localization.Get("DownloadCaption");
	}

	private IEnumerator HideSuccessfulAccessDialog()
	{
		if (this.syncState == CloudUI.Sync.Download)
		{
			yield return new WaitForSeconds(0.5f);
			FF9StateSystem.Serializer.GetSelectedLanguage(delegate(DataSerializerErrorCode errNo, Int32 selectedLanguage)
			{
				if (errNo == DataSerializerErrorCode.Success)
				{
					FF9StateSystem.Settings.CurrentLanguage = LanguageCode.ConvertToLanguageName(selectedLanguage);
					Localization.CurrentLanguage = LanguageCode.ConvertToLanguageName(selectedLanguage);
					UIManager.Field.InitializeATEText();
					this.StartCoroutine(PersistenSingleton<FF9TextTool>.Instance.UpdateTextLocalization(delegate
					{
						this.Loading = false;
						this.SuccessfulAccessPanel.SetActive(false);
						this.UpdateLabelLanguage();
						this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
						this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
						this.DisplayTimeStamp();
						this.CheckData();
						ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
						ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
					}));
				}
				else
				{
					this.Loading = false;
					this.SuccessfulAccessPanel.SetActive(false);
					this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
					this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
					this.DisplayTimeStamp();
					this.CheckData();
					ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
					ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
				}
			});
		}
		else
		{
			yield return new WaitForSeconds(1.5f);
			base.Loading = false;
			this.SuccessfulAccessPanel.SetActive(false);
			this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
			this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
			this.DisplayTimeStamp();
			this.CheckData();
			ButtonGroupState.ActiveGroup = CloudUI.CloudFileGroupButton;
			ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
		}
		yield break;
	}

	private IEnumerator HideCorruptAccessDialog(Action callback)
	{
		yield return new WaitForSeconds(1.5f);
		this.saveCorruptDialog.Hide();
		if (callback != null)
		{
			callback();
		}
		yield break;
	}

	private IEnumerator RunProgressBar()
	{
		this.progressBar.value = 0f;
		while ((Double)this.progressBar.value < 0.95)
		{
			yield return new WaitForSeconds(0.01f);
			this.progressBar.value += 0.01f;
		}
		yield break;
	}

	private void OnFinishedLoadPreview(DataSerializerErrorCode errNo, Boolean isSuccess, SharedDataPreviewSlot localData, SharedDataPreviewSlot cloudData)
	{
		if (errNo == DataSerializerErrorCode.Success)
		{
			this.corruptFile = CloudUI.Sync.None;
			if (isSuccess)
			{
				this.isLocalFileExist = (localData != (SharedDataPreviewSlot)null);
				this.isCloudFileExist = (cloudData != (SharedDataPreviewSlot)null);
				this.localPreview = localData;
				this.cloudPreview = cloudData;
			}
			else
			{
				this.isLocalFileExist = false;
				this.isCloudFileExist = false;
				this.localPreview = (SharedDataPreviewSlot)null;
				this.cloudPreview = (SharedDataPreviewSlot)null;
			}
			if (this.isLocalFileExist)
			{
				FF9StateSystem.Serializer.GetLocalSaveLatestTimestamp(new ISharedDataSerializer.OnGetLatestSaveTimestamp(this.OnFinishGetTimeLocal));
			}
			else
			{
				this.OnFinishGetTimeLocal(DataSerializerErrorCode.Success, true, 0.0);
			}
		}
		else
		{
			if (localData == null)
			{
				this.corruptFile = CloudUI.Sync.Upload;
			}
			else if (cloudData == null)
			{
				this.corruptFile = CloudUI.Sync.Download;
			}
			this.isLocalFileExist = (localData != (SharedDataPreviewSlot)null);
			this.isCloudFileExist = (cloudData != (SharedDataPreviewSlot)null);
			this.localPreview = localData;
			this.cloudPreview = cloudData;
			if (this.currentState == CloudUI.State.LoadPreview)
			{
				base.StartCoroutine(this.OnFinishedLoadPreview_delay(false));
			}
			else if (this.currentState == CloudUI.State.Sync)
			{
				base.StartCoroutine(this.OnFinishedSync_delay(false));
			}
		}
	}

	private void OnFinishedSync(DataSerializerErrorCode errNo, Boolean isSuccess, SharedDataPreviewSlot localData, SharedDataPreviewSlot cloudData)
	{
		this.isSyncSuccess = (isSuccess && errNo == DataSerializerErrorCode.Success);
		if (this.isSyncSuccess)
		{
			this.corruptFile = CloudUI.Sync.None;
			this.isLocalFileExist = (localData != (SharedDataPreviewSlot)null);
			this.isCloudFileExist = (cloudData != (SharedDataPreviewSlot)null);
			this.localPreview = localData;
			this.cloudPreview = cloudData;
			if (this.isLocalFileExist)
			{
				FF9StateSystem.Serializer.GetLocalSaveLatestTimestamp(new ISharedDataSerializer.OnGetLatestSaveTimestamp(this.OnFinishGetTimeLocal));
			}
			else
			{
				this.OnFinishGetTimeLocal(DataSerializerErrorCode.Success, true, 0.0);
			}
		}
		else
		{
			if (localData == null)
			{
				this.corruptFile = CloudUI.Sync.Upload;
			}
			else if (cloudData == null)
			{
				this.corruptFile = CloudUI.Sync.Download;
			}
			this.isLocalFileExist = (localData != (SharedDataPreviewSlot)null);
			this.isCloudFileExist = (cloudData != (SharedDataPreviewSlot)null);
			this.localPreview = localData;
			this.cloudPreview = cloudData;
			if (this.currentState == CloudUI.State.LoadPreview)
			{
				base.StartCoroutine(this.OnFinishedLoadPreview_delay(false));
			}
			else if (this.currentState == CloudUI.State.Sync)
			{
				base.StartCoroutine(this.OnFinishedSync_delay(false));
			}
		}
	}

	private void OnFinishGetTimeLocal(DataSerializerErrorCode errNo, Boolean isSuccess, Double timestamp)
	{
		if (isSuccess && errNo == DataSerializerErrorCode.Success)
		{
			this.latestLocalTime = timestamp;
			if (this.isCloudFileExist)
			{
				FF9StateSystem.Serializer.GetCloudSaveLatestTimestamp(new ISharedDataSerializer.OnGetLatestSaveTimestamp(this.OnFinishGetTimeCloud));
			}
			else
			{
				this.OnFinishGetTimeCloud(DataSerializerErrorCode.Success, true, 0.0);
			}
		}
		else
		{
			this.isLocalFileExist = false;
			this.isCloudFileExist = false;
			this.localPreview = (SharedDataPreviewSlot)null;
			this.cloudPreview = (SharedDataPreviewSlot)null;
			if (this.currentState == CloudUI.State.LoadPreview)
			{
				base.StartCoroutine(this.OnFinishedLoadPreview_delay(false));
			}
			else if (this.currentState == CloudUI.State.Sync)
			{
				base.StartCoroutine(this.OnFinishedSync_delay(false));
			}
		}
	}

	private void OnFinishGetTimeCloud(DataSerializerErrorCode errNo, Boolean isSuccess, Double timestamp)
	{
		if (isSuccess && errNo == DataSerializerErrorCode.Success)
		{
			this.latestCloudTime = timestamp;
			if (this.currentState == CloudUI.State.LoadPreview)
			{
				base.StartCoroutine(this.OnFinishedLoadPreview_delay(true));
			}
			else if (this.currentState == CloudUI.State.Sync)
			{
				base.StartCoroutine(this.OnFinishedSync_delay(true));
			}
		}
		else
		{
			this.isLocalFileExist = false;
			this.isCloudFileExist = false;
			this.localPreview = (SharedDataPreviewSlot)null;
			this.cloudPreview = (SharedDataPreviewSlot)null;
			if (this.currentState == CloudUI.State.LoadPreview)
			{
				base.StartCoroutine(this.OnFinishedLoadPreview_delay(false));
			}
			else if (this.currentState == CloudUI.State.Sync)
			{
				base.StartCoroutine(this.OnFinishedSync_delay(false));
			}
		}
	}

	private IEnumerator OnFinishedLoadPreview_delay(Boolean isSuccess)
	{
		Single remainTime = Mathf.Max(2f - (Time.time - this.timeCounter), 0f);
		yield return new WaitForSeconds(remainTime);
		this.LoadingPreviewDialog.SetActive(false);
		this.helpTitleLabel.text = Localization.Get("SelectSyncHelpInfo");
		if (isSuccess)
		{
			base.Loading = false;
			this.currentState = CloudUI.State.None;
			FF9Sfx.FF9SFX_Play(1044);
			this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
			this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
			this.DisplayTimeStamp();
			ButtonGroupState.RemoveCursorMemorize(CloudUI.SubMenuGroupButton);
			ButtonGroupState.ActiveGroup = CloudUI.SubMenuGroupButton;
			this.CheckData();
		}
		else
		{
			FF9Sfx.FF9SFX_Play(1046);
			this.DisplayCorruptAccessDialog(delegate
			{
				this.Loading = false;
				this.currentState = CloudUI.State.None;
				this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
				this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
				this.DisplayTimeStamp();
				ButtonGroupState.RemoveCursorMemorize(CloudUI.SubMenuGroupButton);
				ButtonGroupState.ActiveGroup = CloudUI.SubMenuGroupButton;
				this.CheckData();
			});
		}
		yield break;
	}

	private IEnumerator OnFinishedSync_delay(Boolean isSuccess)
	{
		Single remainTime = Mathf.Max(2f - (Time.time - this.timeCounter), 0f);
		yield return new WaitForSeconds(remainTime);
		this.progressBar.value = 1f;
		yield return new WaitForSeconds(0.1f);
		this.LoadingAccessDialog.SetActive(false);
		if (isSuccess)
		{
			FF9Sfx.FF9SFX_Play(103);
			this.currentState = CloudUI.State.None;
			this.DisplaySuccessfulAccessDialog(this.isSyncSuccess);
		}
		else
		{
			FF9Sfx.FF9SFX_Play(1046);
			this.DisplayCorruptAccessDialog(delegate
			{
				this.Loading = false;
				this.currentState = CloudUI.State.None;
				this.DisplayFileInfo(this.localFileHud, this.localPreview, this.corruptFile == CloudUI.Sync.Upload, ISharedDataSerializer.LastErrno);
				this.DisplayFileInfo(this.cloudFileHud, this.cloudPreview, this.corruptFile == CloudUI.Sync.Download, ISharedDataSerializer.LastErrno);
				this.DisplayTimeStamp();
				this.CheckData();
				if (this.syncState == CloudUI.Sync.Upload)
				{
					ButtonGroupState.ActiveGroup = CloudUI.CloudFileGroupButton;
				}
				else
				{
					ButtonGroupState.ActiveGroup = CloudUI.LocalFileGroupButton;
				}
				ButtonGroupState.HoldActiveStateOnGroup(CloudUI.SubMenuGroupButton);
			});
		}
		yield break;
	}

	private void CheckData()
	{
		if (this.isLocalFileExist)
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				ButtonGroupState.SetButtonEnable(this.UploadButton, true);
			}
			this.uploadButtonLabel.color = FF9TextTool.White;
		}
		else
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				ButtonGroupState.SetButtonEnable(this.UploadButton, false);
			}
			this.uploadButtonLabel.color = FF9TextTool.Gray;
		}
		if (this.isCloudFileExist)
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				ButtonGroupState.SetButtonEnable(this.DownloadButton, true);
			}
			this.downloadButtonLabel.color = FF9TextTool.White;
		}
		else
		{
			if (ButtonGroupState.ActiveGroup == CloudUI.SubMenuGroupButton)
			{
				ButtonGroupState.SetButtonEnable(this.DownloadButton, false);
			}
			this.downloadButtonLabel.color = FF9TextTool.Gray;
		}
	}

	private void SyncFileToCloud()
	{
		base.Loading = true;
		this.timeCounter = Time.time;
		this.currentState = CloudUI.State.Sync;
		base.StartCoroutine("RunProgressBar");
		if (this.syncState == CloudUI.Sync.Upload)
		{
			FF9StateSystem.Serializer.UploadToCloud((ISharedDataSerializer.OnSyncCloudSlotStart)null, new ISharedDataSerializer.OnSyncCloudSlotFinish(this.OnFinishedSync));
			this.loadingAccessLocalize.key = "WarningUploadData";
		}
		else
		{
			FF9StateSystem.Serializer.DownloadFromCloud((ISharedDataSerializer.OnSyncCloudSlotStart)null, new ISharedDataSerializer.OnSyncCloudSlotFinish(this.OnFinishedSync));
			this.loadingAccessLocalize.key = "WarningDownloadData";
		}
		this.LoadingAccessDialog.SetActive(true);
	}

	private void Awake()
	{
		base.FadingComponent = this.ScreenFadeGameObject.GetComponent<HonoFading>();
		this.helpTitleLabel = this.HelpPanel.GetChild(0).GetComponent<UILabel>();
		this.helpSlotLabel = this.HelpPanel.GetChild(1).GetChild(0).GetComponent<UILabel>();
		this.slotGameObject = this.HelpPanel.GetChild(1);
		this.infoLabel = this.InfoPanel.GetChild(0).GetComponent<UILabel>();
		this.loadingAccessLocalize = this.LoadingAccessDialog.GetChild(1).GetComponent<UILocalize>();
		this.progressBar = this.LoadingAccessDialog.GetChild(2).GetComponent<UISlider>();
		this.syncStatusLabel = this.FileListPanel.GetChild(1).GetChild(1).GetComponent<UILabel>();
		this.arrowSprites = new UISprite[]
		{
			this.FileListPanel.GetChild(1).GetChild(0).GetComponent<UISprite>(),
			this.FileListPanel.GetChild(1).GetChild(2).GetComponent<UISprite>()
		};
		UIEventListener uieventListener = UIEventListener.Get(this.InfoButton);
		uieventListener.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener.onClick, new UIEventListener.VoidDelegate(this.onClick));
		UIEventListener uieventListener2 = UIEventListener.Get(this.UploadButton);
		uieventListener2.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener2.onClick, new UIEventListener.VoidDelegate(this.onClick));
		UIEventListener uieventListener3 = UIEventListener.Get(this.DownloadButton);
		uieventListener3.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener3.onClick, new UIEventListener.VoidDelegate(this.onClick));
		this.localFileHud = new CloudUI.FileCloudInfoHUD(this.FileListPanel.GetChild(2));
		this.cloudFileHud = new CloudUI.FileCloudInfoHUD(this.FileListPanel.GetChild(0));
		UIEventListener uieventListener4 = UIEventListener.Get(this.localFileHud.Self);
		uieventListener4.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener4.onClick, new UIEventListener.VoidDelegate(this.onClick));
		UIEventListener uieventListener5 = UIEventListener.Get(this.cloudFileHud.Self);
		uieventListener5.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener5.onClick, new UIEventListener.VoidDelegate(this.onClick));
		this.uploadButtonLabel = this.UploadButton.GetChild(1).GetComponent<UILabel>();
		this.downloadButtonLabel = this.DownloadButton.GetChild(1).GetComponent<UILabel>();
		this.overWriteDialogDespLabel = this.OverWriteDialog.GetChild(0).GetComponent<UILabel>();
		UIEventListener uieventListener6 = UIEventListener.Get(this.OverWriteDialog.GetChild(1));
		uieventListener6.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener6.onClick, new UIEventListener.VoidDelegate(this.onClick));
		UIEventListener uieventListener7 = UIEventListener.Get(this.OverWriteDialog.GetChild(2));
		uieventListener7.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uieventListener7.onClick, new UIEventListener.VoidDelegate(this.onClick));
		this.successfulAccessLabel = this.SuccessfulAccessPanel.GetChild(0).GetComponent<UILabel>();
	}

	private static String SubMenuGroupButton = "Cloud.SubMenu";

	private static String LocalFileGroupButton = "Cloud.LocalFile";

	private static String CloudFileGroupButton = "Cloud.CloudFile";

	private static String ConfirmDialogGroupButton = "Cloud.Choice";

	public GameObject HelpPanel;

	public GameObject FileListPanel;

	public GameObject InfoPanel;

	public GameObject LoadingPreviewDialog;

	public GameObject OverWriteDialog;

	public GameObject LoadingAccessDialog;

	public GameObject SuccessfulAccessPanel;

	public GameObject InfoButton;

	public GameObject UploadButton;

	public GameObject DownloadButton;

	public GameObject ScreenFadeGameObject;

	private GameObject slotGameObject;

	private UISlider progressBar;

	private UILabel helpTitleLabel;

	private UILabel helpSlotLabel;

	private UILabel syncStatusLabel;

	private UILabel successfulAccessLabel;

	private UISprite[] arrowSprites;

	private CloudUI.FileCloudInfoHUD localFileHud;

	private CloudUI.FileCloudInfoHUD cloudFileHud;

	private UILabel infoLabel;

	private UILabel uploadButtonLabel;

	private UILabel downloadButtonLabel;

	private UILabel overWriteDialogDespLabel;

	private UILocalize loadingAccessLocalize;

	private Dialog saveCorruptDialog;

	private Single timeCounter;

	private CloudUI.Sync syncState;

	private CloudUI.State currentState;

	private Boolean isSyncSuccess;

	private CloudUI.Sync corruptFile;

	private Boolean isLocalFileExist;

	private Boolean isCloudFileExist;

	private Double latestLocalTime;

	private Double latestCloudTime;

	private SharedDataPreviewSlot localPreview;

	private SharedDataPreviewSlot cloudPreview;

	private struct FileCloudInfoHUD
	{
		public FileCloudInfoHUD(GameObject go)
		{
			this.Self = go;
			this.Container = go.GetChild(0);
			this.Button = go.GetComponent<ButtonGroupState>();
			this.LatestTimeLabel = go.GetChild(0).GetChild(0).GetComponent<UILabel>();
			this.LeaderNameLabel = go.GetChild(0).GetChild(1).GetComponent<UILabel>();
			this.TimeLabel = go.GetChild(0).GetChild(3).GetComponent<UILabel>();
			this.LeaderLvLabel = go.GetChild(0).GetChild(5).GetComponent<UILabel>();
			this.GilLabel = go.GetChild(0).GetChild(7).GetComponent<UILabel>();
			this.FileNoLabel = go.GetChild(1).GetComponent<UILabel>();
			this.EmptySlotTextGameObject = go.GetChild(2);
			this.EmptySlotTextLabel = go.GetChild(2).GetComponent<UILabel>();
			this.LocationNameLabel = go.GetChild(0).GetChild(9).GetChild(0).GetComponent<UILabel>();
			this.CharacterAvatarList = new UISprite[]
			{
				go.GetChild(0).GetChild(8).GetChild(0).GetComponent<UISprite>(),
				go.GetChild(0).GetChild(8).GetChild(1).GetComponent<UISprite>(),
				go.GetChild(0).GetChild(8).GetChild(2).GetComponent<UISprite>(),
				go.GetChild(0).GetChild(8).GetChild(3).GetComponent<UISprite>()
			};
		}

		public GameObject Self;

		public GameObject Container;

		public ButtonGroupState Button;

		public UILabel LatestTimeLabel;

		public UILabel LeaderNameLabel;

		public UILabel LeaderLvLabel;

		public UILabel GilLabel;

		public UILabel TimeLabel;

		public UILabel LocationNameLabel;

		public GameObject EmptySlotTextGameObject;

		public UILabel EmptySlotTextLabel;

		public UILabel FileNoLabel;

		public UISprite[] CharacterAvatarList;
	}

	public enum Sync
	{
		Upload,
		Download,
		None
	}

	public enum State
	{
		LoadPreview,
		Sync,
		None
	}
}

redpajama_set_name: RedPajamaGithub


Are Your Browser Trusted CAs Considered Vritical Vendors?
Your web browsers, by default, trust many organizations you're probably not familiar with. Many are located in countries overseas, some in not so friendly areas of the world. But what diligence has your organization done on these companies, if any? This may represent a security hole that doesn't show up in your risk assessments.
A Certificate Authority (CA) is an organization or system which has the ability to digitally sign SSL certificates. These are the governing bodies of the SSL encryption that is used nearly everywhere on the web for transferring sensitive data securely. By default your browser trusts CAs like Microsoft, GoDaddy and others. Without these trust relationships you'd have to manually configure them or hit 'OK' every time you went to a SSL site. So default Trusted CAs are a good thing.
But that means these organizations are trusted implicitly with the security of some of your organization's most protected online transactions. What due diligence have you done on these providers that your browser trusts? Have you determined the sufficiency of their SAS 70 report? Do you know whether or not they report to you any data breaches which may have affected your confidential transmissions? Do you really want to explicitly trust foreign-owned companies with any information that may interest their government?
For some organizations this may be tin foil hat material. For others, though, this may pose a real security risk. If you're interested in learning more about this kind of thing there is plenty of material published on SSL Certificate attacks. If these are combined with more traditional attacks such as DNS poisoning, man-in-the-middle, ARP spoofing and others, they could become a very real threat to your organization.


This week is dedicated to Jennifer Ashley and her new book Death Below Stairs. Click the link for my full review and more information about the book. Find out more about the personal lives of authors including their signature drink, favorite decade in fashion history, and the artists that inspire them in my author interview series.
Author I draw inspiration from: So many. Terry Pratchett for one. Sad that he's no longer with us.
Author Interview with Jennifer Ashley: the author she draws inspiration from.
Book character I'd like to be stuck in an elevator with: Daniel McAdam from my Below Stairs mysteries, because he'd probably know how to quickly get us out.
The moment I knew I wanted to become an author: When I was eight and realized that novels were other people's make-believe written down. I was good at make-believe, so why not write it down?
Hardback, paperback, ebook or audiobook: I like them all. I just want the story.
Pen & paper or computer: Both. I can compose in a notebook or with a computer, but computer only from the second draft on.
Book character I think I'd be best friends with: No clue! Too many to choose from.


text:
Global coronavirus death toll surpasses 2 million
2020 becomes deadliest year in U.S. history, CDC finds
Coronavirus | Updated Jan 16, 2021
By Tim Darnell, Atlanta Journal-Constitution
The global coronavirus pandemic has claimed more 2 million lives around the world, according to the latest numbers from Johns Hopkins University.
As of 12:45 p.m ET Jan. 15, 2,000,905 people have succumbed to the deadly virus since the pandemic began almost a year ago.
The U.S. continues to lead the world in confirmed cases — more than 23 million — and deaths, with almost than 390,000. Globally, more than 93 million cases of the coronavirus have been reported.
The British government has banned travel from South America and Portugal to ensure a new variant of COVID-19 found in Brazil doesn't derail the U.K.'s vaccination program, although there are no signs the variant has reached the country, Britain's top transportation official said.
U.K. Transport Secretary Grant Shapps said the entry ban, which took effect Friday morning, was extended to passengers arriving from Portugal because many people who come to Europe from South America travel through Portugal.
ExploreAJC's full coronavirus coverage
"We don't have cases at the moment, but this is a precautionary approach," Shapps told the BBC. "We want to make sure that we do everything possible so that vaccine rollout can continue and make sure that it's not disturbed by other variants of this virus."
The announcement comes just a few weeks after many countries banned travel from the U.K. following the discovery in England of another, more contagious variant of the virus that has been blamed for a sharp rise in COVID-19 cases and deaths. Scientists have said there is no indication the U.K. variant reacts any differently to coronavirus vaccines.
On Friday, U.S. pharmaceutical company Pfizer confirmed it is temporarily reducing deliveries to Europe of its COVID-19 vaccine while it upgrades production capacity to 2 billion doses per year.
The EU Commission chief said she'd immediately called Pfizer's CEO. But in an indication the issue might go beyond Europe, Canada's government said it was also affected.
Line Fedders, a spokeswoman for Pfizer Denmark, said that to meet the new 2 billion dose target Pfizer is upscaling production at its plant in Puurs, Belgium, which "presupposes adaptation of facilities and processes at the factory which requires new quality tests and approvals from the authorities."
"As a consequence, fewer doses will be available for European countries at the end of January and the beginning of February," she said. "This temporary reduction will affect all European countries."
Germany's Health Ministry said Friday Pfizer had informed the European Commission, which was responsible for ordering vaccines from the company, that it won't be able to fulfill all of the promised deliveries in the coming three to four weeks.
Pfizer's Belgian plant supplies all shots delivered outside the United States, including Canada where procurement minister Anita Anand said Friday that the U.S. drug-maker is temporarily reducing deliveries because of issues with its European production lines. While the company said it still was able to deliver four million doses by the end of March, that is no longer guaranteed, she said.
Canada has received just 380,000 doses of the vaccine so far and was supposed to get another 400,000 this month, and is expecting almost two million doses in February.
Moderna COVID-19 vaccine is the second vaccine to be green-lit by regulators in Europe, following the Pfizer-BioNTech COVID-19 vaccine.
A global team of researchers arrived Thursday in the Chinese city where the coronavirus pandemic was first detected to conduct a politically sensitive investigation into its origins amid uncertainty about whether Beijing might try to prevent embarrassing discoveries.
The group sent to Wuhan by the World Health Organization was approved by President Xi Jinping's government after months of diplomatic wrangling that prompted an unusual public complaint by the head of WHO.
Scientists suspect the virus that has killed more than 1.9 million people since late 2019 jumped to humans from bats or other animals, most likely in China's southwest. The ruling Communist Party, stung by complaints it allowed the disease to spread, says the virus came from abroad, possibly on imported seafood, but international scientists reject that.
ExploreUnited Nations marks 75th anniversary under cloud of coronavirus
Fifteen team members were to arrive in Wuhan on Thursday, but two tested positive for coronavirus antibodies before leaving Singapore and were being retested there, WHO said in a statement on Twitter.
The rest of the team arrived at the Wuhan airport and walked through a makeshift clear plastic tunnel into the airport. The researchers, who wore face masks, were greeted by airport staff in full protective gear, including masks, goggles and full body suits.
They will undergo a two-week quarantine as well as a throat swab test and an antibody test for COVID-19, according to CGTN, the English-language channel of state broadcaster CCTV. They are to start working with Chinese experts via video conference while in quarantine.
The team includes virus and other experts from the United States, Australia, Germany, Japan, Britain, Russia, the Netherlands, Qatar and Vietnam.
A government spokesman said this week they will "exchange views" with Chinese scientists but gave no indication whether they would be allowed to gather evidence.
China rejected demands for an international investigation after the Trump administration blamed Beijing for the virus's spread, which plunged the global economy into its deepest slump since the 1930s.
After Australia called in April for an independent inquiry, Beijing retaliated by blocking imports of Australian beef, wine and other goods.
One possibility is that a wildlife poacher might have passed the virus to traders who carried it to Wuhan, one of the WHO team members, zoologist Peter Daszak of the U.S. group EcoHealth Alliance, told The Associated Press in November.
A single visit by scientists is unlikely to confirm the virus's origins; pinning down an outbreak's animal reservoir is typically an exhaustive endeavor that takes years of research including taking animal samples, genetic analysis and epidemiological studies.
"The government should be very transparent and collaborative," said Shin-Ru Shih, director at the Research Center for Emerging Viral Infections at Taiwan's Chang Gung University.
The Chinese government has tried to stir confusion about the virus's origin. It has promoted theories, with little evidence, that the outbreak might have started with imports of tainted seafood, a notion rejected by international scientists and agencies.
"The WHO will need to conduct similar investigations in other places," an official of the National Health Commission, Mi Feng, said Wednesday.
Some members of the WHO team were en route to China a week ago but had to turn back after Beijing announced they hadn't received valid visas.
That might have been a "bureaucratic bungle," but the incident "raises the question if the Chinese authorities were trying to interfere," said Adam Kamradt-Scott, a health expert at the University of Sydney.
A possible focus for investigators is the Wuhan Institute of Virology in the city where the outbreak first emerged. One of China's top virus research labs, it built an archive of genetic information about bat coronaviruses after the 2003 outbreak of Severe Acute Respiratory Syndrome.
According to WHO's published agenda for its origins research, there are no plans to assess whether there might have been an accidental release of the coronavirus at the Wuhan lab, as some American politicians, including President Donald Trump, have claimed.
A "scientific audit" of Institute records and safety measures would be a "routine activity," said Mark Woolhouse, an epidemiologist at the University of Edinburgh. He said that depends on how willing Chinese authorities are to share information.
"There's a big element of trust here," Woolhouse said.
An AP investigation found the government imposed controls on research into the outbreak and bars scientists from speaking to reporters.
The coronavirus's exact origin may never be traced because viruses change quickly, Woolhouse said.
A year after the virus was first detected in Wuhan, the city is now bustling, with few signs that it was once the epicenter of the outbreak in China. But some residents say they're still eager to learn about its origin.
"We locals care about this very much. We are curious where the pandemic came from and what the situation was. We live here so we are keen to
know," said Qin Qiong, owner of a chain of restaurants serving hot and sour noodles. She said she trusts in science to solve the question.
Although it may be challenging to find precisely the same COVID-19 virus in animals as in humans, discovering closely related viruses might help explain how the disease first jumped from animals and clarify what preventive measures are needed to avoid future epidemics.
Scientists should focus instead on making a "comprehensive picture" of the virus to help respond to future outbreaks, Woolhouse said.
"Now is not the time to blame anyone," Shih said. "We shouldn't say, it's your fault."

redpajama_set_name: RedPajamaCommonCrawl


text:
Charges: Mankato Man Struck 13 Year Old Daughter Until She Blacked Out, Spit Chips In Her Face
February 22, 2019 10:29AM CST
(Mankato, MN) – A Mankato man is facing charges, accused of using excessive force on his 13-year-old daughter.
Bradley Alan Suess, 36, was charged in Blue Earth County Court Thursday with felony malicious punishment of a child and gross misdemeanor domestic assault following an investigation of the December 14th incident.
According to the complaint, police were notified by a school social worker of an email she'd received from a student. The girl had reportedly been assaulted by her father while the girl's stepmother watched. The email said Suess had kicked the girl, dragged her off the bed, hit her in the head, then punched and kicked her until she briefly blacked out. The girl also said in the email that Suess had spit in her face and told her she was a waste of oxygen. Suess threatened the girl that things would "get worse" for her if she contacted the police.
Court documents say Suess appeared frustrated and annoyed when an officer came to his home for a welfare check, and refused to allow police into the home. When calling his daughter to speak to the officer, Suess yelled at the girl to "get your f**king ass down here," according to the complaint.
The girl told police she had a headache from the incident and cried as she recounted what she'd written in the email, according to the complaint.
Suess admitted to the officer that he had walked into the girl's bedroom, kicked her "coloring s**t," pulled her off the bed and struck her several times in the face before spitting a mouthful of chewed up chips at her while she laid on the ground.
Police requested that the girl be taken to her grandparents for her safety, which Suess refused. Human Services was contacted and the girl was removed from the residence and placed in another home.
Suess has prior convictions for assault, in 2001, 2007, and 2014.


Kiara is a fun loving, smart and sassy Southern waitress who has only dated one woman her entire life: Brittany. Kiara and Brittany met online and have been best friends and lovers for seven years. Raised in a very religious family, Kiara has kept her seven year relationship a secret from everyone in her life except her extremely close friends, even though she has a "Britteny" tattoo. Kiara's conservative parents believe that being gay is wrong and Kiara even agrees with this perspective.
Unfortunately, Kiara's relationship has been rocky as there has been a history of Brittany not being faithful. Kiara has never strayed although she has indeed been curious about who else is out there. Even though the two women have a strong connection Kiara knows something is missing… she isn't sure if she is meant to be with a woman.
Kiara is slowly coming to terms that she might be attracted to men. She believes that in order to make a final decision about her relationship with Brittany she needs to explore being with a man. She has never kissed, hugged, or even talked or flirted with a man before. She is attracted to Caucasian men with nice eyes and an easy going and humorous personality. She has never explored this desire because she doesn't want to hurt Brittany and ruin the connection they have had over the past seven years. Her parents would be thrilled if she started to date a man, especially if he is a Christian man. Kiara needs to know what it is to be with a man as well as another person as she has never been with anyone besides Brittany. To Kiara, this experience would not only answer questions about her current relationship but about her own sexual orientation and where she belongs in the world.


It is not easy to work during holidays, however I`ve managed to make 10 new Genuine Tree Profiles. All of them represent the Violet level of ActiveBase Art system and now wait to be colored in my studio. Looking forward to that moment!
... to gain the aim!


The C. T. Bauer College of Business at the University of Houston seeks qualified applicants for two tenure-track Assistant Professor positions in the Department of Finance, starting in the fall of 2018. Candidates must hold a Ph.D. in finance or economics (or A.B.D.) and exhibit promise for high-quality research. The University of Houston is an Equal Opportunity / Affirmative Action institution. Veterans, minorities, women, and persons with disabilities are encouraged to apply.
Interviews will be conducted at the American Finance Association meetings in Philadelphia in January 2018.


text:
Jones Beach Theater Upgrades Security for Concerts
Music, Movies & Entertainment, Local News, Seasonal & Current Events
By erin__l Published: July 17 2019
The Jones Beach Theater recently took strides in upgrading their safety measures for concerts.
The security at Jones Beach Theater just got more tight with new additions to ensure the safety of all concertgoers and attendees. As a way to upgrade the security at the Jones Beach Theater, concrete balls were installed by state officials. In addition, Delta barriers were installed to prevent cars from driving through. The Jones Beach Theater will now also have a security screening area including metal detectors to check the belongings of attendees, similar to what the bigger venues such as Madison Square Garden and Barclays Center have.
The total cost of the project is around $290,000 which is funded by both LIVE nation and New York State Parks. The goal of implementing new security measures is to prevent any incidents from occurring in the future, protecting the safety of everyone at the theater.
Bay Street Theater to Eliminate Plastic Water Bottles and Straws
Adelphi University presents Small States Peace and Security
The Last Night of Ballyhoo June 28 - July 24 at Bay Street Theater Now in Rehearsal
Cuomo and Christie Bring Together Bi-State Group of Law Enforcement and Security Agencies to Enhance Preparedness and Coordination
2015 Bethpage Air Show at Jones Beach State Park Corporate Hospitality Chalets Available
Legislator Anker Announces Added Bus Service to Sound Beach Community
Legislator Spencer Secures Additional $3.1 Million Grant For Northport STP Upgrades
Rep. Kathleen Rice Announces $1.2 Million in Security Grant Funding for Eight Local Nonprofits
Bay Street Theater Announces The 2018 Mainstage Summer Season
Governor Cuomo Announces More Free Concerts at State Fair This Summer
Subject: LongIsland.com - Your Name sent you Article details of "Jones Beach Theater Upgrades Security for Concerts"


Browse listings of Member members here at Mississippi Flirt that are associated with Little People. Meeting others who have similar interests is an ideal way to find things to do once you are dating. Create a 100% Free Account to Go out Today!
If you wish to talk to any user on Mississippi Flirt, you must create a Totally Free Account to verify you are not a fraud. Once you verified you are scammer, you can start talking to to find out if they are interested in you. It's very easy to meet someone. Just send a flirt or quick message and wait for them to respond. After they respond and there is a mutual interest, you can meet to find out if there happens to be a genuine connection. Don't delay! Open up your free profile below and get started today!


text:
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Deleting model 'StandardStatsPageTag'
        db.delete_table(u'calc_standardstatspagetag')

        # Deleting model 'Tag'
        db.delete_table(u'calc_tag')

        # Adding model 'WorkflowDataRevision'
        db.create_table(u'calc_workflowdatarevision', (
            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
            ('created', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now, blank=True)),
            ('modified', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now, blank=True)),
            ('page', self.gf('django.db.models.fields.related.ForeignKey')(related_name='workflow_data_revisions', to=orm['calc.WorkflowPage'])),
        ))
        db.send_create_signal(u'calc', ['WorkflowDataRevision'])

        # Deleting field 'CreateColumnByConcatenate.column_2'
        db.delete_column(u'calc_createcolumnbyconcatenate', 'column_2')

        # Deleting field 'CreateColumnByConcatenate.column_1'
        db.delete_column(u'calc_createcolumnbyconcatenate', 'column_1')

        # Deleting field 'CreateColumnByConcatenate.column_3'
        db.delete_column(u'calc_createcolumnbyconcatenate', 'column_3')

        # Deleting field 'CreateColumnByConcatenate.column_4'
        db.delete_column(u'calc_createcolumnbyconcatenate', 'column_4')

        # Adding field 'CreateColumnByConcatenate.columns_to_concatenate'
        db.add_column(u'calc_createcolumnbyconcatenate', 'columns_to_concatenate',
                      self.gf('django.db.models.fields.CharField')(default='', max_length=500),
                      keep_default=False)

        # Removing M2M table for field tag on 'CreateColumnByConcatenate'
        db.delete_table(db.shorten_name(u'calc_createcolumnbyconcatenate_tag'))

    def backwards(self, orm):
        # Adding model 'StandardStatsPageTag'
        db.create_table(u'calc_standardstatspagetag', (
            ('content_object', self.gf('modelcluster.fields.ParentalKey')(related_name='group_by_field_names_items', to=orm['calc.StandardStats'])),
            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name=u'calc_standardstatspagetag_items', to=orm['taggit.Tag'])),
            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
        ))
        db.send_create_signal(u'calc', ['StandardStatsPageTag'])

        # Adding model 'Tag'
        db.create_table(u'calc_tag', (
            ('tag', self.gf('django.db.models.fields.CharField')(max_length=10, unique=True)),
            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
        ))
        db.send_create_signal(u'calc', ['Tag'])

        # Deleting model 'WorkflowDataRevision'
        db.delete_table(u'calc_workflowdatarevision')

        # Adding field 'CreateColumnByConcatenate.column_2'
        db.add_column(u'calc_createcolumnbyconcatenate', 'column_2',
                      self.gf('django.db.models.fields.CharField')(default=1, max_length=50),
                      keep_default=False)

        # Adding field 'CreateColumnByConcatenate.column_1'
        db.add_column(u'calc_createcolumnbyconcatenate', 'column_1',
                      self.gf('django.db.models.fields.CharField')(default=1, max_length=50),
                      keep_default=False)

        # Adding field 'CreateColumnByConcatenate.column_3'
        db.add_column(u'calc_createcolumnbyconcatenate', 'column_3',
                      self.gf('django.db.models.fields.CharField')(default=1, max_length=50),
                      keep_default=False)

        # Adding field 'CreateColumnByConcatenate.column_4'
        db.add_column(u'calc_createcolumnbyconcatenate', 'column_4',
                      self.gf('django.db.models.fields.CharField')(default='', max_length=50),
                      keep_default=False)

        # Deleting field 'CreateColumnByConcatenate.columns_to_concatenate'
        db.delete_column(u'calc_createcolumnbyconcatenate', 'columns_to_concatenate')

        # Adding M2M table for field tag on 'CreateColumnByConcatenate'
        m2m_table_name = db.shorten_name(u'calc_createcolumnbyconcatenate_tag')
        db.create_table(m2m_table_name, (
            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
            ('createcolumnbyconcatenate', models.ForeignKey(orm[u'calc.createcolumnbyconcatenate'], null=False)),
            ('tag', models.ForeignKey(orm[u'calc.tag'], null=False))
        ))
        db.create_unique(m2m_table_name, ['createcolumnbyconcatenate_id', 'tag_id'])

    models = {
        u'auth.group': {
            'Meta': {'object_name': 'Group'},
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
        },
        u'auth.permission': {
            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
        },
        u'auth.user': {
            'Meta': {'object_name': 'User'},
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
        },
        u'calc.baseworkflowsteppage': {
            'Meta': {'object_name': 'BaseWorkflowStepPage', '_ormbases': [u'wagtailcore.Page']},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'})
        },
        u'calc.createcolumnbyconcatenate': {
            'Meta': {'object_name': 'CreateColumnByConcatenate', '_ormbases': [u'calc.BaseWorkflowStepPage']},
            u'baseworkflowsteppage_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['calc.BaseWorkflowStepPage']", 'unique': 'True', 'primary_key': 'True'}),
            'columns_to_concatenate': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'new_column_name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
        },
        u'calc.createcolumnbylookup': {
            'Meta': {'object_name': 'CreateColumnByLookup', '_ormbases': [u'calc.BaseWorkflowStepPage']},
            u'baseworkflowsteppage_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['calc.BaseWorkflowStepPage']", 'unique': 'True', 'primary_key': 'True'}),
            'create_column_using': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'field_in_lookup_table': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'field_in_workflow_data': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'new_column_name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
        },
        u'calc.createcustomformulacolumn': {
            'Meta': {'object_name': 'CreateCustomFormulaColumn', '_ormbases': [u'calc.BaseWorkflowStepPage']},
            u'baseworkflowsteppage_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['calc.BaseWorkflowStepPage']", 'unique': 'True', 'primary_key': 'True'}),
            'formula': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'new_column_name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
        },
        u'calc.experimentindexpage': {
            'Meta': {'object_name': 'ExperimentIndexPage', '_ormbases': [u'wagtailcore.Page']},
            'intro': ('wagtail.wagtailcore.fields.RichTextField', [], {'blank': 'True'}),
            u'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'})
        },
        u'calc.experimentpage': {
            'Meta': {'object_name': 'ExperimentPage', '_ormbases': [u'wagtailcore.Page']},
            'body': ('wagtail.wagtailcore.fields.RichTextField', [], {'blank': 'True'}),
            'intro': ('wagtail.wagtailcore.fields.RichTextField', [], {'blank': 'True'}),
            u'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'})
        },
        u'calc.experimentrelatedlink': {
            'Meta': {'ordering': "['sort_order']", 'object_name': 'ExperimentRelatedLink'},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'link_document': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': u"orm['wagtaildocs.Document']"}),
            'link_page': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': u"orm['wagtailcore.Page']"}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'page': ('modelcluster.fields.ParentalKey', [], {'related_name': "'related_links'", 'to': u"orm['calc.ExperimentPage']"}),
            'sort_order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
        },
        u'calc.filterorlabel': {
            'Meta': {'object_name': 'FilterOrLabel', '_ormbases': [u'calc.BaseWorkflowStepPage']},
            u'baseworkflowsteppage_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['calc.BaseWorkflowStepPage']", 'unique': 'True', 'primary_key': 'True'}),
            'filter_options': ('django.db.models.fields.CharField', [], {'default': "'kp'", 'max_length': '2'}),
            'label': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
            'label_field_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
            'query': ('django.db.models.fields.CharField', [], {'max_length': '500'})
        },
        u'calc.standardstats': {
            'Meta': {'object_name': 'StandardStats', '_ormbases': [u'calc.BaseWorkflowStepPage']},
            u'baseworkflowsteppage_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['calc.BaseWorkflowStepPage']", 'unique': 'True', 'primary_key': 'True'}),
            'group_by_field': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
            'include_max': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
            'include_mean': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
            'include_min': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
            'include_standard_deviation': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
            'include_standard_error': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'})
        },
        u'calc.workflowdatarevision': {
            'Meta': {'ordering': "('-modified', '-created')", 'object_name': 'WorkflowDataRevision'},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'page': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'workflow_data_revisions'", 'to': u"orm['calc.WorkflowPage']"})
        },
        u'calc.workflowindexpage': {
            'Meta': {'object_name': 'WorkflowIndexPage', '_ormbases': [u'wagtailcore.Page']},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'intro': ('wagtail.wagtailcore.fields.RichTextField', [], {'blank': 'True'}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'})
        },
        u'calc.workflowpage': {
            'Meta': {'object_name': 'WorkflowPage', '_ormbases': [u'wagtailcore.Page']},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'intro': ('wagtail.wagtailcore.fields.RichTextField', [], {'blank': 'True'}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'})
        },
        u'calc.workflowsourcedatafile': {
            'Meta': {'ordering': "['sort_order']", 'object_name': 'WorkflowSourceDataFile'},
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
            'page': ('modelcluster.fields.ParentalKey', [], {'related_name': "'source_data_files'", 'to': u"orm['calc.WorkflowPage']"}),
            'sort_order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
            'source_data_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': u"orm['wagtaildocs.Document']"})
        },
        u'calc.workflowstep': {
            'Meta': {'ordering': "['sort_order']", 'object_name': 'WorkFlowStep'},
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'sort_order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
        },
        u'contenttypes.contenttype': {
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
        },
        u'wagtailcore.page': {
            'Meta': {'object_name': 'Page'},
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': u"orm['contenttypes.ContentType']"}),
            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
            'expire_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
            'expired': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
            'go_live_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
            'has_unpublished_changes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'live': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_pages'", 'null': 'True', 'to': u"orm['auth.User']"}),
            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
            'search_description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
            'seo_title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
            'show_in_menus': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
            'url_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
        },
        u'wagtaildocs.document': {
            'Meta': {'object_name': 'Document'},
            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
            'uploaded_by_user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
        }
    }

    complete_apps = ['calc']


"When people pay taxes, they want the money to go to public services, not to push up corporate profits or executive bonuses." — James Clancy, National President of the National Union of Public and General Employees (NUPGE).
"The government should act immediately on the Auditor's recommendations and provide the direction and resources to address the problems she has highlighted." — Dean Purdy, BCGEU Vice-President, Corrections and Sheriff Services.
"The employer has an obligation to take measures to minimize the risk of violence in the workplace. Staffing shortages can put the Correctional Officers and the inmates at increased risk." — Joan Jessome, NSGEU President.
"Experience with prison privatization in other jurisdictions shows that contracting out food services costs more, not less," according to SGEU President Bob Bymoen.
"A recent event at Her Majesty's Penitentiary (HMP) might have been a life threatening situation if not for the instinctive and quick reaction of experienced correctional officers, who should be commended for their handling of an extremely volatile situation, with few resources." - Carol Furlong, NAPE President.
Report shows that many people supervised by for-profit probation companies wouldn't be on probation to begin with if they had more money.


Ilan Stavans is the Lewis-Sebring Professor in Latin American and Latino Culture at Amherst College. He is an internationally known, award-winning cultural critic, linguist, translator, public speaker, editor, short-story writer, and TV host, whose New York Times best-selling work focuses on language, identity, politics, and history.
Born in the Philippines, Grace Talusan is the 2017 Restless Books Prize winner for New Immigrant Writing for Nonfiction. She is the author of the memoir, The Body Papers, a courageous memoir that explores immigration, the trauma of abuse and the female body.


ایجاد سریع دارایی های محیطی یک مهارت مهم برای هر هنرمند دیجیتال است، خصوصا در بازی ها و انیمیشن ها برای تکمیل پروژه هایی با جزئیات بیشتر و تکامل یافته اهمیت زیادی دارد. در این دوره با ایجاد صخره ها، درختان، اجزای طبیعی ارگانیک برای انیمیشن و توسعه بازی، تکنیک های مهم در ۳ds Max، ایجاد چشم انداز مانند تخته سنگ، صخره های های بزرگ و درختان بزرگ، ایجاد چمن ها و شاخ و برگ درخت برای پر کردن بالای صحنه و غیره آشنا می شوید.
نرم افزار مورد نیاز: Zbrush و ۳ds Max.
Stylized Forest Sculpting in ZBrushPublisher: PluralsightAuthor: Alex JerjominDuration: 3h 15mLevel: IntermediateLink:https://www.pluralsight.com/courses/zbrush-stylized-forest-sculptingIn this course, we will cover how to sculpt Stylized Rocks and Trees inside ZBrush. We will cover the best brushes, alphas, and techniques to use for best results when it comes to stylized nature.
Being able to quickly create environment assets is an important skill for any digital artist, but especially in games and animation to help complete a stylized, completed project. In this course, Stylized Forest Sculpting in Zbrush, you'll learn how to Sculpt stylized rocks, trees, and organic natural props for video game development and animation. First, you'll explore the blackout technique inside 3ds Max to formulate the base of what your piece will look like. Then, you'll sculpt the landscape assets, such as a cliff face, large rocks, and a large tree. Next, you'll continue drilling into details by creating stylized grass and tree foliage to populate the top of your piece. Lastly, you'll polish up our hero tree by sculpting bark and the root structure, thus creating several unique game assets as well as a finished art piece. By the end of this ZBrush and 3ds Max tutorial, you'll be able to create your own stylized assets for video games or animation. Software required: Zbrush and 3ds Max.


1st floor: a large yard in front of the house, planted with many cool trees. A spacious living room with TV. A separate area for motorbikes. Large and comfortable kitchen. One bedroom has airy windows. A bathroom and a orchid garden in behind.
2nd floor: common living area with sofa set. 2 airy bedrooms with plenty of light, one room has a green view balcony, another room has window with a papaya tree outside. 1 empty room, 1 shared bathroom.
The area is convenient transportation, near Vincom, Han River bridge, Pham Van Dong Street.


The new product under my consideration is basically a software, which helps people to enjoy movies from different languages. The software under my consideration may have the ability to translate the original language of the movie to the viewer's native language. It requires computer and other accessories like high definition monitor of big size and an advanced sound card or audio system for deriving maximum enjoyment out of this product. The success of the product may depend on the quality of the audio visual equipments connected to the computer. One of the major advantages of this product is that people all over the world can enjoy movies made in other languages in their language itself. This product does not require any license agreements and the user can use the product as many times he likes. Since this product is software, it is easy to handle and anybody with basic computer knowledge can use it. It can be used anytime anywhere if the user possess a laptop or desktop. Moreover it can be used in the latest advanced cell phones as well.
Target market should be analyzed thoroughly in order to formulate marketing strategies. Size of the market segments identified, possible growth rate, competition in the market, attainable market share, sales potential and the expected profit etc should be evaluated before introducing the product in the market (Net MBA, 2007). Organizational strategies must be formulated based on the feedback received from the market. For example, since this product is computer software, some people may face problems in using it. Organization should formulate strategies to support such customers through telephone or online. After sales support is an important aspect which determine the success and failure of a new product in the market. It is quite possible that during the initial stages of the introduction of the product, lots of feedbacks the company may receive about the product. Beta testing is necessary for each new product in order to make it faultless. The organization should be ready to make necessary changes in the product based on the initial feedback received from the market in order to make it more acceptable to the customers.
The success of a product in the market depends on the answers of three questions; Is it real, Can you win and is it worth it.
The answer to the first question is not a positive one in this case. The product is a real one whereas the effects or the utility of the product is a virtual one. At the same time, it is impossible to develop a product which provides real movie pleasure as the atmosphere in the theatre cannot be manipulated inside a room. Under such circumstances, even if this product gives only the virtual pleasure, it will fit in the market. The product definitely develops a real market since many of the movie lovers are currently looking for one such product.
The answer to the second question can you win is "Definitely Yes". There are no such products like the one mentioned above in the market now. In other words, virtually no competition will be there for this product. At the same time the demand might be huge because of the enormous interests of people in enjoying movies form different countries in their own languages. Since this product is software, the cost might be slightly high. But at the same time, the company can set the price of this product because of the absence of any other similar product in the market.
The answer to the third question is also positive. This product is definitely worth both for the customers and the product developers. The product developers may not have any manufacturing cost unlike many other physical products. Once the software is developed it can be easily copied to the disc and the product manufacturing cost is negligible. At the same time, since it is software, anybody can copy it on discs just like any other software. In other words, people will use pirated copies of this software like many other software. So the company should take necessary precautions to avoid duplication of this software.
Branding of a product is important for the successful movement of it in the market. Brand is a name or symbol which is used by the companies to differentiate them from others. "A well-known brand is generally regarded as one that people will recognise, often even if they do not know about the company or its products/services. These are usually the businesses name or the name of a product, although it can also include the name of a feature or style of a product" (What is Branding?, 2009). The above software should need an attractive branding for its smooth selling in the market. It is better to use an attractive visual or a caption for the branding of this product. Most of the companies like Microsoft, IBM, Virgin, etc use text logos for their branding purpose in order to market their product successfully. On the other hand, Apple uses an apple with a bite as their corporate logo in order to spread their brand. Samsung uses a combination of text and symbol for their branding purpose. Movie translating software can also follow the path of Samsung. They can use a combination of image and text in building their logo for brand development purpose. It is better to use an image as the background and an attractive text at the foreground. Brand development can be done through advertisements and sales promotions. Internet ads might be more useful as this product is software oriented one.


text:
Tag: jazz education
Stan's Stella Sequence
Yesterday, I discovered a sequence in Stan Getz's 1952 Clef recording of "Stella by Starlight," (MGC 137). The three-by-three format unfolds as Stan finishes the bridge on his first chorus. Here it is:
If you've studied "Stella," you know that the final 8 bar section of the form contains the intriguing 6-bar harmonic sequence shown below:
As shown here, that harmonic sequence features 3 iterations of 8 beats each, for a total of 24 beats. But Getz begins his amazing melodic sequence 2 beats before the passage shown above, so he needs to fill 26 beats.
The diagram below illustrates the incredible way he accomplishes this Herculean feat. Stan's motif of six eighth-notes covers 3 beats and is repeated three times on each of three starting notes. But on the second iteration of round two, he leaves out a beat. Thus, the total episode comprises 9 + 8 + 9 = 26 beats. Even at 160 beats per minute, Getz is able to execute this monumental feat so smoothly that it sounds effortless.
Continue reading "Stan's Stella Sequence" →
jazz education
jazz licks
jazz phrasing
jazz solos
Learning to Play by Ear: A 1958 Perspective
How does a musician learn to perform thousands of songs in any key without looking at music sheets? How can you improvise over a set of "changes" you've never heard or seen before in a live performance? "New Ears Resolution" has made this a daily reality for me during a 40-year career of recording dates and live performances. But I cannot claim to have created this revolutionary approach to ear training. I learned it during high school while studying with Alvin L. "Al" Learned, founder and president of Hollywood's legendary Westlake College of Music "one of the most important educational institutions for the study of jazz in the post-World War II era." Continue reading "Learning to Play by Ear: A 1958 Perspective" →


text:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!--
    NOTE:: this is a new field type file for PostgreSQL, It has ONLY been
        tested on a new install (hence the name fieldtypepostnew.xml)
        so until you (or someone) tests this on upgrage it should ONLY
        be used for new installation.

    This fieldtype file uses TEXT for ALL VARCHAR type fields, per a tip in
    the PostgreSQL manual:

        Tip:  There are no performance differences between these three
        types, apart from the increased storage size when using the
        blank-padded type. While character(n) has performance advantages
        in some other database systems, it has no such advantages in
        PostgreSQL. In most situations text or character varying
        should be used instead.

    (Section 8.3. Character Types from the PostgreSQL 8.1 manual)

    Therefore this fieldtype file uses TEXT for all of the VARCHAR types, this
    will mean that data for a OfBiz system that uses this file MAY NOT be able
    to load on a system that uses any of the other filetype files (well I have
    not looked at ALL of them but the ones I looked at will not be able to load
    the data).

    This has the other advantage that the java type matches the sql type or at
    least the DB can store anything that java can store (TEXT in PostgreSQL
    can go to 2 Gig)

    Indicator is still a CHAR(1).
-->

<fieldtypemodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/fieldtypemodel.xsd">
  <!-- ===================== field-type-def ==================== -->
    <!-- General Types -->
    <field-type-def type="blob" sql-type="BYTEA" java-type="java.sql.Blob"/>
    <field-type-def type="byte-array" sql-type="BYTEA" java-type="byte[]"/>
    <field-type-def type="object" sql-type="BYTEA" java-type="Object"/>

    <field-type-def type="date-time" sql-type="TIMESTAMPTZ" java-type="java.sql.Timestamp"/>
    <field-type-def type="date" sql-type="DATE" java-type="java.sql.Date"/>
    <field-type-def type="time" sql-type="TIME" java-type="java.sql.Time"/>

    <field-type-def type="currency-amount" sql-type="NUMERIC(18,2)" java-type="java.math.BigDecimal"/>
    <field-type-def type="currency-precise" sql-type="NUMERIC(18,3)" java-type="java.math.BigDecimal"/>
    <field-type-def type="fixed-point" sql-type="NUMERIC(18,6)" java-type="java.math.BigDecimal"/>
    <field-type-def type="floating-point" sql-type="FLOAT8" java-type="Double"/>
    <field-type-def type="numeric" sql-type="NUMERIC(20,0)" java-type="Long"/>

    <field-type-def type="id" sql-type="TEXT" java-type="String"/>
    <field-type-def type="id-long" sql-type="TEXT" java-type="String"/>
    <field-type-def type="id-vlong" sql-type="TEXT" java-type="String"/>

    <field-type-def type="indicator" sql-type="CHAR(1)" sql-type-alias="BPCHAR" java-type="String"/>
    <field-type-def type="very-short" sql-type="TEXT" java-type="String"/>
    <field-type-def type="short-varchar" sql-type="TEXT" java-type="String"/>
    <field-type-def type="long-varchar" sql-type="TEXT" java-type="String"/>
    <field-type-def type="very-long" sql-type="TEXT" java-type="String"/>

    <field-type-def type="comment" sql-type="TEXT" java-type="String"/>
    <field-type-def type="description" sql-type="TEXT" java-type="String"/>
    <field-type-def type="name" sql-type="TEXT" java-type="String"/>
    <field-type-def type="value" sql-type="TEXT" java-type="String"/>

    <!-- Specialized Types -->
    <field-type-def type="credit-card-number" sql-type="TEXT" java-type="String"/>
    <field-type-def type="credit-card-date" sql-type="TEXT" java-type="String"/>
    <field-type-def type="email" sql-type="TEXT" java-type="String"/>
    <field-type-def type="url" sql-type="TEXT" java-type="String"/>
    <field-type-def type="id-ne" sql-type="TEXT" java-type="String"/>
    <field-type-def type="id-long-ne" sql-type="TEXT" java-type="String"/>
    <field-type-def type="id-vlong-ne" sql-type="TEXT" java-type="String"/>
    <field-type-def type="tel-number" sql-type="TEXT" java-type="String"/>
</fieldtypemodel>


*Ends 5/10/2019. Select apartments only. Restrictions apply. See leasing team for details.
These Princeton, NJ apartments offer tremendous access experience the best of New Jersey.
One of the most loved things about Parc at Princeton Junction's apartments in Princeton is that we're so close to the train from the Princeton Junction Amtrak and New Jersey Transit (NJT) train station. It's minutes from Parc and is an easy, one-hour ride to both New York City and Philadelphia.
For local convenience, there's even a train called "the Dinky", or "PJ&B" (Princeton Junction and Back), that shuttles people back and forth from Princeton Junction to Princeton University, 41 times a day.
Of course, easy access to transportation (the train station and major highways) is just one advantage of living in these superb Princeton apartments. Another is that, despite all the hustle and bustle of commuting and the fantastic local shopping and dining options, you're just minutes from breathtaking country views, trails and outdoor recreation, in both inland and coastal settings.
So, for those who appreciate pastoral settings, beautiful beaches and fun in the great outdoors, Parc at Princeton Junction is the ideal residence. Love hiking, biking, picnicking and more? Head to Cheesequake State Park, just 30 minutes away or keep it closer at Bicentennial Park located in East Brunswick. Then, on the flip side of outdoor enjoyment, a host of coastal destinations are less than an hour away by car, including Ocean Grove Beach, Bayshore Waterfront Park and the Asbury Park Boardwalk.
The same ease of access is true for those who crave more urban ambience in their free time, given the ease of getting into The Big Apple for a slice or The City of Brotherly Love for a cheesesteak, thanks to Amtrak and NJT.
Now that you know Parc at Princeton Junction offers effortless access to city, country and beach—as well as NYC and Philly—there's only one thing to figure out: whether to come take a tour of Parc at Princeton Junction today…or tomorrow.