From 50c66e0f1711bbb6e1a1656e2f43557af91cea24 Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 9 Jan 2014 11:09:19 +0100 Subject: [PATCH 01/15] Changes to make it easier to use and customize the propertygrid from external project --- .../Project/PropertyGrid/PropertyGrid.cs | 6 ++++++ .../Project/PropertyGrid/PropertyGridView.cs | 9 ++++++--- .../Project/Services/CreateComponentTool.cs | 13 ++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index 5884022a92..a5203c289a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -40,9 +40,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid Dictionary nodeFromDescriptor = new Dictionary(); + public Dictionary NodeFromDescriptor { get { return nodeFromDescriptor; } } + public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } + public EventHandler AggregatePropertiesUpdated; + private PropertyGridGroupMode _groupMode; public PropertyGridGroupMode GroupMode @@ -205,6 +209,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } } finally { reloadActive = false; + if (AggregatePropertiesUpdated != null) + AggregatePropertiesUpdated(this, EventArgs.Empty); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs index f4f8ef44b0..bf4affab54 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs @@ -27,13 +27,16 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridView), new FrameworkPropertyMetadata(typeof(PropertyGridView))); } + public PropertyGridView() : this(null) + { + } - public PropertyGridView() + public PropertyGridView(PropertyGrid pg) { - PropertyGrid = new PropertyGrid(); + PropertyGrid = pg??new PropertyGrid(); DataContext = PropertyGrid; } - + private Thumb thumb; public override void OnApplyTemplate() { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 7f130e3945..3d3cc1382f 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -142,9 +142,20 @@ namespace ICSharpCode.WpfDesign.Designer.Services return item; } + public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) + { + CreateComponentTool cct = new CreateComponentTool(createdItem); + return AddItemWithCustomSize(container, cct.CreateItem(container.Context), new Point(0, 0), size); + } + internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem createdItem, Point position) { - var size = ModelTools.GetDefaultSize(createdItem); + return AddItemWithCustomSize(container, createdItem, position, ModelTools.GetDefaultSize(createdItem)); + } + + internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size) + { + PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents( container, new DesignItem[] { createdItem }, From c22443ba71577f5aa882e17cc25305ee3a02f63b Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 23 Jan 2014 10:58:53 +0100 Subject: [PATCH 02/15] Setter methods for implementing a custom HitTestFilterCallback --- .../WpfDesign.Designer/Project/DesignPanel.cs | 17 +++++++++++------ .../Project/PropertyGrid/PropertyGrid.cs | 2 +- .../Project/Services/CreateComponentTool.cs | 6 ++++++ .../Project/Services/ToolService.cs | 7 ++++++- .../WpfDesign/WpfDesign/Project/Tools.cs | 9 +++++++++ 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs index b7af3ec784..dfe6ff2763 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs @@ -86,12 +86,15 @@ namespace ICSharpCode.WpfDesign.Designer return; } // First try hit-testing on the adorner layer. - + bool continueHitTest = true; - + + HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements; + CustomHitTestFilterBehavior = null; if (testAdorners) { + RunHitTest( - _adornerLayer, mousePosition, FilterHitTestInvisibleElements, + _adornerLayer, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); @@ -110,14 +113,14 @@ namespace ICSharpCode.WpfDesign.Designer } }); } - + if (continueHitTest && testDesignSurface) { RunHitTest( - this.Child, mousePosition, FilterHitTestInvisibleElements, + this.Child, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); - + ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; while (obj != null) { @@ -165,6 +168,8 @@ namespace ICSharpCode.WpfDesign.Designer #region Properties + //Set custom HitTestFilterCallbak + public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; } /// /// Gets/Sets the design context. /// diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index a5203c289a..b4a6d06841 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } - public EventHandler AggregatePropertiesUpdated; + public EventHandler AggregatePropertiesUpdated { get; set; } private PropertyGridGroupMode _groupMode; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 3d3cc1382f..5716300d9e 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -142,6 +142,12 @@ namespace ICSharpCode.WpfDesign.Designer.Services return item; } + public static bool AddItemWithCustomSizePosition(DesignItem container, Type createdItem, Size size, Point position) + { + CreateComponentTool cct = new CreateComponentTool(createdItem); + return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size); + } + public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) { CreateComponentTool cct = new CreateComponentTool(createdItem); diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs index 2c262998ca..66ae19fcc5 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs @@ -3,7 +3,7 @@ using System; using System.Windows.Input; - +using System.Windows.Media; namespace ICSharpCode.WpfDesign.Designer.Services { // See IToolService for description. @@ -22,6 +22,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services }); } + public HitTestFilterCallback DesignPanelHitTestFilterCallback + { + set{ _designPanel.CustomHitTestFilterBehavior = value; } + } + public void Dispose() { if (_designPanel != null) { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs index 4525e7c246..b23c75603d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; +using System.Windows.Media; using ICSharpCode.WpfDesign.Adorners; @@ -38,6 +39,10 @@ namespace ICSharpCode.WpfDesign /// public interface IToolService { + /// + /// Set custom HitTestFilterCallback for DesignPanel + /// + HitTestFilterCallback DesignPanelHitTestFilterCallback{ set; } /// /// Gets the 'pointer' tool. /// The pointer tool is the default tool for selecting and moving elements. @@ -62,6 +67,10 @@ namespace ICSharpCode.WpfDesign public interface IDesignPanel : IInputElement { /// + /// Set a custom filter callback so that any element can be filtered out + /// + HitTestFilterCallback CustomHitTestFilterBehavior { get; set; } + /// /// Gets the design context used by the DesignPanel. /// DesignContext Context { get; } From b67af16c453ac9808337cd316276ee22753bcc6f Mon Sep 17 00:00:00 2001 From: tbulle Date: Tue, 28 Jan 2014 10:45:19 +0100 Subject: [PATCH 03/15] Implemented inteface for OutlineNode so that a custom outlinenode can be implemented --- .../Project/FormsDesigner.csproj | 1 + .../Project/OutlineView/Outline.xaml.cs | 7 +- .../Project/OutlineView/OutlineNode.cs | 344 +++++------------- .../Project/OutlineView/OutlineNodeBase.cs | 239 ++++++++++++ .../Editors/CollectionEditor.xaml.cs | 2 +- .../Project/PropertyGrid/PropertyGrid.cs | 4 +- .../Project/Services/CreateComponentTool.cs | 2 +- .../Project/WpfDesign.Designer.csproj | 1 + 8 files changed, 347 insertions(+), 253 deletions(-) create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj index 088d5066b6..80ced74cdb 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj @@ -54,6 +54,7 @@ + diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs index 25043cbff7..754849fd7a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs @@ -25,10 +25,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView } public static readonly DependencyProperty RootProperty = - DependencyProperty.Register("Root", typeof(OutlineNode), typeof(Outline)); + DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); - public OutlineNode Root { - get { return (OutlineNode)GetValue(RootProperty); } + public IOutlineNode Root + { + get { return (IOutlineNode)GetValue(RootProperty); } set { SetValue(RootProperty, value); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index f3e03c08ba..5508d1a1ed 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -19,249 +19,101 @@ using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView { - public class OutlineNode : INotifyPropertyChanged - { - //Used to check if element can enter other containers - public static PlacementType DummyPlacementType; - - static OutlineNode() - { - DummyPlacementType = PlacementType.Register("DummyPlacement"); - } - public static OutlineNode Create(DesignItem designItem) - { - OutlineNode node; - if (!outlineNodes.TryGetValue(designItem, out node)) { - node = new OutlineNode(designItem); - outlineNodes[designItem] = node; - } - return node; - } - - //TODO: Reset with DesignContext - static Dictionary outlineNodes = new Dictionary(); - - OutlineNode(DesignItem designItem) - { - DesignItem = designItem; - UpdateChildren(); - - var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; - if (hidden != null && (bool) hidden == true) { - this._isDesignTimeVisible = false; - ((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden; - } - - var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; - if (locked != null && (bool) locked == true) { - this._isDesignTimeLocked = true; - } - - //TODO - DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); - DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); - SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); - } - - public DesignItem DesignItem { get; private set; } - - public ISelectionService SelectionService { - get { return DesignItem.Services.Selection; } - } - - bool isExpanded = true; - - public bool IsExpanded { - get { - return isExpanded; - } - set { - isExpanded = value; - RaisePropertyChanged("IsExpanded"); - } - } - - bool isSelected; - - public bool IsSelected { - get { - return isSelected; - } - set { - if (isSelected != value) { - isSelected = value; - SelectionService.SetSelectedComponents(new[] { DesignItem }, - value ? SelectionTypes.Add : SelectionTypes.Remove); - RaisePropertyChanged("IsSelected"); - } - } - } - - bool _isDesignTimeVisible = true; - - public bool IsDesignTimeVisible - { - get { - return _isDesignTimeVisible; - } - set { - _isDesignTimeVisible = value; - var ctl = DesignItem.Component as UIElement; - ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; - - RaisePropertyChanged("IsDesignTimeVisible"); - - if (!value) - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); - else - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); - } - } - - bool _isDesignTimeLocked = false; - - public bool IsDesignTimeLocked - { - get { - return _isDesignTimeLocked; - } - set { - _isDesignTimeLocked = value; - ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; - - RaisePropertyChanged("IsDesignTimeLocked"); - -// if (value) -// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); -// else -// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); - } - } - - ObservableCollection children = new ObservableCollection(); - - public ObservableCollection Children { - get { return children; } - } - - public string Name { - get { - if (string.IsNullOrEmpty(DesignItem.Name)) { - return DesignItem.ComponentType.Name; - } - return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; - } - } - - void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) - { - IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); - } - - void DesignItem_NameChanged(object sender, EventArgs e) - { - RaisePropertyChanged("Name"); - } - - void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == DesignItem.ContentPropertyName) { - UpdateChildren(); - } - } - - void UpdateChildren() - { - Children.Clear(); - - if (DesignItem.ContentPropertyName != null) { - var content = DesignItem.ContentProperty; - if (content.IsCollection) { - UpdateChildrenCore(content.CollectionElements); - } - else { - if (content.Value != null) { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - - void UpdateChildrenCore(IEnumerable items) - { - foreach (var item in items) { - if (ModelTools.CanSelectComponent(item)) { - var node = OutlineNode.Create(item); - Children.Add(node); - } - else - { - var content = item.ContentProperty; - if (content != null) - { - if (content.IsCollection) { - UpdateChildrenCore(content.CollectionElements); - } - else { - if (content.Value != null) { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - } - } - - public bool CanInsert(IEnumerable nodes, OutlineNode after, bool copy) - { - var placementBehavior = DesignItem.GetBehavior(); - if (placementBehavior == null) - return false; - var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); - if (operation != null) { - bool canEnter = placementBehavior.CanEnterContainer(operation, true); - operation.Abort(); - return canEnter; - } - return false; - } - - public void Insert(IEnumerable nodes, OutlineNode after, bool copy) - { - using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) { - if (copy) { - nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); - } else { - foreach (var node in nodes) { - node.DesignItem.Remove(); - } - } - - var index = after == null ? 0 : Children.IndexOf(after) + 1; - - var content = DesignItem.ContentProperty; - if (content.IsCollection) { - foreach (var node in nodes) { - content.CollectionElements.Insert(index++, node.DesignItem); - } - } else { - content.SetValue(nodes.First().DesignItem); - } - moveTransaction.Commit(); - } - } - - #region INotifyPropertyChanged Members - - public event PropertyChangedEventHandler PropertyChanged; - - void RaisePropertyChanged(string name) - { - if (PropertyChanged != null) { - PropertyChanged(this, new PropertyChangedEventArgs(name)); - } - } - - #endregion - } -} + public interface IOutlineNode + { + ISelectionService SelectionService { get; } + bool IsExpanded { get; set; } + DesignItem DesignItem { get; set; } + bool IsSelected { get; set; } + bool IsDesignTimeVisible { get; set; } + bool IsDesignTimeLocked { get; } + string Name { get; } + bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); + void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + } + + + public class OutlineNode: OutlineNodeBase + { + //TODO: Reset with DesignContext + static Dictionary outlineNodes = new Dictionary(); + + protected OutlineNode(DesignItem designitem): base(designitem) + { + UpdateChildren(); + SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); + } + + static OutlineNode() + { + DummyPlacementType = PlacementType.Register("DummyPlacement"); + } + + public static IOutlineNode Create(DesignItem designItem) + { + IOutlineNode node; + if (!outlineNodes.TryGetValue(designItem, out node)) + { + node = new OutlineNode(designItem); + outlineNodes[designItem] = node; + } + return node; + } + + void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) + { + IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); + } + + protected override void UpdateChildren() + { + Children.Clear(); + + if (DesignItem.ContentPropertyName != null) + { + var content = DesignItem.ContentProperty; + if (content.IsCollection) + { + UpdateChildrenCore(content.CollectionElements); + } + else + { + if (content.Value != null) + { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + + void UpdateChildrenCore(IEnumerable items) + { + foreach (var item in items) + { + if (ModelTools.CanSelectComponent(item)) + { + var node = OutlineNode.Create(item); + Children.Add(node); + } + else + { + var content = item.ContentProperty; + if (content != null) + { + if (content.IsCollection) + { + UpdateChildrenCore(content.CollectionElements); + } + else + { + if (content.Value != null) + { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + } + } + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs new file mode 100644 index 0000000000..2e807f6967 --- /dev/null +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs @@ -0,0 +1,239 @@ +/* + * Created by SharpDevelop. + * User: trubra + * Date: 2014-01-28 + * Time: 10:09 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Windows; +using System.Linq; +using ICSharpCode.WpfDesign.Designer.Xaml; +using ICSharpCode.WpfDesign.XamlDom; + +namespace ICSharpCode.WpfDesign.Designer.OutlineView +{ + /// + /// Description of OutlineNodeBase. + /// + public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode + { + + protected abstract void UpdateChildren(); + //Used to check if element can enter other containers + protected static PlacementType DummyPlacementType; + + protected OutlineNodeBase(DesignItem designItem) + { + DesignItem = designItem; + + + var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; + if (hidden != null && (bool)hidden) + { + _isDesignTimeVisible = false; + ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; + } + + var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; + if (locked != null && (bool)locked) + { + _isDesignTimeLocked = true; + } + + //TODO + + DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); + DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); + } + + public DesignItem DesignItem { get; set; } + + public ISelectionService SelectionService + { + get { return DesignItem.Services.Selection; } + } + + bool isExpanded = true; + + public bool IsExpanded + { + get + { + return isExpanded; + } + set + { + isExpanded = value; + RaisePropertyChanged("IsExpanded"); + } + } + + bool isSelected; + + public bool IsSelected + { + get + { + return isSelected; + } + set + { + if (isSelected != value) + { + isSelected = value; + SelectionService.SetSelectedComponents(new[] { DesignItem }, + value ? SelectionTypes.Add : SelectionTypes.Remove); + RaisePropertyChanged("IsSelected"); + } + } + } + + bool _isDesignTimeVisible = true; + + public bool IsDesignTimeVisible + { + get + { + return _isDesignTimeVisible; + } + set + { + _isDesignTimeVisible = value; + var ctl = DesignItem.Component as UIElement; + if(ctl!=null) + ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; + + RaisePropertyChanged("IsDesignTimeVisible"); + + if (!value) + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); + else + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); + } + } + + bool _isDesignTimeLocked = false; + + public bool IsDesignTimeLocked + { + get + { + return _isDesignTimeLocked; + } + set + { + _isDesignTimeLocked = value; + ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; + + RaisePropertyChanged("IsDesignTimeLocked"); + + // if (value) + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); + // else + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); + } + } + + ObservableCollection children = new ObservableCollection(); + + public ObservableCollection Children + { + get { return children; } + } + + public string Name + { + get + { + if (string.IsNullOrEmpty(DesignItem.Name)) + { + return DesignItem.ComponentType.Name; + } + return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; + } + } + + void DesignItem_NameChanged(object sender, EventArgs e) + { + RaisePropertyChanged("Name"); + } + + void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == DesignItem.ContentPropertyName) + { + UpdateChildren(); + } + } + + + + public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) + { + var placementBehavior = DesignItem.GetBehavior(); + if (placementBehavior == null) + return false; + var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); + if (operation != null) + { + bool canEnter = placementBehavior.CanEnterContainer(operation, true); + operation.Abort(); + return canEnter; + } + return false; + } + + public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) + { + using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) + { + if (copy) + { + nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); + } + else + { + foreach (var node in nodes) + { + node.DesignItem.Remove(); + } + } + + var index = after == null ? 0 : Children.IndexOf(after) + 1; + + var content = DesignItem.ContentProperty; + if (content.IsCollection) + { + foreach (var node in nodes) + { + content.CollectionElements.Insert(index++, node.DesignItem); + } + } + else + { + content.SetValue(nodes.First().DesignItem); + } + moveTransaction.Commit(); + } + } + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + public void RaisePropertyChanged(string name) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(name)); + } + } + + #endregion + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs index 57e1b3ccb7..0313d7dc0b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs @@ -49,7 +49,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors if(control!=null){ TypeMappings.TryGetValue(control.GetType(), out _type); if (_type != null) { - OutlineNode node = OutlineNode.Create(item); + IOutlineNode node = OutlineNode.Create(item); Outline.Root = node; PropertyGridView.PropertyGrid.SelectedItems = item.Services.Selection.SelectedItems; } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index b4a6d06841..bb7003011d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -45,13 +45,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } - public EventHandler AggregatePropertiesUpdated { get; set; } + public event EventHandler AggregatePropertiesUpdated; private PropertyGridGroupMode _groupMode; public PropertyGridGroupMode GroupMode { - get { return _groupMode; } + get { return _groupMode; } set { if (_groupMode != value) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 5716300d9e..0ac05437a8 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -146,7 +146,7 @@ namespace ICSharpCode.WpfDesign.Designer.Services { CreateComponentTool cct = new CreateComponentTool(createdItem); return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size); - } + } public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj index a335f5f1f6..53a407d42d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj @@ -87,6 +87,7 @@ + FlatCollectionEditor.xaml Code From a3c162e9c0c6e7dc31bd6532cc082188897be7d6 Mon Sep 17 00:00:00 2001 From: tbulle Date: Tue, 28 Jan 2014 11:57:56 +0100 Subject: [PATCH 04/15] Format changes --- .../Project/OutlineView/Outline.xaml.cs | 8 +- .../Project/OutlineView/OutlineNode.cs | 163 ++++--- .../Project/OutlineView/OutlineNodeBase.cs | 418 +++++++++--------- .../Project/PropertyGrid/PropertyGrid.cs | 6 +- 4 files changed, 283 insertions(+), 312 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs index 754849fd7a..7e2cec2296 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs @@ -25,11 +25,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView } public static readonly DependencyProperty RootProperty = - DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); + DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); - public IOutlineNode Root - { - get { return (IOutlineNode)GetValue(RootProperty); } + public IOutlineNode Root + { + get { return (IOutlineNode)GetValue(RootProperty); } set { SetValue(RootProperty, value); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index 5508d1a1ed..5116f1f425 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -20,100 +20,85 @@ using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView { public interface IOutlineNode - { - ISelectionService SelectionService { get; } - bool IsExpanded { get; set; } - DesignItem DesignItem { get; set; } - bool IsSelected { get; set; } - bool IsDesignTimeVisible { get; set; } - bool IsDesignTimeLocked { get; } - string Name { get; } - bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); - void Insert(IEnumerable nodes, IOutlineNode after, bool copy); - } - + { + ISelectionService SelectionService { get; } + bool IsExpanded { get; set; } + DesignItem DesignItem { get; set; } + bool IsSelected { get; set; } + bool IsDesignTimeVisible { get; set; } + bool IsDesignTimeLocked { get; } + string Name { get; } + bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); + void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + } + - public class OutlineNode: OutlineNodeBase - { - //TODO: Reset with DesignContext - static Dictionary outlineNodes = new Dictionary(); + public class OutlineNode: OutlineNodeBase + { + //TODO: Reset with DesignContext + static Dictionary outlineNodes = new Dictionary(); - protected OutlineNode(DesignItem designitem): base(designitem) - { - UpdateChildren(); - SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); - } + protected OutlineNode(DesignItem designitem): base(designitem) + { + UpdateChildren(); + SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); + } - static OutlineNode() - { - DummyPlacementType = PlacementType.Register("DummyPlacement"); - } + static OutlineNode() + { + DummyPlacementType = PlacementType.Register("DummyPlacement"); + } - public static IOutlineNode Create(DesignItem designItem) - { - IOutlineNode node; - if (!outlineNodes.TryGetValue(designItem, out node)) - { - node = new OutlineNode(designItem); - outlineNodes[designItem] = node; - } - return node; - } + public static IOutlineNode Create(DesignItem designItem) + { + IOutlineNode node; + if (!outlineNodes.TryGetValue(designItem, out node)) { + node = new OutlineNode(designItem); + outlineNodes[designItem] = node; + } + return node; + } - void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) - { - IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); - } + void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) + { + IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); + } - protected override void UpdateChildren() - { - Children.Clear(); + protected override void UpdateChildren() + { + Children.Clear(); - if (DesignItem.ContentPropertyName != null) - { - var content = DesignItem.ContentProperty; - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } + if (DesignItem.ContentPropertyName != null) { + var content = DesignItem.ContentProperty; + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } - void UpdateChildrenCore(IEnumerable items) - { - foreach (var item in items) - { - if (ModelTools.CanSelectComponent(item)) - { - var node = OutlineNode.Create(item); - Children.Add(node); - } - else - { - var content = item.ContentProperty; - if (content != null) - { - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - } - } - } -} + void UpdateChildrenCore(IEnumerable items) + { + foreach (var item in items) { + if (ModelTools.CanSelectComponent(item)) { + var node = OutlineNode.Create(item); + Children.Add(node); + } else { + var content = item.ContentProperty; + if (content != null) { + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + } + } + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs index 2e807f6967..648b4097ec 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs @@ -12,7 +12,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows; using System.Linq; -using ICSharpCode.WpfDesign.Designer.Xaml; +using ICSharpCode.WpfDesign.Designer.Xaml; using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -21,219 +21,205 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView /// Description of OutlineNodeBase. /// public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode - { - - protected abstract void UpdateChildren(); - //Used to check if element can enter other containers - protected static PlacementType DummyPlacementType; - - protected OutlineNodeBase(DesignItem designItem) - { - DesignItem = designItem; - - - var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; - if (hidden != null && (bool)hidden) - { - _isDesignTimeVisible = false; - ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; - } - - var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; - if (locked != null && (bool)locked) - { - _isDesignTimeLocked = true; - } - - //TODO - - DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); - DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); - } - - public DesignItem DesignItem { get; set; } - - public ISelectionService SelectionService - { - get { return DesignItem.Services.Selection; } - } - - bool isExpanded = true; - - public bool IsExpanded - { - get - { - return isExpanded; - } - set - { - isExpanded = value; - RaisePropertyChanged("IsExpanded"); - } - } - - bool isSelected; - - public bool IsSelected - { - get - { - return isSelected; - } - set - { - if (isSelected != value) - { - isSelected = value; - SelectionService.SetSelectedComponents(new[] { DesignItem }, - value ? SelectionTypes.Add : SelectionTypes.Remove); - RaisePropertyChanged("IsSelected"); - } - } - } - - bool _isDesignTimeVisible = true; - - public bool IsDesignTimeVisible - { - get - { - return _isDesignTimeVisible; - } - set - { - _isDesignTimeVisible = value; - var ctl = DesignItem.Component as UIElement; - if(ctl!=null) - ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; - - RaisePropertyChanged("IsDesignTimeVisible"); - - if (!value) - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); - else - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); - } - } - - bool _isDesignTimeLocked = false; - - public bool IsDesignTimeLocked - { - get - { - return _isDesignTimeLocked; - } - set - { - _isDesignTimeLocked = value; - ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; - - RaisePropertyChanged("IsDesignTimeLocked"); - - // if (value) - // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); - // else - // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); - } - } - - ObservableCollection children = new ObservableCollection(); - - public ObservableCollection Children - { - get { return children; } - } - - public string Name - { - get - { - if (string.IsNullOrEmpty(DesignItem.Name)) - { - return DesignItem.ComponentType.Name; - } - return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; - } - } - - void DesignItem_NameChanged(object sender, EventArgs e) - { - RaisePropertyChanged("Name"); - } - - void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == DesignItem.ContentPropertyName) - { - UpdateChildren(); - } - } - - - - public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) - { - var placementBehavior = DesignItem.GetBehavior(); - if (placementBehavior == null) - return false; - var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); - if (operation != null) - { - bool canEnter = placementBehavior.CanEnterContainer(operation, true); - operation.Abort(); - return canEnter; - } - return false; - } - - public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) - { - using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) - { - if (copy) - { - nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); - } - else - { - foreach (var node in nodes) - { - node.DesignItem.Remove(); - } - } - - var index = after == null ? 0 : Children.IndexOf(after) + 1; - - var content = DesignItem.ContentProperty; - if (content.IsCollection) - { - foreach (var node in nodes) - { - content.CollectionElements.Insert(index++, node.DesignItem); - } - } - else - { - content.SetValue(nodes.First().DesignItem); - } - moveTransaction.Commit(); - } - } - - #region INotifyPropertyChanged Members - - public event PropertyChangedEventHandler PropertyChanged; - - public void RaisePropertyChanged(string name) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(name)); - } - } - - #endregion - } + { + + protected abstract void UpdateChildren(); + //Used to check if element can enter other containers + protected static PlacementType DummyPlacementType; + + protected OutlineNodeBase(DesignItem designItem) + { + DesignItem = designItem; + + + var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; + if (hidden != null && (bool)hidden) { + _isDesignTimeVisible = false; + ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; + } + + var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; + if (locked != null && (bool)locked) { + _isDesignTimeLocked = true; + } + + //TODO + + DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); + DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); + } + + public DesignItem DesignItem { get; set; } + + public ISelectionService SelectionService + { + get { return DesignItem.Services.Selection; } + } + + bool isExpanded = true; + + public bool IsExpanded + { + get + { + return isExpanded; + } + set + { + isExpanded = value; + RaisePropertyChanged("IsExpanded"); + } + } + + bool isSelected; + + public bool IsSelected + { + get + { + return isSelected; + } + set + { + if (isSelected != value) { + isSelected = value; + SelectionService.SetSelectedComponents(new[] { DesignItem }, + value ? SelectionTypes.Add : SelectionTypes.Remove); + RaisePropertyChanged("IsSelected"); + } + } + } + + bool _isDesignTimeVisible = true; + + public bool IsDesignTimeVisible + { + get + { + return _isDesignTimeVisible; + } + set + { + _isDesignTimeVisible = value; + var ctl = DesignItem.Component as UIElement; + if(ctl!=null) + ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; + + RaisePropertyChanged("IsDesignTimeVisible"); + + if (!value) + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); + else + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); + } + } + + bool _isDesignTimeLocked = false; + + public bool IsDesignTimeLocked + { + get + { + return _isDesignTimeLocked; + } + set + { + _isDesignTimeLocked = value; + ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; + + RaisePropertyChanged("IsDesignTimeLocked"); + + // if (value) + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); + // else + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); + } + } + + ObservableCollection children = new ObservableCollection(); + + public ObservableCollection Children + { + get { return children; } + } + + public string Name + { + get + { + if (string.IsNullOrEmpty(DesignItem.Name)) { + return DesignItem.ComponentType.Name; + } + return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; + } + } + + void DesignItem_NameChanged(object sender, EventArgs e) + { + RaisePropertyChanged("Name"); + } + + void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == DesignItem.ContentPropertyName) { + UpdateChildren(); + } + } + + + + public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) + { + var placementBehavior = DesignItem.GetBehavior(); + if (placementBehavior == null) + return false; + var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); + if (operation != null) { + bool canEnter = placementBehavior.CanEnterContainer(operation, true); + operation.Abort(); + return canEnter; + } + return false; + } + + public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) + { + using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) + { + if (copy) { + nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); + } else { + foreach (var node in nodes) { + node.DesignItem.Remove(); + } + } + + var index = after == null ? 0 : Children.IndexOf(after) + 1; + + var content = DesignItem.ContentProperty; + if (content.IsCollection) { + foreach (var node in nodes) { + content.CollectionElements.Insert(index++, node.DesignItem); + } + } else { + content.SetValue(nodes.First().DesignItem); + } + moveTransaction.Commit(); + } + } + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + public void RaisePropertyChanged(string name) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(name)); + } + } + + #endregion + } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index bb7003011d..40a2cb834a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public PropertyGridGroupMode GroupMode { - get { return _groupMode; } + get { return _groupMode; } set { if (_groupMode != value) @@ -202,7 +202,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid if (selectedItems == null || selectedItems.Count == 0) return; if (selectedItems.Count == 1) SingleItem = selectedItems[0]; - + foreach (var md in GetDescriptors()) { if (PassesFilter(md.Name)) AddNode(md); @@ -210,7 +210,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } finally { reloadActive = false; if (AggregatePropertiesUpdated != null) - AggregatePropertiesUpdated(this, EventArgs.Empty); + AggregatePropertiesUpdated(this, EventArgs.Empty); } } From 78e4702ca306efa3cf42a5de8c6a3537c8374316 Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 30 Jan 2014 12:28:29 +0100 Subject: [PATCH 05/15] changes to make tests work --- .../Project/OutlineView/OutlineNode.cs | 1 + .../Tests/Designer/OutlineView/HierarchyTests.cs | 2 +- .../Tests/Designer/OutlineView/InsertTests.cs | 16 ++++++++-------- .../Tests/Designer/OutlineView/SelectionTests.cs | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index 5116f1f425..874b126f31 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -30,6 +30,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView string Name { get; } bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + ObservableCollection Children{ get; } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs index 4d7080f558..416bb610fd 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs @@ -11,7 +11,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class HierarchyTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; [TestFixtureSetUp] public void Intialize() diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs index bdcb418e3e..eabc1bdff6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs @@ -11,15 +11,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class CollectionElementsInsertTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; private DesignItem _gridButton; private DesignItem _stackPanel; private DesignItem _stackPanelButton; - private OutlineNode _gridButtonNode; - private OutlineNode _stackPanelNode; - private OutlineNode _stackPanelButtonNode; + private IOutlineNode _gridButtonNode; + private IOutlineNode _stackPanelNode; + private IOutlineNode _stackPanelButtonNode; [SetUp] public void Intialize() @@ -147,15 +147,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class ContentControlInsertTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; private DesignItem _gridButton; private DesignItem _stackPanel; private DesignItem _stackPanelImage; - private OutlineNode _gridButtonNode; - private OutlineNode _stackPanelNode; - private OutlineNode _stackPanelImageNode; + private IOutlineNode _gridButtonNode; + private IOutlineNode _stackPanelNode; + private IOutlineNode _stackPanelImageNode; [SetUp] public void Intialize() diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs index b5a5820b7a..cefd803a62 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs @@ -11,7 +11,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class SelectionTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; [SetUp] public void Intialize() From f4f0f39cb7132504e96bff64a68d6641c649e1c4 Mon Sep 17 00:00:00 2001 From: tbulle Date: Fri, 31 Jan 2014 00:20:33 +0100 Subject: [PATCH 06/15] Changes to OutlineTreeView to Work With IOutlineNode --- .../Project/OutlineView/OutlineTreeView.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs index f739db7366..0225f58a47 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs @@ -13,30 +13,30 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView protected override bool CanInsert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) { UpdateCustomNodes(items); - return (target.DataContext as OutlineNode).CanInsert(_customOutlineNodes, - after == null ? null : after.DataContext as OutlineNode, copy); + return (target.DataContext as IOutlineNode).CanInsert(_customOutlineNodes, + after == null ? null : after.DataContext as IOutlineNode, copy); } protected override void Insert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) { UpdateCustomNodes(items); - (target.DataContext as OutlineNode).Insert(_customOutlineNodes, - after == null ? null : after.DataContext as OutlineNode, copy); + (target.DataContext as IOutlineNode).Insert(_customOutlineNodes, + after == null ? null : after.DataContext as IOutlineNode, copy); } // Need to do this through a seperate List since previously LINQ queries apparently disconnected DataContext;bug in .NET 4.0 - private List _customOutlineNodes; + private List _customOutlineNodes; void UpdateCustomNodes(IEnumerable items) { - _customOutlineNodes = new List(); + _customOutlineNodes = new List(); foreach (var item in items) - _customOutlineNodes.Add(item.DataContext as OutlineNode); + _customOutlineNodes.Add(item.DataContext as IOutlineNode); } public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem) { - var node = dragTreeViewitem.DataContext as OutlineNode; + var node = dragTreeViewitem.DataContext as IOutlineNode; return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower()); } @@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView { base.SelectOnly(item); - var node = item.DataContext as OutlineNode; + var node = item.DataContext as IOutlineNode; var surface = node.DesignItem.View.TryFindParent(); if (surface != null) From 8b8cdfbc406c138c1082e16fc1a42ef3b6643b5a Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 8 May 2014 14:35:55 +0200 Subject: [PATCH 07/15] Created Interface to be able to customize PropertyGrid --- .../Project/PropertyGrid/PropertyGrid.cs | 20 +++++++++++++++++-- .../Project/PropertyGrid/PropertyGridView.cs | 10 +++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index 14de050360..290ba2f121 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -35,7 +35,20 @@ using System.Windows; namespace ICSharpCode.WpfDesign.Designer.PropertyGrid { - public class PropertyGrid : INotifyPropertyChanged + public interface IPropertyGrid + { + IEnumerable SelectedItems { get; set; } + Dictionary NodeFromDescriptor { get; } + DesignItem SingleItem { get; } + string Name { get; set; } + string OldName { get; } + bool IsNameCorrect { get; set; } + bool ReloadActive { get; } + event EventHandler AggregatePropertiesUpdated; + event PropertyChangedEventHandler PropertyChanged; + } + + public class PropertyGrid : INotifyPropertyChanged, IPropertyGrid { public PropertyGrid() { @@ -54,7 +67,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid Category attachedCategory = new Category("Attached"); Dictionary nodeFromDescriptor = new Dictionary(); - + public Dictionary NodeFromDescriptor { get { return nodeFromDescriptor; } } + public event EventHandler AggregatePropertiesUpdated; public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } @@ -220,6 +234,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } } finally { reloadActive = false; + if (AggregatePropertiesUpdated != null) + AggregatePropertiesUpdated(this, EventArgs.Empty); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs index b80aeb5582..c213b05690 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs @@ -43,9 +43,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } - public PropertyGridView() + public PropertyGridView() : this(null) { - PropertyGrid = new PropertyGrid(); + } + + public PropertyGridView(IPropertyGrid pg) + { + PropertyGrid = pg??new PropertyGrid(); DataContext = PropertyGrid; } @@ -61,7 +65,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid static PropertyContextMenu propertyContextMenu = new PropertyContextMenu(); - public PropertyGrid PropertyGrid { get; private set; } + public IPropertyGrid PropertyGrid { get; private set; } public static readonly DependencyProperty FirstColumnWidthProperty = DependencyProperty.Register("FirstColumnWidth", typeof(double), typeof(PropertyGridView), From 6d1d189713ab97f0ffd6bb4d7fecc27bd1c71e76 Mon Sep 17 00:00:00 2001 From: gumme Date: Mon, 7 Jul 2014 20:45:26 +0200 Subject: [PATCH 08/15] BindingWrapper now supports MultiBinding and PriorityBinding. --- .../Tests/XamlDom/MarkupExtensionTests.cs | 91 +++++++++++++++++++ .../WpfDesign.XamlDom/Project/XamlObject.cs | 34 ++++++- 2 files changed, 121 insertions(+), 4 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs index cfe333f062..9a74644b5f 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs @@ -17,6 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; using NUnit.Framework; using System.Windows.Markup; using ICSharpCode.WpfDesign.XamlDom; @@ -118,6 +121,79 @@ namespace ICSharpCode.WpfDesign.Tests.XamlDom { TestMarkupExtension("Content=\"{t:String '" + PathWithCommasAndSpaces + "'}\""); } + + [Test] + public void TestMultiBinding() + { + string xaml = @" + + + + + + + + + +"; + + TestLoading(xaml); + + TestWindowMultiBinding((Window)XamlReader.Parse(xaml)); + + var doc = XamlParser.Parse(new StringReader(xaml)); + + TestWindowMultiBinding((Window)doc.RootInstance); + } + + + void TestWindowMultiBinding(Window w) + { + var textBox = (TextBox)w.Content; + + var expr = BindingOperations.GetMultiBindingExpression(textBox, TextBox.TextProperty); + Assert.IsNotNull(expr); + + var converter = expr.ParentMultiBinding.Converter as MyMultiConverter; + Assert.IsNotNull(converter); + + Assert.AreEqual(expr.ParentMultiBinding.Bindings.Count, 1); + } + + [Test] + public void TestPriorityBinding() + { + string xaml = @" + + + + + + + +"; + + TestLoading(xaml); + + TestWindowPriorityBinding((Window)XamlReader.Parse(xaml)); + + var doc = XamlParser.Parse(new StringReader(xaml)); + + TestWindowPriorityBinding((Window)doc.RootInstance); + } + + + void TestWindowPriorityBinding(Window w) + { + var textBox = (TextBox)w.Content; + + var expr = BindingOperations.GetPriorityBindingExpression(textBox, TextBox.TextProperty); + Assert.IsNotNull(expr); + + Assert.AreEqual(expr.ParentPriorityBinding.Bindings.Count, 2); + } // [Test] // public void Test10() @@ -177,4 +253,19 @@ namespace ICSharpCode.WpfDesign.Tests.XamlDom return null; } } + + public class MyMultiConverter : IMultiValueConverter + { + #region IMultiValueConverter implementation + public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + return System.Windows.DependencyProperty.UnsetValue; + } + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + #endregion + + } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs index e8275a34e4..0429d5192c 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Linq; @@ -548,11 +549,35 @@ namespace ICSharpCode.WpfDesign.XamlDom { public override object ProvideValue() { - var target = XamlObject.Instance as Binding; + var target = XamlObject.Instance as BindingBase; + Debug.Assert(target != null); //TODO: XamlObject.Clone() - var b = new Binding(); + var b = CopyBinding(target); + return b.ProvideValue(XamlObject.ServiceProvider); + } + + BindingBase CopyBinding(BindingBase target) + { + BindingBase b; + if (target != null) { + b = (BindingBase)Activator.CreateInstance(target.GetType()); + } else { + b = new Binding(); + } + foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(target)) { - if (pd.IsReadOnly) continue; + if (pd.IsReadOnly) { + if (pd.Name.Equals("Bindings", StringComparison.Ordinal)) { + var bindings = (Collection)pd.GetValue(target); + var newBindings = (Collection)pd.GetValue(b); + + foreach (var binding in bindings) { + newBindings.Add(CopyBinding(binding)); + } + } + + continue; + } try { var val1 = pd.GetValue(b); var val2 = pd.GetValue(target); @@ -560,7 +585,8 @@ namespace ICSharpCode.WpfDesign.XamlDom pd.SetValue(b, val2); } catch {} } - return b.ProvideValue(XamlObject.ServiceProvider); + + return b; } } From cfe4b3a77eebea28ecc2588d019ff841673b06d4 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Tue, 15 Jul 2014 13:21:56 +0200 Subject: [PATCH 09/15] Bugfix -> Number Editor smallest possible Value was zero! (cherry picked from commit 22a021957b4b717bf55e816061b1971c74306e65) --- .../Project/PropertyGrid/Editors/NumberEditor.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs index 555e95a33e..4f8c7bbcf6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors var range = Metadata.GetValueRange(PropertyNode.FirstProperty); if (range == null) { - range = new NumberRange() { Min = 0, Max = double.MaxValue }; + range = new NumberRange() { Min = double.MinValue, Max = double.MaxValue }; } if (range.Min == double.MinValue) { From e51144a5c3d48136084d7fe8a8ed1bf6f3242a25 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Fri, 25 Jul 2014 00:51:23 +0200 Subject: [PATCH 10/15] Fix: InvalidOperationException when opening XML file in HexEditor when it was already open in normal XML editor. --- .../DisplayBindings/HexEditor/Project/Src/Util/BufferManager.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/Src/Util/BufferManager.cs b/src/AddIns/DisplayBindings/HexEditor/Project/Src/Util/BufferManager.cs index 1a77f7bdfa..ccc5141320 100644 --- a/src/AddIns/DisplayBindings/HexEditor/Project/Src/Util/BufferManager.cs +++ b/src/AddIns/DisplayBindings/HexEditor/Project/Src/Util/BufferManager.cs @@ -127,8 +127,6 @@ namespace HexEditor.Util { Editor c = (Editor)this.parent; - Application.DoEvents(); - if (c.ProgressBar != null) { if (percentage >= 100) { if (c.InvokeRequired) From 50ad72bcc014354adde48e2bafa8ece10f318434 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Fri, 25 Jul 2014 11:58:25 +0200 Subject: [PATCH 11/15] Grid placement Fix When Grid Stretched horizontal no width should be set! Same on vertical! --- .../Extensions/GridPlacementSupport.cs | 27 +++++-------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs index 0b80da9f54..7c81c01984 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs @@ -218,28 +218,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions margin.Bottom = GetRowOffset(bottomRowIndex + 1) - info.Bounds.Bottom; info.Item.Properties[FrameworkElement.MarginProperty].SetValue(margin); - var widthIsSet = info.Item.Properties[FrameworkElement.WidthProperty].IsSet; - var heightIsSet = info.Item.Properties[FrameworkElement.HeightProperty].IsSet; - if (!widthIsSet) - { - if (ha == HorizontalAlignment.Stretch) - info.Item.Properties[FrameworkElement.WidthProperty].Reset(); - else - info.Item.Properties[FrameworkElement.WidthProperty].SetValue(info.Bounds.Width); - } - else { + if (ha == HorizontalAlignment.Stretch) + info.Item.Properties[FrameworkElement.WidthProperty].Reset(); + else info.Item.Properties[FrameworkElement.WidthProperty].SetValue(info.Bounds.Width); - } - if (!heightIsSet) - { - if (va == VerticalAlignment.Stretch) - info.Item.Properties[FrameworkElement.HeightProperty].Reset(); - else - info.Item.Properties[FrameworkElement.HeightProperty].SetValue(info.Bounds.Height); - } - else { + + if (va == VerticalAlignment.Stretch) + info.Item.Properties[FrameworkElement.HeightProperty].Reset(); + else info.Item.Properties[FrameworkElement.HeightProperty].SetValue(info.Bounds.Height); - } } public override void LeaveContainer(PlacementOperation operation) From 00d2fd1d663e57b9fcb57539948e4356cfb85cc9 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 27 Jul 2014 10:13:00 +0200 Subject: [PATCH 12/15] fix #220: Cannot rename an identifier starting with an @ --- .../Project/Src/Refactoring/CSharpCodeGenerator.cs | 5 +++++ src/Main/Base/Project/Refactoring/CodeGenerator.cs | 5 +++++ .../Project/Src/Editor/Commands/FindReferencesCommand.cs | 5 +++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs index 9902fef703..1ec12f9a3a 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs @@ -211,5 +211,10 @@ namespace CSharpBinding.Refactoring script.ChangeModifier(entityDeclaration, entityDeclaration.Modifiers | Modifiers.Virtual); } } + + public override string EscapeIdentifier(string identifier) + { + return "@" + identifier; + } } } diff --git a/src/Main/Base/Project/Refactoring/CodeGenerator.cs b/src/Main/Base/Project/Refactoring/CodeGenerator.cs index e9bf579bfc..1f7a58891c 100644 --- a/src/Main/Base/Project/Refactoring/CodeGenerator.cs +++ b/src/Main/Base/Project/Refactoring/CodeGenerator.cs @@ -83,6 +83,11 @@ namespace ICSharpCode.SharpDevelop.Refactoring return newName; } + public virtual string EscapeIdentifier(string identifier) + { + throw new NotSupportedException("Feature not supported!"); + } + public virtual void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name) { throw new NotSupportedException("Feature not supported!"); diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs index 9cd108ebe9..8b9d5aa659 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs @@ -125,8 +125,9 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands { if (string.IsNullOrEmpty(name)) return false; - - if ((language.CodeDomProvider == null) || !language.CodeDomProvider.IsValidIdentifier(name)) + + if ((language.CodeDomProvider == null) || (!language.CodeDomProvider.IsValidIdentifier(name) && + !language.CodeDomProvider.IsValidIdentifier(language.CodeGenerator.EscapeIdentifier(name)))) return false; return true; From 6ffe7b8cbef3c2e816caaa5055506ac018c2f591 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 27 Jul 2014 12:16:52 +0200 Subject: [PATCH 13/15] =?UTF-8?q?fix=20#106:=20Source=20code=20file=20refe?= =?UTF-8?q?rence=20cannot=20be=20extracted=20from=20non-English=20stacktra?= =?UTF-8?q?ce=20by=20using=20=C2=B4Environment.GetResourceString=C2=B4=20t?= =?UTF-8?q?hrough=20reflection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OutputTextLineParser.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/OutputTextLineParser.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/OutputTextLineParser.cs index 42a330b677..f017dd54d4 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/OutputTextLineParser.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/OutputTextLineParser.cs @@ -85,7 +85,7 @@ namespace ICSharpCode.SharpDevelop.Gui /// Extracts source code file reference from NUnit output. (stacktrace format) /// /// The text line to parse. - /// The text is multilined. + /// The text is multilined. /// A if the line of text contains a /// file reference otherwise public static FileLineReference GetNUnitOutputFileLineReference(string lineText, bool multiline) @@ -95,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Gui FileLineReference result = null; if (lineText != null) { - Match match = Regex.Match(lineText, @"\b(\w:[/\\].*?):line\s(\d+)?\r?$", regexOptions); + Match match = Regex.Match(lineText, GetStackFrameRegex(), regexOptions); while (match.Success) { try { int line = Convert.ToInt32(match.Groups[2].Value); @@ -110,6 +110,21 @@ namespace ICSharpCode.SharpDevelop.Gui return result; } + + static readonly System.Reflection.MethodInfo GetResourceString = typeof(Environment) + .GetMethod("GetResourceString", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic, + null, new[] { typeof(string) }, null); + + static string GetStackFrameRegex() + { + string line = "in {0}:line {1}"; + + if (GetResourceString != null) { + line = (string)GetResourceString.Invoke(null, new[] { "StackTrace_InFileLineNumber" }); + } + + return line.Replace("{0}", @"(\w:[/\\].*?)").Replace("{1}", @"(\d+)"); + } /// /// Extracts source code file reference from the c++ or VB.Net compiler output. From 28394f99b237b862985c1489a5d27ad63b45acd5 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 27 Jul 2014 20:19:03 +0200 Subject: [PATCH 14/15] fix build --- samples/XamlDesigner/Shell.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/XamlDesigner/Shell.cs b/samples/XamlDesigner/Shell.cs index 2f1a0abe41..fad5178762 100644 --- a/samples/XamlDesigner/Shell.cs +++ b/samples/XamlDesigner/Shell.cs @@ -30,7 +30,7 @@ namespace ICSharpCode.XamlDesigner //public Toolbox Toolbox { get; set; } //public SceneTree SceneTree { get; set; } - public PropertyGrid PropertyGrid { get; internal set; } + public IPropertyGrid PropertyGrid { get; internal set; } //public ErrorList ErrorList { get; set; } public ObservableCollection Documents { get; private set; } From 181731849c9ba85a224af9b722e4e66625bd5c2c Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 27 Jul 2014 20:48:43 +0200 Subject: [PATCH 15/15] Replace StringResourceTool with ResGet, and update the string resources. --- .gitignore | 1 + data/resources/StringResources.cz.resx | 6 +- data/resources/StringResources.de.resx | 6 +- data/resources/StringResources.es-mx.resx | 74 ++- data/resources/StringResources.es.resx | 74 ++- data/resources/StringResources.fi.resx | 6 +- data/resources/StringResources.fr.resx | 60 +- data/resources/StringResources.hu.resx | 8 +- data/resources/StringResources.it.resx | 8 +- data/resources/StringResources.kr.resx | 6 +- data/resources/StringResources.nl.resx | 15 +- data/resources/StringResources.no.resx | 8 +- data/resources/StringResources.pl.resx | 8 +- data/resources/StringResources.pt-br.resx | 33 +- data/resources/StringResources.pt.resx | 6 +- data/resources/StringResources.ro.resx | 8 +- data/resources/StringResources.ru.resx | 8 +- data/resources/StringResources.se.resx | 361 ++++++++++- data/resources/StringResources.tr.resx | 299 ++++++++- data/resources/StringResources.zh.resx | 6 +- .../LocalizationDbToResFile/AssemblyInfo.cs | 32 - .../LocalizationDbToResFile.csproj | 44 -- .../LocalizationDbToResFile.csproj.user | 4 - src/Tools/LocalizationDbToResFile/Main.cs | 120 ---- .../LocalizationXmlToResFile.cs | 83 --- .../LocalizationXmlToResFile.csproj | 43 -- .../LocalizationXmlToResFile.csproj.user | 4 - src/Tools/ResGet/DownloadAll.bat | 1 + src/Tools/ResGet/README.txt | 4 + src/Tools/ResGet/ResGet.exe | Bin 0 -> 262144 bytes src/Tools/ResGet/ResGet.exe.config | 26 + .../StringResourceTool/BuildResourceFiles.cs | 66 -- .../CookieAwareWebClient.cs | 44 -- src/Tools/StringResourceTool/MainForm.cs | 578 ------------------ src/Tools/StringResourceTool/MainForm.resx | 120 ---- .../StringResourceTool/ResourceDatabase.cs | 103 ---- .../StringResourceTool.csproj | 71 --- .../StringResourceTool/StringResourceTool.sln | 24 - .../StringResourceTool/TranslationServer.cs | 163 ----- src/Tools/StringResourceTool/app.config | 6 - .../Configuration/AssemblyInfo.cs | 37 -- .../StringResourceToolAddIn/Src/Command.cs | 100 --- .../StringResourceToolAddIn.addin | 19 - .../StringResourceToolAddIn.csproj | 67 -- .../StringResourceToolAddIn.sln | 18 - 45 files changed, 918 insertions(+), 1860 deletions(-) delete mode 100644 src/Tools/LocalizationDbToResFile/AssemblyInfo.cs delete mode 100644 src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj delete mode 100644 src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj.user delete mode 100644 src/Tools/LocalizationDbToResFile/Main.cs delete mode 100644 src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.cs delete mode 100644 src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj delete mode 100644 src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj.user create mode 100644 src/Tools/ResGet/DownloadAll.bat create mode 100644 src/Tools/ResGet/README.txt create mode 100644 src/Tools/ResGet/ResGet.exe create mode 100644 src/Tools/ResGet/ResGet.exe.config delete mode 100644 src/Tools/StringResourceTool/BuildResourceFiles.cs delete mode 100644 src/Tools/StringResourceTool/CookieAwareWebClient.cs delete mode 100644 src/Tools/StringResourceTool/MainForm.cs delete mode 100644 src/Tools/StringResourceTool/MainForm.resx delete mode 100644 src/Tools/StringResourceTool/ResourceDatabase.cs delete mode 100644 src/Tools/StringResourceTool/StringResourceTool.csproj delete mode 100644 src/Tools/StringResourceTool/StringResourceTool.sln delete mode 100644 src/Tools/StringResourceTool/TranslationServer.cs delete mode 100644 src/Tools/StringResourceTool/app.config delete mode 100644 src/Tools/StringResourceToolAddIn/Configuration/AssemblyInfo.cs delete mode 100644 src/Tools/StringResourceToolAddIn/Src/Command.cs delete mode 100644 src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.addin delete mode 100644 src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.csproj delete mode 100644 src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.sln diff --git a/.gitignore b/.gitignore index bd3b475b46..1d2ebb26f2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ bin/ /src/AddIns/Misc/PackageManagement/Packages/AvalonEdit/lib /packages/ +/src/Tools/ResGet/*.log diff --git a/data/resources/StringResources.cz.resx b/data/resources/StringResources.cz.resx index 4ab1679543..c278cd00a5 100644 --- a/data/resources/StringResources.cz.resx +++ b/data/resources/StringResources.cz.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Tento zdroj není používán. Jeho účelem je testování kvality překladu a konce řádku + O pluginu @@ -6155,7 +6158,4 @@ Došlo k chybě při spuštění: Odkomentovat oblast - - Tento zdroj není používán. Jeho účelem je testování kvality překladu a konce řádku - \ No newline at end of file diff --git a/data/resources/StringResources.de.resx b/data/resources/StringResources.de.resx index 7b472272c9..d58b0a366b 100644 --- a/data/resources/StringResources.de.resx +++ b/data/resources/StringResources.de.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6e61ff43-0241-47da-95bd-2ab6cd6d60f7 + Über... @@ -7721,7 +7724,4 @@ Fehler beim Starten: Kommentar entfernen - - 6e61ff43-0241-47da-95bd-2ab6cd6d60f7 - \ No newline at end of file diff --git a/data/resources/StringResources.es-mx.resx b/data/resources/StringResources.es-mx.resx index c7228b56d4..09e174de1d 100644 --- a/data/resources/StringResources.es-mx.resx +++ b/data/resources/StringResources.es-mx.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Este recurso no es utilizado. Su propósito es probar la base de datos de traducción y tiene +un retorno de línea. + Acerca de @@ -1538,6 +1542,30 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Análisis de Calidad de Código + + Formatear código automáticamente + + + (predeterminado) + + + (global) + + + No se seleccionó un formato preestablecido! + + + ¿Esta seguro/a que quiere restablecer todas las opciones de formato previamente definidas? + + + (proyecto) + + + Restablecer a: + + + (solución) + Inserta una referencia a un método explicito; presione tabulador o enter otra vez para insertar una nueva porción de método. @@ -1980,6 +2008,15 @@ Ejemplo: "120", "MainClass", "Main.cs, 120". Guardar + + Enlaces en tooltips deben ir en + + + Definición en código + + + Documentación (si esta disponible) + Pre-seleccionar miembros usados recientemente @@ -2352,6 +2389,9 @@ Ejemplo: "120", "MainClass", "Main.cs, 120". Resaltar &corchetes + + Resaltar la línea actual + Resaltar símbolos @@ -2613,6 +2653,9 @@ Ejemplo: "120", "MainClass", "Main.cs, 120". Valores predeterminados de VB: + + Formato de Código + &Configuración @@ -3317,9 +3360,15 @@ También puede elegir guardar la opción en el archivo .user en lugar de en el a Código No Cubierto + + Código Parcialmente Cubierto + Columna + + Contenido + Opciones de Vista @@ -4298,6 +4347,9 @@ Utilice solamente letras, dígitos, espacio, '.' ó '_'. La solución ha sido cambiada externamente. + + Opciones de Formato de Soluciones + Convertir &proyectos seleccionados a: @@ -5689,6 +5741,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Agregar referencia + + Agregar Referencia a Servicio + Agregar Referencia Web @@ -6097,6 +6152,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Clases derivadas de ${Name} + + Pegar desde el anillo del portapapeles... + + + El anillo del portapapeles esta vacío + Convertir a propiedad automática @@ -6560,6 +6621,9 @@ Los archivos de recursos han sido renombrados/movidos convenientemente. Abrir solución + + Quitar de la lista de proyectos recientes + Página de Inicio @@ -6572,6 +6636,12 @@ Los archivos de recursos han sido renombrados/movidos convenientemente. ln ${Line} col ${Column} car ${Character} + + len ${Rows} * ${Cols} (${Total}) + + + len ${Length} + Varios @@ -7719,8 +7789,4 @@ Error al iniciar: Descomentar región - - Este recurso no es utilizado. Su propósito es probar la base de datos de traducción y tiene -un retorno de línea. - \ No newline at end of file diff --git a/data/resources/StringResources.es.resx b/data/resources/StringResources.es.resx index c259400fca..dee824e910 100644 --- a/data/resources/StringResources.es.resx +++ b/data/resources/StringResources.es.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Este recurso no se está usando. Su propósito es probar la base de datos de traducción y tiene +un salto de línea + Acerca de... @@ -1537,6 +1541,30 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Análisis de Calidad de Código + + Formatear código automáticamente + + + (predeterminado) + + + (global) + + + No se seleccionó un formato preestablecido! + + + ¿Esta seguro/a que quiere restablecer todas las opciones de formato previamente definidas? + + + (proyecto) + + + Restablecer a: + + + (solución) + Inserta una referencia a un método explicito; presione tabulador o enter otra vez para insertar un nuevo trozo de método. @@ -1977,6 +2005,15 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Guardar + + Enlaces en tooltips deben ir a + + + Definición en código + + + Documentación (si esta disponible) + Pre-seleccionar miembros utilizados recientemente @@ -2349,6 +2386,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Resaltar &corchetes + + Resaltar la línea actual + Resaltar símbolos @@ -2610,6 +2650,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Valores por defecto para Opciones de VB: + + Formato de Código + &Configuración @@ -3319,9 +3362,15 @@ También puede escoger almacenar el parámetro de configuración en el archivo . Código No Cubierto + + Código Parcialmente Cubierto + Columna + + Contenido + Opciones de Vista @@ -4303,6 +4352,9 @@ Solamente letras, dígitos, espacio, '.' o '_' son permitidos. La solución ha sido cambiada externamente. + + Opciones de Formato de Soluciones + Convertir &proyectos seleccionados a: @@ -5695,6 +5747,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Agregar Referencia + + Agregar Referencia a Servicio + Agregar Referencia Web @@ -6103,6 +6158,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Clases derivadas de ${Name} + + Pegar desde el anillo del portapapeles... + + + El anillo del portapapeles esta vacío + Convertir a propiedad automática @@ -6567,6 +6628,9 @@ Los archivos de recursos han sido renombrados o cambiados de ubicación de acuer Abrir solución + + Quitar de la lista de proyectos recientes + Página de inicio @@ -6579,6 +6643,12 @@ Los archivos de recursos han sido renombrados o cambiados de ubicación de acuer ln ${Line} col ${Column} car ${Character} + + len ${Rows} * ${Cols} (${Total}) + + + len ${Length} + Misceláneo @@ -7726,8 +7796,4 @@ Error mientras se iniciaba: Descomentar Región - - Este recurso no se está usando. Su propósito es probar la base de datos de traducción y tiene -un salto de línea - \ No newline at end of file diff --git a/data/resources/StringResources.fi.resx b/data/resources/StringResources.fi.resx index 065d4426d9..270cb75852 100644 --- a/data/resources/StringResources.fi.resx +++ b/data/resources/StringResources.fi.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Resurssia ei käytetä. Sen tarkoituksena on testata suomennosta ja rivinvaihtoa. + About SharpDevelop, finnish lang dev: Pekka Herala domain: sivustot.net @@ -5654,7 +5657,4 @@ Työkalusarja, joka rakentaa Windows asennuspaketteja XML-lähdekoodilla. Sarja Kommentti valinta - - Resurssia ei käytetä. Sen tarkoituksena on testata suomennosta ja rivinvaihtoa. - \ No newline at end of file diff --git a/data/resources/StringResources.fr.resx b/data/resources/StringResources.fr.resx index 5622eea6cc..7502c5cf7c 100644 --- a/data/resources/StringResources.fr.resx +++ b/data/resources/StringResources.fr.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Cette ressource n'est pas utilisée. Son but est de tester la base de données de traduction. + A propos @@ -206,7 +209,7 @@ Vous n'avez aucun AddIn installé. -Téléchargez un AddIn depuis l'Internet, cliquez ensuite sur 'Installer un AddIn' et choisissez le fichier téléchargé pour l'installer. +Téléchargez un AddIn depuis Internet, cliquez ensuite sur 'Installer un AddIn' et choisissez le fichier téléchargé pour l'installer. Ouvrir le site Web @@ -287,17 +290,11 @@ Téléchargez un AddIn depuis l'Internet, cliquez ensuite sur 'Installer un AddI Voir le contrat de license - Les Add-Ins installés suivant sont dépendant de "{0}": - -{1} - + Les Add-Ins installés suivant sont dépendant de "{0}": {1} Ils ne fonctionneront plus si vous désactivez cet Add-In! Souhaitez-vous continuer? - Package "{0}" nécessite au moins une dépendance: - -{1} - + Package "{0}" nécessite au moins une dépendance: {1} L'application va essayer de les télécharger et de les installer. Souhaitez-vous continuer? @@ -314,8 +311,8 @@ L'application va essayer de les télécharger et de les installer. Souhaitez-vou Si vous ne le souhaitez pas, veuillez cliquer "Je décline". - En cliquant "J'accepte", vous êtes d'accord pour la license des packages suivant. -Si vous ne le souhaitez pas, veuillez cliquer "Je décline". + En cliquant sur "J'accepte", vous êtes d'accord pour la license des packages suivant. +Si vous ne le souhaitez pas, veuillez cliquer sur "Je décline". Le package suivant nécessite que vous acceptiez sa license: @@ -357,10 +354,7 @@ Si vous ne le souhaitez pas, veuillez cliquer "Je décline". Dépots - Les Add-Ins installés suivant sont dépendants de "{0}": - -{1} - + Les Add-Ins installés suivant sont dépendants de "{0}": {1} Ils ne fonctionneront plus si vous désinstallez cet Add-In! Souhaitez-vous continuer? @@ -538,7 +532,7 @@ Ils ne fonctionneront plus si vous désinstallez cet Add-In! Souhaitez-vous cont Session de profilage SharpDevelop - Ce projet ne peut pas démarrer, exécutable introuvable, assurez-vous que le projet et toutes ses dépendances sont construites. + Ce projet ne peut pas démarrer, l'exécutable est introuvable. Assurez-vous que le projet et toutes ses dépendances sont compilées correctement! Aucun projet n'est démarrable. Arrêt... @@ -1026,7 +1020,7 @@ Sauvegardez ces fichiers avant de déclencher l'opération. Sauvegarder en UTF-8 - Le projet est configuré comme dll et aucune commande a exécuter n'a été spécifiée. Vous pouvez spécifier une commande a exécuter dans les options du projet. + Le projet est configuré comme DLL et aucune commande a exécuter n'a été spécifiée. Vous pouvez spécifier une commande a exécuter dans les options du projet. Compiler un fichier seul n'est pas possible, veuillez créer un projet! @@ -1660,7 +1654,8 @@ Pour créer ou manipuler un objet ActiveX/COM, déplcaer une classe depuis TypeL Aller à la ligne - Veuillez entrer une expression à atteindre. Vous pouvez donner un numéro de ligne, un nom de classe ou de fichier ("120", "MainClass" "Main.cs, 120" par exemple). + Veuillez entrer une expression à atteindre. Vous pouvez donner un numéro de ligne, un nom de classe ou de fichier. +Exemples: "120", "MainClass" "Main.cs, 120". Couleur de l'arrière-plan @@ -2645,6 +2640,9 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}? Valeurs par défaut des options VB: + + Formatage du code + &Configuration @@ -2794,7 +2792,7 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}? Le petit button devant chaque option de configuration vous permet de choisir l'endroit où est enregistré la configuration. -'Configuration-specific' signigie que la configuration est appliqué au type de Projet (Debug/Release). +'Configuration-specific' signifie que la configuration est appliquée au type de Projet (Debug/Release). 'Platform-specific' signifie que la configuration peut avoir une valeur différente par plateforme. Vous pouvez aussi choisir de stocker la configuration dans le fichier .user-file au lieu du projet, permettant à chaque développeur d'utiliser une valeur différente sans entrer en conflit avec le système de gestion du code source. @@ -3484,7 +3482,6 @@ Vous pouvez aussi choisir de stocker la configuration dans le fichier .user-file Impossible de trouver NAnt '{0}'. - Configurez le chemin vers NAnt dans les options de SharpDevelop. @@ -3638,10 +3635,10 @@ Configurez le chemin vers NAnt dans les options de SharpDevelop. Envoyer vers la console Ruby - Chargement du fichier ${FileNameWithoutPath} depuis ${Path}. Controler les droits et l'existence du fichier. + Chargement du fichier ${FileNameWithoutPath} depuis ${Path}. Controlez les droits et l'existence du fichier. - Enregistrement impossible du fichier ${FileNameWithoutPath} sous ${Path}. Choisir un autre nom de fichier ou controler si le répertoire existe ainsi que les droits d'écriture pour le chemin et le fichier. (Peut être un problème de protection en écriture) + Enregistrement impossible du fichier ${FileNameWithoutPath} sous ${Path}. Choisissez un autre nom de fichier ou controlez si le répertoire existe ainsi que les droits d'écriture pour le chemin et le fichier. Navigateur @@ -3674,7 +3671,7 @@ Configurez le chemin vers NAnt dans les options de SharpDevelop. <Par défaut> - Etes-vous sûr de vouloir charger la configuration par défaut de l'espace de travail? Note: Ceci n'affectera pas vos layouts personnalisés. + Etes-vous sûr de vouloir charger la configuration par défaut de l'espace de travail ? Note: Ceci n'affectera pas vos layouts personnalisés. Conversion @@ -3755,7 +3752,7 @@ Configurez le chemin vers NAnt dans les options de SharpDevelop. Le fichier est introuvable. - Etes vous sûr que vous voulez recharger le fichier ? + Etes-vous sûr que vous voulez recharger le fichier ? Toutes les modifications seront perdues. @@ -4027,7 +4024,7 @@ Toutes les modifications seront perdues. L'ajout de ce composant conduirait à une dépendance cyclique. - Exception lors de la création d'un composant pour le Form Designer (un composant a levé une exception dans son constructeur). CELA N'AFFECTE EN RIEN VOTRE CODE SOURCE. + Exception lors de la création d'un composant pour le Form Designer (un composant a levé une exception dans son constructeur). CELA N'AFFECTE PAS VOTRE CODE SOURCE. Impossible de charger le concepteur. Vérifier les erreurs de syntaxe du code source et si toutes les références sont disponibles. @@ -4521,7 +4518,7 @@ Allez dans 'Outils/Options->Style Visuel pour changer l'ambiance actuelle.Impossible de trouver le dialogue id '{0}' dans le document. - Une extension doit être de la forme: Classe, Assembly + Une extension doit être de la forme: Classe, Nom d'Assembly Par exemple: Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension @@ -5729,6 +5726,9 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace Ajouter une référence + + Ajouter une référence de Service + Ajouter une référence web @@ -6606,6 +6606,9 @@ Les fichiers de resources ont été renommés/déplacés en conséquence. Ouvre une solution + + Supprimer de la liste des projets récents + Page de démarrage @@ -7597,7 +7600,7 @@ Les fichiers de resources ont été renommés/déplacés en conséquence.Compiler projet actif ou buffer (si pas de projet ouvert) (Sauvegarde auto.) - Une session de déboguage est en cours, voulez vous l'arrêter pour reconstruire le projet? + Une session de déboguage est en cours, voulez-vous l'arrêter pour reconstruire le projet? Arrêter le déboguage @@ -7771,7 +7774,4 @@ Erreur lors du démarrage: Partie non commentée - - Cette ressource n'est pas utilisée. Son but est de tester la base de donnée de traduction. - \ No newline at end of file diff --git a/data/resources/StringResources.hu.resx b/data/resources/StringResources.hu.resx index 6732abf516..80625a11a3 100644 --- a/data/resources/StringResources.hu.resx +++ b/data/resources/StringResources.hu.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Ez az erőforrás nincs használva. Célja a fordító adatbázis tesztelése. +Valamint soremelést tartalmaz. + About @@ -5079,8 +5083,4 @@ Hiba az indításkor: Megjegyzésből ki - - Ez az erőforrás nincs használva. Célja a fordító adatbázis tesztelése. -Valamint soremelést tartalmaz. - \ No newline at end of file diff --git a/data/resources/StringResources.it.resx b/data/resources/StringResources.it.resx index c14fa8840a..d24f3c1ddd 100644 --- a/data/resources/StringResources.it.resx +++ b/data/resources/StringResources.it.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Questa risorsa non viene utilizzata. Il suo scopo è di testare il database di traduzione ed ha +una riga a capo + Informazioni su... @@ -7710,8 +7714,4 @@ Errore durante esecuzione: Rimuovi commento regione - - Questa risorsa non viene utilizzata. Il suo scopo è di testare il database di traduzione ed ha -una riga a capo - \ No newline at end of file diff --git a/data/resources/StringResources.kr.resx b/data/resources/StringResources.kr.resx index 9bc19d94fa..02e87c55eb 100644 --- a/data/resources/StringResources.kr.resx +++ b/data/resources/StringResources.kr.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ちょっとくらいのわがままは、大目に見てね。 + 정보 @@ -6263,7 +6266,4 @@ SharpDevelop 2는 리소스를 다른 방법으로 컴파일합니다: 리소스 이 부분의 주석 해제 - - ちょっとくらいのわがままは、大目に見てね。 - \ No newline at end of file diff --git a/data/resources/StringResources.nl.resx b/data/resources/StringResources.nl.resx index 14b1480cdb..d12c11379e 100644 --- a/data/resources/StringResources.nl.resx +++ b/data/resources/StringResources.nl.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Deze bron is niet in gebruik. Het doel is om vertalingsdatabase te testen en heeft een 'line break' + Info... @@ -2650,6 +2653,9 @@ Wilt u het nieuwe bestand toevoegen aan project ${CurrentProjectName}? Standaard waarden voor VB Opties: + + Code formatteren + Instellingen @@ -5730,6 +5736,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie Voeg referentie toe + + Service referentie toevoegen + Web referentie toevoegen @@ -6608,6 +6617,9 @@ De hulpbron bestanden zijn hernoemd/verplaatst op de beschreven wijze. Oplossing openen + + Verwijder van de lijst met recente projecten + Startpagina @@ -7774,7 +7786,4 @@ Startfout: Regiocommentaar verwijderen - - Deze bron is niet in gebruik. Het doel is om vertalingsdatabase te testen en heeft een 'line break' - \ No newline at end of file diff --git a/data/resources/StringResources.no.resx b/data/resources/StringResources.no.resx index 15253445af..4b19ccf170 100644 --- a/data/resources/StringResources.no.resx +++ b/data/resources/StringResources.no.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Denne ressursen er ikke i bruk. Formålet er å teste oversettingsdatabasen, og har +et linjeskift + Om @@ -7047,8 +7051,4 @@ SharpDevelop 2 kompilerer ressurser annerledes: ressursnavnet er ikke bare filna Fjern kommentarer - - Denne ressursen er ikke i bruk. Formålet er å teste oversettingsdatabasen, og har -et linjeskift - \ No newline at end of file diff --git a/data/resources/StringResources.pl.resx b/data/resources/StringResources.pl.resx index a0d27a95f7..3498f5c565 100644 --- a/data/resources/StringResources.pl.resx +++ b/data/resources/StringResources.pl.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Ten zasób nie jest używany. Jego przeznaczeniem jest testowanie bazy tłumaczeń i posiada +łamanie wiersza + O Menadżerze Dodatków @@ -5661,8 +5665,4 @@ Błąd podczas uruchamiania: Odkomentuj region - - Ten zasób nie jest używany. Jego przeznaczeniem jest testowanie bazy tłumaczeń i posiada -łamanie wiersza - \ No newline at end of file diff --git a/data/resources/StringResources.pt-br.resx b/data/resources/StringResources.pt-br.resx index 50a9a3b664..315cde3c7c 100644 --- a/data/resources/StringResources.pt-br.resx +++ b/data/resources/StringResources.pt-br.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Este recurso não está sendo utilizado. O seu proposito é testar o banco de dados de traduções e tem uma quebra de linha + Sobre @@ -228,6 +231,33 @@ Formato de arquivo desconhecido. + + Instalar do arquivo... + + + Repositorio: + + + Pesquisar: + + + Mostrar adicionais instalados + + + Você não pode desinstalar o Gerenciador de Adicionais porque você precisa dele para reinstalar os adicionais! + + + Repositório de adicionais do SharpDevelop + + + Criado por: + + + Dependências: + + + Baixados: + Esse arquivo contem novas linhas inconsistentes. @@ -6199,7 +6229,4 @@ Use somente letras, dígitos, espaço, "." ou "_" são permitidos. Desfazer comentário - - Este recurso não está sendo utilizado. O seu proposito é testar o banco de dados de traduções e tem uma quebra de linha - \ No newline at end of file diff --git a/data/resources/StringResources.pt.resx b/data/resources/StringResources.pt.resx index 9019ccad6c..840b3e1228 100644 --- a/data/resources/StringResources.pt.resx +++ b/data/resources/StringResources.pt.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Este recurso não é utilizado. A sua finalidade é testar a base de dados de traduções + Sobre @@ -5846,7 +5849,4 @@ O erro no início foi: Desfazer comentário - - Este recurso não é utilizado. A sua finalidade é testar a base de dados de traduções - \ No newline at end of file diff --git a/data/resources/StringResources.ro.resx b/data/resources/StringResources.ro.resx index a65b6bdfaf..b1430798db 100644 --- a/data/resources/StringResources.ro.resx +++ b/data/resources/StringResources.ro.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Această resursă nu este utilzată. Scopul ei este de a testa traducerile şi conţine un retur de car + + Despre @@ -3794,8 +3798,4 @@ Eroare la pornire: Regiune necomentată - - Această resursă nu este utilzată. Scopul ei este de a testa traducerile şi conţine un retur de car - - \ No newline at end of file diff --git a/data/resources/StringResources.ru.resx b/data/resources/StringResources.ru.resx index 6b347fe561..fbe55df7e1 100644 --- a/data/resources/StringResources.ru.resx +++ b/data/resources/StringResources.ru.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Эта строка нигде не используется. Она нужна для тестирования базы данных переводов, а также в ней есть +перенос строки + О Менеджере Плагинов @@ -6648,8 +6652,4 @@ SharpDevelop 2 иначе компилировал ресурсы: имя рес Раскомментировать - - Эта строка нигде не используется. Она нужна для тестирования базы данных переводов, а также в ней есть -перенос строки - \ No newline at end of file diff --git a/data/resources/StringResources.se.resx b/data/resources/StringResources.se.resx index df91d64d81..b164d07aad 100644 --- a/data/resources/StringResources.se.resx +++ b/data/resources/StringResources.se.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Den här resursen används inte. Dess syfte är att testa översättningsdatabasen och har en linjebrytning. + Om SharpDevelop @@ -229,6 +232,122 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Okänt filformat: + + Installera från arkivfil... + + + Sök: + + + Visa förinstallerade AddIns + + + Du kan inte avinstallera AddInManager eftersom denna behövs för att på nytt installera AddIns! + + + Skapad av: + + + Beroenden: + + + Nerladdningar: + + + Filens namn: + + + Installerad version: + + + Senast uppdaterad: + + + Mer information: + + + Senaste version: + + + Omdöme: + + + Rapportera missbruk + + + Version: + + + Visa licensavtal + + + Följande AddIns är beroende av "{0}": + +{1} + +Dessa kommer att sluta fungera om detta AddIn avaktiveras! Är du säker på att du vill fortsätta? + + + Jag &Accepterar + + + Jag av&böjer + + + Licensavtal + + + Lägg till + + + Kontrollera automatiskt om det finns uppdateringar + + + Flytta ner + + + Flytta upp + + + Namn: + + + Ta bort + + + Källa: + + + AddIns + + + Allmänt + + + Följande AddIns är beroende av "{0}": + +{1} + +Dessa kommer att sluta fungera om detta AddIn tas bort! Är du säker på att du vill fortsätta? + + + SharpDevelop AddIns|*.sdaddin;*.addin|Alla filer|*.* + + + Klicka här för att se uppdateringarna. + + + Uppdateringar till SharpDevelop finns tillgängliga + + + Tillgängliga + + + Installerade + + + Uppdateringar + Den här filen innehåller inkonsekvent information (newlines). @@ -269,7 +388,7 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Hjälp bibliotek - Hjälpläge + Välj hjälpinställningar Kunde inte starta Hjälp bibliotekshanteraren på grund av att katalog inte är installerad eller vald. Vänligen kontrollera dina inställningar (se Verktyg>Inställningar>Microsoft Help Viewer) @@ -299,7 +418,13 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Visa hjälp - Använd extern hjälp + Använd extern hjälpvisare + + + Jag vill använda lokal hjälp + + + Jag vill använda online-baserad hjälp Antal bytes per rad @@ -310,6 +435,9 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Data + + Förskjutning + Numeriskt system @@ -364,9 +492,39 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Alla funktioner för {0} + + Den valda SharpDevelop-profileringssessionen skapades av en nyare version av SharpDevelop och kan därför inte öppnas. + + + SharpDevelop-profileringssession + + + Detta projekt kunde inte startas eftersom den exekverbara filen inte kunde hittas. Kontrollera att projektet och dess beroenden är korrekt byggda! + + + Hittade inget projekt som kan startas. Avbryter... + + + Förbereder för analys... + + + Kunde inte registrera profileraren i COM-registret. Profileringen kan inte påbörjas! + + + Kunde inte avregistrera profileraren från COM-registret! + Profil + + Kombinera rekursiva anrop. + + + Profilera inte interna anropa hos .NET. + + + Samla data endast vid sessionens slut. + Börja insamling av data direkt efter att sessionen har startat. @@ -376,9 +534,18 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Storlek av temporär data fil. + + Spåra händelser + Profilering + + Profilera nuvarande projekt + + + Välj en exekverbar att profilera + Ogiltigt data, vänligen försök igen! @@ -388,12 +555,18 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Starta profilering + + Profilera exekverbar + Samla data Stäng ner + + Kontrollfönster för profileraren + Antal anrop @@ -403,9 +576,15 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Kopiera markerat + + Hitta anrop för valda funktioner + Gå till definition + + Ange som rot/Slå ihop + Visa funktioner @@ -439,15 +618,33 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Tid: + + Analyserare av profileringssession + Topp 20 + + Uppdaterar vy, vänligen vänta... + + + Kör med profilerare + Söker... + + Lägg till Setter + Välj de fält som du vill skapa egenskaper för: + + Implementera INotifyPropertyChanged + + + Skapa egenskaper + Extrahera funktion @@ -469,9 +666,18 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Introducera funktion {0} i {1} + + Åsidosätt Equals() och GetHashCode() + Lägg till interface {0} + + Lägg till åsidosättande av ${otherMethod} + + + Åsidosätt ToString() + Kontrollera nuvarande projekt med StyleCop @@ -583,9 +789,18 @@ Ladda hem ett tillägg från Internet och klicka sedan på 'Installera Tillägg' Tack för din medverkan! Du kan alltid gå ur genom att ändra inställningarna.i SharpDevelop. + + Jag vill delta - samla och skicka användningsdata + + + Jag vill inte delta + Visa insamlad data + + Ta bort marginal + Händelsefärg: @@ -644,9 +859,15 @@ Du kan specificera ett startcommando i projektinställningarna. Avregistrera TypeLib + + Misslyckades med att bifoga till processen {0}. + Process + + Bifoga + Kan inte hitta typen @@ -767,6 +988,9 @@ Du kan specificera ett startcommando i projektinställningarna. &Öppna + + Token för publik nyckel + Version @@ -869,6 +1093,12 @@ Du kan specificera ett startcommando i projektinställningarna. Väntar på att applikationen skall starta. Ifall applikationen inte startar (eller om du tröttnar på att vänta) så kan du avbryta genom att klicka på Avbryt. + + Är du säker på att du vill återställa alla tidigare angivna formateringsinställningar? + + + Återställ till: + Infoga anonyma metoder utan parametrar. @@ -1227,7 +1457,7 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Detaljinställningar för kodkomplettering - Följande inställningar är programspråksberoende, varför inställningarna kan variera mellan resp. språk. + Följande inställningar är språkberoende, vissa inställningar är inte tillgängliga för vissa språk. Använd följande inställning för att avaktivera kodkomplettering: @@ -1238,6 +1468,9 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Spara + + Dokumentation (om tillgänglig) + Förhandsvälj nyligen använda medlemmar @@ -1302,7 +1535,7 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Redigera Standardrubriker - Generella + Allmänt Skapa &alltid säkerhetskopia @@ -1548,11 +1781,14 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Ingen - Markörer och linjaler + Markörer Markörer och linjaler + + Linjaler + Visa &blanksteg @@ -1638,7 +1874,7 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Projektinformation - &Rot namespace: + &Rotnamnrymd: &Startobjekt: @@ -1737,7 +1973,7 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? Tillåt &osäker kod - Generell + Allmänt Referera inte till &mscorlib.dll @@ -1806,7 +2042,7 @@ Vill du lägga till den nya filen till projektet ${CurrentProjectName}? &Lägg till importering - &Namespace: + &Namnrymd: Publicera @@ -1997,6 +2233,9 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek &Lägg till + + Avancerad + < Tillbaka @@ -2090,6 +2329,9 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Flytta &Upp + + Ej tillämpbar + Namn @@ -2207,6 +2449,9 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek XML redigerare + + Välj vilket program som du vill öppna denna fil med: + Standard @@ -2264,9 +2509,21 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Boo tolkare + + SharpDevelop kan inte hitta FxCop. Välj installationsmapp för FxCop i SharpDevelops inställningar. + + + Kan inte läsa loggfilen för FxCop: + Mono är inte installerad. + + Kör kodanalys... + + + Okänd version av vald Mono Framework + Kodanalys @@ -2291,6 +2548,9 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Kunde inte hitta FxCop - kontrollera att FxCop finns installerad. + + Laddar tillgängliga regler... + Du kan specificera sökvägen till FxCop under inställningarna för SharpDevelop. @@ -2306,6 +2566,9 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Kör FxCop på + + Visa inte meddelande + Kodtäckning @@ -2315,9 +2578,15 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Kolumn + + Innehåll + Slutkolumn + + Radslut + Ingen resultatfil för kodtäckning genererades: @@ -2369,6 +2638,21 @@ Du kan även välja att lagra inställningen i .user-filen istället för projek Ytterligare inställningar + + Länkskapare + + + Länka ytterligare filer + + + Länka specifika .NET-moduler + + + Biblioteksfilernas placeringar + + + Bädda in .NET-resursfil + Preprocessor @@ -2666,6 +2950,9 @@ Alla ändringar kommer att förloras. Vill du verkligen avsluta SharpDevelop? Alla ändringar som inte sparats kommer att förloras! + + Rapportera fel till SharpDevelop-teamet + Tack för att du hjälper oss att göra SharpDevelop till ett bättre program. @@ -2685,7 +2972,7 @@ Alla ändringar kommer att förloras. Sökväg - Namespace + Namnrymd K&omponenter att lägga till @@ -2721,7 +3008,7 @@ Alla ändringar kommer att förloras. Konfigurera Verktygsfält - Namespace + Namnrymd &Ny @@ -2763,7 +3050,7 @@ Alla ändringar kommer att förloras. markera metoden InitializeComponents i kodvyn som endast läsbar - Generell + Allmänt Rutsystemets egenskaper @@ -2771,6 +3058,9 @@ Alla ändringar kommer att förloras. &Höjd + + Använd optimerad kodgenerering + Rutsystemets Inställningar @@ -2844,13 +3134,13 @@ Inga komponenter för WindowsFormer kommer att vara tillgängliga, var god konfi Gå till - Namespace innehåller ogiltiga tecken. Ett namespace kan endast innehålla bokstäver, siffror eller underscore tecken. + Namnrymden innehåller ogiltiga tecken. En namnrymd kan endast innehålla tecken som består av bokstäver, siffror eller understreck. Referensnamnet innehåller ogiltiga tecken. - &Namespace: + &Namnrymd: Parametrar @@ -2972,13 +3262,16 @@ Endast bokstäver, siffror, mellanslag, '.' eller '_' får användas. Specificerar om filen skall kopieras till utdatamappen - Anpassa verktyg + Anpassningsverktyg Specificerar verktyget som konverterar filen till utdatat. - Namespace för anpassa verktyg + Namnrymd för anpassningsverktyget + + + Specificerar namnrymden som anpassningsverktyget placerar utdata i. Fullständig sökväg till filen. @@ -3043,6 +3336,9 @@ Endast bokstäver, siffror, mellanslag, '.' eller '_' får användas. Konvertera valda &projekt till: + + Kompilatorversion + &Konvertera @@ -3149,6 +3445,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Lägg till filer... + + Installationspaket + Kunde inte hitta '{0}' i {1} @@ -3218,6 +3517,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö WiX bibliotek + + Inga skillnader upptäckta. + WIX projekt @@ -3303,10 +3605,10 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Schemata - Det gick inte att lägga till schemat. Namespace '{0}' existerar redan. + Det gick inte att lägga till schemat. Namnrymden '{0}' existerar redan. - Schema '{0}' saknar ett namespace (mål). + Schema '{0}' saknar en namnrymd som mål. XML Schemata @@ -3344,6 +3646,12 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö XML träd + + Namnrymd + + + Namnrymd + Prefix @@ -3392,6 +3700,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Vill du verkligen kassera dina ändringar? + + namnrymd + Vill du spara ändringarna? @@ -3968,6 +4279,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö XML dokumentationsfilen existerar inte, du måste kompilera projektet först. + + För att skapa dokumentation från XML-kommentarer så krävs att 'Sandcastle Help File Builder' är installerad. + HTML-e&xport @@ -4062,7 +4376,7 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Multilinje - Namespace + Namnrymd Publik synlig @@ -4235,6 +4549,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Operationen kunde inte utföras på grund av att källkoden innehåller fel: + + Skapa &Getter + Skapa OnEvent-metod @@ -4298,6 +4615,9 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö Flytta klassen till filen '${FileName}' + + Åsidosättanden av ${Name} + Referenser till ${Name} @@ -4329,7 +4649,7 @@ Gå till 'Inställningar->Visuell stil' och ändra den nuvarande språkmiljö C# Dokumentations Taggar - Generell + Allmänt Licenser @@ -5660,7 +5980,4 @@ Resursfilerna har därför bytt namn/flyttats enligt ovan. Avkommentera region - - Den här resursen används inte. Dess syfte är att testa översättningsdatabasen och har en linjebrytning. - \ No newline at end of file diff --git a/data/resources/StringResources.tr.resx b/data/resources/StringResources.tr.resx index 1bf40d0bba..fef1b793e7 100644 --- a/data/resources/StringResources.tr.resx +++ b/data/resources/StringResources.tr.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Bu kaynak kullanılamıyor. Amacı, çeviri veritabanını test etmek ve bir satır kesmesi var. + Hakkında @@ -160,7 +163,7 @@ Bu eklenti iki kez kurulmuş. Lütfen birini kaldırın. - Eklentinin Eklenti Yöneticisi tarafindan kullanılmasi için bir kimliği olmalıdır. + Eklenti Eklenti Yöneticisi tarafından kullanılabilmesi için bir <kimlik> sahibi olmalıdır. Eklenti SharpDevelop yeniden başlatıldığında kaldırılacak. @@ -229,6 +232,158 @@ Bilinmeyen dosya biçimi: + + Arşivden yükle... + + + Depo: + + + Ara: + + + Önyüklü eklentileri göster + + + Önsürümleri göster + + + Eklentileri yeniden yüklemeden, eklenti yöneticisini kaldıramazsınız! + + + SharpDevelop Eklenti Arşivi + + + Düzenleyen: + + + Bağımlılıklar: + + + İndirilenler: + + + Dosya adı: + + + Yüklü sürüm: + + + Son güncelleme: + + + Daha fazla bilgi + + + Yeni sürüm: + + + Değerlendirme: + + + Uygunsuzluğu bildir + + + Sürüm: + + + Lisans Koşulları: + + + Kurulu Eklenti, "{0}"'a bağlıdır: + +{1} + +Eklenti devre dışı olduktan sonra durabilir! Devam etmek istediğinizden emin misiniz? + + + Paket "{0}", ilave pakete ihtiyaç duymaktadır: + +{1} + +Uygulama, onları da indirip yüklemek için çalışacak. Devam etmek istiyor musunuz? + + + Seçili paket geçerli SharpDevelop Eklentisi içermiyor. + + + &Kabul et + + + &Reddet + + + "Kabul et" butonuna tıklayarak paket için lisans şartlarını kabul ediyorsunuz. +Eğer lisans şartlarını kabul etmiyorsanız "Reddet" butonuna tıklayın. + + + "Kabul et" butonuna tıklayarak yukarıda listelenen paketler için lisans şartlarını kabul ediyorsunuz. +Eğer lisans şartlarını kabul etmiyorsanız "Reddet" tıklayın. + + + Aşağıdaki paket için bir lisans koşulunu kabul gerekiyor: + + + Aşağıdaki paketler için lisans koşullarını kabul etmeniz gerekli: + + + Lisans Koşulları + + + Ekle + + + Güncellemeleri otomatik kontrol et + + + Aşağı Taşı + + + Yukarı Taşı + + + Ad: + + + Kaldır + + + Kaynak: + + + Eklenti + + + Genel + + + Depolar + + + "{0}", aşağıdaki yüklü Eklentiye bağlı: + +{1} + +Eklenti kaldırıldıktan sonra çalışması durabilir! Devam etmek istediğinizden emin misiniz? + + + SharpDevelop Eklentileri|*.sdaddin;*.addin|All files|*.* + + + Güncellemeleri görmek için buraya tıklayın. + + + SharpDevelop için yararlanılabilir güncelleştirmeler + + + Yararlanılabilir + + + Yüklü + + + Güncellemeler + Bu dosya tutarsız satırlar içeriyor. @@ -269,11 +424,14 @@ Yardım Kitaplığı - Yardım Modu + Yardım Tercihi Ayarı Seçili veya yüklü bir yardım kataloğu olmadığından, Kütüphane Yöneticisi Yardımı başlatılamıyor. Yardım ayarlarınızı kontrol ediniz(Araçlar> Seçenekler> Araçlar> Microsoft Yardım Görüntüleyici). + + Yardım Kitaplığı Yöneticisi bulunamadı. SharpDevelop yardım özelliğini kullanmak için Microsoft Windows SDK 7.1 indirin ve kurun. + Kütüphane Yöneticisi Yardımı bulunamadı. Yüklemeyi kontrol edin. @@ -302,7 +460,7 @@ Yardımı Göster - Harici yardımı kullan + Harici yardım görüntüleyici kullan Yerel yardımı kullanmak istiyorum @@ -1382,6 +1540,30 @@ Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya Kod Kalite Analizi + + Kodu otomatik biçimlendir + + + (varsayılan) + + + (global) + + + Ön ayarlı seçim biçimlendirilmemiş! + + + Tüm öntanımlı biçimlendirme seçeneklerini sıfırlamak istediğinizden emin misiniz? + + + (proje) + + + Sıfırla: + + + (Çözüm) + Açık yönteme referans ekleyin; yeni yöntem eklemek için tab veya enter tuşuna tekrar basın. @@ -1823,6 +2005,15 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Kaydet + + Araçipuçları linkler gitmeli + + + Kod tanımı + + + Belgeler (varsa) + Son kullanılan üyeleri öncelikli seç @@ -1871,6 +2062,12 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Hata ayıklama + + Bağımsız değişkenleri ve yürütülebilir lansman üzerinde çalışan dizini iste. + + + Yürütmenin ilk satırında ara ver. + Tekrar derlemeyi etkinleştir @@ -1919,6 +2116,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Sembol ve kaynak kodu yolları: + + Kaynak Ayıklama Olmadan + Başlık @@ -2186,6 +2386,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Eşleşen parantezleri vurgula + + Geçerli satırı vurgulayın + Sembolleri vurgula @@ -2447,6 +2650,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? VB Seçenekleri için varsayılan değerler: + + Kod biçimlendirme + Yapılandırma @@ -3152,9 +3358,15 @@ Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içind Kapsanmamış Kod + + Kod Kısmen Kapalı + Kolon + + İçerik + Gösterim Seçenekleri @@ -3596,6 +3808,12 @@ Not: Bu işlem özel düzenlemelerinizi etkilemez. Artan Ters Arama: + + {0} geçerli bir .NET derlemesi değil. + + + {0} erişilebilir değil ya da artık yok. + ${Filename} dosyasından ${Assembly} için kod tamamlama bilgisi yükleme hatası: @@ -4128,6 +4346,9 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz. Bu çözüm dışarıdan değiştirildi. + + Çözüm Biçimlendirme Seçenekleri + Seçilen projeleri dönüştür: @@ -4472,6 +4693,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< .NET Framework Uzantısı + + WİX yüklü değil. Lütfen http://wixtoolset.org/ adresinden indirin. + Fark bulunamadı @@ -4493,6 +4717,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Visual Studio Uzantısı + + WPF Tasarımcısı Küçük Resim Görünümü + Kopyala @@ -4793,6 +5020,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Sık Kullanılanlar + + Çalışma alanına ekle + Geri @@ -4832,9 +5062,24 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Arama sonucu olumsuz. + + Derleme aç + + + Dosyadan derleme aç... + + + GAC'dan derleme aç... + + + Sınıf Tarayıcıda Aç + Sınıf Görünümü Arama + + {0} Çalışma alanı + Sınıflar @@ -4847,6 +5092,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Sözcük Kaydırmaya Geç + + İzleme ifadesi ekle + DuraksamaNoktaları @@ -4943,6 +5191,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Konsol + + Çalıştırılabilir ayıkla + Kesme @@ -5300,6 +5551,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< deki + + <proje yok> + ${Count} tane bulundu @@ -5315,6 +5569,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Dosya başına + + Proje başına + + + Proje ve dosya başına + Liste modu aramayı seç @@ -5480,6 +5740,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Referans Ekle + + Servis Referansı Ekle + Web Referansı Ekle @@ -5750,6 +6013,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Kaynak kod üreteci: '{0}' kaynağı için hiçbir kaynak özelliği oluşturamıyor. + + Yorum + İçerik @@ -5762,6 +6028,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Kaynak adı kopyala + + Yorumu düzenle + + + Kaynak yorumunuz için yeni metin giriniz: + Yeniden adlandır @@ -5879,6 +6151,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< ${Name} 'den türeme sınıflar + + Pano halkasından yapıştır... + + + Pano halkası boş + Otomatik özelliği dönüştür @@ -5963,6 +6241,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< ${Name} geçersiz kıl + + ${Name} parçaları + ${Name} referansları @@ -6339,6 +6620,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. Çözüm Aç + + Son projeler listesinden kaldır + Başlangıç Sayfası @@ -6351,6 +6635,12 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. satır ${Line} sütun ${Column} ${Character} + + Uzunluk ${Rows} * ${Cols}(${Total}) + + + Uzunluk ${Length} + Çeşitli @@ -7498,7 +7788,4 @@ Başlatma hatası: Bölgeyi yorumlama - - Bu kaynak kullanılamıyor. Amacı, çeviri veritabanını test etmek ve bir satır kesmesi var. - \ No newline at end of file diff --git a/data/resources/StringResources.zh.resx b/data/resources/StringResources.zh.resx index 94040e1397..5431a37f01 100644 --- a/data/resources/StringResources.zh.resx +++ b/data/resources/StringResources.zh.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 该资源不被使用.它仅仅用来测试翻译数据库. + 关于 @@ -7241,7 +7244,4 @@ SharpDevelop 编译资源时发现不对应:资源名称不是文件名,而 设为非注释区 - - 该资源不被使用.它仅仅用来测试翻译数据库. - \ No newline at end of file diff --git a/src/Tools/LocalizationDbToResFile/AssemblyInfo.cs b/src/Tools/LocalizationDbToResFile/AssemblyInfo.cs deleted file mode 100644 index 205aa8a9ad..0000000000 --- a/src/Tools/LocalizationDbToResFile/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("2.0.0.1")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj b/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj deleted file mode 100644 index df63effeb4..0000000000 --- a/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj +++ /dev/null @@ -1,44 +0,0 @@ - - - Debug - AnyCPU - 8.0.40607 - 2.0 - {244dd983-dc60-42f7-9bb9-35b7b5c8b737} - NewProject - LocalizationDbToResFile - Exe - 4 - False - False - OnSuccessfulBuild - - - True - True - False - True - \ - False - - - True - True - False - True - \ - False - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj.user b/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj.user deleted file mode 100644 index c818d818c8..0000000000 --- a/src/Tools/LocalizationDbToResFile/LocalizationDbToResFile.csproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Tools/LocalizationDbToResFile/Main.cs b/src/Tools/LocalizationDbToResFile/Main.cs deleted file mode 100644 index 12219d0542..0000000000 --- a/src/Tools/LocalizationDbToResFile/Main.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Data; -using System.Data.OleDb; -using System.IO; -using System.Windows.Forms; -using System.Text; - -namespace Assemble { - - /// - /// This tool is written especially for SharpDevelop to translate the - /// database that containes the localization information to resasm files. - /// Resasm compiles these files to resource files which are used for sharpdevelop. - /// - class MainClass - { - static OleDbConnection myConnection; - - /// - /// Open the database connection (LocalizeDb.mdb must exists - /// in the Application.StartupPath) - /// - static void Open() - { - string connection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + - Application.StartupPath + - Path.DirectorySeparatorChar + "LocalizeDb.mdb;"; - myConnection = new OleDbConnection(connection); - myConnection.Open(); - } - - /// - /// Parses a string, if it has " or \n sequences in it - /// and puts them into the string as backslash code sequences - /// - static string ConvertIllegalChars(string str) - { - StringBuilder newString = new StringBuilder(); - for (int i = 0; i < str.Length; ++i) { - switch (str[i]) { - case '\r': - break; - case '\n': - newString.Append("\\n"); - break; - case '"': - newString.Append("\\\""); - break; - case '\\': - newString.Append("\\\\"); - break; - default: - newString.Append(str[i]); - break; - } - } - return newString.ToString(); - } - - public static void Main(string[] args) - { - Open(); - string lang = "PrimaryResLangValue"; - StreamWriter writer = null; - - // gets the /F: parameter for the filename - // gets the /T: parameter for the language to extract - foreach (string param in args) { - string par = param; - if (par.StartsWith("/F:")) { - par = par.Substring(3); - writer = new StreamWriter(par, false, new UTF8Encoding());; - } - if (par.StartsWith("/T:")) { - par = par.Substring(3); - lang = par; - } - } - - // now select all database entries and write - // the resasm file (if no /F: is specified it prints to stdout) - OleDbCommand myOleDbCommand = new OleDbCommand("SELECT * FROM Localization", myConnection); - OleDbDataReader reader = myOleDbCommand.ExecuteReader(); - while (reader.Read()) { - string val = ConvertIllegalChars(reader[lang].ToString()).Trim(); - if (val.Length > 0) { - string str = reader["ResourceName"].ToString() + " = \"" + val + "\""; - if (writer == null) { - Console.WriteLine(str); - } else { - writer.WriteLine(str); - } - } - } - reader.Close(); - if (writer != null) { - writer.Close(); - } - myConnection.Close(); - } - } -} diff --git a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.cs b/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.cs deleted file mode 100644 index 4213017c79..0000000000 --- a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Drawing; -using System.Resources; -using System.IO; -using System.Text; -using System.Drawing.Imaging; -using System.Windows.Forms; -using System.Runtime.Serialization.Formatters.Binary; -using System.Xml; - -public class TranslationBuilder -{ - static void Assemble(string pattern) - { - string[] files = Directory.GetFiles(Directory.GetCurrentDirectory(), pattern); - - foreach (string file in files) { - if (Path.GetExtension(file).ToUpper() == ".XML") { - try { - XmlDocument doc = new XmlDocument(); - doc.Load(file); - string resfilename = "StringResources." + doc.DocumentElement.Attributes["language"].InnerText + ".resources"; - ResourceWriter rw = new ResourceWriter(resfilename); - - foreach (XmlElement el in doc.DocumentElement.ChildNodes) { - rw.AddResource(el.Attributes["name"].InnerText, - el.InnerText); - } - - rw.Generate(); - rw.Close(); - } catch (Exception e) { - Console.WriteLine("Error while processing " + file + " :"); - Console.WriteLine(e.ToString()); - } - } - } - } - - static void ShowHelp() - { - Console.WriteLine(".NET Translation Builder Version 0.1"); - Console.WriteLine("Copyright (C) Mike Krueger 2001. Released under GPL.\n"); - Console.WriteLine(" Translation Builder Options Options\n"); - Console.WriteLine(" - INPUT FILES -"); - Console.WriteLine(" translates the given xml files into resource files"); - } - - public static void Main(string[] args) - { - if (args.Length == 0) { - ShowHelp(); - } - foreach (string param in args) { - string par = param.ToUpper(); - if (par == "/?" || par == "/H" || par== "-?" || par == "-H" || par == "?") { - ShowHelp(); - return; - } else { - Assemble(param); - } - } - } -} diff --git a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj b/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj deleted file mode 100644 index a7fd4f2674..0000000000 --- a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj +++ /dev/null @@ -1,43 +0,0 @@ - - - Debug - AnyCPU - 8.0.40607 - 2.0 - {6084d932-aafb-4335-831a-519226095ba6} - NewProject - LocalizationXmlToResFile - Exe - 4 - False - False - OnSuccessfulBuild - - - True - True - False - True - ..\bin\Debug\ - False - - - True - True - False - True - ..\bin\Release\ - False - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj.user b/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj.user deleted file mode 100644 index c818d818c8..0000000000 --- a/src/Tools/LocalizationXmlToResFile/LocalizationXmlToResFile.csproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Tools/ResGet/DownloadAll.bat b/src/Tools/ResGet/DownloadAll.bat new file mode 100644 index 0000000000..06f74f8ea2 --- /dev/null +++ b/src/Tools/ResGet/DownloadAll.bat @@ -0,0 +1 @@ +resget --url "http://translation.sharpdevelop.net/resources/" --format "resx" --branch 500 --targetDir "%~dp0\..\..\..\data\resources" --overwrite true \ No newline at end of file diff --git a/src/Tools/ResGet/README.txt b/src/Tools/ResGet/README.txt new file mode 100644 index 0000000000..4b1ea7c5c5 --- /dev/null +++ b/src/Tools/ResGet/README.txt @@ -0,0 +1,4 @@ +This tool downloads the translation .resx files from the online translation database. + +The source code for ResGet can be found at: +https://github.com/icsharpcode/ResourceFirstTranslations/tree/master/src/ResGet diff --git a/src/Tools/ResGet/ResGet.exe b/src/Tools/ResGet/ResGet.exe new file mode 100644 index 0000000000000000000000000000000000000000..40b59eb759896720c51274c9de770b31bf2a89b6 GIT binary patch literal 262144 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 literal 0 HcmV?d00001 diff --git a/src/Tools/ResGet/ResGet.exe.config b/src/Tools/ResGet/ResGet.exe.config new file mode 100644 index 0000000000..c7416147fd --- /dev/null +++ b/src/Tools/ResGet/ResGet.exe.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Tools/StringResourceTool/BuildResourceFiles.cs b/src/Tools/StringResourceTool/BuildResourceFiles.cs deleted file mode 100644 index 3048728ffb..0000000000 --- a/src/Tools/StringResourceTool/BuildResourceFiles.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml.Linq; - -namespace StringResourceTool -{ - ///

- /// Description of BuildResourceFiles. - /// - public class BuildResourceFiles - { - // map of languages with different name in the database - static readonly Dictionary codeMap = new Dictionary { - { "br", "pt-br" }, - { "cn-gb", "zh" } - }; - - public static void Build(ResourceDatabase db, string resourceDir, Action debugOutput) - { - XDocument languageDefinition = XDocument.Load(Path.Combine(resourceDir, "languages/LanguageDefinition.xml")); - var languageCodes = languageDefinition.Root.Elements().Select(e => e.Attribute("code").Value); - - foreach (LanguageTable language in db.Languages) { - string databaseCode = language.LanguageName; - string code = codeMap.ContainsKey(databaseCode) ? codeMap[databaseCode] : databaseCode; - - string filename; - if (code == "en") - filename = Path.Combine(resourceDir, "StringResources.resx"); - else - filename = Path.Combine(resourceDir, "StringResources." + code + ".resx"); - if (File.Exists(filename)) { - language.SaveAsResx(filename, code == "en"); - } else if (language.Entries.Count > 0.5 * db.Languages[0].Entries.Count) { - debugOutput("Language " + code + " is more than 50% complete but not present in resourceDir"); - } - - if (language.Entries.Count > 0.75 * db.Languages[0].Entries.Count && !languageCodes.Contains(code)) { - debugOutput("Language " + code + " is more than 75% complete but not defined in LanguageDefinition.xml"); - } else if (language.Entries.Count < 0.75 * db.Languages[0].Entries.Count && languageCodes.Contains(code)) { - debugOutput("Language " + code + " is less than 75% complete but defined in LanguageDefinition.xml"); - } - } - } - } -} diff --git a/src/Tools/StringResourceTool/CookieAwareWebClient.cs b/src/Tools/StringResourceTool/CookieAwareWebClient.cs deleted file mode 100644 index 95ed4f0f52..0000000000 --- a/src/Tools/StringResourceTool/CookieAwareWebClient.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Net; - -namespace StringResourceTool -{ - public class CookieAwareWebClient : WebClient - { - CookieContainer container; - - public CookieAwareWebClient(CookieContainer container) - { - if (container == null) - throw new ArgumentNullException("container"); - this.container = container; - } - - protected override WebRequest GetWebRequest(Uri address) - { - WebRequest request = base.GetWebRequest(address); - if (request is HttpWebRequest) { - (request as HttpWebRequest).CookieContainer = container; - } - return request; - } - } -} diff --git a/src/Tools/StringResourceTool/MainForm.cs b/src/Tools/StringResourceTool/MainForm.cs deleted file mode 100644 index e580415eb6..0000000000 --- a/src/Tools/StringResourceTool/MainForm.cs +++ /dev/null @@ -1,578 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Resources; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace StringResourceTool -{ - public class MainForm : System.Windows.Forms.Form - { - public MainForm() - { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - try { - using (StreamReader r = new StreamReader("password.txt")) { - userNameTextBox.Text = r.ReadLine(); - passwordTextBox.Text = r.ReadLine(); - } - savePasswordCheckBox.Checked = true; - } catch {} - - Dictionary languages = new Dictionary() { - { "cz", "Czech" }, - { "nl", "Dutch" }, - { "fr", "French" }, - { "de", "German" }, - { "it", "Italian" }, - { "pt", "Portuguese" }, - { "es", "Spanish" }, - { "se", "Swedish" }, - { "goisern", "Goiserisch" }, - { "ru", "Russian" }, - { "br", "Brazilian Portuguese" }, - { "pl", "Polish" }, - { "jp", "Japanese" }, - { "th", "Thai" }, - { "kr", "Korean" }, - { "dk", "Danish" }, - { "hu", "Hungarian" }, - { "ro", "Romanian" }, - { "cn-gb", "Chinese Simplified" }, - { "cn-big", "Chinese Traditional" }, - { "ca", "Catalan" }, - { "bg", "Bulgarian" }, - { "urdu", "Urdu" }, - { "be", "Belarusian" }, - { "el", "Greek" }, - { "tr", "Turkish" }, - { "sk", "Slovak" }, - { "lt", "Lithuanian" }, - { "he", "Hebrew" }, - { "sl", "Slovenian" }, - { "es-mx", "Spanish (Mexico)" }, - { "af", "Afrikaans" }, - { "vi", "Vietnamese" }, - { "ar", "Arabic" }, - { "no", "Norwegian" }, - { "fa", "Persian" }, - { "sr", "Serbian" }, - { "fi", "Finnish" }, - { "hr", "Croatian" }, - { "id", "Indonesian" } - }; - - // Clear the combobox - comboBox1.DataSource = null; - comboBox1.Items.Clear(); - - // Bind the combobox - comboBox1.DataSource = new BindingSource(languages, null); - comboBox1.DisplayMember = "Value"; - comboBox1.ValueMember = "Key"; - } - - [STAThread] - public static void Main(string[] args) - { - if (args.Length == 3) { - try { - string userName, password; - using (StreamReader r = new StreamReader("password.txt")) { - userName = r.ReadLine(); - password = r.ReadLine(); - } - TranslationServer server = new TranslationServer(new TextBox()); - if (!server.Login(userName, password)) { - MessageBox.Show("Login failed"); - return; - } - server.AddResourceString(args[0], args[1], args[2]); - MessageBox.Show("Resource string added to database on server"); - return; - } catch (Exception ex) { - MessageBox.Show(ex.ToString()); - } - } - Application.EnableVisualStyles(); - Application.Run(new MainForm()); - } - - #region Windows Forms Designer generated code - /// - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// - private void InitializeComponent() - { - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.deleteStringsButton = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.savePasswordCheckBox = new System.Windows.Forms.CheckBox(); - this.button3 = new System.Windows.Forms.Button(); - this.passwordTextBox = new System.Windows.Forms.TextBox(); - this.userNameTextBox = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.outputTextBox = new System.Windows.Forms.TextBox(); - this.button5 = new System.Windows.Forms.Button(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.comboBox1); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.deleteStringsButton); - this.groupBox1.Controls.Add(this.button4); - this.groupBox1.Controls.Add(this.savePasswordCheckBox); - this.groupBox1.Controls.Add(this.button3); - this.groupBox1.Controls.Add(this.passwordTextBox); - this.groupBox1.Controls.Add(this.userNameTextBox); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Location = new System.Drawing.Point(12, 12); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(597, 100); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Translation server"; - // - // comboBox1 - // - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "cz\">Czech", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - ""}); - this.comboBox1.Location = new System.Drawing.Point(76, 65); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(121, 21); - this.comboBox1.TabIndex = 9; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(12, 68); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(58, 13); - this.label3.TabIndex = 8; - this.label3.Text = "Language:"; - // - // deleteStringsButton - // - this.deleteStringsButton.Enabled = false; - this.deleteStringsButton.Location = new System.Drawing.Point(411, 20); - this.deleteStringsButton.Name = "deleteStringsButton"; - this.deleteStringsButton.Size = new System.Drawing.Size(144, 23); - this.deleteStringsButton.TabIndex = 7; - this.deleteStringsButton.Text = "Delete resource strings"; - this.deleteStringsButton.Click += new System.EventHandler(this.DeleteStringsButtonClick); - // - // button4 - // - this.button4.Enabled = false; - this.button4.Location = new System.Drawing.Point(292, 20); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(113, 23); - this.button4.TabIndex = 6; - this.button4.Text = "Download database"; - this.button4.Click += new System.EventHandler(this.DownloadButtonClick); - // - // savePasswordCheckBox - // - this.savePasswordCheckBox.Location = new System.Drawing.Point(182, 44); - this.savePasswordCheckBox.Name = "savePasswordCheckBox"; - this.savePasswordCheckBox.Size = new System.Drawing.Size(104, 24); - this.savePasswordCheckBox.TabIndex = 5; - this.savePasswordCheckBox.Text = "Save password"; - // - // button3 - // - this.button3.Location = new System.Drawing.Point(182, 20); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 4; - this.button3.Text = "Login"; - this.button3.Click += new System.EventHandler(this.Button3Click); - // - // passwordTextBox - // - this.passwordTextBox.Location = new System.Drawing.Point(76, 42); - this.passwordTextBox.Name = "passwordTextBox"; - this.passwordTextBox.PasswordChar = '●'; - this.passwordTextBox.Size = new System.Drawing.Size(100, 20); - this.passwordTextBox.TabIndex = 3; - this.passwordTextBox.UseSystemPasswordChar = true; - // - // userNameTextBox - // - this.userNameTextBox.Location = new System.Drawing.Point(76, 19); - this.userNameTextBox.Name = "userNameTextBox"; - this.userNameTextBox.Size = new System.Drawing.Size(100, 20); - this.userNameTextBox.TabIndex = 1; - // - // label2 - // - this.label2.Location = new System.Drawing.Point(6, 40); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(64, 23); - this.label2.TabIndex = 2; - this.label2.Text = "Password:"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // label1 - // - this.label1.Location = new System.Drawing.Point(6, 17); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(64, 23); - this.label1.TabIndex = 0; - this.label1.Text = "Username:"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(141, 118); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(124, 23); - this.button2.TabIndex = 2; - this.button2.Text = "Find missing strings"; - this.button2.Click += new System.EventHandler(this.Button2Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(11, 118); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(124, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Find unused strings"; - this.button1.Click += new System.EventHandler(this.Button1Click); - // - // outputTextBox - // - this.outputTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.outputTextBox.Location = new System.Drawing.Point(12, 147); - this.outputTextBox.Multiline = true; - this.outputTextBox.Name = "outputTextBox"; - this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.outputTextBox.Size = new System.Drawing.Size(597, 309); - this.outputTextBox.TabIndex = 3; - // - // button5 - // - this.button5.Location = new System.Drawing.Point(271, 118); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(280, 23); - this.button5.TabIndex = 4; - this.button5.Text = "Upload resources (check language! dangerous!)"; - this.button5.UseVisualStyleBackColor = true; - this.button5.Click += new System.EventHandler(this.Button5Click); - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(621, 468); - this.Controls.Add(this.button5); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.outputTextBox); - this.Name = "MainForm"; - this.Text = "StringResourceTool"; - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - } - private System.Windows.Forms.Label label3; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.Button deleteStringsButton; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.CheckBox savePasswordCheckBox; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TextBox passwordTextBox; - private System.Windows.Forms.TextBox userNameTextBox; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.TextBox outputTextBox; - #endregion - - void Button1Click(object sender, EventArgs e) - { - button1.Enabled = false; - Display(FindMissing(FindResourceStrings(), FindUsedStrings())); - button1.Enabled = true; - } - - void Button2Click(object sender, EventArgs e) - { - button2.Enabled = false; - Display(FindMissing(FindUsedStrings(), FindResourceStrings())); - button2.Enabled = true; - } - - void Display(List list) - { - StringBuilder b = new StringBuilder(); - foreach (string entry in list) { - b.AppendLine(entry); - } - outputTextBox.Text = b.ToString(); - } - - /// Gets entries in t1 that are missing from t2. - List FindMissing(HashSet t1, HashSet t2) - { - return t1.Except(t2).OrderBy(s=>s).ToList(); - } - - HashSet FindUsedStrings() - { - HashSet t = new HashSet(); - FindUsedStrings(t, @"..\..\..\..\.."); - return t; - } - void FindUsedStrings(HashSet t, string path) - { - foreach (string subPath in Directory.GetDirectories(path)) { - if (!(subPath.EndsWith(".svn") || subPath.EndsWith("\\obj"))) { - FindUsedStrings(t, subPath); - } - } - foreach (string fileName in Directory.EnumerateFiles(path)) { - switch (Path.GetExtension(fileName).ToLowerInvariant()) { - case ".cs": - case ".boo": - FindUsedStrings(fileName, t, resourceService); - break; - case ".xaml": - FindUsedStrings(fileName, t, xamlLocalize, xamlLocalizeElementSyntax); - break; - case ".resx": - case ".resources": - case ".dll": - case ".exe": - case ".pdb": - break; - default: - FindUsedStrings(fileName, t); - break; - } - } - } - - const string resourceNameRegex = @"[\.\w\d]+"; - - readonly static Regex pattern = new Regex(@"\$\{res:(" + resourceNameRegex + @")\}", RegexOptions.Compiled); - readonly static Regex resourceService = new Regex(@"ResourceService.GetString\(\""(" + resourceNameRegex + @")\""\)", RegexOptions.Compiled); - readonly static Regex xamlLocalize = new Regex(@"\{\w+:Localize\s+(" + resourceNameRegex + @")\}", RegexOptions.Compiled); - readonly static Regex xamlLocalizeElementSyntax = new Regex(@"\<\w+:LocalizeExtension\s+Key\s*=\s*[""'](" + resourceNameRegex + @")[""']", RegexOptions.Compiled); - - void FindUsedStrings(string fileName, HashSet t, params Regex[] extraPatterns) - { - StreamReader sr = File.OpenText(fileName); - string content = sr.ReadToEnd(); - sr.Close(); - foreach (Match m in pattern.Matches(content)) { - //Debug.WriteLine(fileName); - t.Add(m.Groups[1].Captures[0].Value); - } - foreach (var extraPattern in extraPatterns) { - foreach (Match m in extraPattern.Matches(content)) { - //Debug.WriteLine(fileName); - t.Add(m.Groups[1].Captures[0].Value); - } - } - } - const string srcDir = @"..\..\..\..\"; - HashSet FindResourceStrings() - { - var rs = new ResXResourceReader(srcDir + @"..\data\resources\StringResources.resx"); - HashSet t = new HashSet(); - foreach (DictionaryEntry e in rs) { - t.Add(e.Key.ToString()); - } - rs.Close(); - return t; - } - - TranslationServer server; - - void Button3Click(object sender, EventArgs e) - { - server = new TranslationServer(outputTextBox); - if (savePasswordCheckBox.Checked) { - using (StreamWriter w = new StreamWriter("password.txt")) { - w.WriteLine(userNameTextBox.Text); - w.WriteLine(passwordTextBox.Text); - } - } else { - File.Delete("password.txt"); - } - if (server.Login(userNameTextBox.Text, passwordTextBox.Text)) { - button4.Enabled = true; - deleteStringsButton.Enabled = true; - } - } - - void DownloadButtonClick(object sender, EventArgs e) - { - EventHandler onDownloadFinished = delegate { - outputTextBox.Text += "\r\nLoading database..."; - Application.DoEvents(); - - ResourceDatabase db = ResourceDatabase.Load("LocalizeDb_DL_Corsavy.mdb"); - outputTextBox.Text += "\r\nCreating resource files..."; - Application.DoEvents(); - BuildResourceFiles.Build(db, Path.Combine(srcDir, "../data/resources"), - text => { outputTextBox.Text += "\r\n" + text; Application.DoEvents();}); - - outputTextBox.Text += "\r\nBuilding SharpDevelop..."; - RunBatch(Path.Combine(srcDir, ".."), "debugbuild.bat", null); - }; - server.DownloadDatabase("LocalizeDb_DL_Corsavy.mdb", onDownloadFinished); - //onDownloadFinished(null, null); - } - - void RunBatch(string dir, string batchFile, MethodInvoker exitCallback) - { - BeginInvoke(new MethodInvoker(delegate { - outputTextBox.Text += "\r\nRun " + dir + batchFile + "..."; - })); - ProcessStartInfo psi = new ProcessStartInfo("cmd", "/c " + batchFile); - psi.WorkingDirectory = dir; - Process p = Process.Start(psi); - if (exitCallback != null) { - p.EnableRaisingEvents = true; - p.Exited += delegate { - p.Dispose(); - exitCallback(); - }; - } - } - - void DeleteStringsButtonClick(object sender, EventArgs e) - { - List list = new List(); - string preview = ""; - foreach (string line in outputTextBox.Lines) { - if (line.Length > 0) { - list.Add(line); - if (preview.Length == 0) { - preview = line; - } else if (preview.Length < 100) { - preview += ", " + line; - } - } - } - if (MessageBox.Show("Do you really want to delete the " + list.Count + " resource strings (" + preview + ")" - , "Delete resources", MessageBoxButtons.YesNo) == DialogResult.Yes) { - server.DeleteResourceStrings(list.ToArray()); - } - } - - void Button5Click(object sender, EventArgs e) - { - server.SetLanguage(comboBox1.SelectedValue.ToString()); - using (OpenFileDialog dialog = new OpenFileDialog()) { - dialog.Filter = "String resources (.resources)|*.resources"; - if (dialog.ShowDialog() != DialogResult.OK) return; - ImportResourcesFile(dialog.FileName); - } - } - - void ImportResourcesFile(string fileName) - { - using (ResourceReader r = new ResourceReader(fileName)) { - IDictionaryEnumerator enumerator = r.GetEnumerator(); - while (enumerator.MoveNext()) { - try { - server.UpdateTranslation(enumerator.Key.ToString(), enumerator.Value.ToString()); - } catch (WebException ex) { - outputTextBox.AppendText(Environment.NewLine + "could not update: " + enumerator.Key + ": " + ex.Message); - } - } - } - } - } -} diff --git a/src/Tools/StringResourceTool/MainForm.resx b/src/Tools/StringResourceTool/MainForm.resx deleted file mode 100644 index 1af7de150c..0000000000 --- a/src/Tools/StringResourceTool/MainForm.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/Tools/StringResourceTool/ResourceDatabase.cs b/src/Tools/StringResourceTool/ResourceDatabase.cs deleted file mode 100644 index 5d57781c43..0000000000 --- a/src/Tools/StringResourceTool/ResourceDatabase.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Data.OleDb; -using System.Linq; -using System.Resources; -using System.Xml.Linq; - -namespace StringResourceTool -{ - public class ResourceDatabase - { - public readonly List Languages = new List(); - - public static ResourceDatabase Load(string databaseFile) - { - string connection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + - databaseFile + ";"; - using (var myConnection = new OleDbConnection(connection)) { - myConnection.Open(); - ResourceDatabase db = new ResourceDatabase(); - using (OleDbCommand myOleDbCommand = new OleDbCommand("SELECT * FROM Localization", myConnection)) { - using (OleDbDataReader reader = myOleDbCommand.ExecuteReader()) { - string[] fieldNames = Enumerable.Range(0, reader.FieldCount).Select(i => reader.GetName(i)).ToArray(); - db.Languages.Add(new LanguageTable("en")); - foreach (string fieldName in fieldNames) { - if (fieldName.StartsWith("lang-")) - db.Languages.Add(new LanguageTable(fieldName.Substring(5))); - } - while (reader.Read()) { - ResourceEntry primaryEntry = new ResourceEntry { - Key = reader["ResourceName"].ToString(), - Description = reader["PrimaryPurpose"].ToString(), - Value = reader["PrimaryResLangValue"].ToString() - }; - db.Languages[0].Entries.Add(primaryEntry.Key, primaryEntry); - for (int i = 1; i < db.Languages.Count; i++) { - string val = reader["lang-" + db.Languages[i].LanguageName].ToString(); - if (!string.IsNullOrEmpty(val)) { - ResourceEntry entry = new ResourceEntry { - Key = primaryEntry.Key, - Description = primaryEntry.Description, - Value = val - }; - db.Languages[i].Entries.Add(entry.Key, entry); - } - } - } - } - } - return db; - } - } - } - - public class LanguageTable - { - public readonly string LanguageName; - public readonly Dictionary Entries = new Dictionary(); - - public LanguageTable(string languageName) - { - this.LanguageName = languageName; - } - - public void SaveAsResx(string filename, bool includeDescriptions) - { - using (ResXResourceWriter writer = new ResXResourceWriter(filename)) { - foreach (ResourceEntry entry in Entries.Values.OrderBy(e => e.Key, StringComparer.OrdinalIgnoreCase)) { - string normalizedValue = entry.Value.Replace("\r", "").Replace("\n", Environment.NewLine); - if (includeDescriptions) { - string normalizedDescription = entry.Description.Replace("\r", "").Replace("\n", Environment.NewLine); - writer.AddResource(new ResXDataNode(entry.Key, normalizedValue) { Comment = normalizedDescription }); - } else { - writer.AddResource(entry.Key, normalizedValue); - } - } - } - } - } - - public class ResourceEntry - { - public string Key, Description, Value; - } -} diff --git a/src/Tools/StringResourceTool/StringResourceTool.csproj b/src/Tools/StringResourceTool/StringResourceTool.csproj deleted file mode 100644 index 3477eb18de..0000000000 --- a/src/Tools/StringResourceTool/StringResourceTool.csproj +++ /dev/null @@ -1,71 +0,0 @@ - - - - WinExe - StringResourceTool - StringResourceTool - Debug - AnyCPU - {197537EA-78F4-4434-904C-C81B19459FE7} - v4.5 - OnBuildSuccess - False - False - 4 - false - - - - bin\Debug\ - False - DEBUG;TRACE - true - Full - True - - - bin\Release\ - True - TRACE - False - None - False - - - False - Auto - 4194304 - x86 - 4096 - - - - - 3.5 - - - - - - - - 3.5 - - - - - - - - - - - - MainForm.cs - - - - - - - \ No newline at end of file diff --git a/src/Tools/StringResourceTool/StringResourceTool.sln b/src/Tools/StringResourceTool/StringResourceTool.sln deleted file mode 100644 index e4efaee1c7..0000000000 --- a/src/Tools/StringResourceTool/StringResourceTool.sln +++ /dev/null @@ -1,24 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -# SharpDevelop 5.0 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StringResourceTool", "StringResourceTool.csproj", "{197537EA-78F4-4434-904C-C81B19459FE7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StringResourceToolAddIn", "..\StringResourceToolAddIn\StringResourceToolAddIn.csproj", "{3648E209-B853-4168-BFB5-7A60EAF316F8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {197537EA-78F4-4434-904C-C81B19459FE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {197537EA-78F4-4434-904C-C81B19459FE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {197537EA-78F4-4434-904C-C81B19459FE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {197537EA-78F4-4434-904C-C81B19459FE7}.Release|Any CPU.Build.0 = Release|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/src/Tools/StringResourceTool/TranslationServer.cs b/src/Tools/StringResourceTool/TranslationServer.cs deleted file mode 100644 index 3867c139fe..0000000000 --- a/src/Tools/StringResourceTool/TranslationServer.cs +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Net; -using System.Text; -using System.Web; -using System.Windows.Forms; - -namespace StringResourceTool -{ - public class TranslationServer - { - TextBox output; - string baseURL = "http://developer.sharpdevelop.net/corsavy/translation/"; - - public TranslationServer(TextBox output) - { - this.output = output; - this.cookieContainer = new CookieContainer(); - this.wc = new CookieAwareWebClient(cookieContainer); - } - - CookieContainer cookieContainer; - CookieAwareWebClient wc; - - public bool Login(string user, string pwd) - { - output.Text = "Contacting server..."; - Application.DoEvents(); - System.Threading.Thread.Sleep(50); - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseURL + "logon.asp"); - request.ContentType = "application/x-www-form-urlencoded"; - string postString = "uname=" + user + "&upwd=" + HttpUtility.UrlEncode(pwd); - request.ContentLength = postString.Length; - request.CookieContainer = cookieContainer; - request.Method = "POST"; - request.AllowAutoRedirect = false; - Stream s = request.GetRequestStream(); - using (StreamWriter w = new StreamWriter(s)) { - w.Write(postString); - } - s.Close(); - string result; - using (StreamReader r = new StreamReader(request.GetResponse().GetResponseStream())) { - result = r.ReadToEnd(); - } - if (result.Contains("You couldn't be logged on")) { - output.Text += "\r\nInvalid username/password."; - return false; - } - output.Text += "\r\nLogin successful."; - return true; - } - public void DownloadDatabase(string targetFile, EventHandler successCallback) - { - wc.DownloadProgressChanged += delegate(object sender, DownloadProgressChangedEventArgs e) { - output.BeginInvoke((MethodInvoker)delegate { - output.Text = "Download: " + e.ProgressPercentage + "%"; - }); - }; - wc.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) { - output.BeginInvoke((MethodInvoker)delegate { - if (e.Error != null) - output.Text = e.Error.ToString(); - else - output.Text = "Download complete."; - }); - if (e.Error == null) { - using (FileStream fs = new FileStream(targetFile, FileMode.Create, FileAccess.Write)) { - fs.Write(e.Result, 0, e.Result.Length); - } - successCallback(this, EventArgs.Empty); - } - wc.Dispose(); - }; - wc.DownloadDataAsync(new Uri(baseURL + "CompactNdownload.asp")); - } - - public void AddResourceString(string idx, string value, string purpose) - { - wc.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); - wc.UploadString(new Uri(baseURL + "owners_AddNew.asp"), - "Idx=" + Uri.EscapeDataString(idx) - + "&PrimaryResLangValue=" + Uri.EscapeDataString(value) - + "&PrimaryPurpose=" + Uri.EscapeDataString(purpose)); - } - - public void UpdateTranslation(string idx, string newValue) - { - newValue = HttpUtility.UrlEncode(newValue, Encoding.Default); - wc.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); - wc.UploadString(new Uri(baseURL + "translation_edit.asp"), - "Idx=" + Uri.EscapeDataString(idx) - + "&Localization=" + newValue); - } - - public void DeleteResourceStrings(string[] idx) - { - const int threadCount = 3; // 3 parallel calls - output.Text = "Deleting..."; - int index = 0; - int finishCount = 0; - EventHandler callback = null; - callback = delegate { - lock (idx) { - if (index < idx.Length) { - DeleteResourceString(idx[index++], callback); - } else { - finishCount += 1; - if (finishCount == threadCount) { - output.BeginInvoke((MethodInvoker)delegate { - output.Text += "\r\nFinished."; - output.Text += "\r\nYou have to re-download the database to see the changes."; - }); - } - } - } - }; - for (int i = 0; i < threadCount; i++) { - callback(null, null); - } - } - - public void DeleteResourceString(string idx, EventHandler callback) - { - wc.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); - wc.UploadStringCompleted += delegate { - output.BeginInvoke((MethodInvoker)delegate { - output.Text += "\r\nDeleted " + idx; - }); - wc.Dispose(); - if (callback != null) - callback(this, EventArgs.Empty); - }; - wc.UploadStringAsync(new Uri(baseURL + "owners_delete.asp"), - "Idx=" + Uri.EscapeDataString(idx) + "&ReallyDelete=on"); - } - - public void SetLanguage(string language) - { - wc.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); - wc.UploadString(new Uri(baseURL + "SelectLanguage.asp"), - "Language=" + Uri.EscapeDataString(language)); - } - } -} diff --git a/src/Tools/StringResourceTool/app.config b/src/Tools/StringResourceTool/app.config deleted file mode 100644 index 9008dd2558..0000000000 --- a/src/Tools/StringResourceTool/app.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/Tools/StringResourceToolAddIn/Configuration/AssemblyInfo.cs b/src/Tools/StringResourceToolAddIn/Configuration/AssemblyInfo.cs deleted file mode 100644 index afedac51c1..0000000000 --- a/src/Tools/StringResourceToolAddIn/Configuration/AssemblyInfo.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System.Reflection; - -[assembly: AssemblyTitle("StringResourceToolAddIn")] -[assembly: AssemblyDescription("Macro AddIn for SharpDevelop 2.0")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SharpDevelop")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] diff --git a/src/Tools/StringResourceToolAddIn/Src/Command.cs b/src/Tools/StringResourceToolAddIn/Src/Command.cs deleted file mode 100644 index 41f80014d8..0000000000 --- a/src/Tools/StringResourceToolAddIn/Src/Command.cs +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using ICSharpCode.SharpDevelop.Editor; -using System; -using System.Collections; -using System.Diagnostics; -using System.IO; -using System.Resources; -using System.Text; -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; - -namespace StringResourceToolAddIn -{ - public class ToolCommand1 : AbstractMenuCommand - { - public override void Run() - { - // Here an example that shows how to access the current text document: - - var textEditor = SD.GetActiveViewContentService(); - if (textEditor == null) { - // active content is not a text editor control - return; - } - if (textEditor.SelectionLength == 0) - return; - // get the selected text: - string text = textEditor.SelectedText; - - string sdSrcPath = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), - "../../../.."); - string resxFile = Path.Combine(sdSrcPath, "../data/Resources/StringResources.resx"); - - using (ResXResourceReader r = new ResXResourceReader(resxFile)) { - IDictionaryEnumerator en = r.GetEnumerator(); - // Goes through the enumerator, printing out the key and value pairs. - while (en.MoveNext()) { - if (object.Equals(en.Value, text)) { - SetText(textEditor, en.Key.ToString(), text); - return; - } - } - } - - string resourceName = MessageService.ShowInputBox("Add Resource", "Please enter the name for the new resource.\n" + - "This should be a namespace-like construct, please see what the names of resources in the same component are.", SD.PropertyService.Get("ResourceToolLastResourceName", "")); - if (resourceName == null || resourceName.Length == 0) return; - PropertyService.Set("ResourceToolLastResourceName", resourceName); - - string purpose = MessageService.ShowInputBox("Add Resource", "Enter resource purpose (may be empty)", ""); - if (purpose == null) return; - - SetText(textEditor, resourceName, text); - - string path = Path.GetFullPath(Path.Combine(sdSrcPath, "Tools/StringResourceTool/bin/Debug")); - ProcessStartInfo info = new ProcessStartInfo(path + "\\StringResourceTool.exe", - "\"" + resourceName + "\" " - + "\"" + text + "\" " - + "\"" + purpose + "\""); - info.WorkingDirectory = path; - try { - Process.Start(info); - } catch (Exception ex) { - MessageService.ShowException(ex, "Error starting " + info.FileName); - } - } - - void SetText(ITextEditor textEditor, string resourceName, string oldText) - { - // ensure caret is at start of selection / deselect text - textEditor.Select(textEditor.SelectionStart, 0); - // replace the selected text with the new text: - string newText; - if (Path.GetExtension(textEditor.FileName) == ".xaml") - newText = "{core:Localize " + resourceName + "}"; - else - newText = "$" + "{res:" + resourceName + "}"; - // Replace() takes the arguments: start offset to replace, length of the text to remove, new text - textEditor.Document.Replace(textEditor.Caret.Offset, oldText.Length, newText); - } - } -} diff --git a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.addin b/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.addin deleted file mode 100644 index f729ba7e93..0000000000 --- a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.addin +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.csproj b/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.csproj deleted file mode 100644 index f6ef533fb4..0000000000 --- a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.csproj +++ /dev/null @@ -1,67 +0,0 @@ - - - - Library - StringResourceToolAddIn - StringResourceToolAddIn - Debug - AnyCPU - {3648E209-B853-4168-BFB5-7A60EAF316F8} - False - False - False - Auto - 4194304 - AnyCPU - 4096 - 4 - false - v4.5 - - - - False - DEBUG;TRACE - true - Full - True - bin\Debug - - - True - TRACE - false - None - False - bin\Release - - - - ..\..\..\bin\ICSharpCode.NRefactory.dll - False - - - - - - - - ..\..\..\bin\ICSharpCode.SharpDevelop.dll - False - False - - - ..\..\..\bin\ICSharpCode.Core.dll - False - False - - - - - Always - - - - - - \ No newline at end of file diff --git a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.sln b/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.sln deleted file mode 100644 index 40bc8328eb..0000000000 --- a/src/Tools/StringResourceToolAddIn/StringResourceToolAddIn.sln +++ /dev/null @@ -1,18 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -# SharpDevelop 4.0.0.5303 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StringResourceToolAddIn", "StringResourceToolAddIn.csproj", "{3648E209-B853-4168-BFB5-7A60EAF316F8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Release|Any CPU.Build.0 = Release|Any CPU - {3648E209-B853-4168-BFB5-7A60EAF316F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - EndGlobalSection -EndGlobal

qiT(qJ8i&6V^Vefvxll z>@54(RA%KveVK}b-Hs2F9acU3&9HK4V6DQZZ*qMaAb@;@Ke_{Da_{;g3Le=+iQWRkOk^?6<67%h76F z>1tuwDxP&w5azj!vkMk$wTOdxF7=_!7$O@L0^Gwpl@NZ_@U%8`_fa?cG4aATwS*_b z`9P<}3vXh9aHO?)9nyDN*WpPV9E1AVzMrKKZQea>-#!4bEL$kYGsb-C1<&-v{b`uK zfKsEocp^@$njfz{EXiDcXJ)SS$y|m+Qs$$)9@t?hVUHOFZ@RDKSw*F0HC9@(VzS)t z>!BV(<@yKSTr#8Quo&q?bCE9r=xDnxre$SjF)HK0yh*16u^%Zc5-4Y?gS`PFUm-$@G%6tXWUioqRqFTHT6+ zjC}H;T61Nc)WJGo=1Q~;(k}{bWgY7p*~&V#)NWL3lo^I2%Hs)Mo`gFd-XnnwjGp8i z;EO0>J%v;P|OEx%NODvk)tW#xqP{C^{P0Fphj>hoD@`7)~V>!!L9wvve z6V_LxkO+q-Vk>l_h^@aqx8NRtyPL!(Q+rXZtPUGs;}(4GfJ<7<030`nGbT84Qb;C{ zZUs`f8_Iugjbaz=i6~u+(l>`Rd`ze+R5A;AE$HuHY*S8^m$!!ckuSxyw!UogXZdR+ za!J`T_yvxwsMYY|-`YwIK7J_#llx^2mkHZIRxv2B_X?^hT} z`^b6r{~A89ubYGQDu+!>+cf(P|2ubahqz)va9Q?=-pu7Vo}`i zEQbYf7G8MS1Lf|Pc%UpO)~q%x950qwHdV>RX9EMQpQ$S%lS9JGzQxp>5dF6|pS*7^@u{21mj~05RVmpPi(zFSj=ep}Sx|k;IsWR|YRRp8UG!sCpu;q3iUQ4~qpl1-eh&Zc zK)*B>cpnCLC-6!R4S$rIQsJ)RZ{!+}pAikqrY{3@$?z>HVA#88|c#r)HJielX3%T|00rZax+_ zADWr-en!r)svhrW)Q$0;?epL~W0uwY*$1%gH`SUPY53IrdG+^bnyb-k0WC#1-dDGq z)!3mUdb+MWOW0C%<<(~x3gV`!$qVeji^^2Gi|aPu z2Kr2neyH(~D!n7J&e8;@m>vE#weqbv|J727YE$Yks>HzMS|ru(e|X2iFSV;=r9!ct zUFHOZ0iS}1hZ#}9YVN)@bB1n;MN{F!vMY<$@XQt{$g;t6t}2O+prdO^d(bg+$w@&+ zZ(+&&`aVOeFqg>Dm*nJ20*gW@=^#g~Y0p%F-OdxHTwHW@YHtqO+vQuQZEw!XwPs8X=M%DYT49tbSKc8dfW*zsk5)7 zM~1phVh`#XmYol!W#@{?veS&ZQ3;;KOI&VkvMfy`=H?cOIY~~!It;Cgq~TP;qH%<( z7(ei5E_qYnQxmn(iC;faaHJZeBZ6b|RD#1H!4Wse%cumN!5p&WTAs8=k3>n)o2EUw zNqZEbQnaKw_LCgWs$`{HF)QscN9{2?sXe-?Jz5GsZjakZ9ISjXEp*b2ArU%Kckj#$ z|0VNYnG1QDuTkB7f^{XxldRaWRn6vGFP>uS`?U|k1DC$~Ak0uB+z~sxcR_QisFf~E zrq!5+J+TYuFK~L>mmE_+HoZ)zRzir;D|Jr(WIKa_9>Xk`%NEUbm&)vmCic;HDZlzs z*OyHxd7WF$*RhTMf$6qfygs$1yXvr4UU|jq!`699xLeV8JmKfJmrhY|65W+73Aoz= zx0+H!>|>PzAD)=iwBNRV(EdIm9nZJnL)zXF59LPu0V@_ zms-z%hp^3)y1sm}h*GByTPV6zAk=wxpk&ce*M(U(A5L6P{jw8NC@$Xw|pZ{k1 zt0_H0n-XP>TDHQ!<=QSCnehA6G}v>qvYp3y*iZ4iPmJIUTdX1P1|Hkwu}>0Svp$2= z%x%18-Q553*bwOv?lkGSo|@*F<@)||HTCGurgAd34#MIdqP+zmhL7%|Bj1F`dl9*d zhKCnJk(Gw446hpdwur8srxIN!Uf$B=3)ZB`GYzm$<3}yI3nTmxNMn*Phg!KNIHx#=2{z0wxNrM0QuoNE z-3xIYM?UCjxCCM2mI5pT9>eSvCRnbywVh8gLYnHTX7sumspsrIvnBlm4`yrO)R!37Q#d> zgD(UHWd?UvP+&Va()lz^UcD-H2AwPOpwtm`^8CLPP_SKs#h@6Gtj?C^)=R-$c9c_s zjY3K3hI7SC^SNi>Z9AANPHyG}^Qe&KNg*i)X0HA$FbcBIU!K6jj9|t}EG`CRwT~Ul z(EHfsUkESU%;$9<0WV!arPvidP6bPkC(u+jKv$VB zd_TH5r|clZplx){KPlGP(bXCcv9s7(2TEW7|NVzu?qxS{YEnXT=8j?8S~wfg7u%+gC< zuPH$GnQ|BTVtURqtR~O5sca=D>%i#rsRfAV(e_;$>2JkIe+&KCsa;`{?`83LC|}gqzSv~(?x`CKR^Eq6 zg<4kj4S(V=E>S)Y;-*XiN|s^!YH&|46IAU)m+(@$gwOiIsuy21BT_MD2WsWNOiF?+ z2x=_1>)nQeD27ZuKd@;?XS;*!itU)YE4^kKUS4%6R~Giwy8flQ&OF)JnR+RAIKxWZ z9J~2Mj9;*l>tB@4X0K_?GHg3L&rT ziVf=Tv7EmY7RmJiGwSC6L6&o1o*6CUK$jT}aG=ACcH)2|CUQbX-|&Wgj^C+1S`rZ$zE#Vw!TouaptMa?oVaLE8KfuF|DHRRMt64mlOMebEyWdV;|INrO1ADMa&jO zY?anI-V!Tf05N=YHyt?`D`LB8xF}++t5lYrCs|fyVrax>0SzdVi%KTp+5VWUxN*j)TG&mhY)Yi zJdRQMznH4%l@6?L=oq_2&RJ8>nSkzuYkZ~{*xi-g$gHG{hT=Q zc(uh(FJAlXQxgv?Nu?(qwyOr`)asO;gTU5!w>FUsdJY14vNogqP^PU)_qG;g8@r1w z4$m+8b`WbOdFc@gA9-mP%Nw!X^0Zx5Mcd%Nk)GG{`~{<2W6u`Jm=$P&O3Y#PWBbCK z-E=-0@3O|-Os&g^>`d0&yv*D%Ge@tHy^p@{Gd!lQ+=6Qz?C4om_*X#nEb{$U>=^ZD zSPY@(&n@`RY`9)^^-hH0@=-Ik?BTO!v+W3HE%_1{24Jgz!ux8Q90b}usOQ|NU;=v; z{jK;qM!)J3%kLVX8g1&&kz+$G))q2Cx`sQknYywm>eJ{s`F59rj zD@zmqQF{G-S1jeWN&8!-+8zoFRk*Q@eO1MGa9m|I=G%>4+lr0j)Y+BZ{E}prQ@ctI zKUg?T!NaMq#8JyJwV{^3&X|xxXHqDQu9nUxUIc-oxv3nbVEoef61+Z&B)zefh`+errv$Z{krH zwyM56z6Zj|(3B%XKvJQw$<-SU>~B<+ZASPmpWQ?a$j!FY2xJrYG)NIP&Xlu;rlhq( z64s8o!L|h^dAV3G%X|)NW;p8fFwhDXN)-lleD74Y?~MgVAPyVP6J)o7EfBSLm+jlp zW`p@fxQl|n%}!a&XZx}?Tgj8Os?u-{eX_$a9ZQa&y~B?U)!Y5*`u$Ockbo8XJCy!T zpuZvd`y~Cr)$XGiT>nX8l+Dytxol)2JQvL=>!=xovkCWlxC*D~iwW4K6H>q-1r!r? z1w1MS-U;D;k`TX<4}6){X3P`&d{0hLkxs`GM^B|aTjzoWGqH@h4RaeFuEYD4oxVR8r!LG;i zJTmTYs!tR zt0-yAqfgiR3r$#0@ROPP9xXHVrD~?GXf{u{N^c-o)7ZcBp)=Nbl;D%ApyNxsVduAp zXwgB7rB4)a2gs8uqe`lI`&E-m-Idbw(sn=9YG$G6WhVL!-=AaZ`*U_z_vh?1^}RW> zC*7Nqvm7J(B^DH_HDfb;!!$Z9V-o^wWJ_R6oSDD|X2-Z3Z7V$4XJ_T&D=0kC$3a#3 zevW>d45MtL@)o^5BgMXZOR+DRQ0(Q8{TF5<$8m@Kuk+aNzscix&I7t5WGH{6NB~e?Y#f;2^i>Aa`h8sX5>b{ve+gcXkO7On&By!3mDs1lSW)-?c5J657P}+ z4tC@XRgXKUY9)ak>j;kM2&`ba)xn%AxkSIFO!_ajqlf5adB@aTa^Y* z^c!BHT>)h@$Vb1$n`@Bf`a7)t9?5$tc>R6+>Kmqt4!mME9QOGHg+eI@J{W&1xa%^p zz0M6m6F45c_Q&rE`#7JEKuyFB{IV_t;%p06EjP$Yb-v*eM6QkIP9_zQ*0$D1f3Q#) zx(SM|w0ow0a%M--mF~-Y@ttk?jM711@9`y`56G(28)Q-dv&fZuv5|IxNR1GwmCNGS zQM}F*Ojgh56zr5*MbLP?npO1zw3X+$8pOQPQ3;3P&bKdT6x=mj$gI||jUqra>K%)m z*uM+E7o0V5F_*C{DD4KxQN*z9OXD5q%L)#``iAVyP+4gD-+C8k-RaB0LgW;ZS3b-I zcs_$$HIw;_rROtpU1!ei8d#_W*O|I66;fk~lKa&fE<7x_u|Fgy^EP^Zndf?}L+UPr z(H-|r@aSHiJZ@9oZF~V}mXA1#+_Az_@%b(KX`@}ovR=w(c8*HqR*U>!(K4pgTE~>8 z|M6JunMGHMP$C4waX-Wqmo5(LtQR2+zyC*8Goowfr%+Zp~jCf=+z04EFeZ zG0R80tV)X;5g$)DUUb7ahMP@WO}dpW((TpOwl&9}`gp8Wd^{P+CLa4RZ6iDa^UYn_ z(1BkA-G9Coy3>gQHJ96!dh1u9YsI!PR%{!C>1;}#yGowBx?OFisJt27oY7*vy;35n z&$~$83d|A%Pd1WlJ9<0j8h!p^gM>B9O@~6|z=``UWfw@9*XJUr;#e5s45J-5vHaU! zBcbftfta%BQ6QNq`l(T1yBk>5!IJfKAdZ$+oeZHlBk*K52#4a_z}M3A79!*|oc}0B zT{V)og=js;WY&HqQxiFQOlIV1Hd4%Bh3J!imhBnH)RWa5@;{A}o7IGv-lbeC7qbWP zP1qWL4ZLYB1NHmY4DSa81?Q5DS*JS4l;Bq>=aQc6U49KaPjdSIEcIAvU-7?`!gc&> z+)FlE(I1K8IJ;_Gc_CIJ+~`l%|BL$Eo$AxF{i&+69b-#%Fsac_T~yUUm&?Sj4z~N2 z6aAT3+iP#CU8%;J=!S=8)_yY6(C3}t@AiNB98yZc#@8yBCr_G4!parPS)(g0P;=B( za2Z(M(-Z$m64(Xrs#nTl09N}%JSj`En%%NevY87tw>UXHBZDO@%)DAj)#r`GzZgO- z(4)q*9I(8`4Cp%>r@=PowMcG9ZeU$Dm>{S_x->IeDJ->?Q~;L19!1d;lt zUdvuw$#VgF5xb*GjS&nlu5~~92fg=w>9sa!=$ap)e)_flTGu?yW;-3FYkGX6UgNO; zhdSrAvCesc75<%sY4jlc!sS+638|RF74zAWV_Sh!bfeEhsoDa8L2X{Cm=t=auyhLb z6}KED<=SsY*P-oD;(EJ;NpJlp`lWA@B$Lt(+#o6G?TboT`hXy2K077z#28D+BSfvt zkzmaIcWR}Qhx=vfk?56~%#SihENfdNvhkal8;%zp6TY1Gj^`%v5<jhnA zqhzXmVYob-xNcx(-~jsTe3p?^COIEvUpd?+8-1y|Fov<7I-rOPLMoBEb0=;5ZYAuJoBQF z>2m2DHaf@UyelQ01D8BK!Nx`D(aVt@=TfK~xbf&U0|S)Bq8iq5GLAJ6R9MF;fzgT= zxamFzn_C+ARG;(WKIf(TocKRm)hk+wFIoxCFuF)|?!K?Cn{SRiT*!I~A&E%I|7E@x{WtmUVhkT(Vml*%TiW=o zh_`-ui%Km~<#bfFC8{eO)t7!*)PlD-9krw-YH2!ZUQ5*cbku^DsD8S3OsGf9Gy(OxVj+)sLH7gypV@p&m9W|pRs*;Xc))KWm9o63wHIRRXbkr^_QM;z2R8Sl$ zqV`Wm9ncc>I=pQ#hWA6yapg&aoyb}GX#786$43kHpkpo(=I=3ZQ`%lJ_ zEIQY>e+xQuwqA0=m-(kZEdKS2=2Yxm3H z02b3bd_i-4N$7F5dAHB^RL=LfyqC5Fn~9w7cYI#Acb(`_14YAkSA*$l&Fsq?;hoUv zyoS+5I!*uRTGUqbiu&HROew?m;zZ{%81^{W-F2e7K#9L^CdJ>v@!$88?{D~WrBBYS zl~H~f8^t}kj)}L~>h4kKthZwR^+T03_N3@kqakdxTuymX;SeYsgP8Z+p+_;=J8t-4 zilW)at$yMM88(^w)0i;&Cdx-qo73z^TYQ7M1(=!hoGrkp6In*p>CdF+ZTu}i;3CrZ z-MH283jX-5aBL1|tj1(WWY{=hS1H-`xiH1KD(|%-Sx)=*?tmuR@GB8mmu&2Ryy%S2 zKwRLk{{rv;n~m>)2f2B^g^>l+c+ezp*D7B(Ui4lQXP~4=94c?ZEMLyLGhfcy?h9$G zPAKA)z-pyslSW8ikiM|>uA-;Dz^eteE=TyIza8JeyFGESyH5BKct31UNb3kYp5EUu*9 z6m{_ouJ^z4nf=ye3bMx0#{TQ?pl>;MP0YtUzTuW8@vhB{De`PSyd{KzC&*0p5N@~) zhp+mqg-5}^^f$`m&fNqZ@+sj^mVUON+Y$6WKy!fR0Y!hQtLpb1=MVxn&eF)7>(v_gyCmuk=|7O|HU;w}`$9O*g%t ztLgs12x~mI8d;CFk<24TjxgDv2#=vhDgDR>Zany{MxV}z%79oYsEq8@&eLnK!|P3T zMm8&n1X8K6^HV2{ZzuRmUkiRQ!C&@T@Qnn2`D?+yKEdyQE%={F@CRNC{$~^Xou6eA+mxD6O?xZc#MSOiN=8MhiL_s(L!+NDQ zEe=+boajhH+3UOt&QS*YbdWpld0i^}Uuk+rPH1{ZOVc|#ZhA*?`5YBDJqgRSHu`D` zfH`k;eF}i-Z}jC9;4=VxHU+o=fG?_IIXZ67=j-^NGwzW|*bMPV5S~dPJR=Ctv>^O6 zh452B_-PBm3n_#b1mT4iglAI-&kDk`EeQWiA^cMi{@H@?TngbiL3pkO;TI`{UkJi4 zS`eO2Av`Szc+}1mgy@ktUV`Bx>DY&p*oTwYnD|pE;!g?jr&CH!##d9&bT-GKKJ@AUxTE@KOrl zB|&(p1>q+tgr5k)Pg)ROP9eN32rsuF{5ys4Z$bEXx&_^wv>*YE7Nn$w|-qJ$+ z))etuh4`)M`h55 z2g93M@_#gy|D!_u(H4Xsr4W832tP{G|5ieugCTxvN2}OxCb0vQ_@$wc1wMsw~Yl`wyVkD(+*j@%r+$@vC{sMr-}@ zG{_h}9fRNUBPEcncN@c}QNUSL9n6{*{dO9ce%!9E?=+q6rIuY;_7l4=PeIRcMv$T= z_!UYAo-1J&v_3<Ga@dCKTpF4AW}*pU#}YKjAFE zZqk#8q1jOI=g^N~4fP^C7h!v39v%g2WWF8WWrC|$zQ;N!@Xcadv;dQi<;6B@>$Rl% zj#uy-osE5*S;jCZ$a#sa`@(NK--lFZbM|3mVihydLLrb5l<~^GX#(>#0U_T)fH@!y z30w*_Gg=H*SH*D))azV%MOIW=jjR#vV9Ql!)f&$s_N4FnKE8|E@e!Za?bu|S{SZy5 zUT~uwxeA=9X5)YYwiWt*Gv%Gv-I<;NeW!|%IZ*36$yGP0djrL}IJU4-cRF6A9LO1| zixo92zT*w{rFRq0$>p7?TR2U9>0{RDEk}Fv22G{p)OUhmz*RYykFe#vsE*n2K$qiH zq6P({*IU}(x#hNR?+hH8+B<<0*fh2OZn@^;ZlkadwQ?n9=7+<$^(qR9Z)7eS@ii&; z*4!g@_MD>AK$Yc4pM#`x^Yr!oGyh-6zrQR&*^_fBgi)Kbc5a(_OSg-veRr zIhOk{2Oh$eYDSKlB>b61%ebi`*ywgE(QKT=^)|yLUBma-HC?X$h$HtmLNEUz>Ils2{%3hzkS11{`+1GElB+K=-OKYXjUv_c10K~Q zzN)64%u$xj1PG!3NBnJOW@k$O0I%ci1e@i$>r}XGoTwjyqyJB)1K&IKa6sCOG6@1h zu9lQ$^S7UluN~~c@>jcIZbD#WC!4R27}?oQuMNcL6vG(XjA1+}9Y4)z7fv^fWFr2= z8vtK}V)Gqj{ET)@@S+*AA2)&0ib<3z!22JCS5SCXv@(Tgv6I_Lxvfg&hMJv(uv-eD zC!^QF_lW2It*q@nC2KUj3|fFQVRMM(`@Wqe_`ifm@YoaCBsxh}by zijkvPK>2=*aC3}c33I9vQbfC^s*ZGN!+%z7!^98R$4)nzTyy626Iq$v%1VMTEh}>} zJan3y-q4nrX+`^jiEO2Ip)tH47R-vqId~4CrI*8fOHMVbj zYYSGSQulijQ=1Xlw}a6)KZOS0u8mR(fSYo~&F2R78Lm84(O^;VQ>I$Sn`Ex#p&C4+c~2xbs2yj5(0U5R%6~*E*5R zw_St%Ki3R#Cmk4k^MZWwr?_u#9z#UlxDL;ugSg%|-=|=B4*f{*1{4g>p*INLy$Xis z(7^)xp@QK#^hSX_s$h5y9U`#X6%5azLj{IAhzPa`&!IJdH4p!cZtIDK;Lr>ccl2P~ z|DsyEHOB^89CM?Q%_FR>0N2d1`&wh$jc`82p1Soui5{C2U8m@`Zyl59+b7Xp3fi}G z(S~yo#^;*Jy}Y^YUD@VUns-y&{tm6BPfD*BpPlKxEYl_X9~R#`{V>}IlKLJV2eT$O zb|Z@C+>Cg1sK42%HGk7uFzT8_))1NpeYVBlaPzyL)ncLfvLLq@ml*_ zJ?_BMJ=p29s@d%wxDGkH-CHcr*j_c0sZ=taq3l(MDe#EW`v*T4&tIjpdlq+g(p%-q zJj;=CwQU18HA+Pv0oSLmx8%9n61mXO4cVrSow!8j`yJU4dX6I42Real!!o%t5WN{j zK#j%L*v_qWS+)(f4;s3TKwA;X*xV8cd&MMdX`KD2^A#E!JgxjHYH6wje8ts3DuFe& zsuinKVO56K+03prwsLAZ;gR%}TUTm26E5xQ&{(*-ix9^8H5E(d9y+6H_$Hmvy4H+{ zM0hmvSf@Wu9Ld`vNi23GPjH71spZ^8)wSgCS;2P8q}4`;DawqH_Zk(?iQde^s_hX% zbhyMDd^gxYw-sKDk!03veojjUWlG>S?;#NEzHUrioXB&7^?aUj*82TBQqt`IcdWbTbqF?Wi6@CN@BVejDA$ljaP+n1fbvVHJ8)p8Vz2cP)ns#cy`K(=7sF|>iD@6cO#5K5V99|o)6N_03I{~kd|g46C#!11e$ zQ3Zg$p@LIk&8)TF2D0t|VjF?R$=7L<(Cj~J_U6T=WX~cYx zPdc3-=Be*7Vm^)79<(PtPY~Ow12STJ8nF-*lI|yn1?q*2SV$vw1RY5q6vU2RX$nC{ z8nH9zOgf?0brMD_3*r{cf6L>}Q3M-05{n8)(a)C8t2z7^)bj?}>M%zDFsu=NKThId zsG1cN4jx-O+T8pYt07pHz7E0g45$UyOM;Fzeu$1$l9U9yLBlY5ze4}8zzSz9Fi7g$ zA(Q#!g>9MD`*g6b^A9y*&E~bjMPpA`l=w`_eam-=OtbR&%o%(e-WStf^Is;7zO9OhlTIT@`1!r za2{^TruHyUhSzC*(KOEa7BJ2tjFp!Xq-qQUu*U@)JBl(K?CleBn+SkX95l}PHWIxP zz+)%{-j*FM&))p9g9-2Mbi&;TaE~OsDNeYU65?&yYb$k6~I1>h>-s}czr~ro zbSAIG8H+f{DBAmMXZ__HIGxtpI&o(ueC$Zt-CsgYO7@(4*6H1_#CCem9te!;$Q^(~ z*Ie;1+D6x)%5ei#*_eFucj9l}-x$VA@A1oaqq$vgeLeewfiIYaS_7YNbP3H-G-aY& z?=-qwA&N27jV|J4%mV$Wr~}b3Z;$g`Wendg`7R?4iRO+8>YP^8ju_QuRF#>!GwBjy z@o}sNb?fA#>7t>E$*TA2U|dxS(iKDU3ep`z+AGeoot)n6(xnx5S>2_;;)=IyzDI%C z6@OW`Pl2-Ka3#}^haZ2CW&>8`u!^cT?Ay&ky~Url=YQsn^6f&tCCax0`DRrvn)d0s zv^&$pEbdsD_+PJDI@*xIO$C|EN9Ygs&p2E47y1j}r;Yv&p}*7GTGL@~?TC!rrvfjK z-@v?!{&1$ZNVv=C4=$chr@z0?%WV1ji+?-!6W*35P)qGfhCdn0@F&yYr(*C^kbM2& zF}$JhR$KNyOm<}Y1n*Bd+!QepbaYd6Dz&a!m1d+QKaH(RUQ(tU^=SpZ+N2Vha9!pGA!sF<-o@>teLgoy$KVH*z z*WiorY<6S8+-VPYu-2=0DH>fvpi!f@i?OzB(0_^T_VhH0X&P0bVSvh3p)#tHRR=tU zgjI`S`hxJhY)1Qz#XV0?C3#er^cbVZWAXh2n@@y}o~U0MF&XtFnS2sG)@Pl0uk5w! zUpI$8s4vgP!J1P!WvN*?rRH#Xbf|ntexJva{qO=XG2f_$@5w3~#vX-Z_W3G{x?_Y} zQs}~SplOYw39X+C{os@%vW`A4+a>KWC}s?a+rWr}Rjw?D&zql2#rSla_%|aB$spXY zi6u-d5LIfpmykyzdVE_RH_78>dE6oo9t}<=s+<5q_>}N%m{^!yt3Sb&Gz`fH{k*z9 zuD*8q+X2ENQ5G%`IAcjt8BX@U>VrPmYP8k#fPPw#G-iyWJ zB#vy?3P-R?x|0+%>0A!h%0=f=cSXY&o}uoFUOG@Sn#Yk4>51~x4;zC<^9+8Y7M5)s zWSH=Y_kN6Tdsb^gptscDuR`InP!S5RGWaY4&B2)NVFLw8`(C91+Tmv?MPHzO3WOJB z^&OLFAy~)69SF~$f6Wr|bJj;kLv5($oZfmhIu-5Bn=wFYM4x&aJPvZSgsSFl}8QJ0ySc`IT51ZAe`6H9qUwTnMqefkv!-?t-WINXMw?F0eEY=RWDjSX7)oe6~oyVdvJ_Bnj9tmg2 zb1S?UEE`V66%#emq;ZfN$3&v*jbx9qLf!hOJPsD@>gt;y3D|XjgT-gh;?7Wa32>Ip zHZ$S*ST|{&No}-ZIJ2X7LbA>tgaG2Nc^9)wQ9ggJ#7lTETd=SI5?3i~h~R6k-YQdS&R6$-cf4>%M8cn zrZ(Z*T>iE=7vEqb$leWCJIWv46B)6&>@8(2T(^z8&9X2uaeKlKa-fGMJXag$%t5b9 zL1qhN&Y-U$z1hLu!wA%y8|g}r=z4faJGKy+D*T&|D z=?J5&iQ9cym5e@y@V02Y92H>-&s2A7<9yN2l6JmZ($1}hPYs-O`E1>#z!wbGMm|XI zLo=vSyQXXQ>*8jQHV=1sKNsBxrAT^A=Jt)Xd!apS%(-*Fy2{8Lk#{`~Y@i9-+#4vz zBij9*0i(O!_4$?IU#C%%irEb;4l)c%@)2m}Jp*Pp2|91?hX}I4?>%7ym3qI|`+^ZjV02x`aFH_>xz5Xv`igc{u*( zUB2`MEAS4p`K7x4^7TYHF^9V33yC?@d3M@RDjjqFv@!2S%nQcwdD0X4DYipm9Lg7x z)Qn+JfWZ@<%09FMWDgp$f_bPfu<_)d%!byx_aViCRA2gs^Md#qicWFM~ujrcG zKT>p8O`_Z9TjMiOYL%MR5=k0s_BuqIho9=yIVsE9%&V2ju_%*kP$r+4qD(GAnS3Hu zCLf5)Wbamb)v4K=RAXDyHFoiTYAZ*kDt+R&U829unD}jq5*rzsTaC8ZU~ei)FyIny zK4`ODl+ehl^7)WG4F}PsN&ZupMLPe=6sWKytZbeWK2TM2l{eU5E~nBMVWJ1hFd)zH zQ&h*JAGe`Im&cu}DKK;m{cHh<;o&yeOP)SO2`bq6ad?gqej?pt3aZCgTBc6HKXYs` zuOefokZ0|R4wsuIQ&p{0Y!}gOx2g`E(B%#+;K@8q-*?kIT_QZS#b>)Fw34GzR4S>0 z8Tur$KCCU~Xd<+=U!Jc9loan5q}pGxuKe9EcR>LC)HW+v~{-W&1_)G@?gV+I+~l| zt(Xgq;ZNCObc$!I(J3G>8|H+rJata4JXJ;34l$cYot7vR+iWqcyw+AiPyAb8jp!F_ z5AtbSZsmA9_I)uq?upnB2-Yp1XSo8x(RB*pdNiE%^o=Pve9nFb@C^hX`Yb}6f4{QRs4w}Vtt3gUX$&J$9C9DorZ%I^@H%)K z(DtK;7{gxzh2bxA)A)+5Y)YNXI{KDh!sgcUv~&YcQQkdx0DN_!tV(yk25QGq{`*{an5&7$oU@5`CiWX2ezIY zOP%}%dEckx*XejGPD z0S`SEe@!`h9C+i-6LEn)$zO)woH2~9(dRiXqt)E>w?4&R`85AN!{54Hx4#qVn|_CH z`iUy*r=noDj-w?D>UI^nZY@Q81L|5%Fur_&ez&zPB?^Y3%a(l6q+2cCWp zo}O1c{Y-dzPI%%(&2=q2F$NO~emrqR47X0e-CWJIRxFx}8}n9+Nf(MhqE!|dA5lrokI&~d<_ z%fBA;>8JRF-Ng&wGpqOnI`QcVgPg4SY)ct329pYN!rHUUS_-bpFz>X8-wj68PLP!K zZ2{@8H%2=grD1m>ML<7W0AhG}EvC1h78gaae~-W59OA_Xw($~CLeb#192P0vw%Aq| zXMg`n_+1wtm3cM%syP*Z+hQA5Qk2-wm9qA&yW06!_&98N|73G zvR_|ZCzzI)e!+@GW=8yL&&Iwf&YQ+el*2NrW@v^38#W_k7Ly}8U@@xDk86e1IBbX4 zQGvk`4=RO~nxQTV=B=o^^%L1eRIkThE|E;K-S?s%N2e;-4ZmP}%xk`S@j+DVSnjGg z+XB1FrHZwyil{^3Os7>Hngx!++4L*f6s&Y^b5O>C6ZWF1g>xATIY;vZH4ZZ?Sm4xU z^?Q20m@eaqg_h$&%X`xonwKgxPYTVmFWFcfbmbAv2a5}Uve1F(Yro>_Hcivc%s z-UB|WVtpTNmD;|C>+!ONWG(O{)!RP(SIevbVj;_hewPxI__%O6WmizG3n!Mb| zxlJ+O>F`H1|5fKh|Df|>(%E_Q-{_3}zN`W0{)6_v@l%F;dSn-Ff>o{zdXu<3>OV5e z3aOVCKjXm98MOL(2%;#2OvrN`~zW;SojhrYu{1P7;T zci|$in2wacpJ)Sp)1MSxPdZ;c+#Ef6Dq3I}wZs-((JE?ejrC*6#Bdv8ZLv;;+mX3F zR;LnOohn-3dmlaUL+TD>-OOz=qT`#?rzB;+-Zi9l=WKRC>; zj@b6Eq>t`H{lE|37O-Suv;C|&KaHbgO@|esL6OLVK&Ib-nb#jbMCJ%2vM4;-gD)#^ zBoYIzcEKkwdIF)o;3*F>rkfLi(17^pw<9=jIt%$2xdG~h74C~qQ1O1NgO}@8OL<~R z`DBK>Q&V$_=?5yN2`Z+TkV?In4EoQ}-BI*`XAT}e3Qih$DtbmUsu$&KZ%k}EE4z6* z1(_ZmDPI}VMY$P~+b^iO^wtY!m(9f`DZ_9tllmC>fYR0buj$JCyPEkAmGR${%4xBc z5h*=`#dnv^V;VEVeQeirUH3vDq;}zM8|#ULmw%u|MzM7`5)8t zmKAR1`Ag&~`cf(Nv+3N8{&s8(-F-kLe@jgK(xaV#6I1L2{&O55ioa46Be79Ln)`<- zQMAlx6s>6E12M(0ABhKG_f9dl-1+(cJifpEV|;1O)MP|@`!xnd?YUVZBsgJQbHIe4W(f(?O%rn*^19wodnhf*jM}lo(slCnnThv z=%YL5@YQOOysc7g$(m~|eSVqA*PZx6r!f2DBZ%nFlAwLTQG+pU5NhPXQ;hhTT(T;?T%TLxQM~|t z5SP$c@DlkLe22$TFa`0E;FA#Oc$-GC%K;|F`{)p@1RH8=_zE1}{fUR-?0nniCxQX} z+%HAtwTp%^8ZdzAJ;5IpWW>9UfbNwM&k4s@3@PD%=c)?ibN~fnYlk!O+*LfI$Wn=k!dw>!Ux^uL*<}e>)y&Z60O1KX_5yfXPIw|#Iv*@c_)?Ic?{=MqLkSSa=%^)M!uoh;pdmKL@9268vm6uW zn}IGj;!kcVS5?gNvMg|4i5Z$(>Kr_L%A${OPIFbJ87!geya~MVKGDQE`DCn}Fi1`T zOfjO_5jg=Fmt8M>73Bm?-Q#@~f8bDrJ1%KhgRjOqiXxJS9>E=#NAaLy!|i2dwZ^Y>sEN#&py;4K<>O|!eus(C3YwkZ$k}w zLP2_7k^ah;C4>6*&rUdm+{8SKP1bl53VQ`J{|{w^f13STMsCw?gszTW0% zjLc@CrgZ%tbhH2DCrOw$Jezt-&B|?BYL`_2mZMB}lV*61jcOHSR6YxNT_M z(n~@k$3yB0>Ib0WZhU1%3_C<9klWx3&{s6p`E=-^9GM0LRw$lh*Kc zI6-#K$%~#mr{g(NWnatVW-W8pZ9IdSbvt5oa6mB(4kWE*g_p`a=MKbb6^2LOui#Zz z;%odkMnt~Zq0dHi)>UzKBqIb;+Aodn5k-F6A;JV6GZF(!Ch~SC9W~cF=%pDbO~BG@ zf6xxyY12K!L0=%~mF<>-c=}!$nrG0rPM=8!ikj_~t(PEgx+t8*2>R1`3b}$qiFesX zH^N~0&l|sq!9-jeBxd^ICv-RZi4Vqy@3Cc{3_oagCYwFYSu0UBP67CRfxk*<4vODr zra}3nr+LcmrQR;+waQn4Dd?Sr5IxgU1bn_pQqX(OUX9b`R`~XUt83QI*4T8=9;YZi zx@F|cp!84*68s#0v`h@7*@vn%2zm;VQTJM{8%JueQ9(P}_B*LQx2S4-#*df2cSxr? zcGjt5(fCBGTf7~~-09RT-n>EWTY-0v|Bub2KqXcAI9#?Kq zFn%r={A!*OhVF2UNbfY`bGa%M&qh1{5>GlelOMP6b__-6e$2$Y4AXW+D8Vms)92dJ zr(E{A9umNU)q@AH=Y`kvf`;1T0f<9JY#c=O$8>y+72bfEkwCXrSiFb)w~>qnO^3a4 z8@?ds2^YjXF(7giro9_&oxvWQc-5uK7u`&OAtIWyHm-?%f6d;A&R$B}mkPfsj;RN( zv^i;dC^k+1R6%^vbV0$(9v#Qm;td_F8C-V~@phNc13YoajjcZTuC#to1sy|15Eh|v z+;6z{j)Jx%7uqydr1(r&=Erk#AqQN^h2BTLPs@{Mf)?c^-sgityyK$h}e91hVzBZ7b5VQ|n0#M0`&4RRKiHw)8eGkhfh5o0#jxsW+lv5{CJ16Y!9d|HKLynj*;(a6XbnJ?8orC zy{cG7sE1d)@jh7b`oa&}@`#AqBeWmvq=N^K>GfciYk8b$$q|ZBX4yJw@jf};kh-u? zQ%DAG+2HK1wJq z*n>JpEFWCxJhg&2;8P-Zm8pD`G7!Vc9g?i*yzJOBJY5(w~5xo}YHq;(fV0T&p>GvXW?4Y_s)alw7mou_##>b<*p< zJ9+#coIGNMpTHM5iJ?X{tW#3=& ztf7-B_o^JkcUP2c81J;G3WAYYD$?F-PU$aK;is80hk@lZyZL; zw){zGE`Mjso zgFo-?inY1sA8qoU1>pkx`R3VJn+5-9)8RP~uE3u&&&ArT_(z+Ip9dlR?0P=dCi4Xl z(ofk7F*cRhv?xE~eUaDELD7rwv++f@D<2F0)+TK?2ZpdQJ@mK@WZ!5wlxYr>DSckM7>~iK zECh!x+ANk9VS=BLnO$~Vco!{$vJ9(d#izM_q{q~nqCcoYa; zzktImI%`~#H!T>bjl1`a2ZJG0TPgl57eDmEk5}@FBcDKROl*xOk3)XksWuqZLfo7LDKX+*X~ z{_Hwh(u5>AN%r7^K$2a93IcrFgG2kUgG{Z3)@FKQfDT9skRbE|m4?qQ9PhJ7!s^({ z$TMo-W`-EkY*3I7`UWqV81y!&8T4{B@dZ8k@gNQQYJ@sN&L-JGU$KRb@wSJcJ(9j; zHeDRQV1+sx2bu$BfWBYNi$@0;HMCv4kI#bYG~nF%^ENoM*jYOk+auHbuGsjSV5ojh zCk34WOBo$3no(`EO33}{IB%>=e)2e&TM<89OOSlM+N z`>5^Yd8zVeq#B`%akfwICMCF^O!=eFQgT$N5ASnTt7z_VogUuOob{rOo9;V3@}+?7 zd|OB}Q9UM?0@lMZV~@@6ukOWea~A$ace`vB%)qUt@_pn0f73(FaRf`W&)F~Gd~iQb zoq)XT5Z6}DD|XDrOEVO6yhmm#%$Eij{@W7%I}|?tMpxvZ^Ig>WUd&w4 zob|q=lQva#9wRnHogawK4@oEfMt3kk=SP3h3Gw{cRdD}`jb{jTej++QC7qvMsPi+_ zdC0AEh&k)?sLu587qorgu|m!$K{3)B9UqqA|@cwCC>swXdX;J0TdWvylA zsITLP(#Zv5%E3x4*%{2V=XkkwzA!%=2mtfHybAOIqK-l-kBJfl^u^XW#fBCnI<5;FETJIKr|6) z=j&5`yNGBK(#riCDi&KvlaZ?3;bZgbB26K>@RDnLj5B}+iH?8pi5*`g0!<})bb+Vt z%L{>~%NAlu z{crB?h;jcz)cp@p_dl|GgwWSmdTEB@?@aLy&?@vSun0>g^bU?{^gE(1mteil+O)0x zMKIGD8E;?iYwopu=geF_&tn_d&Sg!+Rh(qd1{`+D@`BF?nSmSX-sV;0zSw6vU3Uf|<%({m$Z_TU2#G?P)D zMq=LJyYqO4nz>{m3FZxbR?Xm}gZreYfFj2$pYY=v&$p$T$7DG)UpQKZi5) z^GTe9q@bQuJY?m1Y>2skFXw&Q*7A(i%x)W=LWjy!X`E!|$McCQnIr8YpOs$hF^h98 zGsC8{Re;%G zgTkr)>U|nKZzB)tyeGer$HW6p!v6;MeqVlKmhrw^u^O~U-+`OBCAE4$niKVrD1&NvQQJ#{SkeA>u2sjdc`;6*JvxRca@Dej( zD4qX2_+s8!G}iK502VSCL~}dxA|LPY%gd1S1o2&u0!UMKdYqN-wX|%Yi7)a?Rj)zd%Ta`XZpx}g5_uTK98?BGx1Pb%-!v8 z(tbf8_b+K#94}+HMem2u*zHcs$!J>Mk4;Pcy?>V$%M)4>ubgw{I>zMhKc$Vn2TIqX zbh?THMNws_YmU|xjh`8ALrFHn?Xj@T=suAYQ+`96;+vllxkks=bbU==hhe21m$5SU zpx61fNuE5U=l;DHic1B=$z@PZ%z~e1n#>!%kFLPya?qBZSqux5b zIQQ=ra6dT);?jib;Lm%V#_%RCGVCnwBJc!CeB$E6eXi`3#z}eg%<1^i1-*HkYfi@x zGw3N1n6EIv{1eI}XF(q+<=4!lU&gU>kP#bR?57<*J9HKfwO6j3$;-?na=U@KU{QXNj<7|j0W^GDdO^K(>+a;oU#vK{- z(qE(b*E}8!SV-&0m|Uoq*PgXQPYRu|9sboBtvH-`U-%gAeB*JuD2Fv~A7_lCd7G&& z`Fq_B^ZJNxn;)clJ&u~c4d}NE0vhNJ$o0M*J{yC%rfP=cS{^;pfYIYV+)_J^D-9s) z91{K==cy;KQ08Q+t87M(Z2Z&0RFByblZe8#5N7rMc6{!g2p&U(XVF>xik(8V;;{%PDFxePuTYCQd`PjWNu6Oj@>Mk|-8@(S@ zsvh&{Jt#{}!A&El%%HSPT@Z10s9c6Fn;zZDxPSr~8T`_mnRP0!)o6Yl zp2(AIk!6nH`IXR-nIm1UU{+4uJ>@rktJA{7`#536(Am_RjEMo5|J4n+r+;{ws~`LL z41AX|FU8Ir8HeTL^YIFi7ZyCN+nMS)R|W6+2u5Fy2SNIU?3AJbmeeuo zx+_}i_V{qTe)|O5XE;c>66 zsh`EWw&Wm`a4UQ$>Gw&maX)tIp%>8)L_Xlt>#dRCw++tAvulseAL7YQ39ZL6$!lrZ zq@kjXj`}0<`lT}zk(^#S3+<+;`$CfdEt-DRPch_bp{MnH2EW5;`Z3a>TVYK+rWYmBpt zb17$`IScBahX)XP)VBZc<@uTXI)}*V%?{@Q8t&KhmpR`*cyDG==aQdmg(_%@MoXm{ z%r4Z-mjUwLKm+L7U_uydoq+q}9?GG#Kt@_z>tATQI~cbzE`S=M(Xb-(7Sfwb{6zAb&u%hj7XelX_@2p|A z>C;YvAkLej^;5Um#0=W3|3yc?9kfY*VxUS<#~A&2;M~W~cRS9ZCnx9FeO4(-jPVeJ z_KvU41fi?#9)-vbhjNRE3~Sae3>OJ7tP_-xTto zJ?-t{U5Y-d9G&<)<*3xmZXO;4{(R@`y$SM&5)X&Xi{mq>vD`Y)I79E@;QE(tg`}w@ zP9u}xuTrLxl`j6jVwDT9reH|0o8VNzR)S+_>RPYyfV}H67U2`GT>g|NH)9gr8<<-M zt1(|TDEn4G>1x7^vel-(#SjN9JeZb`r_IH)VDVNRKV8+9n`)h_f|vCK=$5%$>?vE& zyOMO`Eo6mr(;01P<8!=r`Z*pM`pR>`iuSe`xO$H^~ttA)FTSQwpQb*V`%h_(0-cvOfUJdM2$EIy@nyz7uOucfv(7z z87$*^gMC~_Q^&^|k#!NDCCVyo7Sr<>)8=%vH8Vu|Bu@9+vP;WT_OjyKAy>^ZNKa*Z zdGy&qu%lon#ET#c(ZckUqulhClXxsUXUFW6l`DS!kKYi|{i2q0wWw#E9eN>NzVpm- z?6X|nvR>Q7r4nva+D1*BVEVn*}v(bH@$PC`&3kp1@V#Vszz@RU#55_l@XVh z4nraxJ$<*yGWq6#M&z&X0#-h98hZP5YKPc7I$>Fqy`t!gDO@p><(u?M4W-?ny$hOu zz&uRxm~P9t*F5ZFyr7)1tg4ScO@V$Z^b$a3Q=iO0O@BcmxT>aI!7#9o#tOEUaeO{t z7wYHe+*}-G<#6!oJ}w8n1D7|%r>AV^JPE%1G=F}I>66KOc{b(=pEe8Gki6f?2CKX_T9xI%Z+RVG zbf2mkU{`9xD78{mxGts#?}Vv`&TM&C5!c?`$X#tJuKGB6$w)M3VUYFHyr~wwuE=T% zs<}cE&33o}j)yIDKn4Yr@Aaj54mD+ASwqTxaY`@knSRm%D~&_(_+a15@9pu~B>LOF zDYH~O)>oL|g*aEjjRbQA^91t+3j`Yr&XG^Pnh0+ySSZ*`ut>1EPrgyY`CWI+m$( zts%ulRm@qf0JF~(#lt{`MkqC3M%lpxEFlru)2yVs2$e%cytiq}@8O&LzkxIS1gO`TTjsUHnLZ>iTd18G0L>WyBrwnW4A9gx{v(yR{w}OK_fue?H+b zjALw^!(_0`@Z6UgPCm!sA@k_nxZp2WmqXQ&&hrtznnvPEQOVUIT;Y7lLy4sdQI7Qi zW?@`ZxN*UT=v^pSce2mvs!`rnY6Uf#+&C*&Kila|W5OYP2KX}7STj5vKTfXbqigtK ztl_Pozo^x!?_^g@V-Xbbi*+izYq4X67YvFTYu|fAOX(zdh2U z>CrklM#|bMeIM()tVW->-NW9jIq3EK{@B&Wm^|>NU32vNLftI=onX@a?YOT~=~t&?{dgrGAz>efzB&YP~V* z(Iy=xEh(~kR{8qG2N&OS`g8xDp{3WSByE1T@9gh-&%NmI8+~rOqG;`dLq%V{Gx_X!0Za(|EuR&h?@-H-7VHAKWnP?(H}C4=;Km?%^s;&FfyR z@%WLBo8Gx(!Pw4&cAi+cddaQ{^D}z=Fl%4Y#${8^@7r3|>${{zw{E+9{@`;*-k*Q= zK)0`-UOMfvI)k2?Q0@1{vtD^+N~6B*hu%;>^Ubdw==ST1>sHMhcH_F?4eorVY-i-f zkLHd$u{NQ`qg~#+rE5uFyds(E7!C$An>TLSxTtASAwKAa&J*`1e=Iar-3p~fG&9vl zRSZ?PWO`)c)mP%Sl4{!9Qk5_u)g4x%wk3J!cBZ<$hV|(V_#*J*4*>5vB|KL86B9Vs4?ed(CKb4)2|O8rizLNL`z zLsO?TZ94%>eMmOLkT3&a$swu0$Ca`&2}?;SBEsS{xOA`MMOI-6{jl&(Wd7gLhz z1g6^QC>xQkwM=nL*QaZJ3(~c|`yA5_$MlvH#^H1w)1MsE8OP+SqD@sCQ=KY0z0Dn2 zN5?d^ijGS~6&?Er!L+annszy+LyqkUF~zBb49=lARm(9oc1)#U>X<=V;CCyT-h$tK zWICRqV=yjLn`Xk|a7-4OPG{*@T~STj9(7FT98*ShZThXI)|{5DO$!=m+a+R3QY*xi zs@@DKwL3(m+K9tVQX8Suo}Y`R(zshav3 zOrJMKli5U@MmVM`9Mb~F^sr-k&N1zGOo>gkseza>RPRC#%~pxcbgpe^$*HWRYQjV< zu@%Zz!|!}D#kJO^uUhN!{oOIuXsb)>JQHpldCiEb&^)YPR_F-+U88Kq4}#%fcCaZalkr+qvz zLEEmMs7)sw(>IgY6sJC(qU))7l{Qs(OkEw*IL9>KF>P^7FFB^8jw$78ZCWu+w}9`b z>HN!yXw#kZbh|t{U(0@XOh4VM)TcM2DQkf?t#?f3LPvJ1HWe(=c~BcV*u>k=bcvXt zP2Z+9?{G{v-ot+5)bQ0xwOWm`v8#3eH_?&ZxLW(z|ER7dpKfMZ9TmTYWpz~BE!uYa zR@R)P9^9(yfion&yisPIY;KV;`q(dqJ1N7cXdcqhHjf1-rGDZm&5b$y?fV`YmnS@Ld?2 z-ld#;SKGGy66VuiqG`~V+TBbrT|u%{U+VmO%CUXlF&%eIiC<|`1IN_GF^zIeGrrO> zSm2meIJVmy)0h9P+=h&Y9TK6FKH@Y^p1XJ!eDC_-=c6a?Zy1#$e@w?_5-M_Rc(z0(H+dg7?S^e^j zPLX*;+a^DuO_LoTa~#v1j_JVTdJJfGglnR$+B;f?JEo~ew7V5Yc&tcOYaP?`j_F&+ zWPYnn>5i$zw|bme{e;eqm%im%Tt^K!s@u%^qdMHL9aBkTHf5-^@AT-B?U=eart2Nk zJjb-yF|Bq?k2xfdp*vK{$Bf?=$N*NshbfkkC%VYvH!p^ z{p6U6f7D}7aZLRk+X^sU^=~w7abzzzrhWg`z24z}a}6tV z#jo8lZM*%L_VNBP-Cs>P?u=W<^=OrLLd)_`=n<#SDcwFsoYMX7{8QR?#VPL1x*40~ z;_q(8GpBS6zB#4)y4O!@ziEHyk?GMtbW3^h5ADu#MyI#*tWqt{qG>VwhRO8iSzU*| zc1(XbrnGa~bhfkZBc`0w>Am%wGs2$JvH#?p&X?Ttx|i>Ap0y;Yi_dF!HDNx^u^$R1 z9&y?^W6yX;w$L%<7>3LgLSnL2Gso21F^vEdkB!s8#Qo_VVB&N<;kesxY1y}q$?_Ny z(+n_iOb3Cf2>xKKa7^VMt@$2Dw#hN=6;nS`*PJBP&#Tj0;$_XL>NYT850a|xc1-s> zrcI7%hnS$pv<>M6?g$t%zJ2VNPCKShoHq4$OcNYarI=ur1|}}mK)fNNT6M=%*D(!> z*Y37CvXe`6jcAdeZA%ig?KsEu6`0;hzl77$iEI1NWUb|$pdoXWoK!>FNB>loDQ9KKCW9!h8VhJG%B<5( z`rg!l>H(5UkZg9s>aAu_e0GW?r20}QDQb@+=|>M)Q`8%dq(7Y_m!dupNpm%jR>&#p zup=3)7L(*h$5%1lG!K#!PUt0SIpq(=oAYOwx|h;~uLf}1CxOHpllE&=oPlZ26kq+- z4JZLtM|^qJeAU9Z4@`IkZ$~PS1t7s(9qDLZ0Jf;-N^x@;NIH<@8b`7adQ0@R*d^&j zZXR?=29V?_m!z0{z3!3>CpU*(l93d{vrY^bsnO&n$<%HZsc|G}=tyo?6G_rhB-esu z8c9kV$uf04Ny3h=WvZMc^Bl=?HJ2pI9Le2kAxR!`B&*bNis93yj^Qe`(xAE_k^o3H zkejz1H>=g-*ib$D|DNGcu4dMbq!b(bUAfTyZrDU0MI zwGq!*#8P(LY{XL;K=P7HQkx|2yCn5V@|#PNOA@aqs=3g_oUh{1IsbraZ(@CJ;L-K@ zadk0C+BlN!BI)l)o)XEWj^tU9lsS^!BDuwp>=(%@NAem-?g!I@B2ns1kYIh@E|RJs zxfFaspCFPf<9#)iB%eEOK2S5vxga^^(Jk%+HIv+UyxPqnwU^RfT_mtFSNq9LkymT} zT)k`>wNqfsV@VFUd6j&Pbo6|#-XdSq9m!$!E=g{2^c+_2nb_N`^6Hd+r9LtJ;AV?R z>Z_w5L0`KZJwK{1DD<~Q(%d+${v^paj^s}jXJLF`Adr;)se;(4sboh|&A80M&>Pq~ z^nu1o^3_Bn>8eyD9YxY#U1q#)Vd)HTd`&QLR*|BHJHBRt1pE0Zw(jR|HrjYFhS%CU zhIbi*JXjWsK(fL{H_MF?9xUZeB7t9HiU&)1m*ZxIaTQ7Sh~y^YLE{vK^`;ZnCS!;f zUThbcAZg%3%{z?!UJR?V zJVFTRqF=mpRCgSFx@rrSsjkTq@pF{V8n{pe|-qo+;^Dam*tRW)#!g$Y^OOh)b$@|7U zl9c;(x;`{+CCLIu@{w^Hg}%(M%l%{HPLez-l5~(Px3L~RB@(at%-BS3_KKvx`UNH6 z=Ad8K)!&SFN%FNLIVqB}j^q!Kqy@C(tVrrR5@oWay(966WVj;?R==`9mmaRv!@Ts^hiLr zi}B_tA8P*9adU+^h9pLumXw=!kR;2IRGRmaq@hR#ss-j&3ahi@W`X&b4^vtq60cfl zZYN)39XHEBLOs9ZW`+42=~*n2x$0h&fSdb8GEc2CcT?J*0?ENR8sE*AeAr9;BoY|k z&6i0JzK6kXR-3Q*62VtiJg2?B+H69%iuGCCOf|QdaenM+OGQ#&Z7~!4sCiPn*1XM3 z@l#!OG;cH0NzZbTELD%0)%+ONV@_C4nAxP~IY-ZSvo861&C#>ntWRzZJ8pKEx#Z>- z$IT8ipCsM{EqU5(LXuRG%vCR#?Mag3xY=!X@na9!#*yqZyOW!qBH3hqY)&M}D3NS4 zKR0Liv2|Z960iE+yvdJcF-Iix)NzsA<&xY&l5H-@B9iQLNp7dGK61i3ZZ0Fq&yM80 zxt{XbO4M<-tWD&mTB3I2v0fla^F*BrueFCHJsdY)YcEMgIBt@x4@h#gqdD37m?X1A zGFBB>83F9a?r_{RwrT{h?QBleZKue}31AH06gR(^MOM84t^&SK)T@B@)<|-5#&OeG zBw0x;8DVs{<^(YGe35)@_OhN0;2g43lCBB8tmgt)=S!1xe0o{Wlb#8VWT^EX>ABgF zlv*DIFz4?{(m6lE`ZRzuhs`3X3X(6#*Yl3A5!PYS{DDZ))ky1Wk{l69e>KWFMVe0} z>3(dqRT~#PDn40D#(@NV)kxN3I+CzeFAmey-I0`8xpA2Gp(26a!D>yuu5`I+ z6Nfc(mPov6rd2|27CUb4M+vxD?YLQQji9g|cHBG!5^SeCl65=((y>X>zoB%g_7Gp-rpX}#=dK5kj@ z7*-&tCBIu9a+BpqPFV>gDR3lzT2;tbCr5JDs!DG9IFj>L4oQZIq(T{Fs%gB#%3iex9%5u`TaO)or<-=SV!(x?SJv z+$a%AqaUiLl*a~#P?&rc+I%#mE|`Gq8h9m%DhV zKoYCxuaa*)lSwk^w3Zz6Oizd{uirc~Npj3_bKG<71-^dwTz`R^6Q0>5`RI(6ob=2g zN!~dvIqSKBB-74o$vMwWBzeY>ocGMXAS~s*<$@R*-h~OV^~dxsy1$KS>TdlIq^|B&inAl3L!4Bq?zub-WLfWOyxYi4d5YGfB`-RXT<;SkNegO8zIO*nT04>g?^7hX#E~@i zK0}fl97z-JvlrxHQ}6Q^jV@#}E(v zB;r%x%W9xILv17Ebb74P%HB0Gywb{ng2M$b6U4W>5T^*gMzCD)Cc!0wYXu(_e2lQT z@|l_#UZHxuCZ@koy)XE=;CF;M^w3~{#qk~j6BU0g&aZU9i-Fe$91YkUa2#L{z$*cV z)#CI`7FS5K*%J<waQ#KROc3)0afe2N;7P!@U=(T6 zM5%8@e$3B$;zlqo7*Sl=ttp4!UvPxrSixz6w+i0dl+&}Y8RL#-9M4ahMdO)0GN@Mm zfaq$sMcAK}R^q#d@4525a}m}T=(h-?^07tO50+Nq8;Xede&PX_zblKdew9{UB{)s6 zoG|L{R^UbPrImLIt`uBP7fjd3F7u5#Mt=E2KgRBOO-c=wO72Q77E@A*b8t6 zU~xQ@cMHy+<${|9Ujv*0_M=;3ezjEZwnTYL^^qX9W5kw%heZCfAbu|LG34`=tzl-9 zn4|7)&HCE6;c^%*coSgjBum``*dZx49aklBdqTu^gt(T_qJ9yP`$J3FZ81DcrM2bp zX*l3Au%86D2C%X%r+Wq9L%_GT#q>w>XLnm1-z@b?Ta3p)=a1SS}u5R zdyWU{ZCcf z${EEuh?SRXEh+3Bm0j`@J!bi?{!C|`Fj_uTGSFAUYIJJt(mzumEX zqV4MWYBj&sAMGK& zn?T+Z@JYaafV%((1LD(wVX1|xN*^e<)S&9~6U(V5B=q+U4SP+-%tIyU8W7-{3{y3`8Gsw5@0`AMlAvynif=xL0?jCP`wD)X%dfv z7+&EoO8pD?Ou!S9bbrS2n>m^1C0D^3X7)g(B7pM=gK81rHR)XL*l(;Eh*+pL0nSb@ zR8I@OB>2AIVZk2+PYarZ7!w4m5n3udM5+6-EOiIqMnJ1Xsi(3GHKGLPyD+aU;qmIu zu}VEzHAig)+*=ju;aFauFmI_|0nDhDquv6{2K*ObVKqaUXcx+84&MUT>hWd;Pt>l;5UGLRV|&q9JOYK-5*mxdG+6f<9L~q$?pMM13dY72 zsE7OWrP(>^jX6qv0QkWi4(HoB9PSCgPqIs8omE=-LnWg*moZ(isbCMmae_Aq-XpkK zaJS$g!82Ol4U7eXT?8){oFO=0@Ls{qf-ebvB>1DCc_U*r!2-dqf~A6&3ziGsbtBLF zHv?W*=bz@qhRk0LCm%6iZ?6;0$3-{6e6cRqE1YNVyou#lAK#GrwzBU3t)8L3R|PMu zXTO5}wRO3^U7O1F>4Cajj}Wn5;kZ3fP}fIYzb>qg?s|stOrHnyRlw?i?*Zbv_;B55 zdwT}t8|!hnTkCPSh!~$|>T&q!ej;H|UHb>j184DgoRn**lk>1%#`YI0>vDgIi2WyG zx$y3S*bgIOKa5x`@_O?Td43kCuj@O9dtz2>I7Q%o`FzH8gfJfgY+S!kRlQlMv4DMU z#_}#ym)(r>)u4(1&IS3+H}iPChIo$JelzFaU5k{e(Gc3@BIdsd)?Uo(c1-t{**s4| zTzm%VTRD%<$ZB@XRvKm+E&hw!Vw|5 z-UGO(QEa^&72^7hi1iy0?|neTc7fPTcn85AfqI7&-eGw=e*}R_kExDz2`aio_o)I z&q>aAIztX?k9_@2WaX-)s|*&iU#H4ArS;kuc6}3!ecG)Xp1$U*8uKsAD1qtXY1314 z9F5oIno+)s+Lhu4c+Bx1O1ymHd=J5^F$aTo(<*lR9lRrl{q7d{`t<7+!OfuR$%B=# zgLt>enw)s{coSyIh0WuDgL4inf*u>^900n(%06LgwWlY$KKxYKLmHo#XZgK#L)G_2 z1Bz`+aPqDr9>NgBsO+Ei1TS*#+U$Z3Pj%;4mW7@o3eJS^JE^1tOU7S6LtWav2Q^>K zG{4N&gm~5XiSm_$ElA7eqWiBY<s!xr%QzthHTNe(d;)5|2{c_LvK>!W7#+y=J}$4{^Lt+r&h$}so6~RnT}A5x?UK)} zMuxD@}MqIGDgZDbA1l;NUzAF_HP}d__=~0-o@=aYavXzamb-?k=A*`oSLaq-#w1 zUv2dv3|*q0+R|{lVs7^==GHIV`>0K|cJ1)0GihhKfvm*i%W9il;z3!kWcf1AgDDwN zVEx^-^Yz!_n>%RaqqJ5KeCoA^i^Ox^)zxqb8LxnWw@?uk``vTD$p5*=iXOEs;v?2Lx-b2bjF@2Fy0FGp&*LdRrT2rx z;caHm4B|TZ%CC!o;ac{WOVO;NbJ;>@&)-5b4JEUZ23=YMxQg@g<3fN&*61hc&%yGe>*thx}m5_k2_#oI3q zS_xLZ`lEn%2p&n=rPlt_QrisrRK-KqlL|rxkMs(;0WOdPHM4`D4i$H6`{w6BB;Hnk z6+Dy4`~U$_ory)MoYGfkv2JTK!ZB~RrH|d!_o-YAi)cAqZoN~&!S-v0%V(<`6if8`vgrBiAfoC#R2E_*?*(+R{N;2quMA#xkZ5$=)jjd}ES+9@%BkM> zNn6}ZSA!igA%|Pcg>S4-kuQ|slj+};$CGRu9myb9&;7FXpi~5#bPyjYHEz5kf^xpe z!Gcn2g+~^RH*06fHCDFoW!I*W+^Sm@vf^y^=*m0M1`8{16)7en(GY~D0S=bj1Mo%{ zrXm{}vp`q-o@~j?;XfSIKkI9Npt83RxeF}XKLGK?;WsG0VZV2Mv+q80G?%GxE-~D4 zCPgA~Jwso)eOvFh>K{G*wG`3D>J_l;RfrUNRc^b`4biJU))8Qt7!4#e#aFyNUF6jJ zrWW-H=KJXwjrya}+7bMOW9tZ%s;+qTUk7SW``0q43FJW2-s!s!BTHdEkfzaTpsRs& zBTAe{)#6qJ;0#o4+6HxsE>DI{qK>ZA8`xK9exOeSb~qi^s~BJ*(+#jE13lNa3v8yW z!+Zky8p{K+=2cV&TdQ}|dKB8~CACFNNVu_Dkwb=IeZ?(m<#_iic_>XJfMm9$6gRcm z<f_CMzhy7f;z2dEZPpi_sESrBavymtWB8gSR_joNh-9(X2_+A1D-?o7D<1+7EZa z2cGKtMF;ULkRsg9V$6P0o{E2k9c{r*N-!~^cLlRn_C_~6LwWjmd&xJ81GyG|F+MN2 zFmxdeh!?a#V+bjGis*gj6Tsrl)$bDZIaB=N-j`ixss8$y^?Vmvt8 z4JJ&F!ay#ObOEq8?<)30fg{32#jAJhy(p)!;?;ATCjrSnuGM=R{JZvYi(98ir?esO zsJp;FX0%96vg|qxc=Y%5ZHOoH8=#k`Jfk%MmwX5nTiv<+JLZFJ88$D{=RKMkRw zVTMFWa!ih7JZr?1_rHTB!ufgI(`tJ&;UZhlyh8c?k?22GWi0Ral6F1XDND0<{WTxM zITaoSd~Wh!3N3gp5jw&iB)+7xq!kW2(<(w}@{sq18&wTaJr*&~(q>zDMagSL-R7tE?Y1h%{^8T&10-Jzj-H)T2|sK)~WurD&=TBs6Opd^(B zt1KVEOFp>yyOsX>tpE%;0}u_pGeu(7wmu4IXJLXpJW99(O)E?8JLb3U@H4EjO4@CC z2RhrTMG%}gx9HMe=AlT)ED6;Ym>8dLa#)ychep_$91OZ3g&|YlD-+pZPgNPS_^yUW zQ2D%2xk8m*PIGFW5ceaUxg{(xe2{owFg|AiRg9OUMBU4sX2zN0_h7}LtZa`F(yFjgNWil=4 zrTB0;7LubwXq}zz0eJBE6Ik(e=|7n#XoWpQzCNp2_EUBWH90R_i*5S z!!2m>=K0V#I|J(rfCsIW!4K!)W$)0h|K&FjzoAr$k{HLEmk43qc>+_=&GPp)DX4QK zarS4-LkF&2GLOJasp8bGr|Zaf9OZuS@GAo+SLl1h z#~FNgQ0nTcs@WSq$B+8!@m<@aYok0ZVb!|C)Q`$HS$yBM_T}I~sX6m|zc6Vloh1hV zo3-_l1Nwq>qE96_sw~N;5*<~hL}dU2cCRCqC(IIQk7{|`(N_7R4y5Jb7;3*p_aj*Dc!g@dT)>7Pi zG;?T$b%C<~bEL8$g|W6-vMU}A{_(VA$MGw^@TkrzE(*m?eO_MJ3_2>Fo&wZa%|-!E zBd>0QPLkl`UD|=Xbhat{Dd?jkyTz98Hoa)}CK1rn@{isld#Ikg{%)#ir|-T(dBW5F zLpuB&{v0%Yx9TGY)TQ%WgE*_+I}uvEA3vdJ+=0L$&rEiM|&j-U8Cd{c`0#Iav)*DN##(CqXF z|IVX+s^>If>uL#79GZ{v(DH;cS>FfLV+kSOGQ>l9rcMkXE(&DJY4-VQNg5l9`6zhk zTHVQXyvWG}GoKv`b^9?RnT6GeoUr^I7*6rZaX!e~Woi#R1-utp6;La(*28sBKQ$}Q z89I3PL6~&w<=wV+)TKcpg6E*kCx?+zf__g7eNnQv?>b0K%9X6HYN4@P3df*tV=(ec z8I3vci4q%EzSM|k;iooHda3O__PiWljyUzg(m<41 z6?{X=S~yDXCS|ECeOKuP(1HCeVN&zP_`{{yKQz5fqh(DPaJ}iFo&%L>sB1F~ng#d+ zBs%0R_z=LF>7|+HjE=YR8HBQhYn3SQL=U-r)#Hax4!|L|Qurp>4nQOt9hB|DCA4|R zi+`h-=qH&T%2d9P)!qOfA4uyX;mfGGtb$-RvsdAC@p9zv*XQwat);uax`Y_A?8A%~ z)_&))J@2glWl5@R&T@9?zZM7|Udbal4soZ_TEn3=gQR{C z5$6_CWn0w<(ZWj~)W>0i+{(=yTE8|pgkhGwTKP8J`0?A>`KB!p;~ERs)CWOwc!!DJ zuDCXp5(|FRR7ift(sFtT*rLxtb33~@$A_@hN}LFhh31o9T7%tFT^}RvR68)W`UWlQ9WQlC?;cMb5T7sR$sbv>A^RW$D!<<%6$rFie{xZDYAFp-{3= zu@`o*ko(4wnnE(QzD{*21NDt}{RUizrVE%k3{|C#AZ z+{_AI;F_IOS9$=c`mhdb%eWq@NJf8q$u&tlVBb8qqzOWQ^LCRZ9wclU@&lYTzb%L% zL5JcZRv<2PaU%?3PL_KfGKh+{`rxwz1lSzB_oF}`DDe*BD32%XR7pLVRL_^>2w#kx2iM|1yU4c)`N@`@Gqr?IaMfG0BzNc-rC}>vRY$AgxM6TaV3=TeAQ)?S{+ z!sMh*3~u($`>kwS;RSApn?`R46aF=7Y1etN0~fhzG1`E>!c4WGcqx4dTKvd0h+VM3 zL>asX89EG^E!bF2JNZJuYw&4@~zMew_a{A02 z*_j-D0Ypi0chdnZ4|)~*FYsaARs12Na8qRg$B?qV^B)FGLmC)2Ore@gRBcMgfq6U< zFn+h6mPH3l_+jQZ7?0a{@)-t7t8W_Uh}5tsdo);b>p~zkv3$n1kp{4xukxn=OBb#o zQx2Czeh!r!@_q%JqkjprDKvev1uWh)Il-zum+hf)a`GI(wi}l`wdyr*}EGRb6n_JG&V6zv#}lC#8CXR_6tt!?;#kos4}{D-BG8 zc;llh-}K0hJb~6}P%mL{JC*;+7&S5_b934M3GSz8X=uCjG_GbR#T zpI27Bz6Wyw)jtlABu2+fDi@uH#X}N(UzBOIs&|)`?i^cAs@|OthB|g+=+A){WrUE; z`mMYEi*ez_Y~U|(WZR(RL)9wrO~LsnVsIW(0g|B+#vVVz9e6BowXb)M zAR#Xz>DMAB?_n0$0`}NPEWJg~T~Y7AA)Auq$8gA0UymXU;LKIwDqjj1ypQb0q1t?L zN?8cF?(y4W^{c7B5vP%}lU;wB)6|+_1Cs+!f-5vybGo&w(dlukBa>f(g^8qa*y5Jk zB@jMw=#&*3^k5Vc~gmEYG){*eez#5X+Uoz^mWoLegLs8f3DmL?SK3Ql;-5Q=x8u< zaCAH0F-oKLargTRfsp(JOFnNJCcaT^=O{671`X$OY6bS1VV~3D-hhx6I_Y8E%&pqH zo3e?xSsY+C@OE$8z^|}G#+x3bpLR3q_fi*m3h3~>pm}+=0~VE}OMMuQt5OtT#U6oP z)m|DTphnl_vM{hhg)ojuxZ67t3%z;DFZkA#9HX_Y99Dhs(g}9U{~sZ1=Zf9(e9Qln zU!A|%>Sv(PYS=BZL`F+YgdDvP2RfZ0bx^`QenFh@}gjXz|!|e3B2UVP+ ze_G)z#_PMJ`!391MpoBGwl8m=h4_dE7h%3#Ir&%fNiG`L~! z5${j9z!2`XTFOGYcF)Ud_oC(?NkQRbf$(JdeEVeMkw&}9v8_6p;C1?tpCk~C)hD`? zGn_Du>u!wl_-(;2HH-=U)5KF05N6%jJN`hTw;a^2n^3K-AH?<(w6(kQ0`<>5L|0L} zg-W^_CZ_ohhEi~V1T0~qYUq@N7@vQr!7n$m4j3?p`M^-qNx@UQlm)Gy59%LST)!Ui z=~F>UtrAblwHP}k%eyvS_v5ERSgLKeO}?Lxm};pDe0WuqH3=9l&A3?|Ke)iv9E1sGRsgogrO> zfiCRF@3#rF485=@oI-al(C$^p-_VPcjDHzebrE7Y^?Ux~~ImW`u@^ zVc%=j@^cwaUJ*~ZFsggkqJ2*UvuD0o24F8l?6x3hF86C%ki?O?4hj=ct-yVydi?Vc z;XznMg^eT#`PwVNlDy~mnxd8}hpwv^DGeo8*07td_626kBxo#zgtd7&NrJS$)}Q1t zBEOiaFWOs8ex>oHH{GmAMlMwj@n}}B6}hl-tiAEIUSp2%;>OsaKo#d6EV5$UU4Dgh z&R&}M=pV|y``j#yi~kx-WrqG@*36AoE#sR!5Oh%pd`m3{UOm00(G6`qwY;c6CDczr zpUZ9!)lUWICV@oRGkA zO=LYwR`gc1XZI8NeYa_4&|t-Z&@AV(?V-e3^~6;ow$bbG$sf4MOJT=ge2RqSyLCQ0;corN9KD&>jP60H zsb>ax!T!~+m1DANaC*8FEw?_(CUt0<{u^U`tw-=hRt>FB7<{%m>)a|crX$F{OL0o% zIGwG&@)ecr@Pqv!W(XVM^+*7w&F^)R{+rn3ZXZX9CamSju*G8r#O%K+x&xGQF5EX- z7Mo>Vs}6p7WuE>Mr+I93MQg!z7QbHn+@B&YX?-Rq4g~T*)CsqVIWkwZ z5Rld&^jr5k5MH8-{qaRr?f!Jcv`GK^BPb8T1z8*Rg}Dd@2Dz@y{#*+m`gCMU1Y~w- z?&>Z}6G8SO$6CHQX{z=)TndkxCe#H6JmiUw^TQ<(> zL7v@pxAB~PDWreMs+FpYT-ALICw8}?*-*lb{mWCR9id-2C~nd>t?TZzU7nf|sPv9Z z&V%%qzF@-j=Ie2k7}z(In=gQHy7}?hFnaNqBcb^y)n3V4(0f?DVd4Q_oLe~f!SL~_ z)Q3DoO(SCJii}l}FR)s8CZRFa+CeC;@&T2NAnmW|`*~GvM~`7Nm#muJv`b1oMG(S1 zQ@Gcfun}UN+r!WgjTfRPY4j5* z^L+!r%^Xt)0qH+U5kLM&is}0}J!g)sQ3Y4`#$3$`v=?1w8JxB$DUqw8G+LYbW3${+ z`Hg*$&#bwm-XJ}qVimH$Px!h%WZ|EtcGhPB?3SG2uI9kVScDz-vbik1yG+`2g}P97 zz4ArQ-;grWhF8V#d6DBH_k~n6q9_8oT$&$3aSi*7R`-?y43#UCVm<8 z0{s)UaTrqT7d4&hYx=3{NVtgg;5g`fJx750m&iSp+9m{ZusKp=Iep8f@RevDZR30nJHp}B zNz5u%ujK{%WV*h@*;zx)lr)uV38#q@6`dr|eV=U`JL=7p~!RwU7~({mrz z*&$RM7nEfw?Dmnc)js$*LjJFBqAIiFXGkR`)K>)CmB`kqn>DFg6el;r-8n0i9s^Lt z2lR8T9=vtakmY@yzr}@k;~=5D68g(Gbt;3%-lMeq!2j-YPvTaWT^307<;Sa8jJI>Q zwV%mSwO+?v`D&bCxBDj1U`aEl=5v~O8sA_S(KDghG;NjfR)OhTggNG)TK zhuxp`GFtAkj_or7EpO-?J(MHnIRkt95h|mg3gdq-UI%cK9^0sWEa@9Drc=#%%<5~r zoKkfd`0x>inmi`zyK|0y%o%qzE4kBCAzID)JlTfpSXG!?3jBVn>Vf7T34`ykl{#6= z{#K6+dbrK})o;-oSqE9V@x0Djit%Xi&a?Z>pHEUo82ZX*Xp1*ys^GB*{pz;xOzie? zWt<#RosM5dgM=A@gu8B_V&DT8DYOXqquy7`uL!mI%Qxz0X0aN@EY1Ogh%Av<)+}}` zu*=S#jA4isfmh*-^u{+*Fe?9YQB~r}Skr+U>L4dT-q)b~kdOqw7-9%Pji{jeUG{u& zHiMU`;hpdow$97$;N`7BKo@A3F9yuZsXKWcxW z?MKYf%&+7GHe0Sa>Trr~F!N{nvuQ;?5u@|BMNN(9rF7yJ{W|qx+ z!l8zvl*T_6js^arf4a6z>@WMM=nBkDhM+^hjlcSAd?gaqCq}`z}4EWhLSR$zZPV?0$tnEsXf-Tt1^zhoZtM zk)USn6PN32_G&>E*%o3X(o%~3aY(L-E56j;#Or%eUHU_JTfxo2?3l4H#cUI?A^6QgjSev1<%_-&ymKhX$}^?_s=5wr{CL9#*$?V z3$Tr-rT)Ug1eR;2wjK6s7Wy+oLD|N366wUZ>3gF}gDj4cMw}e&beo#}C5vj$KPWAQ zT433AYaN8B_L_xW*t?9*(2-#T^%^bw1AT=>LWG@$gO7sU*TJw9{rp^1 znM8%IF3j3;=ETh_PV+y{PBW9)I4jVdJTn@k7%yH|h#rx58c*8EecoDfLrb>xUsCyH;V2^Jh4A1L9LM*zB=?51cV2BtCS4C~0Y}dD3#%sv{eO<<+ z)n<t2O|Sws9}yE2~(4rv9brz`xW+UlR1 zA{FDBc4_&hqqh`W@#BUwQ6EUz>V_;MyGTp%4OM}Kz|EW4dL0zg?1FN42)Z=cKl-G3 zk*S5ZNY)UkZvEixXP%*VncQgUQ9FSc(=t6YYFpA#m*h5ywho4hXr9KsIi2Mcw}UEI z#9xPKspEJc{K5OKyN{Q9^qP$}*0(%i^94J$?Q(X<-WC&Ei!g+5vh$#D%~+f4SI6TlI(qo9HxKkOV%rEi9vwcC*UBCv3OX7gjocgC0yVJ{fGgN{wX3L^myWJ1?`jfGNu&`CgTB>b6>2#lz?VP#j}%rIOX`ae zJwJdDfb);>b=E2Vc@E(ZI|pa$QAYK0%j!>zg3k0rViTf`PE^)Pkl(nV&Q0SN$U%tQ znx@x+0n!}lXBh8kzzW?V*!%IAIDCq}5l#)2ZeSRu#{Z|(Leees&eM#)cGlewHPiwv zx{c)2?0Z%J9+b|vr6`t)VAJaf7A%9Zy=O}SZh@|OiXVt9vo~LHy8&E()+W`U?&zui zQ8WK4>4?)2|Y&uxa7^{?8x%pcVaToB2!RLp6&F z0t=j9qz340dyE_90Aj(TT0iLlbkOJB-`<&bK%4Y4n+(?Fv`V%DzIB#o_ze}@ zkLlK*x13*{f5MOX6AD*lcf63jdv4TLT*NRdD)EL0K0|aq#08ATt`vSgyjz*j5Q`AkUV)|=89`zf^fvj4K(`qj=pN85*|$>t*RB9)(CXqeKTVDrNMA= zI4(x6**m>;N@Ztf#%7|BTw_^wPI+*m@F1XgoP);gn6NtOFZyvD^VU$KuzCH(n&ZjK z2&~PI?l9T|V;XMZlHLr9J=D_tT5BsXa0ohyd5W93+#>b`*M^b|iNo-%k;7)QryuDK z@Eo(W+RM17h{JTdQ5*l#<86}XD>?O_+7vB&^@v0l0@J93|Cu|wSdg@ zQF4jW!8%WSf-FY*MqjO|-7h`2g3_xpjNqtj4|TktXDjApxgWT}@9(wTrpNdc?5pj# zU!-`FtR}CaASnyP-*&^~-k3E=uc2jBdT`L2R3ObZ2rrUbdkboI(Pe#Hp_c67@x<@LhLjFXn=jL!27BmfE7un< zu8}O>OMUrQ<>d`1c%QeJ!2XLi*WNNR_7#3r5lG?%-vfvegc@K4nm-c$rE4}Y3PR(t z)kL{Z4s*Y3hjX6^R><+kcFZq9#v5X`oU{Hl0An>=sBd*o&L~<49CP=%dH*IC}cjv||cOeiuY%*C%~NNyHrH z5M$g}{Fk{y$zngJ9Ve@|x4lW~fhs|_u`)Y5 zKQmGDlzFX{M}y*XTB{kS--6zfK7)ObTRSo&O7{+GE^I~oWbGz*t2pI{{r+xho6!tz zWl6l)_i+EVEX&y$$I%YZ!a!4mLAa1Z?~bGh`VUc6qb2=QIrB6v+rUsQ+0O)i?`!2Y zXgye@aOHJYCgkj2;Yge}?(x$@8J9p?__H7$EKf|rmqv`v6FXSP@DmC6B~A3hmnKAgj;fKFCdO z*`d`?^o{#YzsaQru4>6d7P#b|$Y7bw@GY~G-h7L`h*3?_w$ugF>7EcHD=+z%N47NYgV}ezFJkvdjf+A zZ8N>od`rjA=?kVvrfzbGhF#TJdWr!X~kPhk$+kcm^2OXigRardj zWczmm;N#x7yypy&7mUEx<6eW2!WcmCK{DHLQm0%SG}#duwM9uf0#}{h zg0$kBlYBSG`0ximk{t^SVNX5qSj_1xBgw1nYV3kp6&d<}?ADVyO&4yg7_9&Ggxy%> zTxafdTF77Fo5wRIAI9q}!n!pH83?zf#)M`d0Ib?uWo3)_l&8%FAj{3)e-Y_+RgyaEt`cQItewci=CGe`(%V_cY@tJw(sXx25-H z4&&^HF*3=4xd!#$4t&3cUTn)M1j&N*v0S7>CsE*U4A5N%jxwV2;wE{ht-BDJSLE-X z*@m;9j#BMpq?ANys>`PrUcV6EpGos)yk1>?Hd~rji>yeGe0?8AXcm*HVt?cMhyl=8 zIHz_&c17T-GNi#h3_rg zX2e1tX^w={P%n(N)a7n8^nw)@O4zmNHe}&o3&BIpT!-)tIM2}T!Y!D-MlIj_piXBQ zpZt1%*z61DHol5{FJPq1nt}4MQis-y5S9JC!&>Cdr#=OKy3-F!deLPx3ZEi%7rQ>p z*hxW^Gt&g;fIBHJbTH*smRSfsrNsxi(q?SBM%9^?F>}_w{+qTTqQ=WkstQ@f)oo)o z@CzZUF*ApR!yJ-!&{HqU5xqDtE$bIKl>{a0c&&q%pj+RBtXKw5&S7%);YNI5Uu5J; znGRyRfg!7ZUJol)1_M$XBD{1?6f2xg%BB1~%#i}<0$$>11)&@R{}4n?F`(`kU2Y7Q zk_CtM&IIN-gwqr2CN=G1na$jAl-li!$~o1CVK#5Oj=a)fZmZ7KpJ4JZb@BB0)joWd zgYxBW5CpN4C6rjS)x^we8@Jj=YIV4gCWj`zaT#O;Bho28^<;-n(Qp2R$^K1NWr?$0 z!BvL_fl>iId#hn4P`MP&SAety55mQAfqFx(x0%e7I_s(z4z(F(E zv@DBBCz0k!ub?-M?l5^ko6Jz3Ti?>m=LGSLp=R&DLPsFUv_pS8D7qU2i9oWbP!t@9JHfL{maeSj;K(ryR7 z%|A3iT%o}sxA9M?UvLitb=)ocEy*!Z!@0sQ>DN`5TlTr$BfCQRc!l*fTfd+z&Su}! ztbStH#ZD6>WI5}66c1J=e0Kh2B6C0-| znL1)&rqgKmy^JSHR*%~FB%mZCHk);8 z4QA#U;Rm$sBUU4+ec!j#vxPT~HRDvQoAaw`AeM!|W7#+r%MZDTpOCv^8~pU6fz+@4 zH=-IkO~UMN8^e}{itBzJ@&IYb3 zol$jd>vVOAF(@@fEGeV`&Q}C|K z@*}i&Z!+@Paj1n?btca&fQsZFKzSRX(Cxu@aNrgRm0{CP`>+-%U6$~$-YIc7kOFd(`pNjjxI5S4OkBKTyB^`fDpYZNwB|h(IK7 z%E)@{3w6fVl7d_}9@t)XfzZ9;8eH-1=wHWaFOD_4tyUEU)+Q}e{nl?>K`C77rC8k2 zVwCo7<(h+x_KPqKE9SHxS7lN}4|g*wZ(fWfFz~Dr-I} z&vEc7caNuj@;S8bAwlFcC6fHdx$w>t;O{lLt47kzkHpo1f6bq|9KU_RD5Ty=`Em&f zv@3fc&p!xHm#mgJJm%eOuzJ;32;a4@++T9IR%NdLhQrE6a!eKWqrxK1r(U8wH6csJ zHQ^_srtG`*o@%=FKM568TZ?~ELu#m6S4rlq$S(Ge>Z3dEuKCNq$aOyrC5F`Wr@wdl z(7$;;R!>}+owafO{jdbIOIcQSoq1S-XEKD^9LyFSB}ULctl{BMjZ0_+F2p?tG`Qh& zxRc)86u62ZG%Ed_iE>&A$ zM9%haRy;0w9-M7nnRhZ{7wny3hskM`Ua|Z}e_SecxPe>?w2svg=RzO06m{mY@B;T* zDm(M}c^Rvumd{Thn#-XmU3hFX6o zSaL-r8+}<0YTFc9L_~jD=1hqlBOlTqeEqBT^N3e0o5-?i<~rbC0^27iZFV6fW$zvx zA3q{woIcnv0;+2REzb;-Vz>BUhptd^8NdrTlzK4edDKf?y%w34RJO2wJ$UI}#S_#t+MXG4Kxe9C~QebT=AJ&)z#5PmBxfl~U~I zL`yIe$vB41najJgF!Kohso7Z(Jg1SKB30z5%7RwD&yc87b8Ds*``bOkqqL|OQckli zLUvox;;v@}a!8bdc-;=-J48yUJA{r;zQfNx#0axUI|DsJb0EeMx__*>*Mie7(}Y*Gn#5JPj?k}l`P$k91a~u(6tQAJ4S!O6lTYv?#E$Y zAE`X9XugtVwyg2d*kjw-U2d18VJCc{8-@P6`EuW2KeB5W@tY|Bb0(BE1wjGV()&Dy z#15%B_ca4pK_Va316dtliox2==Yk~!a)xZiamI_G8^`^YbC(VR6~7OCFY~_oNhAkt zGcoE8f!bS_yWWGb4uM~Ln4G-wZ1c=@rbC0tzy4M;Jc5A znP@+|!bbIUKd~;*{GXsinR{BDYWigTwqCWT61m7l>Qjl*W|?Su`T{IRPNd}R3e|vc zEkLQ6vlKq`G5v9aAJn$>`)1vlO{woamQL*VI)XJIwt7rTGAqw z90nc1_qaEoD1K+TlxwOtMjm`K*}Lhm@B6cD6=XMX5AH?-^97hJkyF0S+CFZ$q1&)BwVxOg#8p9IW^_-?ru`&_iDR^(igJ zrpJ|IMU4}pczii-(i~-gdO;BIaIBR#=Q=}m8Si#aR(;>dH{*4U;*>aZ+VR!@sjx8c zlQxPTIm0>cdo2t~V+pttd~KF)5O6VA{XcRcSU7Id3j2-p6Jip;dVJH@mGN}bV?SW| z%JRUv`1VoV#Jv0LwP5PZ=JVR2Yt3Q82WQnix#p3H!KWQVxU`_(k3*KooOwNPYka-| zd)|SRY1oGx^_YKEs!D)t(@9a;r?xWps)QaOz?J2ag1XypJjj&#zohwBVR$4EDWladwRMz>DI%b z5wcDgquWCSdzNu)(?F3%X&<7SSVvF14Lk%F-MRyJCCUAz$9nK!(Nz1Ajq+Sz6a{Xx zIX!WRK@-4*YgHczpO8Ze19f!*&F3DWvF_#dk6R)F6qx70?D6UQR1r$UV_WCohD*V~ zF`EHh7H-r&!*0NVGx0io5p9~C&RY5PK0{Wm5pOy&!2d^erkD3th*$AShO?HINnlD_>`>}^s#e9FpJ5g z8Ka@|<^gLnM{J*1aS4FKIqb$;Ni~xRP95^tzLS_+$=B#>+Fv@2)3XY5wEEMBgbo&- zQy})XS^3&p7s+}(v$tO-9$&`nB1at#fG7Q6 zv(|%O-6VTLsZN#joB=pmYCPoR#%nATrU7 z5a1!5F~~XUI9Zx7ERT9pRe!I8>fAO%KM&M)D|2LPaKrc&&G54m=p7-Bp7Z(X zn>c}tj$`{JGYgS1BX8^EL>-2C@WrM+xh6-)NLd5w&lQddQGOvqD(J7H2T$|mYQII1 z0D)%iYS^>1W1;y7)tkHDJTy-441_*8P(O_eQ}lhX$gM=W2}7!F-jH7au9V1`-Vgae zi55E0>fWH(qM1dkfi9u!(;(?;Xs;8D=M215w)mRqmYIe#-tzD`nG51TJBO*I*WTbz zbFD&Xo$;G6x>9`Lcg=U=M69H~`~DbnvU!$q&w-KB22J45EWMTWbFzxH6K6VI6_~Ll zp~QALB*gQjSa~p#nzwpaYd1b4g=MuN+W{TXUgJ@&c^kFE_)PctqgKZh{1>&4_r*@! z?N{5zpB`e8E3w@>qPCSRoY~^<879x_9dHxfX`(WK<#bRXsz5)h=mY+smA$nfQQZs9 zScBO)`U>>kg-EyMl$Ui}Rb>eDPmb&IUvq*_RgVWKEnjbxibI>v%f6%VQqr1Bk@w-( zI3xoMCggq{tR`=TsI4F+9qZx$>2qZSZH3R(79x03sT)R zw9CD{5zR@BIGP|}8dZGcm(u+GkY{36T>G5(fOn?MMBG~0FQPkH$43vWn~1(^_a(J* z&mokLVU&n|5bnI(tM6jiO}|L)@4X{69AW(E(OM2ec;i}Y=J?#v5rM{8^r$0maN7Jd z-f68(k0|z)o4NO>L|`q)_Y}w!(mVq6;gC*|Od*9M=y>;$x9*N8T#J5IUfp{fipOrCJCfbFNZq(?ZUrH*Z0?hrUdI7Iiw<^JMegb*i=4#pbs z;bl>h_pdv=RFQ_AzHgftd6MpGb^0|c&(^-r;<;v(ZF5=JN#2sBTdQ}Jsb{Hor;zVf z*cJ!<*A-V(W7XokvyngOksSHMDxr!#%)tjA6ukq`(Nluq0O5+!8z4{eVgF4l3H;Fm z`MX;^lgq__MGyyELATHPPb#9?Onvf^8`L)Y)m!DlJF-)xcivG6!(s&_o1zWb+rIqT zoC_5$dbb^7$>yk2_znmzLgyogt$4fl*Hx(V_siz+{quVUuJ6NQ^o?dX+BigZ2l`=M~A;M`Z{l2_?=r~-U^!q{d%Z0n#hs~cJjsrrouP^HtqM7sg9VLan5OTyk zxe(2r*X_7x!Tolz_2;gcL2-z`vLsD_Sz6$p?+Oq6#1cL}g~Lt{R&o#7k2`R{3w7Tb z?ik6NLmXBkHn0wjxh)-!3&p)F=zj?vx`o+Z8N5zGwzvB>ecP|-;&bw?`4l4s}d<>C8niY&tLrh(!}vs65P} zxm#>BhdOpZTiu2DL%{a6xJPlQo`6`xTZqLE*l81nM zcKuAl8W=>O9Aj7u8WbrS=Cs8L^QOBH6^OGE)Avd{4BnO_9;7rXbb_o4sZCkCvYjqg zg=idYc+Ji6lj*`A`~96cMMDwQW6Op>DcYExtHfqkl&_)MreSg$uz($_qLrNM0`Nb; zke-6O_)7%9b2rdP?GwBuR;34N*kxA(#2){AA!&myA~NkVMa{)v_DvSjAh44oPk~!> z-ABEQ|CrpsLv37%FH4XYY@KXl5-`rISdF8YC@`v0z+bg@XG8c?1zv$6fR)N$Wt2z1 zcb&ALM7)JP+IqfW2v#9qdO8QVgv?Mfx{e)UK7zb{xCpof&%LUA_2#jg+?a}JZO>Oz z1$;y8gIe*Pr!Xe+r;3G0CgC#9rVvTP55LWP4z65QGP2#Fi?k;FHuJ{kH&pFiDnF|i z_xoPm+=`-7?)Sn1MCG2>hO{2yx0$cb&@Ux*?qR6{!y6(OXK%CiOKK*L6<1B-R{$PE z49$l^oSKHzOTM2o@AJa-TqKwM)!aDMEUtpHYO)NEvucr?yR;@nk+?X@}w9tW5O=RocA7Mh?W`I^1cIt!mKj6k zHb9r{rU(Z>EFWfudp!%ktIq{7om~8Zb(CCWJ^ryAky{UB!KXaob?kI?U7o1{s&5Ec zkG?BsS5u;drYs-(v-fcMwMX8&1g>1z%~Y3L#CG$3vly0hb=oq?y!=9Ec;(*Za-~k2 zn!U@)*JHN9jcH>vgK{y3WaypThZal3cJB@O45UDDori+UtY>Zg|9Bxol~iM&8K4Ss z=+-Sq?W@RAISlTORK~v8DMSMxCap6s*h6@M+d?FrJyv6$q}D&?xaF!SIbJyIe_h4r z)e+vQmIyLGra|9nDzj3b+oRCehGgt&eZ3eE>S7x4Q>wcST75BA_@{yGRdjrXP2fFZ z7pvP8C;R7kQ{l#PtKnkG?%^4vKn`gd>-+_TC8S>8^aTv=BnZSA4Emk?yUgxZy0Dn< z@ugP?aWeAj*_*x{S=Xg}QC?L@X-9#`FB#WyBnw0qNtuUxCl3{_?pVmE);?UB?EqbO_K_T7#^d8!hrw5`MNZ4n@15GV zC#G_)mA!|Sp9ufE!%fy+QbdmmyMZ5(j9eUIVyT-ubyi-@v(Rf3;gc$wP9&5PS%x3Q zVU;iGZBYrJ4TDaiY7v<>8JZOCY`H+Hi#lf`lcK~lj(U@8#*!pEXqJ=G-MK>?6D)%x zS+#z6)^Zr9#6&K?7`Rwrv7Ul5nf|s8{{;91!xifWR?5~E_gHvEDGs)N-eX-JT+=gV z`_;T2=rZz&{=xWl-1x(t-2&~?Ja<@P314PUS>d{n*FVQg z@v?1(r}B$c3cKD>T!wn%vobQMv%DZlzVZCLC1Nf&0Wn6MDaaKe-c#;9>PN2+_!6)l zW6f3!M>)IVY2odN)yV^@7B1xz^#{k)C%LPPeYFI2F&&EA$~9pfO3lg}rGPcNq0z_F zBcwcHRbwI0xWO~f0-h{Yn*>#T%;h(96=gbC2Q*%TKI)!N0lz-hF&D*`0=CeEfPUPy zx!w*LH@7kUN5JbM;$@!6W?AYDEcHF@w9PeMl9~}ZM^lHxC>94L}glRfq=tsyfO(z@OYRkLqOP?x=S$t$sigr*N-F=3lxU$dzNB|XZ zp9F@p)ffj8TZqWP`lVNSG2j)zU_i&sc>kNE}wda{f#8S5^VB&UwqT!(Q8)%bIPk_%Ky zgTf#@S(1PZ(WmEu6kKlYe|qiJTtP zPCYC0gb_8A6XXr9tA4TOV-KZ8=xUES2H1{`G36)u^xOHlt z)B_q3c(BjrVub^&H22I2=Nr?lEbBI>&@I7vl_lD0fYuMR5KS3=2gxw-D7 zJMg~H3&36gZU_G2Dw|{LLC1o@%9R2MBxSg<>b1Dj02R2o&G!>hViudgUKd>Z)1UbC zz4q+}%JPb72bVWL&R@BcW34BUoo5q~mvuu&M#X3@U+T4#v4q-Oy7Qs7+{VqzXy#_!sq6$*8JFmz94|vS5a-PBk$(dH+oBcSs0!$ z%>0awim?M5fsF#6$DpZ6;BmkyyYf4E@M|R56r}Vy>{>KNkZWtKwml>e4=>LXEf;?h zSyq6TeXd!Nze>tBQM@WHc%sDfXbRC>vFuLAqoGst`#Rn!Hj3&Dikm~T9e!ft6Zlo# zchw%|t4}>rkdo_-cS|qh zofX7^fvCqa!(Kh~z!}L5SxJq-B{gp z&&&aCD%!*w3io^;c<=-saZ78nV2&wN(&?)Sad}!xK5_z|b9;>m;dr2{vBUcZT3S# zEXl(1iu&LdG~r06>A&K?R0;5k|KRnRR}w%@)NXK#9cSLj$NMI()nu^~`0x*YytzJ_ zXwkWol0Ubgv6o{7#88+kqnDCnNg9?~3L>2oJf-Nr8XU(aMQB10uFd~i!1F^uhzV~$ zkAE!yjTP;D^iNf!CiG9`t;DOGsE4TdKhwS$$(`eXf3?dM?EBoqAPTweB#Y&&vzd?Qtv@4QD_@aQ z2MEqZsU1sJ_S%!`KfiEP48^VPxb(L^wK`LDKQp|q%0aFTZy#_qq=>Bh>+gvR(88ry zaj-DC{!ksj_mOjM`z8}s ztUKTj?L7~Kz9jpfAy3`@XnFvwvU5l_|JYZ&2@6!1+_8BF)MEj|}ZIC}joY&?Et z005l&);Xbgb?VmoNdh07tNZlXmpKy9>_k(XAzPRJL6A?FGjRh$Y81rt4T#L@=mmVu zn}ZfDbb4sEVnU`Hqho3LDdH-IKevoV0%Z@KAn8l$yyaOXU<2Lm+N`6;!8={ap)2>N zxhk4vI`HXkR~1JPr!jEfLgg%^B2fGU$#+={GgQfeRFDOv0JDG|EsFC<3`t{2EdL1v zaTynH2ERcgx?|AKxQ^`?KVr~Au`cTCfLV~P>wN-iIBaW-BP<=SqCQ3#s3Qb{WSyg9e6rZpy~( zSg*b%rv<-+Objxg6G|P`?1OjhD#Y4(6E3)<-@GYRVyE$dS`VpHa)7i1JnrDq;@@+k z-~a*FW3^y5u-T(rAS;H-dOmfI*BB+6=Sl~+I5;O+{uxoIzzI_HjMi7!-y=#e%pR|G zqGvQWYIZH5)n;icO6?0B_z+OCSg7cyhf}4I`o4RkiLP5 zA&BFKXz|DxuD^jX`aDXU^D_eYAA^YLuxaONQC>djQeNZ$S-=9>Nw;HA7@;6NM#ZYk z6r%q9_(i?4GKVAM3bsG0(&EPK|S}lHVQ{xc7vcqB}c#ohbsU>AMpJ z+jz63Eu>3I-BM#-X=kLKXiNNfjCT!uM1G7ZBFbt~ceMa{s|-)cHnyePIgJV$0Ti3( z+I9$DWAvdMIWjVZ|C}64MeXl{w&%g43BmjO#JwJIdC}2d#8OY9)tq9ZUEA7Ednjv` z**zLwPl}}q@byPNapYd-! z{vNMKm@6ZGM*Dl@y-KAeQV(l&eJMRfxcOcqJoN=xyr;M|GVDMSeybH4xuYPK+n@@X zHEt)d&-TfC?X{s_(ZL7s&cFIz3Ely$?FzmQ%V_V*y&T51Z~CHp2I?j*3Q(|97y056 zP(U@Do_@i(Wl$OPnr?7#0Pm@<>%7#n{3CrtV}gNARIpQfXKKvYzJU4?^i?$d4Hdo5 z8<|ni|M~uSE((b%4$``J?gWPyLF%Dyr=|F@)rAHuMXTS!O=dQ8FK9{6gLO3?OM=ao zIO15I5)udwM=l1Zv7{NVI&QtwfSM3&d$kw1gs^lqh)^U?^(6P5?TgtdFIs+6l7_%F zU|Ap^k1yOCAcPMFzgd|5N%vkpI+~FEDO+b~3vw@bM^eK8PiYGJ^4MPt-YV?T7qXJN z!n8sr)?T?+#IuU>k{1P))@mva{MYa_z`gSezaZ1j+rK{dh_yRed-=!XzkfOkzt?Kb zctjI48Z@H5*qx4h=nWF?TgDU@&^IKM&`yi6irZ!y!a295zu%VE@ISd29zLJ)KrcId z`5OJWjCIA^XNLxUa}wxwH5y<+a-M=yzvjT@2hAUm%fC3<>a;86kzoSghkHX74DxSR zKlYdMgJ(vVW*B++CZW&gIus&5zEY`n;Q97n^;}l{4{p+m>ba%?mGN^)_#Kzchy7Wl zWYl927toYFM$@dBJU@;S3VfJBUe+8aF11u^P(37Y9`?vRQx|^38A$F`2=1S;kj^z` z<@a3IxWd<(^C-dbY0AJ0if6pxc{|7|60}~#{wY?|Ya0bUmg?x1vdHpZv=5dcOr{h2 zBrWn$LmZ~#9(ds?^U(;UBi+Kf)`Kjoc)vnfSwQk zRP*o`=Lu`vKld6>J=N#p4a5(mxAdPa{Sm^tl`!pQUrHytr9M96sWi~{>$Yt#5hKpf6C*7)TMkMAqJ*T8(&tJ z#a-=|EoweFY(^4#?U1fpB;M>J+6+w*jg4g{OVk)KFn|7jd;;NUclGg1IU97B4|zmL zttwA&b(hoEIX6>!v_P*8G9;&QH-oH@)IorpkoaBszQ~oij*7eT{gswm7v|^hMtaDB z1p`;VVLkd!{H^P7z3XX-O#a)}fxnrfp)pjPKs0r_;->u)DX5d${LI+|OIi$zZ+ zt+H#mAJJ#G-K5DczcD>lwAT>{@Ki9bFn**QOo*EGv6AoeZ`S0Q@K+=u-yu?8cg}Md z?>rXGku3QQX4Tu}`Vj1avX*xw4A+C5z~;0KKId+VvF8$3*-=$1aMXucG{2e1hyL)% z-j=5nvl?+JuCgxT+lq|`I_C=PGV@@*N9~iPFF6U>H>Q-FLai?f0nWzr| z!1MN;o_k+1REwAnXUbtqeO~?B6E{=s8c|6B2RC1_R!rvOzJw|Uie$>`qoOlfj%^1Y zBGbLhdff#&<{+QT7Y$G0ud&Q(6R8Ilp2I30{&J2-$imJ!jr2_VrrIQgHN2u3vvkS5 zUIL|5qxg1u)Z^k^V=hucnr&0tu$1PW>S-!c6YF8zdNsiU&#=#`S>I@hDQ^rtpQwtT zAIniXhwz3zXVo`eT#qA$8{Aspj9sf$BrmLSGGYHYzWmKs#^S4l8jxK^`O3aU|IO^X zSSG{2(WUxL%Bx?$I}3i9s3(H+eP6$=Hk<87a+Dqa4vW__dt~m|YWmoBPlf}&UTze( zM?6y3$#H=k?VzSUW4_V4UQRJ#QDf|X#{C?KJ0SD6LtZj=hjy{Tw9GTwLa1x(66mJ8 z3FEtx^Uvm&feZutrmZ)bctH+C;qjc=I^o@;g14h$eX|57VF}mYi$6HAY3w@W-HA7t zm)n4wEZ<~>FO1n-YBJ z3n*LJfgS=RZf`X3d3yUZgYvt$p6-JpvYcX5Ltp+}jAszcf`DttmEh;sop>#G3|76o z^oppiQ~A`oa_1*CUCh49>l{$bo-E(UID;KrgX~`ufadU`L91l6Wfzu%g?(UL&@dj_8?RAwFtVfyr4zO`boDL*_u~qQVDK^9=iW*Nz8QVDS+lmWo9EB!ZxgOhpXYS7~Hi*`=>cF7lT(B+u335I+eXY_Lrdh>ba`ipEdBlH5Xsc>@70} za?Csleu1o`=2R}=wR0&nyp-onnm^d4R8KFhQCe<-arVSUTWTHqJOy_#_@InVJ@RaX zsAJ+DZG7JtCGk1y-Qr%q@QJ!0)t79iZ*h-*+U*fV1C*P5kT$AraSo54v_+}-tIC#3 zP`Vu%%&A*MP4LOY)M}Li9B<^FD9rdTvDiL!P~?%ps6t~80A8CBCRst6JTi=OGjo{Y z{)d*WpO>@$sk67M{o4l`4FcUOBmDa?x(0g(0%6NcJ{RAxX_yWmZ}`V%bm(e;i|RIo z@hFeSi6AmTzjqRLYyd<5Djm_;UmZ4cC`yRg*)>W1YpH0bcuR7qZbiZ$wQ5PzCwB_dm)Y~8NKw|(|3C# z4yPcj;YhuJgZXfyn>oH(rZj__+}!YAYw=Q65c$ooT1O01busoo>E6?#ie$kE{X|5= zTU}ssi`SCDs~uoF@PUqQLq+x4cc&tqd- z-GvuN--Mm&IO3_PTpj(^WbQ@&(|oC<+r1v*t&b(&ZuVDX@O?V7CgWZCt=8|yHx$O6 z*yf5*{ubIo+o5w{c;En-Y=9BV)!MAX&Bommbv!QvE}qk@;1P4QMLN;L^<>l!zNuDvQiXOLxY!74GTKV$H>nQjZK zuba#ty%USAEds1+zvFj~c&k9K~QkhcP1{E5@Y%Ac~ zbl=yzr{{y|3r2$Wx{Kv!(9Jf!{y6gmmS6dU+z!UcD6K_>yNIz#wQd(uwrSWINejbMb%-ZSbi~G3*B}F}qeOEo%@K zV2sbMJJ8MH7;u#Bf!%I58CR8$Y#*rN{PrzLlRw5Rw?DL~dwsLS-8ffu@qn`Uw))#0 z=4{dExy3K2w%TLX=JdO7+n`LZ-)RkRS(bQ?J<_F+CH!ZKA?JgYCdtwPP=247;zib) z_)o%=wEsHNRw_LA`tHxkXWhCNQfIH;m`bLMzK6Ns^Cwl);BrmXq~{yk_^%SJ*`49| zGyN^^MVA+D`M-NV!E_m>4r|%!S9N;XjIMp{14Dj~Zwr=8{tY!{Uh;qae&UQPpfD0~ zWzx(y`)gkXa%sn{)?-S-OCVicv1|!P8{%2m8|~ZOwujAX+b@uk#Wt#JJ>-20St)za zd7q_s3$-XKvGN?!`)UKcM0s7D5{78%dsan8UlnLf4DRtNzunXGO-LOr){T`d{4A!l z&`aul2mhIj$3Q=ByPQ%&+prUE!HetnZL6l~`{ANK+CMOU2(4fDK<3{@xhK+jCqOclG&cXs9ZZkP2=F&<90D|C0s<&qQ%d(IWN zsH9ONfQMgd)g;-~6yE9M@HTlv?cvlXKZ<8rz2U?P=F!HdGX+4mx`507)Y12nIM00U zNrSj|ds=w1yN_MU6-HLc@Bfi1=1oz(Cw_H!#ic0I;2(DfZWX}q&+_nbGD|j@lZ;(2 zG39o8C*J!frxb~?#fwM(N68Rzo=l(lr*&!kr`0PG<>ffN^Pqq}kIDBpa*}cN#iDFc zWDc-%1rt%uK34!-&{A&a$;#*dNA-X7zZpA(Alu*l$H`-&!-zdZ1nbBoGtKOp^*LV( z=vBRI*%123WKoqVSI!IDDay{y>lgLpDVG1oFv#bBYRp0s$7;|%MTenrx8>-zc$$ca z7(4qL^pO_@^krF9lVP^4PyiRIQ+>!Q;G3k2`@d{we;&1AbwlWcN!I8vVj$FjbHShO z;}&H-yk;lP&i+bua-)FWX4ZDD;4dhv+}ip2G1C@-+jg#n3U= zZyj5)$?TN!uMM7%aj(xy;iAiwHd6j$o>3OuJ@1P6q70t!LKG=ysn_H@RSF!?+!*yY zWrp<2yN4-Gr1pKRC?Sb%XlQ1=e|&HvYevJQ<#14Pnx_vRP`eW|_O`Gub7Y6q>*?Df z1F9h4;b@EOof0*UM8B;27(s^vTb0fifb2R%~CBFP7 z+oKj=aMR*r+wU{=Z3~8zt^YCGCZCS`c013Koi|=>b}|i9$4q+4uHXHz{lbjd(#7+X z(^J^@)bD6%V&AB>p?56?H&XnyZMLE^bB5qsgHWFo@!EMJaBP0}pna*bX;ki*bx&Do zCBfT*Z=L2_`ouk!rPl~e2%D=hW%5nB+jm)Iq|W*cuX2uZt;4Ufw;fY*jDQ=(5? zzHhu_E66vfj&6cyy~GKkj(fA2hDx!QV2dLvq%vlaZ^UO?-1FRZg;cnMEV-W6Zh=;rX22ihZE z?BMDq|F)k4{z5%GrXNrX{Ng0-zN@zpoEilfs(1;x)%}}yA90CkwPr5AR%3%V%r4g) z^G1N9{_x^TrkXMj`Lk2cai0MuJ)(CN7N5yP)!hs2+`IS*e0$POHUf6>({7@|*uumG z+IZt#i`PmxTC%MgsbI`0YW^h9%g^*(Wm{bNQVUj>yjPT|JPa(hW6=OIumHEU)+`lZur*6G5+k@` zl{*7*X6j&xyA4(wJCiPsHionMML~TFOMXiqu-szi<;u_4E}P&54knX^w+^r0^-iU? z;Lnf>Huc)`N}JIIdO^iyBJZRONiy#j;sq+o^J&HZ0gLmxwt29Q3-kJ!bbd zTq3FvI2TpujK|-&4xeydB|NCazYYPTjtmOChSgpM%;2v@El`7pXN%Y@{ARfJJaKh- z!`~hx1wWQOgnSK){==c>0yAMH-mM?H5@u()4ax72RJyc1&Qt1UKseMp$@aj86m%M!cr9(t^Kg6VKpM7C<1h-L*J02 zf61=MHwg$rsyVwg>tITzm)9AMJ|plqA^l6GI0qXp+d1ID$7-9Nsyq~EsH=UV^LNuW z1Nt(E2DKvcl~g-3zj70-Ia`XvPgPKnvj;j`h2Y1@l>*^W zMT=NA5Vw1!%eOh_Q!inCBMLiPw75L4wZ=ztPu>u{qA^~S;Lf76gS>)wjsv~ ze<>>u7{aYT(4FbQt5L&eH!#$wC$zDOWygUJlfZC46Q~P+cwQTC2)B}d#}&9-!)aZ- z6_c*OJicw-ZT2ah8sx_;be>Y}^=@;?#0J9i5a8wjxwe6EIiyf=%>nv>Tss{u%LI-3 zfXT>)aq_fBi120?OvW-{Uo&USWAd>lXq-yb5!}8q2ni^enql%S0ei^jRIxOj9QgTl zMri+Mn96#hv`bYB@0zue=6baly$)yf>u}*L}f3@y=UInfEm^R(+cf z1ECXD+&;!pA+8rxKsE>EqHzzXIz|XTu?APV_VAG;Me75iYd>W6Du=n#oBet)7;goO+ndOma6@PAIzq+2ouY)|TUIx$&eTs{-f% z|G0BvM8^f?oEt!j`f)4c;>ShXd#yu*Ei$S51az<|z)zhmMx5+yvt^=jFfP5O4iwDZ zHk)!mW}y(!<)rOZ0>!g5ZdT#hVxOHu zXS9vI&cT&lHngFQi4F%cf!QNEk|f|=P7~eJe}%uM?J_i&^Z5_v2Skjyz}JCAzLN|W zceiM7&MVgG0%p%z1{***(8It|0anvCg;3qh7GJy<7ts@^&fNjNXB_)EAh$*{Z!W`& z9IUr+L)n6K`_b+DsQS=0!=2FCph=Xm3$l;E-(TKPT#jtv!x9(%E(>5fI;qCEEbYev z8Pubd2vqI|qKnUW`0C^NKrvit`@W5tJ&C2t5&*|xgefn$p?z+HEH*Zme-1922Y3_F z3?al7cWG3J_xBfEYoaqdk8}fx?LWeXkp+xkObI~Dz0SDe%5R)5shz7Lk}uT^sURZg zj4wENol$_*hA)iN)p}13qA6sB||N zrnM=!8@S8bgQqZb(_m5_@99?~x7%yF78aIA1-RiO1h{@b#=+=X%R!Xg%r_jqYxBt) z?$04G&{_7tlAz?<|1KcTr?Cs(zrx5x`oYjP~9D9}iTH^To zDXI6XdfFu*M}7*;GBm31XVKE~JpVH8)=cgmFrNh2AGXKd1#W# zd?bn)zEaV@N(sX6TC8D2s|SrV(n&LE)ZmtD6TgCD{BG(Mx}u*~5MK}Qr@=;l{s>{{ zuE_H9xz9-P!KHL2LXA!^wa4)>j{a}B8^&(1WO|t9NHnP!u6qd?H*mWN=%eiA1{bQW zAu43=axud!_67 zZ7-1{3=pJ1=3_KZ2D{#9lR~kv>j~ndu=)ux35~g$j$BKU zxTZXyBUI)Ne3Pz~gHoFX&XJ7vNO6!d+muphMvx;tJHfMpfT_$z2(2x#9V3?`7<%8k za5y_?u9hdaoEJ2iN(}8bd%47YT+g_*jGrqA-XQ>?ZOunvD}-c5;~wpqg$X-Aot(;` zdJ;8GX(DN!J1tFAP9I%!tiikOEPZl77jNrGpn|o^xdn9X<#&l>e`}iORFszn+ntk( zl)@)RKKE&G6rt>ywpDSKNqj3z3$*zF(jBr1@$o3-Hz+LFBjU0@=Bc{6Tln|AM!Bvna(&L~iO(G7IY41NK1o9f4`@ z9IX{=vthYAo;#5eWKJ1Wfc0TF@CnZcIv;x?p7iqI0O;(ha=hnR@*Z@GufH}b-JE-_ zb7-e1u!H@VW&-B=Yth|u`Ii}O z7Ckn5`$&dsB!^E6t3=+@OCY~OyDtI=g*i&wjKuA%rOl0urxQi}x#ZC*Iz8`d^XUvhYKa()#P*atR5p$3)??B!Q8 zvz3a~oM{TO59(QIwOt=69*@z^M#5=uS?&xCo*hM^`h^ASdWy#}c8);-%te`Zvlob~ z^#xEW^M{T!_XV5vk@9`c@F&m>L@{ya>Ye$30%g3tar*qk)NauKFkrvWdjF zvAGv>6CfxE_*>*h-;`DLz5e_kU^qZpr<#+N9wHyQXBkxB9F00LzFJx3tcgC^8@3wt zs6LScZ=-P0-nBc_c4aRib|Hbfa657?9uaxr4iXQtdB*-L4ouIVNu3_5@{_R(XH-9d})w zhIS9l;|$9^b8EfHyZsUuR%3l8j3B5tyFVc(Ajr}xCkm~VvXgwRDG-oPq%!z>gvX{9 z!_^nfP9Ex64$ezjD_Y`%Jr)4Y!YA!S$8FG0IYgYl(^&7H@0r`kMi7>|9PuZ<7$J_I zvD9mu*(oiYHAodlnLPnpS637|lBi*n^FXIDj7{!!6hrq=^W^Il!VdB?KqfV#}!Lka}OwuNHIj zQVAunCbQ4Vy|8MG;%x!ogui~Af{G=rJ&%NkX@Zj zW3u`s=R?1HrJ-_>x#p3c!}x{nsldgFt6_%F#?RLgcPZv>6YCEdmPMEl#M;L&R3Ezpv-*WhC%T=Ib#T zr%S8X%|&iE-x-d1TXAsJKJEYT>z0UV^OfP4bd{u#xgK$!t87VYc*BJ#i|T(EuDjr* zI9zxB|8O%+;6By z+Rik58FHit7;lmAK65G2<@j1hQ6kTO#MuzXQ~gE9pZIy*INB@LG2VLYP*pfT+2!=7 z0gvPEO3nQtyGB(O*;4DE_H#tz&*rTekF=AxzwQX6qjdi0pKdaGX;lOfO4t@D78ydDYwErm~-GFmCQ|m3xS0yUx1J*-D|FEu7#uTA?-(U5uQ-MamebwGn z@h2Q9_&Td`yNJuYL_QX{ekSnZpTGi9#q&m*_MOb5>tXVq3Kso;saEd#@v8M!?m3<6 zyT((;YwZrLAztqGT#ItgLy3AJ{pYiKO{UCEPtjEiU2d&wz2sis(yl+vdK+Rg%-i!c%6n)4+7@z2J978CZKuiK(CyUiK7K1p)sd1 zC*pNu^tXX$>rV4a9flpSj_8in4%v>;4oo~!5H0sm$mVo(wJ0+t;_ThFl>_3|$K_@% zk{Z7y2U)VdjH)~|h^=b)5?*E2wM7;w*xF?%tDDZToy->5{q9D&b|J}k7xxnGE=I`c z*U@~2cXs6_7ga+;`4+i&z1i0Td=pj#H(JrQ%-%if!{Qv;y+eyn9A5wGwegd6|Bk4B`C$}&Bl6+% znr*Q?)%oLJ9m;D3IpKAtm-u}efr33*gka#B-*(m<_I<%ue9WFeNc#3mj`wY4GL|E` zUfrfQL4~O7y)PEmKULmMy=zw@> z0WrWGzje*X_a*~$h*BTyocri9Y!$WBUI~GaEzjxs)t|3Z*Rg5J-g%d(#_j6=od?F)YDJf zax~DBPunM}c7Eukb9+>#?oR|vjU%^C9eJy?Vz#yo_G|Am6iZ7;~Px zdq+208Kd|>Bp9A+XC!N6we9%~lOKY9%ldTjEUfTNBy;q~{Snn;45gKtywoc0^;MHY zXD1or<`NWunH3Qr$=_(JQ6+M}ZZ`x;(N{e1Vt(Cfj) zsTHD1C;TNtXN|Vseg9ag`pur~jcLsOrAVg#1z)H732b~@?3u%8cAHKjxyk-=`_<$- zTJt*8!Y}m2D241w+ACduGE8W$)mis!kd?~cCzecq|ozAdfFxXtZgT!_=t8MS00QK|F~O08sIyZ7QW zcmL8KOk|YsB_vG69kq$de*Yivv+*zzra%i1&vJCf6Icw}FWuCDnnvqyCOSIZi1fCL zf7EL6e!$ur-8l)4s6elmL9Z4QOy1pZN;!L}P0G_xW!2y1IoJBq#YJ37eh_=oyfvP} zOt3oz+>~wlY3n&F+a6QxD%RVq=hPL#I1<|hY=7SgOj$>Es|Kl9+b6N~M%4F>A1QW$ zJR1U>v328ZhH{rLKXp*;kLu6!f=Hpsl2be1_&WWMZ>Jh_)VhI(=v~s>&2F^*HYtVG zBFl}S+P%ftsF>=9+bT|B8$&x2Be!eH8z$#{#8OjiAIzE+ej5*e)wF^+Cj*}<;ElMVrt-a(p_&_a=#&>;z5eDA&Az5nOQW^;DW&Y79t%$(h4Pi7c?_HJ*j zQ>c#U?w2p6^$qTn+vy_DIb+5u@gLzdWA5T_4iFz%y%&Io;lk6lKR-kUF{-!Kep8Tb z&m!?>K^2#t8C_TEFGXMKYc_8`lIGl|j73PKBU&L1j4tpBjjK`S?LdB3M@3;1*NFa; zxRM2cyD8EiS|Mk!)liDQgwTZJ!-PR9|A;ATMF0G=QjxPZ-zifF+M9po)nTSB^-=O@ z~atr!%R&)4^cOHXN>SzB`lL4EPHxfU;7fnI+MHeAT$mTH1d=XWRgvgU?v)f0$+GHJU+Y8L=cKy#OOTmstKZUvs~QNi zw=UK~Ov(0*x}JB-MPq+jfi_$Cbbc8Xf+PHxe!Cfrk#KqX32gY5#le=$M5nD#2O-L*6WaFtwN&OzUu-ZW4C-_M$v&uWMIQc9eizpfX3(t3KpUl+*m z`zp5YAnDG$Nig{K*%cxs9pgRp;5f8IW2EIqQf^=(--TQAsBUGgOW5#%c}-db3wl%) zH#g?02BQwAIhGyUR7P|Lh^9_g`xUPd4xHhRX&xv^Yw9LJ5ZszGjq-#IQC%T|R@Vp+Btl;Nb8_H{_eeUA1~3uo}sXV-lw<-zMDKkqo9}075J*^0&zkI#xo-6&VjB2zR6{} z!C)o6T4m(L$gnQ`*$S1^+1Cd9@NJquQV`Flkd;RDbK!#+$Y|zH{{U4{xJ&l%z+1$j zFU|0!jkO(Q`0}x}UBs}+m1(U9qfhM9_`&&ys=%m#S2e4cDUnU1GE+NG-f|g(NJYX^ zs9DoK%rM3EXvYRzYIFUj%*WcscWxP3i90jZz!%z4U`*lx3f}UFy02E7%8H zc6O)08yh>VHZxp>LFmhj*XWuRO&atd@sSZcthDt&DE7KrsQ5MCo^{Xu$FZI}Mv~nl zy(kO?sR-Odf)^bY{etulQ;h_^I^fLf2PsXw?Z#!jFK%a9A!VO`GhK51shaYAz;{Z_ z3>$KySj7I|P7jV9wU5s&fLOApmD9hPeT6i`hDE{H=LGkn+lb1D+&Zj&?G)NcAh#ZS z=OuWT$-E5HoH^4vnJyCS^Z3><0zjUZHF)q}tk$2H;qK)e-OK=*|0%}^12+ZN&ASVQ zaz|&Z!TeW(Z^|B6+O?f9XSk~WvYuz4HJES@Xx}52lczJ_}&_xZl~@7vhq zdPN+kgy8SngReD|s`~_&cq+~HuUeQqb7cqP8J!zX6rBthfu{1`57|xn8TUZ_dHhfcG?{{1PWe zM&Y9|tr^bHyfzke6919!0bH$u`yDJaLiadgbe7h5fGJl~sKzd|gFkn(h!TqUuD_6a zkQ<_U_~Tn*V@jCZ{T|%j8Kyn0=X?Ik07}*!kHfkL(d8X%hds|YMbXVmooKp61VT>F z&OBS+*Aci{rx2C_YlyGa`+3oZ_oOT3?;JZivKxUf_posXkw8(sfk7Pyd3m?w@dIwv2RA8W1w{HqZ@*2L7P@vKE%ol@54vBTnN%>c3oW}aj z#?p3-D4xgS;(R;CSj^F}LY@U3Qn< z^U1Tbuth3Z6DhW_`}PbwxeKdSGk{Si4Pa6FXBYcEFr_W`#HyVU&G(|*M}x( z2fS~zBX!waYfkf=I?9H+#{=hAdi9M`6@Y7&7ak$gu0PBshy~O|2R9p8Fxb z!|IZ~RtdAU173DkLdP`cP#jZ5!MUBbz3fZ{k9p@W9-ENwc2}MZsmi9vr3Q zSOmAvp_p8`(51D78DU}i?Y0$=xUUA)oL8QIX9#AbM|?ZSrR|vcEYf$0Ep$T|ms`R% z8lLnn*VXi}mTcQC9moGClwr>-HRM+T*U2OE)KmPUUJD)K7XRi)7XD3JlKmOJ80Sz8 zvi^YNZk#q%SECyEA*mMlbABb=$u=~V`Qldr^l|&A(o6|YcFw|smH?x0L4n2h8M|qnY z+%WgfZaLGs01$0o> zf{!BQVVqYA#S?PttSF`Ew90mK`qsTAIV#uHHd4xnitCOxbZ%qXalb&=N1+!_!O+E2 zz3up`0Wp=_mKG)<`JJ2cTH9vlY*()>v}%0w7Dj=$ZX?%&tYReppzU18ASc;$Xs z@2?+4ooal})5yEz4p&^3I*`C^%+@xU*}x1OBb@xh9-VB5HEpEr(XXT(fx37$%?s7` z1IxOW4$wmJVHI@9v{Bm69Ozc?!bTw`aDjnC@alaX(!p& z^cJ4}TVPoD;7zE^dZU)tavLyy0etM$cX<}0NO20S!tbV{E)oO2bv5=!=OR0>w^xzM zKu_da*l0A7fU1$ub8tC@*W)1X$`^aaaI)v5cS89x`gY28DBA>D~q(!gJo)5$%(Z4D8 z?c?@&mOY>4u({4NAVf5g0ope1(j0Tpvcn?$xxJv-&#)x>PCXVaFbkHS>-K{j^{;ZA zr;|R3F`W%Gm0fRAXTB^L;29Mx;XvCs);1ze#pcSOKC%(*7VP|krJXY6qz0cC|EQEQ zZj#%R{N|Yuz5)&4w_B%H$!8XV6-WAIoBB->yPLl@*BTscb(C8zio?LqKgf7C+AcnM zdn8GLEc~2%qxksl58=W7Xz*O0V5e|pAikD%+n^do;peEgBjVG***x!9ig4EBq%OPW zuS_#jk8NCa?!X%)Eus9sg&9tgA0w4M#~}Tac=sD<9)m|Me|JjlgyWz;pPWl~T4|l? zs7WUsVZZCZSaB~bnyGh&9~9eU=fy`@m!mJ-+qQ~7y+D5)_p=>rE~67A)9Dn`mrWVW z#VAVZWS8rQ+cplBRJ~FQqy#_DGLx`j6l z@ax;tvJ--XPTE=w;S5MYZPq56yh=z-ShjIJLVWX}usA&JZr_)~6We2hAvERj=7aB~ z+nxfJ)AP?fbSyePOdRmG4GH!a^=4lPG-bpe`sUrJi+R(3CRAfs`EixQr8m(+LHf<6 zU%&@vrt=z&nkA77#;+aiw?-}b@X4cki$UvG#E{BI)w+c^Y*dck`pgljx{gY{PRh)U zYz~8)TiK$0mS0^{sIFwQIpPHd&N6XZv-=e)0dZ}Q#}@skKy{wNLPifWFm*-hnee3b zYW@iI^|e!S@5Hn~vY%J)j|0;&jN2|){s>UoLDHPrz~*&e*}}IVA-n6h&sH%ZhXV{K zu8FU2rR;8_pfwWwikr_9ujx>ht8!@wgLd5oU34<;MCQ7z76mP_dH3=tp1~VDgbg1V znaO5wVYd)(G`>(aTmph<_e@0MayOsroi$_!4Er|Kqb|}n|ETWH-bV-=6hA+NK5tK| z9Q+6@=?pEolNdHyPqrqC=$=8c_lwVLhGn;oOi6z9SuF3CNikZNspt;M+8m;wopQ9% zv`IEv-vB{_QZr!!1i0fji<@~5CvrA>*So)@$O31>2 z(2)>4D-&@)vm$3AjueF{u`x))*h;%ejtaJn-4Z<#uDZb;+OR)uuNbaW1W#D?*J$43 z{djvq(c&x5qRpUay1v_^hLj0gebj_TGdX>PlLN`BCdrZKHwB}{IW%nzTpeQ}`I!g% zL_0#SAz_&}b6)QpD7<^;7grc3@TylPFEQ;*V_UX3pU;N+6-Xk$D7b{@8g7h} zHo_p(FQ2CGZ+1N`OnTVNaL&A#wy&r?Q*7<$WdJZ>#lP&ZU{3O@?!?Sb3dc=~1v`6s z>$s~m$7Fg0HOwwk@Y>R*?4&(WBvHtqf8Yz45hGDU{u z9kah;f8}OgL^kLhu3Ik9l(?!_bPT3fv!V1YA5m_%?DSdu>f?Q-v$!7C;&Ykyww^soq~79wFWYfxOx7yp@6azugh)rux&~EBA7}sk9a!T=#P1ve)(a z2YoY~L|_P@VOVe;W9k|A+S|8Gm8s3We*~b-A*m-CtFNZ+S8!U^wKvQspRGNxUcwva zW6za?7PIC9{<-EaR%Jl(DlrsjBG8i2Ls6sEfB24Dl6{;&rR8dKw9NZ;w^!Tzfy`)z z89g$rdIsYS^o@+ro9i4If@*nMHjTHJLOiQxd$%`fDv*6=4xP{4C{WhOoD+XX;cY}* zcqI>_ct*6EiyIentVw+t?j};+8y$Ql>W$@}w8UosUS(cVQfoOjb8gwKYrYp}Ynu7F zj(f@C9{Hup(@MFW;KI$dcsT6jq)g5Yz%yf68JTzHcDpDddAcphL#s1<*M=1i9ToX4 zI^CJ_=SaK>F}vFwGqGsSbdalKV^KH!J-4w&XyH@{RUy;td0WY>j&ZwQ7<17#ne`&5 z(z5zHrP1uXMt7&rwfQa4N?QGS4W8C^)U>=RllO>ZhQ)$W9;Bn0fOOH@5EkTX9*MtVWvH!vJ|g@K?C)>%A7gJ%*WAbaOy3g$Hfc%=TU z!p^e+Fo+!w7%D*9x5nRSB0Bl1s`z}_Kx|j=js$+9?m0=3(ffhDwd7e+cS?>tNg4C< zC|+qdcynQ9b%E8lb*?+j3ZeyDUCooO%I4qR)KVP5rhF6r6o#)c;!1~rT8tptmeb>r z7;IK!!Y*84_lDiW8&H0;H3ZE^<^{DM7xpn26CrqI+J%7Pgjy&oT6h(k%3&O1J$8AL zFjTplPV(YimARF~^UfV#-M5>l8ca&JkL^w41s<8K-MMM6o${Xo-Pk%y7fcAkpj5mV zx|dnfkJSOcK2U2H2o>qRYLp?~tNnSuHf|T*v`o|)wDZ_#pJB#|$MxA|6AM`SL#;Tw z56z!$+jprNq<464bR6zT4g-IOpZwZ=B>($~^n7V4O__>RNTIbdcc=*Qw}ioL@^m zqR9V7ad49o5NY}p0|zU#w^O1@Zmr{Z?WotaLGaW|u^JW>K4v8@r-&N0&4;Hj9G}Ew}vNA34 z2(oZzsaZDn%n48waMKBy-AiH~mvk}~65R;R3o{Uvs$)Q9S=^N$I6~Zvj#J?oJvu_E z=JpQwBD2M&>9971zB*RD51#VWMDVG4?GwmS`uLIWYpNZebpa;i=9aAUZDumE*?*j0 z^@O)({OIuWdM~YH(Vi-bsD*ZbCOwa}Bg8$epDl8ux9NG2Ts$(@ROvILTtZ+%=vfR< zDvu$ODgFl<9JXcy=$~CQsVVadqh+6YT2kecEbOy?E z>vv~;A@jk3oDL7_DuYNP&y`guwf->)gakoWYAw9F&=d&1dBDD95T!z&QQj%ksc`J7 zbXiNcXR#njbABc2CjC1n#{aRqu9Nv=wjMcSw$6$#heRxD4*WZ+4xs@bSM6m*`&R9_ zz8K~7b_v@ISsCYy{x)ii{$5;_X8X{Az9qWLG2nij9gB{G@Q(hBhXj=e@G0wX!$bH6OAfW*kgqVY)<=E@Cim zHzoSXZ*ib19&Jk$H~z<($*#c6h^@4qlG0`IS3T3Ip+u3S{_7&I{4qfay_)8%E)##o zIF0A+cQctw-Gq)yJ_w1LBEERNvC>#!xj)N1kY~(iLsPGl*=~)@12RRJzk<8{L_iYY zZl-nxZ&Z(J$9_>!*B;8riP}_JHYyEuozSZSg^%~*l(e@B;x=x5vgE;uGexjcxK%&8 zzcg@S$(wt-%bk9N-XVotk#~r3#gTp^$t#YWO2fh#*~DxejI;YB%)D}&-s6*@%c!Ni z@F(}u`w#j$LuMP5Mtar+XB)w7?h5hH2TL);FIoX_+_No3Md#}8$7wD2TN-$?qNd*^{6`#hczc${@!ZVFLb>SCAMClX?nKe z^C6WrD`i1+kR@kKkma~aYndDVcQtV*Q%nhM4=sj&A|5qeKU z$n`j$salq=4V-@3ZRE@9dXuumgxh`exoYXo8`X`W0(|;`Xw`UM>A3f`@4F;7y(#%} z;l@Exwc+uGEZfP&Rc*eKaYiG4l=5<}hHQJSur9Y;4W=GB9iiQgu&6Gsks0A+Uo*p; z<+3kT*+(*Q*xW3gr+ISok8{>rbGw{fr74X+1{!V!oEAv_c&EP-w3(^%H9-81CO$(% zwYZTc>%liJ@g)gw@ulAs6~;!t;1vkr-OU=i4SSDt5w*fw5|3X{Y`ou$ZhGP-In#P; zXx=MSa&(w==&DU2=j=+pvlS6YdW11}?wI0+|FkOdsnOV~?a@6}b1>)Ew zj8FB#qKzBh=rddj*;DJzrCemx;S)I~h#UU|G!D}H3hSC3GZ5ZoxfF;~RD~BwiXZdG zQGD`eI;F(E?t*^G+Igx+?r)gGbW7F2=cx{*v05;^QEjvsepi)Gm;?Abs;g`aZX_di ztW8;~R{65~NOrL8L5dJ7bb zV*a$od|GiXLRoAT}J>mbU zJB7>7_9+UbcTb|LBDo-#J^&Qw;DG0a?MZ6!ID6JZ2cKDXrY|qQx4eDmY4ITLro;7T zudrD}$jh3ts!*X^7BdxxfZ4YcpWO9lRVjVDXpFWfb^@%02C1yoR#vNwnKt67+Y~d) z$>+5l94uPow+5KA)EvAm?#C@v5w@wmli1ayv^+Ntf4cGV=o+*}4qoc*syjRozCm?e zO?zT1xiblsti!JtxKY|&UvTeM$H&C+ZC&Aa0Ty@)0}L= z5&ht4uk55)e{^MMdq)OnJzms+LSGdF63bQ?xcG_``xG&Nmgr;^V~&=#s-QpB5d%nT z2fq+@WnG`2bYw{Pk5E_yoQHmfv)B~XEA*x8_IVLQoj6jW0G?QS{xoR-E< z?KIL(awa;gBk$g;Coi96asCYLs$dUhGRd9r@b;OzTSL5#Uy0{AL{yw?PKKr73GFpe zQ=+u=<^i&1Un_kfUJsI_)@41_ne^oWQfFc9$G6A)COi$x?H1=}50K>2C2q?% zXwb|Db~1e2{M2rL|7+btTz(O?=jNwD;0r!%P2Jm*-7%Jnm}mCleZNt`HNJ)%IZOIq zK+obs>fh|`$G6=I5n$M35I&*eb!k3j)t;lSN#c+A}V&#D)8PWb7gVjcK4M-~S zLZT^O5krjUS49VKEIrGp3t){*jh62y$VW010z#v=mx&IIyZ}Ka27$s8QU7T%)u}sR z)ca4HnS2b!sKe#fNtX+jX%2<@#NVJo?OqJaHbIY!R_yfiBK+#tbxyd}c~6p6bbN27gJvUI!2Tv1Ys`5*yDqV!z4#WX zPKQ+0Et85kn7u*{SxARX6^SUZpiS@0^~a{&kYw7w%~F*j&;aqjs1ObwpD*%D2d*Kf zL}!I_(gJl4s})=W^#`#ZNqQGx0mNwHe^K;MSM+=s8nw5!f+#$CZ|EI5qX2`$$j)en$(;i1FjnUTFJvILrekZTfMly9a zWs`OekQD{3B12h#*8x3I9+K3@kxlumqJ)EZa@(l^1ph<*X5{f-5%C(xrxhi};thbG z7yQovDlXi=o$_rAZz*RhX#qy`H&1!G5tp?KfJ{I>s<`XR4U4pmm93%8Djti8AeQC8Gcz7*vN=|zMO;}OxW zmmr38Qkgb~Dx{NP?62@?O)J1z!eoGN=U*Hr=zz%pJo9+iCQqF50e|(NrP=;(!R>Ea zP>bArMBDS%$p1~6vqV09=gs*}%mC;o=d0xIHHP5cpRx^ws*MP0P$iz;9n4T_W}NCnPla2NYW$&{{IO;2f!Off`@sG z81Ls>086Eb81H=c<4C(Pz@Dpt{T{knOXl7n<@>TzGz!!F_g`VfY_@SoWu${~VZY*R7A>*b3FjXp0HBAlU9WZAq8-M^Db7 zW21P9V%#Or@(BTCmIBTnfeyJ*e^~{qLVNgBVHe^V_<PpMM|l-|z)cUPO7HBvUuVE^gvDw^bzYJaI?-FqkdRP)eHfTRU6@|Zc!IFsXkQw_sGvFSRU#TZ4E`5VE)H{437Il!ufxEQY(Qrr1&$u zllLe+?IJ!wbCsAm^Nv4&1_f4A5C84Y);il=TSSmKJU=d%R1yPW!hjU@oQ) z=of=`#`;k_5qvlS_hs<{$B6MhJ`25x#s`hK8-Jky%>BrqtiAj210YU=L7u_s)yD*J z$3SEr&J+4E)|Z#6P% zEl#QMJ`9geyu#h}i7$mSZ%+A51wZQg+}OMCw`_Q3I6AiaNrE~Y z|5sHtFz`8Nz>efuRb~8l4(QHd@Q-X7xNNXCda?iDcEra8kV|;ti=U=^50fpVR#Eho zsWLLFlk~lsn0vh5&cFLC`G8!Oa_G49%GaVm%RA`Haf$*k+*kj1YhCgk#@->0+JK=? zckmUui&G!LGTO!4M8hL4tB)a*KkkYTZsm=G*T$2FZ~mDTb~?D(;^p2syIO6K9PY4t zS`Fy65)lCTF=k{HnD9Qx`-Um(n+-F4OuJ<*|f@IyG(=}!O zmX*$&BPIQpih~bigM7}{AH0$Hm@5;ESzqX1>aR3VQn=_6HaB<$lX4!I6%N!x=?cF? zPiGbwL*F@m{2lP;zOiTC@6bQX--M0tei?b!?D)sc_)J$(>SX5|!r;4JQf|Opo!#V1 zgTdVTpx-6Wc8cHXhX(xCnJg&|2k)IdtKV+WJCF~bJ$^R{c@OmpDZc4_*8`S*#|f9* zeK%$3+^^^0t~hMYWux!i+LLz4+OQ|;ry6tFE`cNMidPl8(Yxlg2F?&kkkj;g%kEmc z52g=x7A-?vFI>aHJHN_UY71P?U>_Ai7j`Xc6>E=ND|6eR0o%KRu5ih#sX4@G#fOi6 zGw)mMTHLN}AqbaujCYF9a)W)%MuYwJ=W@?BIC3TfJa7xH8_+w_$NNbKTtR1zEi;SQ zp2dU37x3auMfUwUKZ6rRMc=HA+`et7=Rn)e!J^+mdnmlI;iNV0h;mc$foE^4>6v0M ztlRhd=4}H515bm`uJ3!-EVug4%8uQSTh}l8Cm%F~?~661Zno!MJ=t%*7#)sq!bu-V z*p4}M=9B(l5w$gJw(pIOp`wupy25$xH{f$iA2!D|hz(ga+OHT;$%{67j!!1p*&Hu@ zK48Jt3;B7^cN--YutHiIuU1h>*`neW7~HA^>vdy}*mfPigBDC+GRxfpy`NDcK&v3R z(dl*+x=A|%%e_{{$zQY_(Qd-}TyHoHTUPB5hiWeRhhg{%v54TP||sC)}6s{L-1DZazt@Rt`bF;HNT6#Y^ z{j1`_TknyP>Ui4c_@sI!Q;|xhHp}DS@dFLt8EAF=)ekD*(z(|;UjdhJP~j=Po432S z8A`2tC-K^H!D$ig|6xY4!2=;Te>t+_X#;)|K61HwQdwSUbv=K{!ag$ZHU6?x+NNP8 zg&He;17Y}mMf+fQDYR`gm`@^N@hau4>I{>C6VMWPC-6plI0 zpCS|8hsb}kEt*+uig_=#$W@zFhyK_bJx8kR^umJNZBX^u3-?ZOM~7WUmJxA>ato&J z#+MOP(chhHEkdpCN;u5a>R6fw$hJiJJ1WjHi$>Y@UsgYzhWS4so;4Lsw;d*XT*8z2 zoUJA6b$({x;{oqoxh#!u#m0Z!r(Z92H`lfZXNS(c9#WHC9QAOdt(l*d3Xr$%+_%># zleQkbtcn+&(G=?S&s-zR`dM#SFy1115rQm+?3>$-Xm+{nrwa&F6XpEiH@ zgG|WR^0SXL``3jZWFT4h1gTU3VXmw)g^tIWfH?&h;TH*6<6oR*TOgL5EW)6=5{Vq z0}oD%(1AFxiba}sc=^74b_r5cJN$!f1un+l1mW`Wm!jyy#lZ?wkVW8$T0ntSx5s1J z>JL*t%2GpOsSV-Iul`88=ZEA{n;BH`{Gk;!#lBknh8tM;<0+~~Z6;-+*KeYhiF*E3 z%IL)>=Wh-JO!sZxeW^Ej^0hqE{l4nE^1R|9BWqA#>5EK`@8wbkdWPrLZ?8sOF{`8J zo?c9hv=ed1)Dscf3n~gUWaAcB;Gf|XVJ1^2*Wqt;r7R7zs-BfweV?Y*Fe!QII9rfL zK#|1$!+AsC=G}J`N4I%YNZyJto76?J&>33KTkVWmJzsoYZmP5Re5&O8bcsL6s>H0^ zsuTx5TR<*0=thdeuEUgk_nS8J0?$JC1NPhI9mIuPcIoXj9h3-<1|?x}vgG>`9T zK;i+j?K=?;7cg2U`XE+<;ySBSfyq0Z>Ivu2S>d)%1O}5*c)pSuXQ999p0rBR(RXVEsK?2v# z{tTwL{Oz;eyJB|@^@;VmF1p94DHR|SJ1DD3iBDGUWDgM^HkC9;q_}Rn3h58Trt>Pe z;979*a*5SCP8AnRM!a?d?zaTa_qlEl-7RWk`u!WS;c8Rb_*Vr*INw`BCd!7$4^>m93 zGhka}93FwblWc3VvY~SaYFYu~0PX(hA-`Igz<4D;)l6TDZ8{3-JWIKE%`@Cbp{oBY zm%CkF`F(GP&ExLbZ<3?&O?DG-lxdI1*mNGQ?~*9D67LrDIE?-baa2V^ps`gYY>MuXm!z&2O})6^>YR&!3>EAdD|Ma!}JRll^jla zbRem-!*=yFpM6Pr797*YvT|5UBw`2S<$N0xjfVis;M}j=2p!>LFN^2@2ht-MfQU@whZ;Hf=S%Gz~Gqn6`hzJih4d zRW@heJ~~rt(XP}k)^7Oc8wOW^M+T*;&ntPouPVi%zCP>1{JDqvn1R4S4N#@f$0w